git.iko.soy/typeable/pandoc
on master help sign in
Powerpoint writer: simplify replaceNamedChildren function
13990c0Jesse Rosenthal
src/Text/Pandoc/Writers/Powerpoint.hs+17−9
@@ -820,16 +820,24 @@ getContentShape ns spTreeElem
820 filterChild (\e -> (isElem ns "p" "sp" e) && (shapeHasName ns "Content Placeholder 2" e)) spTreeElem
820 filterChild (\e -> (isElem ns "p" "sp" e) && (shapeHasName ns "Content Placeholder 2" e)) spTreeElem
821 | otherwise = Nothing
821 | otherwise = Nothing
822
822
823−contentIsElem :: NameSpaces -> String -> String -> Content -> Bool
823+replaceChildren :: (Element -> [Element]) -> Element -> Element
824−contentIsElem ns prefix name (Elem element) = isElem ns prefix name element
824+replaceChildren fun element =
825−contentIsElem _ _ _ _ = False
825+ element{elContent = concatMap fun' $ elContent element}
826−
826+ where fun' :: Content -> [Content]
827+ fun' (Elem e) = map Elem $ fun e
828+ fun' content = [content]
829+
827−replaceNamedChildren :: NameSpaces -> String -> String -> [Element] -> Element -> Element
830+replaceNamedChildren :: NameSpaces
831+ -> String
832+ -> String
833+ -> [Element]
834+ -> Element
835+ -> Element
828replaceNamedChildren ns prefix name newKids element =
836replaceNamedChildren ns prefix name newKids element =
829− let content = elContent element
837+ let fun :: Element -> [Element]
830− content' = filter (\c -> not (contentIsElem ns prefix name c)) content
838+ fun e | isElem ns prefix name e = newKids
831− in
839+ | otherwise = [e]
832− element{elContent = content' ++ map Elem newKids}
840+ in replaceChildren fun element
833
841
834----------------------------------------------------------------
842----------------------------------------------------------------
835
843