Skip to content

Инструментарий для генерации EPWING-версии словаря WARODAI.

Notifications You must be signed in to change notification settings

WarodaiProject/epwing-builder

Repository files navigation

Пакет утилит для генерации словарей проекта WARODAI в формат EPWING (JIS-X4081)

Внимание! Этот репозиторий предназначен только для хранения инструментов. В нем не должны храниться исходники и результаты генерации EPWING-версии (файл .gitignore настроен так, чтобы исключать эти данные из репозитория). Для хранения исходников и результатов генерации предназначен отдельный репозиторий https://github.com/warodai/epwing-version.

Некоторые пояснения в связи с переходом EbStudio на EbStudio2

При генерации не используется новая возможность по автоматической обработке гайдзи, появившаяся во 2-й версии EbStudio. В соответствии с документацией EbStudio2, EBStudio2では、入力ソースがUnicodeの場合、JIS X0208以外の文字が出現すると自動的に外字を作成します。Однако при использовании этой опции все кириллические символы воспринимаются EbStudio2 как гайдзи, что приводит к огромным сложностям в работе со словарем. В связи с этим принято решение использовать в качестве входного файла версию HTML в кодировке ShiftJS, совместимую с парсером EbStudio 1 (в документации она называется HTML(EBStudio 1.x互換パーサー)).

1. Порядок действий при генерации

  1. Убедитесь, что в директории SRC/WARODAI находятся текстовые файлы словаря и другие исходные файлы:

    • SRC/WARODAI/warodai.txt и/или SRC/BJRD/bjrd.txt и/или SRC/XBJRD/xbjrd.txt - текстовый файл словаря WARODAI, публичной (без ※-комментариев) версии БЯРС или редакторской (с ※-комментариями) версии БЯРС соответственно, кодировка UTF-16LE. Обратите внимание, что файл должен называться соответственно корпусу: warodai.txt, bjrd.txt или xbjrd.txt. Названия остальных файлов ниже не зависят от корпуса и называются для всех корпусов одинаково.
    • dict.tmpl.html - шаблонный файл HTML словаря для EBStudio. Содержит весь текст словаря, кроме самих корпусов (словников). В тех местах, куда должны будут быть вставлены корпуса, в файле стоят инструкции вида {{CORP.КОД_КОРПУСА}}. Кодировка файл - UTF-16LE.
    • copyright.html - файл с информацией о защите авторских прав, кодировка UTF-16LE.
    • Gaiji_pregen.xml - файл с заранее сгенерированным битмапами гайдзи.
  2. Убедитесь, что все внешние инструменты, используемые пакетом, на месте:

    • Установлено приложение EbStudio2, 64-битная версия не ниже 2.0.9. Скачать приложение можно с официального сайта http://ebstudio.info. Желательно купить лицензию, иначе невозможно будет сгенерировать суффиксальный индекс. Если купить лицензию не представляется возможным, можно использовать бесплатную версию, однако в этом случае в скриптах генерации .bat нужно отключить генерацию суффиксального индекса, установив опции EndWordSearchHyoki=0 и EndWordSearchKana=0. Скрипты генерации (файлы с расширением .bat) предполагают, что используется 64-битная версия, установленная в папку по умолчанию - C:\Program Files\EBStudio2(x64). Если в вашем случае EbStudio2 установлено в другую директорию, внесите соответствующее исправление в файлы .bat.
    • В папке php находится скомпилированная верси PHP5 для Windows (версия PHP >5.2, <7). В настроечном файле php.ini опция memory_limit должна быть выставлена в 1G (memory_limit = 1G). В некоторых случаях php не хватает библиотек. Для устранения этой проблемы установите приложение vcredist_x86.exe из папки _install.
  3. Для генерации EPWING-версии запустите скрипт warodai.bat (bjrd.bat или xbjrd.txt - в случае БЯРС). После окончания его работы в папке HTML/WARODAI окажутся все файлы, используемые для генерации словаря с помощью EBStudio2. В файле HTML/WARODAI/encoding_report.html будет записан отчет о конвертации гайдзи. Скрипт автоматически производит запуск EbStudio2 с нужными настройками и проводит генерацию EPWING-версии. Необходимо дождаться завершения генерации версии в EbStudio2, после чего его можно закрыть. В папке EPWING/WARODAI окажется полностью готовая версия EPWING.

Для БЯРС публичной или редакторской версии процедура генерации аналогична. На шаге 3 следует запускать bjrd.bat или xbjrd.bat, файлы для генерации с помощью EBStudio2 поступят в папку HTML/BJRD или HTML/XBJRD соответственно. Готовая EPWING-версия поступит в папку EPWING/BJRD или EPWING/XBJRD соответственн.

2. Корпуса словарей

В состав словаря входит несколько словарных корпусов (словников). В словарной статье корпус указан в заголовке статьи в квадратных скобках []. Процедура конвертации распознает эти указания и разбивает весь словарь на корпуса. Каждый корпус вставляется в HTML-файл для EBStudio на место инструкции вида {{CORP.КОД_КОРПУСА}}. Ниже приведен список всех корпусов с соответствующими метками в исходном файле словаря и обозначением инструкции для вставки:

Метка Инструкция вставки
отсутствие метки (словник по умолчанию) {{CORP.GLOSSARY_ORIG}}
[мера длины] {{CORP.MEASURES_LENGTH}}
[мера поверхности] {{CORP.MEASURES_SURFACE}}
[мера ёмкости] {{CORP.MEASURES_VOLUME}}
[мера веса] {{CORP.MEASURES_WEIGHT}}
[геогр.] {{CORP.GEO_NAMES}}
[г. Токио] {{CORP.GEO_TOKYO}}
[г. Осака] {{CORP.GEO_OSAKA}}
[название годов правления] {{CORP.ERA_NAMES}}
[название годов правления; Северная династия] {{CORP.ERA_NAMES}}
[название годов правления; посмертное имя] {{CORP.ERA_NAMES}}
[нов.] (только в БЯРС) {{CORP.GLOSSARY_NEW}}

3. Гайдзи (外字)

Гайдзи - это символы, не входящие в кодовую таблицу JIS X 0208, использующуюся в стандарте JIS X 4081. При конвертации из исходных файлов в файлы HTML для EBStudio такие символы должны быть особо обработаны. Общий алгоритм этой обработки выглядит следующим образом:

  1. Производится сборка всех файлов HTML, совместимых с EBStudio 1.x (dict.html и copyright.html), но в кодировке UTF-16LE.
  2. Производится посимвольный проход по всем файлам. В том числе распознаются символы, которые в исходных файлах записаны в виде Unicode Character Entity, т.е., в форме &#xFFFF;. Такие символы сразу переводятся в свою нормальную юникодную форму и далее обрабатываются так, как будто они были в исходном тексте обычным символом, а не Unicode Character Entity. Внутри приватной зоны Unicode PUA (Private Use Area, коды U+E021–U+F8FF) для целей словаря выделена отдельная подприватная зона U+E000-U+E020. Она используется для тех символов словаря, которых нет в Unicode. Такие символы не встречаются внутри корпусов словаря, но могут быть в сопровождающих текстах файлов dict.html или copyright.html. В тексте такие символы, по понятным причинам, могут встретить только в виде записи Unicode Character Entity (&#xE001). Они превращаются в "символы" и обрабатываются так, как будто это обычный символ Unicode.
  3. Для каждого символа производится попытка конвертировать его из UTF-16LE в Shift_JS с помощью библиотеки iconv. Shift_JS строго говоря не является кодировкой JIS X 0208 (1990), но EBStudio2 в случае формата HTML(EBStudio 1.x互換パーサー) принимает на вход именно Shift_JS, производя конвертацию Shift_JS->JIS X 0208 в процессе генерации EPWING. ShiftJS объединяет в себе две кодировки: JIS X 0201 (1976) и JIS X 0208 (1990). Кодировка JIS X 0201 помимо символов ASCII содержит только символы катаканы и несколько знаков японской пунктуации. Исторически катакана из этой кодировки является полуширинной. В кодировке JIS X 0208 полуширинной катаканы просто нет, а в Shift_JS есть и полуширинная кана, и полноширинная (ведь это объединение JIS X 0201 (1976) и JIS X 0208 (1990)). Видимо, поэтому EbStudio2 производит молчаливую замену полуширнной каны на полноширинную. Для того, чтобы полуширинная катакана не потерялась, при конвертации UTF-16LE в Shift_JS мы принудительно (форсировано) считаем, что полуширинные символы катаканы - это гайдзи.
  4. Если символ успешно конвертировался, он просто присоединяется к выходной строке.
  5. Если символ не прошел успешную конвертацию, то он считается гайдзи.
  6. Гайдзи присоединяется к выходной строке в виде Unicode Character Entity (&#xFFFF). Обращаем внимание, что в результате несуществующие символы Юникод попадают в выходную строку в неизменном виде Unicode Character Entity (&#xE000-&#xE020).
  7. Для гайдзи производится поиск его битмапа (16 строк по 16 символов, в которых пробел обозначает белый пиксель, а знак # - черный). Битмап используется EBWin для вывода изображения гайдзи в тексте. Поиск битмапов осуществляется в файле Gaiji_pregen.xml. Для поиска используется всегда код Unicode (он стоит в атрибуте unicode каждого блока символа в файле Gaiji_pregen.xml). Естественно, для символов, отсутствующих в Unicode, используется код, выделенный из субприватной зоны словаря (U+E000-U+E020). Если в файле Gaiji_pregen.xml отсутствует искомый символ, для генерации битмапа вызывается утилита FontDumpW.exe. Если утилита не найдена или она вернула некорректный битмап, то символ получит битмап в виде перечеркнутого квадрата (☒).
  8. По окончании посимвольной обработки все гайдзи разбиваются на 2 группы: полуширинные символы (ханкаку, 半角) и полноширинные символы (дзэнкаку, 全角). Разница между этими группами состоит в том, что изображение половинного символа в EBWin и других просмотрщиках EPWING занимает по ширине в два раза меньше места. EBStudio2 требует учитывать эти гайдзи раздельно.
  9. Для каждого гайдзи производится назначение внутреннего кода EPWING. Для символов ханкаку назначение производится, начиная с кода A121, для символов дзэнкаку - с кода B021. Коды ebcode можно назначать только массивами по 94 кода из каждого блока по 256 кодов. Вот что по этому поводу сказано в документации EbStudio: 外字の範囲はA121~FE7F。※94点を1区として割り当てる(A17Eの次はA221となる). Таким образом, например, при инкрементации ebcode-код дзэнкаку сначала укладывается в диапазон 0xB021 - 0xB07E (0xB07E = (0xB021 + 94)-1), затем в диапазон 0xB121 - 0xB17E (0xB121 = 0xB021 + 256) и т.д.
  10. Производится генерация 3 файлов, описывающих гайдзи:
    • GaijiMap.xml - содержит соответствия юникод-кодов eb-кодам.
    • Gaiji.xml - содержит битмапы для всех гайдзи. Полноширинные и полуширинные символы идут раздельно. Для каждого битмапа указан его ebcode-код. Для справки также указаны юникод-коды.
    • WARODAI.map - содержит соответствие ebcode-кодов юникод-кодам. В ebcode-коде префиксом h/z указана ширина символа.
  11. По окончании генерируется файл отчета обработки гайдзи HTML/WARODAI/encoding_report.html, который содержит перечень всех гайдзи в виде таблицы. В таблице указаны:
    • Порядковый номер гайдзи
    • Ebcode-код, присвоенный гайдзи, включая префикс h/z, обозначающий ширину
    • Юникод-код символа (для символов из субприватной зоны словаря здесь будет указан код &#xE000-&#xE020)
    • Побитовое изображение гайдзи. Те гайдзи, которые были сгенерированы утилитой FontDumpW.exe, а не взяты из Gaiji_pregen.xml, подкрашены в розоватый цвет.
    • Изображение битмапа 8x8 (ханкаку) или 16x16 (дзэнкаку) пикселей. Это то, как символ будет выглядеть в EBWin.
    • Сам символ. Для символов из субприватной зоны словаря (&#xE000-&#xE020) в некоторых браузерах такой несуществующий символ будет отображаться как квадратик, а в некоторых - как ромбик или стрелочках (это изображения этих символов из наиболее распространенных PUA).

4. Полезные ссылки

About

Инструментарий для генерации EPWING-версии словаря WARODAI.

Resources

Stars

Watchers

Forks

Packages

No packages published