@@ -39,6 +39,7 @@ data WriterState =
3939 WriterState { stNextRef :: Int -- number of next URL reference
4040 , stOrderedListLevel :: Int -- level of ordered list
4141 , stOptions :: WriterOptions -- writer options
42+ , stHasCslRefs :: Bool -- has CSL citations
4243 }
4344
4445data Tabl = Xtb | Ntb deriving (Show, Eq)
@@ -52,6 +53,7 @@ writeConTeXt options document =
5253 let defaultWriterState = WriterState { stNextRef = 1
5354 , stOrderedListLevel = 0
5455 , stOptions = options
56+ , stHasCslRefs = False
5557 }
5658 in evalStateT (pandocToConTeXt options document) defaultWriterState
5759
@@ -76,6 +78,7 @@ pandocToConTeXt options (Pandoc meta blocks) = do
7678 ,("bottom","margin-bottom")
7779 ]
7880 mblang <- fromBCP47 (getLang options meta)
81+ st <- get
7982 let context = defField "toc" (writerTableOfContents options)
8083 $ defField "placelist"
8184 (mconcat . intersperse ("," :: Doc Text) $
@@ -89,6 +92,7 @@ pandocToConTeXt options (Pandoc meta blocks) = do
8992 $ defField "body" main
9093 $ defField "layout" layoutFromMargins
9194 $ defField "number-sections" (writerNumberSections options)
95+ $ defField "csl-refs" (stHasCslRefs st)
9296 $ maybe id (\l ->
9397 defField "context-lang" (literal l :: Doc Text)) mblang
9498 $ (case T.unpack . render Nothing <$>
@@ -183,6 +187,10 @@ blockToConTeXt (CodeBlock _ str) =
183187blockToConTeXt b@(RawBlock f str)
184188 | f == Format "context" || f == Format "tex" = return $ literal str <> blankline
185189 | otherwise = empty <$ report (BlockNotRendered b)
190+blockToConTeXt (Div ("refs",_,_) bs) = do
191+ modify $ \st -> st{ stHasCslRefs = True }
192+ inner <- blockListToConTeXt bs
193+ return $ "\\startcslreferences" $$ inner $$ "\\stopcslreferences"
186194blockToConTeXt (Div (ident,_,kvs) bs) = do
187195 let align dir txt = "\\startalignment[" <> dir <> "]" $$ txt $$ "\\stopalignment"
188196 mblang <- fromBCP47 (lookup "lang" kvs)