git.iko.soy/typeable/pandoc
on master help sign in
Merge pull request #1355 from jkr/normalizeFixes
d587558John MacFarlane
src/Text/Pandoc/Readers/Docx.hs+15−9
@@ -144,23 +144,29 @@ runElemToString (Tab) = ['\t']
144runElemsToString :: [RunElem] -> String
144runElemsToString :: [RunElem] -> String
145runElemsToString = concatMap runElemToString
145runElemsToString = concatMap runElemToString
146
146
147+--- We use this instead of the more general
148+--- Text.Pandoc.Shared.normalize for reasons of efficiency. For
149+--- whatever reason, `normalize` makes a run take almost twice as
150+--- long. (It does more, but this does what we need)
147strNormalize :: [Inline] -> [Inline]
151strNormalize :: [Inline] -> [Inline]
148strNormalize [] = []
152strNormalize [] = []
149strNormalize (Str "" : ils) = strNormalize ils
153strNormalize (Str "" : ils) = strNormalize ils
150strNormalize ((Str s) : (Str s') : l) = strNormalize ((Str (s++s')) : l)
154strNormalize ((Str s) : (Str s') : l) = strNormalize ((Str (s++s')) : l)
151strNormalize (il:ils) = il : (strNormalize ils)
155strNormalize (il:ils) = il : (strNormalize ils)
152
156
157+stripSpaces :: [Inline] -> [Inline]
158+stripSpaces ils =
159+ reverse $ dropWhile (Space ==) $ reverse $ dropWhile (Space ==) ils
160+
153blockNormalize :: Block -> Block
161blockNormalize :: Block -> Block
154−blockNormalize (Plain (Space : ils)) = blockNormalize (Plain ils)
162+blockNormalize (Plain ils) = Plain $ strNormalize $ stripSpaces ils
155−blockNormalize (Plain ils) = Plain $ strNormalize ils
156−blockNormalize (Para (Space : ils)) = blockNormalize (Para ils)
157−blockNormalize (Para ils) = Para $ strNormalize ils
163+blockNormalize (Para ils) = Para $ strNormalize $ stripSpaces ils
158−blockNormalize (Header n attr (Space : ils)) =
164+blockNormalize (Header n attr ils) =
159− blockNormalize $ Header n attr ils
165+ Header n attr $ strNormalize $ stripSpaces ils
160−blockNormalize (Table (Space : ils) align width hdr cells) =
161− blockNormalize $ Table ils align width hdr cells
162blockNormalize (Table ils align width hdr cells) =
166blockNormalize (Table ils align width hdr cells) =
163− Table (strNormalize ils) align width hdr cells
167+ Table (strNormalize $ stripSpaces ils) align width hdr cells
168+blockNormalize (DefinitionList pairs) =
169+ DefinitionList $ map (\(ils, blklsts) -> (strNormalize (stripSpaces ils), blklsts)) pairs
164blockNormalize blk = blk
170blockNormalize blk = blk
165
171
166runToInlines :: ReaderOptions -> Docx -> Run -> [Inline]
172runToInlines :: ReaderOptions -> Docx -> Run -> [Inline]