X-Git-Url: https://codewiz.org/gitweb?p=geekigeeki.git;a=blobdiff_plain;f=geekigeeki.py;h=8bd3e0b9be13ec871c6fe3aea0ed84966a2682ff;hp=fbf3d93e96b3e1ac322b19055aed56c7d7b3e159;hb=f4934967798c0c68c535bc2fa6cb26fff82512ff;hpb=4b7c0eb2e64ba9ac910dd57c545c2a455077632b 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