# Regular expression defining a WikiWord
# (but this definition is also assumed in other places)
-word_re = re.compile(r"^\b((([A-Z][a-z]+){2,}/)*([A-Z][a-z]+){2,})\b$")
+word_re = re.compile(r"^\b((([A-Z][a-z0-9]+){2,}/)*([A-Z][a-z0-9]+){2,})\b$")
# FIXME: we accept stuff like foo/../bar and we shouldn't
file_re = re.compile(r"^\b([A-Za-z0-9_\-][A-Za-z0-9_\.\-/]*)\b$")
img_re = re.compile(r"^.*\.(png|gif|jpg|jpeg)$", re.IGNORECASE)
else:
self.h_level = len(word) - 1
link = permalink(self.line)
- result = '<h%d id="%s"><a class="heading" href="#%s">¶</a> ' % (self.h_level, link, link)
+ result = '\n</p><h%d id="%s"><a class="heading" href="#%s">¶</a> ' % (self.h_level, link, link)
return result
def _br_repl(self, word):
else:
return '<a href="%s" rel="nofollow" class="external">%s</a>' % (word, word)
+ def _macro_repl(self, word):
+ m = re.compile("<<([^\s\|]+)(?:\s*\|\s*([^\]]+)|)>>").match(word)
+ name = m.group(1)
+ param = m.group(2) or None
+
+ macro = globals().get('_macro_' + name)
+ if macro:
+ return macro(name, param)
+ else:
+ param_str = ''
+ if param:
+ param_str = param + ' '
+ return '<strong class="error">' + name + param_str + '</strong>'
+
def _hurl_repl(self, word):
- m = re.compile("\[\[([^ \t\n\r\f\v\|]+)(?:\s*\|\s*([^\]]+)|)\]\]").match(word)
+ m = re.compile("\[\[([^\s\|]+)(?:\s*\|\s*([^\]]+)|)\]\]").match(word)
name = m.group(1)
descr = m.group(2) or name
+ r"|(?P<tit>\={2,6})"
+ r"|(?P<br>\\\\)"
+ r"|(?P<rule>^-{3,})"
+
+ # Links
+ + r"|(?P<macro><<([^\s\|]+)(?:\s*\|\s*([^\]]+)|)>>)"
+ + r"|(?P<hurl>\[\[([^\s\|]+)(?:\s*\|\s*([^\]]+)|)\]\])"
+
+ # Inline HTML
+ r"|(?P<html><(/|)(div|span|iframe)[^<>]*>)"
+ r"|(?P<ent>[<>&])"
+ r"|(?P<hi>\b(FIXME|TODO|DONE)\b)"
# Links
- + r"|(?P<img>\b[a-zA-Z0-9_-]+\.(png|gif|jpg|jpeg|bmp))"
- + r"|(?P<word>\b(?:[A-Z][a-z]+){2,}\b)"
- + r"|(?P<hurl>\[\[([^ \t\n\r\f\v\|]+)(?:\s*\|\s*([^\]]+)|)\]\])"
- + r"|(?P<url>(http|https|ftp|mailto)\:[^\s'\"]+\S)"
- + r"|(?P<email>[-\w._+]+\@[\w.-]+)"
+ + r"|(?P<img>\b[a-zA-Z0-9_-]+\.(png|gif|jpg|jpeg|bmp))" # LEGACY
+ + r"|(?P<word>\b(?:[A-Z][a-z]+){2,}\b)" # LEGACY
+ + r"|(?P<url>(http|https|ftp|mailto)\:[^\s'\"]+\S)" # LEGACY
+ + r"|(?P<email>[-\w._+]+\@[\w.-]+)" # LEGACY
# Lists, divs, spans
+ r"|(?P<li>^\s+[\*#] +)"
+ r"|(?P<pre>\{\{\{|\s*\}\}\})"
+ + r"|(?P<inl>\{\{([^\s\|]+)(?:\s*\|\s*([^\]]+)|)\}\})" #TODO
# Tables
+ r"|(?P<tr>^\s*\|\|(=|)\s*)"