aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Writers/JATS.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Text/Pandoc/Writers/JATS.hs')
-rw-r--r--src/Text/Pandoc/Writers/JATS.hs39
1 files changed, 16 insertions, 23 deletions
diff --git a/src/Text/Pandoc/Writers/JATS.hs b/src/Text/Pandoc/Writers/JATS.hs
index ffeceb1c2..c0ed15f52 100644
--- a/src/Text/Pandoc/Writers/JATS.hs
+++ b/src/Text/Pandoc/Writers/JATS.hs
@@ -63,30 +63,27 @@ docToJATS opts (Pandoc meta blocks) = do
let isBackBlock (Div ("refs",_,_) _) = True
isBackBlock _ = False
let (backblocks, bodyblocks) = partition isBackBlock blocks
- let elements = hierarchicalize bodyblocks
- let backElements = hierarchicalize $ backblocks
- let colwidth = if writerWrapText opts == WrapAuto
- then Just $ writerColumns opts
- else Nothing
-- The numbering here follows LaTeX's internal numbering
let startLvl = case writerTopLevelDivision opts of
TopLevelPart -> -1
TopLevelChapter -> 0
TopLevelSection -> 1
TopLevelDefault -> 1
+ let fromBlocks = blocksToJATS opts . makeSections False (Just startLvl)
+ let colwidth = if writerWrapText opts == WrapAuto
+ then Just $ writerColumns opts
+ else Nothing
metadata <- metaToContext opts
- (fmap vcat .
- mapM (elementToJATS opts startLvl) .
- hierarchicalize)
+ fromBlocks
(fmap chomp . inlinesToJATS opts)
meta
- main <- vcat <$> mapM (elementToJATS opts startLvl) elements
+ main <- fromBlocks bodyblocks
notes <- reverse . map snd <$> gets jatsNotes
- backs <- mapM (elementToJATS opts startLvl) backElements
+ backs <- fromBlocks backblocks
let fns = if null notes
then mempty
else inTagsIndented "fn-group" $ vcat notes
- let back = vcat backs $$ fns
+ let back = backs $$ fns
let date =
case getField "date" metadata of
Nothing -> NullVal
@@ -116,18 +113,6 @@ docToJATS opts (Pandoc meta blocks) = do
Nothing -> main
Just tpl -> renderTemplate tpl context
--- | Convert an Element to JATS.
-elementToJATS :: PandocMonad m => WriterOptions -> Int -> Element -> JATS m (Doc Text)
-elementToJATS opts _ (Blk block) = blockToJATS opts block
-elementToJATS opts lvl (Sec _ _num (id',_,kvs) title elements) = do
- let idAttr = [("id", writerIdentifierPrefix opts ++ id') | not (null id')]
- let otherAttrs = ["sec-type", "specific-use"]
- let attribs = idAttr ++ [(k,v) | (k,v) <- kvs, k `elem` otherAttrs]
- contents <- mapM (elementToJATS opts (lvl + 1)) elements
- title' <- inlinesToJATS opts title
- return $ inTags True "sec" attribs $
- inTagsSimple "title" title' $$ vcat contents
-
-- | Convert a list of Pandoc blocks to JATS.
blocksToJATS :: PandocMonad m => WriterOptions -> [Block] -> JATS m (Doc Text)
blocksToJATS = wrappedBlocksToJATS (const False)
@@ -225,6 +210,14 @@ codeAttr (ident,classes,kvs) = (lang, attr)
-- | Convert a Pandoc block element to JATS.
blockToJATS :: PandocMonad m => WriterOptions -> Block -> JATS m (Doc Text)
blockToJATS _ Null = return empty
+blockToJATS opts (Div (id',"section":_,kvs) (Header _lvl _ ils : xs)) = do
+ let idAttr = [("id", writerIdentifierPrefix opts ++ id') | not (null id')]
+ let otherAttrs = ["sec-type", "specific-use"]
+ let attribs = idAttr ++ [(k,v) | (k,v) <- kvs, k `elem` otherAttrs]
+ title' <- inlinesToJATS opts ils
+ contents <- blocksToJATS opts xs
+ return $ inTags True "sec" attribs $
+ inTagsSimple "title" title' $$ contents
-- Bibliography reference:
blockToJATS opts (Div ('r':'e':'f':'-':_,_,_) [Para lst]) =
inlinesToJATS opts lst