git.iko.soy/typeable/pandoc
on master help sign in
ICML writer: consolidate adjacent strings, inc. spaces.

This avoids chunking up the output unnecessarily into separate elements.

commit985db7b0a8a090e7654642651c75bffcf53f8d38 authorJohn MacFarlane <jgm@berkeley.edu> dateTue 6 Nov 2018, 22:53 (8 years ago) parentdae3a0e
2 files changed+38−143
src/Text/Pandoc/Writers/ICML.hs+15−15 test/writer.icml+23−128
src/Text/Pandoc/Writers/ICML.hs+15−15
@@ -416,7 +416,7 @@ definitionListItemToICML opts style (term,defs) = do
416416
417417-- | Convert a list of inline elements to ICML.
418418inlinesToICML :: PandocMonad m => WriterOptions -> Style -> [Inline] -> WS m Doc
419−inlinesToICML opts style lst = vcat `fmap` mapM (inlineToICML opts style) (mergeSpaces lst)
419+inlinesToICML opts style lst = vcat `fmap` mapM (inlineToICML opts style) (mergeStrings opts lst)
420420
421421-- | Convert an inline element to ICML.
422422inlineToICML :: PandocMonad m => WriterOptions -> Style -> Inline -> WS m Doc
@@ -427,8 +427,10 @@ inlineToICML opts style (Strikeout lst) = inlinesToICML opts (strikeoutName:styl
427427inlineToICML opts style (Superscript lst) = inlinesToICML opts (superscriptName:style) lst
428428inlineToICML opts style (Subscript lst) = inlinesToICML opts (subscriptName:style) lst
429429inlineToICML opts style (SmallCaps lst) = inlinesToICML opts (smallCapsName:style) lst
430−inlineToICML opts style (Quoted SingleQuote lst) = inlinesToICML opts style $ [Str "‘"] ++ lst ++ [Str "’"]
431−inlineToICML opts style (Quoted DoubleQuote lst) = inlinesToICML opts style $ [Str "“"] ++ lst ++ [Str "”"]
430+inlineToICML opts style (Quoted SingleQuote lst) = inlinesToICML opts style $
431+ mergeStrings opts $ [Str "‘"] ++ lst ++ [Str "’"]
432+inlineToICML opts style (Quoted DoubleQuote lst) = inlinesToICML opts style $
433+ mergeStrings opts $ [Str "“"] ++ lst ++ [Str "”"]
432434inlineToICML opts style (Cite _ lst) = inlinesToICML opts (citeName:style) lst
433435inlineToICML _ style (Code _ str) = charStyle (codeName:style) $ text $ escapeStringForXML str
434436inlineToICML _ style Space = charStyle style space
@@ -474,18 +476,16 @@ footnoteToICML opts style lst =
474476 $ inTags True "Footnote" [] $ number $$ intersperseBrs contents
475477
476478-- | Auxiliary function to merge Space elements into the adjacent Strs.
477−mergeSpaces :: [Inline] -> [Inline]
478−mergeSpaces (Str s:(x:(Str s':xs))) | isSp x =
479− mergeSpaces $ Str(s++" "++s') : xs
480−mergeSpaces (x:(Str s:xs)) | isSp x = mergeSpaces $ Str (" "++s) : xs
481−mergeSpaces (Str s:(x:xs)) | isSp x = mergeSpaces $ Str (s++" ") : xs
482−mergeSpaces (x:xs) = x : mergeSpaces xs
483−mergeSpaces [] = []
484−
485−isSp :: Inline -> Bool
486−isSp Space = True
487−isSp SoftBreak = True
488−isSp _ = False
479+mergeStrings :: WriterOptions -> [Inline] -> [Inline]
480+mergeStrings opts = mergeStrings' . map spaceToStr
481+ where spaceToStr Space = Str " "
482+ spaceToStr SoftBreak = case writerWrapText opts of
483+ WrapPreserve -> Str "\n"
484+ _ -> Str " "
485+ spaceToStr x = x
486+mergeStrings' (Str x : Str y : zs) = mergeStrings' (Str (x ++ y) : zs)
487+mergeStrings' (x : xs) = x : mergeStrings' xs
488+mergeStrings' [] = []
489489
490490-- | Intersperse line breaks
491491intersperseBrs :: [Doc] -> Doc
test/writer.icml+23−128
@@ -945,10 +945,7 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
945945<Br />
946946<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/NumList &gt; subParagraph &gt; Paragraph">
947947 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
948− <Content> </Content>
949− </CharacterStyleRange>
950− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
951− <Content>Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.</Content>
948+ <Content> Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.</Content>
952949 </CharacterStyleRange>
953950</ParagraphStyleRange>
954951<Br />
@@ -1122,10 +1119,7 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
11221119<Br />
11231120<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/NumList &gt; subParagraph &gt; Paragraph">
11241121 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1125− <Content> </Content>
1126− </CharacterStyleRange>
1127− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1128− <Content>with a continuation</Content>
1122+ <Content> with a continuation</Content>
11291123 </CharacterStyleRange>
11301124</ParagraphStyleRange>
11311125<Br />
@@ -1897,13 +1891,7 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
18971891<Br />
18981892<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph">
18991893 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1900− <Content>“</Content>
1901− </CharacterStyleRange>
1902− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1903− <Content>Hello,</Content>
1904− </CharacterStyleRange>
1905− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1906− <Content>”</Content>
1894+ <Content>“Hello,”</Content>
19071895 </CharacterStyleRange>
19081896 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
19091897 <Content> said the spider. </Content>
@@ -1912,55 +1900,28 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
19121900 <Content>“</Content>
19131901 </CharacterStyleRange>
19141902 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1915− <Content>‘</Content>
1903+ <Content>‘Shelob’</Content>
19161904 </CharacterStyleRange>
19171905 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1918− <Content>Shelob</Content>
1919− </CharacterStyleRange>
1920− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1921− <Content>’</Content>
1922− </CharacterStyleRange>
1923− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1924− <Content> is my name.</Content>
1925− </CharacterStyleRange>
1926− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1927− <Content>”</Content>
1906+ <Content> is my name.”</Content>
19281907 </CharacterStyleRange>
19291908</ParagraphStyleRange>
19301909<Br />
19311910<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph">
19321911 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1933− <Content>‘</Content>
1934− </CharacterStyleRange>
1935− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1936− <Content>A</Content>
1937− </CharacterStyleRange>
1938− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1939− <Content>’</Content>
1912+ <Content>‘A’</Content>
19401913 </CharacterStyleRange>
19411914 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
19421915 <Content>, </Content>
19431916 </CharacterStyleRange>
19441917 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1945− <Content>‘</Content>
1946− </CharacterStyleRange>
1947− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1948− <Content>B</Content>
1949− </CharacterStyleRange>
1950− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1951− <Content>’</Content>
1918+ <Content>‘B’</Content>
19521919 </CharacterStyleRange>
19531920 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
19541921 <Content>, and </Content>
19551922 </CharacterStyleRange>
19561923 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1957− <Content>‘</Content>
1958− </CharacterStyleRange>
1959− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1960− <Content>C</Content>
1961− </CharacterStyleRange>
1962− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1963− <Content>’</Content>
1924+ <Content>‘C’</Content>
19641925 </CharacterStyleRange>
19651926 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
19661927 <Content> are letters.</Content>
@@ -1969,67 +1930,34 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
19691930<Br />
19701931<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph">
19711932 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1972− <Content>‘</Content>
1973− </CharacterStyleRange>
1974− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1975− <Content>Oak,</Content>
1976− </CharacterStyleRange>
1977− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1978− <Content>’</Content>
1933+ <Content>‘Oak,’</Content>
19791934 </CharacterStyleRange>
19801935 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
19811936 <Content> </Content>
19821937 </CharacterStyleRange>
19831938 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1984− <Content>‘</Content>
1985− </CharacterStyleRange>
1986− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1987− <Content>elm,</Content>
1988− </CharacterStyleRange>
1989− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1990− <Content>’</Content>
1939+ <Content>‘elm,’</Content>
19911940 </CharacterStyleRange>
19921941 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
19931942 <Content> and </Content>
19941943 </CharacterStyleRange>
19951944 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1996− <Content>‘</Content>
1997− </CharacterStyleRange>
1998− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
1999− <Content>beech</Content>
2000− </CharacterStyleRange>
2001− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2002− <Content>’</Content>
1945+ <Content>‘beech’</Content>
20031946 </CharacterStyleRange>
20041947 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
20051948 <Content> are names of trees. So is </Content>
20061949 </CharacterStyleRange>
20071950 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2008− <Content>‘</Content>
2009− </CharacterStyleRange>
2010− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2011− <Content>pine.</Content>
2012− </CharacterStyleRange>
2013− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2014− <Content>’</Content>
1951+ <Content>‘pine.’</Content>
20151952 </CharacterStyleRange>
20161953</ParagraphStyleRange>
20171954<Br />
20181955<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph">
20191956 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2020− <Content>‘</Content>
2021− </CharacterStyleRange>
2022− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2023− <Content>He said, </Content>
2024− </CharacterStyleRange>
2025− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2026− <Content>“</Content>
1957+ <Content>‘He said, </Content>
20271958 </CharacterStyleRange>
20281959 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2029− <Content>I want to go.</Content>
2030− </CharacterStyleRange>
2031− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2032− <Content>”</Content>
1960+ <Content>“I want to go.”</Content>
20331961 </CharacterStyleRange>
20341962 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
20351963 <Content>’</Content>
@@ -2231,13 +2159,7 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
22312159 <Content> of money. So is $34,000. (It worked if </Content>
22322160 </CharacterStyleRange>
22332161 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2234− <Content>“</Content>
2235− </CharacterStyleRange>
2236− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2237− <Content>lot</Content>
2238− </CharacterStyleRange>
2239− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2240− <Content>”</Content>
2162+ <Content>“lot”</Content>
22412163 </CharacterStyleRange>
22422164 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
22432165 <Content> is emphasized.)</Content>
@@ -2818,13 +2740,7 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
28182740 <Content>From </Content>
28192741 </CharacterStyleRange>
28202742 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2821− <Content>“</Content>
2822− </CharacterStyleRange>
2823− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2824− <Content>Voyage dans la Lune</Content>
2825− </CharacterStyleRange>
2826− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2827− <Content>”</Content>
2743+ <Content>“Voyage dans la Lune”</Content>
28282744 </CharacterStyleRange>
28292745 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
28302746 <Content> by Georges Melies (1902):</Content>
@@ -2916,10 +2832,7 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
29162832 </ParagraphStyleRange>
29172833 <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Footnote &gt; Paragraph">
29182834 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2919− <Content> </Content>
2920− </CharacterStyleRange>
2921− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2922− <Content>Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.</Content>
2835+ <Content> Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.</Content>
29232836 </CharacterStyleRange>
29242837 </ParagraphStyleRange>
29252838 </Footnote>
@@ -2936,19 +2849,13 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
29362849 </ParagraphStyleRange>
29372850 <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Footnote &gt; Paragraph">
29382851 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2939− <Content> </Content>
2940− </CharacterStyleRange>
2941− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2942− <Content>Here’s the long note. This one contains multiple blocks.</Content>
2852+ <Content> Here’s the long note. This one contains multiple blocks.</Content>
29432853 </CharacterStyleRange>
29442854 </ParagraphStyleRange>
29452855 <Br />
29462856 <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Footnote &gt; Paragraph">
29472857 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2948− <Content> </Content>
2949− </CharacterStyleRange>
2950− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2951− <Content>Subsequent blocks are indented to show that they belong to the footnote (as with list items).</Content>
2858+ <Content> Subsequent blocks are indented to show that they belong to the footnote (as with list items).</Content>
29522859 </CharacterStyleRange>
29532860 </ParagraphStyleRange>
29542861 <Br />
@@ -2960,10 +2867,7 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
29602867 <Br />
29612868 <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Footnote &gt; Paragraph">
29622869 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2963− <Content> </Content>
2964− </CharacterStyleRange>
2965− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2966− <Content>If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.</Content>
2870+ <Content> If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.</Content>
29672871 </CharacterStyleRange>
29682872 </ParagraphStyleRange>
29692873 </Footnote>
@@ -2986,10 +2890,7 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
29862890 </ParagraphStyleRange>
29872891 <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Footnote &gt; Paragraph">
29882892 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2989− <Content> </Content>
2990− </CharacterStyleRange>
2991− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
2992− <Content>This is </Content>
2893+ <Content> This is </Content>
29932894 </CharacterStyleRange>
29942895 <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/Italic">
29952896 <Content>easier</Content>
@@ -3029,10 +2930,7 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
30292930 </ParagraphStyleRange>
30302931 <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Footnote &gt; Paragraph">
30312932 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
3032− <Content> </Content>
3033− </CharacterStyleRange>
3034− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
3035− <Content>In quote.</Content>
2933+ <Content> In quote.</Content>
30362934 </CharacterStyleRange>
30372935 </ParagraphStyleRange>
30382936 </Footnote>
@@ -3052,10 +2950,7 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
30522950 </ParagraphStyleRange>
30532951 <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Footnote &gt; Paragraph">
30542952 <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
3055− <Content> </Content>
3056− </CharacterStyleRange>
3057− <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
3058− <Content>In list.</Content>
2953+ <Content> In list.</Content>
30592954 </CharacterStyleRange>
30602955 </ParagraphStyleRange>
30612956 </Footnote>