summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2008-11-29 13:39:55 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2008-11-29 13:39:55 +0200
commit88befee77fdaacc2e0dc92beffd1c6a68f86a8b7 (patch)
treec0cc395d493b44f1a3bfae313e04176b55a8ecfc
parentf7a8c1c22c8e362e94768d3e93d74a85f82a3b1a (diff)
downloadwikitrans-88befee77fdaacc2e0dc92beffd1c6a68f86a8b7.tar.gz
wikitrans-88befee77fdaacc2e0dc92beffd1c6a68f86a8b7.tar.bz2
Handle links inside link texts
-rw-r--r--wikimarkup.py27
1 files changed, 20 insertions, 7 deletions
diff --git a/wikimarkup.py b/wikimarkup.py
index 46aa839..429a02a 100644
--- a/wikimarkup.py
+++ b/wikimarkup.py
@@ -26,8 +26,8 @@ eltre = re.compile("(\\[\\[)|(\\{\\{)|\\[|(\\'\\'\\'?)")
26delims = { "[[" : re.compile("\\||(\\]\\])"), 26delims = { "[[" : re.compile("\\||(\\]\\])"),
27 "{{" : re.compile("\\||(\\}\\})") } 27 "{{" : re.compile("\\||(\\}\\})") }
28term = { "[[" : "]]" , "{{" : "}}" } 28term = { "[[" : "]]" , "{{" : "}}" }
29ends = { "[[" : re.compile("\\]\\]"), 29ends = { "[[" : re.compile("(\\[\\[)|(\\]\\])"),
30 "{{" : re.compile("\\}\\}") } 30 "{{" : re.compile("(\\{\\{)|(\\}\\})") }
31itend = re.compile("\\'\\'($|[^\\'])") 31itend = re.compile("\\'\\'($|[^\\'])")
32boend = re.compile("\\'\\'\\'($|[^\\'])") 32boend = re.compile("\\'\\'\\'($|[^\\'])")
33 33
@@ -115,6 +115,21 @@ It handles:
115 else: 115 else:
116 pos = d.start(0) + 1 116 pos = d.start(0) + 1
117 117
118 def linkend(self, paren, line, pos):
119 r = ends[paren]
120 count = 1
121 while count > 0:
122 m = r.search(line, pos);
123 if not m:
124 return len(line), len(line)
125 else:
126 pos = m.end(0)
127 if m.group(0) == paren:
128 count += 1
129 else:
130 count -= 1
131 return m.start(0), m.end(0)
132
118 la = None 133 la = None
119 def putback(self, line): 134 def putback(self, line):
120 self.la = line 135 self.la = line
@@ -172,8 +187,7 @@ It handles:
172 self.putback(line) 187 self.putback(line)
173 break 188 break
174 yield(self.getkn(line)) 189 yield(self.getkn(line))
175 190
176
177 def getkn(self, line): 191 def getkn(self, line):
178 pos = 0 192 pos = 0
179 while 1: 193 while 1:
@@ -189,10 +203,9 @@ It handles:
189 if m.group(0) == "[[" or m.group(0) == "{{": 203 if m.group(0) == "[[" or m.group(0) == "{{":
190 d = delims[m.group(0)].search(line, pos) 204 d = delims[m.group(0)].search(line, pos)
191 if d.group(0) == "|": 205 if d.group(0) == "|":
192 e = ends[m.group(0)].search(line, d.end(0))
193 target = (self.TEXT, line[pos:d.start(0)]) 206 target = (self.TEXT, line[pos:d.start(0)])
194 text = (self.SEQ, self.getkn(line[d.end(0):e.start(0)])) 207 (start,pos) = self.linkend(m.group(0), line, m.end(0))
195 pos = e.end(0) 208 text = (self.SEQ, self.getkn(line[d.end(0):start]))
196 elif d.group(0) == term[m.group(0)]: 209 elif d.group(0) == term[m.group(0)]:
197 target = (self.TEXT, line[pos:d.start(0)]) 210 target = (self.TEXT, line[pos:d.start(0)])
198 text = (self.NIL,) 211 text = (self.NIL,)

Return to:

Send suggestions and report system problems to the System administrator.