dojox.highlight¶
This project provides client-side syntax highlighting for a number of languages, and is more or less a direct port of Ivan Sagalaev’s Highlight.js engine, contributed under CLA.
To use the Highlight engine, require it into your page, along with any appropriate language packs:
dojo.require("dojox.highlight");
dojo.require("dojox.highlight.languages.javascript");
Provided Languages¶
There are several pre-defined language packs. Shipped with Dojo include:
- C++ (cpp)
- CSS (css)
- Delphi (delphi)
- Django (django)
- HTML (html)
- JavaScript (javascript)
- Python (python)
- SQL (sql)
- XML (xml)
The rollups _all (all languages), _dynamic, _static, and _www provide layers of common groups of languages.
There are additional definitions for Pygments-based highlighting:
- CSS (pygments.css)
- HTML (pygments.html)
- JavaScript (pygments.javascript)
- XML (pygments.xml)
The rollups _www and _html are provided as layers, for related code inclusion.
The name in parenthesis indicate that which you should dojo.require() to load the definitions. eg:
dojo.require("dojox.highlight.languages.pygments.css"); // add CSS rules to the engine
Highlight Styles¶
Highlight is entirely CSS based, so you will need the appropriate CSS file. The default system css is available in the resources/ folder by the name of highlight.css:
<link rel="stylesheet" href="/js/dojox/highlight/resources/highlight.css" />
Additionally, the Pygments CSS files are located in resources/pygments/ and are described by a theme name. Simply load in the appropriate theme you choose:
<link rel="stylesheet" href="/js/dojox/highlight/resources/pygments/colorful.css" />
There are several themes available:
- autumn
- borland
- colorful
- default
- emacs
- friendly
- fruity
- manni
- murphey
- native
- pastie
- perldoc
- trac
Using Highlight¶
After loading in the highlight engine, and putting the CSS on the page, the only remaining step it to highlight the nodes. Highlight acts on <code>
blocks. It can be instantiated just as any other widget in Dojo by using the data-dojo-type:
<code data-dojo-type="dojox.highlight.Code">var foo = dojo.map([1,2,3,4,5], function(n){ return n % 2 });</code>
Or by calling dojox.highlight.init(someNode)
.
// attempt to highlight all <code> blocks on a page:
dojo.query("code").forEach(dojox.highlight.init);
Highlight can also be used via the dojox.highlight.processString function
@import "{{baseUrl}}dojox/highlight/resources/highlight.css"
dojo.require("dojox.highlight");
dojo.require("dojox.highlight.languages.sql");
function highlight(){
// highlighting the code
var code = dojox.highlight.processString("Select a from b where a = 2;").result;
// putting the highlighted code in a html element so you can see
dojo.attr('demoCode1', {innerHTML: code});
}
<div id="demoCode1">Select a from b where a = 2;</div>
<button data-dojo-type="dijit.form.Button" id="buttonOne" onClick="highlight();">Highlight Code</button>