Где именно в ОС Android рендерится текст?

Позвольте мне сначала сказать, чего я пытаюсь достичь:

Чтобы создать патч для ОС Android, чтобы она могла правильно отображать арабский/иврит. Оба этих языка используют написание справа налево (RTL), и в их письме используются соединенные буквы/глифы (в отличие от латинского алфавита, в котором используются отдельные буквы).

Пример:

Арабское слово «автомобиль»:

Поделиться

Отдельные буквы выглядят так:

Вопросы и ответы

Как видите, каждая буква соединяется с другой буквой по-разному, в зависимости от того, что ей предшествует и что следует за ней. Хорошо, хватит уроков языка :) Мой вопрос:

Какой двоичный файл/класс в Android мне нужно взломать, чтобы включить эту функцию?

Другой способ выразить это; если вы хотите, чтобы каждый экземпляр «x» отображался как «y» во всей системе, с каким двоичным файлом/классом вам нужно было бы вмешиваться?

Исходный код доступен для просмотра на GitHub: http://github.com/android/.

Я думаю, что это может быть где-то под C/C++ platform_system_core или их пользовательской JVM platfom_dalvik.

Просто для ясности: шрифт не является проблемой, поскольку вы можете удалить арабские/ивритские шрифты в качестве резервных шрифтов, и они будут отображаться, хотя и в дискретной форме.

Ваша помощь будет очень признательна :)


person Community    schedule 15.01.2010    source источник


Ответы (3)


см. external/skia в извлеченном исходном дереве. это графическая библиотека skia, которая в конечном счете отвечает за рендеринг шрифтов.

person Elliott Hughes    schedule 17.01.2010

Помните, что проблема сложнее, чем модификация базового графического движка.

Если вы примените изменение формы в Skia, вы можете столкнуться с проблемами, если ширина линий изменится (происходит, когда لا заменяет ل, за которым следует ا). Это связано с тем, что изменение арабского языка может также изменить последовательность букв, а Скиа, как я вижу, пытается действовать пассивно в отношении содержания текста. Он просто выводит буквы на устройство отображения как есть.

Теперь худшая проблема на самом деле в самом Android. Арабский/иврит требует изменения положения текста BiDi, что очень глупо в Android и не может справиться с очень простыми проблемами.

Еще плохие новости? Шрифт Android, Droid, не содержит глифов арабского или иврита. Если только мы не рутируем устройство и не заменяем его другим шрифтом, вместо арабских букв отображаются квадраты :)

Платформа в целом еще далека от того, чтобы справляться с каким-либо языком с письмом справа налево, особенно с арабским.

Как видите, правильная модификация для RTL-языков есть не только в Skia....

person Tareq Sha    schedule 05.03.2010

Посмотрите, поможет ли это:

http://blog.amr-gawish.com/39/arabic-language-in-android/

person OscarRyz    schedule 16.01.2010
comment
Спасибо за помощь. Предоставленная вами ссылка будет правильно отображать текст в приложении, хотя она является частью решения. Я хочу реализовать это на системном уровне, чтобы он правильно отображался ДО достижения или ПОСЛЕ выхода из любых вызовов приложения. - person ; 16.01.2010
comment
Вау!.. Когда вы это сделаете, пожалуйста, вернитесь и опубликуйте свой собственный ответ, не так ли? Звучит безумно интересно - person OscarRyz; 16.01.2010
comment
Это включает в себя изменение пакета platform/base.git, эффективно перекомпилируя большую часть системы Android. Результатом является практически мод системы Android (например, CyanogenMod), если только вы не знаете, какие jar-библиотеки заменить. - person Tareq Sha; 05.03.2010