Changed definition list syntax in markdown reader and simplified
the parsing code. A colon is now required before every block in a definition. This fixes a problem with the old syntax, in which the last block in the following was ambiguous between a regular paragraph in the definition and a code block following the definition list: term : definition is this code or more definition? git-svn-id: https://pandoc.googlecode.com/svn/trunk@589 788f1e2b-df1e-0410-8736-df70ead52e1b
This commit is contained in:
parent
485fa81559
commit
cf081435ff
2 changed files with 16 additions and 18 deletions
15
README
15
README
|
@ -435,21 +435,20 @@ Pandoc supports definition lists, using a syntax inspired by
|
||||||
Term 2
|
Term 2
|
||||||
: Definition 2
|
: Definition 2
|
||||||
|
|
||||||
Second paragraph of definition 2.
|
: Second paragraph of definition 2.
|
||||||
|
|
||||||
The terms must fit on one line, but they may contain arbitrary inline
|
Each term must fit on one line. The definition must begin on the line
|
||||||
markup (emphasis, links, etc.). The definition must begin on the line
|
after the term. The definition consists of one or more block elements
|
||||||
after the term, and must begin with a colon. The definition consists of
|
(paragraph, code block, list, etc.), each beginning with a colon and
|
||||||
one or more block elements (paragraph, code block, list, etc.).
|
(aside from the colon) indented one tab stop.
|
||||||
Each block must be indented one tab stop.
|
|
||||||
|
|
||||||
Term *with inline markup*
|
Term *with inline markup*
|
||||||
: Here is the definition. It may
|
: Here is the definition. It may
|
||||||
contain multiple blocks. Here is some code:
|
contain multiple blocks. Here is some code:
|
||||||
|
|
||||||
{* my code *}
|
: {* my code *}
|
||||||
|
|
||||||
Here is the third paragraph of this definition.
|
: Here is the third paragraph of this definition.
|
||||||
|
|
||||||
If you leave space after the definition (as in the first example above),
|
If you leave space after the definition (as in the first example above),
|
||||||
the definitions will be considered paragraphs. In some output formats,
|
the definitions will be considered paragraphs. In some output formats,
|
||||||
|
|
|
@ -456,27 +456,26 @@ definitionListItem = try $ do
|
||||||
notFollowedBy blankline
|
notFollowedBy blankline
|
||||||
notFollowedBy' indentSpaces
|
notFollowedBy' indentSpaces
|
||||||
term <- manyTill inline newline
|
term <- manyTill inline newline
|
||||||
char ':'
|
raw <- many1 defRawBlock
|
||||||
state <- getState
|
state <- getState
|
||||||
let tabStop = stateTabStop state
|
|
||||||
try (count (tabStop - 1) (char ' ')) <|> (do{many (char ' '); string "\t"})
|
|
||||||
firstline <- anyLine
|
|
||||||
blanksAfterFirst <- option "" blanklines
|
|
||||||
raw <- many defRawBlock
|
|
||||||
let oldContext = stateParserContext state
|
let oldContext = stateParserContext state
|
||||||
setState $ state {stateParserContext = ListItemState}
|
|
||||||
-- parse the extracted block, which may contain various block elements:
|
-- parse the extracted block, which may contain various block elements:
|
||||||
rest <- getInput
|
rest <- getInput
|
||||||
setInput (concat (firstline:"\n":blanksAfterFirst:raw))
|
setInput (concat raw)
|
||||||
contents <- parseBlocks
|
contents <- parseBlocks
|
||||||
setInput rest
|
setInput rest
|
||||||
updateState (\st -> st {stateParserContext = oldContext})
|
updateState (\st -> st {stateParserContext = oldContext})
|
||||||
return ((normalizeSpaces term), contents)
|
return ((normalizeSpaces term), contents)
|
||||||
|
|
||||||
defRawBlock = try $ do
|
defRawBlock = try $ do
|
||||||
rawlines <- many1 (do {notFollowedBy' blankline; indentSpaces; anyLine})
|
char ':'
|
||||||
|
state <- getState
|
||||||
|
let tabStop = stateTabStop state
|
||||||
|
try (count (tabStop - 1) (char ' ')) <|> (do{many (char ' '); string "\t"})
|
||||||
|
firstline <- anyLine
|
||||||
|
rawlines <- many (do {notFollowedBy' blankline; indentSpaces; anyLine})
|
||||||
trailing <- option "" blanklines
|
trailing <- option "" blanklines
|
||||||
return $ (unlines rawlines) ++ trailing
|
return $ firstline ++ "\n" ++ unlines rawlines ++ trailing
|
||||||
|
|
||||||
definitionList = do
|
definitionList = do
|
||||||
failIfStrict
|
failIfStrict
|
||||||
|
|
Loading…
Add table
Reference in a new issue