| Index: grit/format/html_inline.py
|
| diff --git a/grit/format/html_inline.py b/grit/format/html_inline.py
|
| index f1e6bd4dc5f9012197e6df10969c64e1a93e3e6d..6aea5f71a1cc94c2d99a2e7c2f31a619ea0684c8 100755
|
| --- a/grit/format/html_inline.py
|
| +++ b/grit/format/html_inline.py
|
| @@ -74,7 +74,7 @@ def SrcInlineAsDataURL(
|
| return src_match.group(0)
|
|
|
| filename = filename.replace(DIST_SUBSTR , distribution)
|
| - filepath = os.path.join(base_path, filename)
|
| + filepath = os.path.normpath(os.path.join(base_path, filename))
|
| inlined_files.add(filepath)
|
|
|
| if names_only:
|
| @@ -129,7 +129,7 @@ def DoInline(
|
| return SrcInlineAsDataURL(
|
| src_match, filepath, distribution, inlined_files, names_only=names_only)
|
|
|
| - def GetFilepath(src_match):
|
| + def GetFilepath(src_match, base_path = input_filepath):
|
| filename = src_match.group('filename')
|
|
|
| if filename.find(':') != -1:
|
| @@ -137,7 +137,7 @@ def DoInline(
|
| return None
|
|
|
| filename = filename.replace('%DISTRIBUTION%', distribution)
|
| - return os.path.join(input_filepath, filename)
|
| + return os.path.normpath(os.path.join(base_path, filename))
|
|
|
| def IsConditionSatisfied(src_match):
|
| expression = src_match.group('expression')
|
| @@ -217,16 +217,18 @@ def DoInline(
|
| text = InlineCSSImages(text, filepath)
|
| return InlineCSSImports(text, filepath)
|
|
|
| - def InlineCSSFile(src_match, inlined_files=inlined_files):
|
| - """Helper function to inline external css files.
|
| + def InlineCSSFile(src_match, pattern, base_path=input_filepath):
|
| + """Helper function to inline external CSS files.
|
|
|
| Args:
|
| src_match: A regular expression match with a named group named "filename".
|
| + pattern: The pattern to replace with the contents of the CSS file.
|
| + base_path: The base path to use for resolving the CSS file.
|
|
|
| Returns:
|
| The text that should replace the reference to the CSS file.
|
| """
|
| - filepath = GetFilepath(src_match)
|
| + filepath = GetFilepath(src_match, base_path)
|
| if filepath is None:
|
| return src_match.group(0)
|
|
|
| @@ -235,7 +237,8 @@ def DoInline(
|
| inlined_files.add(filepath)
|
| # When resolving CSS files we need to pass in the path so that relative URLs
|
| # can be resolved.
|
| - return InlineCSSText(util.ReadFile(filepath, util.BINARY), filepath)
|
| + return pattern % InlineCSSText(util.ReadFile(filepath, util.BINARY),
|
| + filepath)
|
|
|
| def InlineCSSImages(text, filepath=input_filepath):
|
| """Helper function that inlines external images in CSS backgrounds."""
|
| @@ -261,8 +264,8 @@ def DoInline(
|
| directive.
|
| """
|
| return re.sub('@import\s+url\((?P<quote>"|\'|)(?P<filename>[^"\'()]*)' +
|
| - '(?P=quote)\)',
|
| - InlineCSSFile,
|
| + '(?P=quote)\);',
|
| + lambda m: InlineCSSFile(m, '%s', filepath),
|
| text)
|
|
|
|
|
| @@ -284,7 +287,7 @@ def DoInline(
|
|
|
| flat_text = re.sub(
|
| '<link rel="stylesheet".+?href="(?P<filename>[^"]*)".*?>',
|
| - lambda m: '<style>%s</style>' % InlineCSSFile(m),
|
| + lambda m: InlineCSSFile(m, '<style>%s</style>'),
|
| flat_text)
|
|
|
| flat_text = re.sub(
|
| @@ -326,10 +329,14 @@ def InlineToString(input_filename, grd_node, allow_external_script=False,
|
| Returns:
|
| the inlined data as a string
|
| """
|
| - return DoInline(input_filename,
|
| - grd_node,
|
| - allow_external_script=allow_external_script,
|
| - rewrite_function=rewrite_function).inlined_data
|
| + try:
|
| + return DoInline(input_filename,
|
| + grd_node,
|
| + allow_external_script=allow_external_script,
|
| + rewrite_function=rewrite_function).inlined_data
|
| + except IOError, e:
|
| + raise Exception("Failed to open %s while trying to flatten %s. (%s)" %
|
| + (e.filename, input_filename, e.strerror))
|
|
|
|
|
| def InlineToFile(input_filename, output_filename, grd_node):
|
|
|