Значит, какими данными словарь/алфавит описывается. Пока вырисовывается как-то так:
Dictionary symbol
Title string
Description string
ScanInfo string
Author string? strings?
FirstPage integer
FirstOnPage boolean
Format list of symbols? list of lists of symbols?
Alphabet symbol
DefineAlphabet symbol
Letters list of strings
Ligatures list of strings
CaseSensitive boolean
InputAlphabet ? symbol
IndexAlphabet ? symbol
...
File list of strings
CheckFiles boolean
Dictionary задаёт идентификатор словаря. Файл определяет словарь тогда и только тогда, когда есть это поле.
DefineAlphabet - то же самое относительно алфавита. Компоненты алфавита берутся, естественно, из Letters, Ligatures и CaseSensitive.
Alphabet - имя алфавита, используемого данным словарём. Если имя не указано, словарь использует анонимный алфавит, определяемый с помощью Letters, Ligatures и CaseSensitive.
Была идея ещё различать InputAlphabet и IndexAlphabet (которые фолбечились бы на Alphabet): IndexAlphabet - который парсит индекс, а InputAlphabet - который парсит ввод пользователя. Тогда пользователь мог бы переопределять InputAlphabet по своему усмотрению. Если так, то нужны ещё InputLetters и т. п.
File - файлы словаря, данные очень непортабельные, соответственно, в портабельный файл это поле включать не надо
CheckFiles - следует ли программе беспокоиться, если при установке словаря она не найдёт его файлы. Как она будет беспокоиться (и будет ли) - дело программы.
Format по задумке - некая подсказка программе, как именно открывать данный файл. Стандартными можно считать pdf и djvu (и даже определять их по mime-типам). Другими форматами подобного уровня могли бы быть indirect-djvu и какие-нибудь графические форматы для разодранных на страницы словарей (правда, моя прога их ещё не поддерживает). Также я предполагал, что пользователю будет легко объявлять собственные форматы и назначать на них вьюеры. Сначала я думал, что каждый том словаря может иметь свой формат, потом отказался от этого, а зря, наверно. Также неплохо иметь фолбечные форматы. Описывать их можно было бы так:
Код:
# Example format description for a two volume dictionary
format
indirect_djvu djvu
my_cool_pdf_format pdf
Для Description и ScanInfo я допускаю многостроковость: если их значение - список строк, то объединить эти строки разрывами строки. Авторов себе ещё вообще не делал и этого поля не хватает. В принципе, для них можно и список - если авторов много, одного на строку. Хотя не так важно, на менеджер библиографии я не замахиваюсь.