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 |
 | 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:
**bold**is claimed by markdowku'sboldasterisk(69) one step ahead of core Formatting'sstrong(70). Same output, so nobody notices.> quoteis claimed byblockquotes(219) ahead of coreQuote(220), which is why quotes here join lines without a space and refuse to nest.- itemis claimed byulists(9) ahead of coreListblock(10), which is why DokuWiki's ordered-list dash renders as a bullet.
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 renderer methods | inc/parser/xhtml.php, inc/parser/renderer.php |
