Improved behavior of auto_identifiers when there are explicit ids.

Previously only autogenerated ids were added to the list
of header identifiers in state, so explicit ids weren't taken
into account when generating unique identifiers.  Duplicated
identifiers could result.

This simple fix ensures that explicitly given identifiers are
also taken into account.

Fixes #1745.

Note some limitations, however.  An autogenerated identifier
may still coincide with an explicit identifier that is given
for a header later in the document, or with an identifier on
a div, span, link, or image.  Fixing this would be much more
difficult, because we need to run `registerHeader` before
we have the complete parse tree (so we can't get a complete
list of identifiers from the document by walking the tree).

However, it might be worth issuing warnings for duplicate
header identifiers; I think we can do that.  It is not
common for headers to have the same text, and the issue
can always be worked around by adding explicit identifiers,
if the user is aware of it.
This commit is contained in:
John MacFarlane 2017-03-12 21:30:04 +01:00
parent 3765f08304
commit c8b906256d
2 changed files with 15 additions and 1 deletions

View file

@ -1130,7 +1130,8 @@ registerHeader (ident,classes,kvs) header' = do
updateState $ updateHeaderMap $ insert' header' id'
return (id'',classes,kvs)
else do
unless (null ident) $
unless (null ident) $ do
updateState $ updateIdentifierList $ Set.insert ident
updateState $ updateHeaderMap $ insert' header' ident
return (ident,classes,kvs)

13
test/command/1745.md Normal file
View file

@ -0,0 +1,13 @@
```
% pandoc -f latex+auto_identifiers -t html
\section{Six favourite beers}
\subsection{Jovaru Alus}\label{jovaru-alus}
\section{Farmhouse brewers}
\subsection{Jovaru Alus}
^D
<h1 id="six-favourite-beers">Six favourite beers</h1>
<h2 id="jovaru-alus">Jovaru Alus</h2>
<h1 id="farmhouse-brewers">Farmhouse brewers</h1>
<h2 id="jovaru-alus-1">Jovaru Alus</h2>
```