diff options
author | Frerich Raabe <raabe@froglogic.com> | 2015-09-23 23:08:53 +0200 |
---|---|---|
committer | Frerich Raabe <raabe@froglogic.com> | 2015-09-24 18:28:51 +0200 |
commit | eee992520cfe3d0d37185f998339690aae39f2c8 (patch) | |
tree | 94a488b638164a9ac581b503d759ba15537431f2 | |
parent | 35f12b5095799e41b563f47a7923a1d01015c71c (diff) | |
download | pandoc-eee992520cfe3d0d37185f998339690aae39f2c8.tar.gz |
Improve text generated for <xref> by employing docbook-xsl heuristics
docbook-xsl, a set of XSLT scripts to generate HMTL out of DocBook,
tries harder to generate a nice xref text. Depending on the element
being linked to, it looks at the title or other descriptive child
elements. Let's do that, too.
-rw-r--r-- | src/Text/Pandoc/Readers/DocBook.hs | 18 | ||||
-rw-r--r-- | tests/docbook-xref.native | 6 |
2 files changed, 19 insertions, 5 deletions
diff --git a/src/Text/Pandoc/Readers/DocBook.hs b/src/Text/Pandoc/Readers/DocBook.hs index 164b44b62..9243221f0 100644 --- a/src/Text/Pandoc/Readers/DocBook.hs +++ b/src/Text/Pandoc/Readers/DocBook.hs @@ -1024,8 +1024,22 @@ parseInline (Elem e) = findElementById idString content = asum [filterElement (\x -> attrValue "id" x == idString) el | Elem el <- content] + -- Use the 'xreflabel' attribute for getting the title of a xref link; + -- if there's no such attribute, employ some heuristics based on what + -- docbook-xsl does. xrefTitleByElem el - | null xrefLabel = "???" - | otherwise = xrefLabel + | not (null xrefLabel) = xrefLabel + | otherwise = case qName (elName el) of + "chapter" -> descendantContent "title" el + "sect1" -> descendantContent "title" el + "sect2" -> descendantContent "title" el + "sect3" -> descendantContent "title" el + "sect4" -> descendantContent "title" el + "sect5" -> descendantContent "title" el + "cmdsynopsis" -> descendantContent "command" el + "funcsynopsis" -> descendantContent "function" el + _ -> qName (elName el) ++ "_title" where xrefLabel = attrValue "xreflabel" el + descendantContent name = maybe "???" strContent + . findElement (QName name Nothing Nothing) diff --git a/tests/docbook-xref.native b/tests/docbook-xref.native index 70027b2c5..ec870842b 100644 --- a/tests/docbook-xref.native +++ b/tests/docbook-xref.native @@ -2,11 +2,11 @@ Pandoc (Meta {unMeta = fromList []}) [Header 1 ("ch01",[],[]) [Str "XRef",Space,Str "Samples"] ,Para [Str "This",Space,Str "paragraph",Space,Str "demonstrates",Space,Str "several",Space,Str "features",Space,Str "of",Space,Str "XRef."] ,BulletList - [[Para [Str "A",Space,Str "straight",Space,Str "link",Space,Str "generates",Space,Str "the",Space,Str "cross-reference",Space,Str "text:",Space,Link [Str "???"] ("#ch02",""),Str "."]] + [[Para [Str "A",Space,Str "straight",Space,Str "link",Space,Str "generates",Space,Str "the",Space,Str "cross-reference",Space,Str "text:",Space,Link [Str "The Second Chapter"] ("#ch02",""),Str "."]] ,[Para [Str "A",Space,Str "link",Space,Str "to",Space,Str "an",Space,Str "element",Space,Str "with",Space,Str "an",Space,Str "XRefLabel:",Space,Link [Str "Chapter the Third"] ("#ch03",""),Str "."]] ,[Para [Str "A",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "EndTerm:",Space,Link [Str "Chapter 4"] ("#ch04",""),Str "."]] - ,[Para [Str "A",Space,Str "link",Space,Str "to",Space,Str "an",Space,Str "cmdsynopsis",Space,Str "element:",Space,Link [Str "???"] ("#cmd01",""),Str "."]] - ,[Para [Str "A",Space,Str "link",Space,Str "to",Space,Str "an",Space,Str "funcsynopsis",Space,Str "element:",Space,Link [Str "???"] ("#func01",""),Str "."]]] + ,[Para [Str "A",Space,Str "link",Space,Str "to",Space,Str "an",Space,Str "cmdsynopsis",Space,Str "element:",Space,Link [Str "chgrp"] ("#cmd01",""),Str "."]] + ,[Para [Str "A",Space,Str "link",Space,Str "to",Space,Str "an",Space,Str "funcsynopsis",Space,Str "element:",Space,Link [Str "max"] ("#func01",""),Str "."]]] ,Header 1 ("ch02",[],[]) [Str "The",Space,Str "Second",Space,Str "Chapter"] ,Para [Str "Some",Space,Str "content",Space,Str "here"] ,Header 1 ("ch03",[],[]) [Str "The",Space,Str "Third",Space,Str "Chapter"] |