| Index: grit/gather/chrome_html.py
|
| ===================================================================
|
| --- grit/gather/chrome_html.py (revision 124)
|
| +++ grit/gather/chrome_html.py (working copy)
|
| @@ -48,7 +48,8 @@
|
| '<img[^>]+src=\"(?P<filename>[^">]*)\"[^>]*>')
|
|
|
| def GetImageList(
|
| - base_path, filename, scale_factors, distribution):
|
| + base_path, filename, scale_factors, distribution,
|
| + filename_expansion_function=None):
|
| """Generate the list of images which match the provided scale factors.
|
|
|
| Takes an image filename and checks for files of the same name in folders
|
| @@ -79,6 +80,8 @@
|
| return [('1x', filename)]
|
|
|
| filename = filename.replace(DIST_SUBSTR, distribution)
|
| + if filename_expansion_function:
|
| + filename = filename_expansion_function(filename)
|
| filepath = os.path.join(base_path, filename)
|
| images = [('1x', filename)]
|
|
|
| @@ -114,7 +117,8 @@
|
|
|
|
|
| def InsertImageSet(
|
| - src_match, base_path, scale_factors, distribution):
|
| + src_match, base_path, scale_factors, distribution,
|
| + filename_expansion_function=None):
|
| """Regex replace function which inserts -webkit-image-set.
|
|
|
| Takes a regex match for url('path'). If the file is local, checks for
|
| @@ -136,7 +140,9 @@
|
| quote = src_match.group('quote')
|
| filename = src_match.group('filename')
|
| attr = src_match.group('attribute')
|
| - image_list = GetImageList(base_path, filename, scale_factors, distribution)
|
| + image_list = GetImageList(
|
| + base_path, filename, scale_factors, distribution,
|
| + filename_expansion_function=filename_expansion_function)
|
|
|
| # Don't modify the source if there is only one image.
|
| if len(image_list) == 1:
|
| @@ -146,14 +152,17 @@
|
|
|
|
|
| def InsertImageStyle(
|
| - src_match, base_path, scale_factors, distribution):
|
| + src_match, base_path, scale_factors, distribution,
|
| + filename_expansion_function=None):
|
| """Regex replace function which adds a content style to an <img>.
|
|
|
| Takes a regex match from _HTML_IMAGE_SRC and replaces the attribute with a CSS
|
| style which defines the image set.
|
| """
|
| filename = src_match.group('filename')
|
| - image_list = GetImageList(base_path, filename, scale_factors, distribution)
|
| + image_list = GetImageList(
|
| + base_path, filename, scale_factors, distribution,
|
| + filename_expansion_function=filename_expansion_function)
|
|
|
| # Don't modify the source if there is only one image or image already defines
|
| # a style.
|
| @@ -165,16 +174,21 @@
|
|
|
|
|
| def InsertImageSets(
|
| - filepath, text, scale_factors, distribution):
|
| + filepath, text, scale_factors, distribution,
|
| + filename_expansion_function=None):
|
| """Helper function that adds references to external images available in any of
|
| scale_factors in CSS backgrounds.
|
| """
|
| # Add high DPI urls for css attributes: content, background,
|
| # or *-image or <img src="foo">.
|
| return _CSS_IMAGE_URLS.sub(
|
| - lambda m: InsertImageSet(m, filepath, scale_factors, distribution),
|
| + lambda m: InsertImageSet(
|
| + m, filepath, scale_factors, distribution,
|
| + filename_expansion_function=filename_expansion_function),
|
| _HTML_IMAGE_SRC.sub(
|
| - lambda m: InsertImageStyle(m, filepath, scale_factors, distribution),
|
| + lambda m: InsertImageStyle(
|
| + m, filepath, scale_factors, distribution,
|
| + filename_expansion_function=filename_expansion_function),
|
| text)).decode('utf-8').encode('utf-8')
|
|
|
|
|
| @@ -208,17 +222,20 @@
|
|
|
|
|
| def ProcessImageSets(
|
| - filepath, text, scale_factors, distribution):
|
| + filepath, text, scale_factors, distribution,
|
| + filename_expansion_function=None):
|
| """Helper function that adds references to external images available in other
|
| scale_factors and removes images from image-sets in unsupported scale_factors.
|
| """
|
| # Explicitly add 1x to supported scale factors so that it is not removed.
|
| supported_scale_factors = ['1x']
|
| supported_scale_factors.extend(scale_factors)
|
| - return InsertImageSets(filepath,
|
| - RemoveImageSetImages(text, supported_scale_factors),
|
| - scale_factors,
|
| - distribution)
|
| + return InsertImageSets(
|
| + filepath,
|
| + RemoveImageSetImages(text, supported_scale_factors),
|
| + scale_factors,
|
| + distribution,
|
| + filename_expansion_function=filename_expansion_function)
|
|
|
|
|
| class ChromeHtml(interface.GathererBase):
|
| @@ -238,6 +255,7 @@
|
| # 1x resources are implicitly already in the source and do not need to be
|
| # added.
|
| self.scale_factors_ = []
|
| + self.filename_expansion_function = None
|
|
|
| def SetAttributes(self, attrs):
|
| self.allow_external_script_ = ('allowexternalscript' in attrs and
|
| @@ -267,7 +285,9 @@
|
| self.grd_node.ToRealPath(self.GetInputPath()),
|
| allow_external_script=self.allow_external_script_,
|
| rewrite_function=lambda fp, t, d: ProcessImageSets(
|
| - fp, t, self.scale_factors_, d))
|
| + fp, t, self.scale_factors_, d,
|
| + filename_expansion_function=self.filename_expansion_function),
|
| + filename_expansion_function=self.filename_expansion_function)
|
| return []
|
|
|
| def Translate(self, lang, pseudo_if_not_available=True,
|
| @@ -275,10 +295,15 @@
|
| """Returns this document translated."""
|
| return self.inlined_text_
|
|
|
| + def SetFilenameExpansionFunction(self, fn):
|
| + self.filename_expansion_function = fn
|
| +
|
| def Parse(self):
|
| """Parses and inlines the represented file."""
|
|
|
| filename = self.GetInputPath()
|
| + if self.filename_expansion_function:
|
| + filename = self.filename_expansion_function(filename)
|
| # Hack: some unit tests supply an absolute path and no root node.
|
| if not os.path.isabs(filename):
|
| filename = self.grd_node.ToRealPath(filename)
|
| @@ -288,11 +313,14 @@
|
| self.grd_node,
|
| allow_external_script = self.allow_external_script_,
|
| rewrite_function=lambda fp, t, d: ProcessImageSets(
|
| - fp, t, self.scale_factors_, d))
|
| + fp, t, self.scale_factors_, d,
|
| + filename_expansion_function=self.filename_expansion_function),
|
| + filename_expansion_function=self.filename_expansion_function)
|
| else:
|
| distribution = html_inline.GetDistribution()
|
| self.inlined_text_ = ProcessImageSets(
|
| os.path.dirname(filename),
|
| util.ReadFile(filename, 'utf-8'),
|
| self.scale_factors_,
|
| - distribution)
|
| + distribution,
|
| + filename_expansion_function=self.filename_expansion_function)
|
|
|