@@ -21,7 +21,7 @@ import Prelude
21import Control.Monad.Except (catchError)
21import Control.Monad.Except (catchError)
22import Control.Monad.State.Strict
22import Control.Monad.State.Strict
23import Data.List (intersperse, isInfixOf, isPrefixOf, stripPrefix)
23import Data.List (intersperse, isInfixOf, isPrefixOf, stripPrefix)
24−import Data.Maybe (fromMaybe)
24+import Data.Maybe (fromMaybe, maybeToList)
25import qualified Data.Set as Set
25import qualified Data.Set as Set
26import Data.Text as Text (breakOnAll, pack)
26import Data.Text as Text (breakOnAll, pack)
27import Data.Text (Text)
27import Data.Text (Text)
@@ -287,6 +287,9 @@ hyperlinksToDoc (x:xs) = hyp x $$ hyperlinksToDoc xs
287 $ inTags False "BorderColor" [("type","enumeration")] (text "Black")
287 $ inTags False "BorderColor" [("type","enumeration")] (text "Black")
288 $$ inTags False "Destination" [("type","object")] (text $ "HyperlinkURLDestination/"++escapeColons (escapeStringForXML url)) -- HyperlinkURLDestination with more than one colon crashes CS6
288 $$ inTags False "Destination" [("type","object")] (text $ "HyperlinkURLDestination/"++escapeColons (escapeStringForXML url)) -- HyperlinkURLDestination with more than one colon crashes CS6
290+-- | Key for specifying user-defined styles
291+dynamicStyleKey :: String
292+dynamicStyleKey = "custom-style"
291-- | Convert a list of Pandoc blocks to ICML.
294-- | Convert a list of Pandoc blocks to ICML.
292blocksToICML :: PandocMonad m => WriterOptions -> Style -> [Block] -> WS m Doc
295blocksToICML :: PandocMonad m => WriterOptions -> Style -> [Block] -> WS m Doc
@@ -365,7 +368,9 @@ blockToICML opts style (Table caption aligns widths headers rows) =
365 , ("ColumnCount", show nrCols)
368 , ("ColumnCount", show nrCols)
366 ] (colDescs $$ cells)
369 ] (colDescs $$ cells)
367 liftM2 ($$) tableDoc $ parStyle opts (tableCaptionName:style) caption
370 liftM2 ($$) tableDoc $ parStyle opts (tableCaptionName:style) caption
368−blockToICML opts style (Div _ lst) = blocksToICML opts style lst
371+blockToICML opts style (Div (_, _, kvs) lst) =
372+ let dynamicStyle = maybeToList $ lookup dynamicStyleKey kvs
373+ in blocksToICML opts (dynamicStyle <> style) lst
369blockToICML _ _ Null = return empty
374blockToICML _ _ Null = return empty
371-- | Convert a list of lists of blocks to ICML list items.
376-- | Convert a list of lists of blocks to ICML list items.
@@ -463,7 +468,9 @@ inlineToICML opts style (Link _ lst (url, title)) = do
463 in (cont, newst)
468 in (cont, newst)
464inlineToICML opts style (Image attr _ target) = imageICML opts style attr target
469inlineToICML opts style (Image attr _ target) = imageICML opts style attr target
465inlineToICML opts style (Note lst) = footnoteToICML opts style lst
470inlineToICML opts style (Note lst) = footnoteToICML opts style lst
466−inlineToICML opts style (Span _ lst) = inlinesToICML opts style lst
471+inlineToICML opts style (Span (_, _, kvs) lst) =
472+ let dynamicStyle = maybeToList $ lookup dynamicStyleKey kvs
473+ in inlinesToICML opts (dynamicStyle <> style) lst
468-- | Convert a list of block elements to an ICML footnote.
475-- | Convert a list of block elements to an ICML footnote.
469footnoteToICML :: PandocMonad m => WriterOptions -> Style -> [Block] -> WS m Doc
476footnoteToICML :: PandocMonad m => WriterOptions -> Style -> [Block] -> WS m Doc