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 | |
parent | 0ae448e63810b5599c21cac7a83e90dd82f07031 (diff) | |
download | pandoc-0eb62f03fe5cc65534a30bb1f66362e85992c55a.tar.gz |
Ms writer: Hyperlink table of contents and other improvements.
-rw-r--r-- | data/templates/default.ms | 12 | ||||
-rw-r--r-- | src/Text/Pandoc/Writers/Ms.hs | 30 | ||||
-rw-r--r-- | test/writer.ms | 17 |
3 files changed, 46 insertions, 13 deletions
diff --git a/data/templates/default.ms b/data/templates/default.ms index 276a41880..85f9af30a 100644 --- a/data/templates/default.ms +++ b/data/templates/default.ms @@ -42,6 +42,17 @@ .ds PDFHREF.COLOUR 0.35 0.00 0.60 .\" border for links (default none) .ds PDFHREF.BORDER 0 0 0 +.\" point size difference between heading levels +.nr PSINCR 1p +.\" heading level above which point size no longer changes +.nr GROWPS 2 +.\" comment these out if you want a dot after section numbers: +.als SN SN-NO-DOT +.als SN-STYLE SN-NO-DOT +.\" pdf outline fold level +.nr PDFOUTLINE.FOLDLEVEL 3 +.\" start out in outline view +.pdfview /PageMode /UseOutlines .\" *************************************************************** .\" PDF metadata .pdfinfo /Title "$title-meta$" @@ -85,7 +96,6 @@ $endfor$ .1C $body$ $if(toc)$ -$toc$ .TC $endif$ $for(include-after)$ 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 $$ diff --git a/test/writer.ms b/test/writer.ms index ab8108a80..3294e1c8b 100644 --- a/test/writer.ms +++ b/test/writer.ms @@ -42,6 +42,17 @@ .ds PDFHREF.COLOUR 0.35 0.00 0.60 .\" border for links (default none) .ds PDFHREF.BORDER 0 0 0 +.\" point size difference between heading levels +.nr PSINCR 1p +.\" heading level above which point size no longer changes +.nr GROWPS 2 +.\" comment these out if you want a dot after section numbers: +.als SN SN-NO-DOT +.als SN-STYLE SN-NO-DOT +.\" pdf outline fold level +.nr PDFOUTLINE.FOLDLEVEL 3 +.\" start out in outline view +.pdfview /PageMode /UseOutlines .\" *************************************************************** .\" PDF metadata .pdfinfo /Title "Pandoc Test Suite" @@ -427,7 +438,7 @@ Nested. .LP Should not be a list item: .PP -M.A.\ 2007 +M.A.\~2007 .PP B. Williams @@ -643,9 +654,9 @@ This is code: \f[C]>\f[], \f[C]$\f[], \f[C]\\\f[], \f[C]\\$\f[], .PP \m[strikecolor]This is \f[I]strikeout\f[].\m[] .PP -Superscripts: a\*{bc\*}d a\*{\f[I]hello\f[]\*} a\*{hello\ there\*}. +Superscripts: a\*{bc\*}d a\*{\f[I]hello\f[]\*} a\*{hello\~there\*}. .PP -Subscripts: H\*<2\*>O, H\*<23\*>O, H\*<many\ of\ them\*>O. +Subscripts: H\*<2\*>O, H\*<23\*>O, H\*<many\~of\~them\*>O. .PP These should not be superscripts or subscripts, because of the unescaped spaces: a\[ha]b c\[ha]d, a\[ti]b c\[ti]d. |