Login
or
register
Overview
Introduction
Features
Credits
License
This Wiki
Status
News
Releases
Change Log
Recent Wiki Edits
User Guide
Installation
Command Line
Using as a Module
Integration
Reporting Bugs
Advanced
Mailing List
Source Code
Test Suite
Extensions
Extensions
Writing Extensions
Available Extensions
Related Projects
Tickets
▹ 000037
Footnote IDs can become tangled when multiple documents are on the same page.
Anonymous users must enter
captcha
below.
Ticket Information
Ticket Title
If you emit multiple footnote-containing documents onto one HTML page, and their authors both used, e.g., a footnote labeled "[^1]", they will be assigned identical anchor tags, and the footnote links for whichever document is second on the page will not work. I have a patch that adds a 'UNIQUE_IDS' option to the footnotes extension. When that option is enabled, each separate document (as determined by a call to 'reset()') processed by the same 'Markdown' object will have its own namespace for footnote IDs and all links will be usable. diff --git a/markdown/extensions/footnotes.py b/markdown/extensions/footnotes.py index 6dacab7..751779d 100644 --- a/markdown/extensions/footnotes.py +++ b/markdown/extensions/footnotes.py @@ -38,11 +38,18 @@ class FootnoteExtension(markdown.Extension): """ Setup configs. """ self.config = {'PLACE_MARKER': ["///Footnotes Go Here///", - "The text string that marks where the footnotes go"]} + "The text string that marks where the footnotes go"], + 'UNIQUE_IDS': + [False, + "Whether to prevent footnote name collisions in " + "one Markdown object across calls to reset()."]} for key, value in configs: self.config[key][0] = value - + + # In multiple invocations, emit links that don't get tangled. + self.unique_prefix = 0 + self.reset() def extendMarkdown(self, md, md_globals): @@ -66,8 +73,9 @@ class FootnoteExtension(markdown.Extension): ">amp_substitute") def reset(self): - """ Clear the footnotes on reset. """ + """ Clear the footnotes on reset, and prepare for a distinct document. """ self.footnotes = markdown.odict.OrderedDict() + self.unique_prefix += 1 def findFootnotesPlaceholder(self, root): """ Return ElementTree Element that contains Footnote placeholder. """ @@ -91,11 +99,17 @@ class FootnoteExtension(markdown.Extension): def makeFootnoteId(self, id): """ Return footnote link id. """ - return 'fn:%s' % id + if self.getConfig("UNIQUE_IDS"): + return 'fn:%d-%s' % (self.unique_prefix, id) + else: + return 'fn:%s' % id def makeFootnoteRefId(self, id): """ Return footnote back-link id. """ - return 'fnref:%s' % id + if self.getConfig("UNIQUE_IDS"): + return 'fnref:%d-%s' % (self.unique_prefix, id) + else: + return 'fnref:%s' % id def makeFootnotesDiv(self, root): """ Return div of footnotes as et Element. """
Reported by
Assigned to
Status
open
someday
resolved
closed
Resolution
n.a.
fixed
wontfix
Advanced Fields
Priority
unassigned
high
medium
low
Resolution Explanation
Component
Don't put anything here
Don't put anything here
About This Edit
Minor Edit
Edit Summary
Don't put anything here
Don't put anything here
Don't put anything here
Don't put anything here
save
preview
cancel
Powered by
Sputnik
|
XHTML 1.1