blob: 69a96f7fab9ad72e7891eddab2c09e22e496f3c3 [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import in_generator
import sys
import os
module_basename = os.path.basename(__file__)
module_pyname = os.path.splitext(module_basename)[0] + '.py'
CPP_TEMPLATE = """
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Auto-generated by {module_pyname}
const MediaQueryTokenizer::CodePoint MediaQueryTokenizer::codePoints[{array_size}] = {{
{token_lines}
}};
const unsigned codePointsNumber = {array_size};
"""
def token_type(i):
codepoints = {'(': 'leftParenthesis',
')': 'rightParenthesis',
'[': 'leftBracket',
']': 'rightBracket',
'{': 'leftBrace',
'}': 'rightBrace',
'+': 'plusOrFullStop',
'.': 'plusOrFullStop',
'-': 'hyphenMinus',
'*': 'asterisk',
',': 'comma',
'/': 'solidus',
'\\': 'reverseSolidus',
':': 'colon',
';': 'semiColon',
}
whitespace = '\n\r\t\f '
quotes = '"\''
c = chr(i)
if c in whitespace:
return 'whiteSpace'
if c.isdigit():
return 'asciiDigit'
if c.isalpha() or c == '_':
return 'nameStart'
if c in quotes:
return 'stringStart'
if i == 0:
return 'endOfFile'
return codepoints.get(c)
class MakeMediaQueryTokenizerCodePointsWriter(in_generator.Writer):
defaults = {
'Conditional': None,
'RuntimeEnabled': None,
'ImplementedAs': None,
}
filters = {
}
default_parameters = {
'namespace': '',
'export': '',
}
def __init__(self, in_file_path):
super(MakeMediaQueryTokenizerCodePointsWriter, self).__init__(in_file_path)
self._outputs = {
('MediaQueryTokenizerCodepoints.cpp'): self.generate,
}
self._template_context = {
'namespace': '',
'export': '',
}
def generate(self):
array_size = 128 # SCHAR_MAX + 1
token_lines = [' &MediaQueryTokenizer::%s,' % token_type(i)
if token_type(i) else ' 0,'
for i in range(array_size)]
return CPP_TEMPLATE.format(array_size=array_size, token_lines='\n'.join(token_lines), module_pyname=module_pyname)
if __name__ == '__main__':
in_generator.Maker(MakeMediaQueryTokenizerCodePointsWriter).main(sys.argv)