From f6fde0ae5ea21d91d610c21c0488029f9c26ca3f Mon Sep 17 00:00:00 2001 From: Jesse Rosenthal Date: Tue, 2 Jan 2018 07:50:08 -0500 Subject: Docx reader: Extract tracked changes type from parpart. We're going to want to use it elsewhere as well, in upcoming tracking of paragraph insertion/deletion. --- src/Text/Pandoc/Readers/Docx.hs | 4 ++-- src/Text/Pandoc/Readers/Docx/Parse.hs | 21 +++++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/Text/Pandoc/Readers/Docx.hs b/src/Text/Pandoc/Readers/Docx.hs index a2f22c1ea..3ac3b7563 100644 --- a/src/Text/Pandoc/Readers/Docx.hs +++ b/src/Text/Pandoc/Readers/Docx.hs @@ -364,7 +364,7 @@ parPartToInlines parPart = parPartToInlines' :: PandocMonad m => ParPart -> DocxContext m Inlines parPartToInlines' (PlainRun r) = runToInlines r -parPartToInlines' (Insertion _ author date runs) = do +parPartToInlines' (ChangedRuns (TrackedChange Insertion (ChangeInfo _ author date)) runs) = do opts <- asks docxOptions case readerTrackChanges opts of AcceptChanges -> smushInlines <$> mapM runToInlines runs @@ -373,7 +373,7 @@ parPartToInlines' (Insertion _ author date runs) = do ils <- smushInlines <$> mapM runToInlines runs let attr = ("", ["insertion"], [("author", author), ("date", date)]) return $ spanWith attr ils -parPartToInlines' (Deletion _ author date runs) = do +parPartToInlines' (ChangedRuns (TrackedChange Deletion (ChangeInfo _ author date)) runs) = do opts <- asks docxOptions case readerTrackChanges opts of AcceptChanges -> return mempty diff --git a/src/Text/Pandoc/Readers/Docx/Parse.hs b/src/Text/Pandoc/Readers/Docx/Parse.hs index 071f901b6..71ab5085b 100644 --- a/src/Text/Pandoc/Readers/Docx/Parse.hs +++ b/src/Text/Pandoc/Readers/Docx/Parse.hs @@ -51,6 +51,9 @@ module Text.Pandoc.Readers.Docx.Parse ( Docx(..) , ParagraphStyle(..) , Row(..) , Cell(..) + , TrackedChange(..) + , ChangeType(..) + , ChangeInfo(..) , archiveToDocx , archiveToDocxWithWarnings ) where @@ -198,6 +201,15 @@ data ParIndentation = ParIndentation { leftParIndent :: Maybe Integer , hangingParIndent :: Maybe Integer} deriving Show +data ChangeType = Insertion | Deletion + deriving Show + +data ChangeInfo = ChangeInfo ChangeId Author ChangeDate + deriving Show + +data TrackedChange = TrackedChange ChangeType ChangeInfo + deriving Show + data ParagraphStyle = ParagraphStyle { pStyle :: [String] , indentation :: Maybe ParIndentation , dropCap :: Bool @@ -241,8 +253,7 @@ data Cell = Cell [BodyPart] type Extent = Maybe (Double, Double) data ParPart = PlainRun Run - | Insertion ChangeId Author ChangeDate [Run] - | Deletion ChangeId Author ChangeDate [Run] + | ChangedRuns TrackedChange [Run] | CommentStart CommentId Author CommentDate [BodyPart] | CommentEnd CommentId | BookMark BookMarkId Anchor @@ -732,14 +743,16 @@ elemToParPart ns element , Just cAuthor <- findAttrByName ns "w" "author" element , Just cDate <- findAttrByName ns "w" "date" element = do runs <- mapD (elemToRun ns) (elChildren element) - return $ Insertion cId cAuthor cDate runs + return $ ChangedRuns + (TrackedChange Insertion (ChangeInfo cId cAuthor cDate)) runs elemToParPart ns element | isElem ns "w" "del" element || isElem ns "w" "moveFrom" element , Just cId <- findAttrByName ns "w" "id" element , Just cAuthor <- findAttrByName ns "w" "author" element , Just cDate <- findAttrByName ns "w" "date" element = do runs <- mapD (elemToRun ns) (elChildren element) - return $ Deletion cId cAuthor cDate runs + return $ ChangedRuns + (TrackedChange Deletion (ChangeInfo cId cAuthor cDate)) runs elemToParPart ns element | isElem ns "w" "smartTag" element = do runs <- mapD (elemToRun ns) (elChildren element) -- cgit v1.2.3