Changes between Version 1 and Version 2 of ru/WikiParser


Ignore:
Timestamp:
May 25, 2014, 12:58:30 AM (7 years ago)
Author:
vadim.godunko
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ru/WikiParser

    v1 v2  
    77 - разделение на строки
    88 - обработка блочных элементов (параграфы и т.д.)
    9  - обработку inline-элементов (курсив, подчёркивание и т.д.)
     9 - обработку строчных элементов (курсив, подчёркивание и т.д.)
    1010
    1111Все элементы могут быть вложенными, причём исключительно вложенными, все открытые элементы закрываются объемлющим элементом даже при отсутствии явного закрытия вложенных элементов.
     
    1616
    1717Поддержка базового блочного элемента - параграфа - по всей видимости должна быть реализована ядром парсера. Все остальные блочные элементы могут быть реализованы в форме подключаемых модулей.
     18
     19Предполагается поддержка следующих видов блоков:
     20
     21 - параграф
     22 - ненумерованный список
     23 - нумерованный список
     24 - заголовок
     25 - блок кода
     26
     27== Строчные элементы ==
     28
     29Все строчные элементы обрабатываются подключаемыми модулями.
     30
     31== Обработка состояния модуля разбора ==
     32
     33Модуль разбора поддерживает текущее состояние разбора, а подключаемые модули должы иметь возможность предоставлять собственные значения этих состояний, равно как и некоторые команды по обработке стэка состояния.
     34
     35== Подключаемые модули разбора ==
     36
     37Для блочных элементов предлагается следующий API подключаемого модуля разбора:
     38
     39{{{#!ada
     40type Block_Parser_Extension is limited interface;
     41
     42not overriding function Start_Regexp
     43 (Self : Block_Parser_Extension) return League.Regexps.Regexp is abstract;
     44
     45not overriding function Create_Handler
     46 (Self : Block_Parser_Extension)
     47    return Block_Handler_Extension'Class is abstract;
     48}}}
     49
     50{{{
     51type Block_Handler_Extension is limited interface;
     52}}}
     53
     54== Разделение разбора и формирования HTML представления ==
     55
     56Разбор и формирование HTML представления желательно разделить. Однако при этом встаёт вопрос взаимодействия компонентов, поскольку модулю расширения анализатора должен соответствовать модуль расширения генератора HTML представления. Если требовать динамического подключения во время исполнения программы, то не понятно как этого эффективным образом. Если такой цели не ставить и предпроложить, что все компоненты конфигурируются в момент написания программы, то можно обойтись более монолитным механизмом, когда каждый модуль расширения будет предоставлять интерфейс генерации документа, а собственно генератор - его реализовывать.