Парсеры
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:
Пример с использованием параметра парсера link:
{{{#!csv delimiter=, link=Сервер quotechar=" Тип,Сервер вики,http://moinmo.in MoinMoin перевод,http://master19.moinmo.in master19 }}}
Будет показан на странице следующим образом:
Парсеры diff, cplusplus, python, java, pascal, irc/irssi parsers
Данные парсеры присутствовали в МойнМойн версий старше 1.9 и были реализованы посредством специфичной для МойнМойн реализации парсинга и подсвети синтаксиса.
Начиная с версии 1.9 данные парсеры являются сокращениями для соответствующих лексеров парсера highlight.
Парсер highlight
В состав МойнМойн входит специальный парсер, называемый highlight и использующий Pygments для разбора различных синтаксисов.
При помощи него можно выполнять подсветку кода для различных языков программирования, конфигурационных файлов и других видов используемых текстовых форматов (достаточно указать соответствующее значение имеющееся в столбце «Lexer names» из таблицы ниже).
Аргументы
Поддерживаемые параметры подсветки синтаксиса:
- numbers
- Добавлять нумерацию строк. по умолчанию — 'on' (добавлять и отображать). Допустимые значение: 'on', 'off' (нумерация не отображается, но возможность её показать сохраняется), 'disable' (возможность нумерации отключается).
- start
- номер первой строки. по умолчанию 1.
- step
- шаг нумерации. по умолчанию 1.
Пример использования:
{{{#!highlight python start=127 step=3 numbers=off class FooBar: """ doc string """ }}}
Отображение:
class FooBar:
""" doc string """
Также можно использовать данный парсер и в инструкции format, например: #format highlight python
Список доступных лексеров highlight
В качестве аргумента парсера highlight можно использовать значения из столбца «Lexer names».
Lexer description | Lexer names | File patterns | Mimetypes |
ABAP | abap | *.abap | text/x-abap |
ActionScript | as, actionscript | *.as | application/x-actionscript, text/x-actionscript, text/actionscript |
ActionScript 3 | as3, actionscript3 | *.as | application/x-actionscript, text/x-actionscript, text/actionscript |
Ada | ada, ada95ada2005 | *.adb, *.ads, *.ada | text/x-ada |
ANTLR | antlr | ||
ANTLR With ActionScript Target | antlr-as, antlr-actionscript | *.G, *.g | |
ANTLR With C# Target | antlr-csharp, antlr-c# | *.G, *.g | |
ANTLR With CPP Target | antlr-cpp | *.G, *.g | |
ANTLR With Java Target | antlr-java | *.G, *.g | |
ANTLR With ObjectiveC Target | antlr-objc | *.G, *.g | |
ANTLR With Perl Target | antlr-perl | *.G, *.g | |
ANTLR With Python Target | antlr-python | *.G, *.g | |
ANTLR With Ruby Target | antlr-ruby, antlr-rb | *.G, *.g | |
ApacheConf | apacheconf, aconf, apache | .htaccess, apache.conf, apache2.conf | text/x-apacheconf |
AppleScript | applescript | *.applescript | |
aspx-cs | aspx-cs | *.aspx, *.asax, *.ascx, *.ashx, *.asmx, *.axd | |
aspx-vb | aspx-vb | *.aspx, *.asax, *.ascx, *.ashx, *.asmx, *.axd | |
Asymptote | asy, asymptote | *.asy | text/x-asymptote |
autohotkey | ahk | *.ahk, *.ahkl | text/x-autohotkey |
Bash | bash, sh, ksh | *.sh, *.ksh, *.bash, *.ebuild, *.eclass | application/x-sh, application/x-shellscript |
Bash Session | console | *.sh-session | application/x-shell-session |
Batchfile | bat | *.bat, *.cmd | application/x-dos-batch |
BBCode | bbcode | text/x-bbcode | |
Befunge | befunge | *.befunge | application/x-befunge |
BlitzMax | blitzmax, bmax | *.bmx | text/x-bmx |
Boo | boo | *.boo | text/x-boo |
Brainfuck | brainfuck, bf | *.bf, *.b | application/x-brainfuck |
C | c | *.c, *.h | text/x-chdr, text/x-csrc |
C# | csharp, c# | *.cs | text/x-csharp |
C++ | cpp, c++ | *.cpp, *.hpp, *.c++, *.h++, *.cc, *.hh, *.cxx, *.hxx | text/x-c++hdr, text/x-c++src |
c-objdump | c-objdump | *.c-objdump | text/x-c-objdump |
cfstatement | cfs | ||
Cheetah | cheetah, spitfire | *.tmpl, *.spt | application/x-cheetah, application/x-spitfire |
Clojure | clojure, clj | *.clj | text/x-clojure, application/x-clojure |
CMake | cmake | *.cmake, CMakeLists.txt | text/x-cmake |
CoffeeScript | coffee-script, coffeescript | *.coffee | text/coffeescript |
Coldfusion HTML | cfm | *.cfm, *.cfml, *.cfc | application/x-coldfusion |
Common Lisp | common-lisp, cl | *.cl, *.lisp, *.el | text/x-common-lisp |
cpp-objdump | cpp-objdump, c++-objdumb, cxx-objdump | *.cpp-objdump, *.c++-objdump, *.cxx-objdump | text/x-cpp-objdump |
CSS | css | *.css | text/css |
CSS+Django/Jinja | css+django, css+jinja | text/css+django, text/css+jinja | |
CSS+Genshi Text | css+genshitext, css+genshi | text/css+genshi | |
CSS+Mako | css+mako | text/css+mako | |
CSS+Myghty | css+myghty | text/css+myghty | |
CSS+PHP | css+php | text/css+php | |
CSS+Ruby | css+erb, css+ruby | text/css+ruby | |
CSS+Smarty | css+smarty | text/css+smarty | |
Cython | cython, pyx | *.pyx, *.pxd, *.pxi | text/x-cython, application/x-cython |
D | d | *.d, *.di | text/x-dsrc |
d-objdump | d-objdump | *.d-objdump | text/x-d-objdump |
Darcs Patch | dpatch | *.dpatch, *.darcspatch | |
Debian Control file | control | control | |
Debian Sourcelist | sourceslist, sources.list | sources.list | |
Delphi | delphi, pas, pascal, objectpascal | *.pas | text/x-pascal |
Diff | diff, udiff | *.diff, *.patch | text/x-diff, text/x-patch |
Django/Jinja | django, jinja | application/x-django-templating, application/x-jinja | |
Duel | duel, Duel Engine, Duel View, JBST, jbst, JsonML+BST | *.duel, *.jbst | text/x-duel, text/x-jbst |
Dylan | dylan | *.dylan, *.dyl | text/x-dylan |
Embedded Ragel | ragel-em | *.rl | |
ERB | erb | application/x-ruby-templating | |
Erlang | erlang | *.erl, *.hrl | text/x-erlang |
Erlang erl session | erl | *.erl-sh | text/x-erl-shellsession |
Evoque | evoque | *.evoque | application/x-evoque |
Factor | factor | *.factor | text/x-factor |
Felix | felix, flx | *.flx, *.flxh | text/x-felix |
Fortran | fortran | *.f, *.f90 | text/x-fortran |
GAS | gas | *.s, *.S | text/x-gas |
Genshi | genshi, kid, xml+genshi, xml+kid | *.kid | application/x-genshi, application/x-kid |
Genshi Text | genshitext | application/x-genshi-text, text/x-genshi | |
Gettext Catalog | pot, po | *.pot, *.po | application/x-gettext, text/x-gettext, text/gettext |
Gherkin | Cucumber, cucumber, Gherkin, gherkin | *.feature | text/x-gherkin |
GLSL | glsl | *.vert, *.frag, *.geo | text/x-glslsrc |
Gnuplot | gnuplot | *.plot, *.plt | text/x-gnuplot |
Go | go | *.go | text/x-gosrc |
GoodData-CL | gooddata-cl | *.gdc | text/x-gooddata-cl |
Groff | groff, nroff, man | *.[1234567], *.man | application/x-troff, text/troff |
Haml | haml, HAML | *.haml | text/x-haml |
Haskell | haskell, hs | *.hs | text/x-haskell |
haXe | hx, haXe | *.hx | text/haxe |
HTML | html | *.html, *.htm, *.xhtml, *.xslt | text/html, application/xhtml+xml |
HTML+Cheetah | html+cheetah, html+spitfire | text/html+cheetah, text/html+spitfire | |
HTML+Django/Jinja | html+django, html+jinja | text/html+django, text/html+jinja | |
HTML+Evoque | html+evoque | *.html | text/html+evoque |
HTML+Genshi | html+genshi, html+kid | text/html+genshi | |
HTML+Mako | html+mako | text/html+mako | |
HTML+Myghty | html+myghty | text/html+myghty | |
HTML+PHP | html+php | *.phtml | application/x-php, application/x-httpd-php, application/x-httpd-php3, application/x-httpd-php4, application/x-httpd-php5 |
HTML+Smarty | html+smarty | text/html+smarty | |
HTML+Velocity | html+velocity | text/html+velocity | |
Hybris | hybris, hy | *.hy, *.hyb | text/x-hybris, application/x-hybris |
INI | ini, cfg | *.ini, *.cfg | text/x-ini |
Io | io | *.io | text/x-iosrc |
Ioke | ioke, ik | *.ik | text/x-iokesrc |
IRC logs | irc | *.weechatlog | text/x-irclog |
Jade | jade, JADE | *.jade | text/x-jade |
Java | java | *.java | text/x-java |
Java Server Page | jsp | *.jsp | application/x-jsp |
JavaScript | js, javascript | *.js | application/javascript, application/x-javascript, text/x-javascript, text/javascript |
JavaScript+Cheetah | js+cheetah, javascript+cheetah, js+spitfire, javascript+spitfire | application/x-javascript+cheetah, text/x-javascript+cheetah, text/javascript+cheetah, application/x-javascript+spitfire, text/x-javascript+spitfire, text/javascript+spitfire | |
JavaScript+Django/Jinja | js+django, javascript+django, js+jinja, javascript+jinja | application/x-javascript+django, application/x-javascript+jinja, text/x-javascript+django, text/x-javascript+jinja, text/javascript+django, text/javascript+jinja | |
JavaScript+Genshi Text | js+genshitext, js+genshi, javascript+genshitext, javascript+genshi | application/x-javascript+genshi, text/x-javascript+genshi, text/javascript+genshi | |
JavaScript+Mako | js+mako, javascript+mako | application/x-javascript+mako, text/x-javascript+mako, text/javascript+mako | |
JavaScript+Myghty | js+myghty, javascript+myghty | application/x-javascript+myghty, text/x-javascript+myghty, text/javascript+mygthy | |
JavaScript+PHP | js+php, javascript+php | application/x-javascript+php, text/x-javascript+php, text/javascript+php | |
JavaScript+Ruby | js+erb, javascript+erb, js+ruby, javascript+ruby | application/x-javascript+ruby, text/x-javascript+ruby, text/javascript+ruby | |
JavaScript+Smarty | js+smarty, javascript+smarty | application/x-javascript+smarty, text/x-javascript+smarty, text/javascript+smarty | |
Lighttpd configuration file | lighty, lighttpd | text/x-lighttpd-conf | |
Literate Haskell | lhs, literate-haskell | *.lhs | text/x-literate-haskell |
LLVM | llvm | *.ll | text/x-llvm |
Logtalk | logtalk | *.lgt | text/x-logtalk |
Lua | lua | *.lua, *.wlua | text/x-lua, application/x-lua |
Makefile | make, makefile, mf, bsdmake | *.mak, Makefile, makefile, Makefile.*, GNUmakefile | text/x-makefile |
Makefile | basemake | ||
Mako | mako | *.mao | application/x-mako |
MAQL | maql | *.maql | text/x-gooddata-maql, application/x-gooddata-maql |
Mason | mason | *.m, *.mhtml, *.mc, *.mi, autohandler, dhandler | application/x-mason |
Matlab | matlab, octave | *.m | text/matlab |
Matlab session | matlabsession | ||
MiniD | minid | *.md | text/x-minidsrc |
Modelica | modelica | *.mo | text/x-modelica |
Modula-2 | modula2, m2 | *.def, *.mod | text/x-modula2 |
MoinMoin/Trac Wiki markup | trac-wiki, moin | text/x-trac-wiki | |
MOOCode | moocode | *.moo | text/x-moocode |
MuPAD | mupad | *.mu | |
MXML | mxml | *.mxml | |
Myghty | myghty | *.myt, autodelegate | application/x-myghty |
MySQL | mysql | text/x-mysql | |
NASM | nasm | *.asm, *.ASM | text/x-nasm |
Newspeak | newspeak | *.ns2 | text/x-newspeak |
Nginx configuration file | nginx | text/x-nginx-conf | |
NumPy | numpy | ||
objdump | objdump | *.objdump | text/x-objdump |
Objective-C | objective-c, objectivec, obj-c, objc | *.m | text/x-objective-c |
Objective-J | objective-j, objectivej, obj-j, objj | *.j | text/x-objective-j |
OCaml | ocaml | *.ml, *.mli, *.mll, *.mly | text/x-ocaml |
Ooc | ooc | *.ooc | text/x-ooc |
Perl | perl, pl | *.pl, *.pm | text/x-perl, application/x-perl |
PHP | php, php3, php4, php5 | *.php, *.php[345] | text/x-php |
PostScript | postscript | *.ps, *.eps | application/postscript |
POVRay | pov | *.pov, *.inc | text/x-povray |
Prolog | prolog | *.prolog, *.pro, *.pl | text/x-prolog |
Properties | properties | *.properties | text/x-java-properties |
Protocol Buffer | protobuf | *.proto | |
Python | python, py | *.py, *.pyw, *.sc, SConstruct, SConscript, *.tac | text/x-python, application/x-python |
Python 3 | python3, py3 | text/x-python3, application/x-python3 | |
Python 3.0 Traceback | py3tb | *.py3tb | text/x-python3-traceback |
Python console session | pycon | text/x-python-doctest | |
Python Traceback | pytb | *.pytb | text/x-python-traceback |
Ragel | ragel | ||
Ragel in C Host | ragel-c | *.rl | |
Ragel in CPP Host | ragel-cpp | *.rl | |
Ragel in D Host | ragel-d | *.rl | |
Ragel in Java Host | ragel-java | *.rl | |
Ragel in Objective C Host | ragel-objc | *.rl | |
Ragel in Ruby Host | ragel-ruby, ragel-rb | *.rl | |
Raw token data | raw | application/x-pygments-tokens | |
RConsole | rconsole, rout | *.Rout | |
REBOL | rebol | *.r, *.r3 | text/x-rebol |
Redcode | redcode | *.cw | |
reStructuredText | rst, rest, restructuredtext | *.rst, *.rest | text/x-rst, text/prs.fallenstein.rst |
RHTML | rhtml, html+erb, html+ruby | *.rhtml | text/html+ruby |
Ruby | rb, ruby, duby | *.rb, *.rbw, Rakefile, *.rake, *.gemspec, *.rbx, *.duby | text/x-ruby, application/x-ruby |
Ruby irb session | rbcon, irb | text/x-ruby-shellsession | |
S | splus, s, r | *.S, *.R | text/S-plus, text/S, text/R |
Sass | sass, SASS | *.sass | text/x-sass |
Scala | scala | *.scala | text/x-scala |
Scalate Server Page | ssp | *.ssp | application/x-ssp |
Scaml | scaml, SCAML | *.scaml | text/x-scaml |
Scheme | scheme, scm | *.scm | text/x-scheme, application/x-scheme |
SCSS | scss | *.scss | text/x-scss |
Smalltalk | smalltalk, squeak | *.st | text/x-smalltalk |
Smarty | smarty | *.tpl | application/x-smarty |
SQL | sql | *.sql | text/x-sql |
sqlite3con | sqlite3 | *.sqlite3-console | text/x-sqlite3-console |
SquidConf | squidconf, squid.conf, squid | squid.conf | text/x-squidconf |
Tcl | tcl | *.tcl | text/x-tcl, text/x-script.tcl, application/x-tcl |
Tcsh | tcsh, csh | *.tcsh, *.csh | application/x-csh |
TeX | tex, latex | *.tex, *.aux, *.toc | text/x-tex, text/x-latex |
Text only | text | *.txt | text/plain |
Vala | vala, vapi | *.vala, *.vapi | text/x-vala |
VB.net | vb.net, vbnet | *.vb, *.bas | text/x-vbnet, text/x-vba |
Velocity | velocity | *.vm, *.fhtml | |
verilog | v | *.v, *.sv | text/x-verilog |
VimL | vim | *.vim, .vimrc | text/x-vim |
XML | xml | *.xml, *.xsl, *.rss, *.xslt, *.xsd, *.wsdl | text/xml, application/xml, image/svg+xml, application/rss+xml, application/atom+xml, application/xsl+xml, application/xslt+xml |
XML+Cheetah | xml+cheetah, xml+spitfire | application/xml+cheetah, application/xml+spitfire | |
XML+Django/Jinja | xml+django, xml+jinja | application/xml+django, application/xml+jinja | |
XML+Evoque | xml+evoque | *.xml | application/xml+evoque |
XML+Mako | xml+mako | application/xml+mako | |
XML+Myghty | xml+myghty | application/xml+myghty | |
XML+PHP | xml+php | application/xml+php | |
XML+Ruby | xml+erb, xml+ruby | application/xml+ruby | |
XML+Smarty | xml+smarty | application/xml+smarty | |
XML+Velocity | xml+velocity | application/xml+velocity | |
XQuery | xquery, xqy | *.xqy, *.xquery | text/xquery, application/xquery |
XSLT | xslt | *.xsl, *.xslt | text/xml, application/xml, image/svg+xml, application/rss+xml, application/atom+xml, application/xsl+xml, application/xslt+xml |
YAML | yaml | *.yaml, *.yml | text/x-yaml |