diff --git a/asciidoc.py b/asciidoc.py index c36b3ae..cc3ae14 100755 --- a/asciidoc.py +++ b/asciidoc.py @@ -1677,6 +1677,7 @@ class Title: class Section: '''Static methods and attributes only.''' endtags = [] # Stack of currently open section (level,endtag) tuples. + ids = [] # List of already used ids. def __init__(self): raise AssertionError,'no class instances allowed' def savetag(level,etag): @@ -1689,6 +1690,19 @@ class Section: writer.write(Section.endtags.pop()[1]) document.level = level setlevel = staticmethod(setlevel) + def gen_id(title): + id = re.sub('[^a-zA-Z0-9_\.-]+', '-', title).lower() + i = 1 + while True: + if i == 1: + tid = id + else: + tid = "-".join([id, str(i)]) + if tid not in Section.ids: + Section.ids.append(tid) + return tid + i += 1 + gen_id = staticmethod(gen_id) def translate(): assert Lex.next() is Title prev_sectname = Title.sectname @@ -1712,6 +1726,11 @@ class Section: warning('section title out of sequence: ' 'expected level %d, got level %d' % (document.level+1, Title.level)) + + # Generate ids for sections + if 'id' not in AttributeList.attrs: + AttributeList.attrs['id'] = Section.gen_id(Title.dict['title']) + Section.setlevel(Title.level) Title.dict['sectnum'] = Title.getnumber(document.level) AttributeList.consume(Title.dict) diff --git a/javascripts/toc.js b/javascripts/toc.js index a8437ba..24ddd68 100644 --- a/javascripts/toc.js +++ b/javascripts/toc.js @@ -54,8 +54,6 @@ function generateToc(toclevels) { var entries = tocEntries(document.getElementsByTagName("body")[0], toclevels); for (var i = 0; i < entries.length; ++i) { var entry = entries[i]; - if (entry.element.id == "") - entry.element.id = "toc" + i; var a = document.createElement("a"); a.href = "#" + entry.element.id; a.appendChild(document.createTextNode(entry.text)); diff --git a/xhtml11.conf b/xhtml11.conf index 3d6cfeb..835d76d 100644 --- a/xhtml11.conf +++ b/xhtml11.conf @@ -304,21 +304,21 @@ cellspacing="0" cellpadding="4"> | [sect1] -

{id?}{numbered?{sectnum} }{title}

+{numbered?{sectnum} }{title}
|
[sect2] -

{id?}{numbered?{sectnum} }{title}

+{numbered?{sectnum} }{title} | [sect3] -

{id?}{numbered?{sectnum} }{title}

+{numbered?{sectnum} }{title} | [sect4] -
{id?}{title}
+{title} | [header]