Changeset 147030 in webkit


Ignore:
Timestamp:
Mar 27, 2013 5:14:34 PM (11 years ago)
Author:
commit-queue@webkit.org
Message:

Web Inspector: [DTE] implement "tokenAtTextPosition" method
https://bugs.webkit.org/show_bug.cgi?id=113390

Patch by Andrey Lushnikov <lushnikov@chromium.org> on 2013-03-27
Reviewed by Pavel Feldman.

Source/WebCore:

Test: inspector/editor/text-editor-token-at-position.html

  • Add TextEditor.tokenAtTextPosition method
  • Implement tokenAtTextPosition method in DefaultTextEditor
  • inspector/front-end/DefaultTextEditor.js:

(WebInspector.DefaultTextEditor.prototype.tokenAtTextPosition):
(WebInspector.TextEditorMainPanel.prototype.compare):
(WebInspector.TextEditorMainPanel.prototype.tokenAtTextPosition):
(WebInspector.TextEditorMainPanel.prototype._tokenAtUnhighlightedLine):
(WebInspector.TextEditorMainPanel.prototype.set mimeType):
(WebInspector.TextEditorMainPanel.prototype.get mimeType):

  • inspector/front-end/TextEditor.js:

(WebInspector.TextEditor.prototype.tokenAtTextPosition):

  • inspector/front-end/TextEditorHighlighter.js:

(WebInspector.TextEditorHighlighter):
(WebInspector.TextEditorHighlighter.prototype.get mimeType):
(WebInspector.TextEditorHighlighter.prototype.set mimeType):

LayoutTests:

Add a test to verify TextEditor.tokenAtTextPosition method.

  • inspector/editor/text-editor-token-at-position-expected.txt: Added.
  • inspector/editor/text-editor-token-at-position.html: Added.
Location:
trunk
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r147028 r147030  
     12013-03-27  Andrey Lushnikov  <lushnikov@chromium.org>
     2
     3        Web Inspector: [DTE] implement "tokenAtTextPosition" method
     4        https://bugs.webkit.org/show_bug.cgi?id=113390
     5
     6        Reviewed by Pavel Feldman.
     7
     8        Add a test to verify TextEditor.tokenAtTextPosition method.
     9
     10        * inspector/editor/text-editor-token-at-position-expected.txt: Added.
     11        * inspector/editor/text-editor-token-at-position.html: Added.
     12
    1132013-03-27  Sergey Ryazanov  <serya@chromium.org>
    214
  • trunk/Source/WebCore/ChangeLog

    r147029 r147030  
     12013-03-27  Andrey Lushnikov  <lushnikov@chromium.org>
     2
     3        Web Inspector: [DTE] implement "tokenAtTextPosition" method
     4        https://bugs.webkit.org/show_bug.cgi?id=113390
     5
     6        Reviewed by Pavel Feldman.
     7
     8        Test: inspector/editor/text-editor-token-at-position.html
     9
     10        - Add TextEditor.tokenAtTextPosition method
     11        - Implement tokenAtTextPosition method in DefaultTextEditor
     12
     13        * inspector/front-end/DefaultTextEditor.js:
     14        (WebInspector.DefaultTextEditor.prototype.tokenAtTextPosition):
     15        (WebInspector.TextEditorMainPanel.prototype.compare):
     16        (WebInspector.TextEditorMainPanel.prototype.tokenAtTextPosition):
     17        (WebInspector.TextEditorMainPanel.prototype._tokenAtUnhighlightedLine):
     18        (WebInspector.TextEditorMainPanel.prototype.set mimeType):
     19        (WebInspector.TextEditorMainPanel.prototype.get mimeType):
     20        * inspector/front-end/TextEditor.js:
     21        (WebInspector.TextEditor.prototype.tokenAtTextPosition):
     22        * inspector/front-end/TextEditorHighlighter.js:
     23        (WebInspector.TextEditorHighlighter):
     24        (WebInspector.TextEditorHighlighter.prototype.get mimeType):
     25        (WebInspector.TextEditorHighlighter.prototype.set mimeType):
     26
    1272013-03-27  Charles Wei  <charles.wei@torchmobile.com.cn>
    228
  • trunk/Source/WebCore/inspector/front-end/DefaultTextEditor.js

    r147025 r147030  
    124124    },
    125125    /**
     126     * @param {number} lineNumber
     127     * @param {number} column
     128     * @return {?{startColumn: number, endColumn: number, type: string}}
     129     */
     130    tokenAtTextPosition: function(lineNumber, column)
     131    {
     132        return this._mainPanel.tokenAtTextPosition(lineNumber, column);
     133    },
     134
     135    /**
    126136     * @param {WebInspector.TextRange} range
    127137     * @return {string}
     
    14071417
    14081418WebInspector.TextEditorMainPanel.prototype = {
     1419    /**
     1420     * @param {number} lineNumber
     1421     * @param {number} column
     1422     * @return {?{startColumn: number, endColumn: number, type: string}}
     1423     */
     1424    tokenAtTextPosition: function(lineNumber, column)
     1425    {
     1426        if (lineNumber >= this._textModel.linesCount || lineNumber < 0)
     1427            return null;
     1428        var line = this._textModel.line(lineNumber);
     1429        if (column >= line.length || column < 0)
     1430            return null;
     1431        var highlight = this._textModel.getAttribute(lineNumber, "highlight");
     1432        if (!highlight)
     1433            return this._tokenAtUnhighlightedLine(line, column);
     1434        function compare(value, object)
     1435        {
     1436            if (value >= object.startColumn && value <= object.endColumn)
     1437                return 0;
     1438            return value - object.startColumn;
     1439        }
     1440        var index = binarySearch(column, highlight.ranges, compare);
     1441        if (index >= 0) {
     1442            var range = highlight.ranges[index];
     1443            return {
     1444                startColumn: range.startColumn,
     1445                endColumn: range.endColumn,
     1446                type: range.token
     1447            };
     1448        }
     1449        return null;
     1450    },
     1451
     1452    /**
     1453     * @param {string} line
     1454     * @param {number} column
     1455     * @return {?{startColumn: number, endColumn: number, type: string}}
     1456     */
     1457    _tokenAtUnhighlightedLine: function(line, column)
     1458    {
     1459        var tokenizer = WebInspector.SourceTokenizer.Registry.getInstance().getTokenizer(this.mimeType);
     1460        tokenizer.condition = tokenizer.createInitialCondition();
     1461        tokenizer.line = line;
     1462        var lastTokenizedColumn = 0;
     1463        while (lastTokenizedColumn < line.length) {
     1464            var newColumn = tokenizer.nextToken(lastTokenizedColumn);
     1465            if (column < newColumn) {
     1466                if (!tokenizer.tokenType)
     1467                    return null;
     1468                return {
     1469                    startColumn: lastTokenizedColumn,
     1470                    endColumn: newColumn - 1,
     1471                    type: tokenizer.tokenType
     1472                };
     1473            } else
     1474                lastTokenizedColumn = newColumn;
     1475        }
     1476        return null;
     1477    },
     1478
    14091479    _registerShortcuts: function()
    14101480    {
     
    16221692    {
    16231693        this._highlighter.mimeType = mimeType;
     1694    },
     1695
     1696    get mimeType()
     1697    {
     1698        return this._highlighter.mimeType;
    16241699    },
    16251700
  • trunk/Source/WebCore/inspector/front-end/TextEditor.js

    r146971 r147030  
    4747    markClean: function() { },
    4848    /**
     49     * @param {number} lineNumber
     50     * @param {number} column
     51     * @return {?{startColumn: number, endColumn: number, type: string}}
     52     */
     53    tokenAtTextPosition: function(lineNumber, column) { },
     54
     55    /**
    4956     * @param {string} mimeType
    5057     */
  • trunk/Source/WebCore/inspector/front-end/TextEditorHighlighter.js

    r142091 r147030  
    3636{
    3737    this._textModel = textModel;
    38     this._tokenizer = WebInspector.SourceTokenizer.Registry.getInstance().getTokenizer("text/html");
     38    this._mimeType = "text/html";
     39    this._tokenizer = WebInspector.SourceTokenizer.Registry.getInstance().getTokenizer(this._mimeType);
    3940    this._damageCallback = damageCallback;
    4041    this._highlightChunkLimit = 1000;
     
    4546
    4647WebInspector.TextEditorHighlighter.prototype = {
     48
     49    get mimeType()
     50    {
     51        return this._mimeType;
     52    },
     53
     54    /**
     55     * @param {string} mimeType
     56     */
    4757    set mimeType(mimeType)
    4858    {
    4959        var tokenizer = WebInspector.SourceTokenizer.Registry.getInstance().getTokenizer(mimeType);
    50         if (tokenizer)
     60        if (tokenizer) {
    5161            this._tokenizer = tokenizer;
     62            this._mimeType = mimeType;
     63        }
    5264    },
    5365
Note: See TracChangeset for help on using the changeset viewer.