diff options
author | Jesse Rosenthal <jrosenthal@jhu.edu> | 2018-10-20 08:22:35 -0400 |
---|---|---|
committer | Jesse Rosenthal <jrosenthal@jhu.edu> | 2018-10-20 08:43:50 -0400 |
commit | 5547cd6000a061a74aee22ec41b238b9a6c0f920 (patch) | |
tree | ac15fca379829d638cd137cc96b0dfa8e46a41b3 /src/Text/Pandoc/Writers/Powerpoint/Output.hs | |
parent | 0c419a01f7c554e7ad5f26a035db0cc63b72fedb (diff) | |
download | pandoc-5547cd6000a061a74aee22ec41b238b9a6c0f920.tar.gz |
Powerpoint: Support raw openxml in pptx writer.
This allows raw openxml blocks and inlines to be used in the pptx
writer.
A few caveats:
1. It's up to the user to write well-formed openxml. The chances for
corruption, especially with such a brittle format as pptx, is pretty
high.
2. Because of the tricky way that blocks map onto shapes, if you are
using a raw block, it should be the only block on a slide (otherwise
other text might end up overlapping it).
3. The pptx ooxml namespace abbreviations are different from the docx ooxml
namespaces. Again, it's up to the user to get it right. Unzipped
document and ooxml specification should be consulted.
Closes: #4976
Diffstat (limited to 'src/Text/Pandoc/Writers/Powerpoint/Output.hs')
-rw-r--r-- | src/Text/Pandoc/Writers/Powerpoint/Output.hs | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/Text/Pandoc/Writers/Powerpoint/Output.hs b/src/Text/Pandoc/Writers/Powerpoint/Output.hs index 865ef1efc..3e6652686 100644 --- a/src/Text/Pandoc/Writers/Powerpoint/Output.hs +++ b/src/Text/Pandoc/Writers/Powerpoint/Output.hs @@ -728,9 +728,9 @@ makePicElements layout picProps mInfo alt = do else return [picShape] -paraElemToElement :: PandocMonad m => ParaElem -> P m Element -paraElemToElement Break = return $ mknode "a:br" [] () -paraElemToElement (Run rpr s) = do +paraElemToElements :: PandocMonad m => ParaElem -> P m [Element] +paraElemToElements Break = return [mknode "a:br" [] ()] +paraElemToElements (Run rpr s) = do let sizeAttrs = case rPropForceSize rpr of Just n -> [("sz", (show $ n * 100))] Nothing -> if rPropCode rpr @@ -787,15 +787,17 @@ paraElemToElement (Run rpr s) = do then [mknode "a:latin" [("typeface", "Courier")] ()] else [] let propContents = linkProps ++ colorContents ++ codeContents - return $ mknode "a:r" [] [ mknode "a:rPr" attrs $ propContents - , mknode "a:t" [] s - ] -paraElemToElement (MathElem mathType texStr) = do + return [mknode "a:r" [] [ mknode "a:rPr" attrs $ propContents + , mknode "a:t" [] s + ]] +paraElemToElements (MathElem mathType texStr) = do res <- convertMath writeOMML mathType (unTeXString texStr) case res of - Right r -> return $ mknode "a14:m" [] $ addMathInfo r - Left (Str s) -> paraElemToElement (Run def s) + Right r -> return [mknode "a14:m" [] $ addMathInfo r] + Left (Str s) -> paraElemToElements (Run def s) Left _ -> throwError $ PandocShouldNeverHappenError "non-string math fallback" +paraElemToElements (RawOOXMLParaElem str) = return [ x | Elem x <- parseXML str ] + -- This is a bit of a kludge -- really requires adding an option to -- TeXMath, but since that's a different package, we'll do this one @@ -852,7 +854,7 @@ paragraphToElement par = do [mknode "a:buAutoNum" [("type", autoNumberingToType attrs')] ()] Nothing -> [mknode "a:buNone" [] ()] ) - paras <- mapM paraElemToElement (paraElems par) + paras <- concat <$> mapM paraElemToElements (paraElems par) return $ mknode "a:p" [] $ [mknode "a:pPr" attrs props] ++ paras shapeToElement :: PandocMonad m => Element -> Shape -> P m Element @@ -882,6 +884,7 @@ shapeToElements layout (Pic picProps fp alt) = do Nothing -> shapeToElements layout $ TextBox [Paragraph def alt] shapeToElements layout (GraphicFrame tbls cptn) = graphicFrameToElements layout tbls cptn +shapeToElements _ (RawOOXMLShape str) = return [ x | Elem x <- parseXML str ] shapeToElements layout shp = do element <- shapeToElement layout shp return [element] |