Implemented Ext_header_identifiers, Ext_implicit_header_references.

Now by default pandoc will act as if link references have been defined
for all headers.  So, you can do this:

    # My header

    Link to [My header].
    Another link to [it][My header].

Closes #691.
This commit is contained in:
John MacFarlane 2013-01-03 20:32:15 -08:00
parent 56ff5e1845
commit c435e9cda7
5 changed files with 197 additions and 145 deletions

26
README
View file

@ -858,7 +858,7 @@ wrapping). Consider, for example:
### Header identifiers in HTML, LaTeX, and ConTeXt ###
**Extension**
**Extension: `header_identifiers`**
Each header element in pandoc's HTML and ConTeXt output is given a
unique identifier. This identifier is based on the text of the header.
@ -906,6 +906,30 @@ and the identifier will be attached to the enclosing `<div>`
sections to be manipulated using javascript or treated differently in
CSS.
**Extension: `implicit_header_references`**
Pandoc behaves as if reference links have been defined for each header.
So, instead of
[header identifiers](#header-identifiers-in-html)
you can simply write
[header identifiers]
or
[header identifiers][]
or
[the section on header identifiers][header identifiers]
If there are multiple headers with identical text, the corresponding
reference will link to the first one only, and you will need to use explicit
links to link to the others, as described above.
Unlike regular reference links, these references are case-sensitive.
Block quotations
----------------

View file

@ -89,6 +89,8 @@ data Extension =
| Ext_hard_line_breaks -- ^ All newlines become hard line breaks
| Ext_literate_haskell -- ^ Enable literate Haskell conventions
| Ext_abbreviations -- ^ PHP markdown extra abbreviation definitions
| Ext_header_identifiers -- ^ Automatic identifiers for headers
| Ext_implicit_header_references -- ^ Implicit reference links for headers
deriving (Show, Read, Enum, Eq, Ord, Bounded)
pandocExtensions :: Set Extension
@ -125,6 +127,8 @@ pandocExtensions = Set.fromList
, Ext_strikeout
, Ext_superscript
, Ext_subscript
, Ext_header_identifiers
, Ext_implicit_header_references
]
strictExtensions :: Set Extension

View file

@ -721,6 +721,7 @@ data ParserState = ParserState
stateAuthors :: [[Inline]], -- ^ Authors of document
stateDate :: [Inline], -- ^ Date of document
stateHeaderTable :: [HeaderType], -- ^ Ordered list of header types used
stateHeaders :: [[Inline]], -- ^ List of headers (used for implicit ref links)
stateNextExample :: Int, -- ^ Number of next example
stateExamples :: M.Map String Int, -- ^ Map from example labels to numbers
stateHasChapters :: Bool, -- ^ True if \chapter encountered
@ -747,6 +748,7 @@ defaultParserState =
stateAuthors = [],
stateDate = [],
stateHeaderTable = [],
stateHeaders = [],
stateNextExample = 1,
stateExamples = M.empty,
stateHasChapters = False,

File diff suppressed because it is too large Load diff

View file

@ -281,7 +281,9 @@ elementToHtml slideLevel opts (Sec level num id' title' elements) = do
then filter isSec elements
else elements
let header'' = if (writerSectionDivs opts ||
writerSlideVariant opts == S5Slides || slide)
writerSlideVariant opts == S5Slides ||
slide ||
not (isEnabled Ext_header_identifiers opts))
then header'
else header' ! prefixedId opts id'
let inNl x = mconcat $ nl opts : intersperse (nl opts) x ++ [nl opts]