MediaWiki writer: fix code for generating spans for header IDs.

We need to generate a span when the header's ID doesn't match
the one MediaWiki would generate automatically.  But MediaWiki's
generation scheme is different from ours (it uses uppercase letters,
and `_` instead of `-`, for example).

This means that in going from markdown -> mediawiki, we'll now get
spans before almost every heading, unless explicit identifiers are
used that correspond to the ones MediaWiki auto-generates.
This is uglier output but it's necessary for internal links to
work properly.

See #7697.
This commit is contained in:
John MacFarlane 2021-11-19 09:05:19 -08:00
parent df5ae1c186
commit 4f2eac88aa
3 changed files with 34 additions and 3 deletions

View file

@ -130,7 +130,7 @@ blockToMediaWiki HorizontalRule = return "\n-----\n"
blockToMediaWiki (Header level (ident,_,_) inlines) = do
opts <- gets stOptions
let autoId = uniqueIdent (writerExtensions opts) inlines mempty
let autoId = T.replace " " "_" $ stringify inlines
contents <- inlineListToMediaWiki inlines
let eqs = T.replicate level "="
return $

View file

@ -21,7 +21,7 @@ ref to top of this section: [[#refsubpage1|refsubpage1]].
```
```
% pandoc -f markdown -t mediawiki
# Heading {#heading}
# My Heading {#My_Heading}
^D
= Heading =
= My Heading =
```

View file

@ -3,24 +3,33 @@ This is a set of tests for pandoc. Most of them are adapted from John Grubers
-----
<span id="headers"></span>
= Headers =
<span id="level-2-with-an-embedded-link"></span>
== Level 2 with an [[url|embedded link]] ==
<span id="level-3-with-emphasis"></span>
=== Level 3 with ''emphasis'' ===
<span id="level-4"></span>
==== Level 4 ====
<span id="level-5"></span>
===== Level 5 =====
<span id="level-1"></span>
= Level 1 =
<span id="level-2-with-emphasis"></span>
== Level 2 with ''emphasis'' ==
<span id="level-3"></span>
=== Level 3 ===
with no blank line
<span id="level-2"></span>
== Level 2 ==
with no blank line
@ -28,6 +37,7 @@ with no blank line
-----
<span id="paragraphs"></span>
= Paragraphs =
Heres a regular paragraph.
@ -42,6 +52,7 @@ here.
-----
<span id="block-quotes"></span>
= Block Quotes =
E-mail style:
@ -71,6 +82,7 @@ And a following paragraph.
-----
<span id="code-blocks"></span>
= Code Blocks =
Code:
@ -90,8 +102,10 @@ These should not be escaped: \$ \\ \&gt; \[ \{</pre>
-----
<span id="lists"></span>
= Lists =
<span id="unordered"></span>
== Unordered ==
Asterisks tight:
@ -130,6 +144,7 @@ Minuses loose:
* Minus 2
* Minus 3
<span id="ordered"></span>
== Ordered ==
Tight:
@ -164,6 +179,7 @@ Multiple paragraphs:
<li><p>Item 2.</p></li>
<li><p>Item 3.</p></li></ol>
<span id="nested"></span>
== Nested ==
* Tab
@ -188,6 +204,7 @@ Same thing but with paragraphs:
#* Foe
# Third
<span id="tabs-and-spaces"></span>
== Tabs and spaces ==
* this is a list item indented with tabs
@ -195,6 +212,7 @@ Same thing but with paragraphs:
** this is an example list item indented with tabs
** this is an example list item indented with spaces
<span id="fancy-list-markers"></span>
== Fancy list markers ==
<ol start="2" style="list-style-type: decimal;">
@ -239,6 +257,7 @@ B. Williams
-----
<span id="definition-lists"></span>
= Definition Lists =
Tight using spaces:
@ -307,6 +326,7 @@ Blank line after term, indented marker, alternate markers:
;# sublist
;# sublist
<span id="html-blocks"></span>
= HTML Blocks =
Simple block on one line:
@ -416,6 +436,7 @@ Hrs:
-----
<span id="inline-markup"></span>
= Inline Markup =
This is ''emphasized'', and so ''is this''.
@ -445,6 +466,7 @@ These should not be superscripts or subscripts, because of the unescaped spaces:
-----
<span id="smart-quotes-ellipses-dashes"></span>
= Smart quotes, ellipses, dashes =
“Hello,” said the spider. “Shelob is my name.”
@ -466,6 +488,7 @@ Ellipses…and…and….
-----
<span id="latex"></span>
= LaTeX =
*
@ -490,6 +513,7 @@ Heres a LaTeX table:
-----
<span id="special-characters"></span>
= Special Characters =
Here is some unicode:
@ -545,8 +569,10 @@ Minus: -
-----
<span id="links"></span>
= Links =
<span id="explicit"></span>
== Explicit ==
Just a [[url/|URL]].
@ -567,6 +593,7 @@ Just a [[url/|URL]].
[[|Empty]].
<span id="reference"></span>
== Reference ==
Foo [[url/|bar]].
@ -588,6 +615,7 @@ Foo [[url/|bar]].
Foo [[url/|biz]].
<span id="with-ampersands"></span>
== With ampersands ==
Heres a [http://example.com/?foo=1&bar=2 link with an ampersand in the URL].
@ -598,6 +626,7 @@ Heres an [[script?foo=1&bar=2|inline link]].
Heres an [[script?foo=1&bar=2|inline link in pointy braces]].
<span id="autolinks"></span>
== Autolinks ==
With an ampersand: http://example.com/?foo=1&bar=2
@ -616,6 +645,7 @@ Auto-links should not occur here: <code>&lt;http://example.com/&gt;</code>
-----
<span id="images"></span>
= Images =
From “Voyage dans la Lune” by Georges Melies (1902):
@ -627,6 +657,7 @@ Here is a movie [[File:movie.jpg|movie]] icon.
-----
<span id="footnotes"></span>
= Footnotes =
Here is a footnote reference,<ref>Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.</ref> and another.<ref>Heres the long note. This one contains multiple blocks.