# dojox.highlight

client-side syntax highlighting for a number of languages.

NOTE: All languages listed here have working language definitions, though not all exist in the release or dojo subversion. The missing packs are not publically available. based on

## Examples:

Some Python code:

    @requires_authorization
    def somefunc(param1, param2):
      '''A docstring'''
      if param1 > param2: # interesting
        print 'Gre\'ater'
        print ''
      return param2 - param1 + 1

    class SomeClass:
        pass

A chunk of PHP:

    $opAr = array (    "-a|--append", // a or append toggle, nothing extra
            "-i|--input:", // i or input with next input being needed
            "-l|--list:",           // l with input needed
    		//"--foo",     // broken
            "-f:",           // f with no input
            "--wot:"      // wot with input, no short
            );

    $op = bgetop($opAr);
    if (is_array($op)) { print_r($op); }

    /* here is the code: */

    function bgetop($opAr=array(),$unknown=true) {

    $argv = $_SERVER['argv'];
    $argc = $_SERVER['argc'];
    $argPos = 1; // zero is program running

    // foreach arg
    while ($argPos<$argc) {
        $arg = $argv[$argPos];
        if ($arg{0}=="-") {
            if ($arg{1}=="-") {
            $var = substr($arg,2,strlen($arg));
            } else { $var = $arg{1}; }
            foreach ($opAr as $opk => $opv) {
                if (!isset($return[$var])) {
                if (strpos($opv,$arg) !== FALSE) {
                    // this is where the -f -foo fix needs to be,
                    // the partial string exists in this record,
                    // but we need to determine if it's accurate
                    // somehow (i'm thinking: eregi?)
                    if ($accurate=1) {
                        // we foudn the key
                        if (strpos($opv,':') !== FALSE) {
                            // next value is the one to use,
                            // then skip it in the parser.
                            if (isset($argv[$argPos+1])) {
                                $return[$var] = $argv[++$argPos];
                                } else {
                                $return[$var] = FALSE;
                                }
                            } else {
                            // just set the toggle
                            $return[$var] = TRUE;
                            }
                        // don't check this opAr value again
                        unset($opAr[$opk]);
                        }
                    } // if accurate
                } // !isset already
                } // foreach opAr
        } else { // we weren't expecting a non-hyphened argument, possibly just a filename, or whatnot
            if ($unknown) { $return['unknown'][]=$arg; }
        }
        $argPos++;
    } // while argPos < argc

    if (is_array($return)) {
    return $return;
    } else { return 0; }

    } // end function bgetop

A custom XML document:

    <?xml version="1.0"?>
    <response value="ok">
      <text>Ok</text>
      <comment/>
      <ns:description><![CDATA[
      CDATA is <not> magical.
      ]]></ns:description>
    </response>

Some HTML code:

    <head>
      <title>Title</title>
    <body>
      <p class="something">Something</p>
      <p class=something>Something</p>
      <!-- comment -->
      <p class>Something</p>
      <p class="something" title="p">Something</p>
    </body>

HTML with Django templates:

    {% if articles|length %}
    {% for article in articles %}

    {# Striped table #}
    <tr class="{% cycle odd,even %}">
      <td>{{ article|default:"Hi... "|escape }}</td>
      <td>{{ article.date|date:"d.m.Y" }}</td>
    </tr>

    {% endfor %}
    {% endif %}

    {% comment %}
    Comments may be long and
    multiline.
    {% endcomment %}

Some CSS code:

    body,
    html {
      font: Tahoma, Arial, san-serif;
    }

    #content {
      width: 100%; /* css comment */
      height: 100%
    }

    p[lang=ru] {
      color: red;
    }

Explicit Python highlight:

    for x in [1, 2, 3]:
      count(x)

Disabled highlighting:

    <div id="contents">
      <p>Hello, World!
    </div>

Normal dojo-looking code

    dojo.provide("some.object");
    dojo.declare("some.object",null,{
    	param: "value",
    	_myMethod: function(/* Event */e){
    		this.inherited(arguments);
    	},
    	// comments
    	_another: function(){
    		dojo.addClass("foo","hovered");
    	}
    });
    dojo.addOnLoad(function(){
    	//
    	// comments with <HTML> inline
    	var d = dojo;
    	d.mixin(d,{
    		foo: function(e){
    			d.bar(e);
    		},
    		bar: function(e){
    			alert(e);
    		}
    	});
    });

Lazy, xhr'd code:

Text with inlined JavaScript code: `dojo.forEach(a, function(x){ console.log(x); });` — that was the inlined sample.

Markuped code (python), no language was specified:

    @requires_authorization
    def somefunc(param1, param2):
      '''A docstring'''
      if param1 > param2: # interesting
        print 'Gre\'ater'
        print ''
      return param2 - param1 + 1

    class SomeClass:
        pass

Markuped code, "python" was specified:

    @requires_authorization
    def somefunc(param1, param2):
      '''A docstring'''
      if param1 > param2: # interesting
        print 'Gre\'ater'
        print ''
      return param2 - param1 + 1

    class SomeClass:
        pass