perl.js 12 KB

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