@@ -281,10 +281,6 @@ elemToBody ns element | qName (elName element) == "body" && qURI (elName element
281281 $ map (elemToBodyPart ns) $ filterChildrenName (isParOrTbl ns) element
282282elemToBody _ _ = Nothing
283283
284−isRunOrLinkOrBookmark :: NameSpaces -> QName -> Bool
285−isRunOrLinkOrBookmark ns q = qName q `elem` ["r", "hyperlink", "bookmarkStart"] &&
286− qURI q == (lookup "w" ns)
287−
288284elemToNumInfo :: NameSpaces -> Element -> Maybe (String, String)
289285elemToNumInfo ns element
290286 | qName (elName element) == "p" &&
@@ -319,9 +315,8 @@ elemToBodyPart ns element
319315 | qName (elName element) == "p" &&
320316 qURI (elName element) == (lookup "w" ns) =
321317 let parstyle = elemToParagraphStyle ns element
322− parparts = mapMaybe id
323− $ map (elemToParPart ns)
324− $ filterChildrenName (isRunOrLinkOrBookmark ns) element
318+ parparts = mapMaybe (elemToParPart ns)
319+ $ elChildren element
325320 in
326321 case elemToNumInfo ns element of
327322 Just (numId, lvl) -> Just $ ListItem parstyle numId lvl parparts
@@ -455,6 +450,8 @@ elemToCell ns element
455450elemToCell _ _ = Nothing
456451
457452data ParPart = PlainRun Run
453+ | Insertion ChangeId Author ChangeDate [Run]
454+ | Deletion ChangeId Author ChangeDate [Run]
458455 | BookMark BookMarkId Anchor
459456 | InternalHyperLink Anchor [Run]
460457 | ExternalHyperLink RelId [Run]
@@ -539,7 +536,7 @@ elemToRun _ _ = Nothing
539536
540537elemToRunElem :: NameSpaces -> Element -> Maybe RunElem
541538elemToRunElem ns element
542− | qName (elName element) == "t" &&
539+ | (qName (elName element) == "t" || qName (elName element) == "delText") &&
543540 qURI (elName element) == (lookup "w" ns) =
544541 Just $ TextRun (strContent element)
545542 | qName (elName element) == "br" &&
@@ -579,6 +576,22 @@ elemToParPart ns element
579576 Nothing -> do
580577 r <- elemToRun ns element
581578 return $ PlainRun r
579+elemToParPart ns element
580+ | qName (elName element) == "ins" &&
581+ qURI (elName element) == (lookup "w" ns) = do
582+ cId <- findAttr (QName "id" (lookup "w" ns) (Just "w")) element
583+ cAuthor <- findAttr (QName "author" (lookup "w" ns) (Just "w")) element
584+ cDate <- findAttr (QName "date" (lookup "w" ns) (Just "w")) element
585+ let runs = mapMaybe (elemToRun ns) (elChildren element)
586+ return $ Insertion cId cAuthor cDate runs
587+elemToParPart ns element
588+ | qName (elName element) == "del" &&
589+ qURI (elName element) == (lookup "w" ns) = do
590+ cId <- findAttr (QName "id" (lookup "w" ns) (Just "w")) element
591+ cAuthor <- findAttr (QName "author" (lookup "w" ns) (Just "w")) element
592+ cDate <- findAttr (QName "date" (lookup "w" ns) (Just "w")) element
593+ let runs = mapMaybe (elemToRun ns) (elChildren element)
594+ return $ Deletion cId cAuthor cDate runs
582595elemToParPart ns element
583596 | qName (elName element) == "bookmarkStart" &&
584597 qURI (elName element) == (lookup "w" ns) = do
@@ -604,4 +617,6 @@ type Target = String
604617type Anchor = String
605618type BookMarkId = String
606619type RelId = String
607−
620+type ChangeId = String
621+type Author = String
622+type ChangeDate = String