Modified example refs so they can occur before or after target.

The refs are now replaced by numbers at the final stage, using
processWith.
This commit is contained in:
John MacFarlane 2010-07-12 23:05:46 -07:00
parent 0181e66250
commit afe18e53f1
2 changed files with 17 additions and 7 deletions

4
README
View file

@ -710,7 +710,7 @@ where the last stopped. So, for example:
(@) My third example will be numbered (3).
Numbered examples can be labeled and referred to later in the
Numbered examples can be labeled and referred to elsewhere in the
document:
(@good) This is a good example.
@ -718,7 +718,7 @@ document:
As (@good) illustrates, ...
The label can be any string of alphanumeric characters, underscores,
or hyphens. The example must occur before the reference.
or hyphens.
Definition lists
----------------

View file

@ -185,7 +185,18 @@ parseMarkdown = do
-- now parse it for real...
(title, author, date) <- option ([],[],[]) titleBlock
blocks <- parseBlocks
return $ Pandoc (Meta title author date) $ filter (/= Null) blocks
let doc = Pandoc (Meta title author date) $ filter (/= Null) blocks
-- if there are labeled examples, change references into numbers
examples <- liftM stateExamples getState
let handleExampleRef :: Inline -> Inline
handleExampleRef z@(Str ('@':xs)) =
case M.lookup xs examples of
Just n -> Str (show n)
Nothing -> z
handleExampleRef z = z
if M.null examples
then return doc
else return $ processWith handleExampleRef doc
--
-- initial pass for references and notes
@ -928,10 +939,9 @@ exampleRef :: GenParser Char ParserState Inline
exampleRef = try $ do
char '@'
lab <- many1 (alphaNum <|> oneOf "-_")
examples <- liftM stateExamples getState
case M.lookup lab examples of
Just num -> return (Str $ show num)
Nothing -> pzero
-- We just return a Str. These are replaced with numbers
-- later. See the end of parseMarkdown.
return $ Str $ '@' : lab
symbol :: GenParser Char ParserState Inline
symbol = do