@@ -106,9 +106,23 @@ parseLaTeX = do
106 -- handle the case where you have \part or \chapter
106 -- handle the case where you have \part or \chapter
107 (if bottomLevel < 1
107 (if bottomLevel < 1
108 then walk (adjustHeaders (1 - bottomLevel))
108 then walk (adjustHeaders (1 - bottomLevel))
109− else id) doc'
109+ else id) $
110+ walk (resolveRefs (sLabels st)) $ doc'
110 return $ Pandoc meta bs'
111 return $ Pandoc meta bs'
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, "")]
112-- testParser :: LP PandocIO a -> Text -> IO a
126-- testParser :: LP PandocIO a -> Text -> IO a
113-- testParser p t = do
127-- testParser p t = do
114-- res <- runIOorExplode (runParserT p defaultLaTeXState{
128-- res <- runIOorExplode (runParserT p defaultLaTeXState{
@@ -145,7 +159,7 @@ data LaTeXState = LaTeXState{ sOptions :: ReaderOptions
145 , sInListItem :: Bool
159 , sInListItem :: Bool
146 , sInTableCell :: Bool
160 , sInTableCell :: Bool
147 , sLastHeaderNum :: HeaderNum
161 , sLastHeaderNum :: HeaderNum
148− , sLabels :: M.Map String Inlines
162+ , sLabels :: M.Map String [Inline]
150 deriving Show
164 deriving Show
@@ -1720,7 +1734,7 @@ section starred (ident, classes, kvs) lvl = do
1720 let num = incrementHeaderNum lvl hn
1734 let num = incrementHeaderNum lvl hn
1721 updateState $ \st -> st{ sLastHeaderNum = num }
1735 updateState $ \st -> st{ sLastHeaderNum = num }
1722 updateState $ \st -> st{ sLabels = M.insert lab
1736 updateState $ \st -> st{ sLabels = M.insert lab
1723− (str (renderHeaderNum num))
1737+ [Str (renderHeaderNum num)]
1724 (sLabels st) }
1738 (sLabels st) }
1725 attr' <- registerHeader (lab, classes', kvs) contents
1739 attr' <- registerHeader (lab, classes', kvs) contents
1726 return $ headerWith attr' lvl contents
1740 return $ headerWith attr' lvl contents