aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Writers/Ms.hs
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2017-03-26 20:01:37 +0200
committerJohn MacFarlane <jgm@berkeley.edu>2017-03-26 20:03:37 +0200
commit0eb62f03fe5cc65534a30bb1f66362e85992c55a (patch)
tree237aeb6a19fddd2357fff97352abf285e7d9d7d5 /src/Text/Pandoc/Writers/Ms.hs
parent0ae448e63810b5599c21cac7a83e90dd82f07031 (diff)
downloadpandoc-0eb62f03fe5cc65534a30bb1f66362e85992c55a.tar.gz
Ms writer: Hyperlink table of contents and other improvements.
Diffstat (limited to 'src/Text/Pandoc/Writers/Ms.hs')
-rw-r--r--src/Text/Pandoc/Writers/Ms.hs30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/Text/Pandoc/Writers/Ms.hs b/src/Text/Pandoc/Writers/Ms.hs
index 0536e0cfb..1fd8bb344 100644
--- a/src/Text/Pandoc/Writers/Ms.hs
+++ b/src/Text/Pandoc/Writers/Ms.hs
@@ -116,7 +116,7 @@ pandocToMs opts (Pandoc meta blocks) = do
-- | Association list of characters to escape.
msEscapes :: Map.Map Char String
msEscapes = Map.fromList $
- [ ('\160', "\\ ")
+ [ ('\160', "\\~")
, ('\'', "\\[aq]")
, ('`', "\\`")
, ('\8217', "'")
@@ -245,22 +245,34 @@ blockToMs _ HorizontalRule = do
blockToMs opts (Header level (ident,classes,_) inlines) = do
setFirstPara
contents <- inlineListToMs' opts $ map breakToSpace inlines
+ let (heading, secnum) = if writerNumberSections opts &&
+ "unnumbered" `notElem` classes
+ then (".NH", "\\*[SN]")
+ else (".SH", "")
let anchor = if null ident
then empty
else nowrap $
text ".pdfhref M " <> doubleQuotes (text ident)
let bookmark = text ".pdfhref O " <> text (show level ++ " ") <>
- doubleQuotes (text (escapeString (stringify inlines)))
+ doubleQuotes (text $ secnum ++
+ (if null secnum
+ then ""
+ else " ") ++
+ escapeString (stringify inlines))
+ let backlink = nowrap (text ".pdfhref L -D " <>
+ doubleQuotes (text ident) <> space <> text "\\") <> cr <>
+ text " -- "
let tocEntry = if writerTableOfContents opts &&
level <= writerTOCDepth opts
- then text ".XS" $$
- (text (replicate level '\t') <> contents) $$
- text ".XE"
+ then text ".XS"
+ $$ backlink <> doubleQuotes (
+ nowrap ((text (replicate level '\t') <>
+ (if null secnum
+ then empty
+ else text secnum <> text "\\~\\~")
+ <> contents)))
+ $$ text ".XE"
else empty
- let heading = if writerNumberSections opts &&
- "unnumbered" `notElem` classes
- then ".NH"
- else ".SH"
modify $ \st -> st{ stFirstPara = True }
return $ (text heading <> space <> text (show level)) $$
contents $$