From ffd699385a9ea040e6859b7b882b4190597a7f0c Mon Sep 17 00:00:00 2001
From: John MacFarlane <jgm@berkeley.edu>
Date: Thu, 23 Mar 2017 17:29:26 +0100
Subject: [PATCH] Ms writer: improved definition lists.

Use standard .IP macro.
Also properly escape ".
---
 src/Text/Pandoc/Writers/Ms.hs |  4 +-
 test/writer.ms                | 89 ++++++++++++++---------------------
 2 files changed, 39 insertions(+), 54 deletions(-)

diff --git a/src/Text/Pandoc/Writers/Ms.hs b/src/Text/Pandoc/Writers/Ms.hs
index 0ca3ddea9..e326f19ab 100644
--- a/src/Text/Pandoc/Writers/Ms.hs
+++ b/src/Text/Pandoc/Writers/Ms.hs
@@ -37,7 +37,6 @@ TODO:
 [ ] tight/loose list distinction
 [ ] internal hyperlinks (this seems to be possible since
     they exist in the groff manual PDF version)
-[ ] use a custom macro for defn lists so they're configurable
 [ ] better handling of accented characters and other non-ascii
     characters (e.g. curly quotes).
     Note:  recent versions of groff (more recent than standard
@@ -53,6 +52,8 @@ TODO:
     A big advantage of gropdf:  it supports the tag
     \X'pdf: pdfpic file alignment width height line-length'
     and also seems to support bookmarks.
+    See also the pdfroff shell script that comes with more
+    recent versions of groff.
 [ ] add via groff option to PDF module
 [ ] better handling of images, perhaps converting to eps when
     going to PDF?
@@ -151,6 +152,7 @@ manEscapes = Map.fromList $
               [ ('\160', "\\ ")
               , ('\'', "\\[aq]")
               , ('’', "'")
+              , ('"', "\\\"")
               , ('\x2014', "\\[em]")
               , ('\x2013', "\\[en]")
               , ('\x2026', "\\&...")
diff --git a/test/writer.ms b/test/writer.ms
index 6b066fc39..1d9510186 100644
--- a/test/writer.ms
+++ b/test/writer.ms
@@ -88,7 +88,7 @@ Code in a block quote:
 .nf
 \f[C]
 sub\ status\ {
-\ \ \ \ print\ "working";
+\ \ \ \ print\ \"working\";
 }
 \f[]
 .fi
@@ -126,7 +126,7 @@ Code:
 \-\-\-\-\ (should\ be\ four\ hyphens)
 
 sub\ status\ {
-\ \ \ \ print\ "working";
+\ \ \ \ print\ \"working\";
 }
 
 this\ code\ block\ is\ indented\ by\ one\ tab
@@ -365,68 +365,57 @@ Williams
 Definition Lists
 .LP
 Tight using spaces:
-.XP
-.B "apple"
-\~\~red fruit
+.IP "apple"
+red fruit
 .RS
 .RE
-.XP
-.B "orange"
-\~\~orange fruit
+.IP "orange"
+orange fruit
 .RS
 .RE
-.XP
-.B "banana"
-\~\~yellow fruit
+.IP "banana"
+yellow fruit
 .RS
 .RE
 .LP
 Tight using tabs:
-.XP
-.B "apple"
-\~\~red fruit
+.IP "apple"
+red fruit
 .RS
 .RE
-.XP
-.B "orange"
-\~\~orange fruit
+.IP "orange"
+orange fruit
 .RS
 .RE
-.XP
-.B "banana"
-\~\~yellow fruit
+.IP "banana"
+yellow fruit
 .RS
 .RE
 .LP
 Loose:
-.XP
-.B "apple"
-\~\~red fruit
+.IP "apple"
+red fruit
 .RS
 .RE
-.XP
-.B "orange"
-\~\~orange fruit
+.IP "orange"
+orange fruit
 .RS
 .RE
-.XP
-.B "banana"
-\~\~yellow fruit
+.IP "banana"
+yellow fruit
 .RS
 .RE
 .LP
 Multiple blocks with italics:
-.XP
-.B "\f[I]apple\f[]"
-\~\~red fruit
+.IP "\f[I]apple\f[]"
+red fruit
 .RS
 .LP
 contains seeds,
 crisp, pleasant to taste
 .RE
-.XP
-.B "\f[I]orange\f[]"
-\~\~orange fruit
+.IP "\f[I]orange\f[]"
+orange fruit
 .RS
 .IP
 .nf
@@ -441,17 +430,15 @@ orange block quote
 .RE
 .LP
 Multiple definitions, tight:
-.XP
-.B "apple"
-\~\~red fruit
+.IP "apple"
+red fruit
 .RS
 .RE
 computer
 .RS
 .RE
-.XP
-.B "orange"
-\~\~orange fruit
+.IP "orange"
+orange fruit
 .RS
 .RE
 bank
@@ -459,17 +446,15 @@ bank
 .RE
 .LP
 Multiple definitions, loose:
-.XP
-.B "apple"
-\~\~red fruit
+.IP "apple"
+red fruit
 .RS
 .RE
 computer
 .RS
 .RE
-.XP
-.B "orange"
-\~\~orange fruit
+.IP "orange"
+orange fruit
 .RS
 .RE
 bank
@@ -477,17 +462,15 @@ bank
 .RE
 .LP
 Blank line after term, indented marker, alternate markers:
-.XP
-.B "apple"
-\~\~red fruit
+.IP "apple"
+red fruit
 .RS
 .RE
 computer
 .RS
 .RE
-.XP
-.B "orange"
-\~\~orange fruit
+.IP "orange"
+orange fruit
 .RS
 .IP "1." 3
 sublist