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)
+img_re = re.compile(r"^.*\.(png|gif|jpg|jpeg|bmp|ico)$", re.IGNORECASE)
url_re = re.compile(r"^[a-z]{3,8}://[^\s'\"]+\S$")
link_re = re.compile("(?:\[\[|{{)([^\s\|]+)(?:\s*\|\s*([^\]]+)|)(?:\]\]|}})")
}
</script>"""
-def send_title(name, text="Limbo", msg_text=None, msg_type='error'):
+def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=False):
global title_done
if title_done: return
print ' <meta name="robots" content="noindex,nofollow" />'
for css in css_url:
print ' <link rel="stylesheet" type="text/css" href="%s" />' % relative_url(css)
+ if icon_url:
+ print ' <link rel="icon" href="%s" />' % relative_url(icon_url)
+
+ if name and writable and privileged_url is not None:
+ print ' <link rel="alternate" type="application/x-wiki" title="Edit this page" href="%s" \>' \
+ % (privileged_path() + '?edit=' + name)
+
+ if history_url is not None:
+ print ' <link rel="alternate" type="application/rss+xml" title="RSS" href="%s" />' \
+ % (history_url + '?a=rss')
+
print '</head>'
# Body
- if name and privileged_url is not None:
+ if name and writable and privileged_url is not None:
print '<body ondblclick="location.href=\'' + privileged_path() + '?edit=' + name + '\'">'
else:
print '<body>'
print ' <b>' + link_tag('?fullsearch=' + name, text, 'navlink') + '</b> '
else:
print ' <b>' + text + '</b> '
- print ' | ' + link_tag('FrontPage', 'Front Page', 'navlink')
+ print ' | ' + link_tag('FrontPage', 'Home', 'navlink')
print ' | ' + link_tag('FindPage', 'Find Page', 'navlink')
if 'history_url' in globals():
print ' | <a href="' + history_url + '" class="navlink">Recent Changes</a>'
if name:
print ' | ' + link_tag('?raw=' + name, 'Raw Text', 'navlink')
if privileged_url is not None:
- print ' | ' + link_tag('?edit=' + name, 'Edit Page', 'navlink', privileged=True)
+ if writable:
+ print ' | ' + link_tag('?edit=' + name, 'Edit', 'navlink', privileged=True)
+ else:
+ print ' | ' + link_tag(name, 'Login', 'navlink', privileged=True)
+
else:
print ' | <i>Immutable Page</i>'
def _hurl_repl(self, word):
m = link_re.match(word)
name = m.group(1)
- descr = m.group(2) or name
-
- if img_re.match(name):
- # DEPRECATED SYNTAX: use {{foo.jpg|descr}} instead
- _inl_repl(self, word)
+ if m.group(2) is None:
+ descr = name
+ elif img_re.match(m.group(2)):
+ descr = '<img border="0" src="' + descr + '" />'
else:
- if img_re.match(descr):
- descr = '<img border="0" src="' + descr + '" />'
+ descr = m.group(2)
- return link_tag(name, descr, 'wikilink')
+ return link_tag(name, descr, 'wikilink')
def _inl_repl(self, word):
m = link_re.match(word)
name = relative_url(name)
argv = descr.split('|')
descr = argv.pop(0)
+
if argv:
args = '?' + '&'.join(argv)
else:
args = ''
+
if descr:
# The "extthumb" nonsense works around a limitation of the HTML block model
return '<div class="extthumb"><div class="thumb"><a href="%s"><img border="0" src="%s" alt="%s" /></a><div class="caption">%s</div></div></div>' \
+ r"|(?P<html><(/|)(br|hr|div|form|iframe|input|span))"
+ r"|(?P<ent>[<>&])"
- # Auto links
- + 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
+ # Auto links (LEGACY)
+ + r"|(?P<img>\b[a-zA-Z0-9_/-]+\.(png|gif|jpg|jpeg|bmp|ico))"
+ + r"|(?P<word>\b(?:[A-Z][a-z]+){2,}\b)"
+ + r"|(?P<url>(http|https|ftp|mailto)\:[^\s'\"]+\S)"
+ + r"|(?P<email>[-\w._+]+\@[\w.-]+)"
# Lists, divs, spans
+ r"|(?P<li>^\s+[\*#] +)"
+ r"|(?P<pre>\{\{\{|\s*\}\}\})"
- + r"|(?P<inl>\{\{([^\s\|]+)(?:\s*\|\s*([^\]]+)|)\}\})" #TODO
+ + r"|(?P<inl>\{\{([^\s\|]+)(?:\s*\|\s*([^\]]+)|)\}\})"
# Tables
+ r"|(?P<tr>^\s*\|\|(=|)\s*)"
send_guru("Read access denied by ACLs", "notice")
def format(self):
- page_name = None
- if self.can_write():
- page_name = self.page_name
-
#css foo.css bar.css
global css_url
css_url = self.get_attr("css", "").split() + css_url
- send_title(page_name, self.split_title(), msg_text=self.msg_text, msg_type=self.msg_type)
+ send_title(self.page_name, self.split_title(),
+ msg_text=self.msg_text, msg_type=self.msg_type, writable=self.can_write())
self.send_naked()
- send_footer(page_name, self._last_modified())
+ send_footer(self.page_name, self._last_modified())
def _last_modified(self):
try: