File: FormatterDebug.js

package info (click to toggle)
qtwebkit-opensource-src 5.3.2%2Bdfsg-2~bpo70%2B1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy-backports
  • size: 291,472 kB
  • sloc: cpp: 1,358,084; python: 70,286; ansic: 42,964; perl: 35,474; ruby: 12,229; objc: 9,465; xml: 8,396; asm: 3,866; yacc: 2,397; sh: 1,647; makefile: 644; lex: 644; java: 110
file content (52 lines) | stat: -rw-r--r-- 1,858 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Formatter.prototype.debug = function(from, to)
{
    var debug = "";
    var outerMode = this._codeMirror.getMode();
    var content = this._codeMirror.getRange(from, to);
    var state = CodeMirror.copyState(outerMode, this._codeMirror.getTokenAt(from).state);

    function pad(str, x, doNotQuote)
    {
        var result = doNotQuote ? str : "'" + str + "'";
        for (var toPad = x - result.length; toPad > 0; --toPad)
            result += " ";
        return result;
    }

    function debugToken(mode, token, state, stream, originalPosition, startOfNewLine)
    {
        // Token Type
        debug += "Token: " + pad(String(token), 14, !token);

        // Original Position
        debug += "Position: " + pad(String(originalPosition), 10);

        // Language Specific Info
        if (state.lexical) {
            debug += "Lexical: " + pad(String(state.lexical.type), 10); // JavaScript
            debug += "Prev: " + pad(String(state.lexical.prev ? state.lexical.prev.type : state.lexical.prev), 10, !state.lexical.prev);
        }
        else if (state.stack)
            debug += "Stack: " + pad(String(state.stack[state.stack.length-1]), 16); // CSS

        // String
        debug += "Current: '" + stream.current() + "'\n";
    }

    var lineOffset = 0;
    var lines = content.split("\n");
    for (var i = 0; i < lines.length; ++i) {
        var line = lines[i];
        var startOfNewLine = true;
        var stream = new CodeMirror.StringStream(line);
        while (!stream.eol()) {
            var innerMode = CodeMirror.innerMode(outerMode, state);
            var token = outerMode.token(stream, state);
            debugToken(innerMode.mode, token, state, stream, lineOffset + stream.start, startOfNewLine);
            stream.start = stream.pos;
            startOfNewLine = false;
        }
    }

    return debug;
}