Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """The 'grit xmb' tool. | 6 """The 'grit xmb' tool. |
| 7 """ | 7 """ |
| 8 | 8 |
| 9 import getopt | 9 import getopt |
| 10 import os | 10 import os |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 21 # Used to collapse presentable content to determine if | 21 # Used to collapse presentable content to determine if |
| 22 # xml:space="preserve" is needed. | 22 # xml:space="preserve" is needed. |
| 23 _WHITESPACES_REGEX = lazy_re.compile(ur'\s\s*') | 23 _WHITESPACES_REGEX = lazy_re.compile(ur'\s\s*') |
| 24 | 24 |
| 25 | 25 |
| 26 # See XmlEscape below. | 26 # See XmlEscape below. |
| 27 _XML_QUOTE_ESCAPES = { | 27 _XML_QUOTE_ESCAPES = { |
| 28 u"'": u''', | 28 u"'": u''', |
| 29 u'"': u'"', | 29 u'"': u'"', |
| 30 } | 30 } |
| 31 # See http://www.w3.org/TR/xml/#charsets | |
| 31 _XML_BAD_CHAR_REGEX = lazy_re.compile(u'[^\u0009\u000A\u000D' | 32 _XML_BAD_CHAR_REGEX = lazy_re.compile(u'[^\u0009\u000A\u000D' |
| 32 u'\u0020-\uD7FF\uE000-\uFFFD]') | 33 u'\u0020-\uD7FF\uE000-\uFFFD' |
| 34 u'\U00010000-\U0010FFFF]') | |
| 33 | 35 |
| 34 | 36 |
| 35 def _XmlEscape(s): | 37 def _XmlEscape(s): |
| 36 """Returns text escaped for XML in a way compatible with Google's | 38 """Returns text escaped for XML in a way compatible with Google's |
| 37 internal Translation Console tool. May be used for attributes as | 39 internal Translation Console tool. May be used for attributes as |
| 38 well as for contents. | 40 well as for contents. |
| 39 """ | 41 """ |
| 40 if not type(s) == unicode: | 42 if not type(s) == unicode: |
| 41 s = unicode(s) | 43 s = unicode(s) |
| 42 result = saxutils.escape(s, _XML_QUOTE_ESCAPES) | 44 result = saxutils.escape(s, _XML_QUOTE_ESCAPES) |
| 43 return _XML_BAD_CHAR_REGEX.sub(u'', result).encode('utf-8') | 45 illegal_chars = _XML_BAD_CHAR_REGEX.search(result) |
| 46 if illegal_chars: | |
|
newt (away)
2015/11/10 17:22:52
All of Chrome's grd files pass this stricter error
| |
| 47 raise Exception('String contains characters disallowed in XML: %s' % | |
| 48 repr(result)) | |
| 49 return result.encode('utf-8') | |
| 44 | 50 |
| 45 | 51 |
| 46 def _WriteAttribute(file, name, value): | 52 def _WriteAttribute(file, name, value): |
| 47 """Writes an XML attribute to the specified file. | 53 """Writes an XML attribute to the specified file. |
| 48 | 54 |
| 49 Args: | 55 Args: |
| 50 file: file to write to | 56 file: file to write to |
| 51 name: name of the attribute | 57 name: name of the attribute |
| 52 value: (unescaped) value of the attribute | 58 value: (unescaped) value of the attribute |
| 53 """ | 59 """ |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 282 messages.sort(key=lambda x:x.GetId()) | 288 messages.sort(key=lambda x:x.GetId()) |
| 283 | 289 |
| 284 if self.format == self.FORMAT_IDS_ONLY: | 290 if self.format == self.FORMAT_IDS_ONLY: |
| 285 # We just print the list of IDs to the output file. | 291 # We just print the list of IDs to the output file. |
| 286 for msg in messages: | 292 for msg in messages: |
| 287 output_file.write(msg.GetId()) | 293 output_file.write(msg.GetId()) |
| 288 output_file.write('\n') | 294 output_file.write('\n') |
| 289 else: | 295 else: |
| 290 assert self.format == self.FORMAT_XMB | 296 assert self.format == self.FORMAT_XMB |
| 291 WriteXmbFile(output_file, messages) | 297 WriteXmbFile(output_file, messages) |
| OLD | NEW |