## Please edit system and help pages ONLY in the master wiki!
## For more information, please see MoinMoin:MoinDev/Translation.
##master-page:HelpOnParsers
##master-date:<<Date(2009-12-05T11:28:18Z)>>
#acl -All:write Default
#format wiki
#language ru

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

= Парсеры =

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

<<TableOfContents>>

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

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

 1. '''Указание [[ПомощьПоИнструкциям#format|инструкции #format]]'''

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

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

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

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

Здесь в качестве примера выступает отдельная страница:
{{{
#format creole
... **полужирное начертание** ...
}}}

=== Пример: блок с указанием парсера ===
В данном примере подразумевается, что это — часть вики-страницы:
 {{{{
{{{#!csv ,
а,б,в
г,д,е
}}}
}}}}

Будет отображено как:
 {{{#!csv ,
а,б,в
г,д,е
}}}

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

Существует два способа решения проблемы с вложением блоков:
 * Использовать более трёх фигурных скобок для начала и окончания внешних блоков (при этом, подобные последовательности не должны содержаться внутри блока), например:
 {{{{{
{{{{
{{{
...
}}}
}}}}
}}}}}
 * Использовать 3 фигурных скобки и уникальную строку:
 {{{{
{{{фывапролджэ
{{{
...
}}}
фывапролджэ}}}
}}}}

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

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

Ряд парсеров предназначен для использования в нормальном тексте страницы (т. е. как документ):
 * `wiki` — стандартный парсер вики-разметки МойнМойн, см. СправочникПоСинтаксису.
 * `creole` — парсер разметки Creole, см. СправочникПоСинтаксисуCreole.
 * `ReST` (reStructuredText) — см. /ReStructuredText
 * `XML/XSLT/DocBook` — см. ПомощьПоXmlСтраницам 

<<Anchor(csvparser)>>
== Парсер 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 (полезно в случае, когда заголовки столбцов опущены).

Пример использования парсера (см. <<Action(raw,исходный текст страницы)>> для разметки): фрагмент истории изменений МойнМойн 1.3: 
{{{#!csv , autofilter=Автор
Номер патча,Описание,Автор,Дата
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 ===

{{{#!cplusplus
int main(int argc, char **argv) {
  return 0;
}
}}}

=== java ===

{{{#!java
import java.util.Date;
import java.util.Calendar;

public class IntDate
{
  public static Date getDate(String year, String month, String day)
    {
      // Date(int, int, int) has been deprecated, so use Calendar to
      // set the year, month, and day.
      Calendar c = Calendar.getInstance();
      // Convert each argument to int.
      c.set(Integer.parseInt(year),Integer.parseInt(month),Integer.parseInt(day));
      return c.getTime();

    }
}
}}}

=== pascal ===

{{{#!pascal
function TRegEx.Match(const s:string):boolean;
var
    l,i : integer;
begin
    result := MatchPos(s,l,i);
end;
}}}

== python ==

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

{{{#!python
def hello():
    print "Hello World!"
}}}

== diff ==

{{{#!diff numbers=off
--- 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 в виде таблицы.

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

== ReStructured ==

См. /ReStructuredText.

== XML/XSLT/DocBook ==

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