X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=geekigeeki.py;h=044c7bfa55600abaebbee95d59a2b307fb1e0bd4;hb=04449aef0693a2753c56a3ac391dde068e87a790;hp=0fdd421cbabcf414780353821d753b0805fef1a1;hpb=cc5df9ba5625f7e789a30aea769287c2c93bd5ea;p=geekigeeki.git
diff --git a/geekigeeki.py b/geekigeeki.py
index 0fdd421..044c7bf 100755
--- a/geekigeeki.py
+++ b/geekigeeki.py
@@ -3,7 +3,7 @@
#
# Copyright (C) 1999, 2000 Martin Pool %d hits out of %d pages searched. ' + link_tag(page_name))
- print(' . . . . ' + `count`)
- print(['match', 'matches'][count != 1])
- print(' ' + link_tag(filename) + "")
+ out = ''
for (count, page_name) in hits:
- print('
")
+ out += ' * [[' + page_name + ']] . . . ' + str(count) + ' ' + ['match', 'matches'][count != 1] + '\n'
- print_search_stats(len(hits), len(all_pages))
+ out += search_stats(len(hits), len(all_pages))
+ WikiFormatter(out).print_html()
def handle_titlesearch(query, form):
needle = form['q'].value
@@ -216,36 +214,31 @@ def handle_titlesearch(query, form):
all_pages = page_list()
hits = list(filter(needle_re.search, all_pages))
- print("")
+ out = ''
for filename in hits:
- print('
")
+ out += ' * [[' + filename + ']]\n'
- print_search_stats(len(hits), len(all_pages))
+ out += search_stats(len(hits), len(all_pages))
+ WikiFormatter(out).print_html()
def handle_raw(pagename, form):
- if not file_re.match(pagename):
- send_httperror("403 Forbidden", pagename)
- return
-
Page(pagename).send_raw()
-def handle_edit(pagename, form):
- if not file_re.match(pagename):
- send_httperror("403 Forbidden", pagename)
- return
+def handle_atom(pagename, form):
+ Page(pagename).send_atom()
+def handle_edit(pagename, form):
pg = Page(form['q'].value)
if 'save' in form:
if form['file'].value:
pg.save(form['file'].file.read(), form['changelog'].value)
else:
pg.save(form['savetext'].value.replace('\r\n', '\n'), form['changelog'].value)
- pg.format()
+ pg.send()
elif 'cancel' in form:
pg.msg_text = 'Editing canceled'
pg.msg_type = 'notice'
- pg.format()
+ pg.send()
else: # preview or edit
text = None
if 'preview' in form:
@@ -253,16 +246,13 @@ def handle_edit(pagename, form):
pg.send_editor(text)
def handle_get(pagename, form):
- if file_re.match(pagename):
- # FIMXE: this is all bullshit, MimeTypes bases its guess on the extension!
- from mimetypes import MimeTypes
- mimetype, encoding = MimeTypes().guess_type(pagename)
- if mimetype:
- Page(pagename).send_raw(mimetype=mimetype, args=form)
- else:
- Page(pagename).format()
- else:
- send_httperror("403 Forbidden", pagename)
+ if not ext_re.search(pagename): # FIXME: no extension guesses a wiki page
+ Page(pagename).send()
+ else:
+ # FIMXE: this is all bullshit, MimeTypes bases its guess on the extension!
+ from mimetypes import MimeTypes
+ mimetype, encoding = MimeTypes().guess_type(pagename)
+ Page(pagename).send_raw(mimetype=mimetype, args=form)
# Used by sys/macros/WordIndex and sys/macros/TitleIndex
def make_index_key():
@@ -282,11 +272,7 @@ def _macro_VERSION(*args, **kvargs):
return __version__
class WikiFormatter:
- """Object that turns Wiki markup into HTML.
-
- All formatting commands can be parsed one line at a time, though
- some state is carried over between lines.
- """
+ """Object that turns Wiki markup into HTML."""
def __init__(self, raw, kvargs=None):
self.raw = raw
self.kvargs = kvargs or {}
@@ -334,14 +320,19 @@ class WikiFormatter:
def _macro_repl(self, word):
try:
- args, kvargs = parse_args(word)
+ args, macro_kvargs = parse_args(word)
+ # Is this a parameter given to the current page?
if args[0] in self.kvargs:
return self.kvargs[args[0]]
+ # Is this an internal macro?
macro = globals().get('_macro_' + args[0])
if not macro:
+ # Can we load (and cache) an external macro?
exec(open("sys/macros/" + args[0] + ".py").read(), globals())
macro = globals().get('_macro_' + args[0])
- return macro(*args, **kvargs)
+ # Invoke macro passing both macro args augmented by page args
+ macro_kvargs.update(self.kvargs)
+ return macro(*args, **macro_kvargs)
except Exception, e:
msg = cgi.escape(word) + ": " + cgi.escape(str(e))
if not self.in_html:
@@ -540,11 +531,18 @@ class WikiFormatter:
print(self._indent_to(0))
print('