git.iko.soy/typeable/pandoc
on master help sign in
Implement new normalization.

There were some problems with the old str normalization. This fixes those problems. Also, since it drills down on its own, it only needs to be mapped over the blocks, not walked over the tree.

commit9c7e0dc84b2384347099827999f0e2f7be4f7e51 authorJesse Rosenthal <jrosenthal@jhu.edu> dateSat 21 Jun 2014, 17:53 (12 years ago) parent08fe16e
1 file changed+57−11
src/Text/Pandoc/Readers/Docx.hs+57−11
src/Text/Pandoc/Readers/Docx.hs+57−11
@@ -148,25 +148,71 @@ runElemsToString = concatMap runElemToString
148148--- Text.Pandoc.Shared.normalize for reasons of efficiency. For
149149--- whatever reason, `normalize` makes a run take almost twice as
150150--- long. (It does more, but this does what we need)
151−strNormalize :: [Inline] -> [Inline]
152−strNormalize [] = []
153−strNormalize (Str "" : ils) = strNormalize ils
154−strNormalize ((Str s) : (Str s') : l) = strNormalize ((Str (s++s')) : l)
155−strNormalize (il:ils) = il : (strNormalize ils)
151+inlineNormalize :: [Inline] -> [Inline]
152+inlineNormalize [] = []
153+inlineNormalize (Str "" : ils) = inlineNormalize ils
154+inlineNormalize ((Str s) : (Str s') : l) =
155+ inlineNormalize (Str (s++s') : l)
156+inlineNormalize ((Emph ils) : (Emph ils') : l) =
157+ inlineNormalize $ (Emph $ inlineNormalize (ils ++ ils')) : l
158+inlineNormalize ((Emph ils) : l) =
159+ Emph (inlineNormalize ils) : (inlineNormalize l)
160+inlineNormalize ((Strong ils) : (Strong ils') : l) =
161+ inlineNormalize $ (Strong $ inlineNormalize (ils ++ ils')) : l
162+inlineNormalize ((Strong ils) : l) =
163+ Strong (inlineNormalize ils) : (inlineNormalize l)
164+inlineNormalize ((Strikeout ils) : (Strikeout ils') : l) =
165+ inlineNormalize $ (Strikeout $ inlineNormalize (ils ++ ils')) : l
166+inlineNormalize ((Strikeout ils) : l) =
167+ Strikeout (inlineNormalize ils) : (inlineNormalize l)
168+inlineNormalize ((Superscript ils) : (Superscript ils') : l) =
169+ inlineNormalize $ (Superscript $ inlineNormalize (ils ++ ils')) : l
170+inlineNormalize ((Superscript ils) : l) =
171+ Superscript (inlineNormalize ils) : (inlineNormalize l)
172+inlineNormalize ((Subscript ils) : (Subscript ils') : l) =
173+ inlineNormalize $ (Subscript $ inlineNormalize (ils ++ ils')) : l
174+inlineNormalize ((Subscript ils) : l) =
175+ Subscript (inlineNormalize ils) : (inlineNormalize l)
176+inlineNormalize ((Space : Space : l)) =
177+ inlineNormalize $ (Space : l)
178+inlineNormalize ((Quoted qt ils) : l) =
179+ Quoted qt (inlineNormalize ils) : inlineNormalize l
180+inlineNormalize ((Cite cits ils) : l) =
181+ let
182+ f :: Citation -> Citation
183+ f (Citation s pref suff mode num hash) =
184+ Citation s (inlineNormalize pref) (inlineNormalize suff) mode num hash
185+ in
186+ Cite (map f cits) (inlineNormalize ils) : (inlineNormalize l)
187+inlineNormalize ((Link ils s) : l) =
188+ Link (inlineNormalize ils) s : (inlineNormalize l)
189+inlineNormalize ((Image ils s) : l) =
190+ Image (inlineNormalize ils) s : (inlineNormalize l)
191+inlineNormalize ((Note blks) : l) =
192+ Note (map blockNormalize blks) : (inlineNormalize l)
193+inlineNormalize ((Span attr ils) : l) =
194+ Span attr (inlineNormalize ils) : (inlineNormalize l)
195+inlineNormalize (il : l) = il : (inlineNormalize l)
156196
157197stripSpaces :: [Inline] -> [Inline]
158198stripSpaces ils =
159199 reverse $ dropWhile (Space ==) $ reverse $ dropWhile (Space ==) ils
160200
161201blockNormalize :: Block -> Block
162−blockNormalize (Plain ils) = Plain $ bottomUp strNormalize $ stripSpaces ils
163−blockNormalize (Para ils) = Para $ bottomUp strNormalize $ stripSpaces ils
202+blockNormalize (Plain ils) = Plain $ stripSpaces $ inlineNormalize ils
203+blockNormalize (Para ils) = Para $ stripSpaces $ inlineNormalize ils
164204blockNormalize (Header n attr ils) =
165− Header n attr $ bottomUp strNormalize $ stripSpaces ils
205+ Header n attr $ stripSpaces $ inlineNormalize ils
166206blockNormalize (Table ils align width hdr cells) =
167− Table (bottomUp strNormalize $ stripSpaces ils) align width hdr cells
207+ Table (stripSpaces $ inlineNormalize ils) align width hdr cells
168208blockNormalize (DefinitionList pairs) =
169− DefinitionList $ map (\(ils, blklsts) -> (bottomUp strNormalize (stripSpaces ils), blklsts)) pairs
209+ DefinitionList $ map (\(ils, blklsts) -> (stripSpaces (inlineNormalize ils), (map (map blockNormalize) blklsts))) pairs
210+blockNormalize (BlockQuote blks) = BlockQuote (map blockNormalize blks)
211+blockNormalize (OrderedList attr blkslst) =
212+ OrderedList attr $ map (\blks -> map blockNormalize blks) blkslst
213+blockNormalize (BulletList blkslst) =
214+ BulletList $ map (\blks -> map blockNormalize blks) blkslst
215+blockNormalize (Div attr blks) = Div attr (map blockNormalize blks)
170216blockNormalize blk = blk
171217
172218runToInlines :: ReaderOptions -> Docx -> Run -> [Inline]
@@ -315,7 +361,7 @@ makeImagesSelfContained _ inline = inline
315361bodyToBlocks :: ReaderOptions -> Docx -> Body -> [Block]
316362bodyToBlocks opts docx (Body bps) =
317363 bottomUp removeEmptyPars $
318− bottomUp blockNormalize $
364+ map blockNormalize $
319365 bottomUp spanRemove $
320366 bottomUp divRemove $
321367 map (makeHeaderAnchors) $