summaryrefslogtreecommitdiff
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
parent0ae448e63810b5599c21cac7a83e90dd82f07031 (diff)
Ms writer: Hyperlink table of contents and other improvements.
-rw-r--r--data/templates/default.ms12
-rw-r--r--src/Text/Pandoc/Writers/Ms.hs30
-rw-r--r--test/writer.ms17
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.