@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.
- package/README.md +65 -14
- package/doc/common.js.html +87 -0
- package/doc/css/jsdoc-template.css +1 -0
- package/doc/css/tomorrow.min.css +2 -0
- package/doc/detect%0ALanguage%20detectormodule_.html +309 -0
- package/doc/detect.js.html +113 -0
- package/doc/global.html +1826 -0
- package/doc/index%0ABase%20scriptmodule_.html +1179 -0
- package/doc/index.html +402 -0
- package/doc/index.js.html +209 -0
- package/doc/js/jsdoc-template.js +2 -0
- package/doc/js/jsdoc-template.js.map +1 -0
- package/doc/js/prettify.min.js +47 -0
- package/doc/term%0ATerminal%20adaptormodule_.html +596 -0
- package/doc/term.js.html +108 -0
- package/examples/{helper/data.js → data.js} +28 -16
- package/examples/deno.js +53 -7
- package/examples/index.html +103 -37
- package/examples/languages/test.c +1 -1
- package/examples/languages/test.go +4 -4
- package/examples/languages/test.html +1 -1
- package/examples/languages/test.java +3 -3
- package/examples/node.js +1 -1
- package/examples/worker.html +1 -0
- package/jsdoc.json +16 -0
- package/package.json +42 -38
- package/src/color.js +11 -0
- package/src/detect.js +21 -5
- package/src/index.js +55 -40
- package/src/languages/c.js +1 -1
- package/src/languages/go.js +1 -1
- package/src/languages/java.js +1 -1
- package/src/languages/js.js +1 -1
- package/src/languages/py.js +1 -1
- package/src/languages/rs.js +1 -1
- package/src/terminal.js +42 -0
- package/src/themes/atom-dark.css +1 -1
- package/src/themes/atom-dark.js +18 -0
- package/src/themes/default.css +4 -9
- package/src/themes/default.js +16 -24
- package/typedef.js +34 -0
- package/assets/screenshot.png +0 -0
- package/dist/common.js +0 -1
- package/dist/detect.js +0 -1
- package/dist/index.js +0 -3
- package/dist/languages/asm.js +0 -1
- package/dist/languages/bash.js +0 -1
- package/dist/languages/bf.js +0 -1
- package/dist/languages/c.js +0 -1
- package/dist/languages/css.js +0 -1
- package/dist/languages/csv.js +0 -1
- package/dist/languages/diff.js +0 -1
- package/dist/languages/docker.js +0 -1
- package/dist/languages/git.js +0 -1
- package/dist/languages/go.js +0 -1
- package/dist/languages/html.js +0 -1
- package/dist/languages/http.js +0 -1
- package/dist/languages/ini.js +0 -1
- package/dist/languages/java.js +0 -1
- package/dist/languages/js.js +0 -1
- package/dist/languages/js_template_literals.js +0 -1
- package/dist/languages/jsdoc.js +0 -1
- package/dist/languages/json.js +0 -1
- package/dist/languages/leanpub-md.js +0 -2
- package/dist/languages/log.js +0 -1
- package/dist/languages/lua.js +0 -1
- package/dist/languages/make.js +0 -1
- package/dist/languages/md.js +0 -2
- package/dist/languages/pl.js +0 -1
- package/dist/languages/plain.js +0 -1
- package/dist/languages/py.js +0 -1
- package/dist/languages/regex.js +0 -1
- package/dist/languages/rs.js +0 -1
- package/dist/languages/sql.js +0 -1
- package/dist/languages/todo.js +0 -1
- package/dist/languages/toml.js +0 -1
- package/dist/languages/ts.js +0 -1
- package/dist/languages/uri.js +0 -1
- package/dist/languages/xml.js +0 -1
- package/dist/languages/yaml.js +0 -1
- package/dist/node/common.js +0 -1
- package/dist/node/detect.js +0 -1
- package/dist/node/index.js +0 -3
- package/dist/node/languages/asm.js +0 -1
- package/dist/node/languages/bash.js +0 -1
- package/dist/node/languages/bf.js +0 -1
- package/dist/node/languages/c.js +0 -1
- package/dist/node/languages/css.js +0 -1
- package/dist/node/languages/csv.js +0 -1
- package/dist/node/languages/diff.js +0 -1
- package/dist/node/languages/docker.js +0 -1
- package/dist/node/languages/git.js +0 -1
- package/dist/node/languages/go.js +0 -1
- package/dist/node/languages/html.js +0 -1
- package/dist/node/languages/http.js +0 -1
- package/dist/node/languages/ini.js +0 -1
- package/dist/node/languages/java.js +0 -1
- package/dist/node/languages/js.js +0 -1
- package/dist/node/languages/js_template_literals.js +0 -1
- package/dist/node/languages/jsdoc.js +0 -1
- package/dist/node/languages/json.js +0 -1
- package/dist/node/languages/leanpub-md.js +0 -2
- package/dist/node/languages/log.js +0 -1
- package/dist/node/languages/lua.js +0 -1
- package/dist/node/languages/make.js +0 -1
- package/dist/node/languages/md.js +0 -2
- package/dist/node/languages/pl.js +0 -1
- package/dist/node/languages/plain.js +0 -1
- package/dist/node/languages/py.js +0 -1
- package/dist/node/languages/regex.js +0 -1
- package/dist/node/languages/rs.js +0 -1
- package/dist/node/languages/sql.js +0 -1
- package/dist/node/languages/todo.js +0 -1
- package/dist/node/languages/toml.js +0 -1
- package/dist/node/languages/ts.js +0 -1
- package/dist/node/languages/uri.js +0 -1
- package/dist/node/languages/xml.js +0 -1
- package/dist/node/languages/yaml.js +0 -1
- package/dist/node/term.js +0 -1
- package/dist/node/themes/default.js +0 -1
- package/dist/term.js +0 -1
- package/dist/themes/atom-dark.css +0 -1
- package/dist/themes/dark.css +0 -1
- package/dist/themes/default.css +0 -1
- package/dist/themes/default.js +0 -1
- package/dist/themes/github-dark.css +0 -1
- package/dist/themes/github-dim.css +0 -1
- package/dist/themes/github-light.css +0 -1
- package/dist/themes/visual-studio-dark.css +0 -1
- package/examples/dist.html +0 -27
- package/examples/helper/elm.js +0 -58
- package/examples/style.css +0 -28
- 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
|
-
'
|
|
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
|
-
'
|
|
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
|
-
'
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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 {
|
|
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
|
-
|
|
6
|
+
let args = parse(Deno.args)
|
|
5
7
|
|
|
6
|
-
|
|
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(
|
|
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');
|
package/examples/index.html
CHANGED
|
@@ -2,51 +2,117 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
|
-
<
|
|
6
|
-
<
|
|
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 {
|
|
13
|
-
|
|
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
|
-
|
|
16
|
-
|
|
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.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
code.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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>
|
|
@@ -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
|
-
|
|
10
|
+
numTest := 10
|
|
11
11
|
|
|
12
12
|
// sanity check
|
|
13
|
-
fmt.Println("num is",
|
|
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(&
|
|
16
|
+
fmt.Scanln(&numTest)
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
// print the value of num
|
|
20
|
-
fmt.Println(
|
|
20
|
+
fmt.Println(numTest)
|
|
21
21
|
}
|
|
@@ -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>
|
|
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>
|
|
51
|
-
run(
|
|
50
|
+
List<Token> tokensList = lexer(s);
|
|
51
|
+
run(tokensList);
|
|
52
52
|
}
|
package/examples/node.js
CHANGED
package/examples/worker.html
CHANGED
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
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
|
-
|
|
29
|
-
|
|
44
|
+
lang,
|
|
45
|
+
features.reduce((acc, [match, score]) => acc + [...code.matchAll(match)].length * score, 0)
|
|
30
46
|
])
|
|
31
|
-
.filter(([
|
|
32
|
-
.sort((a, b) => b[
|
|
33
|
-
}
|
|
47
|
+
.filter(([lang, score]) => score > 20)
|
|
48
|
+
.sort((a, b) => b[1] - a[1])[0]?.[0] || 'plain');
|
|
49
|
+
}
|