Sunday, January 8, 2017

Краткое изложение Policode

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

Тезисы 

Предлагается формат для хранения текста в файлах и передачи по сетям.
Внутри приложений он преобразуется в какое-то внутреннее представление, которое никак не описывается данным форматом.

1. Вместо фиксированных кодов символов из диапазона 0..0x10ffff вводятся имена переменной длины, количество которых не лимитировано.

2. Вводятся пространства имен — алфавиты (латиница, польский, древнеславянский).
Один и тот же символ может иметь разные смыслы в разных алфавитах.
Алфавиты также задаются именами их может быть сколько угодно.

В компьютере установлен некоторый набор поддерживаемых алфавитов.
Алфавит (его еще можно назвать языковой культурой) - это программный модуль, выполняющий над текстами:

  • разные семантические операции,
  • сортировку,
  • озвучивание разными голосами,
  • визуализацию разными шрифтами и т. д.

Алфавиты могут определяться с нуля или расширять какие-то другие алфавиты.
Например "Древнегерманский" наследует у "Германского", который в свою очередь наследует у "Латиницы". Текст начинается с имени, например, древнегерманского алфавита, и за которым идет последовательность имен символов.
И эти имена вначале ищутся в древнегерманском алфавите, если не найдены — в современном германском, если их нет и там, в общелатинском.

Символ опознанный алфавитом отображается и обрабатывается этим алфавитом.
Алфавит может трактовать символ как отображаемый, модифицирующий или управляющий.

Текст может состоять из множества фрагментов, написанных разными алфавитами.

Символ не опознанный алфавитом отображается дефолтным (fail-safe) рендерером.
Это возможно потому, что имена символов — это не строки текста, а команды рисования.
В вышеприведенном примере на моем компьютере была установлена только общелатинская культура, поэтому я увижу:
— пометку, что текст древнегерманский,
— обычные латинские буквы,
— несколько странных угловатых древнегерманских букв (отображенных дефолтным рендерером).

3. Имена символов являются командами рисования и задают их внешний вид, и для этого существует две нотации:
— условное грубое начертание — оно компактно и пригодно для 99% случаев,
— полиграфически аккуратное начертание — позволяет кодировать многоцветные комбинации полигонов, заданных сплайнами, но занимает немного больше места.

Имена символов позволяют увидеть условный текст во всех случаях, когда на целевом компьютере не установлена нужный алфавит (это тот случай, когда в юникоде вообше ничего нельзя увидеть).
Да, такое fail-safe отображение не блещет красотой и не позволяет делать алфавитную сортировку, но прочитать текст можно.

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

5. Работа с именами символов вместо кодов — затратное дело. Они занимают много памяти, и их приходится искать в хеш-мапах.
Поэтому существет таблица на 252 элемента, которая строится автоматически в процессе парсинга текста.
Благодаря этой таблице последние 252 символа или имени языковой культуры использованные в тексте могут быть закодированы одним байтом и обработаны без поиска текстовых строк.

Все детали и технические подробности можно найти в оригинальном посте

No comments:

Post a Comment