diff options
| author | Scott Bahling <sbahling@suse.de> | 2013-03-23 13:51:22 +0100 |
|---|---|---|
| committer | Scott Bahling <sbahling@suse.de> | 2013-03-23 13:51:22 +0100 |
| commit | dd7e8daa4be941de64ccef4d8d8c5044f01777b2 (patch) | |
| tree | e45f9bbf5e60e22e84b25d7bcfe94347f5e12215 /panfry | |
| parent | f2fb7c8dea7c381b803e9ca8d6616907285e92f9 (diff) | |
| download | panfry-dd7e8daa4be941de64ccef4d8d8c5044f01777b2.tar.gz panfry-dd7e8daa4be941de64ccef4d8d8c5044f01777b2.tar.xz panfry-dd7e8daa4be941de64ccef4d8d8c5044f01777b2.zip | |
Fix generation of cross page header referencing
Diffstat (limited to 'panfry')
| -rwxr-xr-x | panfry/document.py | 22 | ||||
| -rwxr-xr-x | panfry/page.py | 22 |
2 files changed, 25 insertions, 19 deletions
diff --git a/panfry/document.py b/panfry/document.py index 969d5f4..4379f6e 100755 --- a/panfry/document.py +++ b/panfry/document.py @@ -40,26 +40,24 @@ class Document: returns: markdown source with expanded links ''' re_link1 = re.compile(r'(\[(?P<s>[^\]^]+)\])\((?P<l>#.*)\)', re.S) - re_link2 = re.compile(r'(\[(?P<s>[^\]^]+)\]): (?P<l>#[a-z0-9-]+)', - re.S) - re_link3 = re.compile(r'(\[(?P<s>[^\]^]+)\][^(])', re.S) + re_link2 = re.compile(r'(\[(?P<s>[^\]^]+)\][^(])', re.S) source = re_link1.sub(self._get_cross_link, source) source = re_link2.sub(self._get_cross_link, source) - source = re_link3.sub(self._get_cross_link, source) return source def _get_cross_link(self, m): ref_txt = m.group('s') - if 'l' in m.groupdict(): - header = m.group('l')[1:] - else: - header = ref_txt.lower().replace(' ', '-') for page in self.pages: for tocitem in page.toc: - if tocitem.section_id == header: - return '[%s](%s#%s)' % (ref_txt, page.htmlfile, header) + if tocitem.heading == ref_txt.replace('\n', ' '): + return '[%s](%s#%s)' % (ref_txt, + page.htmlfile, + tocitem.header_id, + ) + + return '[%s]' % ref_txt @property def title(self): @@ -136,7 +134,7 @@ class Document: toc = [page.toc[0]] for tocitem in toc: - link = '%s#%s' % (page.htmlfile, tocitem.section_id) + link = '%s#%s' % (page.htmlfile, tocitem.header_id) links.append(dict(link=unicode(link, "utf8"), text=unicode(tocitem.heading, "utf8"), level=tocitem.level, @@ -227,7 +225,7 @@ class Document: doc.add_argument('template=%s' % template_file.name) doc.add_argument('css=%s' % self.css_file) doc.markdown = '%s\n%s' % (self.header.source, - self.expand_int_links(page.source)) + self.expand_int_links(page.markdown)) content = doc.html write_file(os.path.join(pub_path, page.htmlfile), unicode(content, 'utf-8')) diff --git a/panfry/page.py b/panfry/page.py index 76620bc..fdf7c86 100755 --- a/panfry/page.py +++ b/panfry/page.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- import re +import pandoc class TextFile: @@ -32,9 +33,10 @@ class TOCItem: self.heading = heading self.level = level - @property - def section_id(self): - return self.heading.lower().replace(' ', '-') + def header_id(self): + remove = re.compile('[+~!@#$%^&*\(\){}\[\];:"\',.<>?/\`]') + header_id = self.heading.lower().replace('\n', ' ').replace(' ', '-') + return remove.sub('', header_id) class Page(TextFile): @@ -42,6 +44,15 @@ class Page(TextFile): Represents single page source file. ''' + def __init__(self, filename, source, format='markdown'): + TextFile.__init__(self, filename, source) + self.doc = pandoc.Document() + self.doc._input(self.source, format=format) + + @property + def markdown(self): + return self.doc.markdown + @property def title(self): ''' @@ -74,10 +85,7 @@ class Page(TextFile): @property def toc(self): ''' - Returns a list of tuples representing the headings/sub-heading - structure of the page. - The first element of each tuple is the heading text. - The second element of each tuple is the heading level. + Returns a list of TOCItems of the page. ''' toc = [] heading = '' |
