summaryrefslogtreecommitdiff
path: root/panfry
diff options
context:
space:
mode:
authorScott Bahling <sbahling@suse.de>2013-03-23 13:51:22 +0100
committerScott Bahling <sbahling@suse.de>2013-03-23 13:51:22 +0100
commitdd7e8daa4be941de64ccef4d8d8c5044f01777b2 (patch)
treee45f9bbf5e60e22e84b25d7bcfe94347f5e12215 /panfry
parentf2fb7c8dea7c381b803e9ca8d6616907285e92f9 (diff)
downloadpanfry-dd7e8daa4be941de64ccef4d8d8c5044f01777b2.tar.gz
panfry-dd7e8daa4be941de64ccef4d8d8c5044f01777b2.tar.xz
panfry-dd7e8daa4be941de64ccef4d8d8c5044f01777b2.zip
Fix generation of cross page header referencing
Diffstat (limited to 'panfry')
-rwxr-xr-xpanfry/document.py22
-rwxr-xr-xpanfry/page.py22
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 = ''