annotate .cms/lib/codemirror/bin/source-highlight @ 0:78edf6b517a0 draft

24.10
author Coffee CMS <info@coffee-cms.ru>
date Fri, 11 Oct 2024 22:40:23 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 #!/usr/bin/env node
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3 // Simple command-line code highlighting tool. Reads code from stdin,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 // spits html to stdout. For example:
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 //
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6 // echo 'function foo(a) { return a; }' | bin/source-highlight -s javascript
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 // bin/source-highlight -s
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 var fs = require("fs");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 var CodeMirror = require("../addon/runmode/runmode.node.js");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 require("../mode/meta.js");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 var sPos = process.argv.indexOf("-s");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 if (sPos == -1 || sPos == process.argv.length - 1) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 console.error("Usage: source-highlight -s language");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 process.exit(1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 var lang = process.argv[sPos + 1].toLowerCase(), modeName = lang;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 var found = CodeMirror.findModeByMIME(lang) || CodeMirror.findModeByName(lang)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 if (found) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 modeName = found.mode
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 lang = found.mime
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 if (!CodeMirror.modes[modeName])
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 require("../mode/" + modeName + "/" + modeName + ".js");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 function esc(str) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 return str.replace(/[<&]/g, function(ch) { return ch == "&" ? "&amp;" : "&lt;"; });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 var code = fs.readFileSync("/dev/stdin", "utf8");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 var curStyle = null, accum = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 function flush() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 if (curStyle) process.stdout.write("<span class=\"" + curStyle.replace(/(^|\s+)/g, "$1cm-") + "\">" + esc(accum) + "</span>");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 else process.stdout.write(esc(accum));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 CodeMirror.runMode(code, lang, function(text, style) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 if (style != curStyle) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 flush();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 curStyle = style; accum = text;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 accum += text;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 flush();