git.iko.soy/typeable/pandoc
on master help sign in
Docx reader: Read multiple children of w:sdtContents`
4fc3f51Jesse Rosenthal
src/Text/Pandoc/Readers/Docx/Parse.hs+9−5
@@ -118,17 +118,21 @@ mapD f xs =
118 in
118 in
119 concatMapM handler xs
119 concatMapM handler xs
120
120
121−unwrapSDT :: NameSpaces -> Content -> Content
121+unwrapSDT :: NameSpaces -> Content -> [Content]
122unwrapSDT ns (Elem element)
122unwrapSDT ns (Elem element)
123 | isElem ns "w" "sdt" element
123 | isElem ns "w" "sdt" element
124 , Just sdtContent <- findChildByName ns "w" "sdtContent" element
124 , Just sdtContent <- findChildByName ns "w" "sdtContent" element
125− , child : _ <- elChildren sdtContent
125+ = map Elem $ elChildren sdtContent
126− = Elem child
126+unwrapSDT _ content = [content]
127+
128+unwrapSDTchild :: NameSpaces -> Content -> Content
129+unwrapSDTchild ns (Elem element) =
130+ Elem $ element { elContent = concatMap (unwrapSDT ns) (elContent element) }
127−unwrapSDT _ content = content
131+unwrapSDTchild _ content = content
128
132
129walkDocument' :: NameSpaces -> XMLC.Cursor -> XMLC.Cursor
133walkDocument' :: NameSpaces -> XMLC.Cursor -> XMLC.Cursor
130walkDocument' ns cur =
134walkDocument' ns cur =
131− let modifiedCur = XMLC.modifyContent (unwrapSDT ns) cur
135+ let modifiedCur = XMLC.modifyContent (unwrapSDTchild ns) cur
132 in
136 in
133 case XMLC.nextDF modifiedCur of
137 case XMLC.nextDF modifiedCur of
134 Just cur' -> walkDocument' ns cur'
138 Just cur' -> walkDocument' ns cur'
test/docx/nested_anchors_in_header.native+6−1
@@ -1,4 +1,9 @@
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","")]
1−[Header 1 ("short-instructions",[],[]) [Str "Short",Space,Str "instructions"]
6+,Header 1 ("short-instructions",[],[]) [Str "Short",Space,Str "instructions"]
2,Para [Link ("",[],[]) [Str "Open",Space,Str "remote",Space,Str "folder"] ("#remote-folder-or-longlonglonglonglong-file-with-manymanymanymany-letters-inside-opening","")]
7,Para [Link ("",[],[]) [Str "Open",Space,Str "remote",Space,Str "folder"] ("#remote-folder-or-longlonglonglonglong-file-with-manymanymanymany-letters-inside-opening","")]
3,Para [Str "Do",Space,Str "staff"]
8,Para [Str "Do",Space,Str "staff"]
4,Para [Link ("",[],[]) [Str "Close",Space,Str "remote",Space,Str "folder"] ("#remote-folder-or-longlonglonglonglong-file-with-manymanymanymany-letters-inside-closing","")]
9,Para [Link ("",[],[]) [Str "Close",Space,Str "remote",Space,Str "folder"] ("#remote-folder-or-longlonglonglonglong-file-with-manymanymanymany-letters-inside-closing","")]