Какие символы шрифта отображаются, если они не являются частью Unicode - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь понять анатомию файла шрифта, и задаюсь вопросом о том, как глифы отображаются на символы клавиатуры .

Как часть этого, мне также интересно, что вы делаетеесли у вас есть глифы шрифтов, которые не являются частью юникода, например, с FontAwesome icons .FontAwesome использует их в CSS следующим образом:

.fa4-clock-o:before {
  content: "\f017";
}

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

Хотите знать, если бы мне пришлось выполнить одно из следующих действий:

  • Создайте другой шрифт, который каким-то образом сопоставит их с кодами клавиш ALT (не уверен, как коды ALT работают в определении шрифта).
  • Создайте пользовательский инструмент клавиатуры, который помещает правильный класс CSS в div (в основном вообще не используйте файл шрифта / сопоставление символов, просто создайте инструмент клавиатуры с нуля).
  • Какой-то другой подход.

Интересно, можно ли объяснить, как это сделать на среднем уровне детализации (то есть мне не обязательно знать детали реализации, как это сделать?пока, если это не просто).

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Глифы не «сопоставляются с символами клавиатуры».Скорее наоборот, и это происходит в несколько этапов:

  1. Ваш контроллер клавиатуры воспринимает физические сигналы, генерируемые движением клавиш, преобразует их в сканкоды , а затем отправляет их на ваш компьютер.
  2. Затем компонент вашей операционной системы, отвечающий за раскладку клавиатуры, преобразует коды сканирования в кодовые точки символов.Например, в моей текущей операционной системы (Linux) отображение кодов сканирования в кодовые точки определяется в файле конфигурации где-то в /usr/share/X11/xkb/symbols.Вот выдержка из файла конфигурации:

    key <AD01> { [     q,          Q,    adiaeresis,       Adiaeresis ] };
    key <AD02> { [     w,          W,         aring,            Aring ] };
    key <AD03> { [     e,          E,        eacute,           Eacute ] };
    key <AD04> { [     r,          R,    registered,       registered ] };
    key <AD05> { [     t,          T,         thorn,            THORN ] };
    key <AD06> { [     y,          Y,    udiaeresis,       Udiaeresis ] };
    key <AD07> { [     u,          U,        uacute,           Uacute ] };
    key <AD08> { [     i,          I,        iacute,           Iacute ] };
    key <AD09> { [     o,          O,        oacute,           Oacute ] };
    key <AD10> { [     p,          P,    odiaeresis,       Odiaeresis ] };
    

    Например, он говорит, что скан-код <AD04> сопоставлен с буквой «r».

  3. Символы, которые вы набираете на клавиатуре с помощью своего макета, каким-то образом оказываются в памяти какого-либо сервера, а затем служат частью HTML-документа.

  4. CSS, сопровождающийHTML-документ указывает, что должен использоваться определенный шрифт (например, Font Awesome).

  5. Этот конкретный шрифт указывает, что, например, кодовая точка Unicode U + F420 должна отображаться каклоготип Angular , поэтому в вашем браузере вы видите шестиугольный глиф с A.

Во всем этом пути нет принципиальной разницымежду угловым логотипом и любым другим персонажем.Незначительные отличия:

  1. Угловой логотип не является частью Unicode, то есть консорциум Unicode не определил кодовую точку для логотипа Angular.Вместо этого используется кодовая точка U + F420 из частной области использования .В этом случае «частный» означает, что он используется только вами, Twitter и несколькими сотнями миллионов других людей (любой, кто посещает веб-сайт, использующий Font Awesome, неявно соглашается играть на этой «частной» площадке по определенным правилам).в шрифте).
  2. Не существует предопределенной раскладки клавиатуры, которая сопоставляет коды сканирования с кодовыми точками из какой-то неясной области частного использования.
  3. Не существует оборудования, на котором все эти забавные логотипы напечатаны на клавишепрописные буквы (поскольку вы, вероятно, не используете такие символы слишком часто, это может быть проблемой).

Если вы все равно хотите печатать текст с такими символами, вам придется:

  1. Каким-то образом укажите, что вы хотите использовать шрифт, который отображает кодовые точки из области частного использования в качестве глифов, которые вы хотите (например, указать его в CSS веб-страницы)
  2. Для того, чтобывведите его, вам придется определить свою собственную раскладку клавиатуры.Например, в Linux вы можете скопировать и вставить некоторый файл конфигурации из / usr / share / X11 / xkb / symbols, и изменить его соответственно .
  3. Когда вы попытаетесь использовать этот макет св реальной клавиатуре вам, вероятно, понадобятся подсказки, какой физический ключ соответствует какому глифу.Например, вы можете разместить изображение раскладки клавиатуры на фоне рабочего стола.
0 голосов
/ 18 сентября 2018

Шрифт вменяемого значка предлагает замену лигатуры GSUB, поэтому, если ваш текст содержит последовательность кодовых точек (например, связанных с c + a + r), шрифт выполняет преобразование во внутренний глиф (например, автомобиль).значок), поэтому при наборе вы видите это:

c
co
com
comp
compu
comput
compute
?

Вы ввели «компьютер», как только шрифт видит это последнее r, оно запускает правило GSUB для c + o + m + p + u + t + e + r -> internal_id_24663 и формирует текст таким образомзамена вместо этого.

Конечно, если внутренний идентификатор глифа предоставляется через таблицу CMAP, вы также можете просто получить прямой доступ к глифу, просто указав USHORT, которому будет присвоен шрифт.В вашем примере вы прямо указываете свой значок Fontawesome, записывая его вне кодовой точки Unicode, используя шестнадцатеричное значение, а не «букву»: шрифт использует (теперь уже по умолчанию стандарт) отображение Unicode, не зависящее от платформы, и вы спросилидля глифа, связанного с кодовой точкой 0xF017, которая находится в блоке «Область частного использования» (диапазон кодовых точек от E0x000` до 0xF8FF, для которых не заданы метки для каждой точки: поставщики могут поместить в них все, что им нужно,и не гарантируется разрешение одного и того же символа между версиями).

Я написал о внутренних шрифтах, включая эти части, на http://pomax.github.io/CFF-glyphlet-fonts

...