603 lines
12 KiB
JavaScript
603 lines
12 KiB
JavaScript
/*!-----------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Version: 0.36.1(6c56744c3419458f0dd48864520b759d1a3a1ca8)
|
|
* Released under the MIT license
|
|
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
|
|
*-----------------------------------------------------------------------------*/
|
|
|
|
// src/basic-languages/perl/perl.ts
|
|
var conf = {
|
|
comments: {
|
|
lineComment: "#"
|
|
},
|
|
brackets: [
|
|
["{", "}"],
|
|
["[", "]"],
|
|
["(", ")"]
|
|
],
|
|
autoClosingPairs: [
|
|
{ open: "{", close: "}" },
|
|
{ open: "[", close: "]" },
|
|
{ open: "(", close: ")" },
|
|
{ open: '"', close: '"' },
|
|
{ open: "'", close: "'" },
|
|
{ open: "`", close: "`" }
|
|
],
|
|
surroundingPairs: [
|
|
{ open: "{", close: "}" },
|
|
{ open: "[", close: "]" },
|
|
{ open: "(", close: ")" },
|
|
{ open: '"', close: '"' },
|
|
{ open: "'", close: "'" },
|
|
{ open: "`", close: "`" }
|
|
]
|
|
};
|
|
var language = {
|
|
defaultToken: "",
|
|
tokenPostfix: ".perl",
|
|
brackets: [
|
|
{ token: "delimiter.bracket", open: "{", close: "}" },
|
|
{ token: "delimiter.parenthesis", open: "(", close: ")" },
|
|
{ token: "delimiter.square", open: "[", close: "]" }
|
|
],
|
|
keywords: [
|
|
"__DATA__",
|
|
"else",
|
|
"lock",
|
|
"__END__",
|
|
"elsif",
|
|
"lt",
|
|
"__FILE__",
|
|
"eq",
|
|
"__LINE__",
|
|
"exp",
|
|
"ne",
|
|
"sub",
|
|
"__PACKAGE__",
|
|
"for",
|
|
"no",
|
|
"and",
|
|
"foreach",
|
|
"or",
|
|
"unless",
|
|
"cmp",
|
|
"ge",
|
|
"package",
|
|
"until",
|
|
"continue",
|
|
"gt",
|
|
"while",
|
|
"CORE",
|
|
"if",
|
|
"xor",
|
|
"do",
|
|
"le",
|
|
"__DIE__",
|
|
"__WARN__"
|
|
],
|
|
builtinFunctions: [
|
|
"-A",
|
|
"END",
|
|
"length",
|
|
"setpgrp",
|
|
"-B",
|
|
"endgrent",
|
|
"link",
|
|
"setpriority",
|
|
"-b",
|
|
"endhostent",
|
|
"listen",
|
|
"setprotoent",
|
|
"-C",
|
|
"endnetent",
|
|
"local",
|
|
"setpwent",
|
|
"-c",
|
|
"endprotoent",
|
|
"localtime",
|
|
"setservent",
|
|
"-d",
|
|
"endpwent",
|
|
"log",
|
|
"setsockopt",
|
|
"-e",
|
|
"endservent",
|
|
"lstat",
|
|
"shift",
|
|
"-f",
|
|
"eof",
|
|
"map",
|
|
"shmctl",
|
|
"-g",
|
|
"eval",
|
|
"mkdir",
|
|
"shmget",
|
|
"-k",
|
|
"exec",
|
|
"msgctl",
|
|
"shmread",
|
|
"-l",
|
|
"exists",
|
|
"msgget",
|
|
"shmwrite",
|
|
"-M",
|
|
"exit",
|
|
"msgrcv",
|
|
"shutdown",
|
|
"-O",
|
|
"fcntl",
|
|
"msgsnd",
|
|
"sin",
|
|
"-o",
|
|
"fileno",
|
|
"my",
|
|
"sleep",
|
|
"-p",
|
|
"flock",
|
|
"next",
|
|
"socket",
|
|
"-r",
|
|
"fork",
|
|
"not",
|
|
"socketpair",
|
|
"-R",
|
|
"format",
|
|
"oct",
|
|
"sort",
|
|
"-S",
|
|
"formline",
|
|
"open",
|
|
"splice",
|
|
"-s",
|
|
"getc",
|
|
"opendir",
|
|
"split",
|
|
"-T",
|
|
"getgrent",
|
|
"ord",
|
|
"sprintf",
|
|
"-t",
|
|
"getgrgid",
|
|
"our",
|
|
"sqrt",
|
|
"-u",
|
|
"getgrnam",
|
|
"pack",
|
|
"srand",
|
|
"-w",
|
|
"gethostbyaddr",
|
|
"pipe",
|
|
"stat",
|
|
"-W",
|
|
"gethostbyname",
|
|
"pop",
|
|
"state",
|
|
"-X",
|
|
"gethostent",
|
|
"pos",
|
|
"study",
|
|
"-x",
|
|
"getlogin",
|
|
"print",
|
|
"substr",
|
|
"-z",
|
|
"getnetbyaddr",
|
|
"printf",
|
|
"symlink",
|
|
"abs",
|
|
"getnetbyname",
|
|
"prototype",
|
|
"syscall",
|
|
"accept",
|
|
"getnetent",
|
|
"push",
|
|
"sysopen",
|
|
"alarm",
|
|
"getpeername",
|
|
"quotemeta",
|
|
"sysread",
|
|
"atan2",
|
|
"getpgrp",
|
|
"rand",
|
|
"sysseek",
|
|
"AUTOLOAD",
|
|
"getppid",
|
|
"read",
|
|
"system",
|
|
"BEGIN",
|
|
"getpriority",
|
|
"readdir",
|
|
"syswrite",
|
|
"bind",
|
|
"getprotobyname",
|
|
"readline",
|
|
"tell",
|
|
"binmode",
|
|
"getprotobynumber",
|
|
"readlink",
|
|
"telldir",
|
|
"bless",
|
|
"getprotoent",
|
|
"readpipe",
|
|
"tie",
|
|
"break",
|
|
"getpwent",
|
|
"recv",
|
|
"tied",
|
|
"caller",
|
|
"getpwnam",
|
|
"redo",
|
|
"time",
|
|
"chdir",
|
|
"getpwuid",
|
|
"ref",
|
|
"times",
|
|
"CHECK",
|
|
"getservbyname",
|
|
"rename",
|
|
"truncate",
|
|
"chmod",
|
|
"getservbyport",
|
|
"require",
|
|
"uc",
|
|
"chomp",
|
|
"getservent",
|
|
"reset",
|
|
"ucfirst",
|
|
"chop",
|
|
"getsockname",
|
|
"return",
|
|
"umask",
|
|
"chown",
|
|
"getsockopt",
|
|
"reverse",
|
|
"undef",
|
|
"chr",
|
|
"glob",
|
|
"rewinddir",
|
|
"UNITCHECK",
|
|
"chroot",
|
|
"gmtime",
|
|
"rindex",
|
|
"unlink",
|
|
"close",
|
|
"goto",
|
|
"rmdir",
|
|
"unpack",
|
|
"closedir",
|
|
"grep",
|
|
"say",
|
|
"unshift",
|
|
"connect",
|
|
"hex",
|
|
"scalar",
|
|
"untie",
|
|
"cos",
|
|
"index",
|
|
"seek",
|
|
"use",
|
|
"crypt",
|
|
"INIT",
|
|
"seekdir",
|
|
"utime",
|
|
"dbmclose",
|
|
"int",
|
|
"select",
|
|
"values",
|
|
"dbmopen",
|
|
"ioctl",
|
|
"semctl",
|
|
"vec",
|
|
"defined",
|
|
"join",
|
|
"semget",
|
|
"wait",
|
|
"delete",
|
|
"keys",
|
|
"semop",
|
|
"waitpid",
|
|
"DESTROY",
|
|
"kill",
|
|
"send",
|
|
"wantarray",
|
|
"die",
|
|
"last",
|
|
"setgrent",
|
|
"warn",
|
|
"dump",
|
|
"lc",
|
|
"sethostent",
|
|
"write",
|
|
"each",
|
|
"lcfirst",
|
|
"setnetent"
|
|
],
|
|
builtinFileHandlers: ["ARGV", "STDERR", "STDOUT", "ARGVOUT", "STDIN", "ENV"],
|
|
builtinVariables: [
|
|
"$!",
|
|
"$^RE_TRIE_MAXBUF",
|
|
"$LAST_REGEXP_CODE_RESULT",
|
|
'$"',
|
|
"$^S",
|
|
"$LIST_SEPARATOR",
|
|
"$#",
|
|
"$^T",
|
|
"$MATCH",
|
|
"$$",
|
|
"$^TAINT",
|
|
"$MULTILINE_MATCHING",
|
|
"$%",
|
|
"$^UNICODE",
|
|
"$NR",
|
|
"$&",
|
|
"$^UTF8LOCALE",
|
|
"$OFMT",
|
|
"$'",
|
|
"$^V",
|
|
"$OFS",
|
|
"$(",
|
|
"$^W",
|
|
"$ORS",
|
|
"$)",
|
|
"$^WARNING_BITS",
|
|
"$OS_ERROR",
|
|
"$*",
|
|
"$^WIDE_SYSTEM_CALLS",
|
|
"$OSNAME",
|
|
"$+",
|
|
"$^X",
|
|
"$OUTPUT_AUTO_FLUSH",
|
|
"$,",
|
|
"$_",
|
|
"$OUTPUT_FIELD_SEPARATOR",
|
|
"$-",
|
|
"$`",
|
|
"$OUTPUT_RECORD_SEPARATOR",
|
|
"$.",
|
|
"$a",
|
|
"$PERL_VERSION",
|
|
"$/",
|
|
"$ACCUMULATOR",
|
|
"$PERLDB",
|
|
"$0",
|
|
"$ARG",
|
|
"$PID",
|
|
"$:",
|
|
"$ARGV",
|
|
"$POSTMATCH",
|
|
"$;",
|
|
"$b",
|
|
"$PREMATCH",
|
|
"$<",
|
|
"$BASETIME",
|
|
"$PROCESS_ID",
|
|
"$=",
|
|
"$CHILD_ERROR",
|
|
"$PROGRAM_NAME",
|
|
"$>",
|
|
"$COMPILING",
|
|
"$REAL_GROUP_ID",
|
|
"$?",
|
|
"$DEBUGGING",
|
|
"$REAL_USER_ID",
|
|
"$@",
|
|
"$EFFECTIVE_GROUP_ID",
|
|
"$RS",
|
|
"$[",
|
|
"$EFFECTIVE_USER_ID",
|
|
"$SUBSCRIPT_SEPARATOR",
|
|
"$\\",
|
|
"$EGID",
|
|
"$SUBSEP",
|
|
"$]",
|
|
"$ERRNO",
|
|
"$SYSTEM_FD_MAX",
|
|
"$^",
|
|
"$EUID",
|
|
"$UID",
|
|
"$^A",
|
|
"$EVAL_ERROR",
|
|
"$WARNING",
|
|
"$^C",
|
|
"$EXCEPTIONS_BEING_CAUGHT",
|
|
"$|",
|
|
"$^CHILD_ERROR_NATIVE",
|
|
"$EXECUTABLE_NAME",
|
|
"$~",
|
|
"$^D",
|
|
"$EXTENDED_OS_ERROR",
|
|
"%!",
|
|
"$^E",
|
|
"$FORMAT_FORMFEED",
|
|
"%^H",
|
|
"$^ENCODING",
|
|
"$FORMAT_LINE_BREAK_CHARACTERS",
|
|
"%ENV",
|
|
"$^F",
|
|
"$FORMAT_LINES_LEFT",
|
|
"%INC",
|
|
"$^H",
|
|
"$FORMAT_LINES_PER_PAGE",
|
|
"%OVERLOAD",
|
|
"$^I",
|
|
"$FORMAT_NAME",
|
|
"%SIG",
|
|
"$^L",
|
|
"$FORMAT_PAGE_NUMBER",
|
|
"@+",
|
|
"$^M",
|
|
"$FORMAT_TOP_NAME",
|
|
"@-",
|
|
"$^N",
|
|
"$GID",
|
|
"@_",
|
|
"$^O",
|
|
"$INPLACE_EDIT",
|
|
"@ARGV",
|
|
"$^OPEN",
|
|
"$INPUT_LINE_NUMBER",
|
|
"@INC",
|
|
"$^P",
|
|
"$INPUT_RECORD_SEPARATOR",
|
|
"@LAST_MATCH_START",
|
|
"$^R",
|
|
"$LAST_MATCH_END",
|
|
"$^RE_DEBUG_FLAGS",
|
|
"$LAST_PAREN_MATCH"
|
|
],
|
|
symbols: /[:+\-\^*$&%@=<>!?|\/~\.]/,
|
|
quoteLikeOps: ["qr", "m", "s", "q", "qq", "qx", "qw", "tr", "y"],
|
|
escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
|
|
tokenizer: {
|
|
root: [
|
|
{ include: "@whitespace" },
|
|
[
|
|
/[a-zA-Z\-_][\w\-_]*/,
|
|
{
|
|
cases: {
|
|
"@keywords": "keyword",
|
|
"@builtinFunctions": "type.identifier",
|
|
"@builtinFileHandlers": "variable.predefined",
|
|
"@quoteLikeOps": {
|
|
token: "@rematch",
|
|
next: "quotedConstructs"
|
|
},
|
|
"@default": ""
|
|
}
|
|
}
|
|
],
|
|
[
|
|
/[\$@%][*@#?\+\-\$!\w\\\^><~:;\.]+/,
|
|
{
|
|
cases: {
|
|
"@builtinVariables": "variable.predefined",
|
|
"@default": "variable"
|
|
}
|
|
}
|
|
],
|
|
{ include: "@strings" },
|
|
{ include: "@dblStrings" },
|
|
{ include: "@perldoc" },
|
|
{ include: "@heredoc" },
|
|
[/[{}\[\]()]/, "@brackets"],
|
|
[/[\/](?:(?:\[(?:\\]|[^\]])+\])|(?:\\\/|[^\]\/]))*[\/]\w*\s*(?=[).,;]|$)/, "regexp"],
|
|
[/@symbols/, "operators"],
|
|
{ include: "@numbers" },
|
|
[/[,;]/, "delimiter"]
|
|
],
|
|
whitespace: [
|
|
[/\s+/, "white"],
|
|
[/(^#!.*$)/, "metatag"],
|
|
[/(^#.*$)/, "comment"]
|
|
],
|
|
numbers: [
|
|
[/\d*\.\d+([eE][\-+]?\d+)?/, "number.float"],
|
|
[/0[xX][0-9a-fA-F_]*[0-9a-fA-F]/, "number.hex"],
|
|
[/\d+/, "number"]
|
|
],
|
|
strings: [[/'/, "string", "@stringBody"]],
|
|
stringBody: [
|
|
[/'/, "string", "@popall"],
|
|
[/\\'/, "string.escape"],
|
|
[/./, "string"]
|
|
],
|
|
dblStrings: [[/"/, "string", "@dblStringBody"]],
|
|
dblStringBody: [
|
|
[/"/, "string", "@popall"],
|
|
[/@escapes/, "string.escape"],
|
|
[/\\./, "string.escape.invalid"],
|
|
{ include: "@variables" },
|
|
[/./, "string"]
|
|
],
|
|
quotedConstructs: [
|
|
[/(q|qw|tr|y)\s*\(/, { token: "string.delim", switchTo: "@qstring.(.)" }],
|
|
[/(q|qw|tr|y)\s*\[/, { token: "string.delim", switchTo: "@qstring.[.]" }],
|
|
[/(q|qw|tr|y)\s*\{/, { token: "string.delim", switchTo: "@qstring.{.}" }],
|
|
[/(q|qw|tr|y)\s*</, { token: "string.delim", switchTo: "@qstring.<.>" }],
|
|
[/(q|qw|tr|y)#/, { token: "string.delim", switchTo: "@qstring.#.#" }],
|
|
[/(q|qw|tr|y)\s*([^A-Za-z0-9#\s])/, { token: "string.delim", switchTo: "@qstring.$2.$2" }],
|
|
[/(q|qw|tr|y)\s+(\w)/, { token: "string.delim", switchTo: "@qstring.$2.$2" }],
|
|
[/(qr|m|s)\s*\(/, { token: "regexp.delim", switchTo: "@qregexp.(.)" }],
|
|
[/(qr|m|s)\s*\[/, { token: "regexp.delim", switchTo: "@qregexp.[.]" }],
|
|
[/(qr|m|s)\s*\{/, { token: "regexp.delim", switchTo: "@qregexp.{.}" }],
|
|
[/(qr|m|s)\s*</, { token: "regexp.delim", switchTo: "@qregexp.<.>" }],
|
|
[/(qr|m|s)#/, { token: "regexp.delim", switchTo: "@qregexp.#.#" }],
|
|
[/(qr|m|s)\s*([^A-Za-z0-9_#\s])/, { token: "regexp.delim", switchTo: "@qregexp.$2.$2" }],
|
|
[/(qr|m|s)\s+(\w)/, { token: "regexp.delim", switchTo: "@qregexp.$2.$2" }],
|
|
[/(qq|qx)\s*\(/, { token: "string.delim", switchTo: "@qqstring.(.)" }],
|
|
[/(qq|qx)\s*\[/, { token: "string.delim", switchTo: "@qqstring.[.]" }],
|
|
[/(qq|qx)\s*\{/, { token: "string.delim", switchTo: "@qqstring.{.}" }],
|
|
[/(qq|qx)\s*</, { token: "string.delim", switchTo: "@qqstring.<.>" }],
|
|
[/(qq|qx)#/, { token: "string.delim", switchTo: "@qqstring.#.#" }],
|
|
[/(qq|qx)\s*([^A-Za-z0-9#\s])/, { token: "string.delim", switchTo: "@qqstring.$2.$2" }],
|
|
[/(qq|qx)\s+(\w)/, { token: "string.delim", switchTo: "@qqstring.$2.$2" }]
|
|
],
|
|
qstring: [
|
|
[/\\./, "string.escape"],
|
|
[
|
|
/./,
|
|
{
|
|
cases: {
|
|
"$#==$S3": { token: "string.delim", next: "@pop" },
|
|
"$#==$S2": { token: "string.delim", next: "@push" },
|
|
"@default": "string"
|
|
}
|
|
}
|
|
]
|
|
],
|
|
qregexp: [
|
|
{ include: "@variables" },
|
|
[/\\./, "regexp.escape"],
|
|
[
|
|
/./,
|
|
{
|
|
cases: {
|
|
"$#==$S3": {
|
|
token: "regexp.delim",
|
|
next: "@regexpModifiers"
|
|
},
|
|
"$#==$S2": { token: "regexp.delim", next: "@push" },
|
|
"@default": "regexp"
|
|
}
|
|
}
|
|
]
|
|
],
|
|
regexpModifiers: [[/[msixpodualngcer]+/, { token: "regexp.modifier", next: "@popall" }]],
|
|
qqstring: [{ include: "@variables" }, { include: "@qstring" }],
|
|
heredoc: [
|
|
[/<<\s*['"`]?([\w\-]+)['"`]?/, { token: "string.heredoc.delimiter", next: "@heredocBody.$1" }]
|
|
],
|
|
heredocBody: [
|
|
[
|
|
/^([\w\-]+)$/,
|
|
{
|
|
cases: {
|
|
"$1==$S2": [
|
|
{
|
|
token: "string.heredoc.delimiter",
|
|
next: "@popall"
|
|
}
|
|
],
|
|
"@default": "string.heredoc"
|
|
}
|
|
}
|
|
],
|
|
[/./, "string.heredoc"]
|
|
],
|
|
perldoc: [[/^=\w/, "comment.doc", "@perldocBody"]],
|
|
perldocBody: [
|
|
[/^=cut\b/, "type.identifier", "@popall"],
|
|
[/./, "comment.doc"]
|
|
],
|
|
variables: [
|
|
[/\$\w+/, "variable"],
|
|
[/@\w+/, "variable"],
|
|
[/%\w+/, "variable"]
|
|
]
|
|
}
|
|
};
|
|
export {
|
|
conf,
|
|
language
|
|
};
|