Sha256: c0ae3b8075f5ecbb77eb44587924829d5795331310dcf6173a8b1bb88dfb8ca6

Contents?: true

Size: 1.68 KB

Versions: 15

Compression:

Stored size: 1.68 KB

Contents

#!/usr/bin/env node

// Simple command-line code highlighting tool. Reads code from stdin,
// spits html to stdout. For example:
//
//   echo 'function foo(a) { return a; }' | bin/source-highlight -s javascript
//   bin/source-highlight -s 

var fs = require("fs");

CodeMirror = require("../addon/runmode/runmode.node.js");
require("../mode/meta.js");

var sPos = process.argv.indexOf("-s");
if (sPos == -1 || sPos == process.argv.length - 1) {
   console.error("Usage: source-highlight -s language");
   process.exit(1);
}
var lang = process.argv[sPos + 1].toLowerCase(), modeName = lang;
CodeMirror.modeInfo.forEach(function(info) {
  if (info.mime == lang) {
    modeName = info.mode;
  } else if (info.name.toLowerCase() == lang) {
    modeName = info.mode;
    lang = info.mime;
  }
});

function ensureMode(name) {
  if (CodeMirror.modes[name] || name == "null") return;
  try {
    require("../mode/" + name + "/" + name + ".js");
  } catch(e) {
    console.error("Could not load mode " + name + ".");
    process.exit(1);
  }
  var obj = CodeMirror.modes[name];
  if (obj.dependencies) obj.dependencies.forEach(ensureMode);
}
ensureMode(modeName);

function esc(str) {
  return str.replace(/[<&]/, function(ch) { return ch == "&" ? "&amp;" : "&lt;"; });
}

var code = fs.readFileSync("/dev/stdin", "utf8");
var curStyle = null, accum = "";
function flush() {
  if (curStyle) process.stdout.write("<span class=\"" + curStyle.replace(/(^|\s+)/g, "$1cm-") + "\">" + esc(accum) + "</span>");
  else process.stdout.write(esc(accum));
}

CodeMirror.runMode(code, lang, function(text, style) {
  if (style != curStyle) {
    flush();
    curStyle = style; accum = text;
  } else {
    accum += text;
  }
});
flush();

Version data entries

15 entries across 15 versions & 3 rubygems

Version Path
gump-0.1.6 server/assets/js/jquery.codemirror/bin/source-highlight
poly-cms-0.1.2 core/admin/assets/js/vendor/codemirror/bin/source-highlight
poly-cms-0.1.1 core/admin/assets/js/vendor/codemirror/bin/source-highlight
poly-cms-0.1.0 core/admin/assets/js/vendor/codemirror/bin/source-highlight
bonethug-0.0.17 skel/project_types/silverstripe3/public/abc/lib/codemirror/bin/source-highlight
bonethug-0.0.16 skel/project_types/silverstripe3/public/abc/lib/codemirror/bin/source-highlight
bonethug-0.0.15 skel/project_types/silverstripe3/public/abc/lib/codemirror/bin/source-highlight
bonethug-0.0.14 skel/project_types/silverstripe3/public/abc/lib/codemirror/bin/source-highlight
bonethug-0.0.13 skel/project_types/silverstripe3/public/abc/lib/codemirror/bin/source-highlight
bonethug-0.0.12 skel/project_types/silverstripe3/public/abc/lib/codemirror/bin/source-highlight
bonethug-0.0.11 skel/project_types/silverstripe3/public/abc/lib/codemirror/bin/source-highlight
bonethug-0.0.10 skel/project_types/silverstripe3/public/abc/lib/codemirror/bin/source-highlight
bonethug-0.0.7 skel/project_types/silverstripe3/public/abc/lib/codemirror/bin/source-highlight
bonethug-0.0.6 skel/project_types/silverstripe3/public/abc/lib/codemirror/bin/source-highlight
bonethug-0.0.5 skel/project_types/silverstripe3/public/abc/lib/codemirror/bin/source-highlight