git.iko.soy/typeable/pandoc
on master help sign in
Resolve references to section numbers in LaTeX reader.
commitf9656ece4ea1e106296bb3e140c46874df09955a authorJohn MacFarlane <jgm@berkeley.edu> dateSun 13 Aug 2017, 11:48 (9 years ago) parent253a7c6
1 file changed+17−3
src/Text/Pandoc/Readers/LaTeX.hs+17−3
src/Text/Pandoc/Readers/LaTeX.hs+17−3
@@ -106,9 +106,23 @@ parseLaTeX = do
106106 -- handle the case where you have \part or \chapter
107107 (if bottomLevel < 1
108108 then walk (adjustHeaders (1 - bottomLevel))
109− else id) doc'
109+ else id) $
110+ walk (resolveRefs (sLabels st)) $ doc'
110111 return $ Pandoc meta bs'
111112
113+resolveRefs :: M.Map String [Inline] -> Inline -> Inline
114+resolveRefs labels x@(Span (ident,classes,kvs) _) =
115+ case (lookup "reference-type" kvs,
116+ lookup "reference" kvs) of
117+ (Just "ref", Just lab) ->
118+ case M.lookup lab labels of
119+ Just txt -> Span (ident,classes,kvs)
120+ [Link nullAttr txt ('#':lab, "")]
121+ Nothing -> x
122+ _ -> x
123+resolveRefs _ x = x
124+
125+
112126-- testParser :: LP PandocIO a -> Text -> IO a
113127-- testParser p t = do
114128-- res <- runIOorExplode (runParserT p defaultLaTeXState{
@@ -145,7 +159,7 @@ data LaTeXState = LaTeXState{ sOptions :: ReaderOptions
145159 , sInListItem :: Bool
146160 , sInTableCell :: Bool
147161 , sLastHeaderNum :: HeaderNum
148− , sLabels :: M.Map String Inlines
162+ , sLabels :: M.Map String [Inline]
149163 }
150164 deriving Show
151165
@@ -1720,7 +1734,7 @@ section starred (ident, classes, kvs) lvl = do
17201734 let num = incrementHeaderNum lvl hn
17211735 updateState $ \st -> st{ sLastHeaderNum = num }
17221736 updateState $ \st -> st{ sLabels = M.insert lab
1723− (str (renderHeaderNum num))
1737+ [Str (renderHeaderNum num)]
17241738 (sLabels st) }
17251739 attr' <- registerHeader (lab, classes', kvs) contents
17261740 return $ headerWith attr' lvl contents