var formats = require('./formats') var lexers = require('./lexers') /* comment */ function extend (obj) { var k, i for (i=1; i<arguments.length; i++) { for (k in arguments[i]) { if (arguments[i].hasOwnProperty(k)) { obj[k] = arguments[i][k] } } } return obj } function Highlighter (options) { options = extend(this, options || {}) this._lexer = lexers[this.lexer]() } Highlighter.prototype = { _lexer: null, aliases: null, lexer: 'javascript', format: 'html', highlight: function (code) { if (!this._lexer) return code var format = formats[this.format] if (!format) throw TypeError('Unsupported format ' + this.format) var ast = this._lexer.parse(code) if (this.aliases) { var map = this.aliases var keys = Object.keys(map) var aliases = keys.map(function (key) { return map[key] }) ast.forEach(function (item) { var i = keys.indexOf(item.name) if (i === -1) return item.name = aliases[i] }) } return format(ast).join('') } } /\*\wfbwr/ module.exports = { Highlighter: Highlighter, formats: formats, lexers: lexers, shorthands: { "KeyWord": "kw", "Identifier": "id", "RegExp": "re", "String": "st", "Comment": "cm", "Whitespace": "ws", "Operator": "op", "Bracket": "br", "Instruction": "in", "Variable": "vr", "Unit": "un", "HexColor": "hx" }, highlight: function (code, options) { var hl = new Highlighter(options) return hl.highlight(code) } }