Web Inspector: Add PrettyPrinter CSS tests
[WebKit-https.git] / Source / WebInspectorUI / Tools / PrettyPrinting / FormatterDebug.js
1 Formatter.prototype.debug = function(from, to)
2 {
3     var debug = "";
4     var outerMode = this._codeMirror.getMode();
5     var content = this._codeMirror.getRange(from, to);
6     var state = CodeMirror.copyState(outerMode, this._codeMirror.getTokenAt(from).state);
7
8     function pad(str, x, doNotQuote)
9     {
10         var result = doNotQuote ? str : "'" + str + "'";
11         for (var toPad = x - result.length; toPad > 0; --toPad)
12             result += " ";
13         return result;
14     }
15
16     function debugToken(mode, token, state, stream, originalPosition, startOfNewLine)
17     {
18         // Token Type
19         debug += "Token: " + pad(String(token), 14, !token);
20
21         // Original Position
22         debug += "Position: " + pad(String(originalPosition), 10);
23
24         // Language Specific Info
25         if (state.lexical) {
26             // JavaScript
27             debug += "Lexical: " + pad(String(state.lexical.type), 10); // JavaScript
28             debug += "Prev: " + pad(String(state.lexical.prev ? state.lexical.prev.type : state.lexical.prev), 10, !state.lexical.prev);
29         } else if (state.state) {
30             // CSS
31             debug += "State: " + pad(String(state.state), 16);
32         }
33
34         // String
35         debug += "Current: '" + stream.current() + "'\n";
36     }
37
38     var lineOffset = 0;
39     var lines = content.split("\n");
40     for (var i = 0; i < lines.length; ++i) {
41         var line = lines[i];
42         var startOfNewLine = true;
43         var stream = new CodeMirror.StringStream(line);
44         while (!stream.eol()) {
45             var innerMode = CodeMirror.innerMode(outerMode, state);
46             var token = outerMode.token(stream, state);
47             debugToken(innerMode.mode, token, state, stream, lineOffset + stream.start, startOfNewLine);
48             stream.start = stream.pos;
49             startOfNewLine = false;
50         }
51     }
52
53     return debug;
54 };