Table of Contents

Syntax origin

Nothing on the syntax page is one language. Four independent parsers contribute to this wiki, and knowing which one owns a construct is usually what explains its quirks.

When two of them claim the same characters, DokuWiki connects syntax modes in ascending getSort() order and the first match wins. That single rule decides every collision listed below.

DokuWiki core

Everything here is stock, in inc/Parsing/ParserMode/.

Syntax Mode Sort
====== Heading ====== Header 50
//italic//, __underline__, ''mono'' Formatting 80–100
<sub>, <sup>, <del> Formatting 110–130
((footnote)) Footnote 150
[[page]], [[wp>page]] Internallink 300
bare URLs Externallink 330
<[email protected]> Emaillink 340
\\server\share Windowssharelink 350
* item (two-space bullet) Listblock 10
^ / | tables Table 60
<code>, <file> Code, File 200, 210
two-space indent Preformatted 20
, <nowiki> Unformatted 170
\\ plus a space Linebreak 140
{{media.png}} Media 320
{{rss>url}} Rss 310
~~NOTOC~~, ~~NOCACHE~~ Notoc, Nocache 30, 40
smileys Smiley + conf/smileys.conf 230
->, (c), ... Entity + conf/entities.conf 260
640x480 Multiplyentity 270
curly quotes Quotes 280

So ((...)) is DokuWiki's own footnote syntax, not a Markdown import. Markdown has no footnotes here at all, and [^1] does nothing.

markdowku

lib/plugins/markdowku/syntax/ holds 26 components adding what DokuWiki lacks.

Syntax Component Sort
# Heading headeratx 49
Setext headings headersetext 49
*italic*, _italic_ italicasterisk, italicunderline 79
`code` codespans1–5 95–99
fenced ``` blocks githubcodeblocks 91
[text](url) anchorsinline 102
![alt](url) imagesinline 101
<https://example.com> autolinks 102
* item ulists 9
1. item olists 9
> quote blockquotes 219
***, ___ hr 8
two trailing spaces linebreak 139
\*, \_ escapes escapespecialchars 61

Three collisions are decided here, all of them invisible until they bite:

references and anchorsreference exist too, but reference-style links never resolve, hence the gotcha above.

katex

In lib/plugins/katex/, syntax/protect.php (sort 65) only protects math from the wiki parser; script.js does the rendering in the browser.

Syntax Handled by
$x$, $$x$$ protect.php, then KaTeX client-side
\NN\CC macros in conf/local.php

At sort 65 it shadows markdowku's own mathinline (90) and mathblock (89), which never run. That is deliberate: the dollar signs must reach the browser untouched.

texrender

lib/plugins/texrender/ runs LaTeX server-side and inlines the SVG.

Syntax Component Sort
\documentclass{standalone} figure.php 88
\tikz ... ; and \tikz{...} inline.php 89

Local core patches

Not plugins, but modifications to DokuWiki itself, tracked in this installation's git repo.

Behaviour Where
gold links to (WIP) pages inc/parser/xhtml.php
pages stored as .md inc/init.php (DOKUEXT) | | WIP pages split out on the sitemap | inc/Ui/Index.php | | math, eqn, latexfigure renderer methods inc/parser/xhtml.php, inc/parser/renderer.php

See also