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
|
||||
: 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
|
||||
markup (emphasis, links, etc.). The definition must begin on the line
|
||||
after the term, and must begin with a colon. The definition consists of
|
||||
one or more block elements (paragraph, code block, list, etc.).
|
||||
Each block must be indented one tab stop.
|
||||
Each term must fit on one line. The definition must begin on the line
|
||||
after the term. The definition consists of one or more block elements
|
||||
(paragraph, code block, list, etc.), each beginning with a colon and
|
||||
(aside from the colon) indented one tab stop.
|
||||
|
||||
Term *with inline markup*
|
||||
: Here is the definition. It may
|
||||
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),
|
||||
the definitions will be considered paragraphs. In some output formats,
|
||||
|
|
|
@ -456,27 +456,26 @@ definitionListItem = try $ do
|
|||
notFollowedBy blankline
|
||||
notFollowedBy' indentSpaces
|
||||
term <- manyTill inline newline
|
||||
char ':'
|
||||
raw <- many1 defRawBlock
|
||||
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
|
||||
setState $ state {stateParserContext = ListItemState}
|
||||
-- parse the extracted block, which may contain various block elements:
|
||||
rest <- getInput
|
||||
setInput (concat (firstline:"\n":blanksAfterFirst:raw))
|
||||
setInput (concat raw)
|
||||
contents <- parseBlocks
|
||||
setInput rest
|
||||
updateState (\st -> st {stateParserContext = oldContext})
|
||||
return ((normalizeSpaces term), contents)
|
||||
|
||||
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
|
||||
return $ (unlines rawlines) ++ trailing
|
||||
return $ firstline ++ "\n" ++ unlines rawlines ++ trailing
|
||||
|
||||
definitionList = do
|
||||
failIfStrict
|
||||
|
|
Loading…
Reference in a new issue