Skip to content

Instantly share code, notes, and snippets.

@shama
Created January 4, 2013 21:53
Show Gist options
  • Save shama/4457365 to your computer and use it in GitHub Desktop.
Save shama/4457365 to your computer and use it in GitHub Desktop.
Node.js build script for compiling highlight.js to publish onto jamjs.
// build for jamjs/requirejs with every language option
// written by Kyle Robinson Young (github.com/shama) for packaging to jamjs
var fs = require('fs');
var path = require('path');
var mkdirp = require('mkdirp');
var rimraf = require('rimraf');
var cpr = require('cpr').cpr;
var metamorph = require('metamorph');
// in/out
var src = path.join(__dirname, '../src');
var out = path.join(__dirname, '../build');
// rmdir/mkdir output folder
rimraf.sync(out); mkdirp.sync(out);
// create jam compat package.json
var pdata = {
name: 'highlight',
version: (require('../src/package.json')).version + '-jam.1',
main: 'highlight',
jam: { main: 'highlight' }
};
metamorph(path.join(src, 'package.json'), 'jam', pdata, path.join(out, 'package.json'));
// copy styles and start compiling things
cpr(path.join(src, 'styles'), path.join(out, 'styles'), function() {
compileLangs();
compileCommon();
compileHighlight();
compileReadme();
});
// compile languages
function compileLangs() {
var langSrc = path.join(src, 'languages');
var langOut = path.join(out, 'languages');
if (!fs.existsSync(langOut)) mkdirp.sync(langOut);
fs.readdirSync(langSrc).forEach(function(file) {
var lang = path.basename(file, '.js');
var o = path.join(langOut, file);
var data = "define(['highlight'], function(hljs) { hljs.LANGUAGES['" + lang + "'] = (\n\n"
+ fs.readFileSync(path.join(langSrc, file))
+ "\n)(hljs); return hljs.LANGUAGES['" + lang + "']; });\n";
console.log('Wrote ' + path.relative(out, o));
fs.writeFileSync(o, data);
});
}
// compile highlight
function compileHighlight() {
var main = path.join(src, 'highlight.js');
var mainOut = path.join(out, 'highlight.js');
var data = 'define(function() {var hljs = new (\n'
+ fs.readFileSync(main, 'utf8')
+ '\n)(); return hljs; });';
console.log('Wrote ' + path.relative(out, mainOut));
fs.writeFileSync(mainOut, data);
}
// compile common langs into one file for convenience
function compileCommon() {
var o = path.join(out, 'languages', 'common.js');
var data = "define(['highlight'], function(hljs) {\n\n";
[
'bash', 'java', 'ini', 'sql', 'diff', 'php', 'cs',
'cpp', 'ruby', 'python', 'css', 'perl', 'xml',
'javascript', 'http', 'json'
].forEach(function(lang) {
var file = lang + '.js';
data += "hljs.LANGUAGES['" + lang + "'] = (\n\n"
+ fs.readFileSync(path.join(src, 'languages', file))
+ "\n)(hljs);\n\n";
});
data += "});\n";
console.log('Wrote ' + path.relative(out, o));
fs.writeFileSync(o, data);
}
// make a modified readme
function compileReadme() {
var data = fs.readFileSync(path.join(__dirname, '../README.md'));
var rOut = path.join(out, 'README.md');
data = [
'This package has been modified by [shama](https://github.com/shama) to be',
'more easily consumable by JamJS or RequireJS.\n',
'Please require `highlight` and each desired language like such:\n',
'```js',
'require([',
" 'highlight',",
" 'highlight/languages/javascript'",
" 'highlight/languages/css'",
'], function(hljs) {',
' hljs.initHighlightingOnLoad();',
'});',
'```\n',
'Or if you just want to include all the common languages:\n',
'```js',
'require([',
" 'highlight',",
" 'highlight/languages/common'",
'], function(hljs) {',
' hljs.initHighlightingOnLoad();',
'});',
'```\n',
'Thank you to [Ivan Sagalaev](https://github.com/isagalaev) and contributors',
'for making this library!\n\n',
].join('\n') + '\n\n' + data;
console.log('Wrote ' + path.relative(out, rOut));
fs.writeFileSync(rOut, data);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment