Left: | ||
Right: |
LEFT | RIGHT |
---|---|
1 # This file is part of the Adblock Plus web scripts, | 1 # This file is part of the Adblock Plus web scripts, |
2 # Copyright (C) 2006-2016 Eyeo GmbH | 2 # Copyright (C) 2006-2016 Eyeo GmbH |
3 # | 3 # |
4 # Adblock Plus is free software: you can redistribute it and/or modify | 4 # Adblock Plus is free software: you can redistribute it and/or modify |
5 # it under the terms of the GNU General Public License version 3 as | 5 # it under the terms of the GNU General Public License version 3 as |
6 # published by the Free Software Foundation. | 6 # published by the Free Software Foundation. |
7 # | 7 # |
8 # Adblock Plus is distributed in the hope that it will be useful, | 8 # Adblock Plus is distributed in the hope that it will be useful, |
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
69 self._attrs, [''.join(s) for s in self._fixed_strings]) | 69 self._attrs, [''.join(s) for s in self._fixed_strings]) |
70 finally: | 70 finally: |
71 self._string = None | 71 self._string = None |
72 self._attrs = None | 72 self._attrs = None |
73 self._pagename = None | 73 self._pagename = None |
74 self._inside_fixed = False | 74 self._inside_fixed = False |
75 self._fixed_strings = None | 75 self._fixed_strings = None |
76 | 76 |
77 def handle_starttag(self, tag, attrs): | 77 def handle_starttag(self, tag, attrs): |
78 if self._inside_fixed: | 78 if self._inside_fixed: |
79 raise Exception('Unexpected HTML tag "{}" inside a fixed string' | 79 raise Exception("Unexpected HTML tag '{}' inside a fixed string" |
Vasily Kuznetsov
2017/03/08 17:31:44
Do you think it's ok that we're changing the quote
Jon Sonesen
2017/03/08 17:51:57
Well, the otherway causes a style warning, however
Jon Sonesen
2017/03/08 17:55:25
whoops, I was wrong plz disregard XD
Vasily Kuznetsov
2017/03/09 12:33:27
Yeah, the logic is that if the string has single q
| |
80 'on page {}'.format(tag, self._pagename)) | 80 'on page {}'.format(tag, self._pagename)) |
81 if tag == 'fix': | 81 if tag == 'fix': |
82 self._inside_fixed = True | 82 self._inside_fixed = True |
83 self._fixed_strings.append([]) | 83 self._fixed_strings.append([]) |
84 if tag in self._whitelist: | 84 if tag in self._whitelist: |
85 self._attrs.setdefault(tag, []).append(attrs) | 85 self._attrs.setdefault(tag, []).append(attrs) |
86 self._string.append('<{}>'.format(tag)) | 86 self._string.append('<{}>'.format(tag)) |
87 else: | 87 else: |
88 raise Exception('Unexpected HTML tag "{}" inside a fixed string' | 88 raise Exception("Unexpected HTML tag '{}' inside a fixed string" |
89 'on page {}'.format(tag, self._pagename)) | 89 'on page {}'.format(tag, self._pagename)) |
90 | 90 |
91 def handle_endtag(self, tag): | 91 def handle_endtag(self, tag): |
92 if tag == 'fix': | 92 if tag == 'fix': |
93 self._string.append('{{{}}}'.format(self._fixed_strings)) | 93 self._string.append('{{{}}}'.format(self._fixed_strings)) |
94 self._inside_fixed = False | 94 self._inside_fixed = False |
95 else: | 95 else: |
96 self._string.append('</{}>'.format(tag)) | 96 self._string.append('</{}>'.format(tag)) |
97 | 97 |
98 def _append_text(self, s): | 98 def _append_text(self, s): |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
133 break | 133 break |
134 name, value = line.split('=', 1) | 134 name, value = line.split('=', 1) |
135 params[name.strip()] = value.strip() | 135 params[name.strip()] = value.strip() |
136 lines[i] = '\n' | 136 lines[i] = '\n' |
137 params[key] = (''.join(lines), filename) | 137 params[key] = (''.join(lines), filename) |
138 | 138 |
139 def localize_string( | 139 def localize_string( |
140 self, page, name, default, comment, localedata, escapes): | 140 self, page, name, default, comment, localedata, escapes): |
141 | 141 |
142 def escape(s): | 142 def escape(s): |
143 return re.sub(r'.', | 143 return re.sub(r'.', |
Vasily Kuznetsov
2017/03/08 17:31:44
This is also kind of hard to read but more importa
Jon Sonesen
2017/03/08 17:51:57
I agree here, but assumed it would require an issu
Vasily Kuznetsov
2017/03/09 12:33:27
Yeah, you're right.
| |
144 lambda match: escapes.get(match.group(0), | 144 lambda match: escapes.get(match.group(0), |
145 match.group(0)), | 145 match.group(0)), |
146 s, flags=re.S) | 146 s, flags=re.S) |
147 | 147 |
148 def re_escape(s): | 148 def re_escape(s): |
149 return re.escape(escape(s)) | 149 return re.escape(escape(s)) |
150 | 150 |
151 # Handle duplicated strings | 151 # Handle duplicated strings |
152 if default: | 152 if default: |
153 self._seen_defaults[(page, name)] = (default, comment) | 153 self._seen_defaults[(page, name)] = (default, comment) |
154 else: | 154 else: |
155 try: | 155 try: |
156 default, comment = self._seen_defaults[(page, name)] | 156 default, comment = self._seen_defaults[(page, name)] |
157 except KeyError: | 157 except KeyError: |
158 raise Exception('Text not yet defined for string {} on page' | 158 raise Exception('Text not yet defined for string {} on page' |
159 '{}'.format(name, page)) | 159 '{}'.format(name, page)) |
160 | 160 |
161 # Extract tag attributes from default string | 161 # Extract tag attributes from default string |
162 default, saved_attributes, fixed_strings = (self._attribute_parser | 162 default, saved_attributes, fixed_strings = ( |
Vasily Kuznetsov
2017/03/08 17:31:44
This looks kind of hard to read. How about this in
Jon Sonesen
2017/03/08 17:51:57
Yes that seems nicer, thank you!
| |
163 .parse(default, | 163 self._attribute_parser.parse(default, self._params['page'])) |
164 self._params['page'] | |
165 )) | |
166 | 164 |
167 # Get translation | 165 # Get translation |
168 locale = self._params['locale'] | 166 locale = self._params['locale'] |
169 if locale == self._params['defaultlocale']: | 167 if locale == self._params['defaultlocale']: |
170 result = default | 168 result = default |
171 elif name in localedata: | 169 elif name in localedata: |
172 result = localedata[name].strip() | 170 result = localedata[name].strip() |
173 else: | 171 else: |
174 result = default | 172 result = default |
175 self.missing_translations += 1 | 173 self.missing_translations += 1 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
245 lookup_string, | 243 lookup_string, |
246 text, | 244 text, |
247 flags=re.S | 245 flags=re.S |
248 ) | 246 ) |
249 | 247 |
250 def process_links(self, text): | 248 def process_links(self, text): |
251 def process_link(match): | 249 def process_link(match): |
252 pre, attr, url, post = match.groups() | 250 pre, attr, url, post = match.groups() |
253 url = jinja2.Markup(url).unescape() | 251 url = jinja2.Markup(url).unescape() |
254 | 252 |
255 locale, new_url = self._params['source']\ | 253 locale, new_url = ( |
Vasily Kuznetsov
2017/03/08 17:31:44
PEP8 discourages line continuation with backslashe
Jon Sonesen
2017/03/08 17:51:57
oh yeah, I though i replaced all the back slashes
| |
256 .resolve_link(url, self._params['locale']) | 254 self._params['source'] |
255 .resolve_link(url, self._params['locale'])) | |
256 | |
257 if new_url is not None: | 257 if new_url is not None: |
258 url = new_url | 258 url = new_url |
259 if attr == 'href': | 259 if attr == 'href': |
260 post += ' hreflang="{}"'\ | 260 post += ' hreflang="{}"'\ |
Vasily Kuznetsov
2017/03/08 17:31:44
Maybe we can use continuation with parentheses ins
Jon Sonesen
2017/03/08 17:51:57
yesh
| |
261 .format(jinja2.Markup.escape(locale)) | 261 .format(jinja2.Markup.escape(locale)) |
262 | 262 |
263 return ''.join((pre, jinja2.Markup.escape(url), post)) | 263 return ''.join((pre, jinja2.Markup.escape(url), post)) |
264 | 264 |
265 text = re.sub(r'(<a\s[^<>]*\b(href)=\")([^<>\"]+)(\")', | 265 text = re.sub(r'(<a\s[^<>]*\b(href)=\")([^<>\"]+)(\")', |
266 process_link, text) | 266 process_link, text) |
267 text = re.sub(r'(<img\s[^<>]*\b(src)=\")([^<>\"]+)(\")', | 267 text = re.sub(r'(<img\s[^<>]*\b(src)=\")([^<>\"]+)(\")', |
268 process_link, text) | 268 process_link, text) |
269 return text | 269 return text |
270 | 270 |
271 include_start_regex = '<' | 271 include_start_regex = '<' |
272 include_end_regex = '>' | 272 include_end_regex = '>' |
273 | 273 |
274 def resolve_includes(self, text): | 274 def resolve_includes(self, text): |
275 def resolve_include(match): | 275 def resolve_include(match): |
276 name = match.group(1) | 276 name = match.group(1) |
277 for format_, converter_class in converters.iteritems(): | 277 for format_, converter_class in converters.iteritems(): |
278 if self._params['source'].has_include(name, format_): | 278 if self._params['source'].has_include(name, format_): |
279 self._params['includedata'] = self._params['source']\ | 279 self._params['includedata'] = ( |
280 .read_include(name, format) | 280 self._params['source'].read_include(name, format)) |
281 | |
281 converter = converter_class(self._params, | 282 converter = converter_class(self._params, |
282 key='includedata') | 283 key='includedata') |
283 result = converter() | 284 result = converter() |
284 self.missing_translations += converter.missing_translations | 285 self.missing_translations += converter.missing_translations |
285 self.total_translations += converter.total_translations | 286 self.total_translations += converter.total_translations |
286 return result | 287 return result |
287 raise Exception('Failed to resolve include {}' | 288 raise Exception('Failed to resolve include {}' |
288 'on page {}'.format(name, self._params['page'])) | 289 'on page {}'.format(name, self._params['page'])) |
289 | 290 |
290 return re.sub( | 291 return re.sub( |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
476 stack.pop() | 477 stack.pop() |
477 stack[-1]['subitems'].append(item) | 478 stack[-1]['subitems'].append(item) |
478 stack.append(item) | 479 stack.append(item) |
479 return structured | 480 return structured |
480 | 481 |
481 converters = { | 482 converters = { |
482 'html': RawConverter, | 483 'html': RawConverter, |
483 'md': MarkdownConverter, | 484 'md': MarkdownConverter, |
484 'tmpl': TemplateConverter, | 485 'tmpl': TemplateConverter, |
485 } | 486 } |
LEFT | RIGHT |