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