-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathworker.js
43 lines (37 loc) · 1.16 KB
/
worker.js
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
40
41
42
43
/* eslint-env worker */
// This file is designed to be transpiled to ES5 for simple loading in a web
// worker. If you need only a small subset of grammars, you should consult
// `examples/worker.js` for a script that
import Grammar from '#internal/grammar';
import Context from '#internal/context';
import Logger from '#internal/logger';
import * as GRAMMARS from '#internal/grammars/index';
const LOGGER = new Logger('worker');
function postError (error) {
postMessage({ error });
}
function parseLanguage (text, language, context) {
let grammar = Grammar.find(language);
if (!grammar) {
return text;
}
return grammar.parse(text, context);
}
onmessage = function (event) {
let loggerWasEnabled = LOGGER.enabled;
let { type, logger } = event.data;
if (logger) { LOGGER.toggle(logger); }
LOGGER.log('Message:', event);
switch (type) {
case 'parse': {
let { language, text, id } = event.data;
let context = new Context({
highlighter: { parse: parseLanguage }
});
let source = parseLanguage(text, language, context);
postMessage({ id, language, source });
break;
}
}
LOGGER.toggle(loggerWasEnabled);
};