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:
parent
f654c2022f
commit
4fc3f51186
2 changed files with 15 additions and 6 deletions
|
@ -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'
|
||||
|
|
|
@ -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","")]
|
||||
|
|
Loading…
Reference in a new issue