| /*--------------------------------------------------------------------------------------------- |
| * Copyright (c) Microsoft Corporation. All rights reserved. |
| * Licensed under the MIT License. See License.txt in the project root for license information. |
| *--------------------------------------------------------------------------------------------*/ |
| (function (factory) { |
| if (typeof module === "object" && typeof module.exports === "object") { |
| var v = factory(require, exports); |
| if (v !== undefined) module.exports = v; |
| } |
| else if (typeof define === "function" && define.amd) { |
| define(["require", "exports", "../parser/htmlScanner", "vscode-languageserver-types", "../htmlLanguageTypes"], factory); |
| } |
| })(function (require, exports) { |
| "use strict"; |
| Object.defineProperty(exports, "__esModule", { value: true }); |
| var htmlScanner_1 = require("../parser/htmlScanner"); |
| var vscode_languageserver_types_1 = require("vscode-languageserver-types"); |
| var htmlLanguageTypes_1 = require("../htmlLanguageTypes"); |
| function findDocumentHighlights(document, position, htmlDocument) { |
| var offset = document.offsetAt(position); |
| var node = htmlDocument.findNodeAt(offset); |
| if (!node.tag) { |
| return []; |
| } |
| var result = []; |
| var startTagRange = getTagNameRange(htmlLanguageTypes_1.TokenType.StartTag, document, node.start); |
| var endTagRange = typeof node.endTagStart === 'number' && getTagNameRange(htmlLanguageTypes_1.TokenType.EndTag, document, node.endTagStart); |
| if (startTagRange && covers(startTagRange, position) || endTagRange && covers(endTagRange, position)) { |
| if (startTagRange) { |
| result.push({ kind: vscode_languageserver_types_1.DocumentHighlightKind.Read, range: startTagRange }); |
| } |
| if (endTagRange) { |
| result.push({ kind: vscode_languageserver_types_1.DocumentHighlightKind.Read, range: endTagRange }); |
| } |
| } |
| return result; |
| } |
| exports.findDocumentHighlights = findDocumentHighlights; |
| function isBeforeOrEqual(pos1, pos2) { |
| return pos1.line < pos2.line || (pos1.line === pos2.line && pos1.character <= pos2.character); |
| } |
| function covers(range, position) { |
| return isBeforeOrEqual(range.start, position) && isBeforeOrEqual(position, range.end); |
| } |
| function getTagNameRange(tokenType, document, startOffset) { |
| var scanner = htmlScanner_1.createScanner(document.getText(), startOffset); |
| var token = scanner.scan(); |
| while (token !== htmlLanguageTypes_1.TokenType.EOS && token !== tokenType) { |
| token = scanner.scan(); |
| } |
| if (token !== htmlLanguageTypes_1.TokenType.EOS) { |
| return { start: document.positionAt(scanner.getTokenOffset()), end: document.positionAt(scanner.getTokenEnd()) }; |
| } |
| return null; |
| } |
| }); |