[Pkg-xmpp-commits] [SCM] jsjac package from xmpp team branch, master, updated. upstream/1.3.1-34-g86c5f24

Thadeu Lima de Souza Cascardo cascardo at holoscopio.com
Sat Aug 21 03:32:20 UTC 2010


The following commit has been merged in the master branch:
commit bb7ccccfcfdad309511aa84988132bb032135887
Author: Thadeu Lima de Souza Cascardo <cascardo at holoscopio.com>
Date:   Fri Aug 20 22:57:03 2010 -0300

    Remove DFSG-non-free files.
    
    Some files have the clause "The Software shall be used for Good, not
    Evil."
    
    So, remove them.

diff --git a/debian/copyright b/debian/copyright
index a17ae99..4e75c35 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -32,13 +32,6 @@ File: src/xmlextras.js
 Copyright: (c) 2006 Erik Arvidsson
 License: Apache-2.0
 
-Files:
-  utils/jsmin.c,
-  utils/fulljslint.js,
-  utils/rhino.js
-Copyright: (c) 2002 Douglas Crockford
-License: MIT
-
 Files: utils/JSDoc/*
 Homepage: http://jsdoc.sourceforge.net
 Copyright: 
diff --git a/utils/Makefile b/utils/Makefile
deleted file mode 100644
index fa692db..0000000
--- a/utils/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-CC = gcc
-CFLAGS = -O2
-
-all: jsmin
-
-jsmin:
-	@$(CC) $(CFLAGS) -o jsmin jsmin.c
-
-clean:
-	@rm -f jsmin
\ No newline at end of file
diff --git a/utils/fulljslint.js b/utils/fulljslint.js
deleted file mode 100644
index 5f196d5..0000000
--- a/utils/fulljslint.js
+++ /dev/null
@@ -1,3237 +0,0 @@
-// jslint.js
-// 2007-06-19
-/*
-Copyright (c) 2002 Douglas Crockford  (www.JSLint.com)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-
-/*
-    JSLINT is a global function. It takes two parameters.
-
-        var myResult = JSLINT(source, option);
-
-    The first parameter is either a string or an array of strings. If it is a
-    string, it will be split on '\n' or '\r'. If it is an array of strings, it
-    is assumed that each string represents one line. The source can be a
-    JavaScript text, or HTML text, or a Konfabulator text.
-
-    The second parameter is an optional object of options which control the
-    operation of JSLINT. All of the options are booleans. All are optional and
-    have a default value of false.
-
-    If it checks out, JSLINT returns true. Otherwise, it returns false.
-
-    If false, you can inspect JSLINT.errors to find out the problems.
-    JSLINT.errors is an array of objects containing these members:
-
-    {
-        line      : The line (relative to 0) at which the lint was found
-        character : The character (relative to 0) at which the lint was found
-        reason    : The problem
-        evidence  : The text line in which the problem occurred
-        raw       : The raw message before the details were inserted
-        a         : The first detail
-        b         : The second detail
-        c         : The third detail
-        d         : The fourth detail
-    }
-
-    If a fatal error was found, a null will be the last element of the
-    JSLINT.errors array.
-
-    You can request a Function Report, which shows all of the functions
-    and the parameters and vars that they use. This can be used to find
-    implied global variables and other problems. The report is in HTML and
-    can be inserted in a <body>.
-
-        var myReport = JSLINT.report(option);
-
-    If the option is true, then the report will be limited to only errors.
-*/
-
-/*jslint evil: true, nomen: false */
-
-Object.prototype.beget = function () {
-    function F() {}
-    F.prototype = this;
-    return new F();
-};
-
-String.prototype.entityify = function () {
-    return this.
-        replace(/&/g, '&').
-        replace(/</g, '<').
-        replace(/>/g, '>');
-};
-
-String.prototype.isAlpha = function () {
-    return (this >= 'a' && this <= 'z\uffff') ||
-        (this >= 'A' && this <= 'Z\uffff');
-};
-
-
-String.prototype.isDigit = function () {
-    return (this >= '0' && this <= '9');
-};
-
-
-String.prototype.supplant = function (o) {
-    return this.replace(/{([^{}]*)}/g, function (a, b) {
-        var r = o[b];
-        return typeof r === 'string' || typeof r === 'number' ? r : a;
-    });
-};
-
-
-
-// We build the application inside a function so that we produce only a single
-// global variable. The function will be invoked, its return value is the JSLINT
-// function itself.
-
-var JSLINT;
-JSLINT = function () {
-
-// These are words that should not be permitted in third party ads.
-
-    var adsafe = {
-        activexobject   : true,
-        alert           : true,
-        back            : true,
-        body            : true,
-        close           : true,
-        confirm         : true,
-        cookie          : true,
-        constructor     : true,
-        createpopup     : true,
-        defaultstatus   : true,
-        defaultview     : true,
-        document        : true,
-        documentelement : true,
-        domain          : true,
-        'eval'          : true,
-        execScript      : true,
-        external        : true,
-        forms           : true,
-        forward         : true,
-        frameelement    : true,
-        fromcharcode    : true,
-        history         : true,
-        home            : true,
-        location        : true,
-        moveby          : true,
-        moveto          : true,
-        navigate        : true,
-        opener          : true,
-        parent          : true,
-        print           : true,
-        prompt          : true,
-        prototype       : true,
-        referrer        : true,
-        resizeby        : true,
-        resizeto        : true,
-        self            : true,
-        showhelp        : true,
-        showmodaldialog : true,
-        status          : true,
-        stop            : true,
-        top             : true,
-        window          : true,
-        write           : true,
-        writeln         : true,
-        __proto__       : true
-    };
-
-// These are all of the JSLint options.
-
-    var allOptions =     {
-        adsafe     : true, // if use of some browser features should be restricted
-        bitwise    : true, // if bitwise operators should not be allowed
-        browser    : true, // if the standard browser globals should be predefined
-        cap        : true, // if upper case HTML should be allowed
-        debug      : true, // if debugger statements should be allowed
-        eqeqeq     : true, // if === should be required
-        evil       : true, // if eval should be allowed
-        fragment   : true, // if HTML fragments should be allowed
-        laxbreak   : true, // if line breaks should not be checked
-        nomen      : true, // if names should be checked
-        passfail   : true, // if the scan should stop on first error
-        plusplus   : true, // if increment/decrement should not be allowed
-        rhino      : true, // if the Rhino environment globals should be predefined
-        undef      : true, // if undefined variables are errors
-        white      : true, // if strict whitespace rules apply
-        widget     : true  // if the Yahoo Widgets globals should be predefined
-    };
-
-    var anonname;   // The guessed name for anonymous functions.
-
-// browser contains a set of global names which are commonly provided by a
-// web browser environment.
-
-    var browser = {
-        alert           : true,
-        blur            : true,
-        clearInterval   : true,
-        clearTimeout    : true,
-        close           : true,
-        closed          : true,
-        confirm         : true,
-        console         : true,
-        Debug           : true,
-        defaultStatus   : true,
-        document        : true,
-        event           : true,
-        focus           : true,
-        frames          : true,
-        history         : true,
-        Image           : true,
-        length          : true,
-        location        : true,
-        moveBy          : true,
-        moveTo          : true,
-        name            : true,
-        navigator       : true,
-        onblur          : true,
-        onerror         : true,
-        onfocus         : true,
-        onload          : true,
-        onresize        : true,
-        onunload        : true,
-        open            : true,
-        opener          : true,
-        opera           : true,
-        parent          : true,
-        print           : true,
-        prompt          : true,
-        resizeBy        : true,
-        resizeTo        : true,
-        screen          : true,
-        scroll          : true,
-        scrollBy        : true,
-        scrollTo        : true,
-        self            : true,
-        setInterval     : true,
-        setTimeout      : true,
-        status          : true,
-        top             : true,
-        window          : true,
-        XMLHttpRequest  : true
-    };
-    var funlab;
-    var funstack;
-    var functions;
-    var globals;
-    var inblock;
-    var indent;
-
-// konfab contains the global names which are provided to a Yahoo
-// (fna Konfabulator) widget.
-
-    var konfab = {
-        alert                   : true,
-        appleScript             : true,
-        animator                : true,
-        appleScript             : true,
-        beep                    : true,
-        bytesToUIString         : true,
-        Canvas                  : true,
-        chooseColor             : true,
-        chooseFile              : true,
-        chooseFolder            : true,
-        convertPathToHFS        : true,
-        convertPathToPlatform   : true,
-        closeWidget             : true,
-        COM                     : true,
-        CustomAnimation         : true,
-        escape                  : true,
-        FadeAnimation           : true,
-        filesystem              : true,
-        focusWidget             : true,
-        form                    : true,
-        Frame                   : true,
-        HotKey                  : true,
-        Image                   : true,
-        include                 : true,
-        isApplicationRunning    : true,
-        iTunes                  : true,
-        konfabulatorVersion     : true,
-        log                     : true,
-        MenuItem                : true,
-        MoveAnimation           : true,
-        openURL                 : true,
-        play                    : true,
-        Point                   : true,
-        popupMenu               : true,
-        preferenceGroups        : true,
-        preferences             : true,
-        print                   : true,
-        prompt                  : true,
-        random                  : true,
-        reloadWidget            : true,
-        resolvePath             : true,
-        resumeUpdates           : true,
-        RotateAnimation         : true,
-        runCommand              : true,
-        runCommandInBg          : true,
-        saveAs                  : true,
-        savePreferences         : true,
-        screen                  : true,
-        ScrollBar               : true,
-        showWidgetPreferences   : true,
-        sleep                   : true,
-        speak                   : true,
-        suppressUpdates         : true,
-        system                  : true,
-        tellWidget              : true,
-        Text                    : true,
-        TextArea                : true,
-        unescape                : true,
-        updateNow               : true,
-        URL                     : true,
-        widget                  : true,
-        Window                  : true,
-        XMLDOM                  : true,
-        XMLHttpRequest          : true,
-        yahooCheckLogin         : true,
-        yahooLogin              : true,
-        yahooLogout             : true
-    };
-    var lines;
-    var lookahead;
-    var member;
-    var nexttoken;
-    var noreach;
-    var option;
-    var prereg;
-    var prevtoken;
-    var quit;
-    var rhino = {
-        defineClass : true,
-        deserialize : true,
-        gc          : true,
-        help        : true,
-        load        : true,
-        loadClass   : true,
-        print       : true,
-        quit        : true,
-        readFile    : true,
-        readUrl     : true,
-        runCommand  : true,
-        seal        : true,
-        serialize   : true,
-        spawn       : true,
-        sync        : true,
-        toint32     : true,
-        version     : true
-    };
-    var stack;
-
-// standard contains the global names that are provided by the
-// ECMAScript standard.
-
-    var standard = {
-        Array               : true,
-        Boolean             : true,
-        Date                : true,
-        decodeURI           : true,
-        decodeURIComponent  : true,
-        encodeURI           : true,
-        encodeURIComponent  : true,
-        Error               : true,
-        escape              : true,
-        'eval'              : true,
-        EvalError           : true,
-        Function            : true,
-        isFinite            : true,
-        isNaN               : true,
-        Math                : true,
-        Number              : true,
-        Object              : true,
-        parseInt            : true,
-        parseFloat          : true,
-        RangeError          : true,
-        ReferenceError      : true,
-        RegExp              : true,
-        String              : true,
-        SyntaxError         : true,
-        TypeError           : true,
-        unescape            : true,
-        URIError            : true
-    };
-    var syntax = {};
-    var token;
-    var verb;
-    var warnings;
-    var wmode;
-
-//  xmode is used to adapt to the exceptions in XML parsing.
-//  It can have these states:
-//      false   .js script file
-//      "       A " attribute
-//      '       A ' attribute
-//      content The content of a script tag
-//      CDATA   A CDATA block
-
-    var xmode;
-
-//  xtype identifies the type of document being analyzed.
-//  It can have these states:
-//      false   .js script file
-//      html    .html file
-//      widget  .kon Konfabulator file
-
-    var xtype;
-// token
-    var tx = /^\s*([(){}[.,:;'"~]|\](\]>)?|\?>?|==?=?|\/(\*(global|extern|jslint)?|=|\/)?|\*[\/=]?|\+[+=]?|-[-=]?|%[=>]?|&[&=]?|\|[|=]?|>>?>?=?|<([\/=%\?]|\!(\[|--)?|<=?)?|\^=?|\!=?=?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+([xX][0-9a-fA-F]+|\.[0-9]*)?([eE][+-]?[0-9]+)?)/;
-// regular expression
-    var rx = /^(\\[^\x00-\x1f]|\[(\\[^\x00-\x1f]|[^\x00-\x1f\\\/])*\]|[^\x00-\x1f\\\/\[])+\/[gim]*/;
-// star slash
-    var lx = /\*\/|\/\*/;
-// global identifier
-    var gx = /^\s*([a-zA-Z_$][a-zA-Z0-9_$]*)/;
-// identifier
-    var ix = /^([a-zA-Z_$][a-zA-Z0-9_$]*$)/;
-// global separators
-    var hx = /^[\x00-\x20]*(,|\*\/)/;
-// boolean
-    var bx = /^\s*(true|false)/;
-// colon
-    var cx = /^\s*(:)/;
-// javascript url
-    var jx = /(javascript|jscript|ecmascript)\s*:/i;
-
-
-// Produce an error warning.
-
-    function warning(m, t, a, b, c, d) {
-        var ch, l, w;
-        t = t || nexttoken;
-        if (t.id === '(end)') {
-            t = token;
-        }
-        l = t.line || 0;
-        ch = t.from || 0;
-        w = {
-            id: '(error)',
-            raw: m,
-            evidence: lines[l] || '',
-            line: l,
-            character: ch,
-            a: a,
-            b: b,
-            c: c,
-            d: d
-        };
-        w.reason = m.supplant(w);
-        JSLINT.errors.push(w);
-        if (option.passfail) {
-            quit('Stopping. ', l, ch);
-        }
-        warnings += 1;
-        if (warnings === 50) {
-            quit("Too many errors.", l, ch);
-        }
-        return w;
-    }
-
-    function warningAt(m, l, ch, a, b, c, d) {
-        return warning(m, {
-            line: l,
-            from: ch
-        }, a, b, c, d);
-    }
-
-    function error(m, t, a, b, c, d) {
-        var w = warning(m, t, a, b, c, d);
-        quit("Stopping, unable to continue.", w.line, w.character);
-    }
-
-    function errorAt(m, l, ch, a, b, c, d) {
-        return error(m, {
-            line: l,
-            from: ch
-        }, a, b, c, d);
-    }
-
-    quit = function quit(m, l, ch) {
-        warningAt("{a} ({b}% scanned).",
-                l, ch, m, Math.floor((l / lines.length) * 100));
-        JSLINT.errors.push(null);
-        throw null;
-    };
-
-
-
-// lexical analysis
-
-    var lex = function () {
-        var character;
-        var from;
-        var line;
-        var s;
-
-// Private lex methods
-
-        function nextLine() {
-            line += 1;
-            if (line >= lines.length) {
-                return false;
-            }
-            character = 0;
-            s = lines[line];
-            return true;
-        }
-
-// Produce a token object.  The token inherits from a syntax symbol.
-
-        function it(type, value, quote) {
-            var i, t;
-            if (option.adsafe &&
-                    adsafe.hasOwnProperty(value.toLowerCase())) {
-                warning("Adsafe restricted word '{a}'.",
-                        {line: line, from: character}, value);
-            }
-            if (type === '(punctuator)' ||
-                    (type === '(identifier)' && syntax.hasOwnProperty(value))) {
-                t = syntax[value];
-
-// Mozilla bug workaround.
-
-                if (!t.id) {
-                    t = syntax[type];
-                }
-            } else {
-                t = syntax[type];
-            }
-            t = t.beget();
-            if (type === '(string)') {
-                if (/(javascript|jscript|ecmascript)\s*:/i.test(value)) {
-                    warningAt("JavaScript URL.", line, from);
-                }
-            }
-            t.value = value;
-            t.line = line;
-            t.character = character;
-            t.from = from;
-            if (quote) {
-                t.quote = quote;
-            }
-            i = t.id;
-            prereg = i &&
-                    (('(,=:[!&|?{};'.indexOf(i.charAt(i.length - 1)) >= 0) ||
-                    i === 'return');
-            return t;
-        }
-
-// Public lex methods
-
-        return {
-            init: function (source) {
-                if (typeof source === 'string') {
-                    lines = source.split('\r\n');
-                    if (lines.length === 1) {
-                        lines = lines[0].split('\n');
-                        if (lines.length === 1) {
-                            lines = lines[0].split('\r');
-                        }
-                    }
-                } else {
-                    lines = source;
-                }
-                line = 0;
-                character = 0;
-                from = 0;
-                s = lines[0];
-            },
-
-// token -- this is called by advance to get the next token.
-
-            token: function () {
-                var c;
-                var i;
-                var l;
-                var r;
-                var t;
-
-                function match(x) {
-                    var r = x.exec(s), r1;
-                    if (r) {
-                        l = r[0].length;
-                        r1 = r[1];
-                        c = r1.charAt(0);
-                        s = s.substr(l);
-                        character += l;
-                        from = character - r1.length;
-                        return r1;
-                    }
-                }
-
-                function more() {
-                    while (!s) {
-                        if (!nextLine()) {
-                            errorAt("Unclosed comment.", line, character);
-                        }
-                    }
-                }
-
-                function string(x) {
-                    var c, j, r = '';
-
-                    if (xmode === x || xmode === 'string') {
-                        return it('(punctuator)', x);
-                    }
-
-                    function esc(n) {
-                        var i = parseInt(s.substr(j + 1, n), 16);
-                        j += n;
-                        if (i >= 32 && i <= 127) {
-                            warningAt("Unnecessary escapement.", line, character);
-                        }
-                        character += n;
-                        c = String.fromCharCode(i);
-                    }
-
-                    for (j = 0; j < s.length; j += 1) {
-                        c = s.charAt(j);
-                        if (c === x) {
-                            character += 1;
-                            s = s.substr(j + 1);
-                            return it('(string)', r, x);
-                        }
-                        if (c < ' ') {
-                            if (c === '\n' || c === '\r') {
-                                break;
-                            }
-                            warningAt("Control character in string: {a}.",
-                                    line, character + j, s.substring(0, j));
-                        } else if (c === '<') {
-                            if (s.charAt(j + 1) === '/' && xmode && xmode !== 'CDATA') {
-                                warningAt("Expected '<\\/' and instead saw '</'.", line, character);
-                            }
-                        } else if (c === '\\') {
-                            j += 1;
-                            character += 1;
-                            c = s.charAt(j);
-                            switch (c) {
-                            case '\\':
-                            case '\'':
-                            case '"':
-                            case '/':
-                                break;
-                            case 'b':
-                                c = '\b';
-                                break;
-                            case 'f':
-                                c = '\f';
-                                break;
-                            case 'n':
-                                c = '\n';
-                                break;
-                            case 'r':
-                                c = '\r';
-                                break;
-                            case 't':
-                                c = '\t';
-                                break;
-                            case 'u':
-                                esc(4);
-                                break;
-                            case 'v':
-                                c = '\v';
-                                break;
-                            case 'x':
-                                esc(2);
-                                break;
-                            default:
-                                warningAt("Bad escapement.", line, character);
-                            }
-                        }
-                        r += c;
-                        character += 1;
-                    }
-                    errorAt("Unclosed string.", line, from);
-                }
-
-                for (;;) {
-                    if (!s) {
-                        return it(nextLine() ? '(endline)' : '(end)', '');
-                    }
-                    t = match(tx);
-                    if (!t) {
-                        t = '';
-                        c = '';
-                        while (s && s < '!') {
-                            s = s.substr(1);
-                        }
-                        if (s) {
-                            errorAt("Unexpected '{a}'.",
-                                    line, character, s.substr(0, 1));
-                        }
-                    }
-
-//      identifier
-
-                    if (c.isAlpha() || c === '_' || c === '$') {
-                        return it('(identifier)', t);
-                    }
-
-//      number
-
-                    if (c.isDigit()) {
-                        if (!isFinite(Number(t))) {
-                            warningAt("Bad number '{a}'.",
-                                line, character, t);
-                        }
-                        if (s.substr(0, 1).isAlpha()) {
-                            warningAt("Missing space after '{a}'.",
-                                    line, character, t);
-                        }
-                        if (c === '0' && t.substr(1,1).isDigit()) {
-                            warningAt("Don't use extra leading zeros '{a}'.",
-                                    line, character, t);
-                        }
-                        if (t.substr(t.length - 1) === '.') {
-                            warningAt(
-    "A trailing decimal point can be confused with a dot '{a}'.",
-                                    line, character, t);
-                        }
-                        return it('(number)', t);
-                    }
-
-//      string
-
-                    switch (t) {
-                    case '"':
-                    case "'":
-                        return string(t);
-
-//      // comment
-
-                    case '//':
-                        s = '';
-                        break;
-
-//      /* comment
-
-                    case '/*':
-                        for (;;) {
-                            i = s.search(lx);
-                            if (i >= 0) {
-                                break;
-                            }
-                            if (!nextLine()) {
-                                errorAt("Unclosed comment.", line, character);
-                            }
-                        }
-                        character += i + 2;
-                        if (s.substr(i, 1) === '/') {
-                            errorAt("Nested comment.", line, character);
-                        }
-                        s = s.substr(i + 2);
-                        break;
-
-//      /*extern
-
-                    case '/*extern':
-                    case '/*global':
-                        for (;;) {
-                            more();
-                            r = match(hx);
-                            if (r === '*/') {
-                                break;
-                            }
-                            if (r !== ',') {
-                                more();
-                                r = match(gx);
-                                if (r) {
-                                    globals[r] = true;
-                                } else {
-                                    errorAt("Bad extern identifier '{a}'.",
-                                            line, character, s);
-                                }
-                            }
-                        }
-                        return this.token();
-
-//      /*jslint
-
-                    case '/*jslint':
-                        if (option.adsafe) {
-                            errorAt("Adsafe restriction.", line, character);
-                        }
-                        for (;;) {
-                            more();
-                            r = match(hx);
-                            if (r === '*/') {
-                                break;
-                            }
-                            if (r !== ',') {
-                                more();
-                                r = match(gx);
-                                if (r) {
-                                    if (!allOptions.hasOwnProperty(r)) {
-                                        errorAt("Bad jslint option '{a}'.",
-                                                line, character, r);
-                                    }
-                                    more();
-                                    if (!match(cx)) {
-                                        errorAt("Missing ':' after '{a}'.",
-                                            line, character, r);
-                                    }
-                                    more();
-                                    t = match(bx);
-                                    if (!t) {
-                                        errorAt("Missing boolean after '{a}'.",
-                                            line, character, r);
-                                    }
-                                    option[r] = t === 'true';
-                                } else {
-                                    errorAt("Bad jslint option '{a}'.",
-                                            line, character, s);
-                                }
-                            }
-                        }
-                        break;
-
-//      */
-
-                    case '*/':
-                        errorAt("Unbegun comment.", line, character);
-                        break;
-
-                    case '':
-                        break;
-//      /
-                    case '/':
-                        if (prereg) {
-                            r = rx.exec(s);
-                            if (r) {
-                                c = r[0];
-                                l = c.length;
-                                character += l;
-                                s = s.substr(l);
-                                return it('(regex)', c);
-                            }
-                            errorAt("Bad regular expression.", line, character);
-                        }
-                        return it('(punctuator)', t);
-
-//      punctuator
-
-                    default:
-                        return it('(punctuator)', t);
-                    }
-                }
-            },
-
-// skip -- skip past the next occurrence of a particular string.
-// If the argument is empty, skip to just before the next '<' character.
-// This is used to ignore HTML content. Return false if it isn't found.
-
-            skip: function (p) {
-                var i, t = p;
-                if (nexttoken.id) {
-                    if (!t) {
-                        t = '';
-                        if (nexttoken.id.substr(0, 1) === '<') {
-                            lookahead.push(nexttoken);
-                            return true;
-                        }
-                    } else if (nexttoken.id.indexOf(t) >= 0) {
-                        return true;
-                    }
-                }
-                token = nexttoken;
-                nexttoken = syntax['(end)'];
-                for (;;) {
-                    i = s.indexOf(t || '<');
-                    if (i >= 0) {
-                        character += i + t.length;
-                        s = s.substr(i + t.length);
-                        return true;
-                    }
-                    if (!nextLine()) {
-                        break;
-                    }
-                }
-                return false;
-            }
-        };
-    }();
-
-    function builtin(name) {
-        return standard[name] === true ||
-               globals[name] === true ||
-              (option.rhino && rhino[name] === true) ||
-             ((xtype === 'widget' || option.widget) && konfab[name] === true) ||
-             ((xtype === 'html' || option.browser) && browser[name] === true);
-    }
-
-    function addlabel(t, type) {
-        if (t) {
-            if (typeof funlab[t] === 'string') {
-                switch (funlab[t]) {
-                case 'var':
-                case 'var*':
-                    if (type === 'global') {
-                        funlab[t] = 'var*';
-                        return;
-                    }
-                    break;
-                case 'global':
-                    if (type === 'var') {
-                        warning("Variable {a} was used before it was declared.", token, t);
-                        return;
-                    }
-                    if (type === 'var*' || type === 'global') {
-                        return;
-                    }
-                    break;
-                case 'function':
-                case 'parameter':
-                    if (type === 'global') {
-                        return;
-                    }
-                    break;
-                }
-                warning("Identifier {a} already declared as {b}.",
-                        token, t, funlab[t]);
-            }
-            funlab[t] = type;
-        }
-    }
-
-
-// We need a peek function. If it has an argument, it peeks that much farther
-// ahead. It is used to distinguish
-//     for ( var i in ...
-// from
-//     for ( var i = ...
-
-    function peek(p) {
-        var i = p || 0, j = 0;
-        var t;
-/****        if (nexttoken === syntax['(error)']) {
-            return nexttoken;
-        }****/
-        while (j <= i) {
-            t = lookahead[j];
-            if (!t) {
-                t = lookahead[j] = lex.token();
-            }
-            j += 1;
-        }
-        return t;
-    }
-
-
-    var badbreak = {
-        ')': true,
-        ']': true,
-        '++': true,
-        '--': true
-    };
-
-// Produce the next token. It looks for programming errors.
-
-    function advance(id, t) {
-        var l;
-        switch (token.id) {
-        case '(number)':
-            if (nexttoken.id === '.') {
-                warning(
-"A dot following a number can be confused with a decimal point.", token);
-            }
-            break;
-        case '-':
-            if (nexttoken.id === '-' || nexttoken.id === '--') {
-                warning("Confusing minusses.");
-            }
-            break;
-        case '+':
-            if (nexttoken.id === '+' || nexttoken.id === '++') {
-                warning("Confusing plusses.");
-            }
-            break;
-        }
-        if (token.type === '(string)' || token.identifier) {
-            anonname = token.value;
-        }
-
-        if (id && nexttoken.id !== id) {
-            if (t) {
-                if (nexttoken.id === '(end)') {
-                    warning("Unmatched '{a}'.", t, t.id);
-                } else {
-                    warning("Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.",
-                            nexttoken, id, t.id, t.line + 1, nexttoken.value);
-                }
-            } else {
-                warning("Expected '{a}' and instead saw '{b}'.",
-                        nexttoken, id, nexttoken.value);
-            }
-        }
-        prevtoken = token;
-        token = nexttoken;
-        for (;;) {
-            nexttoken = lookahead.shift() || lex.token();
-            if (nexttoken.id === '<![') {
-                if (xtype === 'html') {
-                    error("Unexpected '{a}'.", nexttoken, '<![');
-                }
-                if (xmode === 'script') {
-                    nexttoken = lex.token();
-                    if (nexttoken.value !== 'CDATA') {
-                        error("Missing '{a}'.", nexttoken, 'CDATA');
-                    }
-                    nexttoken = lex.token();
-                    if (nexttoken.id !== '[') {
-                        error("Missing '{a}'.", nexttoken, '[');
-                    }
-                    xmode = 'CDATA';
-                } else if (xmode === 'xml') {
-                    lex.skip(']]>');
-                } else {
-                    error("Unexpected '{a}'.", nexttoken, '<![');
-                }
-            } else if (nexttoken.id === ']]>') {
-                if (xmode === 'CDATA') {
-                    xmode = 'script';
-                } else {
-                    error("Unexpected '{a}'.", nexttoken, ']]>');
-                }
-            } else if (nexttoken.id !== '(endline)') {
-                break;
-            }
-            if (xmode === '"' || xmode === "'") {
-                error("Missing '{a}'.", token, xmode);
-            }
-            l = !xmode && !option.laxbreak &&
-                (token.type === '(string)' || token.type === '(number)' ||
-                token.type === '(identifier)' || badbreak[token.id]);
-        }
-        if (l) {
-            switch (nexttoken.id) {
-            case '{':
-            case '}':
-            case ']':
-                break;
-            case ')':
-                switch (token.id) {
-                case ')':
-                case '}':
-                case ']':
-                    break;
-                default:
-                    warning("Line breaking error '{a}'.", token, ')');
-                }
-                break;
-            default:
-                warning("Line breaking error '{a}'.",
-                        token, token.value);
-            }
-        }
-        if (xtype === 'widget' && xmode === 'script' && nexttoken.id) {
-            l = nexttoken.id.charAt(0);
-            if (l === '<' || l === '&') {
-                nexttoken.nud = nexttoken.led = null;
-                nexttoken.lbp = 0;
-                nexttoken.reach = true;
-            }
-        }
-    }
-
-
-    function beginfunction(i) {
-        var f = {
-            '(name)': i,
-            '(line)': nexttoken.line + 1,
-            '(context)': funlab
-        };
-        funstack.push(funlab);
-        funlab = f;
-        functions.push(funlab);
-    }
-
-
-    function endfunction() {
-        funlab = funstack.pop();
-    }
-
-
-// This is the heart of JSLINT, the Pratt parser. In addition to parsing, it
-// is looking for ad hoc lint patterns. We add to Pratt's model .fud, which is
-// like nud except that it is only used on the first token of a statement.
-// Having .fud makes it much easier to define JavaScript. I retained Pratt's
-// nomenclature.
-
-// .nud     Null denotation
-// .fud     First null denotation
-// .led     Left denotation
-//  lbp     Left binding power
-//  rbp     Right binding power
-
-// They are key to the parsing method called Top Down Operator Precedence.
-
-    function parse(rbp, initial) {
-        var l;
-        var left;
-        var o;
-        if (nexttoken.id === '(end)') {
-            error("Unexpected early end of program.", token);
-        }
-        advance();
-        if (initial) {
-            anonname = 'anonymous';
-            verb = token.value;
-        }
-        if (initial && token.fud) {
-            token.fud();
-        } else {
-            if (token.nud) {
-                o = token.exps;
-                left = token.nud();
-            } else {
-                if (nexttoken.type === '(number)' && token.id === '.') {
-                    warning(
-"A leading decimal point can be confused with a dot: '.{a}'.",
-                            token, nexttoken.value);
-                    advance();
-                    return token;
-                } else {
-                    error("Expected an identifier and instead saw '{a}'.",
-                            token, token.id);
-                }
-            }
-            while (rbp < nexttoken.lbp) {
-                o = nexttoken.exps;
-                advance();
-                if (token.led) {
-                    left = token.led(left);
-                } else {
-                    error("Expected an operator and instead saw '{a}'.",
-                        token, token.id);
-                }
-            }
-            if (initial && !o) {
-                warning(
-"Expected an assignment or function call and instead saw an expression.",
-                        token);
-            }
-        }
-        if (l) {
-            funlab[l] = 'label';
-        }
-        if (!option.evil && left && left.value === 'eval') {
-            warning("eval is evil.", left);
-        }
-        return left;
-    }
-
-
-// Functions for conformance of style.
-
-    function adjacent(left, right) {
-        if (option.white) {
-            if (left.character !== right.from) {
-                warning("Unexpected space after '{a}'.",
-                        nexttoken, left.value);
-            }
-        }
-    }
-
-
-    function nonadjacent(left, right) {
-        if (option.white) {
-            if (left.character === right.from) {
-                warning("Missing space after '{a}'.",
-                        nexttoken, left.value);
-            }
-        }
-    }
-
-    function indentation(bias) {
-        var i;
-        if (option.white && nexttoken.id !== '(end)') {
-            i = indent + (bias || 0);
-            if (nexttoken.from !== i) {
-                warning("Expected '{a}' to have an indentation of {b} instead of {c}.",
-                        nexttoken, nexttoken.value, i, nexttoken.from);
-            }
-        }
-    }
-
-
-
-// Parasitic constructors for making the symbols that will be inherited by
-// tokens.
-
-    function symbol(s, p) {
-        return syntax[s] || (syntax[s] = {
-            id: s,
-            lbp: p,
-            value: s
-        });
-    }
-
-
-    function delim(s) {
-        return symbol(s, 0);
-    }
-
-
-    function stmt(s, f) {
-        var x = delim(s);
-        x.identifier = x.reserved = true;
-        x.fud = f;
-        return x;
-    }
-
-
-    function blockstmt(s, f) {
-        var x = stmt(s, f);
-        x.block = true;
-        return x;
-    }
-
-
-    function reserveName(x) {
-        var c = x.id.charAt(0);
-        if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
-            x.identifier = x.reserved = true;
-        }
-        return x;
-    }
-
-
-    function prefix(s, f) {
-        var x = symbol(s, 150);
-        reserveName(x);
-        x.nud = (typeof f === 'function') ? f : function () {
-            if (option.plusplus && (this.id === '++' || this.id === '--')) {
-                warning("Unexpected use of '{a}'.", this, this.id);
-            }
-            parse(150);
-            return this;
-        };
-        return x;
-    }
-
-
-    function type(s, f) {
-        var x = delim(s);
-        x.type = s;
-        x.nud = f;
-        return x;
-    }
-
-
-    function reserve(s, f) {
-        var x = type(s, f);
-        x.identifier = x.reserved = true;
-        return x;
-    }
-
-
-    function reservevar(s) {
-        return reserve(s, function () {
-            return this;
-        });
-    }
-
-
-    function infix(s, f, p) {
-        var x = symbol(s, p);
-        reserveName(x);
-        x.led = (typeof f === 'function') ? f : function (left) {
-            nonadjacent(prevtoken, token);
-            nonadjacent(token, nexttoken);
-            return [this.id, left, parse(p)];
-        };
-        return x;
-    }
-
-
-    function relation(s, f) {
-        var x = symbol(s, 100);
-        x.led = function (left) {
-            nonadjacent(prevtoken, token);
-            nonadjacent(token, nexttoken);
-            var right = parse(100);
-            if ((left && left.id === 'NaN') || (right && right.id === 'NaN')) {
-                warning("Use the isNaN function to compare with NaN.", this);
-            } else if (f) {
-                f.apply(this, [left, right]);
-            }
-            return [this.id, left, right];
-        };
-        return x;
-    }
-
-
-    function isPoorRelation(node) {
-        return (node.type === '(number)' && !+node.value) ||
-               (node.type === '(string)' && !node.value) ||
-                node.type === 'true' ||
-                node.type === 'false' ||
-                node.type === 'undefined' ||
-                node.type === 'null';
-    }
-
-
-    function assignop(s, f) {
-        symbol(s, 20).exps = true;
-        return infix(s, function (left) {
-            nonadjacent(prevtoken, token);
-            nonadjacent(token, nexttoken);
-            if (left) {
-                if (left.id === '.' || left.id === '[' ||
-                        (left.identifier && !left.reserved)) {
-                    parse(19);
-                    return left;
-                }
-                if (left === syntax['function']) {
-                    warning(
-"Expected an identifier in an assignment and instead saw a function invocation.",
-                                token);
-                }
-            }
-            error("Bad assignment.", this);
-        }, 20);
-    }
-
-    function bitwise(s, f, p) {
-        var x = symbol(s, p);
-        reserveName(x);
-        x.led = (typeof f === 'function') ? f : function (left) {
-            if (option.bitwise) {
-                warning("Unexpected use of '{a}'.", this, this.id);
-            }
-            nonadjacent(prevtoken, token);
-            nonadjacent(token, nexttoken);
-            return [this.id, left, parse(p)];
-        };
-        return x;
-    }
-
-    function bitwiseassignop(s) {
-        symbol(s, 20).exps = true;
-        return infix(s, function (left) {
-            if (option.bitwise) {
-                warning("Unexpected use of '{a}'.", this, this.id);
-            }
-            nonadjacent(prevtoken, token);
-            nonadjacent(token, nexttoken);
-            if (left) {
-                if (left.id === '.' || left.id === '[' ||
-                        (left.identifier && !left.reserved)) {
-                    parse(19);
-                    return left;
-                }
-                if (left === syntax['function']) {
-                    warning(
-"Expected an identifier in an assignment, and instead saw a function invocation.",
-                                token);
-                }
-            }
-            error("Bad assignment.", this);
-        }, 20);
-    }
-
-
-    function suffix(s, f) {
-        var x = symbol(s, 150);
-        x.led = function (left) {
-            if (option.plusplus) {
-                warning("Unexpected use of '{a}'.", this, this.id);
-            }
-            return [f, left];
-        };
-        return x;
-    }
-
-
-    function optionalidentifier() {
-        if (nexttoken.reserved) {
-            warning("Expected an identifier and instead saw '{a}' (a reserved word).",
-                    nexttoken, nexttoken.id);
-        }
-        if (nexttoken.identifier) {
-            if (option.nomen) {
-                if (nexttoken.value.charAt(0) === '_' ||
-                        nexttoken.value.indexOf('$') >= 0) {
-                    warning("Unexpected characters in '{a}'.",
-                            nexttoken, nexttoken.value);
-                }
-            }
-            advance();
-            return token.value;
-        }
-    }
-
-
-    function identifier() {
-        var i = optionalidentifier();
-        if (i) {
-            return i;
-        }
-        if (token.id === 'function' && nexttoken.id === '(') {
-            warning("Missing name in function statement.");
-        } else {
-            error("Expected an identifier and instead saw '{a}'.",
-                    nexttoken, nexttoken.value);
-        }
-    }
-
-    function reachable(s) {
-        var i = 0;
-        var t;
-        if (nexttoken.id !== ';' || noreach) {
-            return;
-        }
-        for (;;) {
-            t = peek(i);
-            if (t.reach) {
-                return;
-            }
-            if (t.id !== '(endline)') {
-                if (t.id === 'function') {
-                    warning(
-"Inner functions should be listed at the top of the outer function.", t);
-                    break;
-                }
-                warning("Unreachable '{a}' after '{b}'.", t, t.value, s);
-                break;
-            }
-            i += 1;
-        }
-    }
-
-
-    function statement() {
-        var t = nexttoken;
-        if (t.id === ';') {
-            warning("Unnecessary semicolon.", t);
-            advance(';');
-            return;
-        }
-        if (t.identifier && !t.reserved && peek().id === ':') {
-            advance();
-            advance(':');
-            addlabel(t.value, 'live*');
-            if (!nexttoken.labelled) {
-                warning("Label '{a}' on {b} statement.",
-                        nexttoken, t.value, nexttoken.value);
-            }
-            if (jx.test(t.value + ':')) {
-                warning("Label '{a}' looks like a javascript url.",
-                        t, t.value);
-            }
-            nexttoken.label = t.value;
-            t = nexttoken;
-        }
-        parse(0, true);
-        if (!t.block) {
-            if (nexttoken.id !== ';') {
-                warningAt("Missing semicolon.", token.line,
-                        token.from + token.value.length);
-            } else {
-                adjacent(token, nexttoken);
-                advance(';');
-                nonadjacent(token, nexttoken);
-            }
-        }
-    }
-
-
-    function statements() {
-        while (!nexttoken.reach && nexttoken.id !== '(end)') {
-            indentation();
-            statement();
-        }
-    }
-
-
-    function block(f) {
-        var b = inblock;
-        inblock = f;
-        nonadjacent(token, nexttoken);
-        var t = nexttoken;
-        if (nexttoken.id === '{') {
-            advance('{');
-            if (nexttoken.id !== '}' || token.line !== nexttoken.line) {
-                indent += 4;
-                statements();
-                indent -= 4;
-                indentation();
-            }
-            advance('}', t);
-        } else {
-            warning("Expected '{a}' and instead saw '{b}'.",
-                    nexttoken, '{', nexttoken.value);
-            noreach = true;
-            statement();
-            noreach = false;
-        }
-        verb = null;
-        inblock = b;
-    }
-
-
-// An identity function, used by string and number tokens.
-
-    function idValue() {
-        return this;
-    }
-
-
-    function countMember(m) {
-        if (typeof member[m] === 'number') {
-            member[m] += 1;
-        } else {
-            member[m] = 1;
-        }
-    }
-
-
-// Common HTML attributes that carry scripts.
-
-    var scriptstring = {
-        onblur:      true,
-        onchange:    true,
-        onclick:     true,
-        ondblclick:  true,
-        onfocus:     true,
-        onkeydown:   true,
-        onkeypress:  true,
-        onkeyup:     true,
-        onload:      true,
-        onmousedown: true,
-        onmousemove: true,
-        onmouseout:  true,
-        onmouseover: true,
-        onmouseup:   true,
-        onreset:     true,
-        onselect:    true,
-        onsubmit:    true,
-        onunload:    true
-    };
-
-
-// XML types. Currently we support html and widget.
-
-    var xmltype = {
-        HTML: {
-            doBegin: function (n) {
-                if (!option.cap) {
-                    warning("HTML case error.");
-                }
-                xmltype.html.doBegin();
-            }
-        },
-        html: {
-            doBegin: function (n) {
-                xtype = 'html';
-                xmltype.html.script = false;
-            },
-            doTagName: function (n, p) {
-                var i;
-                var t = xmltype.html.tag[n];
-                var x;
-                if (!t) {
-                    error("Unrecognized tag '<{a}>'.",
-                            nexttoken,
-                            n === n.toLowerCase() ? n :
-                                n + ' (capitalization error)');
-                }
-                x = t.parent;
-                if (x) {
-                    if (x.indexOf(' ' + p + ' ') < 0) {
-                        error("A '<{a}>' must be within '<{b}>'.",
-                                token, n, x);
-                    }
-                } else {
-                    i = stack.length;
-                    do {
-                        if (i <= 0) {
-                            error("A '<{a}>' must be within '<{b}>'.",
-                                    token, n, 'body');
-                        }
-                        i -= 1;
-                    } while (stack[i].name !== 'body');
-                }
-                xmltype.html.script = n === 'script';
-                return t.empty;
-            },
-            doAttribute: function (n, a) {
-                if (n === 'script') {
-                    if (a === 'src') {
-                        xmltype.html.script = false;
-                        return 'string';
-                    } else if (a === 'language') {
-                        warning("The 'language' attribute is deprecated.",
-                                token);
-                        return false;
-                    }
-                }
-                if (a === 'href') {
-                    return 'href';
-                }
-                return scriptstring[a] && 'script';
-            },
-            doIt: function (n) {
-                return xmltype.html.script ? 'script' : n !== 'html' &&
-                        xmltype.html.tag[n].special && 'special';
-            },
-            tag: {
-                a:        {},
-                abbr:     {},
-                acronym:  {},
-                address:  {},
-                applet:   {},
-                area:     {empty: true, parent: ' map '},
-                b:        {},
-                base:     {empty: true, parent: ' head '},
-                bdo:      {},
-                big:      {},
-                blockquote: {},
-                body:     {parent: ' html noframes '},
-                br:       {empty: true},
-                button:   {},
-                canvas:   {parent: ' body p div th td '},
-                caption:  {parent: ' table '},
-                center:   {},
-                cite:     {},
-                code:     {},
-                col:      {empty: true, parent: ' table colgroup '},
-                colgroup: {parent: ' table '},
-                dd:       {parent: ' dl '},
-                del:      {},
-                dfn:      {},
-                dir:      {},
-                div:      {},
-                dl:       {},
-                dt:       {parent: ' dl '},
-                em:       {},
-                embed:    {},
-                fieldset: {},
-                font:     {},
-                form:     {},
-                frame:    {empty: true, parent: ' frameset '},
-                frameset: {parent: ' html frameset '},
-                h1:       {},
-                h2:       {},
-                h3:       {},
-                h4:       {},
-                h5:       {},
-                h6:       {},
-                head:     {parent: ' html '},
-                html:     {},
-                hr:       {empty: true},
-                i:        {},
-                iframe:   {},
-                img:      {empty: true},
-                input:    {empty: true},
-                ins:      {},
-                kbd:      {},
-                label:    {},
-                legend:   {parent: ' fieldset '},
-                li:       {parent: ' dir menu ol ul '},
-                link:     {empty: true, parent: ' head '},
-                map:      {},
-                menu:     {},
-                meta:     {empty: true, parent: ' head noscript '},
-                noframes: {parent: ' html body '},
-                noscript: {parent:
-' applet blockquote body button center dd del div fieldset form frameset head html iframe ins li map noframes noscript object td th '},
-                object:   {},
-                ol:       {},
-                optgroup: {parent: ' select '},
-                option:   {parent: ' optgroup select '},
-                p:        {},
-                param:    {empty: true, parent: ' applet object '},
-                pre:      {},
-                q:        {},
-                samp:     {},
-                script:   {parent:
-' head body p div span abbr acronym address bdo blockquote cite code del dfn em ins kbd pre samp strong table tbody td th tr var '},
-                select:   {},
-                small:    {},
-                span:     {},
-                strong:   {},
-                style:    {parent: ' head ', special: true},
-                sub:      {},
-                sup:      {},
-                table:    {},
-                tbody:    {parent: ' table '},
-                td:       {parent: ' tr '},
-                textarea: {},
-                tfoot:    {parent: ' table '},
-                th:       {parent: ' tr '},
-                thead:    {parent: ' table '},
-                title:    {parent: ' head '},
-                tr:       {parent: ' table tbody thead tfoot '},
-                tt:       {},
-                u:        {},
-                ul:       {},
-                'var':    {}
-            }
-        },
-        widget: {
-            doBegin: function (n) {
-                xtype = 'widget';
-            },
-            doTagName: function (n, p) {
-                var t = xmltype.widget.tag[n];
-                if (!t) {
-                    error("Unrecognized tag '<{a}>'.", nexttoken, n);
-                }
-                var x = t.parent;
-                if (x.indexOf(' ' + p + ' ') < 0) {
-                    error("A '<{a}>' must be within '<{b}>'.",
-                            token, n, x);
-                }
-            },
-            doAttribute: function (n, a) {
-                var t = xmltype.widget.tag[a];
-                if (!t) {
-                    error("Unrecognized attribute '<{a} {b}>'.", nexttoken, n, a);
-                }
-                var x = t.parent;
-                if (x.indexOf(' ' + n + ' ') < 0) {
-                    error("Attribute '{a}' does not belong in '<{b}>'.", nexttoken, a, n);
-                }
-                return t.script ? 'script' : a === 'name' ? 'define' : 'string';
-            },
-            doIt: function (n) {
-                var x = xmltype.widget.tag[n];
-                return x && x.script && 'script';
-            },
-            tag: {
-                "about-box":            {parent: ' widget '},
-                "about-image":          {parent: ' about-box '},
-                "about-text":           {parent: ' about-box '},
-                "about-version":        {parent: ' about-box '},
-                action:                 {parent: ' widget ', script: true},
-                alignment:              {parent: ' canvas frame image scrollbar text textarea window '},
-                anchorStyle:            {parent: ' text '},
-                author:                 {parent: ' widget '},
-                autoHide:               {parent: ' scrollbar '},
-                beget:                  {parent: ' canvas frame image scrollbar text window '},
-                bgColor:                {parent: ' text textarea '},
-                bgColour:               {parent: ' text textarea '},
-                bgOpacity:              {parent: ' text textarea '},
-                canvas:                 {parent: ' frame window '},
-                checked:                {parent: ' image menuItem '},
-                clipRect:               {parent: ' image '},
-                color:                  {parent: ' about-text about-version shadow text textarea '},
-                colorize:               {parent: ' image '},
-                colour:                 {parent: ' about-text about-version shadow text textarea '},
-                columns:                {parent: ' textarea '},
-                company:                {parent: ' widget '},
-                contextMenuItems:       {parent: ' canvas frame image scrollbar text textarea window '},
-                copyright:              {parent: ' widget '},
-                data:                   {parent: ' about-text about-version text textarea '},
-                debug:                  {parent: ' widget '},
-                defaultValue:           {parent: ' preference '},
-                defaultTracking:        {parent: ' widget '},
-                description:            {parent: ' preference '},
-                directory:              {parent: ' preference '},
-                editable:               {parent: ' textarea '},
-                enabled:                {parent: ' menuItem '},
-                extension:              {parent: ' preference '},
-                file:                   {parent: ' action preference '},
-                fillMode:               {parent: ' image '},
-                font:                   {parent: ' about-text about-version text textarea '},
-                fontStyle:              {parent: ' textarea '},
-                frame:                  {parent: ' frame window '},
-                group:                  {parent: ' preference '},
-                hAlign:                 {parent: ' canvas frame image scrollbar text textarea '},
-                handleLinks:            {parent: ' textArea '},
-                height:                 {parent: ' canvas frame image scrollbar text textarea window '},
-                hidden:                 {parent: ' preference '},
-                hLineSize:              {parent: ' frame '},
-                hOffset:                {parent: ' about-text about-version canvas frame image scrollbar shadow text textarea window '},
-                hotkey:                 {parent: ' widget '},
-                hRegistrationPoint:     {parent: ' canvas frame image scrollbar text '},
-                hScrollBar:             {parent: ' frame '},
-                hslAdjustment:          {parent: ' image '},
-                hslTinting:             {parent: ' image '},
-                icon:                   {parent: ' preferenceGroup '},
-                id:                     {parent: ' canvas frame hotkey image preference text textarea timer scrollbar widget window '},
-                image:                  {parent: ' about-box frame window widget '},
-                interval:               {parent: ' action timer '},
-                key:                    {parent: ' hotkey '},
-                kind:                   {parent: ' preference '},
-                level:                  {parent: ' window '},
-                lines:                  {parent: ' textarea '},
-                loadingSrc:             {parent: ' image '},
-                locked:                 {parent: ' window '},
-                max:                    {parent: ' scrollbar '},
-                maxLength:              {parent: ' preference '},
-                menuItem:               {parent: ' contextMenuItems '},
-                min:                    {parent: ' scrollbar '},
-                minimumVersion:         {parent: ' widget '},
-                minLength:              {parent: ' preference '},
-                missingSrc:             {parent: ' image '},
-                modifier:               {parent: ' hotkey '},
-                name:                   {parent: ' canvas frame hotkey image preference preferenceGroup scrollbar text textarea timer widget window '},
-                notSaved:               {parent: ' preference '},
-                onClick:                {parent: ' canvas frame image scrollbar text textarea ', script: true},
-                onContextMenu:          {parent: ' canvas frame image scrollbar text textarea window ', script: true},
-                onDragDrop:             {parent: ' canvas frame image scrollbar text textarea ', script: true},
-                onDragEnter:            {parent: ' canvas frame image scrollbar text textarea ', script: true},
-                onDragExit:             {parent: ' canvas frame image scrollbar text textarea ', script: true},
-                onFirstDisplay:         {parent: ' window ', script: true},
-                onGainFocus:            {parent: ' textarea window ', script: true},
-                onKeyDown:              {parent: ' hotkey text textarea window ', script: true},
-                onKeyPress:             {parent: ' textarea window ', script: true},
-                onKeyUp:                {parent: ' hotkey text textarea window ', script: true},
-                onImageLoaded:          {parent: ' image ', script: true},
-                onLoseFocus:            {parent: ' textarea window ', script: true},
-                onMouseDown:            {parent: ' canvas frame image scrollbar text textarea window ', script: true},
-                onMouseDrag:            {parent: ' canvas frame image scrollbar text textArea window ', script: true},
-                onMouseEnter:           {parent: ' canvas frame image scrollbar text textarea window ', script: true},
-                onMouseExit:            {parent: ' canvas frame image scrollbar text textarea window ', script: true},
-                onMouseMove:            {parent: ' canvas frame image scrollbar text textarea window ', script: true},
-                onMouseUp:              {parent: ' canvas frame image scrollbar text textarea window ', script: true},
-                onMouseWheel:           {parent: ' frame ', script: true},
-                onMultiClick:           {parent: ' canvas frame image scrollbar text textarea window ', script: true},
-                onSelect:               {parent: ' menuItem ', script: true},
-                onTextInput:            {parent: ' window ', script: true},
-                onTimerFired:           {parent: ' timer ', script: true},
-                onValueChanged:         {parent: ' scrollbar ', script: true},
-                opacity:                {parent: ' canvas frame image scrollbar shadow text textarea window '},
-                option:                 {parent: ' preference widget '},
-                optionValue:            {parent: ' preference '},
-                order:                  {parent: ' preferenceGroup '},
-                orientation:            {parent: ' scrollbar '},
-                pageSize:               {parent: ' scrollbar '},
-                preference:             {parent: ' widget '},
-                preferenceGroup:        {parent: ' widget '},
-                remoteAsync:            {parent: ' image '},
-                requiredPlatform:       {parent: ' widget '},
-                root:                   {parent: ' window '},
-                rotation:               {parent: ' canvas frame image scrollbar text '},
-                scrollbar:              {parent: ' frame text textarea window '},
-                scrolling:              {parent: ' text '},
-                scrollX:                {parent: ' frame '},
-                scrollY:                {parent: ' frame '},
-                secure:                 {parent: ' preference textarea '},
-                shadow:                 {parent: ' about-text about-version text window '},
-                size:                   {parent: ' about-text about-version text textarea '},
-                spellcheck:             {parent: ' textarea '},
-                src:                    {parent: ' image '},
-                srcHeight:              {parent: ' image '},
-                srcWidth:               {parent: ' image '},
-                style:                  {parent: ' about-text about-version canvas frame image preference scrollbar text textarea window '},
-                subviews:               {parent: ' frame '},
-                superview:              {parent: ' canvas frame image scrollbar text textarea '},
-                text:                   {parent: ' frame text textarea window '},
-                textarea:               {parent: ' frame window '},
-                timer:                  {parent: ' widget '},
-                thumbColor:             {parent: ' scrollbar textarea '},
-                ticking:                {parent: ' timer '},
-                ticks:                  {parent: ' preference '},
-                tickLabel:              {parent: ' preference '},
-                tileOrigin:             {parent: ' image '},
-                title:                  {parent: ' menuItem preference preferenceGroup window '},
-                tooltip:                {parent: ' image text textarea '},
-                tracking:               {parent: ' canvas image '},
-                trigger:                {parent: ' action '},
-                truncation:             {parent: ' text '},
-                type:                   {parent: ' preference '},
-                url:                    {parent: ' about-box about-text about-version '},
-                useFileIcon:            {parent: ' image '},
-                vAlign:                 {parent: ' canvas frame image scrollbar text textarea '},
-                value:                  {parent: ' preference scrollbar '},
-                version:                {parent: ' widget '},
-                visible:                {parent: ' canvas frame image scrollbar text textarea window '},
-                vLineSize:              {parent: ' frame '},
-                vOffset:                {parent: ' about-text about-version canvas frame image scrollbar shadow text textarea window '},
-                vRegistrationPoint:     {parent: ' canvas frame image scrollbar text '},
-                vScrollBar:             {parent: ' frame '},
-                width:                  {parent: ' canvas frame image scrollbar text textarea window '},
-                window:                 {parent: ' canvas frame image scrollbar text textarea widget '},
-                wrap:                   {parent: ' text '},
-                zOrder:                 {parent: ' canvas frame image scrollbar text textarea window '}
-            }
-        }
-    };
-
-    function xmlword(tag) {
-        var w = nexttoken.value;
-        if (!nexttoken.identifier) {
-            if (nexttoken.id === '<') {
-                if (tag) {
-                    error("Expected '{a}' and instead saw '{b}'.",
-                        token, '<', '<');
-                } else {
-                    error("Missing '{a}'.", token, '>');
-                }
-            } else if (nexttoken.id === '(end)') {
-                error("Bad structure.");
-            } else {
-                warning("Missing quote.", token);
-            }
-        }
-        advance();
-        while (nexttoken.id === '-' || nexttoken.id === ':') {
-            w += nexttoken.id;
-            advance();
-            if (!nexttoken.identifier) {
-                error("Bad name '{a}'.", nexttoken, w + nexttoken.value);
-            }
-            w += nexttoken.value;
-            advance();
-        }
-        return w;
-    }
-
-    function closetag(n) {
-        return '</' + n + '>';
-    }
-
-    function xml() {
-        var a, e, n, q, t;
-        xmode = 'xml';
-        stack = null;
-        for (;;) {
-            switch (nexttoken.value) {
-            case '<':
-                if (!stack) {
-                    stack = [];
-                }
-                advance('<');
-                t = nexttoken;
-                n = xmlword(true);
-                t.name = n;
-                if (!xtype) {
-                    if (xmltype[n]) {
-                        xmltype[n].doBegin();
-                        n = xtype;
-                        e = false;
-                    } else {
-                        if (option.fragment) {
-                            xmltype.html.doBegin();
-                            stack = [{name: 'body'}];
-                            e = xmltype[xtype].doTagName(n, 'body');
-                        } else {
-                            error("Unrecognized tag '<{a}>'.", nexttoken, n);
-                        }
-                    }
-                } else {
-                    if (option.cap && xtype === 'html') {
-                        n = n.toLowerCase();
-                    }
-                    if (stack.length === 0) {
-                        error("What the hell is this?");
-                    }
-                    e = xmltype[xtype].doTagName(n,
-                            stack[stack.length - 1].name);
-                }
-                t.type = n;
-                for (;;) {
-                    if (nexttoken.id === '/') {
-                        advance('/');
-                        e = true;
-                        break;
-                    }
-                    if (nexttoken.id && nexttoken.id.substr(0, 1) === '>') {
-                        break;
-                    }
-                    a = xmlword();
-                    switch (xmltype[xtype].doAttribute(n, a)) {
-                    case 'script':
-                        xmode = 'string';
-                        advance('=');
-                        q = nexttoken.id;
-                        if (q !== '"' && q !== "'") {
-                            error("Missing quote.");
-                        }
-                        xmode = q;
-                        wmode = option.white;
-                        option.white = false;
-                        advance(q);
-                        statements();
-                        option.white = wmode;
-                        if (nexttoken.id !== q) {
-                            error("Missing close quote on script attribute.");
-                        }
-                        xmode = 'xml';
-                        advance(q);
-                        break;
-                    case 'value':
-                        advance('=');
-                        if (!nexttoken.identifier &&
-                                nexttoken.type !== '(string)' &&
-                                nexttoken.type !== '(number)') {
-                            error("Bad value '{a}'.",
-                                    nexttoken, nexttoken.value);
-                        }
-                        advance();
-                        break;
-                    case 'string':
-                    case 'href':
-                        advance('=');
-                        if (nexttoken.type !== '(string)') {
-                            error("Bad value '{a}'.",
-                                    nexttoken, nexttoken.value);
-                        }
-                        advance();
-                        break;
-                    case 'define':
-                        advance('=');
-                        if (nexttoken.type !== '(string)') {
-                            error("Bad value '{a}'.",
-                                    nexttoken, nexttoken.value);
-                        }
-                        addlabel(nexttoken.value, 'var*');
-                        advance();
-                        break;
-                    default:
-                        if (nexttoken.id === '=') {
-                            advance('=');
-                            if (!nexttoken.identifier &&
-                                    nexttoken.type !== '(string)' &&
-                                    nexttoken.type !== '(number)') {
-                            }
-                            advance();
-                        }
-                    }
-                }
-                switch (xmltype[xtype].doIt(n)) {
-                case 'script':
-                    xmode = 'script';
-                    advance('>');
-                    indent = nexttoken.from;
-                    statements();
-                    if (nexttoken.id !== '</' && nexttoken.id !== '(end)') {
-                        warning("Unexpected '{a}'.", nexttoken, nexttoken.id);
-                    }
-                    xmode = 'xml';
-                    break;
-                case 'special':
-                    e = true;
-                    n = closetag(t.name);
-                    if (!lex.skip(n)) {
-                        error("Missing '{a}'.", t, n);
-                    }
-                    break;
-                default:
-                    lex.skip('>');
-                }
-                if (!e) {
-                    stack.push(t);
-                }
-                break;
-            case '</':
-                advance('</');
-                n = xmlword(true);
-                t = stack.pop();
-                if (!t) {
-                    error("Unexpected '{a}'.", nexttoken, closetag(n));
-                }
-                if (t.name !== n) {
-                    error("Expected '{a}' and instead saw '{b}'.",
-                            nexttoken, closetag(t.name), closetag(n));
-                }
-                if (nexttoken.id !== '>') {
-                    error("Missing '{a}'.", nexttoken, '>');
-                }
-                if (stack.length > 0) {
-                    lex.skip('>');
-                } else {
-                    advance('>');
-                }
-                break;
-            case '<!':
-                for (;;) {
-                    advance();
-                    if (nexttoken.id === '>') {
-                        break;
-                    }
-                    if (nexttoken.id === '<' || nexttoken.id === '(end)') {
-                        error("Missing '{a}'.", token, '>');
-                    }
-                }
-                lex.skip('>');
-                break;
-            case '<!--':
-                lex.skip('-->');
-                break;
-            case '<%':
-                lex.skip('%>');
-                break;
-            case '<?':
-                for (;;) {
-                    advance();
-                    if (nexttoken.id === '?>') {
-                        break;
-                    }
-                    if (nexttoken.id === '<?' || nexttoken.id === '<' ||
-                            nexttoken.id === '>' || nexttoken.id === '(end)') {
-                        error("Missing '{a}'.", token, '?>');
-                    }
-                }
-                lex.skip('?>');
-                break;
-            case '<=':
-            case '<<':
-            case '<<=':
-                error("Missing '{a}'.", nexttoken, '<');
-                break;
-            case '(end)':
-                return;
-            }
-            if (stack && stack.length === 0) {
-                return;
-            }
-            if (!lex.skip('')) {
-                t = stack.pop();
-                if (t.value) {
-                    error("Missing '{a}'.", t, closetag(t.name));
-                } else {
-                    return;
-                }
-            }
-            advance();
-        }
-    }
-
-
-// Build the syntax table by declaring the syntactic elements of the language.
-
-    type('(number)', idValue);
-    type('(string)', idValue);
-
-    syntax['(identifier)'] = {
-        type: '(identifier)',
-        lbp: 0,
-        identifier: true,
-        nud: function () {
-            var c;
-            if (option.undef && !builtin(this.value) &&
-                    xmode !== '"' && xmode !== "'") {
-                c = funlab;
-                while (!c[this.value]) {
-                    c = c['(context)'];
-                    if (!c) {
-                        warning("Undefined {b} '{a}'.",
-                                token, this.value,
-                                nexttoken.id === '(' ? "function" : "variable");
-                        break;
-                    }
-                }
-            }
-            addlabel(this.value, 'global');
-            return this;
-        },
-        led: function () {
-            error("Expected an operator and instead saw '{a}'.",
-                    nexttoken, nexttoken.value);
-        }
-    };
-
-    type('(regex)', function () {
-        return [this.id, this.value, this.flags];
-    });
-
-    delim('(endline)');
-    delim('(begin)');
-    delim('(end)').reach = true;
-    delim('</').reach = true;
-    delim('<![').reach = true;
-    delim('<%');
-    delim('<?');
-    delim('<!');
-    delim('<!--');
-    delim('%>');
-    delim('?>');
-    delim('(error)').reach = true;
-    delim('}').reach = true;
-    delim(')');
-    delim(']');
-    delim(']]>').reach = true;
-    delim('"').reach = true;
-    delim("'").reach = true;
-    delim(';');
-    delim(':').reach = true;
-    delim(',');
-    reserve('else');
-    reserve('case').reach = true;
-    reserve('catch');
-    reserve('default').reach = true;
-    reserve('finally');
-    reservevar('arguments');
-    reservevar('eval');
-    reservevar('false');
-    reservevar('Infinity');
-    reservevar('NaN');
-    reservevar('null');
-    reservevar('this');
-    reservevar('true');
-    reservevar('undefined');
-    assignop('=', 'assign', 20);
-    assignop('+=', 'assignadd', 20);
-    assignop('-=', 'assignsub', 20);
-    assignop('*=', 'assignmult', 20);
-    assignop('/=', 'assigndiv', 20).nud = function () {
-        error("A regular expression literal can be confused with '/='.");
-    };
-    assignop('%=', 'assignmod', 20);
-    bitwiseassignop('&=', 'assignbitand', 20);
-    bitwiseassignop('|=', 'assignbitor', 20);
-    bitwiseassignop('^=', 'assignbitxor', 20);
-    bitwiseassignop('<<=', 'assignshiftleft', 20);
-    bitwiseassignop('>>=', 'assignshiftright', 20);
-    bitwiseassignop('>>>=', 'assignshiftrightunsigned', 20);
-    infix('?', function (left) {
-        parse(10);
-        advance(':');
-        parse(10);
-    }, 30);
-
-    infix('||', 'or', 40);
-    infix('&&', 'and', 50);
-    bitwise('|', 'bitor', 70);
-    bitwise('^', 'bitxor', 80);
-    bitwise('&', 'bitand', 90);
-    relation('==', function (left, right) {
-        if (option.eqeqeq) {
-            warning("Expected '{a}' and instead saw '{b}'.",
-                    this, '===', '==');
-        } else if (isPoorRelation(left)) {
-            warning("Use '{a}' to compare with '{b}'.",
-                this, '===', left.value);
-        } else if (isPoorRelation(right)) {
-            warning("Use '{a}' to compare with '{b}'.",
-                this, '===', right.value);
-        }
-        return ['==', left, right];
-    });
-    relation('===');
-    relation('!=', function (left, right) {
-        if (option.eqeqeq) {
-            warning("Expected '{a}' and instead saw '{b}'.",
-                    this, '!==', '!=');
-        } else if (isPoorRelation(left)) {
-            warning("Use '{a}' to compare with '{b}'.",
-                    this, '!==', left.value);
-        } else if (isPoorRelation(right)) {
-            warning("Use '{a}' to compare with '{b}'.",
-                    this, '!==', right.value);
-        }
-        return ['!=', left, right];
-    });
-    relation('!==');
-    relation('<');
-    relation('>');
-    relation('<=');
-    relation('>=');
-    bitwise('<<', 'shiftleft', 120);
-    bitwise('>>', 'shiftright', 120);
-    bitwise('>>>', 'shiftrightunsigned', 120);
-    infix('in', 'in', 120);
-    infix('instanceof', 'instanceof', 120);
-    infix('+', function (left) {
-        nonadjacent(prevtoken, token);
-        nonadjacent(token, nexttoken);
-        var right = parse(130);
-        if (left && right && left.id === '(string)' && right.id === '(string)') {
-            left.value += right.value;
-            left.character = right.character;
-            if (option.adsafe && adsafe.hasOwnProperty(left.value.toLowerCase())) {
-                warning("Adsafe restricted word '{a}'.", left, left.value);
-            }
-            if (jx.test(left.value)) {
-                warning("JavaScript URL.", left);
-            }
-            return left;
-        }
-        return [this.id, left, right];
-    }, 130);
-    prefix('+', 'num');
-    infix('-', 'sub', 130);
-    prefix('-', 'neg');
-    infix('*', 'mult', 140);
-    infix('/', 'div', 140);
-    infix('%', 'mod', 140);
-
-    suffix('++', 'postinc');
-    prefix('++', 'preinc');
-    syntax['++'].exps = true;
-
-    suffix('--', 'postdec');
-    prefix('--', 'predec');
-    syntax['--'].exps = true;
-    prefix('delete', function () {
-        parse(0);
-    }).exps = true;
-
-
-    prefix('~', function () {
-        if (option.bitwise) {
-            warning("Unexpected '{a}'.", this, '~');
-        }
-        parse(150);
-        return this;
-    });
-    prefix('!', 'not');
-    prefix('typeof', 'typeof');
-    prefix('new', function () {
-        var c = parse(155), i;
-        if (c) {
-            if (c.identifier) {
-                c['new'] = true;
-                switch (c.value) {
-                case 'Object':
-                    warning("Use the object literal notation {}.", token);
-                    break;
-                case 'Array':
-                    warning("Use the array literal notation [].", token);
-                    break;
-                case 'Number':
-                case 'String':
-                case 'Boolean':
-                    warning("Do not use the {a} function as a constructor.",
-                            token, c.value);
-                    break;
-                case 'Function':
-                    if (!option.evil) {
-                        warning("The Function constructor is eval.");
-                    }
-                    break;
-                default:
-                    if (c.id !== 'function') {
-                        i = c.value.substr(0, 1);
-                        if (i < 'A' || i > 'Z') {
-                            warning(
-                    "A constructor name should start with an uppercase letter.",
-                                token);
-                        }
-                    }
-                }
-            } else {
-                if (c.id !== '.' && c.id !== '[' && c.id !== '(') {
-                    warning("Bad constructor.", token);
-                }
-            }
-        } else {
-            warning("Weird construction. Delete 'new'.", this);
-        }
-        adjacent(token, nexttoken);
-        if (nexttoken.id === '(') {
-            advance('(');
-            if (nexttoken.id !== ')') {
-                for (;;) {
-                    parse(10);
-                    if (nexttoken.id !== ',') {
-                        break;
-                    }
-                    advance(',');
-                }
-            }
-            advance(')');
-        } else {
-            warning("Missing '()' invoking a constructor.");
-        }
-        return syntax['function'];
-    });
-    syntax['new'].exps = true;
-
-    infix('.', function (left) {
-        adjacent(prevtoken, token);
-        var m = identifier();
-        if (typeof m === 'string') {
-            countMember(m);
-        }
-        if (!option.evil && left && left.value === 'document' &&
-                (m === 'write' || m === 'writeln')) {
-            warning("document.write can be a form of eval.", left);
-        }
-        this.left = left;
-        this.right = m;
-        return this;
-    }, 160);
-
-    infix('(', function (left) {
-        adjacent(prevtoken, token);
-        var n = 0;
-        var p = [];
-        if (left && left.type === '(identifier)') {
-            if (left.value.match(/^[A-Z](.*[a-z].*)?$/)) {
-                if (left.value !== 'Number' && left.value !== 'String' &&
-                        left.value !== 'Boolean' && left.value !== 'Date') {
-                    warning("Missing 'new' prefix when invoking a constructor.",
-                            left);
-                }
-            }
-        }
-        if (nexttoken.id !== ')') {
-            for (;;) {
-                p[p.length] = parse(10);
-                n += 1;
-                if (nexttoken.id !== ',') {
-                    break;
-                }
-                advance(',');
-            }
-        }
-        advance(')');
-        if (typeof left === 'object') {
-            if (left.value === 'parseInt' && n === 1) {
-                warning("Missing radix parameter.", left);
-            }
-            if (!option.evil) {
-                if (left.value === 'eval' || left.value === 'Function') {
-                    warning("eval is evil.", left);
-                } else if (p[0] && p[0].id === '(string)' &&
-                       (left.value === 'setTimeout' ||
-                        left.value === 'setInterval')) {
-                    warning(
-    "Implied eval is evil. Pass a function instead of a string.", p[0]);
-                }
-            }
-            if (!left.identifier && left.id !== '.' &&
-                    left.id !== '[' && left.id !== '(') {
-                warning("Bad invocation.", left);
-            }
-
-        }
-        return syntax['function'];
-    }, 155).exps = true;
-
-    prefix('(', function () {
-        var v = parse(0);
-        advance(')', this);
-        return v;
-    });
-
-    infix('[', function (left) {
-        var e = parse(0), s;
-        if (e && e.type === '(string)') {
-            countMember(e.value);
-            if (ix.test(e.value)) {
-                s = syntax[e.value];
-                if (!s || !s.reserved) {
-                    warning("['{a}'] is better written in dot notation.",
-                            e, e.value);
-                }
-            }
-        }
-        advance(']', this);
-        this.left = left;
-        this.right = e;
-        return this;
-    }, 160);
-
-    prefix('[', function () {
-        if (nexttoken.id === ']') {
-            advance(']');
-            return;
-        }
-        var b = token.line !== nexttoken.line;
-        if (b) {
-            indent += 4;
-        }
-        for (;;) {
-            if (b && token.line !== nexttoken.line) {
-                indentation();
-            }
-            parse(10);
-            if (nexttoken.id === ',') {
-                adjacent(token, nexttoken);
-                advance(',');
-                if (nexttoken.id === ',' || nexttoken.id === ']') {
-                    warning("Extra comma.", token);
-                }
-                nonadjacent(token, nexttoken);
-            } else {
-                if (b) {
-                    indent -= 4;
-                    indentation();
-                }
-                advance(']', this);
-                return;
-            }
-        }
-    }, 160);
-
-    (function (x) {
-        x.nud = function () {
-            var i, s;
-            if (nexttoken.id === '}') {
-                advance('}');
-                return;
-            }
-            var b = token.line !== nexttoken.line;
-            if (b) {
-                indent += 4;
-            }
-            for (;;) {
-                if (b) {
-                    indentation();
-                }
-                i = optionalidentifier(true);
-                if (!i) {
-                    if (nexttoken.id === '(string)') {
-                        i = nexttoken.value;
-                        if (ix.test(i)) {
-                            s = syntax[i];
-                        }
-                        advance();
-                    } else if (nexttoken.id === '(number)') {
-                        i = nexttoken.value.toString();
-                        advance();
-                    } else {
-                        error("Expected '{a}' and instead saw '{b}'.",
-                                nexttoken, '}', nexttoken.value);
-                    }
-                }
-                countMember(i);
-                advance(':');
-                nonadjacent(token, nexttoken);
-                parse(10);
-                if (nexttoken.id === ',') {
-                    adjacent(token, nexttoken);
-                    advance(',');
-                    if (nexttoken.id === ',' || nexttoken.id === '}') {
-                        warning("Extra comma.", token);
-                    }
-                    nonadjacent(token, nexttoken);
-                } else {
-                    if (b) {
-                        indent -= 4;
-                        indentation();
-                    }
-                    advance('}', this);
-                    return;
-                }
-            }
-        };
-        x.fud = function () {
-            error("Expected to see a statement and instead saw a block.");
-        };
-    })(delim('{'));
-
-
-    function varstatement() {
-
-// JavaScript does not have block scope. It only has function scope. So,
-// declaring a variable in a block can have unexpected consequences. We
-// will keep an inblock flag, which will be set when we enter a block, and
-// cleared when we enter a function.
-
-        if (inblock) {
-            warning("{b} {a} declared in a block.",
-                    nexttoken, nexttoken.value, 'variable');
-        }
-        for (;;) {
-            nonadjacent(token, nexttoken);
-            addlabel(identifier(), 'var');
-            if (nexttoken.id === '=') {
-                for (;;) {
-                    nonadjacent(token, nexttoken);
-                    advance('=');
-                    nonadjacent(token, nexttoken);
-                    if (peek(0).id === '=') {
-                        warning("Variable {a} was not declared correctly.",
-                                nexttoken, nexttoken.value);
-                        advance();
-                        addlabel(token.value, 'global');
-                    } else {
-                        parse(20);
-                        break;
-                    }
-                }
-            }
-            if (nexttoken.id !== ',') {
-                return;
-            }
-            adjacent(token, nexttoken);
-            advance(',');
-            nonadjacent(token, nexttoken);
-        }
-    }
-
-
-    stmt('var', varstatement);
-
-    stmt('new', function () {
-        error("'new' should not be used as a statement.");
-    });
-
-
-    function functionparams() {
-        var t = nexttoken;
-        advance('(');
-        if (nexttoken.id === ')') {
-            advance(')');
-            return;
-        }
-        for (;;) {
-            addlabel(identifier(), 'parameter');
-            if (nexttoken.id === ',') {
-                advance(',');
-            } else {
-                advance(')', t);
-                return;
-            }
-        }
-    }
-
-
-    blockstmt('function', function () {
-        var i = identifier();
-        if (inblock) {
-            warning("{b} {a} declared in a block.", token, i, 'function');
-        }
-        addlabel(i, 'var*');
-        beginfunction(i);
-        addlabel(i, 'function');
-        adjacent(token, nexttoken);
-        functionparams();
-        block(false);
-        endfunction();
-        if (nexttoken.id === '(' && nexttoken.line === token.line) {
-            error(
-"Function statements are not invocable. Wrap the function expression in parens.");
-        }
-    });
-
-    prefix('function', function () {
-        var i = optionalidentifier();
-        if (i) {
-            adjacent(token, nexttoken);
-        } else {
-            nonadjacent(token, nexttoken);
-            i = '"' + anonname + '"';
-        }
-        beginfunction(i);
-        addlabel(i, 'function');
-        functionparams();
-        block(false);
-        endfunction();
-    });
-
-    blockstmt('if', function () {
-        var t = nexttoken;
-        advance('(');
-        nonadjacent(this, t);
-        parse(20);
-        if (nexttoken.id === '=') {
-            warning("Assignment in control part.");
-            advance('=');
-            parse(20);
-        }
-        advance(')', t);
-        block(true);
-        if (nexttoken.id === 'else') {
-            nonadjacent(token, nexttoken);
-            advance('else');
-            if (nexttoken.id === 'if' || nexttoken.id === 'switch') {
-                statement();
-            } else {
-                block(true);
-            }
-        }
-    });
-
-    blockstmt('try', function () {
-        var b;
-        block(true);
-        if (nexttoken.id === 'catch') {
-            advance('catch');
-            beginfunction('"catch"');
-            functionparams();
-            block(true);
-            endfunction();
-            b = true;
-        }
-        if (nexttoken.id === 'finally') {
-            advance('finally');
-            beginfunction('"finally"');
-            block(true);
-            endfunction();
-            return;
-        } else if (!b) {
-            error("Expected '{a}' and instead saw '{b}'.",
-                    nexttoken, 'catch', nexttoken.value);
-        }
-    });
-
-    blockstmt('while', function () {
-        var t = nexttoken;
-        advance('(');
-        nonadjacent(this, t);
-        parse(20);
-        if (nexttoken.id === '=') {
-            warning("Assignment in control part.");
-            advance('=');
-            parse(20);
-        }
-        advance(')', t);
-        block(true);
-    }).labelled = true;
-
-    reserve('with');
-
-    blockstmt('switch', function () {
-        var t = nexttoken;
-        var g = false;
-        advance('(');
-        nonadjacent(this, t);
-        this.condition = parse(20);
-        advance(')', t);
-        nonadjacent(token, nexttoken);
-        t = nexttoken;
-        advance('{');
-        nonadjacent(token, nexttoken);
-        indent += 4;
-        this.cases = [];
-        for (;;) {
-            switch (nexttoken.id) {
-            case 'case':
-                switch (verb) {
-                case 'break':
-                case 'case':
-                case 'continue':
-                case 'return':
-                case 'switch':
-                case 'throw':
-                    break;
-                default:
-                    warning(
-                        "Expected a 'break' statement before 'case'.",
-                        token);
-                }
-                indentation(-4);
-                advance('case');
-                this.cases.push(parse(20));
-                g = true;
-                advance(':');
-                verb = 'case';
-                break;
-            case 'default':
-                switch (verb) {
-                case 'break':
-                case 'continue':
-                case 'return':
-                case 'throw':
-                    break;
-                default:
-                    warning(
-                        "Expected a 'break' statement before 'default'.",
-                        token);
-                }
-                indentation(-4);
-                advance('default');
-                g = true;
-                advance(':');
-                break;
-            case '}':
-                indent -= 4;
-                indentation();
-                advance('}', t);
-                if (this.cases.length === 1 || this.condition.id === 'true' ||
-                        this.condition.id === 'false') {
-                    warning("This 'switch' should be an 'if'.", this);
-                }
-                return;
-            case '(end)':
-                error("Missing '{a}'.", nexttoken, '}');
-                return;
-            default:
-                if (g) {
-                    switch (token.id) {
-                    case ',':
-                        error("Each value should have its own case label.");
-                        return;
-                    case ':':
-                        statements();
-                        break;
-                    default:
-                        error("Missing ':' on a case clause.", token);
-                    }
-                } else {
-                    error("Expected '{a}' and instead saw '{b}'.",
-                        nexttoken, 'case', nexttoken.value);
-                }
-            }
-        }
-    }).labelled = true;
-
-    stmt('debugger', function () {
-        if (!option.debug) {
-            warning("All 'debugger' statements should be removed.");
-        }
-    });
-
-    stmt('do', function () {
-        block(true);
-        advance('while');
-        var t = nexttoken;
-        nonadjacent(token, t);
-        advance('(');
-        parse(20);
-        advance(')', t);
-    }).labelled = true;
-
-    blockstmt('for', function () {
-        var t = nexttoken;
-        advance('(');
-        nonadjacent(this, t);
-        if (peek(nexttoken.id === 'var' ? 1 : 0).id === 'in') {
-            if (nexttoken.id === 'var') {
-                advance('var');
-                addlabel(identifier(), 'var');
-            } else {
-                advance();
-            }
-            advance('in');
-            parse(20);
-            advance(')', t);
-            block(true);
-            return;
-        } else {
-            if (nexttoken.id !== ';') {
-                if (nexttoken.id === 'var') {
-                    advance('var');
-                    varstatement();
-                } else {
-                    for (;;) {
-                        parse(0);
-                        if (nexttoken.id !== ',') {
-                            break;
-                        }
-                        advance(',');
-                    }
-                }
-            }
-            advance(';');
-            if (nexttoken.id !== ';') {
-                parse(20);
-            }
-            advance(';');
-            if (nexttoken.id === ';') {
-                error("Expected '{a}' and instead saw '{b}'.",
-                        nexttoken, ')', ';');
-            }
-            if (nexttoken.id !== ')') {
-                for (;;) {
-                    parse(0);
-                    if (nexttoken.id !== ',') {
-                        break;
-                    }
-                    advance(',');
-                }
-            }
-            advance(')', t);
-            block(true);
-        }
-    }).labelled = true;
-
-
-    function nolinebreak(t) {
-        if (t.line !== nexttoken.line) {
-            warning("Line breaking error '{a}'.", t, t.id);
-        }
-    }
-
-
-    stmt('break', function () {
-        nolinebreak(this);
-        if (funlab[nexttoken.value] === 'live*') {
-            advance();
-        }
-        reachable('break');
-    });
-
-
-    stmt('continue', function () {
-        nolinebreak(this);
-        if (funlab[nexttoken.value] === 'live*') {
-            advance();
-        }
-        reachable('continue');
-    });
-
-
-    stmt('return', function () {
-        nolinebreak(this);
-        if (nexttoken.id !== ';' && !nexttoken.reach) {
-            nonadjacent(token, nexttoken);
-            parse(20);
-        }
-        reachable('return');
-    });
-
-
-    stmt('throw', function () {
-        nolinebreak(this);
-        nonadjacent(token, nexttoken);
-        parse(20);
-        reachable('throw');
-    });
-
-
-//  Superfluous reserved words
-
-    reserve('abstract');
-    reserve('boolean');
-    reserve('byte');
-    reserve('char');
-    reserve('class');
-    reserve('const');
-    reserve('double');
-    reserve('enum');
-    reserve('export');
-    reserve('extends');
-    reserve('final');
-    reserve('float');
-    reserve('goto');
-    reserve('implements');
-    reserve('import');
-    reserve('int');
-    reserve('interface');
-    reserve('long');
-    reserve('native');
-    reserve('package');
-    reserve('private');
-    reserve('protected');
-    reserve('public');
-    reserve('short');
-    reserve('static');
-    reserve('super');
-    reserve('synchronized');
-    reserve('throws');
-    reserve('transient');
-    reserve('void');
-    reserve('volatile');
-
-
-    function jsonValue() {
-        function jsonObject() {
-            var t = nexttoken;
-            advance('{');
-            while (nexttoken.id !== '}') {
-                if (nexttoken.id === '(end)') {
-                    error("Missing '}' to match '{' from line {a}.",
-                            nexttoken, t.line + 1);
-                } else if (nexttoken.id !== '(string)') {
-                    warning("Expected a string and instead saw {a}.",
-                            nexttoken, nexttoken.value);
-                } else {
-                    if (nexttoken.quote !== '"') {
-                        warning(
-"Expected double quotes and instead saw single quotes.", nexttoken);
-                    }
-                }
-                advance();
-                advance(':');
-                jsonValue();
-                if (nexttoken.id !== ',') {
-                    break;
-                }
-                advance(',');
-            }
-            advance('}');
-        }
-
-        function jsonArray() {
-            var t = nexttoken;
-            advance('[');
-            while (nexttoken.id !== ']') {
-                if (nexttoken.id === '(end)') {
-                    error("Missing ']' to match '[' from line {a}.",
-                            nexttoken, t.line + 1);
-                }
-                jsonValue();
-                if (nexttoken.id !== ',') {
-                    break;
-                }
-                advance(',');
-            }
-            advance(']');
-        }
-
-        var id = nexttoken.id;
-
-        if (id === '{') {
-            jsonObject();
-        } else if (id === '[') {
-            jsonArray();
-        } else if (id === 'true' || id === 'false' || id === 'null' ||
-                id === '(number)') {
-            advance();
-        } else if (id === '(string)') {
-            if (nexttoken.quote !== '"') {
-                        warning(
-"Expected double quotes and instead saw single quotes.", nexttoken);
-            }
-            advance();
-        } else {
-            error("Expected a JSON value.", nexttoken);
-        }
-    }
-
-
-// The actual JSLINT function itself.
-
-    var itself = function (s, o) {
-        option = o || {};
-        JSLINT.errors = [];
-        globals = {};
-        functions = [];
-        xmode = false;
-        xtype = '';
-        stack = null;
-        funlab = {};
-        member = {};
-        funstack = [];
-        lookahead = [];
-        inblock = false;
-        indent = 0;
-        warnings = 0;
-        lex.init(s);
-        prereg = true;
-
-        prevtoken = token = nexttoken = syntax['(begin)'];
-        try {
-            advance();
-            if (nexttoken.value.charAt(0) === '<') {
-                xml();
-            } else if (nexttoken.id === '{' || nexttoken.id === '[') {
-                option.laxbreak = true;
-                jsonValue();
-            } else {
-                statements();
-            }
-            advance('(end)');
-        } catch (e) {
-            if (e) {
-                JSLINT.errors.push({
-                    reason: "JSLint error: " + e.description,
-                    line: nexttoken.line,
-                    character: nexttoken.from,
-                    evidence: nexttoken.value
-                });
-            }
-        }
-        return JSLINT.errors.length === 0;
-    };
-
-
-// Report generator.
-
-    itself.report = function (option) {
-        var a = [];
-        var c;
-        var cc;
-        var f;
-        var i;
-        var k;
-        var o = [];
-        var s;
-        var v;
-
-        function detail(h) {
-            if (s.length) {
-                o.push('<div>' + h + ':  ' + s.sort().join(', ') +
-                    '</div>');
-            }
-        }
-
-        k = JSLINT.errors.length;
-        if (k) {
-            o.push(
-                '<div id=errors>Error:<blockquote>');
-            for (i = 0; i < k; i += 1) {
-                c = JSLINT.errors[i];
-                if (c) {
-                    o.push('<p>Problem at line ' + (c.line + 1) +
-                            ' character ' + (c.character + 1) +
-                            ': ' + c.reason.entityify() + '</p><p><tt>' +
-                            (c.evidence && (c.evidence.length > 80 ?
-                            c.evidence.substring(0, 77) + '...' :
-                            c.evidence).entityify()) + '</tt></p>');
-                }
-            }
-            o.push('</blockquote></div><br>');
-            if (!c) {
-                return o.join('');
-            }
-        }
-
-        if (!option) {
-            for (k in member) {
-                if (typeof member[k] === 'number') {
-                    a.push(k);
-                }
-            }
-            if (a.length) {
-                a = a.sort();
-                o.push(
-                 '<table><tbody><tr><th>Members</th><th>Occurrences</th></tr>');
-                for (i = 0; i < a.length; i += 1) {
-                    o.push('<tr><td><tt>', a[i].replace(/([\x00-\x1f\\"])/g, function (a, b) {
-                        var c = b.charCodeAt();
-                        return '\\u00' +
-                            Math.floor(c / 16).toString(16) +
-                            (c % 16).toString(16);
-                    }), '</tt></td><td>', member[a[i]], '</td></tr>');
-                }
-                o.push('</tbody></table>');
-            }
-            for (i = 0; i < functions.length; i += 1) {
-                f = functions[i];
-                for (k in f) {
-                    if (f.hasOwnProperty(k) && f[k] === 'global') {
-                        c = f['(context)'];
-                        for (;;) {
-                            cc = c['(context)'];
-                            if (!cc) {
-                                if ((!funlab[k] || funlab[k] === 'var?') &&
-                                        !builtin(k)) {
-                                    funlab[k] = 'var?';
-                                    f[k] = 'global?';
-                                }
-                                break;
-                            }
-                            if (c[k] === 'parameter!' || c[k] === 'var!') {
-                                f[k] = 'var.';
-                                break;
-                            }
-                            if (c[k] === 'var' || c[k] === 'var*' ||
-                                    c[k] === 'var!') {
-                                f[k] = 'var.';
-                                c[k] = 'var!';
-                                break;
-                            }
-                            if (c[k] === 'parameter') {
-                                f[k] = 'var.';
-                                c[k] = 'parameter!';
-                                break;
-                            }
-                            c = cc;
-                        }
-                    }
-                }
-            }
-            s = [];
-            for (k in funlab) {
-                if (funlab.hasOwnProperty(k)) {
-                    c = funlab[k];
-                    if (typeof c === 'string' && c.substr(0, 3) === 'var') {
-                        if (c === 'var?') {
-                            s.push('<tt>' + k + '</tt><small> (?)</small>');
-                        } else {
-                            s.push('<tt>' + k + '</tt>');
-                        }
-                    } else {
-                        if (c === 'global' && !builtin(k)) {
-                            s.push('<tt>' + k + '</tt><small> (?)</small>');
-                        }
-                    }
-                }
-            }
-            detail('Global');
-            if (functions.length) {
-                o.push('<br>Function:<ol style="padding-left:0.5in">');
-            }
-            for (i = 0; i < functions.length; i += 1) {
-                f = functions[i];
-                o.push('<li value=' +
-                        f['(line)'] + '><tt>' + (f['(name)'] || '') + '</tt>');
-                s = [];
-                for (k in f) {
-                    if (f.hasOwnProperty(k) && k.charAt(0) !== '(') {
-                        switch (f[k]) {
-                        case 'parameter':
-                            s.push('<tt>' + k + '</tt>');
-                            break;
-                        case 'parameter!':
-                            s.push('<tt>' + k +
-                                    '</tt><small> (closure)</small>');
-                            break;
-                        }
-                    }
-                }
-                detail('Parameter');
-                s = [];
-                for (k in f) {
-                    if (f.hasOwnProperty(k) && k.charAt(0) !== '(') {
-                        switch (f[k]) {
-                        case 'var':
-                            s.push('<tt>' + k +
-                                    '</tt><small> (unused)</small>');
-                            break;
-                        case 'var*':
-                            s.push('<tt>' + k + '</tt>');
-                            break;
-                        case 'var!':
-                            s.push('<tt>' + k +
-                                    '</tt><small> (closure)</small>');
-                            break;
-                        case 'var.':
-                            s.push('<tt>' + k +
-                                    '</tt><small> (outer)</small>');
-                            break;
-                        }
-                    }
-                }
-                detail('Var');
-                s = [];
-                c = f['(context)'];
-                for (k in f) {
-                    v = f[k];
-                    if (f.hasOwnProperty(k) && k.charAt(0) !== '(' &&
-                            v.substr(0, 6) === 'global') {
-                        if (v === 'global?') {
-                            s.push('<tt>' + k +
-                                    '</tt><small> (?)</small>');
-                        } else {
-                            s.push('<tt>' + k + '</tt>');
-                        }
-                    }
-                }
-                detail('Global');
-                s = [];
-                for (k in f) {
-                    if (f.hasOwnProperty(k) && k.charAt(0) !== '(' && f[k] === 'label') {
-                        s.push(k);
-                    }
-                }
-                detail('Label');
-                o.push('</li>');
-            }
-            if (functions.length) {
-                o.push('</ol>');
-            }
-        }
-        return o.join('');
-    };
-
-    return itself;
-
-}();
\ No newline at end of file
diff --git a/utils/jsmin b/utils/jsmin
deleted file mode 100755
index 1b5dba8..0000000
Binary files a/utils/jsmin and /dev/null differ
diff --git a/utils/jsmin.c b/utils/jsmin.c
deleted file mode 100644
index 84eb97a..0000000
--- a/utils/jsmin.c
+++ /dev/null
@@ -1,274 +0,0 @@
-/* jsmin.c
-   2007-05-22
-
-Copyright (c) 2002 Douglas Crockford  (www.crockford.com)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-
-static int   theA;
-static int   theB;
-static int   theLookahead = EOF;
-
-
-/* isAlphanum -- return true if the character is a letter, digit, underscore,
-        dollar sign, or non-ASCII character.
-*/
-
-static int
-isAlphanum(int c)
-{
-    return ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') ||
-        (c >= 'A' && c <= 'Z') || c == '_' || c == '$' || c == '\\' ||
-        c > 126);
-}
-
-
-/* get -- return the next character from stdin. Watch out for lookahead. If
-        the character is a control character, translate it to a space or
-        linefeed.
-*/
-
-static int
-get()
-{
-    int c = theLookahead;
-    theLookahead = EOF;
-    if (c == EOF) {
-        c = getc(stdin);
-    }
-    if (c >= ' ' || c == '\n' || c == EOF) {
-        return c;
-    }
-    if (c == '\r') {
-        return '\n';
-    }
-    return ' ';
-}
-
-
-/* peek -- get the next character without getting it.
-*/
-
-static int
-peek()
-{
-    theLookahead = get();
-    return theLookahead;
-}
-
-
-/* next -- get the next character, excluding comments. peek() is used to see
-        if a '/' is followed by a '/' or '*'.
-*/
-
-static int
-next()
-{
-    int c = get();
-    if  (c == '/') {
-        switch (peek()) {
-        case '/':
-            for (;;) {
-                c = get();
-                if (c <= '\n') {
-                    return c;
-                }
-            }
-        case '*':
-            get();
-            for (;;) {
-                switch (get()) {
-                case '*':
-                    if (peek() == '/') {
-                        get();
-                        return ' ';
-                    }
-                    break;
-                case EOF:
-                    fprintf(stderr, "Error: JSMIN Unterminated comment.\n");
-                    exit(1);
-                }
-            }
-        default:
-            return c;
-        }
-    }
-    return c;
-}
-
-
-/* action -- do something! What you do is determined by the argument:
-        1   Output A. Copy B to A. Get the next B.
-        2   Copy B to A. Get the next B. (Delete A).
-        3   Get the next B. (Delete B).
-   action treats a string as a single character. Wow!
-   action recognizes a regular expression if it is preceded by ( or , or =.
-*/
-
-static void
-action(int d)
-{
-    switch (d) {
-    case 1:
-        putc(theA, stdout);
-    case 2:
-        theA = theB;
-        if (theA == '\'' || theA == '"') {
-            for (;;) {
-                putc(theA, stdout);
-                theA = get();
-                if (theA == theB) {
-                    break;
-                }
-                if (theA <= '\n') {
-                    fprintf(stderr,
-"Error: JSMIN unterminated string literal: %c\n", theA);
-                    exit(1);
-                }
-                if (theA == '\\') {
-                    putc(theA, stdout);
-                    theA = get();
-                }
-            }
-        }
-    case 3:
-        theB = next();
-        if (theB == '/' && (theA == '(' || theA == ',' || theA == '=' ||
-                            theA == ':' || theA == '[' || theA == '!' || 
-                            theA == '&' || theA == '|' || theA == '?' || 
-                            theA == '{' || theA == '}' || theA == ';' || 
-                            theA == '\n')) {
-            putc(theA, stdout);
-            putc(theB, stdout);
-            for (;;) {
-                theA = get();
-                if (theA == '/') {
-                    break;
-                } else if (theA =='\\') {
-                    putc(theA, stdout);
-                    theA = get();
-                } else if (theA <= '\n') {
-                    fprintf(stderr,
-"Error: JSMIN unterminated Regular Expression literal.\n", theA);
-                    exit(1);
-                }
-                putc(theA, stdout);
-            }
-            theB = next();
-        }
-    }
-}
-
-
-/* jsmin -- Copy the input to the output, deleting the characters which are
-        insignificant to JavaScript. Comments will be removed. Tabs will be
-        replaced with spaces. Carriage returns will be replaced with linefeeds.
-        Most spaces and linefeeds will be removed.
-*/
-
-static void
-jsmin()
-{
-    theA = '\n';
-    action(3);
-    while (theA != EOF) {
-        switch (theA) {
-        case ' ':
-            if (isAlphanum(theB)) {
-                action(1);
-            } else {
-                action(2);
-            }
-            break;
-        case '\n':
-            switch (theB) {
-            case '{':
-            case '[':
-            case '(':
-            case '+':
-            case '-':
-                action(1);
-                break;
-            case ' ':
-                action(3);
-                break;
-            default:
-                if (isAlphanum(theB)) {
-                    action(1);
-                } else {
-                    action(2);
-                }
-            }
-            break;
-        default:
-            switch (theB) {
-            case ' ':
-                if (isAlphanum(theA)) {
-                    action(1);
-                    break;
-                }
-                action(3);
-                break;
-            case '\n':
-                switch (theA) {
-                case '}':
-                case ']':
-                case ')':
-                case '+':
-                case '-':
-                case '"':
-                case '\'':
-                    action(1);
-                    break;
-                default:
-                    if (isAlphanum(theA)) {
-                        action(1);
-                    } else {
-                        action(3);
-                    }
-                }
-                break;
-            default:
-                action(1);
-                break;
-            }
-        }
-    }
-}
-
-
-/* main -- Output any command line arguments as comments
-        and then minify the input.
-*/
-extern int
-main(int argc, char* argv[])
-{
-    int i;
-    for (i = 1; i < argc; i += 1) {
-        fprintf(stdout, "// %s\n", argv[i]);
-    }
-    jsmin();
-    return 0;
-}
diff --git a/utils/rhino.js b/utils/rhino.js
deleted file mode 100644
index 580f40b..0000000
--- a/utils/rhino.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// rhino.js
-// 2007-02-19
-/*
-Copyright (c) 2002 Douglas Crockford  (www.JSLint.com) Rhino Edition
-*/
-
-// This is the Rhino companion to fulljslint.js.
-
-/*extern JSLINT */
-
-(function (a) {
-    if (!a[0]) {
-        print("Usage: jslint.js file.js");
-        quit(1);
-    }
-    var input = readFile(a[0]);
-    if (!input) {
-        print("jslint: Couldn't open file '" + a[0] + "'.");
-        quit(1);
-    }
-    if (!JSLINT(input, {rhino: true, passfail: false})) {
-        for (var i = 0; i < JSLINT.errors.length; i += 1) {
-            var e = JSLINT.errors[i];
-            if (e) {
-                print('Lint at line ' + (e.line + 1) + ' character ' +
-                        (e.character + 1) + ': ' + e.reason);
-                print((e.evidence || '').
-                        replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1"));
-                print('');
-            }
-        }
-    } else {
-        print("jslint: No problems found in " + a[0]);
-        quit();
-    }
-})(arguments);
\ No newline at end of file

-- 
jsjac package from xmpp team



More information about the Pkg-xmpp-commits mailing list