From f1f3088632f0cdfbb954f66b553f5e725721e944 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Fri, 16 Sep 2016 18:22:20 +0200 Subject: [PATCH] Add php --- .vscode/launch.json | 28 + README.md | 1 + gulpfile.js | 1 + src/monaco.contribution.ts | 7 + src/php.ts | 418 ++++++++ test/all.js | 1 + test/php.test.ts | 1882 ++++++++++++++++++++++++++++++++++++ test/testRunner.ts | 15 +- tsconfig.json | 2 + 9 files changed, 2351 insertions(+), 4 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 src/php.ts create mode 100644 test/php.test.ts diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..6aa227c6 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,28 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Unit Tests", + "type": "node", + "request": "launch", + "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha", + "stopOnEntry": false, + "args": [ + "--grep", + "php" + ], + "cwd": "${workspaceRoot}", + "preLaunchTask": null, + "runtimeExecutable": null, + "runtimeArgs": [ + "--nolazy" + ], + "env": { + "NODE_ENV": "development" + }, + "console": "internalConsole", + "sourceMaps": false, + "outDir": null + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md index eacee0d7..c084194c 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ Colorization and configuration supports for multiple languages for the Monaco Ed * lua * objective-c * postiats +* php * powershell * python * r diff --git a/gulpfile.js b/gulpfile.js index a2a5b1b8..753b599f 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -61,6 +61,7 @@ gulp.task('release', ['clean-release','compile'], function() { bundleOne('src/lua'), bundleOne('src/markdown'), bundleOne('src/objective-c'), + bundleOne('src/php'), bundleOne('src/powershell'), bundleOne('src/postiats'), bundleOne('src/python'), diff --git a/src/monaco.contribution.ts b/src/monaco.contribution.ts index 95439836..77c8a56b 100644 --- a/src/monaco.contribution.ts +++ b/src/monaco.contribution.ts @@ -143,6 +143,13 @@ registerLanguage({ aliases: [ 'ATS', 'ATS/Postiats' ], module: './postiats' }); +registerLanguage({ + id: 'php', + extensions: ['.php', '.php4', '.php5', '.phtml', '.ctp'], + aliases: ['PHP', 'php'], + mimetypes: ['application/x-php'], + module: './php' +}); registerLanguage({ id: 'powershell', extensions: [ '.ps1', '.psm1', '.psd1' ], diff --git a/src/php.ts b/src/php.ts new file mode 100644 index 00000000..7c52fed3 --- /dev/null +++ b/src/php.ts @@ -0,0 +1,418 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +import IRichLanguageConfiguration = monaco.languages.LanguageConfiguration; +import ILanguage = monaco.languages.IMonarchLanguage; + +export var conf:IRichLanguageConfiguration = { + wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g, + + comments: { + lineComment: '//', + blockComment: ['/*', '*/'] + }, + + brackets: [ + ['{', '}'], + ['[', ']'], + ['(', ')'] + ], + + autoClosingPairs: [ + { open: '{', close: '}', notIn: ['string.php'] }, + { open: '[', close: ']', notIn: ['string.php'] }, + { open: '(', close: ')', notIn: ['string.php'] }, + { open: '"', close: '"', notIn: ['string.php'] }, + { open: '\'', close: '\'', notIn: ['string.php'] } + ] +}; + +export const htmlTokenTypes = { + DELIM_START: 'start.delimiter.tag.html', + DELIM_END: 'end.delimiter.tag.html', + DELIM_COMMENT: 'comment.html', + getTag: (name: string) => { + return 'tag.html'; + } +}; + +export var language = { + defaultToken: '', + tokenPostfix: '', + + // The main tokenizer for our languages + tokenizer: { + root: [ + [/<\?((php)|=)?/, { token: '@rematch', switchTo: '@phpInSimpleState.root' }], + [/)/, [htmlTokenTypes.DELIM_START, 'tag.html', htmlTokenTypes.DELIM_END]], + [/(<)(script)/, [htmlTokenTypes.DELIM_START, { token: 'tag.html', next: '@script'} ]], + [/(<)(style)/, [htmlTokenTypes.DELIM_START, { token: 'tag.html', next: '@style'} ]], + [/(<)(\w+)/, [htmlTokenTypes.DELIM_START, { token: 'tag.html', next: '@otherTag'} ]], + [/(<\/)(\w+)/, [htmlTokenTypes.DELIM_START, { token: 'tag.html', next: '@otherTag' }]], + [/[^<]+/] // text + ], + + doctype: [ + [/<\?((php)|=)?/, { token: '@rematch', switchTo: '@phpInSimpleState.comment' }], + [/[^>]+/, 'metatag.content.html' ], + [/>/, 'metatag.html', '@pop' ], + ], + + comment: [ + [/<\?((php)|=)?/, { token: '@rematch', switchTo: '@phpInSimpleState.comment' }], + [/-->/, 'comment.html', '@pop'], + [/[^-]+/, 'comment.html'], + [/./, 'comment.html'] + ], + + otherTag: [ + [/<\?((php)|=)?/, { token: '@rematch', switchTo: '@phpInSimpleState.otherTag' }], + [/\/?>/, htmlTokenTypes.DELIM_END, '@pop'], + [/"([^"]*)"/, 'attribute.value'], + [/'([^']*)'/, 'attribute.value'], + [/[\w\-]+/, 'attribute.name'], + [/=/, 'delimiter'], + [/[ \t\r\n]+/], // whitespace + ], + + // -- BEGIN + +//
+// Hello +// +// +// +// guest +// +// ! +//
+ +// "); + +// // display shuffled cards (EXAMPLE ONLY) +// for ($index = 0; $index < 52; $index++) { +// if ($starting_point == 52) { $starting_point = 0; } +// print("Uncut Point: $deck[$index] "); +// print("Starting Point: $deck[$starting_point]
"); +// $starting_point++; +// } +// ?> + +// +// \ No newline at end of file diff --git a/test/all.js b/test/all.js index 25e4c6a8..0e9b2f24 100644 --- a/test/all.js +++ b/test/all.js @@ -35,6 +35,7 @@ requirejs([ 'out/test/lua.test', 'out/test/markdown.test', 'out/test/objective-c.test', + 'out/test/php.test', 'out/test/postiats.test', 'out/test/powershell.test', 'out/test/python.test', diff --git a/test/php.test.ts b/test/php.test.ts new file mode 100644 index 00000000..808ba134 --- /dev/null +++ b/test/php.test.ts @@ -0,0 +1,1882 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +import {testTokenization} from './testRunner'; +import {htmlTokenTypes} from '../src/php'; + +testTokenization(['php', 'css'], [ + // Bug 13596:[ErrorTelemetry] Stream did not advance while tokenizing. Mode id is php (stuck) + // We're testing the fact that tokenize does not throw + [ + { line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'comment.php' }, + { startIndex:19, type: '' }, + { startIndex:20, type: 'metatag.php' } + ]}], + + // Variables + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'delimiter.php' }, + { startIndex:12, type: '' }, + { startIndex:13, type: 'number.php' }, + { startIndex:14, type: 'delimiter.php' }, + { startIndex:15, type: '' }, + { startIndex:16, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.php' }, + { startIndex:8, type: '' }, + { startIndex:9, type: 'delimiter.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'string.php' }, + { startIndex:18, type: 'delimiter.php' }, + { startIndex:19, type: '' }, + { startIndex:20, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.php' }, + { startIndex:12, type: '' }, + { startIndex:13, type: 'delimiter.php' }, + { startIndex:14, type: '' }, + { startIndex:15, type: 'delimiter.php' }, + { startIndex:16, type: 'number.php' }, + { startIndex:18, type: 'delimiter.php' }, + { startIndex:19, type: '' }, + { startIndex:20, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.php' }, + { startIndex:12, type: '' }, + { startIndex:13, type: 'delimiter.php' }, + { startIndex:14, type: '' }, + { startIndex:15, type: 'number.php' }, + { startIndex:16, type: '' }, + { startIndex:17, type: 'delimiter.php' }, + { startIndex:18, type: '' }, + { startIndex:19, type: 'delimiter.parenthesis.php' }, + { startIndex:20, type: 'number.php' }, + { startIndex:22, type: '' }, + { startIndex:23, type: 'delimiter.php' }, + { startIndex:24, type: '' }, + { startIndex:25, type: 'number.php' }, + { startIndex:26, type: 'delimiter.parenthesis.php' }, + { startIndex:27, type: 'delimiter.php' }, + { startIndex:28, type: '' }, + { startIndex:29, type: 'metatag.php' } + ]}], + + // Keywords + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:14, type: '' }, + { startIndex:15, type: 'identifier.php' }, + { startIndex:21, type: 'delimiter.parenthesis.php' }, + { startIndex:23, type: '' }, + { startIndex:24, type: 'delimiter.bracket.php' }, + { startIndex:25, type: '' }, + { startIndex:26, type: 'delimiter.bracket.php' }, + { startIndex:27, type: '' }, + { startIndex:28, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:14, type: '' }, + { startIndex:15, type: 'metatag.php' } + ]}], + + [{ + line: ' 52) { $start = 0; } ?>', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:8, type: '' }, + { startIndex:9, type: 'delimiter.parenthesis.php' }, + { startIndex:10, type: 'variable.php' }, + { startIndex:16, type: '' }, + { startIndex:17, type: 'delimiter.php' }, + { startIndex:18, type: '' }, + { startIndex:19, type: 'number.php' }, + { startIndex:21, type: 'delimiter.parenthesis.php' }, + { startIndex:22, type: '' }, + { startIndex:23, type: 'delimiter.bracket.php' }, + { startIndex:24, type: '' }, + { startIndex:25, type: 'variable.php' }, + { startIndex:31, type: '' }, + { startIndex:32, type: 'delimiter.php' }, + { startIndex:33, type: '' }, + { startIndex:34, type: 'number.php' }, + { startIndex:35, type: 'delimiter.php' }, + { startIndex:36, type: '' }, + { startIndex:37, type: 'delimiter.bracket.php' }, + { startIndex:38, type: '' }, + { startIndex:39, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:8, type: '' }, + { startIndex:9, type: 'delimiter.parenthesis.php' }, + { startIndex:10, type: 'keyword.php' }, + { startIndex:14, type: 'delimiter.parenthesis.php' }, + { startIndex:15, type: '' }, + { startIndex:16, type: 'delimiter.bracket.php' }, + { startIndex:17, type: '' }, + { startIndex:18, type: 'variable.php' }, + { startIndex:24, type: '' }, + { startIndex:25, type: 'delimiter.php' }, + { startIndex:26, type: '' }, + { startIndex:27, type: 'number.php' }, + { startIndex:28, type: 'delimiter.php' }, + { startIndex:29, type: '' }, + { startIndex:30, type: 'delimiter.bracket.php' }, + { startIndex:31, type: '' }, + { startIndex:32, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:14, type: '' }, + { startIndex:15, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:9, type: '' }, + { startIndex:10, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:8, type: '' }, + { startIndex:9, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:15, type: '' }, + { startIndex:16, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:14, type: '' }, + { startIndex:15, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:13, type: '' }, + { startIndex:14, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:13, type: '' }, + { startIndex:14, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:8, type: '' }, + { startIndex:9, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:12, type: '' }, + { startIndex:13, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:16, type: '' }, + { startIndex:17, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:12, type: '' }, + { startIndex:13, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:16, type: '' }, + { startIndex:17, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:15, type: '' }, + { startIndex:16, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:14, type: '' }, + { startIndex:15, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:13, type: '' }, + { startIndex:14, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:9, type: '' }, + { startIndex:10, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:13, type: '' }, + { startIndex:14, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:14, type: '' }, + { startIndex:15, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:12, type: '' }, + { startIndex:13, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:8, type: '' }, + { startIndex:9, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:16, type: '' }, + { startIndex:17, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:15, type: '' }, + { startIndex:16, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:16, type: '' }, + { startIndex:17, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:15, type: '' }, + { startIndex:16, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:9, type: '' }, + { startIndex:10, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:12, type: '' }, + { startIndex:13, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:18, type: '' }, + { startIndex:19, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:8, type: '' }, + { startIndex:9, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:13, type: '' }, + { startIndex:14, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:15, type: '' }, + { startIndex:16, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:12, type: '' }, + { startIndex:13, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:14, type: '' }, + { startIndex:15, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:12, type: '' }, + { startIndex:13, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:12, type: '' }, + { startIndex:13, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:9, type: '' }, + { startIndex:10, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:9, type: '' }, + { startIndex:10, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:9, type: '' }, + { startIndex:10, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:9, type: '' }, + { startIndex:10, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:9, type: '' }, + { startIndex:10, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:13, type: '' }, + { startIndex:14, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:18, type: '' }, + { startIndex:19, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:13, type: '' }, + { startIndex:14, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:18, type: '' }, + { startIndex:19, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:12, type: '' }, + { startIndex:13, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:17, type: '' }, + { startIndex:18, type: 'metatag.php' } + ]}], + + // Compile Time Constants + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'constant.php' }, + { startIndex:14, type: '' }, + { startIndex:15, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.php' }, + { startIndex:15, type: '' }, + { startIndex:16, type: 'delimiter.php' }, + { startIndex:17, type: '' }, + { startIndex:18, type: 'constant.php' }, + { startIndex:26, type: 'delimiter.php' }, + { startIndex:27, type: '' }, + { startIndex:28, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'constant.php' }, + { startIndex:15, type: '' }, + { startIndex:16, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'constant.php' }, + { startIndex:13, type: '' }, + { startIndex:14, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'constant.php' }, + { startIndex:14, type: '' }, + { startIndex:15, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'constant.php' }, + { startIndex:19, type: '' }, + { startIndex:20, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'constant.php' }, + { startIndex:16, type: '' }, + { startIndex:17, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'constant.php' }, + { startIndex:18, type: '' }, + { startIndex:19, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'constant.php' }, + { startIndex:15, type: '' }, + { startIndex:16, type: 'metatag.php' } + ]}], + + // Predefined Variables + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.predefined.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'keyword.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'variable.predefined.php' }, + { startIndex:16, type: 'delimiter.php' }, + { startIndex:17, type: '' }, + { startIndex:18, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.predefined.php' }, + { startIndex:14, type: '' }, + { startIndex:15, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.predefined.php' }, + { startIndex:14, type: '' }, + { startIndex:15, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.predefined.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.predefined.php' }, + { startIndex:12, type: '' }, + { startIndex:13, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.predefined.php' }, + { startIndex:13, type: '' }, + { startIndex:14, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.predefined.php' }, + { startIndex:15, type: '' }, + { startIndex:16, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.predefined.php' }, + { startIndex:15, type: '' }, + { startIndex:16, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.predefined.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.predefined.php' }, + { startIndex:14, type: '' }, + { startIndex:15, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.predefined.php' }, + { startIndex:19, type: '' }, + { startIndex:20, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.predefined.php' }, + { startIndex:25, type: '' }, + { startIndex:26, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.predefined.php' }, + { startIndex:27, type: '' }, + { startIndex:28, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.predefined.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.predefined.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + // Comments - single line + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'comment.php' }, + { startIndex:28, type: '' }, + { startIndex:29, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.php' }, + { startIndex:8, type: '' }, + { startIndex:9, type: 'delimiter.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'comment.php' }, + { startIndex:33, type: '' }, + { startIndex:34, type: 'number.php' }, + { startIndex:35, type: 'delimiter.php' }, + { startIndex:36, type: '' }, + { startIndex:37, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.php' }, + { startIndex:8, type: '' }, + { startIndex:9, type: 'delimiter.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'comment.php' }, + { startIndex:24, type: '' }, + { startIndex:25, type: 'number.php' }, + { startIndex:26, type: 'delimiter.php' }, + { startIndex:27, type: '' }, + { startIndex:28, type: 'delimiter.php' }, + { startIndex:30, type: '' }, + { startIndex:31, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.php' }, + { startIndex:8, type: '' }, + { startIndex:9, type: 'delimiter.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'comment.php' }, + { startIndex:15, type: 'delimiter.php' }, + { startIndex:16, type: '' }, + { startIndex:17, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.php' }, + { startIndex:8, type: '' }, + { startIndex:9, type: 'delimiter.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'string.php' }, + { startIndex:14, type: 'delimiter.php' }, + { startIndex:15, type: '' }, + { startIndex:16, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'string.php' }, + { startIndex:18, type: 'delimiter.php' }, + { startIndex:19, type: '' }, + { startIndex:20, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.php' }, + { startIndex:8, type: '' }, + { startIndex:9, type: 'delimiter.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'variable.php' }, + { startIndex:13, type: '' }, + { startIndex:14, type: 'delimiter.php' }, + { startIndex:15, type: '' }, + { startIndex:16, type: 'string.php' }, + { startIndex:27, type: '' }, + { startIndex:28, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'number.php' }, + { startIndex:7, type: '' }, + { startIndex:8, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'number.php' }, + { startIndex:7, type: 'delimiter.php' }, + { startIndex:8, type: 'number.php' }, + { startIndex:9, type: '' }, + { startIndex:10, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'number.php' }, + { startIndex:9, type: 'delimiter.php' }, + { startIndex:10, type: 'number.php' }, + { startIndex:12, type: '' }, + { startIndex:13, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'number.php' }, + { startIndex:7, type: '' }, + { startIndex:8, type: 'delimiter.php' }, + { startIndex:9, type: '' }, + { startIndex:10, type: 'number.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'number.octal.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'number.octal.php' }, + { startIndex:10, type: 'number.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'number.php' }, + { startIndex:7, type: 'identifier.php' }, + { startIndex:8, type: '' }, + { startIndex:9, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'number.hex.php' }, + { startIndex:11, type: '' }, + { startIndex:12, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'number.binary.php' }, + { startIndex:9, type: '' }, + { startIndex:10, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'delimiter.bracket.php' }, + { startIndex:7, type: '' }, + { startIndex:8, type: 'delimiter.bracket.php' }, + { startIndex:9, type: '' }, + { startIndex:10, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'delimiter.array.php' }, + { startIndex:7, type: 'number.php' }, + { startIndex:8, type: 'delimiter.php' }, + { startIndex:9, type: 'number.php' }, + { startIndex:10, type: 'delimiter.php' }, + { startIndex:11, type: 'number.php' }, + { startIndex:12, type: 'delimiter.array.php' }, + { startIndex:13, type: '' }, + { startIndex:14, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'variable.php' }, + { startIndex:8, type: '' }, + { startIndex:9, type: 'delimiter.php' }, + { startIndex:10, type: '' }, + { startIndex:11, type: 'string.php' }, + { startIndex:19, type: '' }, + { startIndex:20, type: 'metatag.php' } + ]}], + + // Comments - comment with sharp + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'comment.php' }, + { startIndex:15, type: 'metatag.php' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'comment.php' }, + { startIndex:17, type: 'metatag.php' } + ]}], + + // 3-languages parser + + // php + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:3, type: 'string.php' }, + { startIndex:7, type: 'metatag.php' } + ]}], + + // php/html/php + [{ + line: '
', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: 'number.php' }, + { startIndex:6, type: 'delimiter.php' }, + { startIndex:7, type: 'number.php' }, + { startIndex:8, type: 'metatag.php' }, + { startIndex:10, type: htmlTokenTypes.DELIM_START }, + { startIndex:11, type: htmlTokenTypes.getTag('br') }, + { startIndex:13, type: htmlTokenTypes.DELIM_END }, + { startIndex:15, type: 'metatag.php' }, + { startIndex:18, type: 'number.php' }, + { startIndex:19, type: 'metatag.php' } + ]}], + + // php/html/php + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: 'number.php' }, + { startIndex:6, type: 'delimiter.php' }, + { startIndex:7, type: 'number.php' }, + { startIndex:8, type: 'metatag.php' }, + { startIndex:10, type: htmlTokenTypes.DELIM_START }, + { startIndex:11, type: htmlTokenTypes.getTag('abc') }, + { startIndex:14, type: htmlTokenTypes.DELIM_END }, + { startIndex:15, type: 'metatag.php' }, + { startIndex:18, type: 'number.php' }, + { startIndex:19, type: 'metatag.php' } + ]}], + + // html/php/html + [{ + line: '', + tokens: [ + { startIndex:0, type: htmlTokenTypes.DELIM_START }, + { startIndex:1, type: htmlTokenTypes.getTag('abc') }, + { startIndex:4, type: htmlTokenTypes.DELIM_END }, + { startIndex:5, type: 'metatag.php' }, + { startIndex:10, type: 'number.php' }, + { startIndex:11, type: 'delimiter.php' }, + { startIndex:12, type: 'number.php' }, + { startIndex:13, type: 'metatag.php' }, + { startIndex:15, type: htmlTokenTypes.DELIM_START }, + { startIndex:16, type: htmlTokenTypes.getTag('abc') }, + { startIndex:19, type: htmlTokenTypes.DELIM_END } + ]}], + + // html/js/php/html + [{ + line: '', + tokens: [ + { startIndex:0, type: htmlTokenTypes.DELIM_START }, + { startIndex:1, type: htmlTokenTypes.getTag('abc') }, + { startIndex:4, type: htmlTokenTypes.DELIM_END }, + { startIndex:5, type: htmlTokenTypes.DELIM_START }, + { startIndex:6, type: htmlTokenTypes.getTag('script') }, + { startIndex:12, type: htmlTokenTypes.DELIM_END }, + { startIndex:13, type: '' }, + { startIndex:23, type: htmlTokenTypes.DELIM_START }, + { startIndex:25, type: htmlTokenTypes.getTag('script') }, + { startIndex:31, type: htmlTokenTypes.DELIM_END }, + { startIndex:32, type: 'metatag.php' }, + { startIndex:37, type: 'number.php' }, + { startIndex:38, type: 'delimiter.php' }, + { startIndex:39, type: 'number.php' }, + { startIndex:40, type: 'metatag.php' }, + { startIndex:42, type: htmlTokenTypes.DELIM_START }, + { startIndex:43, type: htmlTokenTypes.getTag('abc') }, + { startIndex:46, type: htmlTokenTypes.DELIM_END } + ]}], + + // html/js/php/js/ + [{ + line: '', + tokens: [ + { startIndex:0, type: htmlTokenTypes.DELIM_START }, + { startIndex:1, type: htmlTokenTypes.getTag('abc') }, + { startIndex:4, type: htmlTokenTypes.DELIM_END }, + { startIndex:5, type: htmlTokenTypes.DELIM_START }, + { startIndex:6, type: htmlTokenTypes.getTag('script') }, + { startIndex:12, type: htmlTokenTypes.DELIM_END }, + { startIndex:13, type: '' }, + { startIndex:23, type: htmlTokenTypes.DELIM_START }, + { startIndex:25, type: htmlTokenTypes.getTag('script') }, + { startIndex:31, type: htmlTokenTypes.DELIM_END }, + { startIndex:32, type: 'metatag.php' }, + { startIndex:37, type: 'number.php' }, + { startIndex:38, type: 'delimiter.php' }, + { startIndex:39, type: 'number.php' }, + { startIndex:40, type: 'metatag.php' }, + { startIndex:42, type: htmlTokenTypes.DELIM_START }, + { startIndex:43, type: htmlTokenTypes.getTag('script') }, + { startIndex:49, type: htmlTokenTypes.DELIM_END }, + { startIndex:50, type: '' }, + { startIndex:60, type: htmlTokenTypes.DELIM_START }, + { startIndex:62, type: htmlTokenTypes.getTag('script') }, + { startIndex:68, type: htmlTokenTypes.DELIM_END } + ]}], + + // Multiline test + [{ + line: '', + tokens: [ + { startIndex:0, type: htmlTokenTypes.DELIM_START }, + { startIndex:1, type: htmlTokenTypes.getTag('html') }, + { startIndex:5, type: htmlTokenTypes.DELIM_END } + ]}, { + line: '', + tokens: [ + { startIndex:0, type: htmlTokenTypes.DELIM_START }, + { startIndex:1, type: htmlTokenTypes.getTag('style') }, + { startIndex:6, type: htmlTokenTypes.DELIM_END }, + { startIndex:7, type: 'metatag.php' }, + { startIndex:10, type: 'string.php' }, + { startIndex:15, type: 'metatag.php' }, + { startIndex:17, type: 'punctuation.curly.css' }, + { startIndex:18, type: '' }, + { startIndex:19, type: 'support.type.property-name.css' }, + { startIndex:25, type: 'support.property-value.css' }, + { startIndex:29, type: 'punctuation.css' }, + { startIndex:30, type: '' }, + { startIndex:31, type: 'punctuation.curly.css' }, + { startIndex:32, type: htmlTokenTypes.DELIM_START }, + { startIndex:34, type: htmlTokenTypes.getTag('style') }, + { startIndex:39, type: htmlTokenTypes.DELIM_END } + ]}], + + // HTML (CSS (PHP)), HTML ( PHP, JS (PHP), PHP) + [{ + line: '*/?> */var y = 4;', + tokens: [ + { startIndex:0, type: htmlTokenTypes.DELIM_START }, + { startIndex:1, type: htmlTokenTypes.getTag('html') }, + { startIndex:5, type: htmlTokenTypes.DELIM_END }, + { startIndex:6, type: htmlTokenTypes.DELIM_START }, + { startIndex:7, type: htmlTokenTypes.getTag('style') }, + { startIndex:12, type: htmlTokenTypes.DELIM_END }, + { startIndex:13, type: 'metatag.php' }, + { startIndex:16, type: 'string.php' }, + { startIndex:21, type: 'metatag.php' }, + { startIndex:23, type: '' }, + { startIndex:24, type: 'punctuation.curly.css' }, + { startIndex:25, type: '' }, + { startIndex:26, type: 'support.type.property-name.css' }, + { startIndex:32, type: 'support.property-value.css' }, + { startIndex:36, type: 'punctuation.css' }, + { startIndex:37, type: '' }, + { startIndex:38, type: 'punctuation.curly.css' }, + { startIndex:39, type: htmlTokenTypes.DELIM_START }, + { startIndex:41, type: htmlTokenTypes.getTag('style') }, + { startIndex:46, type: htmlTokenTypes.DELIM_END }, + { startIndex:47, type: htmlTokenTypes.DELIM_COMMENT }, + { startIndex:51, type: 'metatag.php' }, + { startIndex:54, type: 'string.php' }, + { startIndex:68, type: 'metatag.php' }, + { startIndex:70, type: htmlTokenTypes.DELIM_COMMENT }, + { startIndex:73, type: htmlTokenTypes.DELIM_START }, + { startIndex:74, type: htmlTokenTypes.getTag('script') }, + { startIndex:80, type: htmlTokenTypes.DELIM_END }, + { startIndex:81, type: '' }, + { startIndex:94, type: 'metatag.php' }, + { startIndex:97, type: 'string.php' }, + { startIndex:109, type: 'comment.php' }, + { startIndex:122, type: 'metatag.php' }, + { startIndex:124, type: '' }, + { startIndex:137, type: htmlTokenTypes.DELIM_START }, + { startIndex:139, type: htmlTokenTypes.getTag('script') }, + { startIndex:145, type: htmlTokenTypes.DELIM_END }, + { startIndex:146, type: htmlTokenTypes.DELIM_START }, + { startIndex:148, type: htmlTokenTypes.getTag('html') }, + { startIndex:152, type: htmlTokenTypes.DELIM_END }, + { startIndex:153, type: 'metatag.php' }, + { startIndex:155, type: '' }, + { startIndex:156, type: 'variable.php' }, + { startIndex:158, type: '' }, + { startIndex:159, type: 'delimiter.php' }, + { startIndex:160, type: '' }, + { startIndex:161, type: 'number.php' }, + { startIndex:162, type: 'delimiter.php' }, + { startIndex:163, type: 'metatag.php' } + ]}], + + // PHP-tag detection + [{ + line: '//""', + tokens: [ + { startIndex:0, type: htmlTokenTypes.DELIM_START }, + { startIndex:1, type: htmlTokenTypes.getTag('script') }, + { startIndex:7, type: htmlTokenTypes.DELIM_END }, + { startIndex:8, type: '' }, + { startIndex:9, type: 'metatag.php' }, + { startIndex:14, type: 'number.php' }, + { startIndex:15, type: 'delimiter.php' }, + { startIndex:16, type: 'number.php' }, + { startIndex:17, type: 'metatag.php' }, + { startIndex:19, type: '' } + ]}], + + [{ + line: '', + tokens: [ + { startIndex:0, type: 'metatag.php' }, + { startIndex:5, type: '' }, + { startIndex:6, type: 'identifier.php' }, + { startIndex:14, type: 'delimiter.parenthesis.php' }, + { startIndex:16, type: 'delimiter.php' }, + { startIndex:17, type: '' }, + { startIndex:18, type: 'metatag.php' } + ]}] +]); \ No newline at end of file diff --git a/test/testRunner.ts b/test/testRunner.ts index 4c10d80b..59d748ac 100644 --- a/test/testRunner.ts +++ b/test/testRunner.ts @@ -19,11 +19,18 @@ export interface ITestItem { tokens: IRelaxedToken[]; } -export function testTokenization(languageId:string, tests:ITestItem[][]): void { - suite(languageId + ' tokenization', () => { +export function testTokenization(_language:string|string[], tests:ITestItem[][]): void { + let languages:string[]; + if (typeof _language === 'string') { + languages = [_language]; + } else { + languages = _language; + } + let mainLanguage = languages[0]; + suite(mainLanguage + ' tokenization', () => { test('', (done) => { - loadLanguage(languageId).then(() => { - runTests(languageId, tests); + _monaco.Promise.join(languages.map(l => loadLanguage(l))).then(() => { + runTests(mainLanguage, tests); done(); }).then(null, done); }); diff --git a/tsconfig.json b/tsconfig.json index 2fbe02f3..d7ad5943 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -28,6 +28,7 @@ "src/monaco.contribution.ts", "src/objective-c.ts", "src/postiats.ts", + "src/php.ts", "src/powershell.ts", "src/python.ts", "src/r.ts", @@ -51,6 +52,7 @@ "test/markdown.test.ts", "test/mocha.d.ts", "test/objective-c.test.ts", + "test/php.test.ts", "test/postiats.test.ts", "test/powershell.test.ts", "test/python.test.ts",