git.iko.soy/typeable/pandoc
on master help sign in
Code cleanup in DocBook writer.

git-svn-id: https://pandoc.googlecode.com/svn/trunk@1314 788f1e2b-df1e-0410-8736-df70ead52e1b

commitb325a5d490749e862fdbc4ece803d8a6fbfb4d4a authorfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b> dateSun 13 Jul 2008, 23:33 (18 years ago) parent45a7348
1 file changed+36−21
Text/Pandoc/Writers/Docbook.hs+36−21
Text/Pandoc/Writers/Docbook.hs+36−21
@@ -57,7 +57,7 @@ authorToDocbook name = inTagsIndented "author" $
5757-- | Convert Pandoc document to string in Docbook format.
5858writeDocbook :: WriterOptions -> Pandoc -> String
5959writeDocbook opts (Pandoc (Meta title authors date) blocks) =
60− let head = if writerStandalone opts
60+ let head' = if writerStandalone opts
6161 then text (writerHeader opts)
6262 else empty
6363 meta = if writerStandalone opts
@@ -75,7 +75,7 @@ writeDocbook opts (Pandoc (Meta title authors date) blocks) =
7575 body' = if writerStandalone opts
7676 then inTagsIndented "article" (meta $$ body)
7777 else body
78− in render $ head $$ body' $$ text ""
78+ in render $ head' $$ body' $$ text ""
7979
8080-- | Convert an Element to Docbook.
8181elementToDocbook :: WriterOptions -> Element -> Doc
@@ -94,8 +94,9 @@ blocksToDocbook :: WriterOptions -> [Block] -> Doc
9494blocksToDocbook opts = vcat . map (blockToDocbook opts)
9595
9696-- | Auxiliary function to convert Plain block to Para.
97+plainToPara :: Block -> Block
9798plainToPara (Plain x) = Para x
98−plainToPara x = x
99+plainToPara x = x
99100
100101-- | Convert a list of pairs of terms and definitions into a list of
101102-- Docbook varlistentrys.
@@ -122,17 +123,18 @@ listItemToDocbook opts item =
122123
123124-- | Convert a Pandoc block element to Docbook.
124125blockToDocbook :: WriterOptions -> Block -> Doc
125−blockToDocbook opts Null = empty
126+blockToDocbook _ Null = empty
127+blockToDocbook _ (Header _ _) = empty -- should not occur after hierarchicalize
126128blockToDocbook opts (Plain lst) = wrap opts lst
127129blockToDocbook opts (Para lst) = inTagsIndented "para" $ wrap opts lst
128130blockToDocbook opts (BlockQuote blocks) =
129131 inTagsIndented "blockquote" $ blocksToDocbook opts blocks
130−blockToDocbook opts (CodeBlock _ str) =
132+blockToDocbook _ (CodeBlock _ str) =
131133 text "<screen>\n" <> text (escapeStringForXML str) <> text "\n</screen>"
132134blockToDocbook opts (BulletList lst) =
133135 inTagsIndented "itemizedlist" $ listItemsToDocbook opts lst
134−blockToDocbook opts (OrderedList _ []) = empty
135−blockToDocbook opts (OrderedList (start, numstyle, numdelim) (first:rest)) =
136+blockToDocbook _ (OrderedList _ []) = empty
137+blockToDocbook opts (OrderedList (start, numstyle, _) (first:rest)) =
136138 let attribs = case numstyle of
137139 DefaultStyle -> []
138140 Decimal -> [("numeration", "arabic")]
@@ -148,8 +150,8 @@ blockToDocbook opts (OrderedList (start, numstyle, numdelim) (first:rest)) =
148150 in inTags True "orderedlist" attribs items
149151blockToDocbook opts (DefinitionList lst) =
150152 inTagsIndented "variablelist" $ deflistItemsToDocbook opts lst
151−blockToDocbook opts (RawHtml str) = text str -- raw XML block
152−blockToDocbook opts HorizontalRule = empty -- not semantic
153+blockToDocbook _ (RawHtml str) = text str -- raw XML block
154+blockToDocbook _ HorizontalRule = empty -- not semantic
153155blockToDocbook opts (Table caption aligns widths headers rows) =
154156 let alignStrings = map alignmentToString aligns
155157 captionDoc = if null caption
@@ -161,21 +163,34 @@ blockToDocbook opts (Table caption aligns widths headers rows) =
161163 (colHeadsToDocbook opts alignStrings widths headers) $$
162164 (vcat $ map (tableRowToDocbook opts alignStrings) rows)
163165
166+colHeadsToDocbook :: WriterOptions
167+ -> [[Char]]
168+ -> [Float]
169+ -> [[Block]]
170+ -> Doc
164171colHeadsToDocbook opts alignStrings widths headers =
165172 let heads = zipWith3 (\align width item ->
166173 tableItemToDocbook opts "th" align width item)
167174 alignStrings widths headers
168175 in inTagsIndented "tr" $ vcat heads
169176
177+alignmentToString :: Alignment -> [Char]
170178alignmentToString alignment = case alignment of
171179 AlignLeft -> "left"
172180 AlignRight -> "right"
173181 AlignCenter -> "center"
174182 AlignDefault -> "left"
175183
184+tableRowToDocbook :: WriterOptions -> [[Char]] -> [[Block]] -> Doc
176185tableRowToDocbook opts aligns cols = inTagsIndented "tr" $
177186 vcat $ zipWith3 (tableItemToDocbook opts "td") aligns (repeat 0) cols
178187
188+tableItemToDocbook :: WriterOptions
189+ -> [Char]
190+ -> [Char]
191+ -> Float
192+ -> [Block]
193+ -> Doc
179194tableItemToDocbook opts tag align width item =
180195 let attrib = [("align", align)] ++
181196 if width /= 0
@@ -196,7 +211,7 @@ inlinesToDocbook opts lst = hcat $ map (inlineToDocbook opts) lst
196211
197212-- | Convert an inline element to Docbook.
198213inlineToDocbook :: WriterOptions -> Inline -> Doc
199−inlineToDocbook opts (Str str) = text $ escapeStringForXML str
214+inlineToDocbook _ (Str str) = text $ escapeStringForXML str
200215inlineToDocbook opts (Emph lst) =
201216 inTagsSimple "emphasis" $ inlinesToDocbook opts lst
202217inlineToDocbook opts (Strong lst) =
@@ -210,18 +225,18 @@ inlineToDocbook opts (Subscript lst) =
210225 inTagsSimple "subscript" $ inlinesToDocbook opts lst
211226inlineToDocbook opts (Quoted _ lst) =
212227 inTagsSimple "quote" $ inlinesToDocbook opts lst
213−inlineToDocbook opts Apostrophe = char '\''
214−inlineToDocbook opts Ellipses = text "&#8230;"
215−inlineToDocbook opts EmDash = text "&#8212;"
216−inlineToDocbook opts EnDash = text "&#8211;"
217−inlineToDocbook opts (Code str) =
228+inlineToDocbook _ Apostrophe = char '\''
229+inlineToDocbook _ Ellipses = text "&#8230;"
230+inlineToDocbook _ EmDash = text "&#8212;"
231+inlineToDocbook _ EnDash = text "&#8211;"
232+inlineToDocbook _ (Code str) =
218233 inTagsSimple "literal" $ text (escapeStringForXML str)
219234inlineToDocbook opts (Math str) = inlinesToDocbook opts $ readTeXMath str
220−inlineToDocbook opts (TeX str) = empty
221−inlineToDocbook opts (HtmlInline str) = empty
222−inlineToDocbook opts LineBreak = text $ "<literallayout></literallayout>"
223−inlineToDocbook opts Space = char ' '
224−inlineToDocbook opts (Link txt (src, tit)) =
235+inlineToDocbook _ (TeX _) = empty
236+inlineToDocbook _ (HtmlInline _) = empty
237+inlineToDocbook _ LineBreak = text $ "<literallayout></literallayout>"
238+inlineToDocbook _ Space = char ' '
239+inlineToDocbook opts (Link txt (src, _)) =
225240 if isPrefixOf "mailto:" src
226241 then let src' = drop 7 src
227242 emailLink = inTagsSimple "email" $ text $
@@ -231,7 +246,7 @@ inlineToDocbook opts (Link txt (src, tit)) =
231246 else inlinesToDocbook opts txt <+> char '(' <> emailLink <>
232247 char ')'
233248 else inTags False "ulink" [("url", src)] $ inlinesToDocbook opts txt
234−inlineToDocbook opts (Image alt (src, tit)) =
249+inlineToDocbook _ (Image _ (src, tit)) =
235250 let titleDoc = if null tit
236251 then empty
237252 else inTagsIndented "objectinfo" $