195640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org#!/usr/bin/env python
295640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org# Copyright (c) 2012 The Chromium Authors. All rights reserved.
301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# Use of this source code is governed by a BSD-style license that can be
401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# found in the LICENSE file.
501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org'''Maps each node type to an implementation class.
701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgWhen adding a new node type, you add to this mapping.
801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org'''
901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit import exception
1201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import empty
1401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import message
1501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import misc
1601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import variant
1701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import structure
1801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import include
1901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import io
2001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org_ELEMENT_TO_CLASS = {
2383717e82a9b5e0c629ff4f1078d50503ffd2ae75benrg@chromium.org  'identifiers'   : empty.IdentifiersNode,
2401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  'includes'      : empty.IncludesNode,
2501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  'messages'      : empty.MessagesNode,
2683717e82a9b5e0c629ff4f1078d50503ffd2ae75benrg@chromium.org  'outputs'       : empty.OutputsNode,
2701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  'structures'    : empty.StructuresNode,
2801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  'translations'  : empty.TranslationsNode,
2901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  'include'       : include.IncludeNode,
3083717e82a9b5e0c629ff4f1078d50503ffd2ae75benrg@chromium.org  'emit'          : io.EmitNode,
3101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  'file'          : io.FileNode,
3201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  'output'        : io.OutputNode,
3383717e82a9b5e0c629ff4f1078d50503ffd2ae75benrg@chromium.org  'ex'            : message.ExNode,
3483717e82a9b5e0c629ff4f1078d50503ffd2ae75benrg@chromium.org  'message'       : message.MessageNode,
3583717e82a9b5e0c629ff4f1078d50503ffd2ae75benrg@chromium.org  'ph'            : message.PhNode,
360b961d0af2fe00a650a882b13752e46c8aef3710benrg@chromium.org  'else'          : misc.ElseNode,
3783717e82a9b5e0c629ff4f1078d50503ffd2ae75benrg@chromium.org  'grit'          : misc.GritNode,
3801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  'identifier'    : misc.IdentifierNode,
3901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  'if'            : misc.IfNode,
4083717e82a9b5e0c629ff4f1078d50503ffd2ae75benrg@chromium.org  'part'          : misc.PartNode,
4183717e82a9b5e0c629ff4f1078d50503ffd2ae75benrg@chromium.org  'release'       : misc.ReleaseNode,
420b961d0af2fe00a650a882b13752e46c8aef3710benrg@chromium.org  'then'          : misc.ThenNode,
4383717e82a9b5e0c629ff4f1078d50503ffd2ae75benrg@chromium.org  'structure'     : structure.StructureNode,
4483717e82a9b5e0c629ff4f1078d50503ffd2ae75benrg@chromium.org  'skeleton'      : variant.SkeletonNode,
4501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org}
4601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
4701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
4801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgdef ElementToClass(name, typeattr):
4901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''Maps an element to a class that handles the element.
5001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
5101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  Args:
5201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    name: 'element' (the name of the element)
5301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    typeattr: 'type' (the value of the type attribute, if present, else None)
5401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
5501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  Return:
5601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    type
5701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''
5883717e82a9b5e0c629ff4f1078d50503ffd2ae75benrg@chromium.org  if name not in _ELEMENT_TO_CLASS:
5901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    raise exception.UnknownElement()
6001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  return _ELEMENT_TO_CLASS[name]
6101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
62