Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

GBX.ru _ GP2X _ Уникод + fenix

Автор: EugeneP Суббота, 24 октября 2009, 20:06

Мне нравится язык FENIX, и не мне одному, но у этого языка есть серёзный минус - он не умеет работать с не латинскими шрифтами.
Боль от осознания этого факта толкнула меня на написание дополнения к фениксу, которое бы позволило честно рендерить трутайп на фениксовскую поверхность.

excl.gif доступна третья версия, переработанная и дополненная
excl.gif доступна вторая версия, переработанная и дополненная

Оно работает, как ни странно.
Присоединённое изображение

Расширение truettf - обёртка над SDL_ttf. Экспортирует функции:

load_truettf( filename, fontsize );
unload_truettf( fontID );
write_truettf( file, graph, fontID, x, y, options, text );
Значения флагов options:
TT_ENC_ASCII, TT_ENC_UTF8, TT_ALIGN_H_CENTER, TT_ALIGN_H_LEFT, TT_ALIGN_H_RIGHT, TT_ALIGN_V_MIDDLE, TT_ALIGN_V_TOP, TT_ALIGN_V_BOTTOM, TT_NEW_MAP

----
Присоединённый файл  truettf_0.3.tar.gz ( 33.56кб ) Кол-во скачиваний: 129

Внутри архива исходник, пример, бинарники под i386linux и Виз (ufxi, а не fix !). Пример не запустится без шрифтов! Приложите свои любимые и подправте sample.prg.

Ограничение:
Феникс корёжит строки зашитые в исходник при компиляции, поэтому строки нужно зачитывать из внешних файлов (см. прмер.)

Просьба к братьям по разуму:
Сделайте мэйк-файл или скрипт для винды. Ну и предложения и пожелания, если это кому-то кроме меня надо smile.gif

Автор: Hahahoj Суббота, 24 октября 2009, 20:12

Виндовая кодировка cp1251, имхо, лучше. Поскольку намного быстрее обрабатывается, имеет фиксированный размер символа в один байт, и изначально содержит все нужные русскому человеку буковки и символы. Для испанцев же и прочих французов достаточно просто подгрузить их родной фонт.Единственная трабла - к символам диапазона 128-255 некоторые бейсикообразные языки привязывают служебные токены, а не символы.

Автор: EugeneP Суббота, 24 октября 2009, 20:15

Есть ещё китайцы smile.gif Я просто стторонник универсальных решений. Возможность иснользовать нативную кодировку шрифта сделаю когда высплюсь.

Автор: Hahahoj Суббота, 24 октября 2009, 20:16

Китайцы на Визе меня не интересуют. Они неплохо заботятся о себе сами. И думаю им будет много понятнее мой английский, чем мой китайский.

Автор: radzh Воскресенье, 25 октября 2009, 10:10

Брр, XXI век на дворе, куда щас без уникода? Экономия на спичках до добра не доводит.

Автор: Hahahoj Воскресенье, 25 октября 2009, 10:24

И как мы без него живем и жили, просто не понятно...

Автор: radzh Воскресенье, 25 октября 2009, 10:31

Логично. Зачем мы вообще с деревьев слезли?..

Автор: Hahahoj Воскресенье, 25 октября 2009, 11:38

Если следовать твоей логике, то 90% населения еще с них не слезло.

Автор: radzh Воскресенье, 25 октября 2009, 11:57

Я не готов оперировать процентами. Зато я знаю, что "Войну и мир" в однобайтной кодировке не запишешь.

Автор: Hahahoj Воскресенье, 25 октября 2009, 12:06

Как раз её в однобайтной кодировке и запишешь и прочитаешь беспроблемнее всего. И много шустрее потому что вместо плавающего размера символа (один/два байта) или фиксированного на два - будет фиксированный однобайтный и соответственно и памяти и ресурсов процессора будет жраться на обработку много меньше.

Автор: radzh Воскресенье, 25 октября 2009, 12:48

(с тяжким вздохом) Не запишешь. Не хватит символов для французской диакритики.
Хотя, в принципе, можно использовать даже шестибитную кодировку... дедам нашим хватало - и внукам нашим хватит.

Автор: Hahahoj Воскресенье, 25 октября 2009, 14:41

Нефиг было Толстому выпендриваться 8).
-- Еh bien, mon prince. Genes et Lucques ne sont plus que des apanages,
des поместья, de la famille Buonaparte. Non, je vous previens, que si vous
ne me dites pas, que nous avons la guerre, si vous vous permettez encore de
pallier toutes les infamies, toutes les atrocites de cet Antichrist (ma
parole, j'y crois) -- je ne vous connais plus, vous n'etes plus mon ami,
vous n'etes plus мой верный раб, comme vous dites. [1] Ну,
здравствуйте, здравствуйте. Je vois que je vous fais peur, [2]
садитесь и рассказывайте.

Для меня читается так же как оригинал. Поскольку эту муть я даже не читаю, а иду сразу по сноске .
Но согласен, бывают моменты, когда третий язык важен. Но не в игровых и системных проектах, имхо. И не в качестве дополнительного тормоза, к примеру, читалки.

Автор: Chintoi Воскресенье, 25 октября 2009, 17:14

QUOTE (Hahahoj @ Воскресенье, 25 октября 2009, 15:41)
Нефиг было Толстому выпендриваться 8).
    -- Еh bien, mon prince. Genes et Lucques ne sont plus que des apanages,
des поместья, de la famille Buonaparte.  Non, je  vous previens, que si vous
ne  me dites pas, que nous avons la guerre, si vous vous permettez encore de
pallier  toutes les infamies, toutes les  atrocites  de cet  Antichrist  (ma
parole, j'y  crois) -- je  ne  vous  connais plus, vous n'etes plus mon ami,
vous n'etes  plus  мой  верный  раб,  comme  vous  dites.  [1]  Ну,
здравствуйте, здравствуйте.  Je vois  que  je  vous fais  peur, [2]
садитесь и рассказывайте.

Для меня читается так  же как оригинал. Поскольку эту муть я даже не читаю, а иду сразу по сноске .
Но согласен, бывают моменты, когда третий язык важен. Но не в игровых и системных проектах, имхо. И не в качестве дополнительного тормоза, к примеру, читалки.
*

Это все не мешает моему 30$ плееру отображать названия файлов и тэги в юникоде и не тормозить. А сонивскою 1000$ читалку, которую программировали рассуждая как ты, нужно прошивать самодельной прошивкой и терять на нее гарантию

Автор: radzh Воскресенье, 25 октября 2009, 17:40

smile.gif
Машины для людей, не наоборот.

P.S.: http://ithkuil.0pk.ru/viewtopic.php?id=2 smile.gif

Автор: EugeneP Воскресенье, 25 октября 2009, 21:24

Внёс пару исправлений.
а) Теперь оно работает как задумывалось в начале.
б) С флагом TT_ENC_ASCII можно использовать любую однобайтную кодировку, подготовив предварительно соответствующий TTF
Подробнее см. головной топик.

P.S.
Объём кода, реализующий эти изменения, примерно раза в четыре меньше объёма флуда в этом топике.

Автор: quasist Воскресенье, 25 октября 2009, 22:34

QUOTE (EugeneP @ Воскресенье, 25 октября 2009, 22:24)
Объём кода, реализующий эти изменения, примерно раза в четыре меньше объёма флуда в этом топике.
*

Любой нафлудивший заставляет EugeneP добавлять в код по строчке... психологическая зависимость

Автор: Hahahoj Понедельник, 26 октября 2009, 00:50

QUOTE (Chintoi @ Воскресенье, 25 октября 2009, 17:14)
Это все не мешает моему 30$ плееру отображать названия файлов и тэги в юникоде и не тормозить. А сонивскою 1000$ читалку, которую программировали рассуждая как ты, нужно прошивать самодельной прошивкой и терять на нее гарантию

1) Если не знаем про что разговор - молчим и не лезем в обсуждение. Разговор про конкретные тормоза в конкретных читалках при использовании уникодных шрифтов на GP2X (да, возможно на Визе тормозов нет, но на Ф-ках при использовании не моноширинных не кирилических шрифтов они довольно ощутимые). В твоем же случае достаточно поменять фонт через инишку, чтобы всё отображалось корректно на специально подобранный, или в тексте, который итак внешний вшить тег смены шрифта, повесив его на какой-нибудь неиспользуемый символ.
2) Также не вижу необходимости переконверчивать свои кирилические текстовые библиотеки в уникод. Хоть и не долго, но напрягает.
3) Это почти Бейсик, который не так производителен, как Сишка. А если тормозит Сишка с использованием того же фритайпа, то что будет с Бейсиком?
В общем, - отображать строчку текста - это пожалуйста, но дайте плиз возможность отображать без тормозов большой массив текста, который не будет занимать к тому же двойного размера в памяти.

Евгений, спасибо.

Автор: EugeneP Понедельник, 26 октября 2009, 06:37

QUOTE (quasist @ Понедельник, 26 октября 2009, 01:34)
Любой нафлудивший заставляет EugeneP добавлять в код по строчке...  психологическая зависимость
*

та, та. заставляит.
тока я всё равно сборку под винду не сделаю. не умею, а учиться влом. tongue.gif

Автор: Hahahoj Понедельник, 26 октября 2009, 06:47

Разгребу Боксы в ремонте и помогу чем могу.

fxdll.h - это с фокскитовского тулчейна?

Автор: EugeneP Понедельник, 26 октября 2009, 12:53

QUOTE (Hahahoj @ Понедельник, 26 октября 2009, 09:47)
fxdll.h - это с фокскитовского тулчейна?
*

Это в исходниках феникса хранится. Содержит макросы для создания расширений. глянь make-it.sh

Для сборки расширений нужны исодники феникса.

Автор: Hahahoj Понедельник, 26 октября 2009, 13:14

Ссылку кинь на использованную версию сорцев. Их несколько.

Автор: EugeneP Понедельник, 26 октября 2009, 13:35

последний: fenix-0.92a
http://sourceforge.net/projects/fenix/files/Fenix/0.92a/fenix092a-src-release.tgz/download
Вообще любой начиная с 0.80 должен подойти.

Ну вот, отловил баги, добавил фичи для удобства - практически готово smile.gif
Осталось доку написать, нормальнй Makefile сделать и можно выкладывать на архив или куда ещё. И сборку для винды конечно.

Из фич которые бы мне самому хотелось, но не сделал ибо долго:
- поддержка LTR и BiDi (это SDL не умеет)
- сглаживание кромки при рендере aka AA
С годами сделаю обязательно smile.gif