| OLD | NEW |
| 1 #! /usr/bin/env python | 1 #! /usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 import itertools | 6 import itertools |
| 7 import json | 7 import json |
| 8 import os.path | 8 import os.path |
| 9 import re | 9 import re |
| 10 import sys | 10 import sys |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 | 49 |
| 50 Returns: A tuple that looks like: | 50 Returns: A tuple that looks like: |
| 51 ( | 51 ( |
| 52 "The processed comment, minus all |parameter| mentions.", | 52 "The processed comment, minus all |parameter| mentions.", |
| 53 { | 53 { |
| 54 'parameter_name_1': "The comment that followed |parameter_name_1|:", | 54 'parameter_name_1': "The comment that followed |parameter_name_1|:", |
| 55 ... | 55 ... |
| 56 } | 56 } |
| 57 ) | 57 ) |
| 58 ''' | 58 ''' |
| 59 def add_paragraphs(content): |
| 60 paragraphs = content.split('\n\n') |
| 61 if len(paragraphs) < 2: |
| 62 return content |
| 63 return '<p>' + '</p><p>'.join(p.strip() for p in paragraphs) + '</p>' |
| 64 |
| 59 # Find all the parameter comments of the form '|name|: comment'. | 65 # Find all the parameter comments of the form '|name|: comment'. |
| 60 parameter_starts = list(re.finditer(r' *\|([^|]*)\| *: *', comment)) | 66 parameter_starts = list(re.finditer(r' *\|([^|]*)\| *: *', comment)) |
| 61 | 67 |
| 62 # Get the parent comment (everything before the first parameter comment. | 68 # Get the parent comment (everything before the first parameter comment. |
| 63 first_parameter_location = (parameter_starts[0].start() | 69 first_parameter_location = (parameter_starts[0].start() |
| 64 if parameter_starts else len(comment)) | 70 if parameter_starts else len(comment)) |
| 65 parent_comment = comment[:first_parameter_location] | 71 parent_comment = (add_paragraphs(comment[:first_parameter_location].strip()) |
| 66 | 72 .replace('\n', '')) |
| 67 # We replace \n\n with <br/><br/> here and below, because the documentation | |
| 68 # needs to know where the newlines should be, and this is easier than | |
| 69 # escaping \n. | |
| 70 parent_comment = (parent_comment.strip().replace('\n\n', '<br/><br/>') | |
| 71 .replace('\n', '')) | |
| 72 | 73 |
| 73 params = OrderedDict() | 74 params = OrderedDict() |
| 74 for (cur_param, next_param) in itertools.izip_longest(parameter_starts, | 75 for (cur_param, next_param) in itertools.izip_longest(parameter_starts, |
| 75 parameter_starts[1:]): | 76 parameter_starts[1:]): |
| 76 param_name = cur_param.group(1) | 77 param_name = cur_param.group(1) |
| 77 | 78 |
| 78 # A parameter's comment goes from the end of its introduction to the | 79 # A parameter's comment goes from the end of its introduction to the |
| 79 # beginning of the next parameter's introduction. | 80 # beginning of the next parameter's introduction. |
| 80 param_comment_start = cur_param.end() | 81 param_comment_start = cur_param.end() |
| 81 param_comment_end = next_param.start() if next_param else len(comment) | 82 param_comment_end = next_param.start() if next_param else len(comment) |
| 82 params[param_name] = (comment[param_comment_start:param_comment_end | 83 params[param_name] = ( |
| 83 ].strip().replace('\n\n', '<br/><br/>') | 84 add_paragraphs(comment[param_comment_start:param_comment_end].strip()) |
| 84 .replace('\n', '')) | 85 .replace('\n', '')) |
| 86 |
| 85 return (parent_comment, params) | 87 return (parent_comment, params) |
| 86 | 88 |
| 87 | 89 |
| 88 class Callspec(object): | 90 class Callspec(object): |
| 89 ''' | 91 ''' |
| 90 Given a Callspec node representing an IDL function declaration, converts into | 92 Given a Callspec node representing an IDL function declaration, converts into |
| 91 a tuple: | 93 a tuple: |
| 92 (name, list of function parameters, return type) | 94 (name, list of function parameters, return type) |
| 93 ''' | 95 ''' |
| 94 def __init__(self, callspec_node, comment): | 96 def __init__(self, callspec_node, comment): |
| (...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 print json.dumps(schema, indent=2) | 479 print json.dumps(schema, indent=2) |
| 478 else: | 480 else: |
| 479 contents = sys.stdin.read() | 481 contents = sys.stdin.read() |
| 480 idl = idl_parser.IDLParser().ParseData(contents, '<stdin>') | 482 idl = idl_parser.IDLParser().ParseData(contents, '<stdin>') |
| 481 schema = IDLSchema(idl).process() | 483 schema = IDLSchema(idl).process() |
| 482 print json.dumps(schema, indent=2) | 484 print json.dumps(schema, indent=2) |
| 483 | 485 |
| 484 | 486 |
| 485 if __name__ == '__main__': | 487 if __name__ == '__main__': |
| 486 Main() | 488 Main() |
| OLD | NEW |