git.iko.soy/typeable/pandoc
on master help sign in
MediaWiki reader: use `_` instead of `-` in auto-identifiers.

Partially addresses #4731. We may not still be exactly matching mediawiki's algorithm for identifiers.

commita5ac58f82fbcad86d62b3fb66188635b9763b961 authorJohn MacFarlane <jgm@berkeley.edu> dateFri 25 Jan 2019, 17:10 (8 years ago) parent2e7cfe1
2 files changed+22−17
src/Text/Pandoc/Readers/MediaWiki.hs+6−1 test/mediawiki-reader.native+16−16
src/Text/Pandoc/Readers/MediaWiki.hs+6−1
@@ -411,9 +411,14 @@ header = try $ do
411411 lev <- length <$> many1 (char '=')
412412 guard $ lev <= 6
413413 contents <- trimInlines . mconcat <$> manyTill inline (count lev $ char '=')
414− attr <- registerHeader nullAttr contents
414+ attr <- modifyIdentifier <$> registerHeader nullAttr contents
415415 return $ B.headerWith attr lev contents
416416
417+-- See #4731:
418+modifyIdentifier :: Attr -> Attr
419+modifyIdentifier (ident,cl,kv) = (ident',cl,kv)
420+ where ident' = map (\c -> if c == '-' then '_' else c) ident
421+
417422bulletList :: PandocMonad m => MWParser m Blocks
418423bulletList = B.bulletList <$>
419424 ( many1 (listItem '*')
test/mediawiki-reader.native+16−16
@@ -1,19 +1,19 @@
11Pandoc (Meta {unMeta = fromList []})
22[Header 1 ("header",[],[]) [Str "header"]
3−,Header 2 ("header-level-two",[],[]) [Str "header",Space,Str "level",Space,Str "two"]
4−,Header 3 ("header-level-3",[],[]) [Str "header",Space,Str "level",Space,Str "3"]
5−,Header 4 ("header-level-four",[],[]) [Str "header",Space,Emph [Str "level"],Space,Str "four"]
6−,Header 5 ("header-level-5",[],[]) [Str "header",Space,Str "level",Space,Str "5"]
7−,Header 6 ("header-level-6",[],[]) [Str "header",Space,Str "level",Space,Str "6"]
3+,Header 2 ("header_level_two",[],[]) [Str "header",Space,Str "level",Space,Str "two"]
4+,Header 3 ("header_level_3",[],[]) [Str "header",Space,Str "level",Space,Str "3"]
5+,Header 4 ("header_level_four",[],[]) [Str "header",Space,Emph [Str "level"],Space,Str "four"]
6+,Header 5 ("header_level_5",[],[]) [Str "header",Space,Str "level",Space,Str "5"]
7+,Header 6 ("header_level_6",[],[]) [Str "header",Space,Str "level",Space,Str "6"]
88,Para [Str "=======",Space,Str "not",Space,Str "a",Space,Str "header",Space,Str "========"]
99,Para [Code ("",[],[]) "==\160not\160a\160header\160=="]
10−,Header 2 ("emph-and-strong",[],[]) [Str "emph",Space,Str "and",Space,Str "strong"]
10+,Header 2 ("emph_and_strong",[],[]) [Str "emph",Space,Str "and",Space,Str "strong"]
1111,Para [Emph [Str "emph"],Space,Strong [Str "strong"]]
1212,Para [Strong [Emph [Str "strong",Space,Str "and",Space,Str "emph"]]]
1313,Para [Strong [Emph [Str "emph",Space,Str "inside"],Space,Str "strong"]]
1414,Para [Strong [Str "strong",Space,Str "with",Space,Emph [Str "emph"]]]
1515,Para [Emph [Strong [Str "strong",Space,Str "inside"],Space,Str "emph"]]
16−,Header 2 ("horizontal-rule",[],[]) [Str "horizontal",Space,Str "rule"]
16+,Header 2 ("horizontal_rule",[],[]) [Str "horizontal",Space,Str "rule"]
1717,Para [Str "top"]
1818,HorizontalRule
1919,Para [Str "bottom"]
@@ -46,36 +46,36 @@ Pandoc (Meta {unMeta = fromList []})
4646 [([],
4747 [[Plain [Str "there"]]])]]])]
4848,Para [Str "bud"]
49−,Header 2 ("p-tags",[],[]) [Str "p",Space,Str "tags"]
49+,Header 2 ("p_tags",[],[]) [Str "p",Space,Str "tags"]
5050,Para [Str "hi",Space,Str "there"]
5151,Para [Str "bud"]
5252,Para [Str "another"]
53−,Header 2 ("raw-html",[],[]) [Str "raw",Space,Str "html"]
53+,Header 2 ("raw_html",[],[]) [Str "raw",Space,Str "html"]
5454,Para [Str "hi",Space,RawInline (Format "html") "<span style=\"color:red\">",Emph [Str "there"],RawInline (Format "html") "</span>",Str "."]
5555,Para [RawInline (Format "html") "<ins>",Str "inserted",RawInline (Format "html") "</ins>"]
5656,RawBlock (Format "html") "<div class=\"special\">"
5757,Para [Str "hi",Space,Emph [Str "there"]]
5858,RawBlock (Format "html") "</div>"
59−,Header 2 ("sup-sub-del",[],[]) [Str "sup,",Space,Str "sub,",Space,Str "del"]
59+,Header 2 ("sup_sub_del",[],[]) [Str "sup,",Space,Str "sub,",Space,Str "del"]
6060,Para [Str "H",Subscript [Str "2"],Str "O",Space,Str "base",Superscript [Emph [Str "exponent"]],SoftBreak,Strikeout [Str "hello"]]
61−,Header 2 ("inline-code",[],[]) [Str "inline",Space,Str "code"]
61+,Header 2 ("inline_code",[],[]) [Str "inline",Space,Str "code"]
6262,Para [Code ("",[],[]) "*\8594*",Space,Code ("",[],[]) "typed",Space,Code ("",["haskell"],[]) ">>="]
63−,Header 2 ("code-blocks",[],[]) [Str "code",Space,Str "blocks"]
63+,Header 2 ("code_blocks",[],[]) [Str "code",Space,Str "blocks"]
6464,CodeBlock ("",[],[]) "case xs of\n (_:_) -> reverse xs\n [] -> ['*']"
6565,CodeBlock ("",["haskell"],[]) "case xs of\n (_:_) -> reverse xs\n [] -> ['*']"
6666,CodeBlock ("",["ruby","numberLines"],[("startFrom","100")]) "widgets.each do |w|\n print w.price\nend"
67−,Header 2 ("block-quotes",[],[]) [Str "block",Space,Str "quotes"]
67+,Header 2 ("block_quotes",[],[]) [Str "block",Space,Str "quotes"]
6868,Para [Str "Regular",Space,Str "paragraph"]
6969,BlockQuote
7070 [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "block",Space,Str "quote."]
7171 ,Para [Str "With",Space,Str "two",Space,Str "paragraphs."]]
7272,Para [Str "Nother",Space,Str "paragraph."]
73−,Header 2 ("external-links",[],[]) [Str "external",Space,Str "links"]
73+,Header 2 ("external_links",[],[]) [Str "external",Space,Str "links"]
7474,Para [Link ("",[],[]) [Emph [Str "Google"],Space,Str "search",Space,Str "engine"] ("http://google.com","")]
7575,Para [Link ("",[],[]) [Str "http://pandoc.org"] ("http://pandoc.org","")]
7676,Para [Link ("",[],[]) [Str "1"] ("http://google.com",""),Space,Link ("",[],[]) [Str "2"] ("http://yahoo.com","")]
7777,Para [Link ("",[],[]) [Str "email",Space,Str "me"] ("mailto:info@example.org","")]
78−,Header 2 ("internal-links",[],[]) [Str "internal",Space,Str "links"]
78+,Header 2 ("internal_links",[],[]) [Str "internal",Space,Str "links"]
7979,Para [Link ("",[],[]) [Str "Help"] ("Help","wikilink")]
8080,Para [Link ("",[],[]) [Str "the",Space,Str "help",Space,Str "page"] ("Help","wikilink")]
8181,Para [Link ("",[],[]) [Str "Helpers"] ("Help","wikilink")]
@@ -171,7 +171,7 @@ Pandoc (Meta {unMeta = fromList []})
171171,Header 2 ("math",[],[]) [Str "math"]
172172,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Math InlineMath "x=\\frac{y^\\pi}{z}",Str "."]
173173,Para [Str "With",Space,Str "spaces:",Space,Math InlineMath "x=\\frac{y^\\pi}{z}",Str "."]
174−,Header 2 ("preformatted-blocks",[],[]) [Str "preformatted",Space,Str "blocks"]
174+,Header 2 ("preformatted_blocks",[],[]) [Str "preformatted",Space,Str "blocks"]
175175,Para [Code ("",[],[]) "Start\160each\160line\160with\160a\160space.",LineBreak,Code ("",[],[]) "Text\160is\160",Strong [Code ("",[],[]) "preformatted"],Code ("",[],[]) "\160and",LineBreak,Emph [Code ("",[],[]) "markups"],Code ("",[],[]) "\160",Strong [Emph [Code ("",[],[]) "can"]],Code ("",[],[]) "\160be\160done."]
176176,Para [Code ("",[],[]) "\160hell\160\160\160\160\160\160yeah"]
177177,Para [Code ("",[],[]) "Start\160with\160a\160space\160in\160the\160first\160column,",LineBreak,Code ("",[],[]) "(before\160the\160<nowiki>).",LineBreak,Code ("",[],[]) "",LineBreak,Code ("",[],[]) "Then\160your\160block\160format\160will\160be",LineBreak,Code ("",[],[]) "\160\160\160\160maintained.",LineBreak,Code ("",[],[]) "",LineBreak,Code ("",[],[]) "This\160is\160good\160for\160copying\160in\160code\160blocks:",LineBreak,Code ("",[],[]) "",LineBreak,Code ("",[],[]) "def\160function():",LineBreak,Code ("",[],[]) "\160\160\160\160\"\"\"documentation\160string\"\"\"",LineBreak,Code ("",[],[]) "",LineBreak,Code ("",[],[]) "\160\160\160\160if\160True:",LineBreak,Code ("",[],[]) "\160\160\160\160\160\160\160\160print\160True",LineBreak,Code ("",[],[]) "\160\160\160\160else:",LineBreak,Code ("",[],[]) "\160\160\160\160\160\160\160\160print\160False"]