Support HTML5 <video> element
[geekigeeki.git] / geekigeeki.py
index 0ff2e7a007527f0d2fa2ce9e9212ceffd839e88e..f89a844037a4d5428b31d86b89cac4ba8bbf984e 100755 (executable)
@@ -31,6 +31,7 @@ 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)$", 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("(?:\[\[|{{)([^\s\|]+)(?:\s*\|\s*([^\]]+)|)(?:\]\]|}})")
 
@@ -290,10 +291,10 @@ def send_footer(mod_string=None):
     print '''
 <div id="footer"><hr />
 <p class="copyright">
-<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img class="license" alt="Creative Commons License" src="http://i.creativecommons.org/l/by-sa/3.0/80x15.png" /></a>
+<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img class="license" alt="Creative Commons License" src="%s" /></a>
 <span class="benchmark">generated in %0.3fs</span> by <a href="http://www.codewiz.org/wiki/GeekiGeeki">GeekiGeeki</a> version %s
 </p>
-''' % (clock() - start_time, __version__)
+''' % (relative_url('cc-by-sa.png'), clock() - start_time, __version__)
     if mod_string:
         print '<p class="modified">last modified %s</p>' % mod_string
     print '</div></body></html>'
@@ -391,23 +392,23 @@ class WikiFormatter:
 
     def _inl_repl(self, word):
         m = link_re.match(word)
-        name = m.group(1)
-        descr = m.group(2) or name
-        name = relative_url(name)
-        argv = descr.split('|')
-        descr = argv.pop(0)
+        name = relative_url(m.group(1))
+        descr = m.group(2)
 
-        if argv:
-            args = '?' + '&amp;'.join(argv)
-        else:
+        if descr:
+            argv = descr.split('|')
+            descr = argv.pop(0)
             args = ''
+            if argv:
+                args = '?' + '&amp;'.join(argv)
 
-        if descr:
             # The "extthumb" nonsense works around a limitation of the HTML block model
             return '<div class="extthumb"><div class="thumb"><a href="%s"><img border="0" src="%s" alt="%s" /></a><div class="caption">%s</div></div></div>' \
                     % (name, name + args, descr, descr)
+        elif video_re.match(name):
+            return '<video src="%s">Your browser does not support the HTML5 video tag</video>' % name
         else:
-            return '<a href="%s"><img border="0" src="%s" /></a>' % (name, name + args)
+            return '<a href="%s"><img border="0" src="%s" /></a>' % (name, name)
 
     def _email_repl(self, word):
         return '<a href="mailto:%s">%s</a>' % (word, word)