Skip to content

Instantly share code, notes, and snippets.

@kofm
Forked from noamross/criticmarkup.lua
Created December 10, 2020 08:04
Show Gist options
  • Save kofm/56557deb9f20dd5f34c7e234a7de0b4b to your computer and use it in GitHub Desktop.
Save kofm/56557deb9f20dd5f34c7e234a7de0b4b to your computer and use it in GitHub Desktop.
A pandoc filter for MS Word track changes to criticmarkup
-- a lua filter for panodoc
-- run pandoc your_word_doc.docx --track-change=all -t markdown --lua-filter=criticmarkup.lua
-- TODO: Detect substitutions in adjacent insertion/deletions
-- TODO: capture whole comment hightlight rather than just start point of comment
function Span(elem)
if elem.classes[1] and elem.classes[1] == "insertion" then
local opener = { pandoc.RawInline(FORMAT, "{++ ") }
local closer = { pandoc.RawInline(FORMAT, " ++}") }
return opener .. elem.content .. closer
elseif
elem.classes[1] and elem.classes[1] == "deletion" then
local opener = { pandoc.RawInline(FORMAT, "{-- ") }
local closer = { pandoc.RawInline(FORMAT, " --}") }
return opener .. elem.content .. closer
elseif
elem.classes[1] and elem.classes[1] == "comment-start" then
if elem.t == nil then
return pandoc.RawInline(FORMAT, "")
end
local opener = { pandoc.RawInline(FORMAT, "{>> ") }
local closer = { pandoc.RawInline(FORMAT, " ("), pandoc.RawInline(FORMAT, elem.attributes.author), pandoc.RawInline(FORMAT, ")<<}")}
return opener .. elem.content .. closer
elseif
elem.classes[1] and (elem.classes[1] == "comment-end" or elem.classes[1] == "paragraph-insertion") then
return pandoc.RawInline(FORMAT, "")
else
return nil
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment