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

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

Issue 1442863002: Remove contents of grit's SVN repository. (Closed) Base URL: http://grit-i18n.googlecode.com/svn/trunk/
Patch Set: Created 5 years, 1 month 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/empty.py ('k') | grit/node/include_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
(Empty)
1 #!/usr/bin/env python
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
4 # found in the LICENSE file.
5
6 """Handling of the <include> element.
7 """
8
9 import os
10
11 import grit.format.html_inline
12 import grit.format.rc_header
13 import grit.format.rc
14
15 from grit.node import base
16 from grit import util
17
18 class IncludeNode(base.Node):
19 """An <include> element."""
20 def __init__(self):
21 super(IncludeNode, self).__init__()
22
23 # Cache flattened data so that we don't flatten the same file
24 # multiple times.
25 self._flattened_data = None
26 # Also keep track of the last filename we flattened to, so we can
27 # avoid doing it more than once.
28 self._last_flat_filename = None
29
30 def _IsValidChild(self, child):
31 return False
32
33 def _GetFlattenedData(self, allow_external_script=False):
34 if not self._flattened_data:
35 filename = self.ToRealPath(self.GetInputPath())
36 self._flattened_data = (
37 grit.format.html_inline.InlineToString(filename, self,
38 allow_external_script=allow_external_script))
39 return self._flattened_data
40
41 def MandatoryAttributes(self):
42 return ['name', 'type', 'file']
43
44 def DefaultAttributes(self):
45 return {'translateable' : 'true',
46 'generateid': 'true',
47 'filenameonly': 'false',
48 'mkoutput': 'false',
49 'flattenhtml': 'false',
50 'allowexternalscript': 'false',
51 'relativepath': 'false',
52 'use_base_dir': 'true',
53 }
54
55 def GetInputPath(self):
56 # Do not mess with absolute paths, that would make them invalid.
57 if os.path.isabs(os.path.expandvars(self.attrs['file'])):
58 return self.attrs['file']
59
60 # We have no control over code that calles ToRealPath later, so convert
61 # the path to be relative against our basedir.
62 if self.attrs.get('use_base_dir', 'true') != 'true':
63 return os.path.relpath(self.attrs['file'], self.GetRoot().GetBaseDir())
64
65 return self.attrs['file']
66
67 def FileForLanguage(self, lang, output_dir):
68 """Returns the file for the specified language. This allows us to return
69 different files for different language variants of the include file.
70 """
71 input_path = self.GetInputPath()
72 if input_path is None:
73 return None
74
75 return self.ToRealPath(input_path)
76
77 def GetDataPackPair(self, lang, encoding):
78 """Returns a (id, string) pair that represents the resource id and raw
79 bytes of the data. This is used to generate the data pack data file.
80 """
81 # TODO(benrg/joi): Move this and other implementations of GetDataPackPair
82 # to grit.format.data_pack?
83 from grit.format import rc_header
84 id_map = rc_header.GetIds(self.GetRoot())
85 id = id_map[self.GetTextualIds()[0]]
86 if self.attrs['flattenhtml'] == 'true':
87 allow_external_script = self.attrs['allowexternalscript'] == 'true'
88 data = self._GetFlattenedData(allow_external_script=allow_external_script)
89 else:
90 filename = self.ToRealPath(self.GetInputPath())
91 data = util.ReadFile(filename, util.BINARY)
92
93 # Include does not care about the encoding, because it only returns binary
94 # data.
95 return id, data
96
97 def Process(self, output_dir):
98 """Rewrite file references to be base64 encoded data URLs. The new file
99 will be written to output_dir and the name of the new file is returned."""
100 filename = self.ToRealPath(self.GetInputPath())
101 flat_filename = os.path.join(output_dir,
102 self.attrs['name'] + '_' + os.path.basename(filename))
103
104 if self._last_flat_filename == flat_filename:
105 return
106
107 with open(flat_filename, 'wb') as outfile:
108 outfile.write(self._GetFlattenedData())
109
110 self._last_flat_filename = flat_filename
111 return os.path.basename(flat_filename)
112
113 def GetHtmlResourceFilenames(self):
114 """Returns a set of all filenames inlined by this file."""
115 allow_external_script = self.attrs['allowexternalscript'] == 'true'
116 return grit.format.html_inline.GetResourceFilenames(
117 self.ToRealPath(self.GetInputPath()),
118 allow_external_script=allow_external_script)
119
120 def IsResourceMapSource(self):
121 return True
122
123 def GeneratesResourceMapEntry(self, output_all_resource_defines,
124 is_active_descendant):
125 # includes always generate resource entries.
126 if output_all_resource_defines:
127 return True
128 return is_active_descendant
129
130 @staticmethod
131 def Construct(parent, name, type, file, translateable=True,
132 filenameonly=False, mkoutput=False, relativepath=False):
133 """Creates a new node which is a child of 'parent', with attributes set
134 by parameters of the same name.
135 """
136 # Convert types to appropriate strings
137 translateable = util.BoolToString(translateable)
138 filenameonly = util.BoolToString(filenameonly)
139 mkoutput = util.BoolToString(mkoutput)
140 relativepath = util.BoolToString(relativepath)
141
142 node = IncludeNode()
143 node.StartParsing('include', parent)
144 node.HandleAttribute('name', name)
145 node.HandleAttribute('type', type)
146 node.HandleAttribute('file', file)
147 node.HandleAttribute('translateable', translateable)
148 node.HandleAttribute('filenameonly', filenameonly)
149 node.HandleAttribute('mkoutput', mkoutput)
150 node.HandleAttribute('relativepath', relativepath)
151 node.EndParsing()
152 return node
OLDNEW
« no previous file with comments | « grit/node/empty.py ('k') | grit/node/include_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698