Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Unified Diff: core/scripts/in_file.py

Issue 126143003: Update IDL to Chrome 32 (Closed) Base URL: https://dart.googlecode.com/svn/third_party/WebCore
Patch Set: Add new files Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « core/scripts/action_useragentstylesheets.py ('k') | core/scripts/in_file_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: core/scripts/in_file.py
diff --git a/core/scripts/in_file.py b/core/scripts/in_file.py
deleted file mode 100644
index d8d8235704b8f142d6e4fccbaa22ce1b0cb4b41b..0000000000000000000000000000000000000000
--- a/core/scripts/in_file.py
+++ /dev/null
@@ -1,160 +0,0 @@
-# Copyright (C) 2013 Google Inc. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-# * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import copy
-import os
-
-# NOTE: This has only been used to parse
-# core/page/RuntimeEnabledFeatures.in and may not be capable
-# of parsing other .in files correctly.
-
-# .in file format is:
-# // comment
-# name1 arg=value, arg2=value2, arg2=value3
-#
-# InFile must be passed a dictionary of default values
-# with which to validate arguments against known names.
-# Sequence types as default values will produce sequences
-# as parse results.
-# Bare arguments (no '=') are treated as names with value True.
-# The first field will always be labeled 'name'.
-#
-# InFile.load_from_files(['file.in'], {'arg': None, 'arg2': []})
-#
-# Parsing produces an array of dictionaries:
-# [ { 'name' : 'name1', 'arg' :' value', arg2=['value2', 'value3'] }
-
-def _is_comment(line):
- return line.startswith("//") or line.startswith("#")
-
-class InFile(object):
- def __init__(self, lines, defaults, valid_values=None, default_parameters=None):
- self.name_dictionaries = []
- self.parameters = copy.deepcopy(default_parameters if default_parameters else {})
- self._defaults = defaults
- self._valid_values = copy.deepcopy(valid_values if valid_values else {})
- self._parse(map(str.strip, lines))
-
- @classmethod
- def load_from_files(self, file_paths, defaults, valid_values, default_parameters):
- lines = []
- for path in file_paths:
- with open(os.path.abspath(path)) as in_file:
- lines += in_file.readlines()
- return InFile(lines, defaults, valid_values, default_parameters)
-
- def _is_sequence(self, arg):
- return (not hasattr(arg, "strip")
- and hasattr(arg, "__getitem__")
- or hasattr(arg, "__iter__"))
-
- def _parse(self, lines):
- parsing_parameters = True
- indices = {}
- for line in lines:
- if _is_comment(line):
- continue
- if not line:
- parsing_parameters = False
- continue
- if parsing_parameters:
- self._parse_parameter(line)
- else:
- entry = self._parse_line(line)
- name = entry['name']
- if name in indices:
- entry = self._merge_entries(entry, self.name_dictionaries[indices[name]])
- entry['name'] = name
- self.name_dictionaries[indices[name]] = entry
- else:
- indices[name] = len(self.name_dictionaries)
- self.name_dictionaries.append(entry)
-
-
- def _merge_entries(self, one, two):
- merged = {}
- for key in one:
- if key not in two:
- self._fatal("Expected key '%s' not found in entry: %s" % (key, two))
- if one[key] and two[key]:
- val_one = one[key]
- val_two = two[key]
- if isinstance(val_one, list) and isinstance(val_two, list):
- val = val_one + val_two
- elif isinstance(val_one, list):
- val = val_one + [val_two]
- elif isinstance(val_two, list):
- val = [val_one] + val_two
- else:
- val = [val_one, val_two]
- merged[key] = val
- elif one[key]:
- merged[key] = one[key]
- else:
- merged[key] = two[key]
- return merged
-
-
- def _parse_parameter(self, line):
- if '=' in line:
- name, value = line.split('=')
- else:
- name, value = line, True
- if not name in self.parameters:
- self._fatal("Unknown parameter: '%s' in line:\n%s\nKnown parameters: %s" % (name, line, self.parameters.keys()))
- self.parameters[name] = value
-
- def _parse_line(self, line):
- args = copy.deepcopy(self._defaults)
- parts = line.split(' ')
- args['name'] = parts[0]
- # re-join the rest of the line and split on ','
- args_list = ' '.join(parts[1:]).strip().split(',')
- for arg_string in args_list:
- arg_string = arg_string.strip()
- if not arg_string: # Ignore empty args
- continue
- if '=' in arg_string:
- arg_name, arg_value = arg_string.split('=')
- else:
- arg_name, arg_value = arg_string, True
- if arg_name not in self._defaults:
- self._fatal("Unknown argument: '%s' in line:\n%s\nKnown arguments: %s" % (arg_name, line, self._defaults.keys()))
- valid_values = self._valid_values.get(arg_name)
- if valid_values and arg_value not in valid_values:
- self._fatal("Unknown value: '%s' in line:\n%s\nKnown values: %s" % (arg_value, line, valid_values))
- if self._is_sequence(args[arg_name]):
- args[arg_name].append(arg_value)
- else:
- args[arg_name] = arg_value
- return args
-
- def _fatal(self, message):
- # FIXME: This should probably raise instead of exit(1)
- print message
- exit(1)
« no previous file with comments | « core/scripts/action_useragentstylesheets.py ('k') | core/scripts/in_file_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698