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

Side by Side Diff: grit/grd_reader.py

Issue 9802029: Make first_ids_file an optional attribute of the .grd file. (Closed) Base URL: http://grit-i18n.googlecode.com/svn/trunk/
Patch Set: Created 8 years, 9 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 | « no previous file | grit/grd_reader_unittest.py » ('j') | grit/node/misc.py » ('J')
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 '''Class for reading GRD files into memory, without processing them. 6 '''Class for reading GRD files into memory, without processing them.
7 ''' 7 '''
8 8
9 import os.path 9 import os.path
10 import types 10 import types
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 if self.ignore_depth == 0: 101 if self.ignore_depth == 0:
102 if self.stack[-1]: 102 if self.stack[-1]:
103 self.stack[-1].AppendContent(content) 103 self.stack[-1].AppendContent(content)
104 104
105 def ignorableWhitespace(self, whitespace): 105 def ignorableWhitespace(self, whitespace):
106 # TODO(joi) This is not supported by expat. Should use a different XML par ser? 106 # TODO(joi) This is not supported by expat. Should use a different XML par ser?
107 pass 107 pass
108 108
109 109
110 def Parse(filename_or_stream, dir=None, flexible_root=False, 110 def Parse(filename_or_stream, dir=None, flexible_root=False,
111 stop_after=None, debug=False, first_id_filename=None, 111 stop_after=None, first_ids_file=None, debug=False,
112 defines=None, tags_to_ignore=None): 112 defines=None, tags_to_ignore=None):
113 '''Parses a GRD file into a tree of nodes (from grit.node). 113 '''Parses a GRD file into a tree of nodes (from grit.node).
114 114
115 If flexible_root is False, the root node must be a <grit> element. Otherwise 115 If flexible_root is False, the root node must be a <grit> element. Otherwise
116 it can be any element. The "own" directory of the file will only be fixed up 116 it can be any element. The "own" directory of the file will only be fixed up
117 if the root node is a <grit> element. 117 if the root node is a <grit> element.
118 118
119 'dir' should point to the directory of the input file, or be the full path 119 'dir' should point to the directory of the input file, or be the full path
120 to the input file (the filename will be stripped). 120 to the input file (the filename will be stripped).
121 121
122 If 'stop_after' is provided, the parsing will stop once the first node 122 If 'stop_after' is provided, the parsing will stop once the first node
123 with this name has been fully parsed (including all its contents). 123 with this name has been fully parsed (including all its contents).
124 124
125 If 'debug' is true, lots of information about the parsing events will be 125 If 'debug' is true, lots of information about the parsing events will be
126 printed out during parsing of the file. 126 printed out during parsing of the file.
127 127
128 If first_id_filename is provided, then we use the provided path instead of 128 If 'first_ids_file' is non-empty, it is used to override the setting
129 resources_id to gather the first id values for resources. 129 for the first_ids_file attribute of the <grit> root node.
130 130
131 Args: 131 Args:
132 filename_or_stream: './bla.xml' (must be filename if dir is None) 132 filename_or_stream: './bla.xml' (must be filename if dir is None)
133 dir: '.' or None (only if filename_or_stream is a filename) 133 dir: '.' or None (only if filename_or_stream is a filename)
134 flexible_root: True | False 134 flexible_root: True | False
135 stop_after: 'inputs' 135 stop_after: 'inputs'
136 first_ids_file: 'GRIT_DIR/../gritsettings/resource_ids'
136 debug: False 137 debug: False
137 first_id_filename: None
138 defines: dictionary of defines, like {'chromeos': '1'} 138 defines: dictionary of defines, like {'chromeos': '1'}
139 139
140 Return: 140 Return:
141 Subclass of grit.node.base.Node 141 Subclass of grit.node.base.Node
142 142
143 Throws: 143 Throws:
144 grit.exception.Parsing 144 grit.exception.Parsing
145 ''' 145 '''
146 handler = GrdContentHandler(stop_after=stop_after, debug=debug, 146 handler = GrdContentHandler(stop_after=stop_after, debug=debug,
147 defines=defines, tags_to_ignore=tags_to_ignore) 147 defines=defines, tags_to_ignore=tags_to_ignore)
148 try: 148 try:
149 xml.sax.parse(filename_or_stream, handler) 149 xml.sax.parse(filename_or_stream, handler)
150 except StopParsingException: 150 except StopParsingException:
151 assert stop_after 151 assert stop_after
152 pass 152 pass
153 except: 153 except:
154 if not debug: 154 if not debug:
155 print "parse exception: run GRIT with the -x flag to debug .grd problems" 155 print "parse exception: run GRIT with the -x flag to debug .grd problems"
156 raise 156 raise
157 157
158 if not flexible_root or hasattr(handler.root, 'SetOwnDir'): 158 if not flexible_root or hasattr(handler.root, 'SetOwnDir'):
159 assert isinstance(filename_or_stream, types.StringType) or dir != None 159 assert isinstance(filename_or_stream, types.StringType) or dir != None
160 if not dir: 160 if not dir:
161 dir = util.dirname(filename_or_stream) 161 dir = util.dirname(filename_or_stream)
162 if len(dir) == 0: 162 if len(dir) == 0:
163 dir = '.' 163 dir = '.'
164 # Fix up the base_dir so it is relative to the input file. 164 # Fix up the base_dir so it is relative to the input file.
165 handler.root.SetOwnDir(dir) 165 handler.root.SetOwnDir(dir)
166 166
167 # Assign first ids to the nodes that don't have them. 167 if isinstance(handler.root, misc.GritNode):
168 if isinstance(handler.root, misc.GritNode) and first_id_filename != '': 168 if first_ids_file:
169 handler.root.AssignFirstIds(filename_or_stream, first_id_filename, defines) 169 handler.root.attrs['first_ids_file'] = first_ids_file
170 # Assign first ids to the nodes that don't have them.
171 handler.root.AssignFirstIds(filename_or_stream, defines)
170 172
171 return handler.root 173 return handler.root
172 174
173 175
174 if __name__ == '__main__': 176 if __name__ == '__main__':
175 util.ChangeStdoutEncoding() 177 util.ChangeStdoutEncoding()
176 print unicode(Parse(sys.argv[1])) 178 print unicode(Parse(sys.argv[1]))
OLDNEW
« no previous file with comments | « no previous file | grit/grd_reader_unittest.py » ('j') | grit/node/misc.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698