X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=geekigeeki.py;h=b6e802c8277f9e67be9e118c0a3eaef9cdc25fc7;hb=0c40ff65375f2cb3fd33da40a83f777eda407adb;hp=4ae17b2996fa0da6f7a0b336c7a1df8a69f81e7d;hpb=d27457c46810dade7c3fdbc38c1e0e8e8be424c6;p=geekigeeki.git
diff --git a/geekigeeki.py b/geekigeeki.py
index 4ae17b2..b6e802c 100755
--- a/geekigeeki.py
+++ b/geekigeeki.py
@@ -1,16 +1,16 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
-# Copyright 1999, 2000 Martin Pool
-# Copyright 2002 Gerardo Poggiali
-# Copyright 2007, 2008, 2009 Bernie Innocenti
+# Copyright (C) 1999, 2000 Martin Pool
+# Copyright (C) 2002 Gerardo Poggiali
+# Copyright (C) 2007, 2008, 2009 Bernie Innocenti
#
# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version. You should have received a copy
-# of the GNU General Public License along with this program.
-# If not, see .
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
__version__ = '4.0-' + '$Id$'[4:11]
@@ -36,6 +36,10 @@ def config_get(key, default=None):
def script_name():
return os.environ.get('SCRIPT_NAME', '')
+#TODO: move post-edit hook into wiki, then kill this
+def script_path():
+ return os.path.split(os.environ.get('SCRIPT_FILENAME', ''))[0]
+
def query_string():
path_info = os.environ.get('PATH_INFO', '')
if len(path_info) and path_info[0] == '/':
@@ -43,8 +47,9 @@ def query_string():
else:
return os.environ.get('QUERY_STRING', '') or 'FrontPage'
-def privileged_path():
- return config_get('privileged_url') or script_name()
+def is_privileged():
+ purl = config_get('privileged_url')
+ return (purl is not None) and os.environ.get('SCRIPT_URI', '').startswith(purl)
def remote_user():
user = os.environ.get('REMOTE_USER', '')
@@ -68,7 +73,7 @@ def is_external_url(pathname):
def relative_url(pathname, privileged=False):
if not is_external_url(pathname):
if privileged:
- url = privileged_path()
+ url = config_get('privileged_url') or script_name()
else:
url = script_name()
pathname = url + '/' + pathname
@@ -140,10 +145,10 @@ def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=Fal
rel, href = link
print(' ' % (rel, relative_url(href)))
- editable = name and writable and config_get('privileged_url') is not None
+ editable = name and writable and is_privileged()
if editable:
print(' ' \
- % (privileged_path() + '?a=edit&q=' + name))
+ % relative_url('?a=edit&q=' + name, privileged=True))
history = config_get('history_url')
if history is not None:
@@ -154,7 +159,7 @@ def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=Fal
# Body
if editable:
- print('')
+ print('')
else:
print('')
@@ -234,10 +239,13 @@ def link_inline(name, descr=None, kvargs={}):
% (url, url, name)
def link_inline_glob(pattern, descr=None, kvargs={}):
- s = ''
- for name in glob.glob(pattern):
- s += link_inline(name, descr, kvargs)
- return s
+ if not url_re.match(pattern) and bool(set(pattern) & set('?*[')):
+ s = ''
+ for name in glob.glob(pattern):
+ s += link_inline(name, descr, kvargs)
+ return s
+ else:
+ return link_inline(pattern, descr, kvargs)
# Search ---------------------------------------------------
@@ -367,7 +375,7 @@ class WikiFormatter:
self.h_level = 0
self.in_pre = self.in_html = self.in_table = self.in_li = False
self.in_header = True
- self.list_indents = []
+ self.list_indents = [] # a list of pairs (indent_level, list_type) to track nested lists
self.tr_cnt = 0
self.styles = {
#wiki html enabled?
@@ -405,7 +413,7 @@ class WikiFormatter:
return ' '
def _rule_repl(self, word):
- return self._undent() + '\n\n' % (len(word) - 2)
+ return '\n\n' % (len(word) - 2)
def _macro_repl(self, word):
try:
@@ -418,7 +426,7 @@ class WikiFormatter:
macro = globals().get('_macro_' + args[0])
return macro(*args, **kvargs)
except Exception, e:
- msg = cgi.escape(word) + ": " + cgi.escape(e.message)
+ msg = cgi.escape(word) + ": " + cgi.escape(str(e))
if not self.in_html:
msg = '' + msg + ''
return msg
@@ -512,31 +520,26 @@ class WikiFormatter:
return ''
def _indent_level(self):
- return len(self.list_indents) and self.list_indents[-1]
+ return len(self.list_indents) and self.list_indents[-1][0]
- def _indent_to(self, new_level):
+ def _indent_to(self, new_level, list_type=''):
if self._indent_level() == new_level:
return ''
s = '
'
while self._indent_level() > new_level:
- del(self.list_indents[-1])
if self.in_li:
s += ''
self.in_li = False # FIXME
- s += '\n'
+ s += '' + self.list_indents[-1][1] + '>\n'
+ del(self.list_indents[-1])
+
+ list_type = ('ul', 'ol')[list_type == '#']
while self._indent_level() < new_level:
- self.list_indents.append(new_level)
- s += '
\n'
+ self.list_indents.append((new_level, list_type))
+ s += '<' + list_type + '>\n'
s += '
'
return s
- def _undent(self):
- res = '
'
- res += '
' * len(self.list_indents)
- res += '
'
- self.list_indents = []
- return res
-
def replace(self, match):
for rule, hit in list(match.groupdict().items()):
if hit:
@@ -588,7 +591,7 @@ class WikiFormatter:
| (?P[<>&])"
)""", re.VERBOSE)
blank_re = re.compile(r"^\s*$")
- indent_re = re.compile(r"^\s*")
+ indent_re = re.compile(r"^(\s*)(\*|\#|)")
tr_re = re.compile(r"^\s*\|\|")
eol_re = re.compile(r"\r?\n")
# For each line, we scan through looking for magic strings, outputting verbatim any intervening text
@@ -612,12 +615,12 @@ class WikiFormatter:
else:
indent = indent_re.match(self.line)
#3.0: print(self._indent_to(len(indent.group(0))), end=' ')
- print(self._indent_to(len(indent.group(0))))
+ print(self._indent_to(len(indent.group(1)), indent.group(2)))
print(re.sub(scan_re, self.replace, self.line))
if self.in_pre: print('')
if self.in_table: print('