git.iko.soy/typeable/pandoc
on master help sign in
Options.WriterOptions: Change type of writerVariables to Context Text.

This will allow structured values. [API change]

commitaceee9ca48484c300ac3519fb7991e3d22768312 authorJohn MacFarlane <jgm@berkeley.edu> dateTue 8 Oct 2019, 09:22 (7 years ago) parent1b10b5c
13 files changed+136−51
pandoc.cabal+2 src/Text/Pandoc/App/OutputSettings.hs+5 src/Text/Pandoc/BCP47.hs+5−2 src/Text/Pandoc/Lua/Marshaling.hs+1 src/Text/Pandoc/Lua/Marshaling/Context.hs+31 src/Text/Pandoc/Options.hs+4−2 src/Text/Pandoc/Writers/EPUB.hs+54−31 src/Text/Pandoc/Writers/HTML.hs+7−4 src/Text/Pandoc/Writers/LaTeX.hs+5−3 src/Text/Pandoc/Writers/Powerpoint/Output.hs+5−2 src/Text/Pandoc/Writers/Shared.hs+9−5 stack.yaml+3−1 test/Tests/Writers/Powerpoint.hs+5−1
pandoc.cabal+2
@@ -596,6 +596,7 @@ library
596596 Text.Pandoc.Lua.Marshaling.CommonState,
597597 Text.Pandoc.Lua.Marshaling.MediaBag,
598598 Text.Pandoc.Lua.Marshaling.ReaderOptions,
599+ Text.Pandoc.Lua.Marshaling.Context,
599600 Text.Pandoc.Lua.Marshaling.Version,
600601 Text.Pandoc.Lua.Module.MediaBag,
601602 Text.Pandoc.Lua.Module.Pandoc,
@@ -724,6 +725,7 @@ test-suite test-pandoc
724725 executable-path >= 0.0 && < 0.1,
725726 zip-archive >= 0.2.3.4 && < 0.5,
726727 xml >= 1.3.12 && < 1.4,
728+ doctemplates >= 0.6.1 && < 0.7,
727729 Glob >= 0.7 && < 0.11
728730 if impl(ghc < 8.4)
729731 hs-source-dirs: prelude
src/Text/Pandoc/App/OutputSettings.hs+5
@@ -20,6 +20,9 @@ module Text.Pandoc.App.OutputSettings
2020 ) where
2121import Prelude
2222import qualified Control.Exception as E
23+import qualified Data.Text as T
24+import qualified Data.Map as M
25+import Text.DocTemplates (Context(..), ToContext(toVal))
2326import Control.Monad
2427import Control.Monad.Except (catchError, throwError)
2528import Control.Monad.Trans
@@ -159,6 +162,8 @@ optToOutputSettings opts = do
159162 $ lines dztempl
160163 return $ ("dzslides-core", dzcore) : vars
161164 else return vars)
165+ >>= fmap (Context . M.fromList) .
166+ traverse (\(x,y) -> return (T.pack x, toVal (T.pack y)))
162167
163168 templStr <- case optTemplate opts of
164169 _ | not standalone -> return Nothing
src/Text/Pandoc/BCP47.hs+5−2
@@ -1,3 +1,4 @@
1+{-# LANGUAGE OverloadedStrings #-}
12{-# LANGUAGE NoImplicitPrelude #-}
23{- |
34 Module : Text.Pandoc.BCP47
@@ -24,6 +25,8 @@ import Data.Char (isAlphaNum, isAscii, isLetter, isLower, isUpper, toLower,
2425import Data.List (intercalate)
2526import Text.Pandoc.Definition
2627import Text.Pandoc.Options
28+import Text.DocTemplates (FromContext(..))
29+import qualified Data.Text as T
2730import qualified Text.Parsec as P
2831
2932-- | Represents BCP 47 language/country code.
@@ -41,8 +44,8 @@ renderLang lang = intercalate "-" (langLanguage lang : filter (not . null)
4144-- | Get the contents of the `lang` metadata field or variable.
4245getLang :: WriterOptions -> Meta -> Maybe String
4346getLang opts meta =
44− case lookup "lang" (writerVariables opts) of
45− Just s -> Just s
47+ case lookupContext "lang" (writerVariables opts) of
48+ Just s -> Just $ T.unpack s
4649 _ ->
4750 case lookupMeta "lang" meta of
4851 Just (MetaInlines [Str s]) -> Just s
src/Text/Pandoc/Lua/Marshaling.hs+1
@@ -14,4 +14,5 @@ module Text.Pandoc.Lua.Marshaling () where
1414import Text.Pandoc.Lua.Marshaling.AST ()
1515import Text.Pandoc.Lua.Marshaling.CommonState ()
1616import Text.Pandoc.Lua.Marshaling.ReaderOptions ()
17+import Text.Pandoc.Lua.Marshaling.Context ()
1718import Text.Pandoc.Lua.Marshaling.Version ()
src/Text/Pandoc/Lua/Marshaling/Context.hsnew file+31
@@ -0,0 +1,31 @@
1+{-# LANGUAGE NoImplicitPrelude #-}
2+{-# LANGUAGE FlexibleInstances #-}
3+{-# LANGUAGE ScopedTypeVariables #-}
4+{-# LANGUAGE LambdaCase #-}
5+{-# OPTIONS_GHC -fno-warn-orphans #-}
6+{- |
7+ Module : Text.Pandoc.Lua.Marshaling.Context
8+ Copyright : © 2012-2019 John MacFarlane
9+ © 2017-2019 Albert Krewinkel
10+ License : GNU GPL, version 2 or above
11+
12+ Maintainer : Albert Krewinkel <tarleb+pandoc@moltkeplatz.de>
13+ Stability : alpha
14+
15+Marshaling instance for doctemplates Context and its components.
16+-}
17+module Text.Pandoc.Lua.Marshaling.Context () where
18+
19+import qualified Foreign.Lua as Lua
20+import Foreign.Lua (Pushable)
21+import Text.DocTemplates (Context(..), Val(..))
22+
23+instance Pushable a => Pushable (Context a) where
24+ push (Context m) = Lua.push m
25+
26+instance Pushable a => Pushable (Val a) where
27+ push NullVal = Lua.push ()
28+ push (MapVal ctx) = Lua.push ctx
29+ push (ListVal xs) = Lua.push xs
30+ push (SimpleVal x) = Lua.push x
31+
src/Text/Pandoc/Options.hs+4−2
@@ -34,6 +34,8 @@ import Prelude
3434import Data.Char (toLower)
3535import Data.Data (Data)
3636import Data.Default
37+import Data.Text (Text)
38+import Text.DocTemplates (Context(..))
3739import qualified Data.Set as Set
3840import Data.Typeable (Typeable)
3941import GHC.Generics (Generic)
@@ -148,7 +150,7 @@ data ReferenceLocation = EndOfBlock -- ^ End of block
148150-- | Options for writers
149151data WriterOptions = WriterOptions
150152 { writerTemplate :: Maybe Template -- ^ Template to use
151− , writerVariables :: [(String, String)] -- ^ Variables to set in template
153+ , writerVariables :: Context Text -- ^ Variables to set in template
152154 , writerTabStop :: Int -- ^ Tabstop for conversion btw spaces and tabs
153155 , writerTableOfContents :: Bool -- ^ Include table of contents
154156 , writerIncremental :: Bool -- ^ True if lists should be incremental
@@ -185,7 +187,7 @@ data WriterOptions = WriterOptions
185187
186188instance Default WriterOptions where
187189 def = WriterOptions { writerTemplate = Nothing
188− , writerVariables = []
190+ , writerVariables = mempty
189191 , writerTabStop = 4
190192 , writerTableOfContents = False
191193 , writerIncremental = False
src/Text/Pandoc/Writers/EPUB.hs+54−31
@@ -2,6 +2,7 @@
22{-# LANGUAGE CPP #-}
33{-# LANGUAGE FlexibleContexts #-}
44{-# LANGUAGE PatternGuards #-}
5+{-# LANGUAGE OverloadedStrings #-}
56{-# LANGUAGE ScopedTypeVariables #-}
67{- |
78 Module : Text.Pandoc.Writers.EPUB
@@ -58,6 +59,8 @@ import Text.XML.Light (Attr (..), Element (..), Node (..), QName (..),
5859 add_attrs, lookupAttr, node, onlyElems, parseXML,
5960 ppElement, showElement, strContent, unode, unqual)
6061import Text.Pandoc.XML (escapeStringForXML)
62+import Text.DocTemplates (FromContext(lookupContext), Context(..),
63+ ToContext(toVal), Val(..))
6164
6265-- A Chapter includes a list of blocks.
6366data Chapter = Chapter [Block]
@@ -136,6 +139,9 @@ removeNote :: Inline -> Inline
136139removeNote (Note _) = Str ""
137140removeNote x = x
138141
142+toVal' :: String -> Val TS.Text
143+toVal' = toVal . TS.pack
144+
139145mkEntry :: PandocMonad m => FilePath -> B.ByteString -> E m Entry
140146mkEntry path content = do
141147 epubSubdir <- gets stEpubSubdir
@@ -163,8 +169,8 @@ getEPUBMetadata opts meta = do
163169 else return m
164170 let addLanguage m =
165171 if null (epubLanguage m)
166− then case lookup "lang" (writerVariables opts) of
167− Just x -> return m{ epubLanguage = x }
172+ then case lookupContext "lang" (writerVariables opts) of
173+ Just x -> return m{ epubLanguage = TS.unpack x }
168174 Nothing -> do
169175 mLang <- lift $ P.lookupEnv "LANG"
170176 let localeLang =
@@ -345,11 +351,14 @@ metadataFromMeta opts meta = EPUBMetadata{
345351 relation = metaValueToString <$> lookupMeta "relation" meta
346352 coverage = metaValueToString <$> lookupMeta "coverage" meta
347353 rights = metaValueToString <$> lookupMeta "rights" meta
348− coverImage = lookup "epub-cover-image" (writerVariables opts) `mplus`
349− (metaValueToString <$> lookupMeta "cover-image" meta)
354+ coverImage =
355+ (TS.unpack <$> lookupContext "epub-cover-image"
356+ (writerVariables opts))
357+ `mplus` (metaValueToString <$> lookupMeta "cover-image" meta)
350358 mCss = lookupMeta "css" meta <|> lookupMeta "stylesheet" meta
351359 stylesheets = fromMaybe [] (metaValueToPaths <$> mCss) ++
352− [f | ("css",f) <- writerVariables opts]
360+ maybe [] (\t -> [TS.unpack t])
361+ (lookupContext "css" (writerVariables opts))
353362 pageDirection = case map toLower . metaValueToString <$>
354363 lookupMeta "page-progression-direction" meta of
355364 Just "ltr" -> Just LTR
@@ -424,10 +433,13 @@ pandocToEPUB version opts doc = do
424433 (\bs n -> mkEntry ("styles/stylesheet" ++ show n ++ ".css") bs)
425434 stylesheets [(1 :: Int)..]
426435
427− let vars = ("epub3", if epub3 then "true" else "false")
428− : [(x,y) | (x,y) <- writerVariables opts, x /= "css"]
436+ let vars = Context $
437+ M.delete "css" . M.insert "epub3"
438+ (toVal' $ if epub3 then "true" else "false") $
439+ unContext $ writerVariables opts
429440
430− let cssvars useprefix = map (\e -> ("css",
441+ let cssvars useprefix = Context $ M.fromList $ map
442+ (\e -> ("css", toVal' $
431443 (if useprefix
432444 then "../"
433445 else "")
@@ -457,14 +469,16 @@ pandocToEPUB version opts doc = do
457469 (CouldNotDetermineImageSize img err')
458470 cpContent <- lift $ writeHtml
459471 opts'{ writerVariables =
460− ("coverpage","true"):
461− ("pagetitle",
462− escapeStringForXML plainTitle):
463− ("cover-image", coverImage):
464− ("cover-image-width", show coverImageWidth):
465− ("cover-image-height",
466− show coverImageHeight):
467− cssvars True ++ vars }
472+ Context (M.fromList [
473+ ("coverpage", toVal' "true"),
474+ ("pagetitle", toVal' $
475+ escapeStringForXML plainTitle),
476+ ("cover-image", toVal' coverImage),
477+ ("cover-image-width", toVal' $
478+ show coverImageWidth),
479+ ("cover-image-height", toVal' $
480+ show coverImageHeight)]) <>
481+ cssvars True <> vars }
468482 (Pandoc meta [])
469483 coverEntry <- mkEntry "text/cover.xhtml" cpContent
470484 coverImageEntry <- mkEntry ("media/" ++ coverImage)
@@ -474,10 +488,13 @@ pandocToEPUB version opts doc = do
474488
475489 -- title page
476490 tpContent <- lift $ writeHtml opts'{
477− writerVariables = ("titlepage","true"):
478− ("body-type", "frontmatter"):
479− ("pagetitle", escapeStringForXML plainTitle):
480− cssvars True ++ vars }
491+ writerVariables =
492+ Context (M.fromList [
493+ ("titlepage", toVal' "true"),
494+ ("body-type", toVal' "frontmatter"),
495+ ("pagetitle", toVal' $
496+ escapeStringForXML plainTitle)])
497+ <> cssvars True <> vars }
481498 (Pandoc meta [])
482499 tpEntry <- mkEntry "text/title_page.xhtml" tpContent
483500
@@ -564,9 +581,12 @@ pandocToEPUB version opts doc = do
564581
565582 let chapToEntry num (Chapter bs) =
566583 mkEntry ("text/" ++ showChapter num) =<<
567− writeHtml opts'{ writerVariables = ("body-type", bodyType) :
568− ("pagetitle", showChapter num) :
569− cssvars True ++ vars } pdoc
584+ writeHtml opts'{ writerVariables =
585+ Context (M.fromList
586+ [("body-type", toVal' bodyType),
587+ ("pagetitle", toVal' $
588+ showChapter num)])
589+ <> cssvars True <> vars } pdoc
570590 where (pdoc, bodyType) =
571591 case bs of
572592 (Header _ (_,_,kvs) xs : _) ->
@@ -776,9 +796,10 @@ pandocToEPUB version opts doc = do
776796 (writeHtmlStringForEPUB version
777797 opts{ writerTemplate = Nothing
778798 , writerVariables =
779− ("pagetitle",
780− escapeStringForXML plainTitle):
781− writerVariables opts}
799+ Context (M.fromList
800+ [("pagetitle", toVal' $
801+ escapeStringForXML plainTitle)])
802+ <> writerVariables opts}
782803 (Pandoc nullMeta
783804 [Plain $ walk clean tit])) of
784805 Left _ -> TS.pack $ stringify tit
@@ -801,13 +822,13 @@ pandocToEPUB version opts doc = do
801822 then [ unode "li"
802823 [ unode "a" ! [("href", "text/cover.xhtml")
803824 ,("epub:type", "cover")] $
804− "Cover"] |
825+ ("Cover" :: String)] |
805826 isJust (epubCoverImage metadata)
806827 ] ++
807828 [ unode "li"
808829 [ unode "a" ! [("href", "#toc")
809830 ,("epub:type", "toc")] $
810− "Table of contents"
831+ ("Table of contents" :: String)
811832 ] | writerTableOfContents opts
812833 ]
813834 else []
@@ -819,8 +840,9 @@ pandocToEPUB version opts doc = do
819840 ,("hidden","hidden")] $
820841 [ unode "ol" landmarkItems ]
821842 ]
822− navData <- lift $ writeHtml opts'{ writerVariables = ("navpage","true"):
823− cssvars False ++ vars }
843+ navData <- lift $ writeHtml opts'{ writerVariables =
844+ Context (M.fromList [("navpage", toVal' "true")])
845+ <> cssvars False <> vars }
824846 (Pandoc (setMeta "title"
825847 (walk removeNote $ fromList $ docTitle' meta) nullMeta)
826848 (navBlocks ++ landmarks))
@@ -846,7 +868,7 @@ pandocToEPUB version opts doc = do
846868 let apple = UTF8.fromStringLazy $ ppTopElement $
847869 unode "display_options" $
848870 unode "platform" ! [("name","*")] $
849− unode "option" ! [("name","specified-fonts")] $ "true"
871+ unode "option" ! [("name","specified-fonts")] $ ("true" :: String)
850872 appleEntry <- mkEntry "META-INF/com.apple.ibooks.display-options.xml" apple
851873
852874 -- construct archive
@@ -949,6 +971,7 @@ metadataElement version md currentTime =
949971 (("id",id') :
950972 maybe [] (\x -> [("opf:event",x)]) (dateEvent date)) $
951973 dateText date]
974+ schemeToOnix :: String -> String
952975 schemeToOnix "ISBN-10" = "02"
953976 schemeToOnix "GTIN-13" = "03"
954977 schemeToOnix "UPC" = "04"
src/Text/Pandoc/Writers/HTML.hs+7−4
@@ -39,6 +39,7 @@ import Data.List.Split (splitWhen)
3939import Data.Text (Text)
4040import qualified Data.Text as T
4141import qualified Data.Text.Lazy as TL
42+import Text.DocTemplates (FromContext(lookupContext))
4243import Network.HTTP (urlEncode)
4344import Network.URI (URI (..), parseURIReference)
4445import Numeric (showHex)
@@ -220,8 +221,8 @@ writeHtmlString' st opts d = do
220221 case getField "pagetitle" context of
221222 Just (s :: Text) | not (T.null s) -> return context
222223 _ -> do
223− let fallback = maybe "Untitled" takeBaseName $
224− lookup "sourcefile" (writerVariables opts)
224+ let fallback = maybe "Untitled" (takeBaseName . T.unpack) $
225+ lookupContext "sourcefile" (writerVariables opts)
225226 report $ NoTitleElement fallback
226227 return $ resetField "pagetitle" (T.pack fallback) context
227228 return $ renderTemplate tpl
@@ -286,11 +287,13 @@ pandocToHtml opts (Pandoc meta blocks) = do
286287 H.link ! A.rel "stylesheet" !
287288 A.href (toValue $ url ++ "katex.min.css")
288289
289− _ -> case lookup "mathml-script" (writerVariables opts) of
290+ _ -> case lookupContext "mathml-script"
291+ (writerVariables opts) of
290292 Just s | not (stHtml5 st) ->
291293 H.script ! A.type_ "text/javascript"
292294 $ preEscapedString
293− ("/*<![CDATA[*/\n" ++ s ++ "/*]]>*/\n")
295+ ("/*<![CDATA[*/\n" ++ T.unpack s ++
296+ "/*]]>*/\n")
294297 | otherwise -> mempty
295298 Nothing -> mempty
296299 let context = (if stHighlighting st
src/Text/Pandoc/Writers/LaTeX.hs+5−3
@@ -30,6 +30,7 @@ import qualified Data.Map as M
3030import Data.Text (Text)
3131import qualified Data.Text as T
3232import Network.URI (unEscapeString)
33+import Text.DocTemplates (FromContext(lookupContext))
3334import Text.Pandoc.BCP47 (Lang (..), getLang, renderLang)
3435import Text.Pandoc.Class (PandocMonad, report, toLang)
3536import Text.Pandoc.Definition
@@ -146,8 +147,9 @@ pandocToLaTeX options (Pandoc meta blocks) = do
146147 -- these have \frontmatter etc.
147148 beamer <- gets stBeamer
148149 let documentClass =
149− case lookup "documentclass" (writerVariables options) `mplus`
150− fmap stringify (lookupMeta "documentclass" meta) of
150+ case (lookupContext "documentclass"
151+ (writerVariables options)) `mplus`
152+ (T.pack . stringify <$> lookupMeta "documentclass" meta) of
151153 Just x -> x
152154 Nothing | beamer -> "beamer"
153155 | otherwise -> case writerTopLevelDivision options of
@@ -208,7 +210,7 @@ pandocToLaTeX options (Pandoc meta blocks) = do
208210 defField "title-meta" (T.pack titleMeta) $
209211 defField "author-meta"
210212 (T.pack $ intercalate "; " authorsMeta) $
211− defField "documentclass" (T.pack documentClass) $
213+ defField "documentclass" documentClass $
212214 defField "verbatim-in-note" (stVerbInNote st) $
213215 defField "tables" (stTable st) $
214216 defField "strikeout" (stStrikeout st) $
src/Text/Pandoc/Writers/Powerpoint/Output.hs+5−2
@@ -1,3 +1,4 @@
1+{-# LANGUAGE OverloadedStrings #-}
12{-# LANGUAGE NoImplicitPrelude #-}
23{-# LANGUAGE PatternGuards #-}
34{- |
@@ -24,6 +25,7 @@ import Codec.Archive.Zip
2425import Data.Char (toUpper)
2526import Data.List (intercalate, stripPrefix, nub, union, isPrefixOf, intersperse)
2627import Data.Default
28+import qualified Data.Text as T
2729import Data.Time (formatTime, defaultTimeLocale)
2830import Data.Time.Clock (UTCTime)
2931import Data.Time.Clock.POSIX (utcTimeToPOSIXSeconds, posixSecondsToUTCTime)
@@ -43,6 +45,7 @@ import Data.Maybe (mapMaybe, listToMaybe, fromMaybe, maybeToList, catMaybes, isN
4345import Text.Pandoc.ImageSize
4446import Control.Applicative ((<|>))
4547import System.FilePath.Glob
48+import Text.DocTemplates (FromContext(lookupContext))
4649import Text.TeXMath
4750import Text.Pandoc.Writers.Math (convertMath)
4851import Text.Pandoc.Writers.Powerpoint.Presentation
@@ -159,8 +162,8 @@ runP env st p = evalStateT (runReaderT p env) st
159162monospaceFont :: Monad m => P m String
160163monospaceFont = do
161164 vars <- writerVariables <$> asks envOpts
162− case lookup "monofont" vars of
163− Just s -> return s
165+ case lookupContext "monofont" vars of
166+ Just s -> return (T.unpack s)
164167 Nothing -> return "Courier"
165168
166169fontSizeAttributes :: Monad m => RunProps -> P m [(String, String)]
src/Text/Pandoc/Writers/Shared.hs+9−5
@@ -39,6 +39,7 @@ module Text.Pandoc.Writers.Shared (
3939where
4040import Prelude
4141import Safe (lastMay)
42+import qualified Data.ByteString.Lazy as BL
4243import Data.Maybe (fromMaybe)
4344import Control.Monad (zipWithM)
4445import Data.Aeson (ToJSON (..), encode)
@@ -90,12 +91,15 @@ metaToContext' blockWriter inlineWriter (Meta metamap) = do
9091-- | Add variables to a template Context, replacing any existing values.
9192addVariablesToContext :: TemplateTarget a
9293 => WriterOptions -> Context a -> Context a
93−addVariablesToContext opts (Context m1) = Context (m1 `M.union` m2)
94+addVariablesToContext opts (Context m1) =
95+ Context (m1 `M.union` m2 `M.union` m3)
9496 where
95− m2 = M.fromList $ map (\(k,v)
96− -> (T.pack k,SimpleVal (fromText (T.pack v)))) $
97− ("meta-json", jsonrep) : writerVariables opts
98− jsonrep = UTF8.toStringLazy $ encode $ toJSON m1
97+ m2 = case traverse go (writerVariables opts) of
98+ Just (Context x) -> x
99+ Nothing -> mempty
100+ m3 = M.insert "meta-json" (SimpleVal $ fromText jsonrep) mempty
101+ go = Just . fromText
102+ jsonrep = UTF8.toText $ BL.toStrict $ encode $ toJSON m1
99103
100104metaValueToVal :: (Monad m, TemplateTarget a)
101105 => ([Block] -> m a)
stack.yaml+3−1
@@ -22,7 +22,9 @@ extra-deps:
2222- doclayout-0.1
2323- HsYAML-0.2.0.0
2424- HsYAML-aeson-0.2.0.0
25−- doctemplates-0.6.1
25+# - doctemplates-0.6.1
26+- git: https://github.com/jgm/doctemplates.git
27+ commit: b0e92bd6e32eb1a8c021598b4e8a5f25b9c5cd40
2628ghc-options:
2729 "$locals": -fhide-source-paths -Wno-missing-home-modules
2830resolver: lts-14.6
test/Tests/Writers/Powerpoint.hs+5−1
@@ -6,6 +6,9 @@ import Tests.Writers.OOXML (ooxmlTest)
66import Text.Pandoc
77import Test.Tasty
88import System.FilePath
9+import Text.DocTemplates (ToContext(toVal), Context(..))
10+import qualified Data.Map as M
11+import Data.Text (pack)
912
1013-- templating is important enough, and can break enough things, that
1114-- we want to run all our tests with both default formatting and a
@@ -124,7 +127,8 @@ tests = groupPptxTests [ pptxTests "Inline formatting"
124127 "pptx/code.native"
125128 "pptx/code.pptx"
126129 , pptxTests "inline code and code blocks, custom formatting"
127− def { writerVariables = [("monofont", "Consolas")] }
130+ def { writerVariables = Context $ M.fromList
131+ [(pack "monofont", toVal $ pack "Consolas")] }
128132 "pptx/code.native"
129133 "pptx/code-custom.pptx"
130134 ]