1#!/usr/bin/env python
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
4# found in the LICENSE file.
5
6'''Maps each node type to an implementation class.
7When adding a new node type, you add to this mapping.
8'''
9
10
11from grit import exception
12
13from grit.node import empty
14from grit.node import message
15from grit.node import misc
16from grit.node import variant
17from grit.node import structure
18from grit.node import include
19from grit.node import io
20
21
22_ELEMENT_TO_CLASS = {
23  'identifiers'   : empty.IdentifiersNode,
24  'includes'      : empty.IncludesNode,
25  'messages'      : empty.MessagesNode,
26  'outputs'       : empty.OutputsNode,
27  'structures'    : empty.StructuresNode,
28  'translations'  : empty.TranslationsNode,
29  'include'       : include.IncludeNode,
30  'emit'          : io.EmitNode,
31  'file'          : io.FileNode,
32  'output'        : io.OutputNode,
33  'ex'            : message.ExNode,
34  'message'       : message.MessageNode,
35  'ph'            : message.PhNode,
36  'else'          : misc.ElseNode,
37  'grit'          : misc.GritNode,
38  'identifier'    : misc.IdentifierNode,
39  'if'            : misc.IfNode,
40  'part'          : misc.PartNode,
41  'release'       : misc.ReleaseNode,
42  'then'          : misc.ThenNode,
43  'structure'     : structure.StructureNode,
44  'skeleton'      : variant.SkeletonNode,
45}
46
47
48def ElementToClass(name, typeattr):
49  '''Maps an element to a class that handles the element.
50
51  Args:
52    name: 'element' (the name of the element)
53    typeattr: 'type' (the value of the type attribute, if present, else None)
54
55  Return:
56    type
57  '''
58  if name not in _ELEMENT_TO_CLASS:
59    raise exception.UnknownElement()
60  return _ELEMENT_TO_CLASS[name]
61
62