Contents
Парсеры
Помимо вики-разметки МойнМойн, используемой по умолчанию, различные обработчики входных форматов (далее называемые парсерами) позволяют пользователям иметь на вики данные в различных форматах (как в виде отдельных страниц, так и в качестве частей внутри других страниц, если синтаксис этих страниц поддерживает такую возможность).
Contents
Схема работы и использование парсеров
Парсеры обрабатывают поток во входном формате и генерируют набор вызовов для генераторов выходного формата («formatter») для получения итоговой страницы. Парсер можно использовать одним из двух способов:
Указание инструкции #format
Инструкция #format может использоваться для указания МойнМойн, какой парсер должен использоваться для обработки страницы. По умолчанию это парсер вики-разметки Мойн-Мойн — wiki.
Блок с указанным парсером — см. КакФорматировать
При использовании блока с указанием парсера, он может применяться только к части страницы. Используемый парсер указывается в параметре блока (в синтаксисе wiki — сразу после открывающей конструкции с использованием shebang, в creole — на следующей строке с использованием shebang; shebang используется по аналогии с UNIX, где он используется для указания интерпретатора скриптового файла)
Пример: использование инструкции
Здесь в качестве примера выступает отдельная страница:
#format creole ... **полужирное начертание** ...
Пример: блок с указанием парсера
В данном примере подразумевается, что это — часть вики-страницы:
{{{#!csv , а,б,в г,д,е }}}
Будет отображено как:
Вложние блоков с указанием парсера
Существует два способа решения проблемы с вложением блоков:
- Использовать более трёх фигурных скобок для начала и окончания внешних блоков (при этом, подобные последовательности не должны содержаться внутри блока), например:
{{{{ {{{ ... }}} }}}}
- Использовать 3 фигурных скобки и уникальную строку:
{{{фывапролджэ {{{ ... }}} фывапролджэ}}}
Для дополнительной информации по разметке см. КакРедактировать.
Парсеры для написания текста вики-страницы
Ряд парсеров предназначен для использования в нормальном тексте страницы (т. е. как документ):
wiki — стандартный парсер вики-разметки МойнМойн, см. СправочникПоСинтаксису.
creole — парсер разметки Creole, см. СправочникПоСинтаксисуCreole.
ReST (reStructuredText) — см. /ReStructuredText
XML/XSLT/DocBook — см. ПомощьПоXmlСтраницам
Парсер CSV
Парсер CSV работает с так называемыми разделенными запятыми значениями, но запятая может быть заменена точкой с запятой. Первая строка рассматривается, как разделенные названия колонок, которые отобразятся в полужирном начертании; если таблица не должна содержать шапку, то достаточно оставить пустой первую строку.
При указании парсера можно задавать следующие параметры:
delimiter или separator: delimiter=, задаёт запятую в качестве разделителя полей. Разделитель можно также указывать первым аргументом, не указывая имени параметра.
quotechar: quotechar=" позволяет квотировать значения двойными кавычками.
show: список столбцов, разделённых запятыми, которые необходимо показывать.
hide: список столбцов, разделённых запятыми, которые необходимо исключить из выдачи.
autofilter: список столбцов, разделённых запятыми, по которым необходимо разрешить фильтрацию.
name: имя набора данных.
link: список столбцов, имеющих формат http://example.com/link описание ссылки, нежели просто текста.
static_cols, static_vals: столбцы (и значения, соответственно), добавляемые к каждой записи.
-N (where N is a number): спрятать столбец с номером N (полезно в случае, когда заголовки столбцов опущены).
Пример использования парсера (см. исходный текст страницы для разметки): фрагмент истории изменений МойнМойн 1.3:
ParserBase
ParserBase — это вспомогательный класс парсеров, используемый для подсветки кода.
Парсеру ParserBase можно передать некоторые аргументы, для этого их надо просто добавить после имени парсера. (например, #format python start=10 step=10 numbers=on или #!python numbers=off).
- numbers
- добавлять нумерацию строк. Значение по умолчанию — 'on' (добавлять). Допустимые значение: 'on', 'off' (нумерация не отображается, но возможность их отобразить добавляется), 'disable' (вообще без нумерации)
- start
- номер первой строки. Значение по умолчанию — 1.
- step
- шаг нумерации. Значение по умолчанию — 1.
МойнМойн поставляется с некоторым числом парсеров, описанным ниже:
cplusplus
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
python
Подсветка кода на Python. Это не наследник ParserBase, но он понимает те же самые аргументы.
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Страницам.