git.iko.soy/typeable/pandoc
on master help sign in
Powerpoint writer: Read speaker note templates conditionally

If there are speaker notes in the presentation, we read in the notesMasters templates from the reference pptx file.

commiteace2357dde61bebbd7b93d6f4073620353a384a authorJesse Rosenthal <jrosenthal@jhu.edu> dateSat 17 Feb 2018, 10:01 (9 years ago) parent6c6ac9f
1 file changed+38−18
src/Text/Pandoc/Writers/Powerpoint/Output.hs+38−18
src/Text/Pandoc/Writers/Powerpoint/Output.hs+38−18
@@ -56,7 +56,7 @@ import Text.Pandoc.MIME
5656import qualified Data.ByteString.Lazy as BL
5757import Text.Pandoc.Writers.OOXML
5858import qualified Data.Map as M
59−import Data.Maybe (mapMaybe, listToMaybe, fromMaybe)
59+import Data.Maybe (mapMaybe, listToMaybe, fromMaybe, isJust)
6060import Text.Pandoc.ImageSize
6161import Control.Applicative ((<|>))
6262import System.FilePath.Glob
@@ -167,19 +167,35 @@ copyFileToArchive arch fp = do
167167 Nothing -> fail $ fp ++ " missing in reference file"
168168 Just e -> return $ addEntryToArchive e arch
169169
170−inheritedPatterns :: [Pattern]
171−inheritedPatterns = map compile [ "docProps/app.xml"
172− , "ppt/slideLayouts/slideLayout*.xml"
173− , "ppt/slideLayouts/_rels/slideLayout*.xml.rels"
174− , "ppt/slideMasters/slideMaster1.xml"
175− , "ppt/slideMasters/_rels/slideMaster1.xml.rels"
176− , "ppt/theme/theme1.xml"
177− , "ppt/theme/_rels/theme1.xml.rels"
178− , "ppt/presProps.xml"
179− , "ppt/viewProps.xml"
180− , "ppt/tableStyles.xml"
181− , "ppt/media/image*"
182− ]
170+alwaysInheritedPatterns :: [Pattern]
171+alwaysInheritedPatterns =
172+ map compile [ "docProps/app.xml"
173+ , "ppt/slideLayouts/slideLayout*.xml"
174+ , "ppt/slideLayouts/_rels/slideLayout*.xml.rels"
175+ , "ppt/slideMasters/slideMaster1.xml"
176+ , "ppt/slideMasters/_rels/slideMaster1.xml.rels"
177+ , "ppt/theme/theme1.xml"
178+ , "ppt/theme/_rels/theme1.xml.rels"
179+ , "ppt/presProps.xml"
180+ , "ppt/viewProps.xml"
181+ , "ppt/tableStyles.xml"
182+ , "ppt/media/image*"
183+ ]
184+
185+-- We only look for these under special conditions
186+contingentInheritedPatterns :: Presentation -> [Pattern]
187+contingentInheritedPatterns pres = [] ++
188+ if hasSpeakerNotes pres
189+ then map compile [ "ppt/notesMasters/notesMaster*.xml"
190+ , "ppt/notesMasters/_rels/notesMaster*.xml.rels"
191+ , "ppt/theme/theme2.xml"
192+ , "ppt/theme/_rels/theme2.xml.rels"
193+ ]
194+ else []
195+
196+inheritedPatterns :: Presentation -> [Pattern]
197+inheritedPatterns pres =
198+ alwaysInheritedPatterns ++ contingentInheritedPatterns pres
183199
184200patternToFilePaths :: PandocMonad m => Pattern -> P m [FilePath]
185201patternToFilePaths pat = do
@@ -212,10 +228,9 @@ requiredFiles = [ "docProps/app.xml"
212228 , "ppt/tableStyles.xml"
213229 ]
214230
215−
216231presentationToArchiveP :: PandocMonad m => Presentation -> P m Archive
217232presentationToArchiveP p@(Presentation docProps slides) = do
218− filePaths <- patternsToFilePaths inheritedPatterns
233+ filePaths <- patternsToFilePaths $ inheritedPatterns p
219234
220235 -- make sure all required files are available:
221236 let missingFiles = filter (\fp -> not (fp `elem` filePaths)) requiredFiles
@@ -287,6 +302,11 @@ presentationToArchive opts pres = do
287302
288303--------------------------------------------------
289304
305+-- Check to see if the presentation has speaker notes. This will
306+-- influence whether we import the notesMaster template.
307+hasSpeakerNotes :: Presentation -> Bool
308+hasSpeakerNotes (Presentation _ slides) = any isJust $ map slideSpeakerNotes slides
309+
290310--------------------------------------------------
291311
292312getLayout :: PandocMonad m => Layout -> P m Element
@@ -1422,9 +1442,9 @@ mediaContentType mInfo
14221442 | otherwise = Nothing
14231443
14241444presentationToContentTypes :: PandocMonad m => Presentation -> P m ContentTypes
1425−presentationToContentTypes (Presentation _ slides) = do
1445+presentationToContentTypes p@(Presentation _ slides) = do
14261446 mediaInfos <- (mconcat . M.elems) <$> gets stMediaIds
1427− filePaths <- patternsToFilePaths inheritedPatterns
1447+ filePaths <- patternsToFilePaths $ inheritedPatterns p
14281448 let mediaFps = filter (match (compile "ppt/media/image*")) filePaths
14291449 let defaults = [ DefaultContentType "xml" "application/xml"
14301450 , DefaultContentType "rels" "application/vnd.openxmlformats-package.relationships+xml"