diff options
Diffstat (limited to 'Source/WebInspectorUI/Tools/PrettyPrinting/FormatterDebug.js')
-rw-r--r-- | Source/WebInspectorUI/Tools/PrettyPrinting/FormatterDebug.js | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/Source/WebInspectorUI/Tools/PrettyPrinting/FormatterDebug.js b/Source/WebInspectorUI/Tools/PrettyPrinting/FormatterDebug.js new file mode 100644 index 000000000..4374e993c --- /dev/null +++ b/Source/WebInspectorUI/Tools/PrettyPrinting/FormatterDebug.js @@ -0,0 +1,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; +} |