Restore Font Manager

Наверное, вы не ждали, что в спектрумистском дискмаге когда-нибудь будете читать о программе на Java — но такова эпоха. Restore Font Manager к тому же совершенно дурацки названная программа, которая называется так, как называется, только потому, что более умного названия я не придумал. Это не менеджер шрифтов, а редактор, и это не шрифты только для дискмага RESTORE — теоретически их может использовать кто угодно, где угодно. Но пойдём красиво с начала...

Всё началось ещё в 2022-м, когда во время ByteFestа я доделывал второй номер дискмага и с ужасом обнаружил, что в словацком есть две разные буквы L, отмеченные диакритикой. Вопреки половине своих генов и детству, проведённому в общем государстве, письменным словацким я никогда особо не занимался, и хоть несколько книг на этом братском языке прочитал — милосердная нервная система явно этот тонкий отличий отфильтровала. Но отфильтровать его в дискмаге было нельзя: как ни странно, словацкие авторы не боятся использовать оба знака там, где родной язык велит.

Только RESTORE в то время использовал шрифт из Desktopа и печатную рутину, производную от той, что на пятьдесят третьей странице книги Assembler a ZX Spectrum II. Эта комбинация не даёт достаточно места для полной чешской и словацкой знаковой системы одновременно. Хотя одним байтом можно закодировать 256 разных знаков, фактически для печатаемых знаков используются лишь коды 32–157; ниже — специальные знаки, выше — в книге ключевые слова BASIC (для которых там используется ROM-рутина), а в Desktopе — его собственные коды.

Я же в журнале хочу иметь тексты и на чешском, и на словацком, поэтому не оставалось ничего, кроме как перейти на какую-нибудь кодировку, которая это потянет — например на ISO-8859-2. Править печатную рутину так, чтобы она умела обрабатывать что угодно от 0 до 255, была та более простая часть; затем оставалось худшее — сделать себе шрифт.

Поскольку мне не хотелось это как-то мастерить, и я думал, что инструмент для правки шрифта может пригодиться и когда-нибудь в будущем — раз уж печатная рутина уже поправлена, — и поскольку хотел чуть освежить двадцатилетние знания Java, начал в прошлом ноябре делать Restore Font Manager. Java хоть никогда и не относилась к моим любимым чашкам кофе (ха-ха), но в вузах я её набрал примерно пять семестров, а эти языки всё равно почти все одинаковые — так почему нет?

Когда я по этому языку сдавал последний зачёт, существовали два способа писать программы с GUI: более старый через Abstract Window Toolkit (AWT) и более новый через библиотеку Swing. Быстрый пролёт через двадцать лет дальнейшего развития дал информацию, что сегодня оба уже passé — с 2008-го используется библиотека JavaFX. Так что мне не пришлось мучиться тем, что Swing я никогда не выучил: AWT и так универсальнее — должно бежать на всём, на чём когда-либо существовала Java. И вот я выдолбил из глубин собственной памяти и Интернета что и как — и взялся. Чтобы ни мне как автору, ни возможному пользователю не мучиться ничем сложным, весь пользовательский интерфейс Restore Font Managerа основан на обыкновенных кнопках.

Главное окно разделено на три части:

  • Слева — 256 фиолетовых кнопок с номерами 0–255 в матрице 16×16 знаков. Нажатием одной из них выбираете для правки знак с соответствующим кодом.

  • Посередине окна — вертикально сверху вниз восемь кнопок. Первые две бирюзовые: одна стирает текущий правимый знак, вторая умеет показать в отдельном окне весь шрифт. Затем две тройки кнопок, работающие с двумя буферами обмена. У одного буфера кнопки оранжевые, у другого — красные; эти кнопки служат для копирования в буфер, из буфера и очистки буфера. Если, как и я, вам нужно перетасовать уже существующие определения знаков так, чтобы соответствовали другой кодовой странице — это именно то, что ищете.

  • Справа — матрица 8×12 светло-жёлтых кнопок, представляющих пиксели данного знака: когда кнопку нажмёте — чернеет, что значит, что пиксель в данном знаке будет отображён; нажмёте снова — светлеет, пиксель отображён не будет. Над этой матрицей — ряд из восьми фиолетовых кнопок, которыми задаётся ширина знака для пропорциональной печати.

Интерфейс я создавал в основном сам для себя, тем не менее сделать в нём из desktop-шрифта шрифт в ISO-8859-2 было вопросом примерно получаса перетасовки знаков туда-сюда и часа рисования недостающих — так что, возможно, он и не такой уж тупой. Чтобы вообще работать с desktop-шрифтом, в Restore Font Manager входит и возможность напрямую открыть desktop-шрифт; так же можно загружать фиксированные шрифты в формате шрифта из ROM и, разумеется, открывать и сохранять шрифт в формате для поправленной печатной рутины.

Хотя код наверняка далёк от совершенства, я сделал Restore Font Manager open-source. Найдёте его на GitHubе: https://github.com/logout128/rfm/ Репозиторий до сих пор был приватным; по случаю выхода RESTORE, однако, публикую. В заключение такая юмористическая мелочь, которая лишь дорисовывает, насколько нереально есть и всегда было мотто Java «Write once, run anywhere» — Restore Font Manager хоть и запускается, но не работает в Mac OS X.

Почему?

Графический интерфейс AWT в середине 90-х писался так, что на каждой системе для отрисовки использует нативные элементы той системы. Это быстро, и программы на Java так выглядели так же, как остальной софт данной платформы. Swing, пришедший в время, когда у всех было ощущение, что вычислительной мощности раздавать, выбрал обратный подход — элементы GUI рисует прямо Java, так что программы выглядят на всех системах одинаково, однако вычислительно это более тяжёлый подход. Я, как уже сказано, выбрал AWT — и угадайте что? Mac OS X (минимум в версиях 10.4 и 10.5, где я пробовал) не позволяет окрашивать кнопки: что ни настраивайте — кнопки всегда полупрозрачно-синие. Можете так кликать по пикселям в правой части окна сколько угодно, пока кнопка мыши выдержит — результат, однако, не увидите.

Только для RESTORE написал Logout.

Поделитесь вашим мнением о статье