@@ -144,23 +144,29 @@ runElemToString (Tab) = ['\t']
144144runElemsToString :: [RunElem] -> String
145145runElemsToString = concatMap runElemToString
146146
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)
147151strNormalize :: [Inline] -> [Inline]
148152strNormalize [] = []
149153strNormalize (Str "" : ils) = strNormalize ils
150154strNormalize ((Str s) : (Str s') : l) = strNormalize ((Str (s++s')) : l)
151155strNormalize (il:ils) = il : (strNormalize ils)
152156
157+stripSpaces :: [Inline] -> [Inline]
158+stripSpaces ils =
159+ reverse $ dropWhile (Space ==) $ reverse $ dropWhile (Space ==) ils
160+
153161blockNormalize :: Block -> Block
154−blockNormalize (Plain (Space : ils)) = blockNormalize (Plain ils)
155−blockNormalize (Plain ils) = Plain $ strNormalize ils
156−blockNormalize (Para (Space : ils)) = blockNormalize (Para ils)
157−blockNormalize (Para ils) = Para $ strNormalize ils
158−blockNormalize (Header n attr (Space : ils)) =
159− blockNormalize $ Header n attr ils
160−blockNormalize (Table (Space : ils) align width hdr cells) =
161− blockNormalize $ Table ils align width hdr cells
162+blockNormalize (Plain ils) = Plain $ strNormalize $ stripSpaces ils
163+blockNormalize (Para ils) = Para $ strNormalize $ stripSpaces ils
164+blockNormalize (Header n attr ils) =
165+ Header n attr $ strNormalize $ stripSpaces ils
162166blockNormalize (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
164170blockNormalize blk = blk
165171
166172runToInlines :: ReaderOptions -> Docx -> Run -> [Inline]