Предыдущий раздел |
Дадим их неформальное определение. Описанные принципы построения шрифта определенно разбивают кодировку на две части: ту часть, что проектируется и будет работать в 8-битных приложениях, и ту часть, что -- в 16-битных. И по подходам к проектированию, и по особенностям использования, и по доступу к ним приложений они, очевидно, делят шрифт на две функционально различные части, хотя и имеют сущственную общую часть (русский алфавит и еще несколько символов). Назовем эти части "слоями", 8- и 16-битным.
Формальные определения.
8-битный слой -- это упорядоченный вектор, состоящий из символов с ASCII-кодами 32..255. Кроме кода, каждый символ характеризуется юникодным индексом (в нашем случае они соответствуют кодовой странице 1251, и не могут быть изменены), а также церковно-славянской буквой, знаком или лигатурой, которую мы ему присвоили. 8-битный слой -- это то, что видно из 8-битных приложений при выборе нашего шрифта и символьного набора 204 (Cyrillic). Порядок символов в векторе существенен.
16-битный слой -- это набор символов, характеризующихся своим юникодным индексом (отчасти -- из диапазона кириллических букв, отчасти -- из знаков препинания, большей частью -- из свободной зоны), а также ЦС-буквой, знаком или лигатурой, которую мы ему присвоили. Порядок символов в 16-битном слое несущественен. 16-битный слой -- это то, что в большей своей части видно только из 16-битных приложений. Основная часть этого слоя расположена вне любых кодовых страниц, поэтому не может быть видна из 8-битных приложений. С этим слоем будут работать 16-битные приложения.
И 8-битный, и 16-битный слои предполагается размещать в одном и том же шрифте, поэтому:
Я привел эту тавтологию, чтобы лучше осветить две грани одного шрифта: 8- и 16-битный слои. В 8-битном важет код ASCII, причем привязанный к нему юникодный индекс менять нельзя, он зафиксирован в системе и в определении кодовой страницы; в 16-битном слое важны юникод-индексы. Внутри одного шрифта слои пересекаются.
Если вспомнить OpenType, можно представить себе и третий, OT-слой. Вероятно, это будет подмножество 16-битного слоя (буквы и надстрочники, без лигатур), в который будет добавлена таблица подстановок вида [+= ], сами же лигатуры могут быть размещены вне кодового пространства, следовательно, недоступными из 16-битных приложений, хотя делать это необязательно, в свободной зоне места хватает. Думаю, формально определять этот слой еще рано. Не исключено, что к моменту даже начала проектирования 16-битный будет создаваться отличающимся от того, что описано сейчас (например, лигатуры будут размещаться не в Private range Юникода).
Единая ЦС кодировка состоит из символов, составляющих 8-битный и 16-битный слои. В дальнейшем я буду описывать эти слои отдельно и независимо друг от друга, возвращаясь к их объединению лишь в разговоре о коллизиях. Нужно, однако, помнить, что слои эти как независимы, поскольку используются разными приложениями, так и зависимы, поскольку принадлежат одному шрифту и делят общее кодовое пространство. Все, хватит повторений одного и того же.
О составе шрифтов. В принципе, шрифт может содержать в себе как только один из этих слоев, так и оба сразу. Это подобно тому, как разные фирменные шрифты включают или не включают в себя разные символьные наборы Windows и диапазоны Unicode. В зависимости от того, есть или нет в данном шрифте нужный слой, этот шрифт могут использовать различные классы приложений: 8-битные или 16-битные. В идеале шрифт должен содержать оба слоя.
Точного описания 16-битного слоя еще нет, он находится в разработке. 8-битный слой для текстов новоцерковно-славянской нрамматики полностью готов, и его описание дается далее.
Предыдущий раздел |