##// END OF EJS Templates
i18n: mark strings for translation in interhg extension
Martin Geisler -
r6962:2af657ea default
parent child Browse files
Show More
@@ -1,83 +1,84 b''
1 # interhg.py - interhg
1 # interhg.py - interhg
2 #
2 #
3 # Copyright 2007 OHASHI Hideya <ohachige@gmail.com>
3 # Copyright 2007 OHASHI Hideya <ohachige@gmail.com>
4 #
4 #
5 # Contributor(s):
5 # Contributor(s):
6 # Edward Lee <edward.lee@engineering.uiuc.edu>
6 # Edward Lee <edward.lee@engineering.uiuc.edu>
7 #
7 #
8 # This software may be used and distributed according to the terms
8 # This software may be used and distributed according to the terms
9 # of the GNU General Public License, incorporated herein by reference.
9 # of the GNU General Public License, incorporated herein by reference.
10 #
10 #
11 # The `interhg' Mercurial extension allows you to change changelog and
11 # The `interhg' Mercurial extension allows you to change changelog and
12 # summary text just like InterWiki way.
12 # summary text just like InterWiki way.
13 #
13 #
14 # To enable this extension:
14 # To enable this extension:
15 #
15 #
16 # [extensions]
16 # [extensions]
17 # interhg =
17 # interhg =
18 #
18 #
19 # These are some example patterns (link to bug tracking, etc.)
19 # These are some example patterns (link to bug tracking, etc.)
20 #
20 #
21 # [interhg]
21 # [interhg]
22 # issues = s!issue(\d+)!<a href="http://bts/issue\1">issue\1<\/a>!
22 # issues = s!issue(\d+)!<a href="http://bts/issue\1">issue\1<\/a>!
23 # bugzilla = s!((?:bug|b=|(?=#?\d{4,}))(?:\s*#?)(\d+))!<a..=\2">\1</a>!i
23 # bugzilla = s!((?:bug|b=|(?=#?\d{4,}))(?:\s*#?)(\d+))!<a..=\2">\1</a>!i
24 # boldify = s/(^|\s)#(\d+)\b/ <b>#\2<\/b>/
24 # boldify = s/(^|\s)#(\d+)\b/ <b>#\2<\/b>/
25 #
25 #
26 # Add any number of names and patterns to match
26 # Add any number of names and patterns to match
27
27
28 import re
28 import re
29 from mercurial.hgweb import hgweb_mod
29 from mercurial.hgweb import hgweb_mod
30 from mercurial import templatefilters
30 from mercurial import templatefilters
31 from mercurial.i18n import _
31
32
32 orig_escape = templatefilters.filters["escape"]
33 orig_escape = templatefilters.filters["escape"]
33
34
34 interhg_table = []
35 interhg_table = []
35
36
36 def interhg_escape(x):
37 def interhg_escape(x):
37 escstr = orig_escape(x)
38 escstr = orig_escape(x)
38 for regexp, format in interhg_table:
39 for regexp, format in interhg_table:
39 escstr = regexp.sub(format, escstr)
40 escstr = regexp.sub(format, escstr)
40 return escstr
41 return escstr
41
42
42 templatefilters.filters["escape"] = interhg_escape
43 templatefilters.filters["escape"] = interhg_escape
43
44
44 orig_refresh = hgweb_mod.hgweb.refresh
45 orig_refresh = hgweb_mod.hgweb.refresh
45
46
46 def interhg_refresh(self):
47 def interhg_refresh(self):
47 interhg_table[:] = []
48 interhg_table[:] = []
48 for key, pattern in self.repo.ui.configitems('interhg'):
49 for key, pattern in self.repo.ui.configitems('interhg'):
49 # grab the delimiter from the character after the "s"
50 # grab the delimiter from the character after the "s"
50 unesc = pattern[1]
51 unesc = pattern[1]
51 delim = re.escape(unesc)
52 delim = re.escape(unesc)
52
53
53 # identify portions of the pattern, taking care to avoid escaped
54 # identify portions of the pattern, taking care to avoid escaped
54 # delimiters. the replace format and flags are optional, but delimiters
55 # delimiters. the replace format and flags are optional, but delimiters
55 # are required.
56 # are required.
56 match = re.match(r'^s%s(.+)(?:(?<=\\\\)|(?<!\\))%s(.*)%s([ilmsux])*$'
57 match = re.match(r'^s%s(.+)(?:(?<=\\\\)|(?<!\\))%s(.*)%s([ilmsux])*$'
57 % (delim, delim, delim), pattern)
58 % (delim, delim, delim), pattern)
58 if not match:
59 if not match:
59 self.repo.ui.warn("interhg: invalid pattern for %s: %s\n"
60 self.repo.ui.warn(_("interhg: invalid pattern for %s: %s\n")
60 % (key, pattern))
61 % (key, pattern))
61 continue
62 continue
62
63
63 # we need to unescape the delimiter for regexp and format
64 # we need to unescape the delimiter for regexp and format
64 delim_re = re.compile(r'(?<!\\)\\%s' % delim)
65 delim_re = re.compile(r'(?<!\\)\\%s' % delim)
65 regexp = delim_re.sub(unesc, match.group(1))
66 regexp = delim_re.sub(unesc, match.group(1))
66 format = delim_re.sub(unesc, match.group(2))
67 format = delim_re.sub(unesc, match.group(2))
67
68
68 # the pattern allows for 6 regexp flags, so set them if necessary
69 # the pattern allows for 6 regexp flags, so set them if necessary
69 flagin = match.group(3)
70 flagin = match.group(3)
70 flags = 0
71 flags = 0
71 if flagin:
72 if flagin:
72 for flag in flagin.upper():
73 for flag in flagin.upper():
73 flags |= re.__dict__[flag]
74 flags |= re.__dict__[flag]
74
75
75 try:
76 try:
76 regexp = re.compile(regexp, flags)
77 regexp = re.compile(regexp, flags)
77 interhg_table.append((regexp, format))
78 interhg_table.append((regexp, format))
78 except re.error:
79 except re.error:
79 self.repo.ui.warn("interhg: invalid regexp for %s: %s\n"
80 self.repo.ui.warn(_("interhg: invalid regexp for %s: %s\n")
80 % (key, regexp))
81 % (key, regexp))
81 return orig_refresh(self)
82 return orig_refresh(self)
82
83
83 hgweb_mod.hgweb.refresh = interhg_refresh
84 hgweb_mod.hgweb.refresh = interhg_refresh
General Comments 0
You need to be logged in to leave comments. Login now