Merge pull request #1374 from jkr/track-changes-options
Track changes with options
This commit is contained in:
commit
9f694619cd
11 changed files with 85 additions and 7 deletions
11
README
11
README
|
@ -308,6 +308,17 @@ Reader options
|
|||
`--tab-stop=`*NUMBER*
|
||||
: Specify the number of spaces per tab (default is 4).
|
||||
|
||||
`--track-changes=`*accept|reject|all*
|
||||
: Specifies what to do with insertions and deletions produced by the MS
|
||||
Word "track-changes" feature. *accept* (the default), inserts all
|
||||
insertions, and ignores all deletions. *reject* inserts all
|
||||
deletions and ignores insertions. *all* puts in both insertions
|
||||
and deletions, wrapped in spans with `insertion` and `deletion`
|
||||
classes, respectively. The author and time of change is
|
||||
included. *all* is useful for scripting: only accepting changes
|
||||
from a certain reviewer, say, or before a certain date. This
|
||||
option only affects the Docx reader.
|
||||
|
||||
General writer options
|
||||
----------------------
|
||||
|
||||
|
|
17
pandoc.hs
17
pandoc.hs
|
@ -174,6 +174,7 @@ data Opt = Opt
|
|||
, optTeXLigatures :: Bool -- ^ Use TeX ligatures for quotes/dashes
|
||||
, optDefaultImageExtension :: String -- ^ Default image extension
|
||||
, optTrace :: Bool -- ^ Print debug information
|
||||
, optTrackChanges :: TrackChanges -- ^ Accept or reject MS Word track-changes.
|
||||
}
|
||||
|
||||
-- | Defaults for command-line options.
|
||||
|
@ -230,6 +231,7 @@ defaultOpts = Opt
|
|||
, optTeXLigatures = True
|
||||
, optDefaultImageExtension = ""
|
||||
, optTrace = False
|
||||
, optTrackChanges = AcceptChanges
|
||||
}
|
||||
|
||||
-- | A list of functions, each transforming the options data structure
|
||||
|
@ -776,6 +778,19 @@ options =
|
|||
(\opt -> return opt { optTrace = True }))
|
||||
"" -- "Turn on diagnostic tracing in readers."
|
||||
|
||||
, Option "" ["track-changes"]
|
||||
(ReqArg
|
||||
(\arg opt -> do
|
||||
action <- case arg of
|
||||
"accept" -> return AcceptChanges
|
||||
"reject" -> return RejectChanges
|
||||
"all" -> return AllChanges
|
||||
_ -> err 6
|
||||
("Unknown option for track-changes: " ++ arg)
|
||||
return opt { optTrackChanges = action })
|
||||
"accept|reject|all")
|
||||
"" -- "Accepting or reject MS Word track-changes.""
|
||||
|
||||
, Option "" ["dump-args"]
|
||||
(NoArg
|
||||
(\opt -> return opt { optDumpArgs = True }))
|
||||
|
@ -973,6 +988,7 @@ main = do
|
|||
, optTeXLigatures = texLigatures
|
||||
, optDefaultImageExtension = defaultImageExtension
|
||||
, optTrace = trace
|
||||
, optTrackChanges = trackChanges
|
||||
} = opts
|
||||
|
||||
when dumpArgs $
|
||||
|
@ -1097,6 +1113,7 @@ main = do
|
|||
, readerApplyMacros = not laTeXOutput
|
||||
, readerDefaultImageExtension = defaultImageExtension
|
||||
, readerTrace = trace
|
||||
, readerTrackChanges = trackChanges
|
||||
}
|
||||
|
||||
let writerOptions = def { writerStandalone = standalone',
|
||||
|
|
|
@ -41,6 +41,7 @@ module Text.Pandoc.Options ( Extension(..)
|
|||
, HTMLSlideVariant (..)
|
||||
, EPUBVersion (..)
|
||||
, WriterOptions (..)
|
||||
, TrackChanges (..)
|
||||
, def
|
||||
, isEnabled
|
||||
) where
|
||||
|
@ -211,6 +212,7 @@ data ReaderOptions = ReaderOptions{
|
|||
-- indented code blocks
|
||||
, readerDefaultImageExtension :: String -- ^ Default extension for images
|
||||
, readerTrace :: Bool -- ^ Print debugging info
|
||||
, readerTrackChanges :: TrackChanges
|
||||
} deriving (Show, Read)
|
||||
|
||||
instance Default ReaderOptions
|
||||
|
@ -227,6 +229,7 @@ instance Default ReaderOptions
|
|||
, readerIndentedCodeClasses = []
|
||||
, readerDefaultImageExtension = ""
|
||||
, readerTrace = False
|
||||
, readerTrackChanges = AcceptChanges
|
||||
}
|
||||
|
||||
--
|
||||
|
@ -264,6 +267,12 @@ data HTMLSlideVariant = S5Slides
|
|||
| NoSlides
|
||||
deriving (Show, Read, Eq)
|
||||
|
||||
-- | Options for accepting or rejecting MS Word track-changes.
|
||||
data TrackChanges = AcceptChanges
|
||||
| RejectChanges
|
||||
| AllChanges
|
||||
deriving (Show, Read, Eq)
|
||||
|
||||
-- | Options for writers
|
||||
data WriterOptions = WriterOptions
|
||||
{ writerStandalone :: Bool -- ^ Include header and footer
|
||||
|
|
|
@ -234,9 +234,22 @@ runToInlines opts docx@(Docx _ notes _ _ _) (Endnote fnId) =
|
|||
|
||||
parPartToInlines :: ReaderOptions -> Docx -> ParPart -> [Inline]
|
||||
parPartToInlines opts docx (PlainRun r) = runToInlines opts docx r
|
||||
parPartToInlines opts docx (Insertion _ _ _ runs) =
|
||||
concatMap (runToInlines opts docx) runs
|
||||
parPartToInlines _ _ (Deletion _ _ _ _) = []
|
||||
parPartToInlines opts docx (Insertion _ author date runs) =
|
||||
case readerTrackChanges opts of
|
||||
AcceptChanges -> concatMap (runToInlines opts docx) runs
|
||||
RejectChanges -> []
|
||||
AllChanges ->
|
||||
[Span
|
||||
("", ["insertion"], [("author", author), ("date", date)])
|
||||
(concatMap (runToInlines opts docx) runs)]
|
||||
parPartToInlines opts docx (Deletion _ author date runs) =
|
||||
case readerTrackChanges opts of
|
||||
AcceptChanges -> []
|
||||
RejectChanges -> concatMap (runToInlines opts docx) runs
|
||||
AllChanges ->
|
||||
[Span
|
||||
("", ["deletion"], [("author", author), ("date", date)])
|
||||
(concatMap (runToInlines opts docx) runs)]
|
||||
parPartToInlines _ _ (BookMark _ anchor) | anchor `elem` dummyAnchors = []
|
||||
parPartToInlines _ _ (BookMark _ anchor) = [Span (anchor, ["anchor"], []) []]
|
||||
parPartToInlines _ (Docx _ _ _ rels _) (Drawing relid) =
|
||||
|
|
|
@ -124,13 +124,37 @@ tests = [ testGroup "inlines"
|
|||
]
|
||||
, testGroup "track changes"
|
||||
[ testCompare
|
||||
"insert insertion (insertions only)"
|
||||
"insertion (default)"
|
||||
"docx.track_changes_insertion.docx"
|
||||
"docx.track_changes_insertion_only_ins.native"
|
||||
"docx.track_changes_insertion_accept.native"
|
||||
, testCompareWithOpts def{readerTrackChanges=AcceptChanges}
|
||||
"insert insertion (accept)"
|
||||
"docx.track_changes_insertion.docx"
|
||||
"docx.track_changes_insertion_accept.native"
|
||||
, testCompareWithOpts def{readerTrackChanges=RejectChanges}
|
||||
"remove insertion (reject)"
|
||||
"docx.track_changes_insertion.docx"
|
||||
"docx.track_changes_insertion_reject.native"
|
||||
, testCompare
|
||||
"skip deletion (insertions only)"
|
||||
"deletion (default)"
|
||||
"docx.track_changes_deletion.docx"
|
||||
"docx.track_changes_deletion_only_ins.native"
|
||||
"docx.track_changes_deletion_accept.native"
|
||||
, testCompareWithOpts def{readerTrackChanges=AcceptChanges}
|
||||
"remove deletion (accept)"
|
||||
"docx.track_changes_deletion.docx"
|
||||
"docx.track_changes_deletion_accept.native"
|
||||
, testCompareWithOpts def{readerTrackChanges=RejectChanges}
|
||||
"insert deletion (reject)"
|
||||
"docx.track_changes_deletion.docx"
|
||||
"docx.track_changes_deletion_reject.native"
|
||||
, testCompareWithOpts def{readerTrackChanges=AllChanges}
|
||||
"keep insertion (all)"
|
||||
"docx.track_changes_deletion.docx"
|
||||
"docx.track_changes_deletion_all.native"
|
||||
, testCompareWithOpts def{readerTrackChanges=AllChanges}
|
||||
"keep deletion (all)"
|
||||
"docx.track_changes_deletion.docx"
|
||||
"docx.track_changes_deletion_all.native"
|
||||
]
|
||||
]
|
||||
|
||||
|
|
1
tests/docx.track_changes_deletion_all.native
Normal file
1
tests/docx.track_changes_deletion_all.native
Normal file
|
@ -0,0 +1 @@
|
|||
[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "text",Space,Str "with",Space,Str "a",Span ("",["deletion"],[("author","eng-dept"),("date","2014-06-25T10:42:00Z")]) [Str "n",Space,Str "excessively",Space,Str "modified"],Space,Str "deletion."]]
|
1
tests/docx.track_changes_deletion_reject.native
Normal file
1
tests/docx.track_changes_deletion_reject.native
Normal file
|
@ -0,0 +1 @@
|
|||
[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "text",Space,Str "with",Space,Str "an",Space,Str "excessively",Space,Str "modified",Space,Str "deletion."]]
|
1
tests/docx.track_changes_insertion_all.native
Normal file
1
tests/docx.track_changes_insertion_all.native
Normal file
|
@ -0,0 +1 @@
|
|||
[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "text",Space,Str "with",Space,Span ("",["insertion"],[("author","eng-dept"),("date","2014-06-25T10:40:00Z")]) [Str "two",Space,Str "exciting"],Space,Str "insertions."]]
|
1
tests/docx.track_changes_insertion_reject.native
Normal file
1
tests/docx.track_changes_insertion_reject.native
Normal file
|
@ -0,0 +1 @@
|
|||
[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "text",Space,Str "with",Space,Str "insertions."]]
|
Loading…
Reference in a new issue