summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build-aux/extrns.php71
-rw-r--r--wiki2html.py83
-rw-r--r--wiki2text.py2
-rw-r--r--wikimarkup.py33
-rw-r--r--wikins.py3040
5 files changed, 3174 insertions, 55 deletions
diff --git a/build-aux/extrns.php b/build-aux/extrns.php
new file mode 100644
index 0000000..e2e8c4f
--- /dev/null
+++ b/build-aux/extrns.php
@@ -0,0 +1,71 @@
1<?php
2$nss = array();
3$ns_res = array();
4function select_ns($file, $lang)
5{
6 global $nss, $ns_res;
7
8 include($file);
9 if (isset($namespaceNames)) {
10 array_push($nss, $lang);
11 printf("wiki_ns_%s = {\n", $lang);
12 $reg = array();
13 foreach ($namespaceNames as $ns => $val) {
14 if ($val == '')
15 continue;
16 if (preg_match('/(.*)\$1(.*)/', $val, $matches))
17 array_push($reg,
18 array($matches[1], $matches[2],
19 $ns));
20 else
21 printf(" \"%s\": \"%s\",\n", $val, $ns);
22 }
23 print "}\n";
24 if (count($reg)) {
25 array_push($ns_res, $lang);
26 printf("wiki_ns_re_%s = [\n", $lang);
27 foreach ($reg as $val) {
28 printf(" (\"%s\", \"%s\", \"%s\"),\n",
29 $val[0], $val[1], $val[2]);
30 }
31 print "]\n";
32 }
33 }
34}
35
36
37function process_dir($dir)
38{
39 if (!($dp = opendir ($dir)))
40 die ("Can't open data directory.");
41 while ($name = readdir ($dp)) {
42 if (preg_match('|.*/?Messages([A-Z][a-z_-]+).php|', $name, $matches)) {
43 $lang = strtolower($matches[1]);
44 #print "$lang\n";
45 select_ns($name, $lang);
46 }
47
48 }
49 closedir ($dp);
50}
51
52echo "# This file is generated automatically. Do not edit.\n";
53echo "# -*- coding: utf-8 -*-\n";
54process_dir(".");
55
56print "wiki_ns = {\n";
57if (count($nss)) {
58 foreach ($nss as $lang)
59 printf(" \"%s\": wiki_ns_%s,\n", $lang, $lang);
60}
61print "}\n";
62
63print "wiki_ns_re = {\n";
64if (count($ns_res)) {
65 foreach ($nss as $lang)
66 printf(" \"%s\": wiki_ns_re_%s,\n", $lang, $lang);
67}
68print "}\n";
69
70
71?>
diff --git a/wiki2html.py b/wiki2html.py
index 7fa97b7..4e0e78a 100644
--- a/wiki2html.py
+++ b/wiki2html.py
@@ -17,6 +17,7 @@
17 17
18from wikimarkup import * 18from wikimarkup import *
19from types import TupleType 19from types import TupleType
20from wikins import wiki_ns_re, wiki_ns
20import urllib 21import urllib
21 22
22class HtmlWikiMarkup (WikiMarkup): 23class HtmlWikiMarkup (WikiMarkup):
@@ -27,16 +28,6 @@ class HtmlWikiMarkup (WikiMarkup):
27 Should be before. 28 Should be before.
28 """ 29 """
29 30
30 # FIXME: Awful kludge
31 image_kw = [ 'Image',
32 'Grafika',
33 'Bild',
34 'Εικόνα',
35 'Dosiero',
36 'Slika',
37 'Resim'
38 ]
39
40 ST_INIT = 0 31 ST_INIT = 0
41 ST_PARA = 1 32 ST_PARA = 1
42 ST_OPEN = 2 33 ST_OPEN = 2
@@ -58,43 +49,59 @@ class HtmlWikiMarkup (WikiMarkup):
58 else: 49 else:
59 return "" 50 return ""
60 51
61 52
62 def target(self, t): 53 def wiki_ns_name(self, str):
63 (qual,sep,tgt) = t.partition(':') 54 if str in wiki_ns[self.lang]:
64 r = None 55 return wiki_ns[self.lang][str]
65 if tgt != '': 56 elif str in wiki_ns_re[self.lang]:
66 if qual in self.image_kw: 57 for elt in wiki_ns_re[self.lang][str]:
67 t = self.image_base + urllib.quote(tgt) + '/250px-' + urllib.quote(tgt) 58 if str.beginswith(elt[0]) and str.endswith(elt[1]):
68 elif qual == "Media": 59 return elt[2]
69 t = self.media_base + '/' + tgt 60 return None
70 elif qual in self.langtab: 61
71 t = self.html_base % { 'lang' : qual } + '/' + urllib.quote(tgt)
72 r = self.langtab[qual]
73 else:
74 t = self.html_base % { 'lang' : self.lang } + '/' + urllib.quote(t)
75 else:
76 t = self.html_base % { 'lang' : self.lang } + '/' + urllib.quote(t)
77 return t, r
78 62
79 envhdr = [ "ul", "ol", "dl" ] 63 envhdr = [ "ul", "ol", "dl" ]
80 envel = [ "li", "li", "dd" ] 64 envel = [ "li", "li", "dd" ]
81 65
82 def str_link(self, tok, env): 66 def mktgt(self, tgt):
67 return self.html_base % { 'lang' : self.lang } + '/' + urllib.quote(tgt)
68
69 def link(self, tok, env, istmpl):
83 arg = self.fmtok(tok[1], env) 70 arg = self.fmtok(tok[1], env)
84 (target, r) = self.target(arg)
85 text = self.fmtok(tok[2], env) 71 text = self.fmtok(tok[2], env)
86 return "<a href=\"%s\">%s</a>" % (target, 72 (qual,sep,tgt) = arg.partition(':')
73 if tgt != '':
74 ns = self.wiki_ns_name(qual)
75 if ns:
76 if ns == 'NS_IMAGE':
77 return "<img src=\"%s\" alt=\"[ %s ]\" />" % \
78 (self.image_base + '/' + \
79 urllib.quote(tgt) + \
80 '/250px-' + urllib.quote(tgt),
81 text if text else arg)
82 elif ns == 'NS_MEDIA':
83 tgt = self.media_base + '/' + tgt
84 else:
85 tgt = self.mktgt(tgt)
86 elif not istmpl and qual in self.langtab:
87 tgt = self.html_base % { 'lang' : qual } + \
88 '/' + urllib.quote(tgt)
89 if not text or text == '':
90 text = self.langtab[qual]
91 else:
92 tgt = self.mktgt(tgt)
93 else:
94 tgt = self.mktgt(arg)
95 return "<a href=\"%s\">%s</a>" % (tgt,
87 text if (text and text != '') \ 96 text if (text and text != '') \
88 else \ 97 else arg)
89 r if r else arg) 98
99
100 def str_link(self, tok, env):
101 return self.link(tok, env, False)
90 102
91 def str_tmpl(self, tok, env): 103 def str_tmpl(self, tok, env):
92 arg = self.fmtok(tok[1], env) 104 return self.link(tok, env, True)
93 (target, r) = self.target(arg)
94 text = self.fmtok(tok[2], env)
95 return "<a href=\"%s\">%s</a>" % (target,
96 text if (text and text != '') \
97 else arg)
98 105
99 def str_ref(self, tok, env): 106 def str_ref(self, tok, env):
100 target = self.fmtok(tok[1], env) 107 target = self.fmtok(tok[1], env)
diff --git a/wiki2text.py b/wiki2text.py
index 3669bd7..66563a6 100644
--- a/wiki2text.py
+++ b/wiki2text.py
@@ -32,7 +32,7 @@ class TextWikiMarkup (WikiMarkup):
32 WikiMarkup.__init__(self, *args, **keywords) 32 WikiMarkup.__init__(self, *args, **keywords)
33 if 'width' in keywords: 33 if 'width' in keywords:
34 self.width = keywords['width'] 34 self.width = keywords['width']
35 elif 'refs' in keywords: 35 if 'refs' in keywords:
36 self.references = keywords['refs'] 36 self.references = keywords['refs']
37 37
38 def target(self, t): 38 def target(self, t):
diff --git a/wikimarkup.py b/wikimarkup.py
index e2a1cab..7a7125e 100644
--- a/wikimarkup.py
+++ b/wikimarkup.py
@@ -351,25 +351,26 @@ class WikiMarkup (BaseWikiMarkup):
351 file = None 351 file = None
352 text = None 352 text = None
353 lang = 'en' 353 lang = 'en'
354 html_base = 'http://%(lang)s.wiktionary.org' 354 html_base = 'http://%(lang)s.wiktionary.org/wiki'
355 image_base = 'http://upload.wikimedia.org/wikipedia/commons/thumb/a/bf/' 355 image_base = 'http://upload.wikimedia.org/wikipedia/commons/thumb/a/bf'
356 media_base = 'http://www.mediawiki.org/xml/export-0.3' 356 media_base = 'http://www.mediawiki.org/xml/export-0.3'
357 357
358 def __init__(self, *args, **keywords): 358 def __init__(self, *args, **keywords):
359 if 'file' in keywords: 359 for kw in keywords:
360 self.file = keywords['file'] 360 if kw == 'file':
361 elif 'filename' in keywords: 361 self.file = keywords[kw]
362 self.file = open(keywords['filename']) 362 elif kw == 'filename':
363 elif 'text' in keywords: 363 self.file = open(keywords[kw])
364 self.text = keywords['text'].split("\n") 364 elif kw == 'text':
365 elif 'lang' in keywords: 365 self.text = keywords[kw].split("\n")
366 self.lang = keywords['lang'] 366 elif kw == 'lang':
367 elif 'html_base' in keywords: 367 self.lang = keywords[kw]