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'''Container nodes that don't have any logic.
701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org'''
801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import base
1101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import include
1201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import structure
1301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import message
1401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import io
1501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import misc
1601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass GroupingNode(base.Node):
1901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''Base class for all the grouping elements (<structures>, <includes>,
2001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  <messages> and <identifiers>).'''
2101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def DefaultAttributes(self):
2201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    return {
2301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'first_id' : '',
2401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'comment' : '',
2501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      'fallback_to_english' : 'false',
26ec8016c73b3b945b6284746230913d88653f35e7benrg@chromium.org      'fallback_to_low_resolution' : 'false',
2701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    }
2801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
3001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass IncludesNode(GroupingNode):
3101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''The <includes> element.'''
3201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def _IsValidChild(self, child):
330b961d0af2fe00a650a882b13752e46c8aef3710benrg@chromium.org    return isinstance(child, (include.IncludeNode, misc.IfNode, misc.PartNode))
3401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
3501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
3601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass MessagesNode(GroupingNode):
3701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''The <messages> element.'''
3801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def _IsValidChild(self, child):
390b961d0af2fe00a650a882b13752e46c8aef3710benrg@chromium.org    return isinstance(child, (message.MessageNode, misc.IfNode, misc.PartNode))
4001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
4101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
4201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass StructuresNode(GroupingNode):
4301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''The <structures> element.'''
4401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def _IsValidChild(self, child):
450b961d0af2fe00a650a882b13752e46c8aef3710benrg@chromium.org    return isinstance(child, (structure.StructureNode,
460b961d0af2fe00a650a882b13752e46c8aef3710benrg@chromium.org                              misc.IfNode, misc.PartNode))
4701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
4801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
4901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass TranslationsNode(base.Node):
5001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''The <translations> element.'''
5101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def _IsValidChild(self, child):
520b961d0af2fe00a650a882b13752e46c8aef3710benrg@chromium.org    return isinstance(child, (io.FileNode, misc.IfNode, misc.PartNode))
5301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
5401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
5501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass OutputsNode(base.Node):
5601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''The <outputs> element.'''
5701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def _IsValidChild(self, child):
580b961d0af2fe00a650a882b13752e46c8aef3710benrg@chromium.org    return isinstance(child, (io.OutputNode, misc.IfNode, misc.PartNode))
5901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
6001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
6101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass IdentifiersNode(GroupingNode):
6201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''The <identifiers> element.'''
6301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def _IsValidChild(self, child):
6401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    return isinstance(child, misc.IdentifierNode)
65