nim.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. /*
  2. Language: Nim
  3. Description: Nim is a statically typed compiled systems programming language.
  4. Website: https://nim-lang.org
  5. Category: system
  6. */
  7. function nim(hljs) {
  8. const TYPES = [
  9. "int",
  10. "int8",
  11. "int16",
  12. "int32",
  13. "int64",
  14. "uint",
  15. "uint8",
  16. "uint16",
  17. "uint32",
  18. "uint64",
  19. "float",
  20. "float32",
  21. "float64",
  22. "bool",
  23. "char",
  24. "string",
  25. "cstring",
  26. "pointer",
  27. "expr",
  28. "stmt",
  29. "void",
  30. "auto",
  31. "any",
  32. "range",
  33. "array",
  34. "openarray",
  35. "varargs",
  36. "seq",
  37. "set",
  38. "clong",
  39. "culong",
  40. "cchar",
  41. "cschar",
  42. "cshort",
  43. "cint",
  44. "csize",
  45. "clonglong",
  46. "cfloat",
  47. "cdouble",
  48. "clongdouble",
  49. "cuchar",
  50. "cushort",
  51. "cuint",
  52. "culonglong",
  53. "cstringarray",
  54. "semistatic"
  55. ];
  56. const KEYWORDS = [
  57. "addr",
  58. "and",
  59. "as",
  60. "asm",
  61. "bind",
  62. "block",
  63. "break",
  64. "case",
  65. "cast",
  66. "concept",
  67. "const",
  68. "continue",
  69. "converter",
  70. "defer",
  71. "discard",
  72. "distinct",
  73. "div",
  74. "do",
  75. "elif",
  76. "else",
  77. "end",
  78. "enum",
  79. "except",
  80. "export",
  81. "finally",
  82. "for",
  83. "from",
  84. "func",
  85. "generic",
  86. "guarded",
  87. "if",
  88. "import",
  89. "in",
  90. "include",
  91. "interface",
  92. "is",
  93. "isnot",
  94. "iterator",
  95. "let",
  96. "macro",
  97. "method",
  98. "mixin",
  99. "mod",
  100. "nil",
  101. "not",
  102. "notin",
  103. "object",
  104. "of",
  105. "or",
  106. "out",
  107. "proc",
  108. "ptr",
  109. "raise",
  110. "ref",
  111. "return",
  112. "shared",
  113. "shl",
  114. "shr",
  115. "static",
  116. "template",
  117. "try",
  118. "tuple",
  119. "type",
  120. "using",
  121. "var",
  122. "when",
  123. "while",
  124. "with",
  125. "without",
  126. "xor",
  127. "yield"
  128. ];
  129. const BUILT_INS = [
  130. "stdin",
  131. "stdout",
  132. "stderr",
  133. "result"
  134. ];
  135. const LITERALS = [
  136. "true",
  137. "false"
  138. ];
  139. return {
  140. name: 'Nim',
  141. keywords: {
  142. keyword: KEYWORDS,
  143. literal: LITERALS,
  144. type: TYPES,
  145. built_in: BUILT_INS
  146. },
  147. contains: [
  148. {
  149. className: 'meta', // Actually pragma
  150. begin: /\{\./,
  151. end: /\.\}/,
  152. relevance: 10
  153. },
  154. {
  155. className: 'string',
  156. begin: /[a-zA-Z]\w*"/,
  157. end: /"/,
  158. contains: [ { begin: /""/ } ]
  159. },
  160. {
  161. className: 'string',
  162. begin: /([a-zA-Z]\w*)?"""/,
  163. end: /"""/
  164. },
  165. hljs.QUOTE_STRING_MODE,
  166. {
  167. className: 'type',
  168. begin: /\b[A-Z]\w+\b/,
  169. relevance: 0
  170. },
  171. {
  172. className: 'number',
  173. relevance: 0,
  174. variants: [
  175. { begin: /\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/ },
  176. { begin: /\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/ },
  177. { begin: /\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/ },
  178. { begin: /\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/ }
  179. ]
  180. },
  181. hljs.HASH_COMMENT_MODE
  182. ]
  183. };
  184. }
  185. export { nim as default };