projects
/
geekigeeki.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
cd285df
)
Humanize auto link tags
author
Bernie Innocenti
<bernie@codewiz.org>
Sat, 25 Apr 2009 07:28:01 +0000
(16:28 +0900)
committer
Bernie Innocenti
<bernie@codewiz.org>
Sat, 25 Apr 2009 07:28:01 +0000
(16:28 +0900)
geekigeeki.py
patch
|
blob
|
history
diff --git
a/geekigeeki.py
b/geekigeeki.py
index 6170d7394ca6bb7b91d3fdb195d0d2ba6a5b4503..368cf8dace07ae045d9580f9616e9370e1b45221 100755
(executable)
--- a/
geekigeeki.py
+++ b/
geekigeeki.py
@@
-25,9
+25,6
@@
start_time = clock()
import cgi, sys, os, re, errno, stat
import cgi, sys, os, re, errno, stat
-# Regular expression defining a WikiWord
-# (but this definition is also assumed in other places)
-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|bmp|ico|ogm|ogg|mkv|mpg|mpeg|mp4|avi|asf|flv|wmv|qt)$", re.IGNORECASE)
# 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|bmp|ico|ogm|ogg|mkv|mpg|mpeg|mp4|avi|asf|flv|wmv|qt)$", re.IGNORECASE)
@@
-82,6
+79,9
@@
def relative_url(pathname, privileged=False):
def permalink(s):
return re.sub(' ', '-', re.sub('[^a-z0-9_ ]', '', s.lower()).strip())
def permalink(s):
return re.sub(' ', '-', re.sub('[^a-z0-9_ ]', '', s.lower()).strip())
+def humanlink(s):
+ return re.compile('([^:/\.]+)(?:\.[^/:]+|)$').search(s).group(1).replace('_', ' ')
+
# 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):
# 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):
@@
-197,7
+197,7
@@
def send_httperror(status="403 Not Found", query=""):
def link_tag(params, text=None, link_class=None, privileged=False, **kvargs):
if text is None:
def link_tag(params, text=None, link_class=None, privileged=False, **kvargs):
if text is None:
- text =
params # default
+ text =
humanlink(params)
elif img_re.match(text):
text = '<img border="0" src="' + relative_url(text) + '" alt="' + text + '" />'
elif img_re.match(text):
text = '<img border="0" src="' + relative_url(text) + '" alt="' + text + '" />'
@@
-218,7
+218,7
@@
def link_tag(params, text=None, link_class=None, privileged=False, **kvargs):
return '<a %shref="%s">%s</a>' % (classattr, relative_url(params, privileged=privileged), text)
def link_inline(name, descr=None, kvargs={}):
return '<a %shref="%s">%s</a>' % (classattr, relative_url(params, privileged=privileged), text)
def link_inline(name, descr=None, kvargs={}):
- if not descr: descr =
name
+ if not descr: descr =
humanlink(name)
url = relative_url(name)
if video_re.match(name):
return '<video src="%s">Your browser does not support the HTML5 video tag</video>' % url
url = relative_url(name)
if video_re.match(name):
return '<video src="%s">Your browser does not support the HTML5 video tag</video>' % url
@@
-325,7
+325,10
@@
def make_index_key():
links = ['<a href="#%s">%s</a>' % (ch, ch) for ch in 'abcdefghijklmnopqrstuvwxyz']
return '<p style="text-align: center">' + ' | '.join(links) + '</p>'
links = ['<a href="#%s">%s</a>' % (ch, ch) for ch in 'abcdefghijklmnopqrstuvwxyz']
return '<p style="text-align: center">' + ' | '.join(links) + '</p>'
-def page_list(dirname = None, re = word_re):
+def page_list(dirname = None, re = None):
+ if re is None:
+ # FIXME: WikiWord is too restrictive now!
+ re = re.compile(r"^\b((([A-Z][a-z0-9]+){2,}/)*([A-Z][a-z0-9]+){2,})\b$")
return sorted(filter(re.match, os.listdir(dirname or data_dir)))
def send_footer(mod_string=None):
return sorted(filter(re.match, os.listdir(dirname or data_dir)))
def send_footer(mod_string=None):
@@
-649,7
+652,7
@@
class Page:
if img_re.match(filename):
if image_maxwidth:
maxwidth_arg = '|maxwidth=' + str(image_maxwidth)
if img_re.match(filename):
if image_maxwidth:
maxwidth_arg = '|maxwidth=' + str(image_maxwidth)
- out += '{{' + self.page_name + '/' + filename + '|' +
filename
+ maxwidth_arg + '}}\n'
+ out += '{{' + self.page_name + '/' + filename + '|' +
humanlink(filename)
+ maxwidth_arg + '}}\n'
else:
out += ' * [[' + self.page_name + '/' + filename + ']]\n'
return out
else:
out += ' * [[' + self.page_name + '/' + filename + ']]\n'
return out