git.iko.soy/typeable/pandoc
on master help sign in
Powerpoint writer: Allow fallback options when looking for placeholder type.
f7fb102Jesse Rosenthal
src/Text/Pandoc/Writers/Powerpoint/Output.hs+17−9
@@ -1013,6 +1013,14 @@ getShapeByPlaceHolderType ns spTreeElem phType
1013 filterChild findPhType spTreeElem
1013 filterChild findPhType spTreeElem
1014 | otherwise = Nothing
1014 | otherwise = Nothing
1015
1015
1016+-- Like the above, but it tries a number of different placeholder types
1017+getShapeByPlaceHolderTypes :: NameSpaces -> Element -> [String] -> Maybe Element
1018+getShapeByPlaceHolderTypes _ _ [] = Nothing
1019+getShapeByPlaceHolderTypes ns spTreeElem (s:ss) =
1020+ case getShapeByPlaceHolderType ns spTreeElem s of
1021+ Just element -> Just element
1022+ Nothing -> getShapeByPlaceHolderTypes ns spTreeElem ss
1023+
1016getShapeByPlaceHolderIndex :: NameSpaces -> Element -> String -> Maybe Element
1024getShapeByPlaceHolderIndex :: NameSpaces -> Element -> String -> Maybe Element
1017getShapeByPlaceHolderIndex ns spTreeElem phIdx
1025getShapeByPlaceHolderIndex ns spTreeElem phIdx
1018 | isElem ns "p" "spTree" spTreeElem =
1026 | isElem ns "p" "spTree" spTreeElem =
@@ -1027,12 +1035,12 @@ getShapeByPlaceHolderIndex ns spTreeElem phIdx
1027 | otherwise = Nothing
1035 | otherwise = Nothing
1028
1036
1029
1037
1030−nonBodyTextToElement :: PandocMonad m => Element -> String -> [ParaElem] -> P m Element
1038+nonBodyTextToElement :: PandocMonad m => Element -> [String] -> [ParaElem] -> P m Element
1031−nonBodyTextToElement layout phType paraElements
1039+nonBodyTextToElement layout phTypes paraElements
1032 | ns <- elemToNameSpaces layout
1040 | ns <- elemToNameSpaces layout
1033 , Just cSld <- findChild (elemName ns "p" "cSld") layout
1041 , Just cSld <- findChild (elemName ns "p" "cSld") layout
1034 , Just spTree <- findChild (elemName ns "p" "spTree") cSld
1042 , Just spTree <- findChild (elemName ns "p" "spTree") cSld
1035− , Just sp <- getShapeByPlaceHolderType ns spTree phType = do
1043+ , Just sp <- getShapeByPlaceHolderTypes ns spTree phTypes = do
1036 let hdrPara = Paragraph def paraElements
1044 let hdrPara = Paragraph def paraElements
1037 element <- paragraphToElement hdrPara
1045 element <- paragraphToElement hdrPara
1038 let txBody = mknode "p:txBody" [] $
1046 let txBody = mknode "p:txBody" [] $
@@ -1047,7 +1055,7 @@ contentToElement layout hdrShape shapes
1047 | ns <- elemToNameSpaces layout
1055 | ns <- elemToNameSpaces layout
1048 , Just cSld <- findChild (elemName ns "p" "cSld") layout
1056 , Just cSld <- findChild (elemName ns "p" "cSld") layout
1049 , Just spTree <- findChild (elemName ns "p" "spTree") cSld = do
1057 , Just spTree <- findChild (elemName ns "p" "spTree") cSld = do
1050− element <- nonBodyTextToElement layout "title" hdrShape
1058+ element <- nonBodyTextToElement layout ["title"] hdrShape
1051 let hdrShapeElements = if null hdrShape
1059 let hdrShapeElements = if null hdrShape
1052 then []
1060 then []
1053 else [element]
1061 else [element]
@@ -1065,7 +1073,7 @@ twoColumnToElement layout hdrShape shapesL shapesR
1065 | ns <- elemToNameSpaces layout
1073 | ns <- elemToNameSpaces layout
1066 , Just cSld <- findChild (elemName ns "p" "cSld") layout
1074 , Just cSld <- findChild (elemName ns "p" "cSld") layout
1067 , Just spTree <- findChild (elemName ns "p" "spTree") cSld = do
1075 , Just spTree <- findChild (elemName ns "p" "spTree") cSld = do
1068− element <- nonBodyTextToElement layout "title" hdrShape
1076+ element <- nonBodyTextToElement layout ["title"] hdrShape
1069 let hdrShapeElements = if null hdrShape
1077 let hdrShapeElements = if null hdrShape
1070 then []
1078 then []
1071 else [element]
1079 else [element]
@@ -1089,7 +1097,7 @@ titleToElement layout titleElems
1089 | ns <- elemToNameSpaces layout
1097 | ns <- elemToNameSpaces layout
1090 , Just cSld <- findChild (elemName ns "p" "cSld") layout
1098 , Just cSld <- findChild (elemName ns "p" "cSld") layout
1091 , Just spTree <- findChild (elemName ns "p" "spTree") cSld = do
1099 , Just spTree <- findChild (elemName ns "p" "spTree") cSld = do
1092− element <- nonBodyTextToElement layout "title" titleElems
1100+ element <- nonBodyTextToElement layout ["title", "ctrTitle"] titleElems
1093 let titleShapeElements = if null titleElems
1101 let titleShapeElements = if null titleElems
1094 then []
1102 then []
1095 else [element]
1103 else [element]
@@ -1103,15 +1111,15 @@ metadataToElement layout titleElems subtitleElems authorsElems dateElems
1103 , Just spTree <- findChild (elemName ns "p" "spTree") cSld = do
1111 , Just spTree <- findChild (elemName ns "p" "spTree") cSld = do
1104 titleShapeElements <- if null titleElems
1112 titleShapeElements <- if null titleElems
1105 then return []
1113 then return []
1106− else sequence [nonBodyTextToElement layout "ctrTitle" titleElems]
1114+ else sequence [nonBodyTextToElement layout ["ctrTitle"] titleElems]
1107 let combinedAuthorElems = intercalate [Break] authorsElems
1115 let combinedAuthorElems = intercalate [Break] authorsElems
1108 subtitleAndAuthorElems = intercalate [Break, Break] [subtitleElems, combinedAuthorElems]
1116 subtitleAndAuthorElems = intercalate [Break, Break] [subtitleElems, combinedAuthorElems]
1109 subtitleShapeElements <- if null subtitleAndAuthorElems
1117 subtitleShapeElements <- if null subtitleAndAuthorElems
1110 then return []
1118 then return []
1111− else sequence [nonBodyTextToElement layout "subTitle" subtitleAndAuthorElems]
1119+ else sequence [nonBodyTextToElement layout ["subTitle"] subtitleAndAuthorElems]
1112 dateShapeElements <- if null dateElems
1120 dateShapeElements <- if null dateElems
1113 then return []
1121 then return []
1114− else sequence [nonBodyTextToElement layout "dt" dateElems]
1122+ else sequence [nonBodyTextToElement layout ["dt"] dateElems]
1115 return $ replaceNamedChildren ns "p" "sp"
1123 return $ replaceNamedChildren ns "p" "sp"
1116 (titleShapeElements ++ subtitleShapeElements ++ dateShapeElements)
1124 (titleShapeElements ++ subtitleShapeElements ++ dateShapeElements)
1117 spTree
1125 spTree