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

Side by Side Diff: grit/node/misc.py

Issue 11155024: If-then-else support for GRIT (Closed) Base URL: https://grit-i18n.googlecode.com/svn/trunk
Patch Set: comments Created 8 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « grit/node/mapping.py ('k') | grit/node/misc_unittest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 """Miscellaneous node types. 6 """Miscellaneous node types.
7 """ 7 """
8 8
9 import os.path 9 import os.path
10 import re 10 import re
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 return self.parent._IsValidChild(child) 79 return self.parent._IsValidChild(child)
80 80
81 81
82 class IfNode(SplicingNode): 82 class IfNode(SplicingNode):
83 """A node for conditional inclusion of resources. 83 """A node for conditional inclusion of resources.
84 """ 84 """
85 85
86 def MandatoryAttributes(self): 86 def MandatoryAttributes(self):
87 return ['expr'] 87 return ['expr']
88 88
89 def _IsValidChild(self, child):
90 return (isinstance(child, (ThenNode, ElseNode)) or
91 super(IfNode, self)._IsValidChild(child))
92
93 def EndParsing(self):
94 children = self.children
95 self.if_then_else = False
96 if any(isinstance(node, (ThenNode, ElseNode)) for node in children):
97 if (len(children) != 2 or not isinstance(children[0], ThenNode) or
98 not isinstance(children[1], ElseNode)):
99 raise exception.UnexpectedChild(
100 '<if> element must be <if><then>...</then><else>...</else></if>')
101 self.if_then_else = True
102
89 def ActiveChildren(self): 103 def ActiveChildren(self):
90 if not self.EvaluateCondition(self.attrs['expr']): 104 cond = self.EvaluateCondition(self.attrs['expr'])
91 return [] 105 if self.if_then_else:
92 return super(IfNode, self).ActiveChildren() 106 return self.children[0 if cond else 1].ActiveChildren()
107 else:
108 # Equivalent to having all children inside <then> with an empty <else>
109 return super(IfNode, self).ActiveChildren() if cond else []
110
111
112 class ThenNode(SplicingNode):
113 """A <then> node. Can only appear directly inside an <if> node."""
114 pass
115
116
117 class ElseNode(SplicingNode):
118 """An <else> node. Can only appear directly inside an <if> node."""
119 pass
93 120
94 121
95 class PartNode(SplicingNode): 122 class PartNode(SplicingNode):
96 """A node for inclusion of sub-grd (*.grp) files. 123 """A node for inclusion of sub-grd (*.grp) files.
97 """ 124 """
98 125
99 def __init__(self): 126 def __init__(self):
100 super(PartNode, self).__init__() 127 super(PartNode, self).__init__()
101 self.started_inclusion = False 128 self.started_inclusion = False
102 129
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 by parameters of the same name. 504 by parameters of the same name.
478 """ 505 """
479 node = IdentifierNode() 506 node = IdentifierNode()
480 node.StartParsing('identifier', parent) 507 node.StartParsing('identifier', parent)
481 node.HandleAttribute('name', name) 508 node.HandleAttribute('name', name)
482 node.HandleAttribute('id', id) 509 node.HandleAttribute('id', id)
483 node.HandleAttribute('comment', comment) 510 node.HandleAttribute('comment', comment)
484 node.HandleAttribute('systemid', systemid) 511 node.HandleAttribute('systemid', systemid)
485 node.EndParsing() 512 node.EndParsing()
486 return node 513 return node
OLDNEW
« no previous file with comments | « grit/node/mapping.py ('k') | grit/node/misc_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698