Upstream version 11.39.266.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / build / scripts / make_mediaquery_tokenizer_codepoints.py
1 #!/usr/bin/env python
2
3 # Copyright 2014 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file.
6
7 import in_generator
8 import sys
9 import os
10
11 module_basename = os.path.basename(__file__)
12 module_pyname = os.path.splitext(module_basename)[0] + '.py'
13
14 CPP_TEMPLATE = """
15 // Copyright 2014 The Chromium Authors. All rights reserved.
16 // Use of this source code is governed by a BSD-style license that can be
17 // found in the LICENSE file.
18
19 // Auto-generated by {module_pyname}
20
21 const MediaQueryTokenizer::CodePoint MediaQueryTokenizer::codePoints[{array_size}] = {{
22 {token_lines}
23 }};
24 const unsigned codePointsNumber = {array_size};
25 """
26
27
28 def token_type(i):
29     codepoints = {'(': 'leftParenthesis',
30                   ')': 'rightParenthesis',
31                   '[': 'leftBracket',
32                   ']': 'rightBracket',
33                   '{': 'leftBrace',
34                   '}': 'rightBrace',
35                   '+': 'plusOrFullStop',
36                   '.': 'plusOrFullStop',
37                   '-': 'hyphenMinus',
38                   '*': 'asterisk',
39                   ',': 'comma',
40                   '/': 'solidus',
41                   '\\': 'reverseSolidus',
42                   ':': 'colon',
43                   ';': 'semiColon',
44                   }
45     whitespace = '\n\r\t\f '
46     quotes = '"\''
47     c = chr(i)
48     if c in whitespace:
49         return 'whiteSpace'
50     if c.isdigit():
51         return 'asciiDigit'
52     if c.isalpha() or c == '_':
53         return 'nameStart'
54     if c in quotes:
55         return 'stringStart'
56     if i == 0:
57         return 'endOfFile'
58     return codepoints.get(c)
59
60
61 class MakeMediaQueryTokenizerCodePointsWriter(in_generator.Writer):
62     defaults = {
63         'Conditional': None,
64         'RuntimeEnabled': None,
65         'ImplementedAs': None,
66     }
67     filters = {
68     }
69     default_parameters = {
70         'namespace': '',
71         'export': '',
72     }
73
74     def __init__(self, in_file_path):
75         super(MakeMediaQueryTokenizerCodePointsWriter, self).__init__(in_file_path)
76
77         self._outputs = {
78             ('MediaQueryTokenizerCodepoints.cpp'): self.generate,
79         }
80         self._template_context = {
81             'namespace': '',
82             'export': '',
83         }
84
85     def generate(self):
86         array_size = 128  # SCHAR_MAX + 1
87         token_lines = ['    &MediaQueryTokenizer::%s,' % token_type(i)
88                         if token_type(i) else '    0,'
89                         for i in range(array_size)]
90         return CPP_TEMPLATE.format(array_size=array_size, token_lines='\n'.join(token_lines), module_pyname=module_pyname)
91
92 if __name__ == '__main__':
93     in_generator.Maker(MakeMediaQueryTokenizerCodePointsWriter).main(sys.argv)