@@ -33,9 +33,10 @@ module Text.Pandoc.Writers.Docbook (
3333import Text.Pandoc.Definition
3434import Text.Pandoc.Shared
3535import Text.Pandoc.Writers.HTML ( stringToSmartHtml, stringToHtml )
36+import Text.Pandoc.HtmlEntities ( encodeEntities )
3637import Text.Html ( stringToHtmlString )
3738import Text.Regex ( mkRegex, matchRegex )
38−import Data.Char ( toLower )
39+import Data.Char ( toLower, ord )
3940import Data.List ( isPrefixOf, partition )
4041import Text.PrettyPrint.HughesPJ hiding ( Str )
4142
@@ -179,9 +180,10 @@ wrap options lst = fsep $ map (hcat . (map (inlineToDocbook options))) (splitByS
179180
180181-- | Escape a string for XML (with "smart" option if specified).
181182stringToXML :: WriterOptions -> String -> String
182−stringToXML options = if writerSmart options
183− then stringToSmartHtml
184− else stringToHtml
183+stringToXML options = encodeEntities .
184+ (if writerSmart options
185+ then stringToSmartHtml
186+ else stringToHtml)
185187
186188-- | Escape string to XML appropriate for attributes
187189attributeStringToXML :: String -> String
@@ -189,7 +191,7 @@ attributeStringToXML = gsub "\"" """ . codeStringToXML
189191
190192-- | Escape a literal string for XML.
191193codeStringToXML :: String -> String
192−codeStringToXML = gsub "<" "<" . gsub "&" "&"
194+codeStringToXML = encodeEntities . gsub "<" "<" . gsub "&" "&"
193195
194196-- | Convert a list of inline elements to Docbook.
195197inlinesToDocbook :: WriterOptions -> [Inline] -> Doc