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

Side by Side Diff: tools/json_schema_compiler/idl_schema.py

Issue 921793004: <appview> documentation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: link Created 5 years, 9 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 unified diff | Download patch
OLDNEW
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 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 dictionary that the JSON schema compiler expects to see. 336 dictionary that the JSON schema compiler expects to see.
337 ''' 337 '''
338 338
339 def __init__(self, 339 def __init__(self,
340 namespace_node, 340 namespace_node,
341 description, 341 description,
342 nodoc=False, 342 nodoc=False,
343 internal=False, 343 internal=False,
344 platforms=None, 344 platforms=None,
345 compiler_options=None, 345 compiler_options=None,
346 deprecated=None): 346 deprecated=None,
347 documentation_options=None):
347 self.namespace = namespace_node 348 self.namespace = namespace_node
348 self.nodoc = nodoc 349 self.nodoc = nodoc
349 self.internal = internal 350 self.internal = internal
350 self.platforms = platforms 351 self.platforms = platforms
351 self.compiler_options = compiler_options 352 self.compiler_options = compiler_options
352 self.events = [] 353 self.events = []
353 self.functions = [] 354 self.functions = []
354 self.types = [] 355 self.types = []
355 self.callbacks = OrderedDict() 356 self.callbacks = OrderedDict()
356 self.description = description 357 self.description = description
357 self.deprecated = deprecated 358 self.deprecated = deprecated
359 self.documentation_options = documentation_options
358 360
359 def process(self): 361 def process(self):
360 for node in self.namespace.GetChildren(): 362 for node in self.namespace.GetChildren():
361 if node.cls == 'Dictionary': 363 if node.cls == 'Dictionary':
362 self.types.append(Dictionary(node).process(self.callbacks)) 364 self.types.append(Dictionary(node).process(self.callbacks))
363 elif node.cls == 'Callback': 365 elif node.cls == 'Callback':
364 k, v = Member(node).process(self.callbacks) 366 k, v = Member(node).process(self.callbacks)
365 self.callbacks[k] = v 367 self.callbacks[k] = v
366 elif node.cls == 'Interface' and node.GetName() == 'Functions': 368 elif node.cls == 'Interface' and node.GetName() == 'Functions':
367 self.functions = self.process_interface(node) 369 self.functions = self.process_interface(node)
368 elif node.cls == 'Interface' and node.GetName() == 'Events': 370 elif node.cls == 'Interface' and node.GetName() == 'Events':
369 self.events = self.process_interface(node) 371 self.events = self.process_interface(node)
370 elif node.cls == 'Enum': 372 elif node.cls == 'Enum':
371 self.types.append(Enum(node).process()) 373 self.types.append(Enum(node).process())
372 else: 374 else:
373 sys.exit('Did not process %s %s' % (node.cls, node)) 375 sys.exit('Did not process %s %s' % (node.cls, node))
374 if self.compiler_options is not None: 376 if self.compiler_options is not None:
not at google - send to devlin 2015/03/03 23:50:59 We should write both of these like: compiler_opti
lfg 2015/03/04 21:13:02 Done.
375 compiler_options = self.compiler_options 377 compiler_options = self.compiler_options
376 else: 378 else:
377 compiler_options = {} 379 compiler_options = {}
380 if self.documentation_options is not None:
381 documentation_options = self.documentation_options
382 else:
383 documentation_options = {}
378 return {'namespace': self.namespace.GetName(), 384 return {'namespace': self.namespace.GetName(),
379 'description': self.description, 385 'description': self.description,
380 'nodoc': self.nodoc, 386 'nodoc': self.nodoc,
381 'types': self.types, 387 'types': self.types,
382 'functions': self.functions, 388 'functions': self.functions,
383 'internal': self.internal, 389 'internal': self.internal,
384 'events': self.events, 390 'events': self.events,
385 'platforms': self.platforms, 391 'platforms': self.platforms,
386 'compiler_options': compiler_options, 392 'compiler_options': compiler_options,
387 'deprecated': self.deprecated} 393 'deprecated': self.deprecated,
394 'documentation_options': documentation_options}
388 395
389 def process_interface(self, node): 396 def process_interface(self, node):
390 members = [] 397 members = []
391 for member in node.GetChildren(): 398 for member in node.GetChildren():
392 if member.cls == 'Member': 399 if member.cls == 'Member':
393 _, properties = Member(member).process(self.callbacks) 400 _, properties = Member(member).process(self.callbacks)
394 members.append(properties) 401 members.append(properties)
395 return members 402 return members
396 403
397 404
398 class IDLSchema(object): 405 class IDLSchema(object):
399 ''' 406 '''
400 Given a list of IDLNodes and IDLAttributes, converts into a Python list 407 Given a list of IDLNodes and IDLAttributes, converts into a Python list
401 of api_defs that the JSON schema compiler expects to see. 408 of api_defs that the JSON schema compiler expects to see.
402 ''' 409 '''
403 410
404 def __init__(self, idl): 411 def __init__(self, idl):
405 self.idl = idl 412 self.idl = idl
406 413
407 def process(self): 414 def process(self):
408 namespaces = [] 415 namespaces = []
409 nodoc = False 416 nodoc = False
410 internal = False 417 internal = False
411 description = None 418 description = None
412 platforms = None 419 platforms = None
413 compiler_options = {} 420 compiler_options = {}
414 deprecated = None 421 deprecated = None
422 documentation_options = {}
415 for node in self.idl: 423 for node in self.idl:
416 if node.cls == 'Namespace': 424 if node.cls == 'Namespace':
417 if not description: 425 if not description:
418 # TODO(kalman): Go back to throwing an error here. 426 # TODO(kalman): Go back to throwing an error here.
419 print('%s must have a namespace-level comment. This will ' 427 print('%s must have a namespace-level comment. This will '
420 'appear on the API summary page.' % node.GetName()) 428 'appear on the API summary page.' % node.GetName())
421 description = '' 429 description = ''
422 namespace = Namespace(node, description, nodoc, internal, 430 namespace = Namespace(node, description, nodoc, internal,
423 platforms=platforms, 431 platforms=platforms,
424 compiler_options=compiler_options or None, 432 compiler_options=compiler_options or None,
425 deprecated=deprecated) 433 deprecated=deprecated,
434 documentation_options=documentation_options)
426 namespaces.append(namespace.process()) 435 namespaces.append(namespace.process())
427 nodoc = False 436 nodoc = False
428 internal = False 437 internal = False
429 platforms = None 438 platforms = None
430 compiler_options = None 439 compiler_options = None
431 elif node.cls == 'Copyright': 440 elif node.cls == 'Copyright':
432 continue 441 continue
433 elif node.cls == 'Comment': 442 elif node.cls == 'Comment':
434 description = node.GetName() 443 description = node.GetName()
435 elif node.cls == 'ExtAttribute': 444 elif node.cls == 'ExtAttribute':
436 if node.name == 'nodoc': 445 if node.name == 'nodoc':
437 nodoc = bool(node.value) 446 nodoc = bool(node.value)
438 elif node.name == 'internal': 447 elif node.name == 'internal':
439 internal = bool(node.value) 448 internal = bool(node.value)
440 elif node.name == 'platforms': 449 elif node.name == 'platforms':
441 platforms = list(node.value) 450 platforms = list(node.value)
442 elif node.name == 'implemented_in': 451 elif node.name == 'implemented_in':
443 compiler_options['implemented_in'] = node.value 452 compiler_options['implemented_in'] = node.value
444 elif node.name == 'camel_case_enum_to_string': 453 elif node.name == 'camel_case_enum_to_string':
445 compiler_options['camel_case_enum_to_string'] = node.value 454 compiler_options['camel_case_enum_to_string'] = node.value
446 elif node.name == 'deprecated': 455 elif node.name == 'deprecated':
447 deprecated = str(node.value) 456 deprecated = str(node.value)
457 elif node.name == 'documentation_options_title':
458 documentation_options['title'] = node.value
459 elif node.name == 'documentation_options_namespace':
460 documentation_options['namespace'] = node.value
461 elif node.name == 'documentation_options_documented_in':
462 documentation_options['documented_in'] = node.value
not at google - send to devlin 2015/03/03 23:50:59 Let's make this a little less wordy: documentation
lfg 2015/03/04 21:13:02 Done.
448 else: 463 else:
449 continue 464 continue
450 else: 465 else:
451 sys.exit('Did not process %s %s' % (node.cls, node)) 466 sys.exit('Did not process %s %s' % (node.cls, node))
452 return namespaces 467 return namespaces
453 468
454 469
455 def Load(filename): 470 def Load(filename):
456 ''' 471 '''
457 Given the filename of an IDL file, parses it and returns an equivalent 472 Given the filename of an IDL file, parses it and returns an equivalent
(...skipping 20 matching lines...) Expand all
478 print json.dumps(schema, indent=2) 493 print json.dumps(schema, indent=2)
479 else: 494 else:
480 contents = sys.stdin.read() 495 contents = sys.stdin.read()
481 idl = idl_parser.IDLParser().ParseData(contents, '<stdin>') 496 idl = idl_parser.IDLParser().ParseData(contents, '<stdin>')
482 schema = IDLSchema(idl).process() 497 schema = IDLSchema(idl).process()
483 print json.dumps(schema, indent=2) 498 print json.dumps(schema, indent=2)
484 499
485 500
486 if __name__ == '__main__': 501 if __name__ == '__main__':
487 Main() 502 Main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698