Docx reader: Read multiple children of w:sdtContents`

Previously we had only read the first child of an sdtContents tag. Now
we replace sdt with all children of the sdtContents tag.

This changes the expected test result of our nested_anchors test,
since now we read docx's generated TOCs.
This commit is contained in:
Jesse Rosenthal 2017-12-30 08:21:42 -05:00
parent f654c2022f
commit 4fc3f51186
2 changed files with 15 additions and 6 deletions

View file

@ -118,17 +118,21 @@ mapD f xs =
in
concatMapM handler xs
unwrapSDT :: NameSpaces -> Content -> Content
unwrapSDT :: NameSpaces -> Content -> [Content]
unwrapSDT ns (Elem element)
| isElem ns "w" "sdt" element
, Just sdtContent <- findChildByName ns "w" "sdtContent" element
, child : _ <- elChildren sdtContent
= Elem child
unwrapSDT _ content = content
= map Elem $ elChildren sdtContent
unwrapSDT _ content = [content]
unwrapSDTchild :: NameSpaces -> Content -> Content
unwrapSDTchild ns (Elem element) =
Elem $ element { elContent = concatMap (unwrapSDT ns) (elContent element) }
unwrapSDTchild _ content = content
walkDocument' :: NameSpaces -> XMLC.Cursor -> XMLC.Cursor
walkDocument' ns cur =
let modifiedCur = XMLC.modifyContent (unwrapSDT ns) cur
let modifiedCur = XMLC.modifyContent (unwrapSDTchild ns) cur
in
case XMLC.nextDF modifiedCur of
Just cur' -> walkDocument' ns cur'

View file

@ -1,4 +1,9 @@
[Header 1 ("short-instructions",[],[]) [Str "Short",Space,Str "instructions"]
[Header 1 ("\1086\1075\1083\1072\1074\1083\1077\1085\1080\1077",["TOCHeading"],[]) [Str "\1054\1075\1083\1072\1074\1083\1077\1085\1080\1077"]
,Para [Link ("",[],[]) [Str "Short",Space,Str "instructions",Space,Str "1"] ("#short-instructions","")]
,Para [Link ("",[],[]) [Str "Some",Space,Str "instructions",Space,Str "1"] ("#some-instructions","")]
,Para [Link ("",[],[]) [Str "Remote",Space,Str "folder",Space,Str "or",Space,Str "longlonglonglonglong",Space,Str "file",Space,Str "with",Space,Str "manymanymanymany",Space,Str "letters",Space,Str "inside",Space,Str "opening",Space,Str "2"] ("#remote-folder-or-longlonglonglonglong-file-with-manymanymanymany-letters-inside-opening","")]
,Para [Link ("",[],[]) [Str "Remote",Space,Str "folder",Space,Str "or",Space,Str "longlonglonglonglong",Space,Str "file",Space,Str "with",Space,Str "manymanymanymany",Space,Str "letters",Space,Str "inside",Space,Str "closing",Space,Str "2"] ("#remote-folder-or-longlonglonglonglong-file-with-manymanymanymany-letters-inside-closing","")]
,Header 1 ("short-instructions",[],[]) [Str "Short",Space,Str "instructions"]
,Para [Link ("",[],[]) [Str "Open",Space,Str "remote",Space,Str "folder"] ("#remote-folder-or-longlonglonglonglong-file-with-manymanymanymany-letters-inside-opening","")]
,Para [Str "Do",Space,Str "staff"]
,Para [Link ("",[],[]) [Str "Close",Space,Str "remote",Space,Str "folder"] ("#remote-folder-or-longlonglonglonglong-file-with-manymanymanymany-letters-inside-closing","")]