@speed-highlight/core 1.1.6 → 1.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/README.md +65 -14
  2. package/doc/common.js.html +87 -0
  3. package/doc/css/jsdoc-template.css +1 -0
  4. package/doc/css/tomorrow.min.css +2 -0
  5. package/doc/detect%0ALanguage%20detectormodule_.html +309 -0
  6. package/doc/detect.js.html +113 -0
  7. package/doc/global.html +1826 -0
  8. package/doc/index%0ABase%20scriptmodule_.html +1179 -0
  9. package/doc/index.html +402 -0
  10. package/doc/index.js.html +209 -0
  11. package/doc/js/jsdoc-template.js +2 -0
  12. package/doc/js/jsdoc-template.js.map +1 -0
  13. package/doc/js/prettify.min.js +47 -0
  14. package/doc/term%0ATerminal%20adaptormodule_.html +596 -0
  15. package/doc/term.js.html +108 -0
  16. package/examples/{helper/data.js → data.js} +28 -16
  17. package/examples/deno.js +53 -7
  18. package/examples/index.html +103 -37
  19. package/examples/languages/test.c +1 -1
  20. package/examples/languages/test.go +4 -4
  21. package/examples/languages/test.html +1 -1
  22. package/examples/languages/test.java +3 -3
  23. package/examples/node.js +1 -1
  24. package/examples/worker.html +1 -0
  25. package/jsdoc.json +16 -0
  26. package/package.json +42 -38
  27. package/src/color.js +11 -0
  28. package/src/detect.js +21 -5
  29. package/src/index.js +55 -40
  30. package/src/languages/c.js +1 -1
  31. package/src/languages/go.js +1 -1
  32. package/src/languages/java.js +1 -1
  33. package/src/languages/js.js +1 -1
  34. package/src/languages/py.js +1 -1
  35. package/src/languages/rs.js +1 -1
  36. package/src/terminal.js +42 -0
  37. package/src/themes/atom-dark.css +1 -1
  38. package/src/themes/atom-dark.js +18 -0
  39. package/src/themes/default.css +4 -9
  40. package/src/themes/default.js +16 -24
  41. package/typedef.js +34 -0
  42. package/assets/screenshot.png +0 -0
  43. package/dist/common.js +0 -1
  44. package/dist/detect.js +0 -1
  45. package/dist/index.js +0 -3
  46. package/dist/languages/asm.js +0 -1
  47. package/dist/languages/bash.js +0 -1
  48. package/dist/languages/bf.js +0 -1
  49. package/dist/languages/c.js +0 -1
  50. package/dist/languages/css.js +0 -1
  51. package/dist/languages/csv.js +0 -1
  52. package/dist/languages/diff.js +0 -1
  53. package/dist/languages/docker.js +0 -1
  54. package/dist/languages/git.js +0 -1
  55. package/dist/languages/go.js +0 -1
  56. package/dist/languages/html.js +0 -1
  57. package/dist/languages/http.js +0 -1
  58. package/dist/languages/ini.js +0 -1
  59. package/dist/languages/java.js +0 -1
  60. package/dist/languages/js.js +0 -1
  61. package/dist/languages/js_template_literals.js +0 -1
  62. package/dist/languages/jsdoc.js +0 -1
  63. package/dist/languages/json.js +0 -1
  64. package/dist/languages/leanpub-md.js +0 -2
  65. package/dist/languages/log.js +0 -1
  66. package/dist/languages/lua.js +0 -1
  67. package/dist/languages/make.js +0 -1
  68. package/dist/languages/md.js +0 -2
  69. package/dist/languages/pl.js +0 -1
  70. package/dist/languages/plain.js +0 -1
  71. package/dist/languages/py.js +0 -1
  72. package/dist/languages/regex.js +0 -1
  73. package/dist/languages/rs.js +0 -1
  74. package/dist/languages/sql.js +0 -1
  75. package/dist/languages/todo.js +0 -1
  76. package/dist/languages/toml.js +0 -1
  77. package/dist/languages/ts.js +0 -1
  78. package/dist/languages/uri.js +0 -1
  79. package/dist/languages/xml.js +0 -1
  80. package/dist/languages/yaml.js +0 -1
  81. package/dist/node/common.js +0 -1
  82. package/dist/node/detect.js +0 -1
  83. package/dist/node/index.js +0 -3
  84. package/dist/node/languages/asm.js +0 -1
  85. package/dist/node/languages/bash.js +0 -1
  86. package/dist/node/languages/bf.js +0 -1
  87. package/dist/node/languages/c.js +0 -1
  88. package/dist/node/languages/css.js +0 -1
  89. package/dist/node/languages/csv.js +0 -1
  90. package/dist/node/languages/diff.js +0 -1
  91. package/dist/node/languages/docker.js +0 -1
  92. package/dist/node/languages/git.js +0 -1
  93. package/dist/node/languages/go.js +0 -1
  94. package/dist/node/languages/html.js +0 -1
  95. package/dist/node/languages/http.js +0 -1
  96. package/dist/node/languages/ini.js +0 -1
  97. package/dist/node/languages/java.js +0 -1
  98. package/dist/node/languages/js.js +0 -1
  99. package/dist/node/languages/js_template_literals.js +0 -1
  100. package/dist/node/languages/jsdoc.js +0 -1
  101. package/dist/node/languages/json.js +0 -1
  102. package/dist/node/languages/leanpub-md.js +0 -2
  103. package/dist/node/languages/log.js +0 -1
  104. package/dist/node/languages/lua.js +0 -1
  105. package/dist/node/languages/make.js +0 -1
  106. package/dist/node/languages/md.js +0 -2
  107. package/dist/node/languages/pl.js +0 -1
  108. package/dist/node/languages/plain.js +0 -1
  109. package/dist/node/languages/py.js +0 -1
  110. package/dist/node/languages/regex.js +0 -1
  111. package/dist/node/languages/rs.js +0 -1
  112. package/dist/node/languages/sql.js +0 -1
  113. package/dist/node/languages/todo.js +0 -1
  114. package/dist/node/languages/toml.js +0 -1
  115. package/dist/node/languages/ts.js +0 -1
  116. package/dist/node/languages/uri.js +0 -1
  117. package/dist/node/languages/xml.js +0 -1
  118. package/dist/node/languages/yaml.js +0 -1
  119. package/dist/node/term.js +0 -1
  120. package/dist/node/themes/default.js +0 -1
  121. package/dist/term.js +0 -1
  122. package/dist/themes/atom-dark.css +0 -1
  123. package/dist/themes/dark.css +0 -1
  124. package/dist/themes/default.css +0 -1
  125. package/dist/themes/default.js +0 -1
  126. package/dist/themes/github-dark.css +0 -1
  127. package/dist/themes/github-dim.css +0 -1
  128. package/dist/themes/github-light.css +0 -1
  129. package/dist/themes/visual-studio-dark.css +0 -1
  130. package/examples/dist.html +0 -27
  131. package/examples/helper/elm.js +0 -58
  132. package/examples/style.css +0 -28
  133. package/src/term.js +0 -19
@@ -1,51 +1,63 @@
1
+ import '../typedef.js'
2
+
3
+ /** @type {ShjLanguage[]} */
1
4
  export const languages = [
5
+ 'js',
6
+ 'py',
2
7
  'bash',
3
- 'bf',
8
+ 'ts',
9
+ 'c',
4
10
  'css',
11
+ 'asm',
5
12
  'csv',
6
13
  'diff',
14
+ 'docker',
7
15
  'git',
16
+ 'go',
8
17
  'html',
9
18
  'http',
10
19
  'ini',
11
- 'js',
20
+ 'java',
12
21
  'jsdoc',
13
22
  'json',
14
23
  'leanpub-md',
24
+ 'bf',
15
25
  'log',
16
26
  'lua',
17
27
  'make',
18
28
  'md',
19
29
  'pl',
20
30
  'plain',
21
- 'py',
22
31
  'regex',
32
+ 'rs',
23
33
  'sql',
24
34
  'todo',
25
35
  'toml',
26
- 'ts',
27
36
  'uri',
28
- 'yaml',
29
- 'docker',
30
37
  'xml',
31
- 'c',
32
- 'rs',
33
- 'go',
34
- 'java',
35
- 'asm'
36
- ];
37
- export const themes = [
38
+ 'yaml'
39
+ ]
40
+
41
+ /** @type {ShjBrowserTheme[]} */
42
+ export const themesBrowser = [
43
+ 'default',
38
44
  'atom-dark',
39
45
  'github-dark',
40
46
  'github-dim',
41
47
  'dark',
42
- 'default',
43
48
  'github-light',
44
49
  'visual-studio-dark'
45
- ];
50
+ ]
51
+
52
+ /** @type {ShjTerminalTheme[]} */
53
+ export const themesTerminal = [
54
+ 'default',
55
+ 'atom-dark'
56
+ ]
57
+
46
58
  export const testFiles = [
47
59
  ...languages,
48
60
  'oneline.bash',
49
61
  'oneline.http',
50
62
  'screenshot.js'
51
- ];
63
+ ]
package/examples/deno.js CHANGED
@@ -1,14 +1,60 @@
1
- import { setTheme, printHighlight } from '../src/term.js';
1
+ import { languages, themesTerminal } from './data.js'
2
+ import { setTheme, printHighlight } from '../src/terminal.js';
2
3
  import { fromFileUrl } from 'https://deno.land/std/path/mod.ts';
4
+ import { parse } from "https://deno.land/std/flags/mod.ts"
3
5
 
4
- const lang = Deno.args[0] ?? 'js';
6
+ let args = parse(Deno.args)
5
7
 
6
- const path = fromFileUrl(import.meta.url.replace(/[^\\\/]+$/, `languages/test.${lang}`))
8
+ if (args.help)
9
+ {
10
+ console.log(`Usage deno run --allow-read deno.js [OPTION]... [TEST_FILE]`)
11
+ console.log(``)
12
+ console.log(` --help display this help and exit`)
13
+ console.log(` --theme=[-]THEME change the used THEME`)
14
+ console.log(` --lang=[-]LANGUAGE change the used LANGUAGE`)
15
+ console.log(` --stdin highlight code given from the stdin`)
16
+ console.log(``)
17
+ console.log(`THEME may be:`)
18
+ console.log(`${themesTerminal.join(', ')}`)
19
+ console.log(`LANGUAGE may be:`)
20
+ console.log(`${languages.join(', ')}`)
21
+ Deno.exit(0)
22
+ }
23
+
24
+ if (args.theme)
25
+ {
26
+ if (!themesTerminal.includes(args.theme))
27
+ {
28
+ console.error(`'${args.theme}' is not a supported try on of the following theme:`)
29
+ console.log(`${themesTerminal.join(', ')}`)
30
+ Deno.exit(1)
31
+ }
32
+ await setTheme(args.theme)
33
+ }
34
+
35
+ if (args.lang && !languages.includes(args.lang))
36
+ {
37
+ console.error(`'${args.lang}' is not a supported try on of the following languages:`)
38
+ console.log(`${languages.join(', ')}`)
39
+ Deno.exit(1)
40
+ }
41
+
42
+ if (args.stdin)
43
+ {
44
+ const buf = new Uint8Array(1024)
45
+ let n;
46
+ do {
47
+ n = await Deno.stdin.read(buf)
48
+ const code = new TextDecoder().decode(buf.subarray(0, n))
49
+ await printHighlight(code, args.lang ?? 'js');
50
+ } while (n)
51
+ Deno.exit(0)
52
+ }
53
+
54
+ const absolutePath = args._[0] ?? fromFileUrl(import.meta.url.replace(/[^\\\/]+$/, './languages/test.js'))
7
55
  .replace(Deno.cwd(), '')
8
56
  .slice(1)
9
57
 
10
- const code = await Deno.readTextFile(path);
11
-
12
- await setTheme('default');
58
+ const code = await Deno.readTextFile(absolutePath);
13
59
 
14
- printHighlight(code, lang);
60
+ printHighlight(code, args.lang ?? args._[0]?.split?.('.')?.[1] ?? 'js');
@@ -2,51 +2,117 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
- <title>Languages | Speed highlight JS</title>
6
- <link rel="stylesheet" href="./style.css">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <meta name="description" content="Showcase of all supported languages by Speed-highlight JS">
7
+ <title>Languages | Speed-highlight JS</title>
8
+ <style>
9
+ @import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400&display=swap');
10
+ main {
11
+ max-width: 1000px;
12
+ margin: 0 auto
13
+ }
14
+ .fira {font: 18px 'Fira Code', monospace !important}
15
+
16
+ body {margin: 0}
17
+ html {background: #001220}
18
+ h1 {
19
+ text-align: center;
20
+ font: bold 60px Arial;
21
+ background: linear-gradient(90deg, #FA7268, #C62368);
22
+ -webkit-background-clip: text;
23
+ -webkit-text-fill-color: transparent
24
+ }
25
+ strong {color: #C62368}
26
+
27
+ label, .chrono {font: 20px Arial}
28
+ .container {
29
+ margin: 10px 0;
30
+ display: flex;
31
+ flex-wrap: wrap;
32
+ gap: 5px
33
+ }
34
+ input { position: absolute; visibility: hidden }
35
+ label {
36
+ cursor: pointer;
37
+ transition: .4s;
38
+ background: #38387f21;
39
+ color: #fff;
40
+ border-radius: 5px;
41
+ padding: 15px
42
+ }
43
+ label:hover {background: #60609d33}
44
+ input:checked + label {
45
+ color: #d6e2ff;
46
+ background: #1640a1
47
+ }
48
+ .chrono {
49
+ padding: 3px;
50
+ border-radius: 2px;
51
+ color: #889
52
+ }
53
+ </style>
7
54
  </head>
8
55
  <body>
56
+ <svg viewBox="0 0 900 100" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><rect x="0" y="0" width="900" height="100" fill="#001220"></rect><path d="M0 90L21.5 83.2C43 76.3 86 62.7 128.8 54.5C171.7 46.3 214.3 43.7 257.2 45.2C300 46.7 343 52.3 385.8 59.8C428.7 67.3 471.3 76.7 514.2 77.2C557 77.7 600 69.3 642.8 65.7C685.7 62 728.3 63 771.2 61.8C814 60.7 857 57.3 878.5 55.7L900 54L900 0L878.5 0C857 0 814 0 771.2 0C728.3 0 685.7 0 642.8 0C600 0 557 0 514.2 0C471.3 0 428.7 0 385.8 0C343 0 300 0 257.2 0C214.3 0 171.7 0 128.8 0C86 0 43 0 21.5 0L0 0Z" fill="#fa7268"></path><path d="M0 70L21.5 71.7C43 73.3 86 76.7 128.8 73.3C171.7 70 214.3 60 257.2 57C300 54 343 58 385.8 62.2C428.7 66.3 471.3 70.7 514.2 68.3C557 66 600 57 642.8 57.5C685.7 58 728.3 68 771.2 71.7C814 75.3 857 72.7 878.5 71.3L900 70L900 0L878.5 0C857 0 814 0 771.2 0C728.3 0 685.7 0 642.8 0C600 0 557 0 514.2 0C471.3 0 428.7 0 385.8 0C343 0 300 0 257.2 0C214.3 0 171.7 0 128.8 0C86 0 43 0 21.5 0L0 0Z" fill="#f16367"></path><path d="M0 33L21.5 34.3C43 35.7 86 38.3 128.8 43.2C171.7 48 214.3 55 257.2 55.7C300 56.3 343 50.7 385.8 44.5C428.7 38.3 471.3 31.7 514.2 32.7C557 33.7 600 42.3 642.8 48.2C685.7 54 728.3 57 771.2 59.3C814 61.7 857 63.3 878.5 64.2L900 65L900 0L878.5 0C857 0 814 0 771.2 0C728.3 0 685.7 0 642.8 0C600 0 557 0 514.2 0C471.3 0 428.7 0 385.8 0C343 0 300 0 257.2 0C214.3 0 171.7 0 128.8 0C86 0 43 0 21.5 0L0 0Z" fill="#e85467"></path><path d="M0 52L21.5 47.7C43 43.3 86 34.7 128.8 30.5C171.7 26.3 214.3 26.7 257.2 29.2C300 31.7 343 36.3 385.8 40.5C428.7 44.7 471.3 48.3 514.2 46.8C557 45.3 600 38.7 642.8 38C685.7 37.3 728.3 42.7 771.2 45.3C814 48 857 48 878.5 48L900 48L900 0L878.5 0C857 0 814 0 771.2 0C728.3 0 685.7 0 642.8 0C600 0 557 0 514.2 0C471.3 0 428.7 0 385.8 0C343 0 300 0 257.2 0C214.3 0 171.7 0 128.8 0C86 0 43 0 21.5 0L0 0Z" fill="#de4467"></path><path d="M0 31L21.5 29.8C43 28.7 86 26.3 128.8 27.7C171.7 29 214.3 34 257.2 34.3C300 34.7 343 30.3 385.8 27.2C428.7 24 471.3 22 514.2 19.2C557 16.3 600 12.7 642.8 15.5C685.7 18.3 728.3 27.7 771.2 27.8C814 28 857 19 878.5 14.5L900 10L900 0L878.5 0C857 0 814 0 771.2 0C728.3 0 685.7 0 642.8 0C600 0 557 0 514.2 0C471.3 0 428.7 0 385.8 0C343 0 300 0 257.2 0C214.3 0 171.7 0 128.8 0C86 0 43 0 21.5 0L0 0Z" fill="#d23467"></path><path d="M0 24L21.5 22.5C43 21 86 18 128.8 17.2C171.7 16.3 214.3 17.7 257.2 17.8C300 18 343 17 385.8 15.5C428.7 14 471.3 12 514.2 12.2C557 12.3 600 14.7 642.8 14.2C685.7 13.7 728.3 10.3 771.2 10.3C814 10.3 857 13.7 878.5 15.3L900 17L900 0L878.5 0C857 0 814 0 771.2 0C728.3 0 685.7 0 642.8 0C600 0 557 0 514.2 0C471.3 0 428.7 0 385.8 0C343 0 300 0 257.2 0C214.3 0 171.7 0 128.8 0C86 0 43 0 21.5 0L0 0Z" fill="#c62368"></path></svg>
57
+ <main><h1>Speed-highlight JS</h1></main>
58
+
9
59
  <script type="module">
10
60
  import { highlightElement } from '../src/index.js'
11
61
  import { detectLanguage } from '../src/detect.js'
12
- import { elm, Radio, Checkbox } from './helper/elm.js'
13
- import { themes, testFiles } from './helper/data.js'
62
+ import { themesBrowser, testFiles } from './data.js'
63
+
64
+ const main = document.querySelector('main')
65
+ const elm = (type, opt) => Object.assign(document.createElement(type), opt)
14
66
 
15
- let code = elm('div'),
16
- detect = false;
67
+ class Checkbox
68
+ {
69
+ constructor(content, callback, parent, name)
70
+ {
71
+ parent.append(this.input = elm('input', { name, type: name ? 'radio' : 'checkbox', id: content }))
72
+ parent.append(elm('label', { htmlFor: content, textContent: (this.content = content) }))
73
+ this.input.addEventListener('change', this.callback = e => callback(this.on))
74
+ }
75
+ set on(bool) {this.callback(this.input.checked = bool)}
76
+ get on() { return this.input.checked }
77
+ get id() { return this.content }
78
+ }
79
+
80
+ class Radio {
81
+ constructor(name, callback, options) {
82
+ main.append(this.container = elm('div', { className: 'container' }, parent))
83
+ this.list = options.map(option => new Checkbox(option, e => callback(this.selected), this.container, name))
84
+ this.selected = 0
85
+ }
86
+ set selected(id) {this.list[id].on = true}
87
+ get selected() {for (let checkbox of this.list) if (checkbox.on) return checkbox.id}
88
+ }
17
89
 
18
90
  async function highlight(language) {
19
- let path = language.split('.').length === 1 ? `test.${language}` : language,
20
- res = await fetch(`./languages/${path}`),
21
- txt = await res.text()
22
- code.textContent = txt
23
- let before = performance.now()
24
- await highlightElement(code, detect ? detectLanguage(txt) : language.split('.')[1] || language)
25
- chrono.textContent = `${(performance.now() - before).toFixed(3)}ms (counting loading time)`
26
- chrono.animate([
27
- { background: '#25f3' },
28
- { background: 'unset' }
29
- ],{ duration: 150 })
30
- }
31
-
32
- let stylesheet = elm('link', { rel: 'stylesheet', type: 'text/css' }, document.head)
33
-
34
- new Radio('theme', theme => stylesheet.href = `../src/themes/${theme}.css`, themes)
35
-
36
- new Radio('mode',
37
- mode => code.className = [...code.classList].filter(s => !s.startsWith('shj-mode-')).join(' ')
38
- + (mode == 'none' ? '' : ' shj-mode-' + mode.split(' ')[0])
39
- ,['none', 'header mode'])
40
-
41
- let lang = new Radio('language', lang => highlight(lang, detect), testFiles),
42
- container = elm('div', { className: 'radio-list' })
43
- new Checkbox('detect', 'detect language', on => {
44
- detect = on
45
- highlight(lang.selected)
46
- }, container)
47
- let chrono = elm('span', { className: 'chrono' })
48
-
49
- document.body.appendChild(code)
91
+ let path = language.includes('.') ? language : `test.${language}`,
92
+ txt = code.textContent = await (await fetch(`./languages/${path}`)).text(),
93
+ start = performance.now()
94
+ await highlightElement(code, detect ? detectLanguage(txt) : path.split('.')[1], undefined, { hideLineNumbers })
95
+ chrono.textContent = `${(performance.now() - start).toFixed(3)}ms (counting loading time)`
96
+ chrono.animate([ { background: '#25f3' }, { background: 'unset' }],{ duration: 150 })
97
+ }
98
+
99
+ let code = elm('div', { className: 'fira' }),
100
+ detect = false,
101
+ hideLineNumbers = false,
102
+ stylesheet = elm('link', { rel: 'stylesheet', type: 'text/css' }),
103
+ lang = new Radio('language', lang => highlight(lang, detect), testFiles),
104
+ container = elm('div', { className: 'container' }),
105
+ chrono = elm('span', { className: 'chrono' })
106
+
107
+ document.head.append(stylesheet)
108
+
109
+ new Radio('theme', theme => stylesheet.href = `../src/themes/${theme}.css`, themesBrowser)
110
+ new Checkbox('detect language', on => { detect = on; highlight(lang.selected) }, container)
111
+ new Checkbox('header mode', mode => code.classList.toggle('shj-mode-header', mode), container)
112
+ new Checkbox('use fira font', use => code.classList.toggle('fira', use), container).on = true
113
+ new Checkbox('hide line numbering', ln => { hideLineNumbers = ln; highlight(lang.selected) }, container).on = true
114
+
115
+ main.append(container, chrono, code)
50
116
  </script>
51
117
  </body>
52
118
  </html>
@@ -30,7 +30,7 @@ int main(int argc, char **argv)
30
30
  {
31
31
  printf("Hello World!\n");
32
32
 
33
- Point p;
33
+ Point pTest;
34
34
 
35
35
  asm("movl $1, %0" : "=r"(p.x));
36
36
  asm {
@@ -7,15 +7,15 @@ import "fmt"
7
7
  // main is the entry point for the program
8
8
  func main() {
9
9
  // declare a variable named num and assign it the value of 10
10
- num := 10
10
+ numTest := 10
11
11
 
12
12
  // sanity check
13
- fmt.Println("num is", num)
13
+ fmt.Println("num is", numTest)
14
14
 
15
15
  //scan from the console and assign the value to the variable num
16
- fmt.Scanln(&num)
16
+ fmt.Scanln(&numTest)
17
17
 
18
18
 
19
19
  // print the value of num
20
- fmt.Println(num)
20
+ fmt.Println(numTest)
21
21
  }
@@ -8,7 +8,7 @@
8
8
  <title>Document</title>
9
9
  <style test = 5 >
10
10
  test {color: #25f}
11
- .css {background: url(</style-todo-later>)}
11
+ .css {background: url(http://website.com)}
12
12
  #test {}
13
13
  </style >
14
14
  </head>
@@ -17,7 +17,7 @@ class Token {
17
17
 
18
18
  //lexer function that take a string and return a list of tokens
19
19
  List<Token> lexer(String s) {
20
- List<Token> tokens = new ArrayList<Token>();
20
+ List<Token> tokensList = new ArrayList<Token>();
21
21
  int line = 1;
22
22
  int column = 0;
23
23
  int i = 0;
@@ -47,6 +47,6 @@ void run(List<Token>) {
47
47
  //main function
48
48
  public static void main(String[] args) {
49
49
  String s = "1+2+3";
50
- List<Token> tokens = lexer(s);
51
- run(tokens);
50
+ List<Token> tokensList = lexer(s);
51
+ run(tokensList);
52
52
  }
package/examples/node.js CHANGED
@@ -1,6 +1,6 @@
1
1
  const fs = require('fs'),
2
2
  path = require('path'),
3
- { setTheme, printHighlight } = require('../dist/node/term.js');
3
+ { setTheme, printHighlight } = require('@speed-highlight/core/terminal');
4
4
 
5
5
  const lang = process.argv[2] ?? 'js';
6
6
 
@@ -2,6 +2,7 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
5
6
  <title>Web worker | Speed highlight JS</title>
6
7
  <link rel="stylesheet" href="../src/themes/atom-dark.css">
7
8
  </head>
package/jsdoc.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "plugins": [],
3
+ "recurseDepth": 10,
4
+ "source": {
5
+ "includePattern": ".+\\.js$"
6
+ },
7
+ "sourceType": "module",
8
+ "tags": {
9
+ "allowUnknownTags": true,
10
+ "dictionaries": ["jsdoc", "closure"]
11
+ },
12
+ "templates": {
13
+ "cleverLinks": false,
14
+ "monospaceLinks": false
15
+ }
16
+ }
package/package.json CHANGED
@@ -1,40 +1,44 @@
1
1
  {
2
- "name": "@speed-highlight/core",
3
- "version": "1.1.6",
4
- "description": "🌈 Light, fast, and easy to use, dependencies free javascript syntax highlighter, with automatic language detection",
5
- "main": "dist/node/index.js",
6
- "directories": {
7
- "example": "examples"
8
- },
9
- "scripts": {
10
- "test": "echo \"Error: no test specified\" && exit 1"
11
- },
12
- "repository": {
13
- "type": "git",
14
- "url": "git://github.com/speed-highlight/core.git"
15
- },
16
- "keywords": [
17
- "javascript",
18
- "syntax-highlighting",
19
- "language",
20
- "fast",
21
- "js",
22
- "simple",
23
- "highlighter",
24
- "regex",
25
- "highlighting",
26
- "highlightjs",
27
- "small",
28
- "deno"
29
- ],
30
- "author": "matubu",
31
- "license": "CC0-1.0",
32
- "bugs": {
33
- "url": "https://github.com/speed-highlight/core/issues"
34
- },
35
- "homepage": "https://github.com/speed-highlight/core#readme",
36
- "publishConfig": {
37
- "registry": "https://npm.pkg.github.com/",
38
- "access": "public"
39
- }
2
+ "name": "@speed-highlight/core",
3
+ "version": "1.1.8",
4
+ "description": "🌈 Light, fast, and easy to use, dependencies free javascript syntax highlighter, with automatic language detection",
5
+ "main": "dist/node/index.js",
6
+ "exports": {
7
+ "./terminal": "./dist/node/terminal.js",
8
+ "./terminal.js": "./dist/node/terminal.js"
9
+ },
10
+ "directories": {
11
+ "example": "examples"
12
+ },
13
+ "scripts": {
14
+ "build": "./.github/workflows/minify.sh"
15
+ },
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git://github.com/speed-highlight/core.git"
19
+ },
20
+ "keywords": [
21
+ "javascript",
22
+ "syntax-highlighting",
23
+ "language",
24
+ "fast",
25
+ "js",
26
+ "simple",
27
+ "highlighter",
28
+ "regex",
29
+ "highlighting",
30
+ "highlightjs",
31
+ "small",
32
+ "deno"
33
+ ],
34
+ "author": "matubu",
35
+ "license": "CC0-1.0",
36
+ "bugs": {
37
+ "url": "https://github.com/speed-highlight/core/issues"
38
+ },
39
+ "homepage": "https://github.com/speed-highlight/core#readme",
40
+ "publishConfig": {
41
+ "registry": "https://npm.pkg.github.com/",
42
+ "access": "public"
43
+ }
40
44
  }
package/src/color.js ADDED
@@ -0,0 +1,11 @@
1
+ export default {
2
+ black: '\x1b[30m',
3
+ red: '\x1b[31m',
4
+ green: '\x1b[32m',
5
+ gray: '\x1b[90m',
6
+ yellow: '\x1b[33m',
7
+ blue: '\x1b[34m',
8
+ magenta: '\x1b[35m',
9
+ cyan: '\x1b[36m',
10
+ white: '\x1b[37m'
11
+ }
package/src/detect.js CHANGED
@@ -1,3 +1,13 @@
1
+ /**
2
+ * @module detect
3
+ * (Language detector)
4
+ */
5
+
6
+ import '../typedef.js'
7
+
8
+ /**
9
+ * @type {Array.<[ShjLanguage, ...[RegExp, Number][]]>}
10
+ */
1
11
  const languages = [
2
12
  ['bash', [/#!(\/usr)?\/bin\/bash/g, 500], [/\b(if|elif|then|fi|echo)\b|\$/g, 10]],
3
13
  ['html', [/<\/?[a-z-]+[^\n>]*>/g, 10], [/^\s+<!DOCTYPE\s+html/g, 500]],
@@ -22,12 +32,18 @@ const languages = [
22
32
  ['asm', [/^(section|global main|extern|\t(call|mov|ret))/gm, 100]],
23
33
  ]
24
34
 
35
+ /**
36
+ * @function detectLanguage
37
+ * Try to find the language the given code belong to
38
+ * @param {String} code The code
39
+ * @returns {ShjLanguage} The language of the code
40
+ */
25
41
  export const detectLanguage = code => {
26
42
  return (languages
27
43
  .map(([lang, ...features]) => [
28
- features.reduce((acc, [match, score]) => acc + [...code.matchAll(match)].length * score, 0),
29
- lang
44
+ lang,
45
+ features.reduce((acc, [match, score]) => acc + [...code.matchAll(match)].length * score, 0)
30
46
  ])
31
- .filter(([score, lang]) => score > 10)
32
- .sort((a, b) => b[0] - a[0])[0]?.[1] || 'plain');
33
- }
47
+ .filter(([lang, score]) => score > 20)
48
+ .sort((a, b) => b[1] - a[1])[0]?.[0] || 'plain');
49
+ }