git.iko.soy/typeable/pandoc
on master help sign in
Add necessary powerpoint functions to Class.
8cd0ebeJesse Rosenthal
src/Text/Pandoc/Class.hs+64
@@ -674,6 +674,66 @@ getDefaultReferenceODT = do
674 Nothing -> foldr addEntryToArchive emptyArchive <$>
674 Nothing -> foldr addEntryToArchive emptyArchive <$>
675 mapM pathToEntry paths
675 mapM pathToEntry paths
676
676
677+getDefaultReferencePptx :: PandocMonad m => m Archive
678+getDefaultReferencePptx = do
679+ -- We're going to narrow this down substantially once we get it
680+ -- working.
681+ let paths = [ "[Content_Types].xml"
682+ , "_rels/.rels"
683+ , "docProps/app.xml"
684+ , "docProps/core.xml"
685+ , "ppt/_rels/presentation.xml.rels"
686+ , "ppt/presProps.xml"
687+ , "ppt/presentation.xml"
688+ , "ppt/slideLayouts/_rels/slideLayout1.xml.rels"
689+ , "ppt/slideLayouts/_rels/slideLayout10.xml.rels"
690+ , "ppt/slideLayouts/_rels/slideLayout11.xml.rels"
691+ , "ppt/slideLayouts/_rels/slideLayout2.xml.rels"
692+ , "ppt/slideLayouts/_rels/slideLayout3.xml.rels"
693+ , "ppt/slideLayouts/_rels/slideLayout4.xml.rels"
694+ , "ppt/slideLayouts/_rels/slideLayout5.xml.rels"
695+ , "ppt/slideLayouts/_rels/slideLayout6.xml.rels"
696+ , "ppt/slideLayouts/_rels/slideLayout7.xml.rels"
697+ , "ppt/slideLayouts/_rels/slideLayout8.xml.rels"
698+ , "ppt/slideLayouts/_rels/slideLayout9.xml.rels"
699+ , "ppt/slideLayouts/slideLayout1.xml"
700+ , "ppt/slideLayouts/slideLayout10.xml"
701+ , "ppt/slideLayouts/slideLayout11.xml"
702+ , "ppt/slideLayouts/slideLayout2.xml"
703+ , "ppt/slideLayouts/slideLayout3.xml"
704+ , "ppt/slideLayouts/slideLayout4.xml"
705+ , "ppt/slideLayouts/slideLayout5.xml"
706+ , "ppt/slideLayouts/slideLayout6.xml"
707+ , "ppt/slideLayouts/slideLayout7.xml"
708+ , "ppt/slideLayouts/slideLayout8.xml"
709+ , "ppt/slideLayouts/slideLayout9.xml"
710+ , "ppt/slideMasters/_rels/slideMaster1.xml.rels"
711+ , "ppt/slideMasters/slideMaster1.xml"
712+ , "ppt/slides/_rels/slide1.xml.rels"
713+ , "ppt/slides/slide1.xml"
714+ , "ppt/tableStyles.xml"
715+ , "ppt/theme/theme1.xml"
716+ , "ppt/viewProps.xml"
717+ ]
718+ let toLazy = BL.fromChunks . (:[])
719+ let pathToEntry path = do
720+ epochtime <- (floor . utcTimeToPOSIXSeconds) <$> getCurrentTime
721+ contents <- toLazy <$> readDataFile ("pptx/" ++ path)
722+ return $ toEntry path epochtime contents
723+ datadir <- getUserDataDir
724+ mbArchive <- case datadir of
725+ Nothing -> return Nothing
726+ Just d -> do
727+ exists <- fileExists (d </> "reference.pptx")
728+ if exists
729+ then return (Just (d </> "reference.pptx"))
730+ else return Nothing
731+ case mbArchive of
732+ Just arch -> toArchive <$> readFileLazy arch
733+ Nothing -> foldr addEntryToArchive emptyArchive <$>
734+ mapM pathToEntry paths
735+
736+
677-- | Read file from user data directory or,
737-- | Read file from user data directory or,
678-- if not found there, from Cabal data directory.
738-- if not found there, from Cabal data directory.
679readDataFile :: PandocMonad m => FilePath -> m B.ByteString
739readDataFile :: PandocMonad m => FilePath -> m B.ByteString
@@ -691,6 +751,8 @@ readDataFile fname = do
691readDefaultDataFile :: PandocMonad m => FilePath -> m B.ByteString
751readDefaultDataFile :: PandocMonad m => FilePath -> m B.ByteString
692readDefaultDataFile "reference.docx" =
752readDefaultDataFile "reference.docx" =
693 (B.concat . BL.toChunks . fromArchive) <$> getDefaultReferenceDocx
753 (B.concat . BL.toChunks . fromArchive) <$> getDefaultReferenceDocx
754+readDefaultDataFile "reference.pptx" =
755+ (B.concat . BL.toChunks . fromArchive) <$> getDefaultReferencePptx
694readDefaultDataFile "reference.odt" =
756readDefaultDataFile "reference.odt" =
695 (B.concat . BL.toChunks . fromArchive) <$> getDefaultReferenceODT
757 (B.concat . BL.toChunks . fromArchive) <$> getDefaultReferenceODT
696readDefaultDataFile fname =
758readDefaultDataFile fname =
@@ -806,6 +868,7 @@ data PureState = PureState { stStdGen :: StdGen
806 , stTime :: UTCTime
868 , stTime :: UTCTime
807 , stTimeZone :: TimeZone
869 , stTimeZone :: TimeZone
808 , stReferenceDocx :: Archive
870 , stReferenceDocx :: Archive
871+ , stReferencePptx :: Archive
809 , stReferenceODT :: Archive
872 , stReferenceODT :: Archive
810 , stFiles :: FileTree
873 , stFiles :: FileTree
811 , stUserDataFiles :: FileTree
874 , stUserDataFiles :: FileTree
@@ -820,6 +883,7 @@ instance Default PureState where
820 , stTime = posixSecondsToUTCTime 0
883 , stTime = posixSecondsToUTCTime 0
821 , stTimeZone = utc
884 , stTimeZone = utc
822 , stReferenceDocx = emptyArchive
885 , stReferenceDocx = emptyArchive
886+ , stReferencePptx = emptyArchive
823 , stReferenceODT = emptyArchive
887 , stReferenceODT = emptyArchive
824 , stFiles = mempty
888 , stFiles = mempty
825 , stUserDataFiles = mempty
889 , stUserDataFiles = mempty