Flutter Engine
The Flutter Engine
gn_helpers.py
Go to the documentation of this file.
1# Copyright 2014 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4"""Helper functions useful when writing scripts that are run from GN's
5exec_script function."""
6
7
8import sys
9
10
11class GNException(Exception):
12 pass
13
14
15# Computes ASCII code of an element of encoded Python 2 str / Python 3 bytes.
16_Ord = ord if sys.version_info.major < 3 else lambda c: c
17
18
19def _TranslateToGnChars(s):
20 for decoded_ch in s.encode('utf-8'): # str in Python 2, bytes in Python 3.
21 code = _Ord(decoded_ch) # int
22 if code in (34, 36, 92): # For '"', '$', or '\\'.
23 yield '\\' + chr(code)
24 elif 32 <= code < 127:
25 yield chr(code)
26 else:
27 yield '$0x%02X' % code
28
29
30def ToGNString(value, allow_dicts=True):
31 """Returns a stringified GN equivalent of a Python value.
32
33 allow_dicts indicates if this function will allow converting dictionaries
34 to GN scopes. This is only possible at the top level, you can't nest a
35 GN scope in a list, so this should be set to False for recursive calls."""
36 if isinstance(value, str) or isinstance(value, unicode):
37 if value.find('\n') >= 0:
38 raise GNException("Trying to print a string with a newline in it.")
39 return '"' + ''.join(_TranslateToGnChars(value)) + '"'
40
41 if isinstance(value, list):
42 return '[ %s ]' % ', '.join(ToGNString(v, False) for v in value)
43
44 if isinstance(value, dict):
45 if not allow_dicts:
46 raise GNException("Attempting to recursively print a dictionary.")
47 result = ""
48 for key in value:
49 if not isinstance(key, str):
50 raise GNException("Dictionary key is not a string.")
51 result += "%s = %s\n" % (key, ToGNString(value[key], False))
52 return result
53
54 if isinstance(value, int):
55 return str(value)
56
57 raise GNException("Unsupported type %s (value %s) when printing to GN." %
58 (type(value), value))
GLenum type
def ToGNString(value, allow_dicts=True)
Definition: gn_helpers.py:30
static SkString join(const CommandLineFlags::StringArray &)
Definition: skpbench.cpp:741