[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

XLC_LOCALE. Окончание.




  Остается секция XLC_FONTSET.

  Сразу скажу, что с этой частью я практически не разбирался.
Поэтому синтаксис могу рассказать точно, а вот интерпретация -  в основном
мои догадки.

  Секция состоит из блоков "описания фонт-сетов" - fs<цифра> {...}
  В каждом блоке обязательно должна быть пара параметров

charset
font
  Судя по всему, указывает - какой чарсет - каким "фонтом" можно рисовать.
Здесь charset - имя "внутреннего" чарсета, который встречается в описаниях
кодесетов. А в font опять же пишется название чарсета, но это - то, что
указывается в имени фонта.
  То есть, вполне может быть такое сочетание
charset		ISO8859-1:GL
font		KOI8-R:GL
  Что означает, что - символ принадлежащий чарсету iso8859-1, если он из
левой половины таблицы, то его вполне можно рисовать фонтом, у которого
encoding - koi8-r (естественно, левой же половиной фонта).

  Поэтому, как правило, для кодировок типа iso8859 описываются два набора вида
fs0 {
  charset 	ISO8859-1:GL
  font		KOI8-R:GR; ISO8859-1:GL
}
fs1 {
  charset	KOI8-R:GR
  font		KOI8-R:GR
}
  Напомню, что в этом же XLC_LOCALE все символы "раскидываются" на два
кодесета. (Кстати, если не ошибаюсь, фонтсеты как правило соответствуют
кодесетам. То есть, сколько кодесетов, столько и фонтсетов. Кодесеты
определяяют все возможные наборы кодов. А фонтсеты - способ вывода для
каждого кодесета. Хотя связь между конкретным кодесетом и конкретным фонтсетом
может быть неочевидная).
  Итак. В XLC_LOCALE для кодировок типа iso8859 существуют два кодесета - GL
и GR. Причем первый классифицирует свои коды как char'ы чарсета ISO8859-1:GL,
а второй - как char'ы из соответствующего национального чарсета. Например -
KOI8-R:GR.
  Соответственно, вышеуказанные фонтсеты говорят о том, что
 - символы из кодесета GR надо выводить фонтом у которого encoding - koi8-r
 - а символы из GL можно рисовать как тем же фонтом, тоак и фонтами с
encoding iso8859-1 (хотя можно было бы и любым другим)

  Ну и еще немного о синтаксисе.

Со словом charset может быть связан блок, в которм может быть два слова
name 
  Понятно, что это то же самое имя, которое просто после charset.
udc_area	<диапазон>
  Как это интерпретируется - не знаю. Могу сказать только, что udc -
User Defined Characters.

  А слово font может быть расширено блоком со словами

primary		<encoding> [<диапазон>]
substitute	<encoding> [<диапазон>]
vertical_map	<encoding> [<диапазон>]
vertical_rotate	"all" или <диапазон>

  Что это означает - примерно можно догадаться. Здесь encoding - то, что
указано в имени фонта. Указание диапазона может отсутствовать.

  Чуть не забыл, что в самой секции XLC_FONTSET помимо блоков fs может быть
еще две инструкции.

on_demand_loading	<true/false>
  Сами догадайтесь - чего loading и что является demand'ом.

object_name		"generic"|"default"
  А вот это очень замечательная строчка. Она позволяет управлять работой Xlib.
Дело в том, что в Xlib есть несколько наборов "конвертеров" (между различными
представлениями - mb, wc, ct).

default - очень простой, для кодировок типа iso8859 (как я уже говорил, для
таких кодировок практически не отличаются mb, wc и ct).
generic - "общие" конверторы для самых замысловатых систем кодирования.
Естественно, generic - более "тежеловесный" и более "глюкавый".

  Так вот, object_name позволяют явно указать в XLC_LOCALE - какие конверторы
использовать для этой локали - "тупой, но шустрый" default или "умный, но
медленный" generic.

  К сожалению, этот параметр используется только "подсистемой вывода" -
output methods. А для input methods такого ключика не предусмотрено.
А он там так нужен! "Но это уже другая история..." :-)

  Кстати, хочу напомнить, что вся эта секция XLC_LOCALE имеет смысл только
для набора фонтов связанных с Output Method/Output Context.
  То есть их используют процедуры типа X[mb|wc]DrawString и X[mb|wc]DrawText,
которые ссылаются на соответствующий OC.

  "Старые" функции для вывода буковок - XDrawString, XDrawText являются
"независимыми от locale". То есть, для них эта секция смысла не имеет.
И они рисуют тем фонтом, который "первый попадется" (если только в "маске
имени фонта" не указан явно енкодинг).
  Вот почему рекомендуется директорию с кириллическими фонтами ставить первой
в font path.

  На этом все. Больше не буду вас "загружать". Если есть вопросы - попытаюсь
ответить.
-- 
 Ivan U. Pascal         |   e-mail: pascal@tsu.ru
   Administrator of     |   Tomsk State University
     University Network |       Tomsk, Russia