perl.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616
  1. /*!-----------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Version: 0.31.1(337587859b1c171314b40503171188b6cea6a32a)
  4. * Released under the MIT license
  5. * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
  6. *-----------------------------------------------------------------------------*/
  7. define("vs/basic-languages/perl/perl",[],()=>{
  8. var moduleExports = (() => {
  9. var __defProp = Object.defineProperty;
  10. var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
  11. var __export = (target, all) => {
  12. __markAsModule(target);
  13. for (var name in all)
  14. __defProp(target, name, { get: all[name], enumerable: true });
  15. };
  16. // src/basic-languages/perl/perl.ts
  17. var perl_exports = {};
  18. __export(perl_exports, {
  19. conf: () => conf,
  20. language: () => language
  21. });
  22. var conf = {
  23. comments: {
  24. lineComment: "#"
  25. },
  26. brackets: [
  27. ["{", "}"],
  28. ["[", "]"],
  29. ["(", ")"]
  30. ],
  31. autoClosingPairs: [
  32. { open: "{", close: "}" },
  33. { open: "[", close: "]" },
  34. { open: "(", close: ")" },
  35. { open: '"', close: '"' },
  36. { open: "'", close: "'" },
  37. { open: "`", close: "`" }
  38. ],
  39. surroundingPairs: [
  40. { open: "{", close: "}" },
  41. { open: "[", close: "]" },
  42. { open: "(", close: ")" },
  43. { open: '"', close: '"' },
  44. { open: "'", close: "'" },
  45. { open: "`", close: "`" }
  46. ]
  47. };
  48. var language = {
  49. defaultToken: "",
  50. tokenPostfix: ".perl",
  51. brackets: [
  52. { token: "delimiter.bracket", open: "{", close: "}" },
  53. { token: "delimiter.parenthesis", open: "(", close: ")" },
  54. { token: "delimiter.square", open: "[", close: "]" }
  55. ],
  56. keywords: [
  57. "__DATA__",
  58. "else",
  59. "lock",
  60. "__END__",
  61. "elsif",
  62. "lt",
  63. "__FILE__",
  64. "eq",
  65. "__LINE__",
  66. "exp",
  67. "ne",
  68. "sub",
  69. "__PACKAGE__",
  70. "for",
  71. "no",
  72. "and",
  73. "foreach",
  74. "or",
  75. "unless",
  76. "cmp",
  77. "ge",
  78. "package",
  79. "until",
  80. "continue",
  81. "gt",
  82. "while",
  83. "CORE",
  84. "if",
  85. "xor",
  86. "do",
  87. "le",
  88. "__DIE__",
  89. "__WARN__"
  90. ],
  91. builtinFunctions: [
  92. "-A",
  93. "END",
  94. "length",
  95. "setpgrp",
  96. "-B",
  97. "endgrent",
  98. "link",
  99. "setpriority",
  100. "-b",
  101. "endhostent",
  102. "listen",
  103. "setprotoent",
  104. "-C",
  105. "endnetent",
  106. "local",
  107. "setpwent",
  108. "-c",
  109. "endprotoent",
  110. "localtime",
  111. "setservent",
  112. "-d",
  113. "endpwent",
  114. "log",
  115. "setsockopt",
  116. "-e",
  117. "endservent",
  118. "lstat",
  119. "shift",
  120. "-f",
  121. "eof",
  122. "map",
  123. "shmctl",
  124. "-g",
  125. "eval",
  126. "mkdir",
  127. "shmget",
  128. "-k",
  129. "exec",
  130. "msgctl",
  131. "shmread",
  132. "-l",
  133. "exists",
  134. "msgget",
  135. "shmwrite",
  136. "-M",
  137. "exit",
  138. "msgrcv",
  139. "shutdown",
  140. "-O",
  141. "fcntl",
  142. "msgsnd",
  143. "sin",
  144. "-o",
  145. "fileno",
  146. "my",
  147. "sleep",
  148. "-p",
  149. "flock",
  150. "next",
  151. "socket",
  152. "-r",
  153. "fork",
  154. "not",
  155. "socketpair",
  156. "-R",
  157. "format",
  158. "oct",
  159. "sort",
  160. "-S",
  161. "formline",
  162. "open",
  163. "splice",
  164. "-s",
  165. "getc",
  166. "opendir",
  167. "split",
  168. "-T",
  169. "getgrent",
  170. "ord",
  171. "sprintf",
  172. "-t",
  173. "getgrgid",
  174. "our",
  175. "sqrt",
  176. "-u",
  177. "getgrnam",
  178. "pack",
  179. "srand",
  180. "-w",
  181. "gethostbyaddr",
  182. "pipe",
  183. "stat",
  184. "-W",
  185. "gethostbyname",
  186. "pop",
  187. "state",
  188. "-X",
  189. "gethostent",
  190. "pos",
  191. "study",
  192. "-x",
  193. "getlogin",
  194. "print",
  195. "substr",
  196. "-z",
  197. "getnetbyaddr",
  198. "printf",
  199. "symlink",
  200. "abs",
  201. "getnetbyname",
  202. "prototype",
  203. "syscall",
  204. "accept",
  205. "getnetent",
  206. "push",
  207. "sysopen",
  208. "alarm",
  209. "getpeername",
  210. "quotemeta",
  211. "sysread",
  212. "atan2",
  213. "getpgrp",
  214. "rand",
  215. "sysseek",
  216. "AUTOLOAD",
  217. "getppid",
  218. "read",
  219. "system",
  220. "BEGIN",
  221. "getpriority",
  222. "readdir",
  223. "syswrite",
  224. "bind",
  225. "getprotobyname",
  226. "readline",
  227. "tell",
  228. "binmode",
  229. "getprotobynumber",
  230. "readlink",
  231. "telldir",
  232. "bless",
  233. "getprotoent",
  234. "readpipe",
  235. "tie",
  236. "break",
  237. "getpwent",
  238. "recv",
  239. "tied",
  240. "caller",
  241. "getpwnam",
  242. "redo",
  243. "time",
  244. "chdir",
  245. "getpwuid",
  246. "ref",
  247. "times",
  248. "CHECK",
  249. "getservbyname",
  250. "rename",
  251. "truncate",
  252. "chmod",
  253. "getservbyport",
  254. "require",
  255. "uc",
  256. "chomp",
  257. "getservent",
  258. "reset",
  259. "ucfirst",
  260. "chop",
  261. "getsockname",
  262. "return",
  263. "umask",
  264. "chown",
  265. "getsockopt",
  266. "reverse",
  267. "undef",
  268. "chr",
  269. "glob",
  270. "rewinddir",
  271. "UNITCHECK",
  272. "chroot",
  273. "gmtime",
  274. "rindex",
  275. "unlink",
  276. "close",
  277. "goto",
  278. "rmdir",
  279. "unpack",
  280. "closedir",
  281. "grep",
  282. "say",
  283. "unshift",
  284. "connect",
  285. "hex",
  286. "scalar",
  287. "untie",
  288. "cos",
  289. "index",
  290. "seek",
  291. "use",
  292. "crypt",
  293. "INIT",
  294. "seekdir",
  295. "utime",
  296. "dbmclose",
  297. "int",
  298. "select",
  299. "values",
  300. "dbmopen",
  301. "ioctl",
  302. "semctl",
  303. "vec",
  304. "defined",
  305. "join",
  306. "semget",
  307. "wait",
  308. "delete",
  309. "keys",
  310. "semop",
  311. "waitpid",
  312. "DESTROY",
  313. "kill",
  314. "send",
  315. "wantarray",
  316. "die",
  317. "last",
  318. "setgrent",
  319. "warn",
  320. "dump",
  321. "lc",
  322. "sethostent",
  323. "write",
  324. "each",
  325. "lcfirst",
  326. "setnetent"
  327. ],
  328. builtinFileHandlers: ["ARGV", "STDERR", "STDOUT", "ARGVOUT", "STDIN", "ENV"],
  329. builtinVariables: [
  330. "$!",
  331. "$^RE_TRIE_MAXBUF",
  332. "$LAST_REGEXP_CODE_RESULT",
  333. '$"',
  334. "$^S",
  335. "$LIST_SEPARATOR",
  336. "$#",
  337. "$^T",
  338. "$MATCH",
  339. "$$",
  340. "$^TAINT",
  341. "$MULTILINE_MATCHING",
  342. "$%",
  343. "$^UNICODE",
  344. "$NR",
  345. "$&",
  346. "$^UTF8LOCALE",
  347. "$OFMT",
  348. "$'",
  349. "$^V",
  350. "$OFS",
  351. "$(",
  352. "$^W",
  353. "$ORS",
  354. "$)",
  355. "$^WARNING_BITS",
  356. "$OS_ERROR",
  357. "$*",
  358. "$^WIDE_SYSTEM_CALLS",
  359. "$OSNAME",
  360. "$+",
  361. "$^X",
  362. "$OUTPUT_AUTO_FLUSH",
  363. "$,",
  364. "$_",
  365. "$OUTPUT_FIELD_SEPARATOR",
  366. "$-",
  367. "$`",
  368. "$OUTPUT_RECORD_SEPARATOR",
  369. "$.",
  370. "$a",
  371. "$PERL_VERSION",
  372. "$/",
  373. "$ACCUMULATOR",
  374. "$PERLDB",
  375. "$0",
  376. "$ARG",
  377. "$PID",
  378. "$:",
  379. "$ARGV",
  380. "$POSTMATCH",
  381. "$;",
  382. "$b",
  383. "$PREMATCH",
  384. "$<",
  385. "$BASETIME",
  386. "$PROCESS_ID",
  387. "$=",
  388. "$CHILD_ERROR",
  389. "$PROGRAM_NAME",
  390. "$>",
  391. "$COMPILING",
  392. "$REAL_GROUP_ID",
  393. "$?",
  394. "$DEBUGGING",
  395. "$REAL_USER_ID",
  396. "$@",
  397. "$EFFECTIVE_GROUP_ID",
  398. "$RS",
  399. "$[",
  400. "$EFFECTIVE_USER_ID",
  401. "$SUBSCRIPT_SEPARATOR",
  402. "$\\",
  403. "$EGID",
  404. "$SUBSEP",
  405. "$]",
  406. "$ERRNO",
  407. "$SYSTEM_FD_MAX",
  408. "$^",
  409. "$EUID",
  410. "$UID",
  411. "$^A",
  412. "$EVAL_ERROR",
  413. "$WARNING",
  414. "$^C",
  415. "$EXCEPTIONS_BEING_CAUGHT",
  416. "$|",
  417. "$^CHILD_ERROR_NATIVE",
  418. "$EXECUTABLE_NAME",
  419. "$~",
  420. "$^D",
  421. "$EXTENDED_OS_ERROR",
  422. "%!",
  423. "$^E",
  424. "$FORMAT_FORMFEED",
  425. "%^H",
  426. "$^ENCODING",
  427. "$FORMAT_LINE_BREAK_CHARACTERS",
  428. "%ENV",
  429. "$^F",
  430. "$FORMAT_LINES_LEFT",
  431. "%INC",
  432. "$^H",
  433. "$FORMAT_LINES_PER_PAGE",
  434. "%OVERLOAD",
  435. "$^I",
  436. "$FORMAT_NAME",
  437. "%SIG",
  438. "$^L",
  439. "$FORMAT_PAGE_NUMBER",
  440. "@+",
  441. "$^M",
  442. "$FORMAT_TOP_NAME",
  443. "@-",
  444. "$^N",
  445. "$GID",
  446. "@_",
  447. "$^O",
  448. "$INPLACE_EDIT",
  449. "@ARGV",
  450. "$^OPEN",
  451. "$INPUT_LINE_NUMBER",
  452. "@INC",
  453. "$^P",
  454. "$INPUT_RECORD_SEPARATOR",
  455. "@LAST_MATCH_START",
  456. "$^R",
  457. "$LAST_MATCH_END",
  458. "$^RE_DEBUG_FLAGS",
  459. "$LAST_PAREN_MATCH"
  460. ],
  461. symbols: /[:+\-\^*$&%@=<>!?|\/~\.]/,
  462. quoteLikeOps: ["qr", "m", "s", "q", "qq", "qx", "qw", "tr", "y"],
  463. escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
  464. tokenizer: {
  465. root: [
  466. { include: "@whitespace" },
  467. [
  468. /[a-zA-Z\-_][\w\-_]*/,
  469. {
  470. cases: {
  471. "@keywords": "keyword",
  472. "@builtinFunctions": "type.identifier",
  473. "@builtinFileHandlers": "variable.predefined",
  474. "@quoteLikeOps": {
  475. token: "@rematch",
  476. next: "quotedConstructs"
  477. },
  478. "@default": ""
  479. }
  480. }
  481. ],
  482. [
  483. /[\$@%][*@#?\+\-\$!\w\\\^><~:;\.]+/,
  484. {
  485. cases: {
  486. "@builtinVariables": "variable.predefined",
  487. "@default": "variable"
  488. }
  489. }
  490. ],
  491. { include: "@strings" },
  492. { include: "@dblStrings" },
  493. { include: "@perldoc" },
  494. { include: "@heredoc" },
  495. [/[{}\[\]()]/, "@brackets"],
  496. [/[\/](?:(?:\[(?:\\]|[^\]])+\])|(?:\\\/|[^\]\/]))*[\/]\w*\s*(?=[).,;]|$)/, "regexp"],
  497. [/@symbols/, "operators"],
  498. { include: "@numbers" },
  499. [/[,;]/, "delimiter"]
  500. ],
  501. whitespace: [
  502. [/\s+/, "white"],
  503. [/(^#!.*$)/, "metatag"],
  504. [/(^#.*$)/, "comment"]
  505. ],
  506. numbers: [
  507. [/\d*\.\d+([eE][\-+]?\d+)?/, "number.float"],
  508. [/0[xX][0-9a-fA-F_]*[0-9a-fA-F]/, "number.hex"],
  509. [/\d+/, "number"]
  510. ],
  511. strings: [[/'/, "string", "@stringBody"]],
  512. stringBody: [
  513. [/'/, "string", "@popall"],
  514. [/\\'/, "string.escape"],
  515. [/./, "string"]
  516. ],
  517. dblStrings: [[/"/, "string", "@dblStringBody"]],
  518. dblStringBody: [
  519. [/"/, "string", "@popall"],
  520. [/@escapes/, "string.escape"],
  521. [/\\./, "string.escape.invalid"],
  522. { include: "@variables" },
  523. [/./, "string"]
  524. ],
  525. quotedConstructs: [
  526. [/(q|qw|tr|y)\s*\(/, { token: "string.delim", switchTo: "@qstring.(.)" }],
  527. [/(q|qw|tr|y)\s*\[/, { token: "string.delim", switchTo: "@qstring.[.]" }],
  528. [/(q|qw|tr|y)\s*\{/, { token: "string.delim", switchTo: "@qstring.{.}" }],
  529. [/(q|qw|tr|y)\s*</, { token: "string.delim", switchTo: "@qstring.<.>" }],
  530. [/(q|qw|tr|y)#/, { token: "string.delim", switchTo: "@qstring.#.#" }],
  531. [/(q|qw|tr|y)\s*([^A-Za-z0-9#\s])/, { token: "string.delim", switchTo: "@qstring.$2.$2" }],
  532. [/(q|qw|tr|y)\s+(\w)/, { token: "string.delim", switchTo: "@qstring.$2.$2" }],
  533. [/(qr|m|s)\s*\(/, { token: "regexp.delim", switchTo: "@qregexp.(.)" }],
  534. [/(qr|m|s)\s*\[/, { token: "regexp.delim", switchTo: "@qregexp.[.]" }],
  535. [/(qr|m|s)\s*\{/, { token: "regexp.delim", switchTo: "@qregexp.{.}" }],
  536. [/(qr|m|s)\s*</, { token: "regexp.delim", switchTo: "@qregexp.<.>" }],
  537. [/(qr|m|s)#/, { token: "regexp.delim", switchTo: "@qregexp.#.#" }],
  538. [/(qr|m|s)\s*([^A-Za-z0-9_#\s])/, { token: "regexp.delim", switchTo: "@qregexp.$2.$2" }],
  539. [/(qr|m|s)\s+(\w)/, { token: "regexp.delim", switchTo: "@qregexp.$2.$2" }],
  540. [/(qq|qx)\s*\(/, { token: "string.delim", switchTo: "@qqstring.(.)" }],
  541. [/(qq|qx)\s*\[/, { token: "string.delim", switchTo: "@qqstring.[.]" }],
  542. [/(qq|qx)\s*\{/, { token: "string.delim", switchTo: "@qqstring.{.}" }],
  543. [/(qq|qx)\s*</, { token: "string.delim", switchTo: "@qqstring.<.>" }],
  544. [/(qq|qx)#/, { token: "string.delim", switchTo: "@qqstring.#.#" }],
  545. [/(qq|qx)\s*([^A-Za-z0-9#\s])/, { token: "string.delim", switchTo: "@qqstring.$2.$2" }],
  546. [/(qq|qx)\s+(\w)/, { token: "string.delim", switchTo: "@qqstring.$2.$2" }]
  547. ],
  548. qstring: [
  549. [/\\./, "string.escape"],
  550. [
  551. /./,
  552. {
  553. cases: {
  554. "$#==$S3": { token: "string.delim", next: "@pop" },
  555. "$#==$S2": { token: "string.delim", next: "@push" },
  556. "@default": "string"
  557. }
  558. }
  559. ]
  560. ],
  561. qregexp: [
  562. { include: "@variables" },
  563. [/\\./, "regexp.escape"],
  564. [
  565. /./,
  566. {
  567. cases: {
  568. "$#==$S3": {
  569. token: "regexp.delim",
  570. next: "@regexpModifiers"
  571. },
  572. "$#==$S2": { token: "regexp.delim", next: "@push" },
  573. "@default": "regexp"
  574. }
  575. }
  576. ]
  577. ],
  578. regexpModifiers: [[/[msixpodualngcer]+/, { token: "regexp.modifier", next: "@popall" }]],
  579. qqstring: [{ include: "@variables" }, { include: "@qstring" }],
  580. heredoc: [
  581. [/<<\s*['"`]?([\w\-]+)['"`]?/, { token: "string.heredoc.delimiter", next: "@heredocBody.$1" }]
  582. ],
  583. heredocBody: [
  584. [
  585. /^([\w\-]+)$/,
  586. {
  587. cases: {
  588. "$1==$S2": [
  589. {
  590. token: "string.heredoc.delimiter",
  591. next: "@popall"
  592. }
  593. ],
  594. "@default": "string.heredoc"
  595. }
  596. }
  597. ],
  598. [/./, "string.heredoc"]
  599. ],
  600. perldoc: [[/^=\w/, "comment.doc", "@perldocBody"]],
  601. perldocBody: [
  602. [/^=cut\b/, "type.identifier", "@popall"],
  603. [/./, "comment.doc"]
  604. ],
  605. variables: [
  606. [/\$\w+/, "variable"],
  607. [/@\w+/, "variable"],
  608. [/%\w+/, "variable"]
  609. ]
  610. }
  611. };
  612. return perl_exports;
  613. })();
  614. return moduleExports;
  615. });