X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;ds=sidebyside;f=geekigeeki.py;h=8bd3e0b9be13ec871c6fe3aea0ed84966a2682ff;hb=f4934967798c0c68c535bc2fa6cb26fff82512ff;hp=fbf3d93e96b3e1ac322b19055aed56c7d7b3e159;hpb=4b7c0eb2e64ba9ac910dd57c545c2a455077632b;p=geekigeeki.git
diff --git a/geekigeeki.py b/geekigeeki.py
index fbf3d93..8bd3e0b 100755
--- a/geekigeeki.py
+++ b/geekigeeki.py
@@ -33,7 +33,6 @@ file_re = re.compile(r"^\b([A-Za-z0-9_\-][A-Za-z0-9_\.\-/]*)\b$")
img_re = re.compile(r"^.*\.(png|gif|jpg|jpeg|bmp|ico|ogm|ogg|mkv|mpg|mpeg|mp4|avi|asf|flv|wmv|qt)$", re.IGNORECASE)
video_re = re.compile(r"^.*\.(ogm|ogg|mkv|mpg|mpeg|mp4|avi|asf|flv|wmv|qt)$", re.IGNORECASE)
url_re = re.compile(r"^[a-z]{3,8}://[^\s'\"]+\S$")
-link_re = re.compile(r"(?:\[\[|{{)([^\s\|]+)(?:\s*\|\s*([^\]]+)|)(?:\]\]|}})")
ext_re = re.compile(r"\.([^\./]+)$")
title_done = False
@@ -83,6 +82,27 @@ def relative_url(pathname, privileged=False):
def permalink(s):
return re.sub(' ', '-', re.sub('[^a-z0-9_ ]', '', s.lower()).strip())
+# Split arg lists like "blah| blah blah| width=100 | align = center",
+# return a list containing anonymous arguments and a map containing the named arguments
+def parse_args(s):
+ args = []
+ kwargs = {}
+ for arg in s.strip('<[{}]>').split('|'):
+ try:
+ key, val = arg.split('=', 1)
+ kwargs[key.strip()] = val.strip()
+ except ValueError:
+ args.append(arg.strip())
+ return (args, kwargs)
+
+def url_args(kvargs):
+ argv = []
+ for k, v in kvargs.items():
+ argv.append(k + '=' + v)
+ if argv:
+ return '?' + '&'.join(argv)
+ return ''
+
# Formatting stuff --------------------------------------------------
def emit_header(mime_type="text/html"):
print("Content-type: " + mime_type + "; charset=utf-8\n")
@@ -175,7 +195,7 @@ def send_httperror(status="403 Not Found", query=""):
send_title(None, msg_text=("%s: on query '%s'" % (status, query)))
send_footer()
-def link_tag(params, text=None, link_class=None, privileged=False):
+def link_tag(params, text=None, link_class=None, privileged=False, **kvargs):
if text is None:
text = params # default
elif img_re.match(text):
@@ -197,13 +217,13 @@ def link_tag(params, text=None, link_class=None, privileged=False):
return '%s' % (classattr, relative_url(params, privileged=privileged), text)
-def link_inline(name, descr=None, args=''):
+def link_inline(name, descr=None, kvargs={}):
if not descr: descr = name
url = relative_url(name)
if video_re.match(name):
return '' % url
elif img_re.match(name):
- return '' % (url, url + args, descr)
+ return '
' % (url, url + url_args(kvargs), descr)
elif file_re.match(name) and not ext_re.search(name): # FIXME: this guesses a wiki page
return Page(name).send_naked()
else:
@@ -358,48 +378,34 @@ class WikiFormatter:
return self._undent() + '\n