Первый пост - пришёл за помощью несколько из другой области. Любительски занимаюсь словарями. Не программист, но более или менее имею представление об AutoIt, VBA и общих принципах программирования. Неплохо знаю регулярные выражения. Суть проблемы:
Наверное, большинство знает что такое язык разметки Lingvo DSL от ABBYY (вероятно, учили инглиш с помощью словарей в этом формате). На данный момент большинство любительских словарей как и оцифровка печатных делается именно в нём (см. ру-боард). По сути формат является сырцом-исходником для компиляции во всевозможные другие форматы под различные программы/платформы. Одним из самых универсальных конвертеров является pyglossary, написанный на Python 2.7. Но с DSL он работает криво. Точнее неполноценно.
Проблема 1. Сам формат DSL, хоть и похож на BBCode, имеет специфические особенности. Он допускает “ill-nested” теги, что является основным препятствием для корректного конвертирования (в html, к примеру). Здесь скрипт на Perl, решающий эту проблему (там же и примеры для наглядности). Но он сортирует теги только внутри группы без пробелов, тогда как могут существовать и такие ситуации:
#fix unclosed tags like [b]...[c]...[/b]...[/c]
#change it to [b]...[c]...[/c][/b][c]...[/c]
Проблема 2. Чистка заголовков. В pyglossary она отсутствует, отсюда артефакты и битый индекс. Одним из наилучших примеров конвертирования DSL в другой формат (в данном случае в Apple Dictionary) является DSLConverter (Python 3.x). Данная проблема решена так:
gEntryHeader = re.sub('[{}]', '', thisString) # this one shows up as an entry header gEntryHeader = re.sub('(\s+?)\)', ') ', gEntryHeader) gEntryHeader = re.sub('\((\s+?)', ' (', gEntryHeader) gEntryHeader = re.sub(' \]', '] ', gEntryHeader) gEntryHeader = re.sub('\[ ', ' [', gEntryHeader) gEntryTitle = re.sub('{(.*?)}', '', thisString) # this one is the value displayed in window header and search list gEntryTitle = re.sub('^\.\.\.', '', gEntryTitle)
Проблема 3. Внедрение аббревиатур из файла *_abbr.dsl. Реализовано только в конвертере DSLConverter от svintuss.
Проблема 4. Сами теги HTML на выходе. Везде они разные. В идеале лучше ничего безвозвратно не удалять, а добавлять как Class к span-ам (чтоб потом можно было навесить CSS). Аббревиатуры (расшифровки) можно как title к ним же. Есть ещё один конвертер в html - pyDSL2HTM.py. Нет ни нормализации, ни аббревиатур.
Собственно, вопрос: может ли кто-нибудь помочь интегрировать нужный функционал в dsl.py? Понимаю, что задача не простая, поэтому и привёл практические примеры реализации. Если возникнут вопросы по самой спецификации DSL, то здесь наиболее полный хэлп.
Надеюсь на помощь и заранее благодарю.