diff options
author | Konstantin Tokarev <annulen@yandex.ru> | 2016-08-25 19:20:41 +0300 |
---|---|---|
committer | Konstantin Tokarev <annulen@yandex.ru> | 2017-02-02 12:30:55 +0000 |
commit | 6882a04fb36642862b11efe514251d32070c3d65 (patch) | |
tree | b7959826000b061fd5ccc7512035c7478742f7b0 /Source/JavaScriptCore/Scripts/inline-and-minify-stylesheets-and-scripts.py | |
parent | ab6df191029eeeb0b0f16f127d553265659f739e (diff) | |
download | qtwebkit-6882a04fb36642862b11efe514251d32070c3d65.tar.gz |
Imported QtWebKit TP3 (git b57bc6801f1876c3220d5a4bfea33d620d477443)
Change-Id: I3b1d8a2808782c9f34d50240000e20cb38d3680f
Reviewed-by: Konstantin Tokarev <annulen@yandex.ru>
Diffstat (limited to 'Source/JavaScriptCore/Scripts/inline-and-minify-stylesheets-and-scripts.py')
-rwxr-xr-x | Source/JavaScriptCore/Scripts/inline-and-minify-stylesheets-and-scripts.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/Source/JavaScriptCore/Scripts/inline-and-minify-stylesheets-and-scripts.py b/Source/JavaScriptCore/Scripts/inline-and-minify-stylesheets-and-scripts.py new file mode 100755 index 000000000..89200c84e --- /dev/null +++ b/Source/JavaScriptCore/Scripts/inline-and-minify-stylesheets-and-scripts.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python +# +# Copyright (C) 2013 Apple Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +# THE POSSIBILITY OF SUCH DAMAGE. + +# This script inlines and minifies external stylesheets and scripts. +# - <link href="..." rel="stylesheet"> => <style>...</style> +# - <script src="..."> => <script>...</script> + +import cssmin +import jsmin +import os.path +import re +import sys + + +def main(argv): + + if len(argv) < 2: + print('usage: %s inputFile outputFile' % argv[0]) + return 1 + + inputFileName = argv[1] + outputFileName = argv[2] + importsDir = os.path.dirname(inputFileName) + + inputFile = open(inputFileName, 'r') + inputContent = inputFile.read() + inputFile.close() + + def inline(match, minifier, prefix, postfix): + importFileName = match.group(1) + fullPath = os.path.join(importsDir, importFileName) + if not os.access(fullPath, os.F_OK): + raise Exception('File %s referenced in %s not found' % (importFileName, inputFileName)) + importFile = open(fullPath, 'r') + importContent = minifier(importFile.read()) + importFile.close() + return '%s%s%s' % (prefix, importContent, postfix) + + def inlineStylesheet(match): + return inline(match, cssmin.cssminify, "<style>", "</style>") + + def inlineScript(match): + return inline(match, jsmin.jsmin, "<script>", "</script>") + + outputContent = re.sub(r'<link rel="stylesheet" href=[\'"]([^\'"]+)[\'"]>', inlineStylesheet, inputContent) + outputContent = re.sub(r'<script src=[\'"]([^\'"]+)[\'"]></script>', inlineScript, outputContent) + + outputFile = open(outputFileName, 'w') + outputFile.write(outputContent) + outputFile.close() + + # Touch output file directory to make sure that Xcode will copy + # modified resource files. + if sys.platform == 'darwin': + outputDirName = os.path.dirname(outputFileName) + os.utime(outputDirName, None) + +if __name__ == '__main__': + sys.exit(main(sys.argv)) |