| Index: tracing/third_party/tvcm/third_party/rjsmin/rjsmin.py
|
| diff --git a/tracing/third_party/tvcm/third_party/rjsmin/rjsmin.py b/tracing/third_party/tvcm/third_party/rjsmin/rjsmin.py
|
| deleted file mode 100755
|
| index e7854798a3a83866b1471d10484fcb4112170458..0000000000000000000000000000000000000000
|
| --- a/tracing/third_party/tvcm/third_party/rjsmin/rjsmin.py
|
| +++ /dev/null
|
| @@ -1,446 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# -*- coding: ascii -*-
|
| -r"""
|
| -=====================
|
| - Javascript Minifier
|
| -=====================
|
| -
|
| -rJSmin is a javascript minifier written in python.
|
| -
|
| -The minifier is based on the semantics of `jsmin.c by Douglas Crockford`_\\.
|
| -
|
| -:Copyright:
|
| -
|
| - Copyright 2011 - 2014
|
| - Andr\xe9 Malo or his licensors, as applicable
|
| -
|
| -:License:
|
| -
|
| - Licensed under the Apache License, Version 2.0 (the "License");
|
| - you may not use this file except in compliance with the License.
|
| - You may obtain a copy of the License at
|
| -
|
| - http://www.apache.org/licenses/LICENSE-2.0
|
| -
|
| - Unless required by applicable law or agreed to in writing, software
|
| - distributed under the License is distributed on an "AS IS" BASIS,
|
| - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| - See the License for the specific language governing permissions and
|
| - limitations under the License.
|
| -
|
| -The module is a re-implementation aiming for speed, so it can be used at
|
| -runtime (rather than during a preprocessing step). Usually it produces the
|
| -same results as the original ``jsmin.c``. It differs in the following ways:
|
| -
|
| -- there is no error detection: unterminated string, regex and comment
|
| - literals are treated as regular javascript code and minified as such.
|
| -- Control characters inside string and regex literals are left untouched; they
|
| - are not converted to spaces (nor to \\n)
|
| -- Newline characters are not allowed inside string and regex literals, except
|
| - for line continuations in string literals (ECMA-5).
|
| -- "return /regex/" is recognized correctly.
|
| -- "+ +" and "- -" sequences are not collapsed to '++' or '--'
|
| -- Newlines before ! operators are removed more sensibly
|
| -- Comments starting with an exclamation mark (``!``) can be kept optionally
|
| -- rJSmin does not handle streams, but only complete strings. (However, the
|
| - module provides a "streamy" interface).
|
| -
|
| -Since most parts of the logic are handled by the regex engine it's way faster
|
| -than the original python port of ``jsmin.c`` by Baruch Even. The speed factor
|
| -varies between about 6 and 55 depending on input and python version (it gets
|
| -faster the more compressed the input already is). Compared to the
|
| -speed-refactored python port by Dave St.Germain the performance gain is less
|
| -dramatic but still between 3 and 50 (for huge inputs). See the docs/BENCHMARKS
|
| -file for details.
|
| -
|
| -rjsmin.c is a reimplementation of rjsmin.py in C and speeds it up even more.
|
| -
|
| -Both python 2 and python 3 are supported.
|
| -
|
| -.. _jsmin.c by Douglas Crockford:
|
| - http://www.crockford.com/javascript/jsmin.c
|
| -"""
|
| -if __doc__:
|
| - # pylint: disable = W0622
|
| - __doc__ = __doc__.encode('ascii').decode('unicode_escape')
|
| -__author__ = r"Andr\xe9 Malo".encode('ascii').decode('unicode_escape')
|
| -__docformat__ = "restructuredtext en"
|
| -__license__ = "Apache License, Version 2.0"
|
| -__version__ = '1.0.10'
|
| -__all__ = ['jsmin']
|
| -
|
| -import re as _re
|
| -
|
| -
|
| -def _make_jsmin(python_only=False):
|
| - """
|
| - Generate JS minifier based on `jsmin.c by Douglas Crockford`_
|
| -
|
| - .. _jsmin.c by Douglas Crockford:
|
| - http://www.crockford.com/javascript/jsmin.c
|
| -
|
| - :Parameters:
|
| - `python_only` : ``bool``
|
| - Use only the python variant. If true, the c extension is not even
|
| - tried to be loaded.
|
| -
|
| - :Return: Minifier
|
| - :Rtype: ``callable``
|
| - """
|
| - # pylint: disable = R0912, R0914, W0612
|
| -
|
| - if not python_only:
|
| - try:
|
| - import _rjsmin # pylint: disable = F0401
|
| - except ImportError:
|
| - pass
|
| - else:
|
| - return _rjsmin.jsmin
|
| - try:
|
| - xrange
|
| - except NameError:
|
| - xrange = range # pylint: disable = W0622
|
| -
|
| - space_chars = r'[\000-\011\013\014\016-\040]'
|
| -
|
| - line_comment = r'(?://[^\r\n]*)'
|
| - space_comment = r'(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)'
|
| - space_comment_nobang = r'(?:/\*(?!!)[^*]*\*+(?:[^/*][^*]*\*+)*/)'
|
| - bang_comment = r'(?:/\*![^*]*\*+(?:[^/*][^*]*\*+)*/)'
|
| -
|
| - string1 = \
|
| - r'(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]|\r?\n|\r)[^\047\\\r\n]*)*\047)'
|
| - string2 = r'(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]|\r?\n|\r)[^"\\\r\n]*)*")'
|
| - strings = r'(?:%s|%s)' % (string1, string2)
|
| -
|
| - charclass = r'(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\])'
|
| - nospecial = r'[^/\\\[\r\n]'
|
| - regex = r'(?:/(?![\r\n/*])%s*(?:(?:\\[^\r\n]|%s)%s*)*/)' % (
|
| - nospecial, charclass, nospecial
|
| - )
|
| - space = r'(?:%s|%s)' % (space_chars, space_comment)
|
| - space_nobang = r'(?:%s|%s)' % (space_chars, space_comment_nobang)
|
| - newline = r'(?:%s?[\r\n])' % line_comment
|
| -
|
| - def fix_charclass(result):
|
| - """ Fixup string of chars to fit into a regex char class """
|
| - pos = result.find('-')
|
| - if pos >= 0:
|
| - result = r'%s%s-' % (result[:pos], result[pos + 1:])
|
| -
|
| - def sequentize(string):
|
| - """
|
| - Notate consecutive characters as sequence
|
| -
|
| - (1-4 instead of 1234)
|
| - """
|
| - first, last, result = None, None, []
|
| - for char in map(ord, string):
|
| - if last is None:
|
| - first = last = char
|
| - elif last + 1 == char:
|
| - last = char
|
| - else:
|
| - result.append((first, last))
|
| - first = last = char
|
| - if last is not None:
|
| - result.append((first, last))
|
| - return ''.join(['%s%s%s' % (
|
| - chr(first),
|
| - last > first + 1 and '-' or '',
|
| - last != first and chr(last) or ''
|
| - ) for first, last in result])
|
| -
|
| - return _re.sub(
|
| - r'([\000-\040\047])', # \047 for better portability
|
| - lambda m: '\\%03o' % ord(m.group(1)), (
|
| - sequentize(result)
|
| - .replace('\\', '\\\\')
|
| - .replace('[', '\\[')
|
| - .replace(']', '\\]')
|
| - )
|
| - )
|
| -
|
| - def id_literal_(what):
|
| - """ Make id_literal like char class """
|
| - match = _re.compile(what).match
|
| - result = ''.join([
|
| - chr(c) for c in xrange(127) if not match(chr(c))
|
| - ])
|
| - return '[^%s]' % fix_charclass(result)
|
| -
|
| - def not_id_literal_(keep):
|
| - """ Make negated id_literal like char class """
|
| - match = _re.compile(id_literal_(keep)).match
|
| - result = ''.join([
|
| - chr(c) for c in xrange(127) if not match(chr(c))
|
| - ])
|
| - return r'[%s]' % fix_charclass(result)
|
| -
|
| - not_id_literal = not_id_literal_(r'[a-zA-Z0-9_$]')
|
| - preregex1 = r'[(,=:\[!&|?{};\r\n]'
|
| - preregex2 = r'%(not_id_literal)sreturn' % locals()
|
| -
|
| - id_literal = id_literal_(r'[a-zA-Z0-9_$]')
|
| - id_literal_open = id_literal_(r'[a-zA-Z0-9_${\[(!+-]')
|
| - id_literal_close = id_literal_(r'[a-zA-Z0-9_$}\])"\047+-]')
|
| -
|
| - dull = r'[^\047"/\000-\040]'
|
| -
|
| - space_sub_simple = _re.compile((
|
| - # noqa pylint: disable = C0330
|
| -
|
| - r'(%(dull)s+)'
|
| - r'|(%(strings)s%(dull)s*)'
|
| - r'|(?<=%(preregex1)s)'
|
| - r'%(space)s*(?:%(newline)s%(space)s*)*'
|
| - r'(%(regex)s%(dull)s*)'
|
| - r'|(?<=%(preregex2)s)'
|
| - r'%(space)s*(?:%(newline)s%(space)s)*'
|
| - r'(%(regex)s%(dull)s*)'
|
| - r'|(?<=%(id_literal_close)s)'
|
| - r'%(space)s*(?:(%(newline)s)%(space)s*)+'
|
| - r'(?=%(id_literal_open)s)'
|
| - r'|(?<=%(id_literal)s)(%(space)s)+(?=%(id_literal)s)'
|
| - r'|(?<=\+)(%(space)s)+(?=\+)'
|
| - r'|(?<=-)(%(space)s)+(?=-)'
|
| - r'|%(space)s+'
|
| - r'|(?:%(newline)s%(space)s*)+'
|
| - ) % locals()).sub
|
| - #print space_sub_simple.__self__.pattern
|
| -
|
| - def space_subber_simple(match):
|
| - """ Substitution callback """
|
| - # pylint: disable = R0911
|
| -
|
| - groups = match.groups()
|
| - if groups[0]:
|
| - return groups[0]
|
| - elif groups[1]:
|
| - return groups[1]
|
| - elif groups[2]:
|
| - return groups[2]
|
| - elif groups[3]:
|
| - return groups[3]
|
| - elif groups[4]:
|
| - return '\n'
|
| - elif groups[5] or groups[6] or groups[7]:
|
| - return ' '
|
| - else:
|
| - return ''
|
| -
|
| - space_sub_banged = _re.compile((
|
| - # noqa pylint: disable = C0330
|
| -
|
| - r'(%(dull)s+)'
|
| - r'|(%(strings)s%(dull)s*)'
|
| - r'|(%(bang_comment)s%(dull)s*)'
|
| - r'|(?<=%(preregex1)s)'
|
| - r'%(space)s*(?:%(newline)s%(space)s*)*'
|
| - r'(%(regex)s%(dull)s*)'
|
| - r'|(?<=%(preregex2)s)'
|
| - r'%(space)s*(?:%(newline)s%(space)s)*'
|
| - r'(%(regex)s%(dull)s*)'
|
| - r'|(?<=%(id_literal_close)s)'
|
| - r'%(space)s*(?:(%(newline)s)%(space)s*)+'
|
| - r'(?=%(id_literal_open)s)'
|
| - r'|(?<=%(id_literal)s)(%(space)s)+(?=%(id_literal)s)'
|
| - r'|(?<=\+)(%(space)s)+(?=\+)'
|
| - r'|(?<=-)(%(space)s)+(?=-)'
|
| - r'|%(space)s+'
|
| - r'|(?:%(newline)s%(space)s*)+'
|
| - ) % dict(locals(), space=space_nobang)).sub
|
| - #print space_sub_banged.__self__.pattern
|
| -
|
| - def space_subber_banged(match):
|
| - """ Substitution callback """
|
| - # pylint: disable = R0911
|
| -
|
| - groups = match.groups()
|
| - if groups[0]:
|
| - return groups[0]
|
| - elif groups[1]:
|
| - return groups[1]
|
| - elif groups[2]:
|
| - return groups[2]
|
| - elif groups[3]:
|
| - return groups[3]
|
| - elif groups[4]:
|
| - return groups[4]
|
| - elif groups[5]:
|
| - return '\n'
|
| - elif groups[6] or groups[7] or groups[8]:
|
| - return ' '
|
| - else:
|
| - return ''
|
| -
|
| - def jsmin(script, keep_bang_comments=False): # pylint: disable = W0621
|
| - r"""
|
| - Minify javascript based on `jsmin.c by Douglas Crockford`_\.
|
| -
|
| - Instead of parsing the stream char by char, it uses a regular
|
| - expression approach which minifies the whole script with one big
|
| - substitution regex.
|
| -
|
| - .. _jsmin.c by Douglas Crockford:
|
| - http://www.crockford.com/javascript/jsmin.c
|
| -
|
| - :Parameters:
|
| - `script` : ``str``
|
| - Script to minify
|
| -
|
| - `keep_bang_comments` : ``bool``
|
| - Keep comments starting with an exclamation mark? (``/*!...*/``)
|
| -
|
| - :Return: Minified script
|
| - :Rtype: ``str``
|
| - """
|
| - if keep_bang_comments:
|
| - return space_sub_banged(
|
| - space_subber_banged, '\n%s\n' % script
|
| - ).strip()
|
| - else:
|
| - return space_sub_simple(
|
| - space_subber_simple, '\n%s\n' % script
|
| - ).strip()
|
| -
|
| - return jsmin
|
| -
|
| -jsmin = _make_jsmin()
|
| -
|
| -
|
| -def jsmin_for_posers(script, keep_bang_comments=False):
|
| - r"""
|
| - Minify javascript based on `jsmin.c by Douglas Crockford`_\.
|
| -
|
| - Instead of parsing the stream char by char, it uses a regular
|
| - expression approach which minifies the whole script with one big
|
| - substitution regex.
|
| -
|
| - .. _jsmin.c by Douglas Crockford:
|
| - http://www.crockford.com/javascript/jsmin.c
|
| -
|
| - :Warning: This function is the digest of a _make_jsmin() call. It just
|
| - utilizes the resulting regexes. It's here for fun and may
|
| - vanish any time. Use the `jsmin` function instead.
|
| -
|
| - :Parameters:
|
| - `script` : ``str``
|
| - Script to minify
|
| -
|
| - `keep_bang_comments` : ``bool``
|
| - Keep comments starting with an exclamation mark? (``/*!...*/``)
|
| -
|
| - :Return: Minified script
|
| - :Rtype: ``str``
|
| - """
|
| - if not keep_bang_comments:
|
| - rex = (
|
| - r'([^\047"/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]'
|
| - r'|\r?\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]'
|
| - r'|\r?\n|\r)[^"\\\r\n]*)*"))[^\047"/\000-\040]*)|(?<=[(,=:\[!&|?'
|
| - r'{};\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*'
|
| - r'][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\0'
|
| - r'14\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*((?:/(?![\r'
|
| - r'\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r'
|
| - r'\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/)[^\047"/\000-\040]*)|(?<'
|
| - r'=[\000-#%-,./:-@\[-^`{-~-]return)(?:[\000-\011\013\014\016-\04'
|
| - r'0]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?['
|
| - r'\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^'
|
| - r'*]*\*+)*/)))*((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:'
|
| - r'\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/)['
|
| - r'^\047"/\000-\040]*)|(?<=[^\000-!#%&(*,./:-@\[\\^`{|~])(?:[\000'
|
| - r'-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?'
|
| - r':((?:(?://[^\r\n]*)?[\r\n]))(?:[\000-\011\013\014\016-\040]|(?'
|
| - r':/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040"#%-\047)*,.'
|
| - r'/:-@\\-^`|-~])|(?<=[^\000-#%-,./:-@\[-^`{-~-])((?:[\000-\011\0'
|
| - r'13\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=[^\00'
|
| - r'0-#%-,./:-@\[-^`{-~-])|(?<=\+)((?:[\000-\011\013\014\016-\040]'
|
| - r'|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=\+)|(?<=-)((?:[\000-'
|
| - r'\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?'
|
| - r'=-)|(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]'
|
| - r'*\*+)*/))+|(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\0'
|
| - r'16-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+'
|
| - )
|
| -
|
| - def subber(match):
|
| - """ Substitution callback """
|
| - groups = match.groups()
|
| - return (
|
| - groups[0] or
|
| - groups[1] or
|
| - groups[2] or
|
| - groups[3] or
|
| - (groups[4] and '\n') or
|
| - (groups[5] and ' ') or
|
| - (groups[6] and ' ') or
|
| - (groups[7] and ' ') or
|
| - ''
|
| - )
|
| - else:
|
| - rex = (
|
| - r'([^\047"/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]'
|
| - r'|\r?\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]'
|
| - r'|\r?\n|\r)[^"\\\r\n]*)*"))[^\047"/\000-\040]*)|((?:/\*![^*]*\*'
|
| - r'+(?:[^/*][^*]*\*+)*/)[^\047"/\000-\040]*)|(?<=[(,=:\[!&|?{};\r'
|
| - r'\n])(?:[\000-\011\013\014\016-\040]|(?:/\*(?!!)[^*]*\*+(?:[^/*'
|
| - r'][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\0'
|
| - r'14\016-\040]|(?:/\*(?!!)[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*((?:/('
|
| - r'?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:'
|
| - r'\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/)[^\047"/\000-\040]'
|
| - r'*)|(?<=[\000-#%-,./:-@\[-^`{-~-]return)(?:[\000-\011\013\014\0'
|
| - r'16-\040]|(?:/\*(?!!)[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://['
|
| - r'^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*(?!!)[^*'
|
| - r']*\*+(?:[^/*][^*]*\*+)*/)))*((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:('
|
| - r'?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/'
|
| - r'\\\[\r\n]*)*/)[^\047"/\000-\040]*)|(?<=[^\000-!#%&(*,./:-@\[\\'
|
| - r'^`{|~])(?:[\000-\011\013\014\016-\040]|(?:/\*(?!!)[^*]*\*+(?:['
|
| - r'^/*][^*]*\*+)*/))*(?:((?:(?://[^\r\n]*)?[\r\n]))(?:[\000-\011'
|
| - r'\013\014\016-\040]|(?:/\*(?!!)[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+'
|
| - r'(?=[^\000-\040"#%-\047)*,./:-@\\-^`|-~])|(?<=[^\000-#%-,./:-@'
|
| - r'\[-^`{-~-])((?:[\000-\011\013\014\016-\040]|(?:/\*(?!!)[^*]*\*'
|
| - r'+(?:[^/*][^*]*\*+)*/)))+(?=[^\000-#%-,./:-@\[-^`{-~-])|(?<=\+)'
|
| - r'((?:[\000-\011\013\014\016-\040]|(?:/\*(?!!)[^*]*\*+(?:[^/*][^'
|
| - r'*]*\*+)*/)))+(?=\+)|(?<=-)((?:[\000-\011\013\014\016-\040]|(?:'
|
| - r'/\*(?!!)[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=-)|(?:[\000-\011\013'
|
| - r'\014\016-\040]|(?:/\*(?!!)[^*]*\*+(?:[^/*][^*]*\*+)*/))+|(?:(?'
|
| - r':(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*('
|
| - r'?!!)[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+'
|
| - )
|
| -
|
| - def subber(match):
|
| - """ Substitution callback """
|
| - groups = match.groups()
|
| - return (
|
| - groups[0] or
|
| - groups[1] or
|
| - groups[2] or
|
| - groups[3] or
|
| - groups[4] or
|
| - (groups[5] and '\n') or
|
| - (groups[6] and ' ') or
|
| - (groups[7] and ' ') or
|
| - (groups[8] and ' ') or
|
| - ''
|
| - )
|
| -
|
| - return _re.sub(rex, subber, '\n%s\n' % script).strip()
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - def main():
|
| - """ Main """
|
| - import sys as _sys
|
| - keep_bang_comments = (
|
| - '-b' in _sys.argv[1:]
|
| - or '-bp' in _sys.argv[1:]
|
| - or '-pb' in _sys.argv[1:]
|
| - )
|
| - if '-p' in _sys.argv[1:] or '-bp' in _sys.argv[1:] \
|
| - or '-pb' in _sys.argv[1:]:
|
| - global jsmin # pylint: disable = W0603
|
| - jsmin = _make_jsmin(python_only=True)
|
| - _sys.stdout.write(jsmin(
|
| - _sys.stdin.read(), keep_bang_comments=keep_bang_comments
|
| - ))
|
| - main()
|
|
|