ПомощьПоГлавам > ПомощьПользователям > КакРедактировать > ПомощьПоПарсерам

Парсеры

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

Схема работы и использование парсеров

Парсеры обрабатывают поток во входном формате и генерируют набор вызовов для генераторов выходного формата («formatter») для получения итоговой страницы. Парсер можно использовать одним из двух способов:

  1. Указание инструкции #format

    Инструкция #format может использоваться для указания МойнМойн, какой парсер должен использоваться для обработки страницы. По умолчанию это парсер вики-разметки Мойн-Мойн — wiki.

  2. Блок с указанным парсером — см. КакФорматировать

    При использовании блока с указанием парсера, он может применяться только к части страницы. Используемый парсер указывается в параметре блока (в синтаксисе wiki — сразу после открывающей конструкции с использованием shebang, в creole — на следующей строке с использованием shebang; shebang используется по аналогии с UNIX, где он используется для указания интерпретатора скриптового файла)

Пример: использование инструкции

Здесь в качестве примера выступает отдельная страница:

#format creole
... **полужирное начертание** ...

Пример: блок с указанием парсера

В данном примере подразумевается, что это — часть вики-страницы:

Будет отображено как:

Вложние блоков с указанием парсера

Существует два способа решения проблемы с вложением блоков:

Для дополнительной информации по разметке см. КакРедактировать.

Парсеры для написания текста вики-страницы

Ряд парсеров предназначен для использования в нормальном тексте страницы (т. е. как документ):

Парсер CSV

Парсер CSV работает с так называемыми разделенными запятыми значениями, но запятая может быть заменена точкой с запятой. Первая строка рассматривается, как разделенные названия колонок, которые отобразятся в полужирном начертании; если таблица не должна содержать шапку, то достаточно оставить пустой первую строку.

При указании парсера можно задавать следующие параметры:

Пример использования парсера (см. исходный текст страницы для разметки): фрагмент истории изменений МойнМойн 1.3:

Номер патча Описание Автор
Дата
patch-366 make _normalize_text public method Nir Soffer 2004-11-30 19:11:51 GMT
patch-367 fixed failing test wikiutil: good system page names Nir Soffer 2004-11-30 19:15:52 GMT
patch-368 Fixed DeprecationWarning in RandomPage.py and an unused import in twistedmoin.py Alexander Schremmer 2004-11-30 22:58:44 GMT
patch-369 remove duplicate code in formatter.base Thomas Waldmann 2004-12-01 00:14:21 GMT
patch-370 fixed long int in mig3 Thomas Waldmann 2004-12-01 01:51:50 GMT
patch-371 fixed unicode error on eventlog Nir Soffer 2004-12-01 14:46:29 GMT
patch-372 fixed util.web.makeQueryString and Page.url Nir Soffer 2004-12-01 15:48:55 GMT
patch-373 fixed again non ascii http_referer Nir Soffer 2004-12-01 18:55:28 GMT
patch-374 CSV.py supports different separators now Alexander Schremmer 2004-12-01 23:46:17 GMT
patch-375 improved searchform behavior on Mozilla/Firefox Nir Soffer 2004-12-02 04:57:06 GMT
patch-376 More correct script for actions menu init Nir Soffer 2004-12-02 05:07:58 GMT

ParserBase

ParserBase — это вспомогательный класс парсеров, используемый для подсветки кода.

Парсеру ParserBase можно передать некоторые аргументы, для этого их надо просто добавить после имени парсера. (например, #format python start=10 step=10 numbers=on или #!python numbers=off).

numbers
добавлять нумерацию строк. Значение по умолчанию — 'on' (добавлять). Допустимые значение: 'on', 'off' (нумерация не отображается, но возможность их отобразить добавляется), 'disable' (вообще без нумерации)
start
номер первой строки. Значение по умолчанию — 1.
step
шаг нумерации. Значение по умолчанию — 1.

МойнМойн поставляется с некоторым числом парсеров, описанным ниже:

cplusplus

   1 int main(int argc, char **argv) {
   2   return 0;
   3 }

java

   1 import java.util.Date;
   2 import java.util.Calendar;
   3 
   4 public class IntDate
   5 {
   6   public static Date getDate(String year, String month, String day)
   7     {
   8       // Date(int, int, int) has been deprecated, so use Calendar to
   9       // set the year, month, and day.
  10       Calendar c = Calendar.getInstance();
  11       // Convert each argument to int.
  12       c.set(Integer.parseInt(year),Integer.parseInt(month),Integer.parseInt(day));
  13       return c.getTime();
  14 
  15     }
  16 }

pascal

   1 function TRegEx.Match(const s:string):boolean;
   2 var
   3     l,i : integer;
   4 begin
   5     result := MatchPos(s,l,i);
   6 end;

python

Подсветка кода на Python. Это не наследник ParserBase, но он понимает те же самые аргументы.

   1 def hello():
   2     print "Hello World!"

diff

--- GetText2.py.old     2009-11-04 12:43:24.000000000 +0300
+++ GetText2.py 2009-11-12 14:07:44.000000000 +0300
@@ -21,11 +21,12 @@
     """
     sep = args[0]
     args = unpackLine(args[1:], sep)
-    if args:
-        translation = macro.request.getText(args[0])
-    else:
-        translation = u""
-    message = translation % tuple(args[1:])
+    translation = args and macro.request.getText(args[0]) or u""
 
+    try:
+        message = translation % tuple(args[1:])
+    except TypeError:
+        message = translation % dict([i.split('=',1) for i in args[1:] if '=' in i])
+
     return macro.formatter.text(message)

IRC

Представление логов IRC в виде таблицы.

   1 (23:18) <     jroes> ah
   2 (23:19) <     jroes> hm, i like the way {{{ works, but i was hoping the lines would wrap
   3 (23:21) -!- gpciceri [~gpciceri@host181-130.pool8248.interbusiness.it] has quit [Read error: 110 (Connection timed out)]
   4 (23:36) < ThomasWal> you could also write a parser or processor
   5 (23:38) <     jroes> i could?
   6 (23:38) <     jroes> would that require modification on the moin end though?
   7 (23:38) <     jroes> i cant change the wiki myself :x

ReStructured

См. /ReStructuredText.

XML/XSLT/DocBook

См. ПомощьПоXmlСтраницам.