Created
January 4, 2013 21:53
-
-
Save shama/4457365 to your computer and use it in GitHub Desktop.
Node.js build script for compiling highlight.js to publish onto jamjs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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