@@ -57,7 +57,7 @@ authorToDocbook name = inTagsIndented "author" $
57-- | Convert Pandoc document to string in Docbook format.
57-- | Convert Pandoc document to string in Docbook format.
58writeDocbook :: WriterOptions -> Pandoc -> String
58writeDocbook :: WriterOptions -> Pandoc -> String
59writeDocbook opts (Pandoc (Meta title authors date) blocks) =
59writeDocbook opts (Pandoc (Meta title authors date) blocks) =
60− let head = if writerStandalone opts
60+ let head' = if writerStandalone opts
61 then text (writerHeader opts)
61 then text (writerHeader opts)
62 else empty
62 else empty
63 meta = if writerStandalone opts
63 meta = if writerStandalone opts
@@ -75,7 +75,7 @@ writeDocbook opts (Pandoc (Meta title authors date) blocks) =
75 body' = if writerStandalone opts
75 body' = if writerStandalone opts
76 then inTagsIndented "article" (meta $$ body)
76 then inTagsIndented "article" (meta $$ body)
77 else body
77 else body
78− in render $ head $$ body' $$ text ""
78+ in render $ head' $$ body' $$ text ""
80-- | Convert an Element to Docbook.
80-- | Convert an Element to Docbook.
81elementToDocbook :: WriterOptions -> Element -> Doc
81elementToDocbook :: WriterOptions -> Element -> Doc
@@ -94,8 +94,9 @@ blocksToDocbook :: WriterOptions -> [Block] -> Doc
94blocksToDocbook opts = vcat . map (blockToDocbook opts)
94blocksToDocbook opts = vcat . map (blockToDocbook opts)
96-- | Auxiliary function to convert Plain block to Para.
96-- | Auxiliary function to convert Plain block to Para.
97+plainToPara :: Block -> Block
97plainToPara (Plain x) = Para x
98plainToPara (Plain x) = Para x
98−plainToPara x = x
99+plainToPara x = x
100-- | Convert a list of pairs of terms and definitions into a list of
101-- | Convert a list of pairs of terms and definitions into a list of
101-- Docbook varlistentrys.
102-- Docbook varlistentrys.
@@ -122,17 +123,18 @@ listItemToDocbook opts item =
123-- | Convert a Pandoc block element to Docbook.
124-- | Convert a Pandoc block element to Docbook.
124blockToDocbook :: WriterOptions -> Block -> Doc
125blockToDocbook :: WriterOptions -> Block -> Doc
125−blockToDocbook opts Null = empty
126+blockToDocbook _ Null = empty
127+blockToDocbook _ (Header _ _) = empty -- should not occur after hierarchicalize
126blockToDocbook opts (Plain lst) = wrap opts lst
128blockToDocbook opts (Plain lst) = wrap opts lst
127blockToDocbook opts (Para lst) = inTagsIndented "para" $ wrap opts lst
129blockToDocbook opts (Para lst) = inTagsIndented "para" $ wrap opts lst
128blockToDocbook opts (BlockQuote blocks) =
130blockToDocbook opts (BlockQuote blocks) =
129 inTagsIndented "blockquote" $ blocksToDocbook opts blocks
131 inTagsIndented "blockquote" $ blocksToDocbook opts blocks
130−blockToDocbook opts (CodeBlock _ str) =
132+blockToDocbook _ (CodeBlock _ str) =
131 text "<screen>\n" <> text (escapeStringForXML str) <> text "\n</screen>"
133 text "<screen>\n" <> text (escapeStringForXML str) <> text "\n</screen>"
132blockToDocbook opts (BulletList lst) =
134blockToDocbook opts (BulletList lst) =
133 inTagsIndented "itemizedlist" $ listItemsToDocbook opts lst
135 inTagsIndented "itemizedlist" $ listItemsToDocbook opts lst
134−blockToDocbook opts (OrderedList _ []) = empty
136+blockToDocbook _ (OrderedList _ []) = empty
135−blockToDocbook opts (OrderedList (start, numstyle, numdelim) (first:rest)) =
137+blockToDocbook opts (OrderedList (start, numstyle, _) (first:rest)) =
136 let attribs = case numstyle of
138 let attribs = case numstyle of
137 DefaultStyle -> []
139 DefaultStyle -> []
138 Decimal -> [("numeration", "arabic")]
140 Decimal -> [("numeration", "arabic")]
@@ -148,8 +150,8 @@ blockToDocbook opts (OrderedList (start, numstyle, numdelim) (first:rest)) =
148 in inTags True "orderedlist" attribs items
150 in inTags True "orderedlist" attribs items
149blockToDocbook opts (DefinitionList lst) =
151blockToDocbook opts (DefinitionList lst) =
150 inTagsIndented "variablelist" $ deflistItemsToDocbook opts lst
152 inTagsIndented "variablelist" $ deflistItemsToDocbook opts lst
151−blockToDocbook opts (RawHtml str) = text str -- raw XML block
153+blockToDocbook _ (RawHtml str) = text str -- raw XML block
152−blockToDocbook opts HorizontalRule = empty -- not semantic
154+blockToDocbook _ HorizontalRule = empty -- not semantic
153blockToDocbook opts (Table caption aligns widths headers rows) =
155blockToDocbook opts (Table caption aligns widths headers rows) =
154 let alignStrings = map alignmentToString aligns
156 let alignStrings = map alignmentToString aligns
155 captionDoc = if null caption
157 captionDoc = if null caption
@@ -161,21 +163,34 @@ blockToDocbook opts (Table caption aligns widths headers rows) =
161 (colHeadsToDocbook opts alignStrings widths headers) $$
163 (colHeadsToDocbook opts alignStrings widths headers) $$
162 (vcat $ map (tableRowToDocbook opts alignStrings) rows)
164 (vcat $ map (tableRowToDocbook opts alignStrings) rows)
166+colHeadsToDocbook :: WriterOptions
164colHeadsToDocbook opts alignStrings widths headers =
171colHeadsToDocbook opts alignStrings widths headers =
165 let heads = zipWith3 (\align width item ->
172 let heads = zipWith3 (\align width item ->
166 tableItemToDocbook opts "th" align width item)
173 tableItemToDocbook opts "th" align width item)
167 alignStrings widths headers
174 alignStrings widths headers
168 in inTagsIndented "tr" $ vcat heads
175 in inTagsIndented "tr" $ vcat heads
177+alignmentToString :: Alignment -> [Char]
170alignmentToString alignment = case alignment of
178alignmentToString alignment = case alignment of
171 AlignLeft -> "left"
179 AlignLeft -> "left"
172 AlignRight -> "right"
180 AlignRight -> "right"
173 AlignCenter -> "center"
181 AlignCenter -> "center"
174 AlignDefault -> "left"
182 AlignDefault -> "left"
184+tableRowToDocbook :: WriterOptions -> [[Char]] -> [[Block]] -> Doc
176tableRowToDocbook opts aligns cols = inTagsIndented "tr" $
185tableRowToDocbook opts aligns cols = inTagsIndented "tr" $
177 vcat $ zipWith3 (tableItemToDocbook opts "td") aligns (repeat 0) cols
186 vcat $ zipWith3 (tableItemToDocbook opts "td") aligns (repeat 0) cols
188+tableItemToDocbook :: WriterOptions
179tableItemToDocbook opts tag align width item =
194tableItemToDocbook opts tag align width item =
180 let attrib = [("align", align)] ++
195 let attrib = [("align", align)] ++
181 if width /= 0
196 if width /= 0
@@ -196,7 +211,7 @@ inlinesToDocbook opts lst = hcat $ map (inlineToDocbook opts) lst
197-- | Convert an inline element to Docbook.
212-- | Convert an inline element to Docbook.
198inlineToDocbook :: WriterOptions -> Inline -> Doc
213inlineToDocbook :: WriterOptions -> Inline -> Doc
199−inlineToDocbook opts (Str str) = text $ escapeStringForXML str
214+inlineToDocbook _ (Str str) = text $ escapeStringForXML str
200inlineToDocbook opts (Emph lst) =
215inlineToDocbook opts (Emph lst) =
201 inTagsSimple "emphasis" $ inlinesToDocbook opts lst
216 inTagsSimple "emphasis" $ inlinesToDocbook opts lst
202inlineToDocbook opts (Strong lst) =
217inlineToDocbook opts (Strong lst) =
@@ -210,18 +225,18 @@ inlineToDocbook opts (Subscript lst) =
210 inTagsSimple "subscript" $ inlinesToDocbook opts lst
225 inTagsSimple "subscript" $ inlinesToDocbook opts lst
211inlineToDocbook opts (Quoted _ lst) =
226inlineToDocbook opts (Quoted _ lst) =
212 inTagsSimple "quote" $ inlinesToDocbook opts lst
227 inTagsSimple "quote" $ inlinesToDocbook opts lst
213−inlineToDocbook opts Apostrophe = char '\''
228+inlineToDocbook _ Apostrophe = char '\''
214−inlineToDocbook opts Ellipses = text "…"
229+inlineToDocbook _ Ellipses = text "…"
215−inlineToDocbook opts EmDash = text "—"
230+inlineToDocbook _ EmDash = text "—"
216−inlineToDocbook opts EnDash = text "–"
231+inlineToDocbook _ EnDash = text "–"
217−inlineToDocbook opts (Code str) =
232+inlineToDocbook _ (Code str) =
218 inTagsSimple "literal" $ text (escapeStringForXML str)
233 inTagsSimple "literal" $ text (escapeStringForXML str)
219inlineToDocbook opts (Math str) = inlinesToDocbook opts $ readTeXMath str
234inlineToDocbook opts (Math str) = inlinesToDocbook opts $ readTeXMath str
220−inlineToDocbook opts (TeX str) = empty
235+inlineToDocbook _ (TeX _) = empty
221−inlineToDocbook opts (HtmlInline str) = empty
236+inlineToDocbook _ (HtmlInline _) = empty
222−inlineToDocbook opts LineBreak = text $ "<literallayout></literallayout>"
237+inlineToDocbook _ LineBreak = text $ "<literallayout></literallayout>"
223−inlineToDocbook opts Space = char ' '
238+inlineToDocbook _ Space = char ' '
224−inlineToDocbook opts (Link txt (src, tit)) =
239+inlineToDocbook opts (Link txt (src, _)) =
225 if isPrefixOf "mailto:" src
240 if isPrefixOf "mailto:" src
226 then let src' = drop 7 src
241 then let src' = drop 7 src
227 emailLink = inTagsSimple "email" $ text $
242 emailLink = inTagsSimple "email" $ text $
@@ -231,7 +246,7 @@ inlineToDocbook opts (Link txt (src, tit)) =
231 else inlinesToDocbook opts txt <+> char '(' <> emailLink <>
246 else inlinesToDocbook opts txt <+> char '(' <> emailLink <>
233 else inTags False "ulink" [("url", src)] $ inlinesToDocbook opts txt
248 else inTags False "ulink" [("url", src)] $ inlinesToDocbook opts txt
234−inlineToDocbook opts (Image alt (src, tit)) =
249+inlineToDocbook _ (Image _ (src, tit)) =
235 let titleDoc = if null tit
250 let titleDoc = if null tit
236 then empty
251 then empty
237 else inTagsIndented "objectinfo" $
252 else inTagsIndented "objectinfo" $