From e850643b1b8dca8cfdc12705be51441197cd987a Mon Sep 17 00:00:00 2001 From: Matthieu Riegler Date: Fri, 20 Feb 2026 17:54:47 +0100 Subject: [PATCH] feat(compiler): Support comments in html element. ```
``` --- .../vsix_package_contents.txt | 1 + packages/compiler/src/ml_parser/lexer.ts | 38 +- .../test/ml_parser/inline_comment_spec.ts | 145 +++++++ vscode-ng-language-service/package.json | 11 +- .../syntaxes/src/template-tag.ts | 38 ++ .../template-tag-language-configuration.json | 5 + .../syntaxes/template-tag.json | 63 +++ .../syntaxes/test/data/template-tag.html | 12 + .../syntaxes/test/data/template-tag.html.snap | 410 +++++++++++++----- 9 files changed, 611 insertions(+), 112 deletions(-) create mode 100644 packages/compiler/test/ml_parser/inline_comment_spec.ts create mode 100644 vscode-ng-language-service/syntaxes/template-tag-language-configuration.json diff --git a/goldens/vscode-extension/vsix_package_contents.txt b/goldens/vscode-extension/vsix_package_contents.txt index bfb1389c44d..c8b1173cdf8 100644 --- a/goldens/vscode-extension/vsix_package_contents.txt +++ b/goldens/vscode-extension/vsix_package_contents.txt @@ -23,5 +23,6 @@ syntaxes/inline-styles.json syntaxes/inline-template.json syntaxes/let-declaration.json syntaxes/template-blocks.json +syntaxes/template-tag-language-configuration.json syntaxes/template-tag.json syntaxes/template.json \ No newline at end of file diff --git a/packages/compiler/src/ml_parser/lexer.ts b/packages/compiler/src/ml_parser/lexer.ts index 013b2eb1505..a1553abae32 100644 --- a/packages/compiler/src/ml_parser/lexer.ts +++ b/packages/compiler/src/ml_parser/lexer.ts @@ -804,6 +804,28 @@ class _Tokenizer { return [prefix, name]; } + private _consumeSingleLineComment() { + this._attemptCharCodeUntilFn((code) => chars.isNewLine(code) || code === chars.$EOF); + this._attemptCharCodeUntilFn(isNotWhitespace); + } + + private _consumeMultiLineComment() { + this._attemptCharCodeUntilFn((code) => { + if (code === chars.$EOF) { + return true; + } + if (code === chars.$STAR) { + const next = this._cursor.clone(); + next.advance(); + return next.peek() === chars.$SLASH; + } + return false; + }); + if (this._attemptStr('*/')) { + this._attemptCharCodeUntilFn(isNotWhitespace); + } + } + private _consumeTagOpen(start: CharacterCursor) { let tagName: string; let prefix: string; @@ -840,7 +862,21 @@ class _Tokenizer { this._attemptCharCodeUntilFn(isNotWhitespace); } - while (!isAttributeTerminator(this._cursor.peek())) { + while (true) { + if (this._attemptStr('//')) { + this._consumeSingleLineComment(); + continue; + } + + if (this._attemptStr('/*')) { + this._consumeMultiLineComment(); + continue; + } + + if (isAttributeTerminator(this._cursor.peek())) { + break; + } + if (this._selectorlessEnabled && this._cursor.peek() === chars.$AT) { const start = this._cursor.clone(); const nameStart = start.clone(); diff --git a/packages/compiler/test/ml_parser/inline_comment_spec.ts b/packages/compiler/test/ml_parser/inline_comment_spec.ts new file mode 100644 index 00000000000..51d688be235 --- /dev/null +++ b/packages/compiler/test/ml_parser/inline_comment_spec.ts @@ -0,0 +1,145 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import * as html from '../../src/ml_parser/ast'; +import {Parser} from '../../src/ml_parser/parser'; +import {TagContentType} from '../../src/ml_parser/tags'; + +describe('Inline comments in attributes', () => { + const parser = new Parser((tagName) => ({ + closedByParent: false, + implicitNamespacePrefix: null, + isVoid: false, + ignoreFirstLf: false, + canSelfClose: false, + preventNamespaceInheritance: false, + isClosedByChild: () => false, + getContentType: () => TagContentType.PARSABLE_DATA, + })); + + it('should ignore single line comments between attributes', () => { + const source = ` +
+ `; + const result = parser.parse(source, 'url'); + expect(result.errors.length).toBe(0); + const element = result.rootNodes.find((n) => n instanceof html.Element) as html.Element; + expect(element.attrs.length).toBe(2); + expect(element.attrs[0].name).toBe('attr1'); + expect(element.attrs[1].name).toBe('attr2'); + }); + + it('should ignore single line comments between inputs and outputs', () => { + const source = ` +
+ `; + const result = parser.parse(source, 'url'); + expect(result.errors.length).toBe(0); + const element = result.rootNodes.find((n) => n instanceof html.Element) as html.Element; + expect(element.attrs.length).toBe(2); + expect(element.attrs[0].name).toBe('[input]'); + expect(element.attrs[1].name).toBe('(output)'); + }); + + it('should ignore single line comments at the end of tag', () => { + const source = `
`; + const result = parser.parse(source, 'url'); + expect(result.errors.length).toBe(0); + const element = result.rootNodes.find((n) => n instanceof html.Element) as html.Element; + expect(element.attrs.length).toBe(1); + expect(element.attrs[0].name).toBe('attr1'); + }); + + it('should handle commented out attribute', () => { + const source = `
`; + const result = parser.parse(source, 'url'); + expect(result.errors.length).toBe(0); + const element = result.rootNodes.find((n) => n instanceof html.Element) as html.Element; + expect(element.attrs.length).toBe(1); + expect(element.attrs[0].name).toBe('attr2'); + }); + + it('should comment an attribute with a // on a new line', () => { + const source = `
`; + const result = parser.parse(source, 'url'); + expect(result.errors.length).toBe(0); + const element = result.rootNodes.find((n) => n instanceof html.Element) as html.Element; + expect(element.attrs.length).toBe(1); + expect(element.attrs[0].name).toBe('attr2'); + }); + + it('should ignore multi-line comments between attributes', () => { + const source = ` +
+ `; + const result = parser.parse(source, 'url'); + expect(result.errors.length).toBe(0); + const element = result.rootNodes.find((n) => n instanceof html.Element) as html.Element; + expect(element.attrs.length).toBe(2); + expect(element.attrs[0].name).toBe('attr1'); + expect(element.attrs[1].name).toBe('attr2'); + }); + + it('should ignore multi-line comments at the end of tag', () => { + const source = `
`; + const result = parser.parse(source, 'url'); + expect(result.errors.length).toBe(0); + const element = result.rootNodes.find((n) => n instanceof html.Element) as html.Element; + expect(element.attrs.length).toBe(1); + expect(element.attrs[0].name).toBe('attr1'); + }); + + it('should handle * inside multi-line comments', () => { + const source = `
`; + const result = parser.parse(source, 'url'); + expect(result.errors.length).toBe(0); + const element = result.rootNodes.find((n) => n instanceof html.Element) as html.Element; + expect(element.attrs.length).toBe(2); + expect(element.attrs[0].name).toBe('attr1'); + expect(element.attrs[1].name).toBe('attr2'); + }); + + it('should maintain correct source spans with comments', () => { + const source = `
`; + const result = parser.parse(source, 'url'); + expect(result.errors.length).toBe(0); + const element = result.rootNodes.find((n) => n instanceof html.Element) as html.Element; + expect(element.attrs.length).toBe(2); + + const attr1 = element.attrs[0]; + expect(attr1.name).toBe('attr1'); + expect(attr1.sourceSpan.start.offset).toBe(5); + expect(attr1.sourceSpan.end.offset).toBe(14); + + const attr2 = element.attrs[1]; + expect(attr2.name).toBe('attr2'); + expect(attr2.sourceSpan.start.offset).toBe(29); + expect(attr2.sourceSpan.end.offset).toBe(38); + }); +}); diff --git a/vscode-ng-language-service/package.json b/vscode-ng-language-service/package.json index 1e995916287..355c81a41a9 100644 --- a/vscode-ng-language-service/package.json +++ b/vscode-ng-language-service/package.json @@ -361,7 +361,10 @@ "injectTo": [ "text.html.derivative", "source.ts" - ] + ], + "embeddedLanguages": { + "template.tag.ng": "angular-tag-comment" + } }, { "path": "./syntaxes/expression.json", @@ -373,6 +376,12 @@ "fileMatch": "tsconfig*.json", "url": "./schemas/tsconfig-ng.schema.json" } + ], + "languages": [ + { + "id": "angular-tag-comment", + "configuration": "./syntaxes/template-tag-language-configuration.json" + } ] }, "activationEvents": [ diff --git a/vscode-ng-language-service/syntaxes/src/template-tag.ts b/vscode-ng-language-service/syntaxes/src/template-tag.ts index caa5052cd7e..63b3256dfea 100644 --- a/vscode-ng-language-service/syntaxes/src/template-tag.ts +++ b/vscode-ng-language-service/syntaxes/src/template-tag.ts @@ -12,12 +12,34 @@ export const TemplateTag: GrammarDefinition = { scopeName: 'template.tag.ng', injectionSelector: 'L:text.html#meta.tag -comment', patterns: [ + {include: '#inlineComments'}, {include: '#twoWayBinding'}, {include: '#propertyBinding'}, {include: '#eventBinding'}, {include: '#templateBinding'}, + {include: '#standardAttribute'}, + {include: '#other'}, ], repository: { + other: { + match: /\s+/, + name: 'template.tag.ng', + }, + standardAttribute: { + begin: /([-_a-zA-Z0-9.$:]+)(=)(["'])/, + beginCaptures: { + 1: {name: 'entity.other.attribute-name.html'}, + 2: {name: 'punctuation.separator.key-value.html'}, + 3: {name: 'string.quoted.html punctuation.definition.string.begin.html'}, + }, + // @ts-ignore + end: /\3/, + endCaptures: { + 0: {name: 'string.quoted.html punctuation.definition.string.end.html'}, + }, + name: 'meta.attribute.standard.html', + patterns: [{include: 'expression.ng'}], + }, propertyBinding: { begin: /(\[\s*@?(?:[-_a-zA-Z0-9.$]+|\[[^\[\]]*]|\([^()]*\))*%?\s*])(=)(["'])/, beginCaptures: { @@ -119,5 +141,21 @@ export const TemplateTag: GrammarDefinition = { }, ], }, + inlineComments: { + patterns: [ + { + begin: /\/\*/, + captures: {0: {name: 'punctuation.definition.comment.ts'}}, + name: 'comment.block.ts', + end: /\*\//, + }, + { + begin: /\/\//, + beginCaptures: {0: {name: 'punctuation.definition.comment.ts'}}, + name: 'comment.line.double-slash.ts', + end: /(?=$)/, + }, + ], + }, }, }; diff --git a/vscode-ng-language-service/syntaxes/template-tag-language-configuration.json b/vscode-ng-language-service/syntaxes/template-tag-language-configuration.json new file mode 100644 index 00000000000..0ad68a2e807 --- /dev/null +++ b/vscode-ng-language-service/syntaxes/template-tag-language-configuration.json @@ -0,0 +1,5 @@ +{ + "comments": { + "blockComment": ["/*", "*/"] + } +} diff --git a/vscode-ng-language-service/syntaxes/template-tag.json b/vscode-ng-language-service/syntaxes/template-tag.json index 21fc998eb75..b582d018f14 100644 --- a/vscode-ng-language-service/syntaxes/template-tag.json +++ b/vscode-ng-language-service/syntaxes/template-tag.json @@ -2,6 +2,9 @@ "scopeName": "template.tag.ng", "injectionSelector": "L:text.html#meta.tag -comment", "patterns": [ + { + "include": "#inlineComments" + }, { "include": "#twoWayBinding" }, @@ -13,9 +16,45 @@ }, { "include": "#templateBinding" + }, + { + "include": "#standardAttribute" + }, + { + "include": "#other" } ], "repository": { + "other": { + "match": "\\s+", + "name": "template.tag.ng" + }, + "standardAttribute": { + "begin": "([-_a-zA-Z0-9.$:]+)(=)([\"'])", + "beginCaptures": { + "1": { + "name": "entity.other.attribute-name.html" + }, + "2": { + "name": "punctuation.separator.key-value.html" + }, + "3": { + "name": "string.quoted.html punctuation.definition.string.begin.html" + } + }, + "end": "\\3", + "endCaptures": { + "0": { + "name": "string.quoted.html punctuation.definition.string.end.html" + } + }, + "name": "meta.attribute.standard.html", + "patterns": [ + { + "include": "expression.ng" + } + ] + }, "propertyBinding": { "begin": "(\\[\\s*@?(?:[-_a-zA-Z0-9.$]+|\\[[^\\[\\]]*]|\\([^()]*\\))*%?\\s*])(=)([\"'])", "beginCaptures": { @@ -167,6 +206,30 @@ } } ] + }, + "inlineComments": { + "patterns": [ + { + "begin": "\\/\\*", + "captures": { + "0": { + "name": "punctuation.definition.comment.ts" + } + }, + "name": "comment.block.ts", + "end": "\\*\\/" + }, + { + "begin": "\\/\\/", + "beginCaptures": { + "0": { + "name": "punctuation.definition.comment.ts" + } + }, + "name": "comment.line.double-slash.ts", + "end": "(?=$)" + } + ] } } } diff --git a/vscode-ng-language-service/syntaxes/test/data/template-tag.html b/vscode-ng-language-service/syntaxes/test/data/template-tag.html index 0a496b8999f..338c16ad666 100644 --- a/vscode-ng-language-service/syntaxes/test/data/template-tag.html +++ b/vscode-ng-language-service/syntaxes/test/data/template-tag.html @@ -77,3 +77,15 @@
+ + +
\ No newline at end of file diff --git a/vscode-ng-language-service/syntaxes/test/data/template-tag.html.snap b/vscode-ng-language-service/syntaxes/test/data/template-tag.html.snap index aa2ba8fcc29..6d0b4421f84 100644 --- a/vscode-ng-language-service/syntaxes/test/data/template-tag.html.snap +++ b/vscode-ng-language-service/syntaxes/test/data/template-tag.html.snap @@ -1,7 +1,16 @@ > -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html punctuation.definition.ng-binding-name.begin.html # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html # ^^^^^^^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html entity.other.ng-binding-name.ngStyle.html @@ -25,9 +34,10 @@ # ^ template.tag.ng meta.ng-binding.property.html expression.ng constant.numeric.decimal.ts # ^ template.tag.ng meta.ng-binding.property.html expression.ng # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
#^ template.tag.ng meta.ng-binding.property.html expression.ng meta.array.literal.ts meta.brace.square.ts # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html entity.other.ng-binding-name.style.right.%.html # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html entity.other.ng-binding-name.style.right.%.html punctuation.accessor.html @@ -68,9 +79,10 @@ # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.begin.html # ^^^ template.tag.ng meta.ng-binding.property.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^^^^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html entity.other.ng-binding-name.@animation.trigger.html # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html entity.other.ng-binding-name.@animation.trigger.html punctuation.accessor.html @@ -80,9 +92,10 @@ # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.begin.html # ^^^ template.tag.ng meta.ng-binding.property.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng > -#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html punctuation.definition.ng-binding-name.begin.html # ^^^^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html entity.other.ng-binding-name.attr.aria-label.html # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html entity.other.ng-binding-name.attr.aria-label.html punctuation.accessor.html @@ -92,9 +105,11 @@ # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.begin.html # ^^^ template.tag.ng meta.ng-binding.property.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.end.html -# ^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^^^^^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html entity.other.ng-binding-name.my-property.html # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html punctuation.definition.ng-binding-name.end.html @@ -102,9 +117,10 @@ # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.begin.html # ^^^ template.tag.ng meta.ng-binding.property.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^^^^^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html entity.other.ng-binding-name.my_property.html # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html punctuation.definition.ng-binding-name.end.html @@ -112,9 +128,10 @@ # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.begin.html # ^^^ template.tag.ng meta.ng-binding.property.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^^^^^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html entity.other.ng-binding-name.myProperty$.html # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html punctuation.definition.ng-binding-name.end.html @@ -122,13 +139,18 @@ # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.begin.html # ^^^ template.tag.ng meta.ng-binding.property.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng >
-#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html entity.other.ng-binding-name.class.min-h-[calc(100vh-var(--header-height))].html # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html entity.other.ng-binding-name.class.min-h-[calc(100vh-var(--header-height))].html punctuation.accessor.html @@ -138,12 +160,21 @@ # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.begin.html # ^^^ template.tag.ng meta.ng-binding.property.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng > > -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng > -#^^^^^^^^ template.tag.ng +#^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html entity.other.ng-binding-name.click.html # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html punctuation.definition.ng-binding-name.end.html @@ -154,9 +185,10 @@ # ^^^^^^ template.tag.ng meta.ng-binding.event.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.event.html expression.ng meta.brace.round.ts # ^ template.tag.ng meta.ng-binding.event.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^^^^ template.tag.ng +# ^^^^^^^^^^ template.tag.ng > -#^^^^^^^ template.tag.ng +#^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^^^^^^^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html entity.other.ng-binding-name.ngModelChange.html # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html punctuation.definition.ng-binding-name.end.html @@ -167,9 +199,11 @@ # ^^^^^^ template.tag.ng meta.ng-binding.event.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.event.html expression.ng meta.brace.round.ts # ^ template.tag.ng meta.ng-binding.event.html string.quoted.html punctuation.definition.string.end.html -# ^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^^^^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html entity.other.ng-binding-name.@animation.done.html # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html entity.other.ng-binding-name.@animation.done.html punctuation.accessor.html @@ -182,9 +216,10 @@ # ^^^^^^ template.tag.ng meta.ng-binding.event.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.event.html expression.ng meta.brace.round.ts # ^ template.tag.ng meta.ng-binding.event.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
#^ template.tag.ng meta.ng-binding.event.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html punctuation.definition.ng-binding-name.begin.html # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html # ^^^^^^^^^^^^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html entity.other.ng-binding-name.extraSpacing.html @@ -235,9 +271,10 @@ # ^^^^^^ template.tag.ng meta.ng-binding.event.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.event.html expression.ng meta.brace.round.ts # ^ template.tag.ng meta.ng-binding.event.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^ template.tag.ng +#^^^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html entity.other.ng-binding-name.myEvent.html # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html punctuation.definition.ng-binding-name.end.html @@ -248,9 +285,10 @@ # ^^^^^^ template.tag.ng meta.ng-binding.event.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.event.html expression.ng meta.brace.round.ts # ^ template.tag.ng meta.ng-binding.event.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^^^^^^^^^^ template.tag.ng +# ^^^^^^^^^^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^ template.tag.ng +#^^^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html entity.other.ng-binding-name.my-event.html # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html punctuation.definition.ng-binding-name.end.html @@ -261,9 +299,10 @@ # ^^^^^^ template.tag.ng meta.ng-binding.event.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.event.html expression.ng meta.brace.round.ts # ^ template.tag.ng meta.ng-binding.event.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^^^^^^^^^^ template.tag.ng +# ^^^^^^^^^^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^ template.tag.ng +#^^^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html entity.other.ng-binding-name.my_event.html # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html punctuation.definition.ng-binding-name.end.html @@ -274,9 +313,10 @@ # ^^^^^^ template.tag.ng meta.ng-binding.event.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.event.html expression.ng meta.brace.round.ts # ^ template.tag.ng meta.ng-binding.event.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^^^^^^^^^^ template.tag.ng +# ^^^^^^^^^^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^ template.tag.ng +#^^^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html entity.other.ng-binding-name.myEvent$.html # ^ template.tag.ng meta.ng-binding.event.html entity.other.attribute-name.html entity.other.ng-binding-name.event.html punctuation.definition.ng-binding-name.end.html @@ -287,16 +327,29 @@ # ^^^^^^ template.tag.ng meta.ng-binding.event.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.event.html expression.ng meta.brace.round.ts # ^ template.tag.ng meta.ng-binding.event.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^^^^^^^^^^ template.tag.ng +# ^^^^^^^^^^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng > > -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng > -#^^^^^^^^ template.tag.ng +#^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html entity.other.ng-binding-name.click.html # ^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html punctuation.definition.ng-binding-name.end.html @@ -304,9 +357,10 @@ # ^ template.tag.ng meta.ng-binding.two-way.html string.quoted.html punctuation.definition.string.begin.html # ^^^^^^^^^ template.tag.ng meta.ng-binding.two-way.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.two-way.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^^^^ template.tag.ng +# ^^^^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html punctuation.definition.ng-binding-name.begin.html # ^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html # ^^^^^^^^^^^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html entity.other.ng-binding-name.extraSpacing.html @@ -316,9 +370,10 @@ # ^ template.tag.ng meta.ng-binding.two-way.html string.quoted.html punctuation.definition.string.begin.html # ^^^^^^^^^^^^ template.tag.ng meta.ng-binding.two-way.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.two-way.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^^^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html entity.other.ng-binding-name.@animation.done.html # ^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html entity.other.ng-binding-name.@animation.done.html punctuation.accessor.html @@ -328,9 +383,10 @@ # ^ template.tag.ng meta.ng-binding.two-way.html string.quoted.html punctuation.definition.string.begin.html # ^^^^^^^^^ template.tag.ng meta.ng-binding.two-way.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.two-way.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^ template.tag.ng +#^^^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html entity.other.ng-binding-name.my-prop.html # ^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html punctuation.definition.ng-binding-name.end.html @@ -338,9 +394,10 @@ # ^ template.tag.ng meta.ng-binding.two-way.html string.quoted.html punctuation.definition.string.begin.html # ^^^^^^ template.tag.ng meta.ng-binding.two-way.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.two-way.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^^^^^^^^^^ template.tag.ng +# ^^^^^^^^^^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^ template.tag.ng +#^^^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html entity.other.ng-binding-name.my_prop.html # ^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html punctuation.definition.ng-binding-name.end.html @@ -348,9 +405,10 @@ # ^ template.tag.ng meta.ng-binding.two-way.html string.quoted.html punctuation.definition.string.begin.html # ^^^^^^ template.tag.ng meta.ng-binding.two-way.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.two-way.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^^^^^^^^^^ template.tag.ng +# ^^^^^^^^^^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^ template.tag.ng +#^^^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html entity.other.ng-binding-name.$my_prop.html # ^^ template.tag.ng meta.ng-binding.two-way.html entity.other.attribute-name.html entity.other.ng-binding-name.two-way.html punctuation.definition.ng-binding-name.end.html @@ -358,9 +416,10 @@ # ^ template.tag.ng meta.ng-binding.two-way.html string.quoted.html punctuation.definition.string.begin.html # ^^^^^^ template.tag.ng meta.ng-binding.two-way.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.two-way.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^^^^^^^^^^ template.tag.ng +# ^^^^^^^^^^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^ template.tag.ng +#^^^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html punctuation.definition.ng-binding-name.begin.html # ^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html entity.other.ng-binding-name.%.html # ^^^^^^^^^ template.tag.ng meta.ng-binding.property.html entity.other.attribute-name.html entity.other.ng-binding-name.property.html @@ -368,23 +427,35 @@ # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.begin.html # ^^^^^^^ template.tag.ng meta.ng-binding.property.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.property.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^^^^^^^^^^ template.tag.ng +# ^^^^^^^^^^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng > > -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng > -#^^^^^^^^ template.tag.ng +#^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngModel.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.begin.html # ^^^^^ template.tag.ng meta.ng-binding.template.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^^^^ template.tag.ng +# ^^^^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngFor.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -397,9 +468,10 @@ # ^ template.tag.ng meta.ng-binding.template.html expression.ng # ^^^^^ template.tag.ng meta.ng-binding.template.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^ template.tag.ng +#^^^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.custom-if.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -410,9 +482,10 @@ # ^ template.tag.ng meta.ng-binding.template.html expression.ng # ^^^^^ template.tag.ng meta.ng-binding.template.html expression.ng constant.language.boolean.false.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^^^^^^^^^^ template.tag.ng +# ^^^^^^^^^^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^ template.tag.ng +#^^^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.custom_if.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -423,9 +496,10 @@ # ^ template.tag.ng meta.ng-binding.template.html expression.ng # ^^^^^ template.tag.ng meta.ng-binding.template.html expression.ng constant.language.boolean.false.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^^^^^^^^^^ template.tag.ng +# ^^^^^^^^^^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^ template.tag.ng +#^^^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.custom_$if.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -436,16 +510,35 @@ # ^ template.tag.ng meta.ng-binding.template.html expression.ng # ^^^^^ template.tag.ng meta.ng-binding.template.html expression.ng constant.language.boolean.false.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^^^^^^^^^^ template.tag.ng +# ^^^^^^^^^^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^ template.tag.ng +# ^^^^^^^ template.tag.ng meta.attribute.standard.html entity.other.attribute-name.html +# ^ template.tag.ng meta.attribute.standard.html punctuation.separator.key-value.html +# ^ template.tag.ng meta.attribute.standard.html string.quoted.html punctuation.definition.string.begin.html +# ^^^^ template.tag.ng meta.attribute.standard.html variable.other.readwrite.ts +# ^ template.tag.ng meta.attribute.standard.html string.quoted.html punctuation.definition.string.end.html +# ^^^^^^^^^^^^^^^^ template.tag.ng > > -#^^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng > -#^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngFor.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -459,9 +552,10 @@ # ^^^^^ template.tag.ng meta.ng-binding.template.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.template.html expression.ng punctuation.terminator.statement.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngFor.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -474,11 +568,18 @@ # ^ template.tag.ng meta.ng-binding.template.html expression.ng # ^^^^^ template.tag.ng meta.ng-binding.template.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngFor.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -497,9 +598,10 @@ # ^^^^ template.tag.ng meta.ng-binding.template.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.template.html expression.ng punctuation.terminator.statement.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngFor.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -517,9 +619,10 @@ # ^^ template.tag.ng meta.ng-binding.template.html expression.ng # ^^^^ template.tag.ng meta.ng-binding.template.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngFor.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -533,9 +636,10 @@ # ^^^^^^ template.tag.ng meta.ng-binding.template.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.template.html expression.ng punctuation.terminator.statement.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngFor.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -548,11 +652,18 @@ # ^ template.tag.ng meta.ng-binding.template.html expression.ng # ^^^^^^ template.tag.ng meta.ng-binding.template.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngFor.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -573,9 +684,10 @@ # ^ template.tag.ng meta.ng-binding.template.html expression.ng entity.name.type.ts # ^ template.tag.ng meta.ng-binding.template.html expression.ng punctuation.terminator.statement.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngFor.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -595,9 +707,10 @@ # ^ template.tag.ng meta.ng-binding.template.html expression.ng # ^ template.tag.ng meta.ng-binding.template.html expression.ng entity.name.type.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngIf.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -608,11 +721,16 @@ # ^ template.tag.ng meta.ng-binding.template.html expression.ng # ^ template.tag.ng meta.ng-binding.template.html expression.ng entity.name.type.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngFor.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -643,9 +761,10 @@ # ^ template.tag.ng meta.ng-binding.template.html expression.ng # ^^^^ template.tag.ng meta.ng-binding.template.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngFor.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -677,9 +796,10 @@ # ^^^^ template.tag.ng meta.ng-binding.template.html expression.ng variable.other.readwrite.ts # ^ template.tag.ng meta.ng-binding.template.html expression.ng punctuation.terminator.statement.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngFor.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -708,9 +828,10 @@ # ^ template.tag.ng meta.ng-binding.template.html expression.ng # ^^^^ template.tag.ng meta.ng-binding.template.html expression.ng entity.name.type.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngFor.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -740,14 +861,23 @@ # ^^^^ template.tag.ng meta.ng-binding.template.html expression.ng entity.name.type.ts # ^ template.tag.ng meta.ng-binding.template.html expression.ng punctuation.terminator.statement.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng > > -#^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng > -#^^^^^^^^^^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngFor.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -767,13 +897,20 @@ # ^ template.tag.ng meta.ng-binding.template.html expression.ng # ^ template.tag.ng meta.ng-binding.template.html expression.ng entity.name.type.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng +# ^^^^^^^ template.tag.ng >
-#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng > -#^^^^^^^^^^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng >
-#^^^^^ template.tag.ng +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng # ^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html punctuation.definition.ng-binding-name.begin.html # ^^^^ template.tag.ng meta.ng-binding.template.html entity.other.attribute-name.html entity.other.ng-binding-name.template.html entity.other.ng-binding-name.ngIf.html # ^ template.tag.ng meta.ng-binding.template.html punctuation.separator.key-value.html @@ -788,5 +925,58 @@ # ^ template.tag.ng meta.ng-binding.template.html expression.ng # ^ template.tag.ng meta.ng-binding.template.html expression.ng entity.name.type.ts # ^ template.tag.ng meta.ng-binding.template.html string.quoted.html punctuation.definition.string.end.html -# ^^^^^^^^ template.tag.ng -> \ No newline at end of file +# ^^^^^^^ template.tag.ng +> +> +#^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^^^^^ template.tag.ng +# ^ template.tag.ng template.tag.ng +# ^^^ template.tag.ng +>
// comment 0 +#^^ template.tag.ng template.tag.ng +# ^^ template.tag.ng comment.line.double-slash.ts punctuation.definition.comment.ts +# ^^^^^^^^^^ template.tag.ng comment.line.double-slash.ts +> /* comment 1 */ +#^^ template.tag.ng template.tag.ng +# ^^ template.tag.ng comment.block.ts punctuation.definition.comment.ts +# ^^^^^^^^^^^ template.tag.ng comment.block.ts +# ^^ template.tag.ng comment.block.ts punctuation.definition.comment.ts +> attr1="value1" +#^^ template.tag.ng template.tag.ng +# ^^^^^ template.tag.ng meta.attribute.standard.html entity.other.attribute-name.html +# ^ template.tag.ng meta.attribute.standard.html punctuation.separator.key-value.html +# ^ template.tag.ng meta.attribute.standard.html string.quoted.html punctuation.definition.string.begin.html +# ^^^^^^ template.tag.ng meta.attribute.standard.html variable.other.readwrite.ts +# ^ template.tag.ng meta.attribute.standard.html string.quoted.html punctuation.definition.string.end.html +> /* +#^^ template.tag.ng template.tag.ng +# ^^ template.tag.ng comment.block.ts punctuation.definition.comment.ts +> comment 2 +#^^^^^^^^^^^^^^^ template.tag.ng comment.block.ts +> spanning multiple lines +#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.tag.ng comment.block.ts +> */ +#^^ template.tag.ng comment.block.ts +# ^^ template.tag.ng comment.block.ts punctuation.definition.comment.ts +> attr2="value2" +#^^ template.tag.ng template.tag.ng +# ^^^^^ template.tag.ng meta.attribute.standard.html entity.other.attribute-name.html +# ^ template.tag.ng meta.attribute.standard.html punctuation.separator.key-value.html +# ^ template.tag.ng meta.attribute.standard.html string.quoted.html punctuation.definition.string.begin.html +# ^^^^^^ template.tag.ng meta.attribute.standard.html variable.other.readwrite.ts +# ^ template.tag.ng meta.attribute.standard.html string.quoted.html punctuation.definition.string.end.html +>>
+#^^^^^^^ template.tag.ng \ No newline at end of file