git.iko.soy/typeable/pandoc
on master help sign in
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.

commit4fc3f511863c578be6a3237d02133da25db0ce05 authorJesse Rosenthal <jrosenthal@jhu.edu> dateSat 30 Dec 2017, 08:21 (9 years ago) parentf654c20
2 files changed+15−6
src/Text/Pandoc/Readers/Docx/Parse.hs+9−5 test/docx/nested_anchors_in_header.native+6−1
src/Text/Pandoc/Readers/Docx/Parse.hs+9−5
@@ -118,17 +118,21 @@ mapD f xs =
118118 in
119119 concatMapM handler xs
120120
121−unwrapSDT :: NameSpaces -> Content -> Content
121+unwrapSDT :: NameSpaces -> Content -> [Content]
122122unwrapSDT ns (Elem element)
123123 | isElem ns "w" "sdt" element
124124 , Just sdtContent <- findChildByName ns "w" "sdtContent" element
125− , child : _ <- elChildren sdtContent
126− = Elem child
127−unwrapSDT _ content = content
125+ = map Elem $ elChildren sdtContent
126+unwrapSDT _ content = [content]
127+
128+unwrapSDTchild :: NameSpaces -> Content -> Content
129+unwrapSDTchild ns (Elem element) =
130+ Elem $ element { elContent = concatMap (unwrapSDT ns) (elContent element) }
131+unwrapSDTchild _ content = content
128132
129133walkDocument' :: NameSpaces -> XMLC.Cursor -> XMLC.Cursor
130134walkDocument' ns cur =
131− let modifiedCur = XMLC.modifyContent (unwrapSDT ns) cur
135+ let modifiedCur = XMLC.modifyContent (unwrapSDTchild ns) cur
132136 in
133137 case XMLC.nextDF modifiedCur of
134138 Just cur' -> walkDocument' ns cur'
test/docx/nested_anchors_in_header.native+6−1
@@ -1,4 +1,9 @@
1−[Header 1 ("short-instructions",[],[]) [Str "Short",Space,Str "instructions"]
1+[Header 1 ("\1086\1075\1083\1072\1074\1083\1077\1085\1080\1077",["TOCHeading"],[]) [Str "\1054\1075\1083\1072\1074\1083\1077\1085\1080\1077"]
2+,Para [Link ("",[],[]) [Str "Short",Space,Str "instructions",Space,Str "1"] ("#short-instructions","")]
3+,Para [Link ("",[],[]) [Str "Some",Space,Str "instructions",Space,Str "1"] ("#some-instructions","")]
4+,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","")]
5+,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","")]
6+,Header 1 ("short-instructions",[],[]) [Str "Short",Space,Str "instructions"]
27,Para [Link ("",[],[]) [Str "Open",Space,Str "remote",Space,Str "folder"] ("#remote-folder-or-longlonglonglonglong-file-with-manymanymanymany-letters-inside-opening","")]
38,Para [Str "Do",Space,Str "staff"]
49,Para [Link ("",[],[]) [Str "Close",Space,Str "remote",Space,Str "folder"] ("#remote-folder-or-longlonglonglonglong-file-with-manymanymanymany-letters-inside-closing","")]