diff options
author | John MacFarlane <jgm@berkeley.edu> | 2017-03-26 20:01:37 +0200 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2017-03-26 20:03:37 +0200 |
commit | 0eb62f03fe5cc65534a30bb1f66362e85992c55a (patch) | |
tree | 237aeb6a19fddd2357fff97352abf285e7d9d7d5 /src/Text/Pandoc/Writers/Ms.hs | |
parent | 0ae448e63810b5599c21cac7a83e90dd82f07031 (diff) | |
download | pandoc-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.hs | 30 |
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 $$ |