Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: cms/converters.py

Issue 5242593268989952: Issue 2340 - Don`t generate pages if less than 30% have been translated (Closed)
Patch Set: Created April 17, 2015, 5:19 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
1 # coding: utf-8 1 # coding: utf-8
2 2
3 # This file is part of the Adblock Plus web scripts, 3 # This file is part of the Adblock Plus web scripts,
4 # Copyright (C) 2006-2015 Eyeo GmbH 4 # Copyright (C) 2006-2015 Eyeo GmbH
5 # 5 #
6 # Adblock Plus is free software: you can redistribute it and/or modify 6 # Adblock Plus is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License version 3 as 7 # it under the terms of the GNU General Public License version 3 as
8 # published by the Free Software Foundation. 8 # published by the Free Software Foundation.
9 # 9 #
10 # Adblock Plus is distributed in the hope that it will be useful, 10 # Adblock Plus is distributed in the hope that it will be useful,
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 self._append_text(data) 100 self._append_text(data)
101 101
102 def handle_entityref(self, name): 102 def handle_entityref(self, name):
103 self._append_text(self.unescape("&%s;" % name)) 103 self._append_text(self.unescape("&%s;" % name))
104 104
105 def handle_charref(self, name): 105 def handle_charref(self, name):
106 self._append_text(self.unescape("&#%s;" % name)) 106 self._append_text(self.unescape("&#%s;" % name))
107 107
108 class Converter: 108 class Converter:
109 whitelist = set(["a", "em", "strong"]) 109 whitelist = set(["a", "em", "strong"])
110 missing_translations = 0
111 total_translations = 0
110 112
111 def __init__(self, params, key="pagedata"): 113 def __init__(self, params, key="pagedata"):
112 self._params = params 114 self._params = params
113 self._key = key 115 self._key = key
114 self._attribute_parser = AttributeParser(self.whitelist) 116 self._attribute_parser = AttributeParser(self.whitelist)
115 117
116 # Read in any parameters specified at the beginning of the file 118 # Read in any parameters specified at the beginning of the file
117 lines = params[key].splitlines(True) 119 lines = params[key].splitlines(True)
118 while lines and re.search(r"^\s*[\w\-]+\s*=", lines[0]): 120 while lines and re.search(r"^\s*[\w\-]+\s*=", lines[0]):
119 name, value = lines.pop(0).split("=", 1) 121 name, value = lines.pop(0).split("=", 1)
120 params[name.strip()] = value.strip() 122 params[name.strip()] = value.strip()
121 params[key] = "".join(lines) 123 params[key] = "".join(lines)
122 124
123 def localize_string(self, name, default, localedata, escapes): 125 def localize_string(self, name, default, localedata, escapes):
124 def escape(s): 126 def escape(s):
125 return re.sub(r".", 127 return re.sub(r".",
126 lambda match: escapes.get(match.group(0), match.group(0)), 128 lambda match: escapes.get(match.group(0), match.group(0)),
127 s, flags=re.S) 129 s, flags=re.S)
128 def re_escape(s): 130 def re_escape(s):
129 return re.escape(escape(s)) 131 return re.escape(escape(s))
130 132
131 # Extract tag attributes from default string 133 # Extract tag attributes from default string
132 default, saved_attributes, fixed_strings = self._attribute_parser.parse(defa ult, self._params["page"]) 134 default, saved_attributes, fixed_strings = self._attribute_parser.parse(defa ult, self._params["page"])
133 135
134 # Get translation 136 # Get translation
135 locale = self._params["locale"] 137 locale = self._params["locale"]
136 if locale != self._params["defaultlocale"] and name in localedata: 138 if locale == self._params["defaultlocale"]:
139 result = default
140 elif name in localedata:
137 result = localedata[name].strip() 141 result = localedata[name].strip()
138 else: 142 else:
139 result = default 143 result = default
144 self.missing_translations += 1
145 self.total_translations += 1
140 146
141 # Insert fixed strings 147 # Insert fixed strings
142 for i in range(len(fixed_strings)): 148 for i in range(len(fixed_strings)):
143 result = re.sub(r"\{%d\}" % (i + 1), fixed_strings[i], result, 1) 149 result = re.sub(r"\{%d\}" % (i + 1), fixed_strings[i], result, 1)
144 150
145 # Insert attributes 151 # Insert attributes
146 result = escape(result) 152 result = escape(result)
147 def stringify_attribute((name, value)): 153 def stringify_attribute((name, value)):
148 if name == "href": 154 if name == "href":
149 link_locale, link = self._params["source"].resolve_link(value, locale) 155 link_locale, link = self._params["source"].resolve_link(value, locale)
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 include_end_regex = '>' 210 include_end_regex = '>'
205 211
206 def resolve_includes(self, text): 212 def resolve_includes(self, text):
207 def resolve_include(match): 213 def resolve_include(match):
208 global converters 214 global converters
209 name = match.group(1) 215 name = match.group(1)
210 for format, converter_class in converters.iteritems(): 216 for format, converter_class in converters.iteritems():
211 if self._params["source"].has_include(name, format): 217 if self._params["source"].has_include(name, format):
212 self._params["includedata"] = self._params["source"].read_include(name , format) 218 self._params["includedata"] = self._params["source"].read_include(name , format)
213 converter = converter_class(self._params, key="includedata") 219 converter = converter_class(self._params, key="includedata")
214 return converter() 220 result = converter()
221 self.missing_translations += converter.missing_translations
222 self.total_translations += converter.total_translations
223 return result
215 raise Exception("Failed to resolve include %s on page %s" % (name, self._p arams["page"])) 224 raise Exception("Failed to resolve include %s on page %s" % (name, self._p arams["page"]))
216 225
217 return re.sub( 226 return re.sub(
218 r'%s\?\s*include\s+([^\s<>"]+)\s*\?%s' % ( 227 r'%s\?\s*include\s+([^\s<>"]+)\s*\?%s' % (
219 self.include_start_regex, 228 self.include_start_regex,
220 self.include_end_regex 229 self.include_end_regex
221 ), 230 ),
222 resolve_include, 231 resolve_include,
223 text 232 text
224 ) 233 )
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 stack.pop() 396 stack.pop()
388 stack[-1]["subitems"].append(item) 397 stack[-1]["subitems"].append(item)
389 stack.append(item) 398 stack.append(item)
390 return structured 399 return structured
391 400
392 converters = { 401 converters = {
393 "html": RawConverter, 402 "html": RawConverter,
394 "md": MarkdownConverter, 403 "md": MarkdownConverter,
395 "tmpl": TemplateConverter, 404 "tmpl": TemplateConverter,
396 } 405 }
OLDNEW

Powered by Google App Engine
This is Rietveld