git.iko.soy/typeable/pandoc
on master help sign in
Powerpoint writer: Check for required files
194f08dJesse Rosenthal
src/Text/Pandoc/Writers/Powerpoint.hs+30−71
@@ -784,22 +784,6 @@ copyFileToArchive arch fp = do
784 Nothing -> fail $ fp ++ " missing in reference file"
784 Nothing -> fail $ fp ++ " missing in reference file"
785 Just e -> return $ addEntryToArchive e arch
785 Just e -> return $ addEntryToArchive e arch
786
786
787−-- getMediaFiles :: PandocMonad m => P m [FilePath]
788−-- getMediaFiles = do
789−-- refArchive <- asks envRefArchive
790−-- distArchive <- asks envDistArchive
791−-- let allEntries = nub $ filesInArchive refArchive ++ filesInArchive distArchive
792−-- return $ filter (isPrefixOf "ppt/media") allEntries
793−
794−
795−-- copyFileToArchiveIfExists :: PandocMonad m => Archive -> FilePath -> P m Archive
796−-- copyFileToArchiveIfExists arch fp = do
797−-- refArchive <- asks envRefArchive
798−-- distArchive <- asks envDistArchive
799−-- case findEntryByPath fp refArchive `mplus` findEntryByPath fp distArchive of
800−-- Nothing -> return $ arch
801−-- Just e -> return $ addEntryToArchive e arch
802−
803inheritedPatterns :: [Pattern]
787inheritedPatterns :: [Pattern]
804inheritedPatterns = map compile [ "_rels/.rels"
788inheritedPatterns = map compile [ "_rels/.rels"
805 , "docProps/app.xml"
789 , "docProps/app.xml"
@@ -827,68 +811,43 @@ patternToFilePaths pat = do
827patternsToFilePaths :: PandocMonad m => [Pattern] -> P m [FilePath]
811patternsToFilePaths :: PandocMonad m => [Pattern] -> P m [FilePath]
828patternsToFilePaths pats = concat <$> mapM patternToFilePaths pats
812patternsToFilePaths pats = concat <$> mapM patternToFilePaths pats
829
813
830−-- requiredFiles :: [FilePath]
814+-- Here are the files we'll require to make a Powerpoint document. If
831−-- requiredFiles = inheritedFiles
815+-- any of these are missing, we should error out of our build.
832−
816+requiredFiles :: [FilePath]
833−-- inheritedFiles :: [FilePath]
817+requiredFiles = [ "_rels/.rels"
834−-- inheritedFiles = [ "_rels/.rels"
818+ , "docProps/app.xml"
835−-- , "docProps/app.xml"
819+ , "docProps/core.xml"
836−-- , "docProps/core.xml"
820+ , "ppt/presProps.xml"
837−-- , "ppt/slideLayouts/slideLayout4.xml"
821+ , "ppt/slideLayouts/slideLayout1.xml"
838−-- , "ppt/slideLayouts/_rels/slideLayout9.xml.rels"
822+ , "ppt/slideLayouts/_rels/slideLayout1.xml.rels"
839−-- , "ppt/slideLayouts/_rels/slideLayout2.xml.rels"
823+ , "ppt/slideLayouts/slideLayout2.xml"
840−-- , "ppt/slideLayouts/_rels/slideLayout10.xml.rels"
824+ , "ppt/slideLayouts/_rels/slideLayout2.xml.rels"
841−-- , "ppt/slideLayouts/_rels/slideLayout1.xml.rels"
825+ , "ppt/slideLayouts/slideLayout3.xml"
842−-- , "ppt/slideLayouts/_rels/slideLayout3.xml.rels"
826+ , "ppt/slideLayouts/_rels/slideLayout3.xml.rels"
843−-- , "ppt/slideLayouts/_rels/slideLayout5.xml.rels"
827+ , "ppt/slideLayouts/slideLayout4.xml"
844−-- , "ppt/slideLayouts/_rels/slideLayout7.xml.rels"
828+ , "ppt/slideLayouts/_rels/slideLayout4.xml.rels"
845−-- , "ppt/slideLayouts/_rels/slideLayout8.xml.rels"
829+ , "ppt/slideMasters/slideMaster1.xml"
846−-- , "ppt/slideLayouts/_rels/slideLayout11.xml.rels"
830+ , "ppt/slideMasters/_rels/slideMaster1.xml.rels"
847−-- , "ppt/slideLayouts/_rels/slideLayout4.xml.rels"
831+ , "ppt/theme/theme1.xml"
848−-- , "ppt/slideLayouts/_rels/slideLayout6.xml.rels"
849−-- , "ppt/slideLayouts/slideLayout2.xml"
850−-- , "ppt/slideLayouts/slideLayout8.xml"
851−-- , "ppt/slideLayouts/slideLayout11.xml"
852−-- , "ppt/slideLayouts/slideLayout3.xml"
853−-- , "ppt/slideLayouts/slideLayout6.xml"
854−-- , "ppt/slideLayouts/slideLayout9.xml"
855−-- , "ppt/slideLayouts/slideLayout5.xml"
856−-- , "ppt/slideLayouts/slideLayout7.xml"
857−-- , "ppt/slideLayouts/slideLayout1.xml"
858−-- , "ppt/slideLayouts/slideLayout10.xml"
859−-- -- , "ppt/_rels/presentation.xml.rels"
860−-- , "ppt/theme/theme1.xml"
861−-- , "ppt/presProps.xml"
862−-- -- , "ppt/slides/_rels/slide1.xml.rels"
863−-- -- , "ppt/slides/_rels/slide2.xml.rels"
864−-- -- This is the one we're
865−-- -- going to build
866−-- -- , "ppt/slides/slide2.xml"
867−-- -- , "ppt/slides/slide1.xml"
868−-- , "ppt/viewProps.xml"
832+ , "ppt/viewProps.xml"
869−-- , "ppt/tableStyles.xml"
833+ , "ppt/tableStyles.xml"
870−-- , "ppt/slideMasters/_rels/slideMaster1.xml.rels"
834+ ]
871−-- , "ppt/slideMasters/slideMaster1.xml"
872−-- -- , "ppt/presentation.xml"
873−-- -- , "[Content_Types].xml"
874−-- ]
875−
876−-- -- Here are some that might not be there. We won't fail if they're not
877−-- possibleInheritedFiles :: [FilePath]
878−-- possibleInheritedFiles = [ "ppt/theme/_rels/theme1.xml.rels" ]
879
835
880
836
881presentationToArchive :: PandocMonad m => Presentation -> P m Archive
837presentationToArchive :: PandocMonad m => Presentation -> P m Archive
882presentationToArchive p@(Presentation _ slides) = do
838presentationToArchive p@(Presentation _ slides) = do
883 filePaths <- patternsToFilePaths inheritedPatterns
839 filePaths <- patternsToFilePaths inheritedPatterns
884− newArch' <- foldM copyFileToArchive emptyArchive filePaths
885
840
886− -- set the template media to the relevant fps:
841+ -- make sure all required files are available:
842+ let missingFiles = filter (\fp -> not (fp `elem` filePaths)) requiredFiles
843+ unless (null missingFiles)
844+ (throwError $
845+ PandocSomeError $
846+ "The following required files are missing:\n" ++
847+ (unlines $ map (" " ++) missingFiles)
848+ )
887
849
888− -- we register any media fp in the filepaths
850+ newArch' <- foldM copyFileToArchive emptyArchive filePaths
889− -- mediaDir <- getMediaFiles
890− -- newArch' <- foldM copyFileToArchiveIfExists newArch $
891− -- possibleInheritedFiles ++ mediaDir
892 -- presentation entry and rels. We have to do the rels first to make
851 -- presentation entry and rels. We have to do the rels first to make
893 -- sure we know the correct offset for the rIds.
852 -- sure we know the correct offset for the rIds.
894 presEntry <- presentationToPresEntry p
853 presEntry <- presentationToPresEntry p