| Index: client/html/scripts/css_code_generator.py
|
| diff --git a/client/html/scripts/css_code_generator.py b/client/html/scripts/css_code_generator.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0656de8ad73b86567d9b180e0b117ff7dbca9ded
|
| --- /dev/null
|
| +++ b/client/html/scripts/css_code_generator.py
|
| @@ -0,0 +1,219 @@
|
| +#!/usr/bin/python2.6
|
| +#
|
| +# Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| +# for details. All rights reserved. Use of this source code is governed by a
|
| +# BSD-style license that can be found in the LICENSE file.
|
| +
|
| +"""Generates CSSStyleDeclaration from css property definitions defined in WebKit."""
|
| +
|
| +import tempfile, os
|
| +
|
| +COMMENT_LINE_PREFIX = ' * '
|
| +SOURCE_PATH = 'Source/WebCore/css/CSSPropertyNames.in'
|
| +INPUT_URL = 'http://trac.webkit.org/export/latest/trunk/%s' % SOURCE_PATH
|
| +INTERFACE_FILE = '../../html/src/CSSStyleDeclaration.dart'
|
| +CLASS_FILE = '../../html/src/CSSStyleDeclarationWrappingImplementation.dart'
|
| +
|
| +def main():
|
| + _, css_names_file = tempfile.mkstemp('.CSSPropertyNames.in')
|
| + try:
|
| + if os.system('wget %s -O %s' % (INPUT_URL, css_names_file)):
|
| + return 1
|
| + generate_code(css_names_file)
|
| + print 'Successfully generated %s and %s' % (INTERFACE_FILE, CLASS_FILE)
|
| + finally:
|
| + os.remove(css_names_file)
|
| +
|
| +def camelCaseName(name):
|
| + """Convert a CSS property name to a lowerCamelCase name."""
|
| + name = name.replace('-webkit-', '')
|
| + words = []
|
| + for word in name.split('-'):
|
| + if words:
|
| + words.append(word.title())
|
| + else:
|
| + words.append(word)
|
| + return ''.join(words)
|
| +
|
| +def generate_code(input_path):
|
| + data = open(input_path).readlines()
|
| +
|
| + # filter CSSPropertyNames.in to only the properties
|
| + data = [d[:-1] for d in data
|
| + if len(d) > 1
|
| + and not d.startswith('#')
|
| + and not d.startswith('//')
|
| + and not '=' in d]
|
| +
|
| + interface_file = open(INTERFACE_FILE, 'w')
|
| + class_file = open(CLASS_FILE, 'w')
|
| +
|
| + interface_file.write("""
|
| +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +// WARNING: Do not edit.
|
| +// This file was generated by html/scripts/css_code_generator.py
|
| +
|
| +// Source of CSS properties:
|
| +// %s
|
| +
|
| +// TODO(jacobr): add versions that take numeric values in px, miliseconds, etc.
|
| +
|
| +interface CSSStyleDeclaration {
|
| +
|
| + String get cssText();
|
| +
|
| + void set cssText(String value);
|
| +
|
| + int get length();
|
| +
|
| + CSSRule get parentRule();
|
| +
|
| + CSSValue getPropertyCSSValue(String propertyName);
|
| +
|
| + String getPropertyPriority(String propertyName);
|
| +
|
| + String getPropertyShorthand(String propertyName);
|
| +
|
| + String getPropertyValue(String propertyName);
|
| +
|
| + bool isPropertyImplicit(String propertyName);
|
| +
|
| + String item(int index);
|
| +
|
| + String removeProperty(String propertyName);
|
| +
|
| + void setProperty(String propertyName, String value, [String priority]);
|
| +
|
| +""".lstrip() % SOURCE_PATH)
|
| +
|
| +
|
| + class_file.write("""
|
| +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +// WARNING: Do not edit.
|
| +// This file was generated by html/scripts/css_code_generator.py
|
| +
|
| +// Source of CSS properties:
|
| +// %s
|
| +
|
| +// TODO(jacobr): add versions that take numeric values in px, miliseconds, etc.
|
| +
|
| +class CSSStyleDeclarationWrappingImplementation extends DOMWrapperBase implements CSSStyleDeclaration {
|
| + static String _cachedBrowserPrefix;
|
| +
|
| + CSSStyleDeclarationWrappingImplementation._wrap(ptr) : super._wrap(ptr) {}
|
| +
|
| + static String get _browserPrefix() {
|
| + if (_cachedBrowserPrefix === null) {
|
| + if (_Device.isFirefox) {
|
| + _cachedBrowserPrefix = '-moz-';
|
| + } else {
|
| + _cachedBrowserPrefix = '-webkit-';
|
| + }
|
| + // TODO(jacobr): support IE 9.0 and Opera as well.
|
| + }
|
| + return _cachedBrowserPrefix;
|
| + }
|
| +
|
| + String get cssText() { return _ptr.cssText; }
|
| +
|
| + void set cssText(String value) { _ptr.cssText = value; }
|
| +
|
| + int get length() { return _ptr.length; }
|
| +
|
| + CSSRule get parentRule() { return LevelDom.wrapCSSRule(_ptr.parentRule); }
|
| +
|
| + CSSValue getPropertyCSSValue(String propertyName) {
|
| + return LevelDom.wrapCSSValue(_ptr.getPropertyCSSValue(propertyName));
|
| + }
|
| +
|
| + String getPropertyPriority(String propertyName) {
|
| + return _ptr.getPropertyPriority(propertyName);
|
| + }
|
| +
|
| + String getPropertyShorthand(String propertyName) {
|
| + return _ptr.getPropertyShorthand(propertyName);
|
| + }
|
| +
|
| + String getPropertyValue(String propertyName) {
|
| + return _ptr.getPropertyValue(propertyName);
|
| + }
|
| +
|
| + bool isPropertyImplicit(String propertyName) {
|
| + return _ptr.isPropertyImplicit(propertyName);
|
| + }
|
| +
|
| + String item(int index) {
|
| + return _ptr.item(index);
|
| + }
|
| +
|
| + String removeProperty(String propertyName) {
|
| + return _ptr.removeProperty(propertyName);
|
| + }
|
| +
|
| + void setProperty(String propertyName, String value, [String priority = '']) {
|
| + _ptr.setProperty(propertyName, value, priority);
|
| + }
|
| +
|
| + String get typeName() { return "CSSStyleDeclaration"; }
|
| +
|
| +""".lstrip() % SOURCE_PATH)
|
| +
|
| + interface_lines = [];
|
| + class_lines = [];
|
| +
|
| + seen = set()
|
| + for prop in sorted(data, key=lambda p: camelCaseName(p)):
|
| + camel_case_name = camelCaseName(prop)
|
| + upper_camel_case_name = camel_case_name[0].upper() + camel_case_name[1:];
|
| + css_name = prop.replace('-webkit-', '${_browserPrefix}')
|
| + base_css_name = prop.replace('-webkit-', '')
|
| +
|
| + if base_css_name in seen:
|
| + continue
|
| + seen.add(base_css_name)
|
| +
|
| + comment = ' /** %s the value of "' + base_css_name + '" */'
|
| +
|
| + interface_lines.append(comment % 'Gets')
|
| + interface_lines.append("""
|
| + String get %s();
|
| +
|
| +""" % camel_case_name)
|
| +
|
| + interface_lines.append(comment % 'Sets')
|
| + interface_lines.append("""
|
| + void set %s(String value);
|
| +
|
| +""" % camel_case_name)
|
| +
|
| + class_lines.append('\n');
|
| + class_lines.append(comment % 'Gets')
|
| + class_lines.append("""
|
| + String get %s() =>
|
| + getPropertyValue('%s');
|
| +
|
| +""" % (camel_case_name, css_name))
|
| +
|
| + class_lines.append(comment % 'Sets')
|
| + class_lines.append("""
|
| + void set %s(String value) {
|
| + setProperty('%s', value, '');
|
| + }
|
| +""" % (camel_case_name, css_name))
|
| +
|
| + interface_file.write(''.join(interface_lines));
|
| + interface_file.write('}\n')
|
| + interface_file.close()
|
| +
|
| + class_file.write(''.join(class_lines));
|
| + class_file.write('}\n')
|
| + class_file.close()
|
| +
|
| +if __name__ == '__main__':
|
| + main()
|
|
|