| Index: third_party/WebKit/Source/bindings/scripts/utilities.py
|
| diff --git a/third_party/WebKit/Source/bindings/scripts/utilities.py b/third_party/WebKit/Source/bindings/scripts/utilities.py
|
| index 2d812434f9be78697ee4a71d9e49fde892635fba..8d1caaad3fa39bf8a11980e9fde27639b8df30f9 100644
|
| --- a/third_party/WebKit/Source/bindings/scripts/utilities.py
|
| +++ b/third_party/WebKit/Source/bindings/scripts/utilities.py
|
| @@ -407,6 +407,46 @@ def shorten_union_name(union_type):
|
| return name
|
|
|
|
|
| +def format_remove_duplicates(text, patterns):
|
| + """Removes duplicated line-basis patterns.
|
| +
|
| + Based on simple pattern matching, removes duplicated lines in a block
|
| + of lines. Lines that match with a same pattern are considered as
|
| + duplicates.
|
| +
|
| + Designed to be used as a filter function for Jinja2.
|
| +
|
| + Args:
|
| + text: A str of multi-line text.
|
| + patterns: A list of str where each str represents a simple
|
| + pattern. The patterns are not considered as regexp, and
|
| + exact match is applied.
|
| +
|
| + Returns:
|
| + A formatted str with duplicates removed.
|
| + """
|
| + pattern_founds = [False] * len(patterns)
|
| + output = []
|
| + for line in text.split('\n'):
|
| + to_be_removed = False
|
| + for i, pattern in enumerate(patterns):
|
| + if pattern not in line:
|
| + continue
|
| + if pattern_founds[i]:
|
| + to_be_removed = True
|
| + else:
|
| + pattern_founds[i] = True
|
| + if to_be_removed:
|
| + continue
|
| + output.append(line)
|
| +
|
| + # Let |'\n'.join| emit the last newline.
|
| + if output:
|
| + output.append('')
|
| +
|
| + return '\n'.join(output)
|
| +
|
| +
|
| def format_blink_cpp_source_code(text):
|
| """Formats C++ source code.
|
|
|
| @@ -423,6 +463,7 @@ def format_blink_cpp_source_code(text):
|
| Returns:
|
| A formatted str of the source code.
|
| """
|
| + re_empty_line = re.compile(r'^\s*$')
|
| re_first_brace = re.compile(r'(?P<first>[{}])')
|
| re_last_brace = re.compile(r'.*(?P<last>[{}]).*?$')
|
| was_open_brace = True # Trick to remove the empty lines at the beginning.
|
| @@ -430,7 +471,7 @@ def format_blink_cpp_source_code(text):
|
| output = []
|
| for line in text.split('\n'):
|
| # Skip empty lines.
|
| - if not line: # empty line
|
| + if re_empty_line.match(line):
|
| was_empty_line = True
|
| continue
|
|
|
|
|