clipboardSwf is configured.
- */
- copyToClipboard : function(highlighter)
- {
- var flashDiv, flashSwf,
- highlighterId = highlighter.id
- ;
-
- this.create = function()
- {
- var config = sh.config;
-
- // disable functionality if running locally
- if (config.clipboardSwf == null)
- return null;
-
- function params(list)
- {
- var result = '';
-
- for (var name in list)
- result += "";
-
- return result;
- };
-
- function attributes(list)
- {
- var result = '';
-
- for (var name in list)
- result += " " + name + "='" + list[name] + "'";
-
- return result;
- };
-
- var args1 = {
- width : config.toolbarItemWidth,
- height : config.toolbarItemHeight,
- id : highlighterId + '_clipboard',
- type : 'application/x-shockwave-flash',
- title : sh.config.strings.copyToClipboard
- },
-
- // these arguments are used in IE's collection
- args2 = {
- allowScriptAccess : 'always',
- wmode : 'transparent',
- flashVars : 'highlighterId=' + highlighterId,
- menu : 'false'
- },
- swf = config.clipboardSwf,
- html
- ;
-
- if (/msie/i.test(navigator.userAgent))
- {
- html = ''
- ;
- }
- else
- {
- html = ''
- ;
- }
-
- flashDiv = document.createElement('div');
- flashDiv.innerHTML = html;
-
- return flashDiv;
- };
-
- this.execute = function(sender, event, args)
- {
- var command = args.command;
-
- switch (command)
- {
- case 'get':
- var code = sh.utils.unindent(
- sh.utils.fixInputString(highlighter.originalCode)
- .replace(/</g, '<')
- .replace(/>/g, '>')
- .replace(/&/g, '&')
- );
-
- if(window.clipboardData)
- // will fall through to the confirmation because there isn't a break
- window.clipboardData.setData('text', code);
- else
- return sh.utils.unindent(code);
-
- case 'ok':
- sh.utils.alert(sh.config.strings.copyToClipboardConfirmation);
- break;
-
- case 'error':
- sh.utils.alert(args.message);
- break;
- }
- };
- },
-
- /** Command to print the colored source code. */
- printSource : function(highlighter)
- {
- this.create = function()
- {
- return sh.config.strings.print;
- };
-
- this.execute = function(sender, event, args)
- {
- var iframe = document.createElement('IFRAME'),
- doc = null
- ;
-
- // make sure there is never more than one hidden iframe created by SH
- if (sh.vars.printFrame != null)
- document.body.removeChild(sh.vars.printFrame);
-
- sh.vars.printFrame = iframe;
-
- // this hides the iframe
- iframe.style.cssText = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;';
-
- document.body.appendChild(iframe);
- doc = iframe.contentWindow.document;
-
- copyStyles(doc, window.document);
- doc.write(' tag with given style applied to it.
- *
- * @param {String} str Input string.
- * @param {String} css Style name to apply to the string.
- * @return {String} Returns input string with each line surrounded by tag.
- */
- decorate: function(str, css)
- {
- if (str == null || str.length == 0 || str == '\n')
- return str;
-
- str = str.replace(/... to them so that
- // leading spaces aren't included.
- if (css != null)
- str = sh.utils.eachLine(str, function(line)
- {
- if (line.length == 0)
- return '';
-
- var spaces = '';
-
- line = line.replace(/^( | )+/, function(s)
- {
- spaces = s;
- return '';
- });
-
- if (line.length == 0)
- return spaces;
-
- return spaces + '' + line + '';
- });
-
- return str;
- },
-
- /**
- * Pads number with zeros until it's length is the same as given length.
- *
- * @param {Number} number Number to pad.
- * @param {Number} length Max string length with.
- * @return {String} Returns a string padded with proper amount of '0'.
- */
- padNumber : function(number, length)
- {
- var result = number.toString();
-
- while (result.length < length)
- result = '0' + result;
-
- return result;
- },
-
- /**
- * Measures width of a single space character.
- * @return {Number} Returns width of a single space character.
- */
- measureSpace : function()
- {
- var container = document.createElement('div'),
- span,
- result = 0,
- body = document.body,
- id = sh.utils.guid('measureSpace'),
-
- // variable names will be compressed, so it's better than a plain string
- divOpen = 'regexList collection.
- * @return {Array} Returns a list of Match objects.
- */
- getMatches: function(code, regexInfo)
- {
- function defaultAdd(match, regexInfo)
- {
- return [new sh.Match(match[0], match.index, regexInfo.css)];
- };
-
- var index = 0,
- match = null,
- result = [],
- func = regexInfo.func ? regexInfo.func : defaultAdd
- ;
-
- while((match = regexInfo.regex.exec(code)) != null)
- result = result.concat(func(match, regexInfo));
-
- return result;
- },
-
- processUrls: function(code)
- {
- var lt = '<',
- gt = '>'
- ;
-
- return code.replace(sh.regexLib.url, function(m)
- {
- var suffix = '', prefix = '';
-
- // We include < and > in the URL for the common cases like ' + lineNumber + ' | ' : '')
- + ''
- + (spaces != null ? '' + spaces.replace(' ', ' ') + '' : '')
- + line
- + ' | '
- + '
.*?)" +
- "(?" + regexGroup.right.source + ")",
- "sgi"
- )
- };
- }
-}; // end of Highlighter
-
-return sh;
-}(); // end of anonymous function
-
-
-/**
- * XRegExp 0.6.1
- * (c) 2007-2008 Steven Levithan
- *
- * MIT License
- *
- * provides an augmented, cross-browser implementation of regular expressions
- * including support for additional modifiers and syntax. several convenience
- * methods and a recursive-construct parser are also included.
- */
-
-// prevent running twice, which would break references to native globals
-if (!window.XRegExp) {
-// anonymous function to avoid global variables
-(function () {
-// copy various native globals for reference. can't use the name ``native``
-// because it's a reserved JavaScript keyword.
-var real = {
- exec: RegExp.prototype.exec,
- match: String.prototype.match,
- replace: String.prototype.replace,
- split: String.prototype.split
- },
- /* regex syntax parsing with support for all the necessary cross-
- browser and context issues (escapings, character classes, etc.) */
- lib = {
- part: /(?:[^\\([#\s.]+|\\(?!k<[\w$]+>|[pP]{[^}]+})[\S\s]?|\((?=\?(?!#|<[\w$]+>)))+|(\()(?:\?(?:(#)[^)]*\)|<([$\w]+)>))?|\\(?:k<([\w$]+)>|[pP]{([^}]+)})|(\[\^?)|([\S\s])/g,
- replaceVar: /(?:[^$]+|\$(?![1-9$&`']|{[$\w]+}))+|\$(?:([1-9]\d*|[$&`'])|{([$\w]+)})/g,
- extended: /^(?:\s+|#.*)+/,
- quantifier: /^(?:[?*+]|{\d+(?:,\d*)?})/,
- classLeft: /&&\[\^?/g,
- classRight: /]/g
- },
- indexOf = function (array, item, from) {
- for (var i = from || 0; i < array.length; i++)
- if (array[i] === item) return i;
- return -1;
- },
- brokenExecUndef = /()??/.exec("")[1] !== undefined,
- plugins = {};
-
-/**
- * Accepts a pattern and flags, returns a new, extended RegExp object.
- * differs from a native regex in that additional flags and syntax are
- * supported and browser inconsistencies are ameliorated.
- * @ignore
- */
-XRegExp = function (pattern, flags) {
- if (pattern instanceof RegExp) {
- if (flags !== undefined)
- throw TypeError("can't supply flags when constructing one RegExp from another");
- return pattern.addFlags(); // new copy
- }
-
- var flags = flags || "",
- singleline = flags.indexOf("s") > -1,
- extended = flags.indexOf("x") > -1,
- hasNamedCapture = false,
- captureNames = [],
- output = [],
- part = lib.part,
- match, cc, len, index, regex;
-
- part.lastIndex = 0; // in case the last XRegExp compilation threw an error (unbalanced character class)
-
- while (match = real.exec.call(part, pattern)) {
- // comment pattern. this check must come before the capturing group check,
- // because both match[1] and match[2] will be non-empty.
- if (match[2]) {
- // keep tokens separated unless the following token is a quantifier
- if (!lib.quantifier.test(pattern.slice(part.lastIndex)))
- output.push("(?:)");
- // capturing group
- } else if (match[1]) {
- captureNames.push(match[3] || null);
- if (match[3])
- hasNamedCapture = true;
- output.push("(");
- // named backreference
- } else if (match[4]) {
- index = indexOf(captureNames, match[4]);
- // keep backreferences separate from subsequent literal numbers
- // preserve backreferences to named groups that are undefined at this point as literal strings
- output.push(index > -1 ?
- "\\" + (index + 1) + (isNaN(pattern.charAt(part.lastIndex)) ? "" : "(?:)") :
- match[0]
- );
- // unicode element (requires plugin)
- } else if (match[5]) {
- output.push(plugins.unicode ?
- plugins.unicode.get(match[5], match[0].charAt(1) === "P") :
- match[0]
- );
- // character class opening delimiter ("[" or "[^")
- // (non-native unicode elements are not supported within character classes)
- } else if (match[6]) {
- if (pattern.charAt(part.lastIndex) === "]") {
- // for cross-browser compatibility with ECMA-262 v3 behavior,
- // convert [] to (?!) and [^] to [\S\s].
- output.push(match[6] === "[" ? "(?!)" : "[\\S\\s]");
- part.lastIndex++;
- } else {
- // parse the character class with support for inner escapes and
- // ES4's infinitely nesting intersection syntax ([&&[^&&[]]]).
- cc = XRegExp.matchRecursive("&&" + pattern.slice(match.index), lib.classLeft, lib.classRight, "", {escapeChar: "\\"})[0];
- output.push(match[6] + cc + "]");
- part.lastIndex += cc.length + 1;
- }
- // dot ("."), pound sign ("#"), or whitespace character
- } else if (match[7]) {
- if (singleline && match[7] === ".") {
- output.push("[\\S\\s]");
- } else if (extended && lib.extended.test(match[7])) {
- len = real.exec.call(lib.extended, pattern.slice(part.lastIndex - 1))[0].length;
- // keep tokens separated unless the following token is a quantifier
- if (!lib.quantifier.test(pattern.slice(part.lastIndex - 1 + len)))
- output.push("(?:)");
- part.lastIndex += len - 1;
- } else {
- output.push(match[7]);
- }
- } else {
- output.push(match[0]);
- }
- }
-
- regex = RegExp(output.join(""), real.replace.call(flags, /[sx]+/g, ""));
- regex._x = {
- source: pattern,
- captureNames: hasNamedCapture ? captureNames : null
- };
- return regex;
-};
-
-/**
- * Barebones plugin support for now (intentionally undocumented)
- * @ignore
- * @param {Object} name
- * @param {Object} o
- */
-XRegExp.addPlugin = function (name, o) {
- plugins[name] = o;
-};
-
-/**
- * Adds named capture support, with values returned as ``result.name``.
- *
- * Also fixes two cross-browser issues, following the ECMA-262 v3 spec:
- * - captured values for non-participating capturing groups should be returned
- * as ``undefined``, rather than the empty string.
- * - the regex's ``lastIndex`` should not be incremented after zero-length
- * matches.
- * @ignore
- */
-RegExp.prototype.exec = function (str) {
- var match = real.exec.call(this, str),
- name, i, r2;
- if (match) {
- // fix browsers whose exec methods don't consistently return
- // undefined for non-participating capturing groups
- if (brokenExecUndef && match.length > 1) {
- // r2 doesn't need /g or /y, but they shouldn't hurt
- r2 = new RegExp("^" + this.source + "$(?!\\s)", this.getNativeFlags());
- real.replace.call(match[0], r2, function () {
- for (i = 1; i < arguments.length - 2; i++) {
- if (arguments[i] === undefined) match[i] = undefined;
- }
- });
- }
- // attach named capture properties
- if (this._x && this._x.captureNames) {
- for (i = 1; i < match.length; i++) {
- name = this._x.captureNames[i - 1];
- if (name) match[name] = match[i];
- }
- }
- // fix browsers that increment lastIndex after zero-length matches
- if (this.global && this.lastIndex > (match.index + match[0].length))
- this.lastIndex--;
- }
- return match;
-};
-})(); // end anonymous function
-} // end if(!window.XRegExp)
-
-/**
- * intentionally undocumented
- * @ignore
- */
-RegExp.prototype.getNativeFlags = function () {
- return (this.global ? "g" : "") +
- (this.ignoreCase ? "i" : "") +
- (this.multiline ? "m" : "") +
- (this.extended ? "x" : "") +
- (this.sticky ? "y" : "");
-};
-
-/**
- * Accepts flags; returns a new XRegExp object generated by recompiling
- * the regex with the additional flags (may include non-native flags).
- * The original regex object is not altered.
- * @ignore
- */
-RegExp.prototype.addFlags = function (flags) {
- var regex = new XRegExp(this.source, (flags || "") + this.getNativeFlags());
- if (this._x) {
- regex._x = {
- source: this._x.source,
- captureNames: this._x.captureNames ? this._x.captureNames.slice(0) : null
- };
- }
- return regex;
-};
-
-/**
- * Accepts a context object and string; returns the result of calling
- * ``exec`` with the provided string. the context is ignored but is
- * accepted for congruity with ``Function.prototype.call``.
- * @ignore
- */
-RegExp.prototype.call = function (context, str) {
- return this.exec(str);
-};
-
-/**
- * Accepts a context object and arguments array; returns the result of
- * calling ``exec`` with the first value in the arguments array. the context
- * is ignored but is accepted for congruity with ``Function.prototype.apply``.
- * @ignore
- */
-RegExp.prototype.apply = function (context, args) {
- return this.exec(args[0]);
-};
-
-/**
- * Accepts a pattern and flags; returns an XRegExp object. if the pattern
- * and flag combination has previously been cached, the cached copy is
- * returned, otherwise the new object is cached.
- * @ignore
- */
-XRegExp.cache = function (pattern, flags) {
- var key = "/" + pattern + "/" + (flags || "");
- return XRegExp.cache[key] || (XRegExp.cache[key] = new XRegExp(pattern, flags));
-};
-
-/**
- * Accepts a string; returns the string with regex metacharacters escaped.
- * the returned string can safely be used within a regex to match a literal
- * string. escaped characters are [, ], {, }, (, ), -, *, +, ?, ., \, ^, $,
- * |, #, [comma], and whitespace.
- * @ignore
- */
-XRegExp.escape = function (str) {
- return str.replace(/[-[\]{}()*+?.\\^$|,#\s]/g, "\\$&");
-};
-
-/**
- * Accepts a string to search, left and right delimiters as regex pattern
- * strings, optional regex flags (may include non-native s, x, and y flags),
- * and an options object which allows setting an escape character and changing
- * the return format from an array of matches to a two-dimensional array of
- * string parts with extended position data. returns an array of matches
- * (optionally with extended data), allowing nested instances of left and right
- * delimiters. use the g flag to return all matches, otherwise only the first
- * is returned. if delimiters are unbalanced within the subject data, an error
- * is thrown.
- *
- * This function admittedly pushes the boundaries of what can be accomplished
- * sensibly without a "real" parser. however, by doing so it provides flexible
- * and powerful recursive parsing capabilities with minimal code weight.
- *
- * Warning: the ``escapeChar`` option is considered experimental and might be
- * changed or removed in future versions of XRegExp.
- *
- * unsupported features:
- * - backreferences within delimiter patterns when using ``escapeChar``.
- * - although providing delimiters as regex objects adds the minor feature of
- * independent delimiter flags, it introduces other limitations and is only
- * intended to be done by the ``XRegExp`` constructor (which can't call
- * itself while building a regex).
- *
- * @ignore
- */
-XRegExp.matchRecursive = function (str, left, right, flags, options) {
- var options = options || {},
- escapeChar = options.escapeChar,
- vN = options.valueNames,
- flags = flags || "",
- global = flags.indexOf("g") > -1,
- ignoreCase = flags.indexOf("i") > -1,
- multiline = flags.indexOf("m") > -1,
- sticky = flags.indexOf("y") > -1,
- /* sticky mode has its own handling in this function, which means you
- can use flag "y" even in browsers which don't support it natively */
- flags = flags.replace(/y/g, ""),
- left = left instanceof RegExp ? (left.global ? left : left.addFlags("g")) : new XRegExp(left, "g" + flags),
- right = right instanceof RegExp ? (right.global ? right : right.addFlags("g")) : new XRegExp(right, "g" + flags),
- output = [],
- openTokens = 0,
- delimStart = 0,
- delimEnd = 0,
- lastOuterEnd = 0,
- outerStart, innerStart, leftMatch, rightMatch, escaped, esc;
-
- if (escapeChar) {
- if (escapeChar.length > 1) throw SyntaxError("can't supply more than one escape character");
- if (multiline) throw TypeError("can't supply escape character when using the multiline flag");
- escaped = XRegExp.escape(escapeChar);
- /* Escape pattern modifiers:
- /g - not needed here
- /i - included
- /m - **unsupported**, throws error
- /s - handled by XRegExp when delimiters are provided as strings
- /x - handled by XRegExp when delimiters are provided as strings
- /y - not needed here; supported by other handling in this function
- */
- esc = new RegExp(
- "^(?:" + escaped + "[\\S\\s]|(?:(?!" + left.source + "|" + right.source + ")[^" + escaped + "])+)+",
- ignoreCase ? "i" : ""
- );
- }
-
- while (true) {
- /* advance the starting search position to the end of the last delimiter match.
- a couple special cases are also covered:
- - if using an escape character, advance to the next delimiter's starting position,
- skipping any escaped characters
- - first time through, reset lastIndex in case delimiters were provided as regexes
- */
- left.lastIndex = right.lastIndex = delimEnd +
- (escapeChar ? (esc.exec(str.slice(delimEnd)) || [""])[0].length : 0);
-
- leftMatch = left.exec(str);
- rightMatch = right.exec(str);
-
- // only keep the result which matched earlier in the string
- if (leftMatch && rightMatch) {
- if (leftMatch.index <= rightMatch.index)
- rightMatch = null;
- else leftMatch = null;
- }
-
- /* paths*:
- leftMatch | rightMatch | openTokens | result
- 1 | 0 | 1 | ...
- 1 | 0 | 0 | ...
- 0 | 1 | 1 | ...
- 0 | 1 | 0 | throw
- 0 | 0 | 1 | throw
- 0 | 0 | 0 | break
- * - does not include the sticky mode special case
- - the loop ends after the first completed match if not in global mode
- */
-
- if (leftMatch || rightMatch) {
- delimStart = (leftMatch || rightMatch).index;
- delimEnd = (leftMatch ? left : right).lastIndex;
- } else if (!openTokens) {
- break;
- }
-
- if (sticky && !openTokens && delimStart > lastOuterEnd)
- break;
-
- if (leftMatch) {
- if (!openTokens++) {
- outerStart = delimStart;
- innerStart = delimEnd;
- }
- } else if (rightMatch && openTokens) {
- if (!--openTokens) {
- if (vN) {
- if (vN[0] && outerStart > lastOuterEnd)
- output.push([vN[0], str.slice(lastOuterEnd, outerStart), lastOuterEnd, outerStart]);
- if (vN[1]) output.push([vN[1], str.slice(outerStart, innerStart), outerStart, innerStart]);
- if (vN[2]) output.push([vN[2], str.slice(innerStart, delimStart), innerStart, delimStart]);
- if (vN[3]) output.push([vN[3], str.slice(delimStart, delimEnd), delimStart, delimEnd]);
- } else {
- output.push(str.slice(innerStart, delimStart));
- }
- lastOuterEnd = delimEnd;
- if (!global)
- break;
- }
- } else {
- // reset lastIndex in case delimiters were provided as regexes
- left.lastIndex = right.lastIndex = 0;
- throw Error("subject data contains unbalanced delimiters");
- }
-
- // if the delimiter matched an empty string, advance delimEnd to avoid an infinite loop
- if (delimStart === delimEnd)
- delimEnd++;
- }
-
- if (global && !sticky && vN && vN[0] && str.length > lastOuterEnd)
- output.push([vN[0], str.slice(lastOuterEnd), lastOuterEnd, str.length]);
-
- // reset lastIndex in case delimiters were provided as regexes
- left.lastIndex = right.lastIndex = 0;
-
- return output;
-};
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
+ *
+ * @version
+ * 2.1.364 (October 15 2009)
+ *
+ * @copyright
+ * Copyright (C) 2004-2009 Alex Gorbatchev.
+ *
+ * @license
+ * This file is part of SyntaxHighlighter.
+ *
+ * SyntaxHighlighter is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SyntaxHighlighter is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SyntaxHighlighter. If not, see .
+ */
+//
+// Begin anonymous function. This is used to contain local scope variables without polutting global scope.
+//
+if (!window.SyntaxHighlighter) var SyntaxHighlighter = function() {
+
+// Shortcut object which will be assigned to the SyntaxHighlighter variable.
+// This is a shorthand for local reference in order to avoid long namespace
+// references to SyntaxHighlighter.whatever...
+var sh = {
+ defaults : {
+ /** Additional CSS class names to be added to highlighter elements. */
+ 'class-name' : '',
+
+ /** First line number. */
+ 'first-line' : 1,
+
+ /**
+ * Pads line numbers. Possible values are:
+ *
+ * false - don't pad line numbers.
+ * true - automaticaly pad numbers with minimum required number of leading zeroes.
+ * [int] - length up to which pad line numbers.
+ */
+ 'pad-line-numbers' : true,
+
+ /** Lines to highlight. */
+ 'highlight' : null,
+
+ /** Enables or disables smart tabs. */
+ 'smart-tabs' : true,
+
+ /** Gets or sets tab size. */
+ 'tab-size' : 4,
+
+ /** Enables or disables gutter. */
+ 'gutter' : true,
+
+ /** Enables or disables toolbar. */
+ 'toolbar' : true,
+
+ /** Forces code view to be collapsed. */
+ 'collapse' : false,
+
+ /** Enables or disables automatic links. */
+ 'auto-links' : true,
+
+ /** Gets or sets light mode. Equavalent to turning off gutter and toolbar. */
+ 'light' : false,
+
+ /** Enables or disables automatic line wrapping. */
+ 'wrap-lines' : true,
+
+ 'html-script' : false
+ },
+
+ config : {
+ /** Enables use of tags. */
+ useScriptTags : true,
+
+ /** Path to the copy to clipboard SWF file. */
+ clipboardSwf : null,
+
+ /** Width of an item in the toolbar. */
+ toolbarItemWidth : 16,
+
+ /** Height of an item in the toolbar. */
+ toolbarItemHeight : 16,
+
+ /** Blogger mode flag. */
+ bloggerMode : false,
+
+ stripBrs : false,
+
+ /** Name of the tag that SyntaxHighlighter will automatically look for. */
+ tagName : 'pre',
+
+ strings : {
+ expandSource : 'show source',
+ viewSource : 'view source',
+ copyToClipboard : 'copy to clipboard',
+ copyToClipboardConfirmation : 'The code is in your clipboard now',
+ print : 'print',
+ help : '?',
+ alert: 'SyntaxHighlighter\n\n',
+ noBrush : 'Can\'t find brush for: ',
+ brushNotHtmlScript : 'Brush wasn\'t configured for html-script option: ',
+
+ // this is populated by the build script
+ aboutDialog : 'About SyntaxHighlighter SyntaxHighlighterversion 2.1.364 (October 15 2009)If you like this script, please donate to keep development active!JavaScript code syntax highlighter.Copyright 2004-2009 Alex Gorbatchev.'
+ },
+
+ /** If true, output will show HTML produces instead. */
+ debug : false
+ },
+
+ /** Internal 'global' variables. */
+ vars : {
+ discoveredBrushes : null,
+ spaceWidth : null,
+ printFrame : null,
+ highlighters : {}
+ },
+
+ /** This object is populated by user included external brush files. */
+ brushes : {},
+
+ /** Common regular expressions. */
+ regexLib : {
+ multiLineCComments : /\/\*[\s\S]*?\*\//gm,
+ singleLineCComments : /\/\/.*$/gm,
+ singleLinePerlComments : /#.*$/gm,
+ doubleQuotedString : /"([^\\"\n]|\\.)*"/g,
+ singleQuotedString : /'([^\\'\n]|\\.)*'/g,
+ multiLineDoubleQuotedString : /"([^\\"]|\\.)*"/g,
+ multiLineSingleQuotedString : /'([^\\']|\\.)*'/g,
+ xmlComments : /(<|<)!--[\s\S]*?--(>|>)/gm,
+ url : /<\w+:\/\/[\w-.\/?%&=@:;]*>|\w+:\/\/[\w-.\/?%&=@:;]*/g,
+
+ /** = ?> tags. */
+ phpScriptTags : { left: /(<|<)\?=?/g, right: /\?(>|>)/g },
+
+ /** <%= %> tags. */
+ aspScriptTags : { left: /(<|<)%=?/g, right: /%(>|>)/g },
+
+ /** tags. */
+ scriptScriptTags : { left: /(<|<)\s*script.*?(>|>)/gi, right: /(<|<)\/\s*script\s*(>|>)/gi }
+ },
+
+ toolbar : {
+ /**
+ * Creates new toolbar for a highlighter.
+ * @param {Highlighter} highlighter Target highlighter.
+ */
+ create : function(highlighter)
+ {
+ var div = document.createElement('DIV'),
+ items = sh.toolbar.items
+ ;
+
+ div.className = 'toolbar';
+
+ for (var name in items)
+ {
+ var constructor = items[name],
+ command = new constructor(highlighter),
+ element = command.create()
+ ;
+
+ highlighter.toolbarCommands[name] = command;
+
+ if (element == null)
+ continue;
+
+ if (typeof(element) == 'string')
+ element = sh.toolbar.createButton(element, highlighter.id, name);
+
+ element.className += 'item ' + name;
+ div.appendChild(element);
+ }
+
+ return div;
+ },
+
+ /**
+ * Create a standard anchor button for the toolbar.
+ * @param {String} label Label text to display.
+ * @param {String} highlighterId Highlighter ID that this button would belong to.
+ * @param {String} commandName Command name that would be executed.
+ * @return {Element} Returns an 'A' element.
+ */
+ createButton : function(label, highlighterId, commandName)
+ {
+ var a = document.createElement('a'),
+ style = a.style,
+ config = sh.config,
+ width = config.toolbarItemWidth,
+ height = config.toolbarItemHeight
+ ;
+
+ a.href = '#' + commandName;
+ a.title = label;
+ a.highlighterId = highlighterId;
+ a.commandName = commandName;
+ a.innerHTML = label;
+
+ if (isNaN(width) == false)
+ style.width = width + 'px';
+
+ if (isNaN(height) == false)
+ style.height = height + 'px';
+
+ a.onclick = function(e)
+ {
+ try
+ {
+ sh.toolbar.executeCommand(
+ this,
+ e || window.event,
+ this.highlighterId,
+ this.commandName
+ );
+ }
+ catch(e)
+ {
+ sh.utils.alert(e.message);
+ }
+
+ return false;
+ };
+
+ return a;
+ },
+
+ /**
+ * Executes a toolbar command.
+ * @param {Element} sender Sender element.
+ * @param {MouseEvent} event Original mouse event object.
+ * @param {String} highlighterId Highlighter DIV element ID.
+ * @param {String} commandName Name of the command to execute.
+ * @return {Object} Passes out return value from command execution.
+ */
+ executeCommand : function(sender, event, highlighterId, commandName, args)
+ {
+ var highlighter = sh.vars.highlighters[highlighterId],
+ command
+ ;
+
+ if (highlighter == null || (command = highlighter.toolbarCommands[commandName]) == null)
+ return null;
+
+ return command.execute(sender, event, args);
+ },
+
+ /** Collection of toolbar items. */
+ items : {
+ expandSource : function(highlighter)
+ {
+ this.create = function()
+ {
+ if (highlighter.getParam('collapse') != true)
+ return;
+
+ return sh.config.strings.expandSource;
+ };
+
+ this.execute = function(sender, event, args)
+ {
+ var div = highlighter.div;
+
+ sender.parentNode.removeChild(sender);
+ div.className = div.className.replace('collapsed', '');
+ };
+ },
+
+ /**
+ * Command to open a new window and display the original unformatted source code inside.
+ */
+ viewSource : function(highlighter)
+ {
+ this.create = function()
+ {
+ return sh.config.strings.viewSource;
+ };
+
+ this.execute = function(sender, event, args)
+ {
+ var code = sh.utils.fixInputString(highlighter.originalCode).replace(/' + code + '');
+ wnd.document.close();
+ };
+ },
+
+ /**
+ * Command to copy the original source code in to the clipboard.
+ * Uses Flash method if clipboardSwf is configured.
+ */
+ copyToClipboard : function(highlighter)
+ {
+ var flashDiv, flashSwf,
+ highlighterId = highlighter.id
+ ;
+
+ this.create = function()
+ {
+ var config = sh.config;
+
+ // disable functionality if running locally
+ if (config.clipboardSwf == null)
+ return null;
+
+ function params(list)
+ {
+ var result = '';
+
+ for (var name in list)
+ result += "";
+
+ return result;
+ };
+
+ function attributes(list)
+ {
+ var result = '';
+
+ for (var name in list)
+ result += " " + name + "='" + list[name] + "'";
+
+ return result;
+ };
+
+ var args1 = {
+ width : config.toolbarItemWidth,
+ height : config.toolbarItemHeight,
+ id : highlighterId + '_clipboard',
+ type : 'application/x-shockwave-flash',
+ title : sh.config.strings.copyToClipboard
+ },
+
+ // these arguments are used in IE's collection
+ args2 = {
+ allowScriptAccess : 'always',
+ wmode : 'transparent',
+ flashVars : 'highlighterId=' + highlighterId,
+ menu : 'false'
+ },
+ swf = config.clipboardSwf,
+ html
+ ;
+
+ if (/msie/i.test(navigator.userAgent))
+ {
+ html = ''
+ ;
+ }
+ else
+ {
+ html = ''
+ ;
+ }
+
+ flashDiv = document.createElement('div');
+ flashDiv.innerHTML = html;
+
+ return flashDiv;
+ };
+
+ this.execute = function(sender, event, args)
+ {
+ var command = args.command;
+
+ switch (command)
+ {
+ case 'get':
+ var code = sh.utils.unindent(
+ sh.utils.fixInputString(highlighter.originalCode)
+ .replace(/</g, '<')
+ .replace(/>/g, '>')
+ .replace(/&/g, '&')
+ );
+
+ if(window.clipboardData)
+ // will fall through to the confirmation because there isn't a break
+ window.clipboardData.setData('text', code);
+ else
+ return sh.utils.unindent(code);
+
+ case 'ok':
+ sh.utils.alert(sh.config.strings.copyToClipboardConfirmation);
+ break;
+
+ case 'error':
+ sh.utils.alert(args.message);
+ break;
+ }
+ };
+ },
+
+ /** Command to print the colored source code. */
+ printSource : function(highlighter)
+ {
+ this.create = function()
+ {
+ return sh.config.strings.print;
+ };
+
+ this.execute = function(sender, event, args)
+ {
+ var iframe = document.createElement('IFRAME'),
+ doc = null
+ ;
+
+ // make sure there is never more than one hidden iframe created by SH
+ if (sh.vars.printFrame != null)
+ document.body.removeChild(sh.vars.printFrame);
+
+ sh.vars.printFrame = iframe;
+
+ // this hides the iframe
+ iframe.style.cssText = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;';
+
+ document.body.appendChild(iframe);
+ doc = iframe.contentWindow.document;
+
+ copyStyles(doc, window.document);
+ doc.write('' + highlighter.div.innerHTML + '');
+ doc.close();
+
+ iframe.contentWindow.focus();
+ iframe.contentWindow.print();
+
+ function copyStyles(destDoc, sourceDoc)
+ {
+ var links = sourceDoc.getElementsByTagName('link');
+
+ for(var i = 0; i < links.length; i++)
+ if(links[i].rel.toLowerCase() == 'stylesheet' && /shCore\.css$/.test(links[i].href))
+ destDoc.write('');
+ };
+ };
+ },
+
+ /** Command to display the about dialog window. */
+ about : function(highlighter)
+ {
+ this.create = function()
+ {
+ return sh.config.strings.help;
+ };
+
+ this.execute = function(sender, event)
+ {
+ var wnd = sh.utils.popup('', '_blank', 500, 250, 'scrollbars=0'),
+ doc = wnd.document
+ ;
+
+ doc.write(sh.config.strings.aboutDialog);
+ doc.close();
+ wnd.focus();
+ };
+ }
+ }
+ },
+
+ utils : {
+ /**
+ * Finds an index of element in the array.
+ * @ignore
+ * @param {Object} searchElement
+ * @param {Number} fromIndex
+ * @return {Number} Returns index of element if found; -1 otherwise.
+ */
+ indexOf : function(array, searchElement, fromIndex)
+ {
+ fromIndex = Math.max(fromIndex || 0, 0);
+
+ for (var i = fromIndex; i < array.length; i++)
+ if(array[i] == searchElement)
+ return i;
+
+ return -1;
+ },
+
+ /**
+ * Generates a unique element ID.
+ */
+ guid : function(prefix)
+ {
+ return prefix + Math.round(Math.random() * 1000000).toString();
+ },
+
+ /**
+ * Merges two objects. Values from obj2 override values in obj1.
+ * Function is NOT recursive and works only for one dimensional objects.
+ * @param {Object} obj1 First object.
+ * @param {Object} obj2 Second object.
+ * @return {Object} Returns combination of both objects.
+ */
+ merge: function(obj1, obj2)
+ {
+ var result = {}, name;
+
+ for (name in obj1)
+ result[name] = obj1[name];
+
+ for (name in obj2)
+ result[name] = obj2[name];
+
+ return result;
+ },
+
+ /**
+ * Attempts to convert string to boolean.
+ * @param {String} value Input string.
+ * @return {Boolean} Returns true if input was "true", false if input was "false" and value otherwise.
+ */
+ toBoolean: function(value)
+ {
+ switch (value)
+ {
+ case "true":
+ return true;
+
+ case "false":
+ return false;
+ }
+
+ return value;
+ },
+
+ /**
+ * Opens up a centered popup window.
+ * @param {String} url URL to open in the window.
+ * @param {String} name Popup name.
+ * @param {int} width Popup width.
+ * @param {int} height Popup height.
+ * @param {String} options window.open() options.
+ * @return {Window} Returns window instance.
+ */
+ popup: function(url, name, width, height, options)
+ {
+ var x = (screen.width - width) / 2,
+ y = (screen.height - height) / 2
+ ;
+
+ options += ', left=' + x +
+ ', top=' + y +
+ ', width=' + width +
+ ', height=' + height
+ ;
+ options = options.replace(/^,/, '');
+
+ var win = window.open(url, name, options);
+ win.focus();
+ return win;
+ },
+
+ /**
+ * Adds event handler to the target object.
+ * @param {Object} obj Target object.
+ * @param {String} type Name of the event.
+ * @param {Function} func Handling function.
+ */
+ addEvent: function(obj, type, func)
+ {
+ if (obj.attachEvent)
+ {
+ obj['e' + type + func] = func;
+ obj[type + func] = function()
+ {
+ obj['e' + type + func](window.event);
+ }
+ obj.attachEvent('on' + type, obj[type + func]);
+ }
+ else
+ {
+ obj.addEventListener(type, func, false);
+ }
+ },
+
+ /**
+ * Displays an alert.
+ * @param {String} str String to display.
+ */
+ alert: function(str)
+ {
+ alert(sh.config.strings.alert + str)
+ },
+
+ /**
+ * Finds a brush by its alias.
+ *
+ * @param {String} alias Brush alias.
+ * @param {Boolean} alert Suppresses the alert if false.
+ * @return {Brush} Returns bursh constructor if found, null otherwise.
+ */
+ findBrush: function(alias, alert)
+ {
+ var brushes = sh.vars.discoveredBrushes,
+ result = null
+ ;
+
+ if (brushes == null)
+ {
+ brushes = {};
+
+ // Find all brushes
+ for (var brush in sh.brushes)
+ {
+ var aliases = sh.brushes[brush].aliases;
+
+ if (aliases == null)
+ continue;
+
+ // keep the brush name
+ sh.brushes[brush].name = brush.toLowerCase();
+
+ for (var i = 0; i < aliases.length; i++)
+ brushes[aliases[i]] = brush;
+ }
+
+ sh.vars.discoveredBrushes = brushes;
+ }
+
+ result = sh.brushes[brushes[alias]];
+
+ if (result == null && alert != false)
+ sh.utils.alert(sh.config.strings.noBrush + alias);
+
+ return result;
+ },
+
+ /**
+ * Executes a callback on each line and replaces each line with result from the callback.
+ * @param {Object} str Input string.
+ * @param {Object} callback Callback function taking one string argument and returning a string.
+ */
+ eachLine: function(str, callback)
+ {
+ var lines = str.split('\n');
+
+ for (var i = 0; i < lines.length; i++)
+ lines[i] = callback(lines[i]);
+
+ return lines.join('\n');
+ },
+
+ /**
+ * This is a special trim which only removes first and last empty lines
+ * and doesn't affect valid leading space on the first line.
+ *
+ * @param {String} str Input string
+ * @return {String} Returns string without empty first and last lines.
+ */
+ trimFirstAndLastLines: function(str)
+ {
+ return str.replace(/^[ ]*[\n]+|[\n]*[ ]*$/g, '');
+ },
+
+ /**
+ * Parses key/value pairs into hash object.
+ *
+ * Understands the following formats:
+ * - name: word;
+ * - name: [word, word];
+ * - name: "string";
+ * - name: 'string';
+ *
+ * For example:
+ * name1: value; name2: [value, value]; name3: 'value'
+ *
+ * @param {String} str Input string.
+ * @return {Object} Returns deserialized object.
+ */
+ parseParams: function(str)
+ {
+ var match,
+ result = {},
+ arrayRegex = new XRegExp("^\\[(?(.*?))\\]$"),
+ regex = new XRegExp(
+ "(?[\\w-]+)" +
+ "\\s*:\\s*" +
+ "(?" +
+ "[\\w-%#]+|" + // word
+ "\\[.*?\\]|" + // [] array
+ '".*?"|' + // "" string
+ "'.*?'" + // '' string
+ ")\\s*;?",
+ "g"
+ )
+ ;
+
+ while ((match = regex.exec(str)) != null)
+ {
+ var value = match.value
+ .replace(/^['"]|['"]$/g, '') // strip quotes from end of strings
+ ;
+
+ // try to parse array value
+ if (value != null && arrayRegex.test(value))
+ {
+ var m = arrayRegex.exec(value);
+ value = m.values.length > 0 ? m.values.split(/\s*,\s*/) : [];
+ }
+
+ result[match.name] = value;
+ }
+
+ return result;
+ },
+
+ /**
+ * Wraps each line of the string into tag with given style applied to it.
+ *
+ * @param {String} str Input string.
+ * @param {String} css Style name to apply to the string.
+ * @return {String} Returns input string with each line surrounded by tag.
+ */
+ decorate: function(str, css)
+ {
+ if (str == null || str.length == 0 || str == '\n')
+ return str;
+
+ str = str.replace(/... ' + line + '';
+ });
+
+ return str;
+ },
+
+ /**
+ * Pads number with zeros until it's length is the same as given length.
+ *
+ * @param {Number} number Number to pad.
+ * @param {Number} length Max string length with.
+ * @return {String} Returns a string padded with proper amount of '0'.
+ */
+ padNumber : function(number, length)
+ {
+ var result = number.toString();
+
+ while (result.length < length)
+ result = '0' + result;
+
+ return result;
+ },
+
+ /**
+ * Measures width of a single space character.
+ * @return {Number} Returns width of a single space character.
+ */
+ measureSpace : function()
+ {
+ var container = document.createElement('div'),
+ span,
+ result = 0,
+ body = document.body,
+ id = sh.utils.guid('measureSpace'),
+
+ // variable names will be compressed, so it's better than a plain string
+ divOpen = 'regexList collection.
+ * @return {Array} Returns a list of Match objects.
+ */
+ getMatches: function(code, regexInfo)
+ {
+ function defaultAdd(match, regexInfo)
+ {
+ return [new sh.Match(match[0], match.index, regexInfo.css)];
+ };
+
+ var index = 0,
+ match = null,
+ result = [],
+ func = regexInfo.func ? regexInfo.func : defaultAdd
+ ;
+
+ while((match = regexInfo.regex.exec(code)) != null)
+ result = result.concat(func(match, regexInfo));
+
+ return result;
+ },
+
+ processUrls: function(code)
+ {
+ var lt = '<',
+ gt = '>'
+ ;
+
+ return code.replace(sh.regexLib.url, function(m)
+ {
+ var suffix = '', prefix = '';
+
+ // We include < and > in the URL for the common cases like ' + lineNumber + ' | ' : '')
+ + ''
+ + (spaces != null ? '' + spaces.replace(' ', ' ') + '' : '')
+ + line
+ + ' | '
+ + '
.*?)" +
+ "(?" + regexGroup.right.source + ")",
+ "sgi"
+ )
+ };
+ }
+}; // end of Highlighter
+
+return sh;
+}(); // end of anonymous function
+
+
+/**
+ * XRegExp 0.6.1
+ * (c) 2007-2008 Steven Levithan
+ *
+ * MIT License
+ *
+ * provides an augmented, cross-browser implementation of regular expressions
+ * including support for additional modifiers and syntax. several convenience
+ * methods and a recursive-construct parser are also included.
+ */
+
+// prevent running twice, which would break references to native globals
+if (!window.XRegExp) {
+// anonymous function to avoid global variables
+(function () {
+// copy various native globals for reference. can't use the name ``native``
+// because it's a reserved JavaScript keyword.
+var real = {
+ exec: RegExp.prototype.exec,
+ match: String.prototype.match,
+ replace: String.prototype.replace,
+ split: String.prototype.split
+ },
+ /* regex syntax parsing with support for all the necessary cross-
+ browser and context issues (escapings, character classes, etc.) */
+ lib = {
+ part: /(?:[^\\([#\s.]+|\\(?!k<[\w$]+>|[pP]{[^}]+})[\S\s]?|\((?=\?(?!#|<[\w$]+>)))+|(\()(?:\?(?:(#)[^)]*\)|<([$\w]+)>))?|\\(?:k<([\w$]+)>|[pP]{([^}]+)})|(\[\^?)|([\S\s])/g,
+ replaceVar: /(?:[^$]+|\$(?![1-9$&`']|{[$\w]+}))+|\$(?:([1-9]\d*|[$&`'])|{([$\w]+)})/g,
+ extended: /^(?:\s+|#.*)+/,
+ quantifier: /^(?:[?*+]|{\d+(?:,\d*)?})/,
+ classLeft: /&&\[\^?/g,
+ classRight: /]/g
+ },
+ indexOf = function (array, item, from) {
+ for (var i = from || 0; i < array.length; i++)
+ if (array[i] === item) return i;
+ return -1;
+ },
+ brokenExecUndef = /()??/.exec("")[1] !== undefined,
+ plugins = {};
+
+/**
+ * Accepts a pattern and flags, returns a new, extended RegExp object.
+ * differs from a native regex in that additional flags and syntax are
+ * supported and browser inconsistencies are ameliorated.
+ * @ignore
+ */
+XRegExp = function (pattern, flags) {
+ if (pattern instanceof RegExp) {
+ if (flags !== undefined)
+ throw TypeError("can't supply flags when constructing one RegExp from another");
+ return pattern.addFlags(); // new copy
+ }
+
+ var flags = flags || "",
+ singleline = flags.indexOf("s") > -1,
+ extended = flags.indexOf("x") > -1,
+ hasNamedCapture = false,
+ captureNames = [],
+ output = [],
+ part = lib.part,
+ match, cc, len, index, regex;
+
+ part.lastIndex = 0; // in case the last XRegExp compilation threw an error (unbalanced character class)
+
+ while (match = real.exec.call(part, pattern)) {
+ // comment pattern. this check must come before the capturing group check,
+ // because both match[1] and match[2] will be non-empty.
+ if (match[2]) {
+ // keep tokens separated unless the following token is a quantifier
+ if (!lib.quantifier.test(pattern.slice(part.lastIndex)))
+ output.push("(?:)");
+ // capturing group
+ } else if (match[1]) {
+ captureNames.push(match[3] || null);
+ if (match[3])
+ hasNamedCapture = true;
+ output.push("(");
+ // named backreference
+ } else if (match[4]) {
+ index = indexOf(captureNames, match[4]);
+ // keep backreferences separate from subsequent literal numbers
+ // preserve backreferences to named groups that are undefined at this point as literal strings
+ output.push(index > -1 ?
+ "\\" + (index + 1) + (isNaN(pattern.charAt(part.lastIndex)) ? "" : "(?:)") :
+ match[0]
+ );
+ // unicode element (requires plugin)
+ } else if (match[5]) {
+ output.push(plugins.unicode ?
+ plugins.unicode.get(match[5], match[0].charAt(1) === "P") :
+ match[0]
+ );
+ // character class opening delimiter ("[" or "[^")
+ // (non-native unicode elements are not supported within character classes)
+ } else if (match[6]) {
+ if (pattern.charAt(part.lastIndex) === "]") {
+ // for cross-browser compatibility with ECMA-262 v3 behavior,
+ // convert [] to (?!) and [^] to [\S\s].
+ output.push(match[6] === "[" ? "(?!)" : "[\\S\\s]");
+ part.lastIndex++;
+ } else {
+ // parse the character class with support for inner escapes and
+ // ES4's infinitely nesting intersection syntax ([&&[^&&[]]]).
+ cc = XRegExp.matchRecursive("&&" + pattern.slice(match.index), lib.classLeft, lib.classRight, "", {escapeChar: "\\"})[0];
+ output.push(match[6] + cc + "]");
+ part.lastIndex += cc.length + 1;
+ }
+ // dot ("."), pound sign ("#"), or whitespace character
+ } else if (match[7]) {
+ if (singleline && match[7] === ".") {
+ output.push("[\\S\\s]");
+ } else if (extended && lib.extended.test(match[7])) {
+ len = real.exec.call(lib.extended, pattern.slice(part.lastIndex - 1))[0].length;
+ // keep tokens separated unless the following token is a quantifier
+ if (!lib.quantifier.test(pattern.slice(part.lastIndex - 1 + len)))
+ output.push("(?:)");
+ part.lastIndex += len - 1;
+ } else {
+ output.push(match[7]);
+ }
+ } else {
+ output.push(match[0]);
+ }
+ }
+
+ regex = RegExp(output.join(""), real.replace.call(flags, /[sx]+/g, ""));
+ regex._x = {
+ source: pattern,
+ captureNames: hasNamedCapture ? captureNames : null
+ };
+ return regex;
+};
+
+/**
+ * Barebones plugin support for now (intentionally undocumented)
+ * @ignore
+ * @param {Object} name
+ * @param {Object} o
+ */
+XRegExp.addPlugin = function (name, o) {
+ plugins[name] = o;
+};
+
+/**
+ * Adds named capture support, with values returned as ``result.name``.
+ *
+ * Also fixes two cross-browser issues, following the ECMA-262 v3 spec:
+ * - captured values for non-participating capturing groups should be returned
+ * as ``undefined``, rather than the empty string.
+ * - the regex's ``lastIndex`` should not be incremented after zero-length
+ * matches.
+ * @ignore
+ */
+RegExp.prototype.exec = function (str) {
+ var match = real.exec.call(this, str),
+ name, i, r2;
+ if (match) {
+ // fix browsers whose exec methods don't consistently return
+ // undefined for non-participating capturing groups
+ if (brokenExecUndef && match.length > 1) {
+ // r2 doesn't need /g or /y, but they shouldn't hurt
+ r2 = new RegExp("^" + this.source + "$(?!\\s)", this.getNativeFlags());
+ real.replace.call(match[0], r2, function () {
+ for (i = 1; i < arguments.length - 2; i++) {
+ if (arguments[i] === undefined) match[i] = undefined;
+ }
+ });
+ }
+ // attach named capture properties
+ if (this._x && this._x.captureNames) {
+ for (i = 1; i < match.length; i++) {
+ name = this._x.captureNames[i - 1];
+ if (name) match[name] = match[i];
+ }
+ }
+ // fix browsers that increment lastIndex after zero-length matches
+ if (this.global && this.lastIndex > (match.index + match[0].length))
+ this.lastIndex--;
+ }
+ return match;
+};
+})(); // end anonymous function
+} // end if(!window.XRegExp)
+
+/**
+ * intentionally undocumented
+ * @ignore
+ */
+RegExp.prototype.getNativeFlags = function () {
+ return (this.global ? "g" : "") +
+ (this.ignoreCase ? "i" : "") +
+ (this.multiline ? "m" : "") +
+ (this.extended ? "x" : "") +
+ (this.sticky ? "y" : "");
+};
+
+/**
+ * Accepts flags; returns a new XRegExp object generated by recompiling
+ * the regex with the additional flags (may include non-native flags).
+ * The original regex object is not altered.
+ * @ignore
+ */
+RegExp.prototype.addFlags = function (flags) {
+ var regex = new XRegExp(this.source, (flags || "") + this.getNativeFlags());
+ if (this._x) {
+ regex._x = {
+ source: this._x.source,
+ captureNames: this._x.captureNames ? this._x.captureNames.slice(0) : null
+ };
+ }
+ return regex;
+};
+
+/**
+ * Accepts a context object and string; returns the result of calling
+ * ``exec`` with the provided string. the context is ignored but is
+ * accepted for congruity with ``Function.prototype.call``.
+ * @ignore
+ */
+RegExp.prototype.call = function (context, str) {
+ return this.exec(str);
+};
+
+/**
+ * Accepts a context object and arguments array; returns the result of
+ * calling ``exec`` with the first value in the arguments array. the context
+ * is ignored but is accepted for congruity with ``Function.prototype.apply``.
+ * @ignore
+ */
+RegExp.prototype.apply = function (context, args) {
+ return this.exec(args[0]);
+};
+
+/**
+ * Accepts a pattern and flags; returns an XRegExp object. if the pattern
+ * and flag combination has previously been cached, the cached copy is
+ * returned, otherwise the new object is cached.
+ * @ignore
+ */
+XRegExp.cache = function (pattern, flags) {
+ var key = "/" + pattern + "/" + (flags || "");
+ return XRegExp.cache[key] || (XRegExp.cache[key] = new XRegExp(pattern, flags));
+};
+
+/**
+ * Accepts a string; returns the string with regex metacharacters escaped.
+ * the returned string can safely be used within a regex to match a literal
+ * string. escaped characters are [, ], {, }, (, ), -, *, +, ?, ., \, ^, $,
+ * |, #, [comma], and whitespace.
+ * @ignore
+ */
+XRegExp.escape = function (str) {
+ return str.replace(/[-[\]{}()*+?.\\^$|,#\s]/g, "\\$&");
+};
+
+/**
+ * Accepts a string to search, left and right delimiters as regex pattern
+ * strings, optional regex flags (may include non-native s, x, and y flags),
+ * and an options object which allows setting an escape character and changing
+ * the return format from an array of matches to a two-dimensional array of
+ * string parts with extended position data. returns an array of matches
+ * (optionally with extended data), allowing nested instances of left and right
+ * delimiters. use the g flag to return all matches, otherwise only the first
+ * is returned. if delimiters are unbalanced within the subject data, an error
+ * is thrown.
+ *
+ * This function admittedly pushes the boundaries of what can be accomplished
+ * sensibly without a "real" parser. however, by doing so it provides flexible
+ * and powerful recursive parsing capabilities with minimal code weight.
+ *
+ * Warning: the ``escapeChar`` option is considered experimental and might be
+ * changed or removed in future versions of XRegExp.
+ *
+ * unsupported features:
+ * - backreferences within delimiter patterns when using ``escapeChar``.
+ * - although providing delimiters as regex objects adds the minor feature of
+ * independent delimiter flags, it introduces other limitations and is only
+ * intended to be done by the ``XRegExp`` constructor (which can't call
+ * itself while building a regex).
+ *
+ * @ignore
+ */
+XRegExp.matchRecursive = function (str, left, right, flags, options) {
+ var options = options || {},
+ escapeChar = options.escapeChar,
+ vN = options.valueNames,
+ flags = flags || "",
+ global = flags.indexOf("g") > -1,
+ ignoreCase = flags.indexOf("i") > -1,
+ multiline = flags.indexOf("m") > -1,
+ sticky = flags.indexOf("y") > -1,
+ /* sticky mode has its own handling in this function, which means you
+ can use flag "y" even in browsers which don't support it natively */
+ flags = flags.replace(/y/g, ""),
+ left = left instanceof RegExp ? (left.global ? left : left.addFlags("g")) : new XRegExp(left, "g" + flags),
+ right = right instanceof RegExp ? (right.global ? right : right.addFlags("g")) : new XRegExp(right, "g" + flags),
+ output = [],
+ openTokens = 0,
+ delimStart = 0,
+ delimEnd = 0,
+ lastOuterEnd = 0,
+ outerStart, innerStart, leftMatch, rightMatch, escaped, esc;
+
+ if (escapeChar) {
+ if (escapeChar.length > 1) throw SyntaxError("can't supply more than one escape character");
+ if (multiline) throw TypeError("can't supply escape character when using the multiline flag");
+ escaped = XRegExp.escape(escapeChar);
+ /* Escape pattern modifiers:
+ /g - not needed here
+ /i - included
+ /m - **unsupported**, throws error
+ /s - handled by XRegExp when delimiters are provided as strings
+ /x - handled by XRegExp when delimiters are provided as strings
+ /y - not needed here; supported by other handling in this function
+ */
+ esc = new RegExp(
+ "^(?:" + escaped + "[\\S\\s]|(?:(?!" + left.source + "|" + right.source + ")[^" + escaped + "])+)+",
+ ignoreCase ? "i" : ""
+ );
+ }
+
+ while (true) {
+ /* advance the starting search position to the end of the last delimiter match.
+ a couple special cases are also covered:
+ - if using an escape character, advance to the next delimiter's starting position,
+ skipping any escaped characters
+ - first time through, reset lastIndex in case delimiters were provided as regexes
+ */
+ left.lastIndex = right.lastIndex = delimEnd +
+ (escapeChar ? (esc.exec(str.slice(delimEnd)) || [""])[0].length : 0);
+
+ leftMatch = left.exec(str);
+ rightMatch = right.exec(str);
+
+ // only keep the result which matched earlier in the string
+ if (leftMatch && rightMatch) {
+ if (leftMatch.index <= rightMatch.index)
+ rightMatch = null;
+ else leftMatch = null;
+ }
+
+ /* paths*:
+ leftMatch | rightMatch | openTokens | result
+ 1 | 0 | 1 | ...
+ 1 | 0 | 0 | ...
+ 0 | 1 | 1 | ...
+ 0 | 1 | 0 | throw
+ 0 | 0 | 1 | throw
+ 0 | 0 | 0 | break
+ * - does not include the sticky mode special case
+ - the loop ends after the first completed match if not in global mode
+ */
+
+ if (leftMatch || rightMatch) {
+ delimStart = (leftMatch || rightMatch).index;
+ delimEnd = (leftMatch ? left : right).lastIndex;
+ } else if (!openTokens) {
+ break;
+ }
+
+ if (sticky && !openTokens && delimStart > lastOuterEnd)
+ break;
+
+ if (leftMatch) {
+ if (!openTokens++) {
+ outerStart = delimStart;
+ innerStart = delimEnd;
+ }
+ } else if (rightMatch && openTokens) {
+ if (!--openTokens) {
+ if (vN) {
+ if (vN[0] && outerStart > lastOuterEnd)
+ output.push([vN[0], str.slice(lastOuterEnd, outerStart), lastOuterEnd, outerStart]);
+ if (vN[1]) output.push([vN[1], str.slice(outerStart, innerStart), outerStart, innerStart]);
+ if (vN[2]) output.push([vN[2], str.slice(innerStart, delimStart), innerStart, delimStart]);
+ if (vN[3]) output.push([vN[3], str.slice(delimStart, delimEnd), delimStart, delimEnd]);
+ } else {
+ output.push(str.slice(innerStart, delimStart));
+ }
+ lastOuterEnd = delimEnd;
+ if (!global)
+ break;
+ }
+ } else {
+ // reset lastIndex in case delimiters were provided as regexes
+ left.lastIndex = right.lastIndex = 0;
+ throw Error("subject data contains unbalanced delimiters");
+ }
+
+ // if the delimiter matched an empty string, advance delimEnd to avoid an infinite loop
+ if (delimStart === delimEnd)
+ delimEnd++;
+ }
+
+ if (global && !sticky && vN && vN[0] && str.length > lastOuterEnd)
+ output.push([vN[0], str.slice(lastOuterEnd), lastOuterEnd, str.length]);
+
+ // reset lastIndex in case delimiters were provided as regexes
+ left.lastIndex = right.lastIndex = 0;
+
+ return output;
+};
diff --git a/html/lib/syntaxhighlighter_2.1.364/src/shLegacy.js b/html/lib/syntaxhighlighter_2.1.364/src/shLegacy.js
index 491a79d..21490c4 100644
--- a/html/lib/syntaxhighlighter_2.1.364/src/shLegacy.js
+++ b/html/lib/syntaxhighlighter_2.1.364/src/shLegacy.js
@@ -1,32 +1,32 @@
-/**
- * SyntaxHighlighter
- * http://alexgorbatchev.com/
- *
- * SyntaxHighlighter is donationware. If you are using it, please donate.
- * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
- *
- * @version
- * 2.1.364 (October 15 2009)
- *
- * @copyright
- * Copyright (C) 2004-2009 Alex Gorbatchev.
- *
- * @license
- * This file is part of SyntaxHighlighter.
- *
- * SyntaxHighlighter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * SyntaxHighlighter is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with SyntaxHighlighter. If not, see .
- */
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
+ *
+ * @version
+ * 2.1.364 (October 15 2009)
+ *
+ * @copyright
+ * Copyright (C) 2004-2009 Alex Gorbatchev.
+ *
+ * @license
+ * This file is part of SyntaxHighlighter.
+ *
+ * SyntaxHighlighter is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SyntaxHighlighter is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SyntaxHighlighter. If not, see .
+ */
var dp = {
SyntaxHighlighter : {}
};
diff --git a/html/lib/syntaxhighlighter_2.1.364/styles/shCore.css b/html/lib/syntaxhighlighter_2.1.364/styles/shCore.css
index 415ab48..726a662 100644
--- a/html/lib/syntaxhighlighter_2.1.364/styles/shCore.css
+++ b/html/lib/syntaxhighlighter_2.1.364/styles/shCore.css
@@ -1,330 +1,330 @@
-/**
- * SyntaxHighlighter
- * http://alexgorbatchev.com/
- *
- * SyntaxHighlighter is donationware. If you are using it, please donate.
- * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
- *
- * @version
- * 2.1.364 (October 15 2009)
- *
- * @copyright
- * Copyright (C) 2004-2009 Alex Gorbatchev.
- *
- * @license
- * This file is part of SyntaxHighlighter.
- *
- * SyntaxHighlighter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * SyntaxHighlighter is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with SyntaxHighlighter. If not, see .
- */
-.syntaxhighlighter,
-.syntaxhighlighter div,
-.syntaxhighlighter code,
-.syntaxhighlighter table,
-.syntaxhighlighter table td,
-.syntaxhighlighter table tr,
-.syntaxhighlighter table tbody
-{
- margin: 0 !important;
- padding: 0 !important;
- border: 0 !important;
- outline: 0 !important;
- background: none !important;
- text-align: left !important;
- float: none !important;
- vertical-align: baseline !important;
- position: static !important;
- left: auto !important;
- top: auto !important;
- right: auto !important;
- bottom: auto !important;
- height: auto !important;
- width: auto !important;
- line-height: 1.1em !important;
- -font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
- font-weight: normal !important;
- font-style: normal !important;
- -font-size: 1em !important;
- min-height: inherit !important; /* For IE8, FF & WebKit */
- min-height: auto !important; /* For IE7 */
-}
-
-.syntaxhighlighter
-{
- width: 99% !important; /* 99% fixes IE8 horizontal scrollbar */
- margin: 0 !important;
- padding: 1px !important; /* adds a little border on top and bottom */
- position: relative !important;
-}
-
-.syntaxhighlighter .bold
-{
- font-weight: bold !important;
-}
-
-.syntaxhighlighter .italic
-{
- font-style: italic !important;
-}
-
-.syntaxhighlighter .line
-{
-}
-
-.syntaxhighlighter .no-wrap .line .content
-{
- white-space: pre !important;
-}
-
-.syntaxhighlighter .line table
-{
- border-collapse: collapse !important;
-}
-
-.syntaxhighlighter .line td
-{
- vertical-align: top !important;
-}
-
-.syntaxhighlighter .line .number
-{
- width: 3em !important;
-}
-
-.syntaxhighlighter .line .number code
-{
- width: 2.7em !important;
- padding-right: .3em !important;
- text-align: right !important;
- display: block !important;
-}
-
-.syntaxhighlighter .line .content
-{
- padding-left: .5em !important;
-}
-
-.syntaxhighlighter .line .spaces
-{
-}
-
-/* Disable border and margin on the lines when no gutter option is set */
-.syntaxhighlighter.nogutter .line .content
-{
- border-left: none !important;
-}
-
-.syntaxhighlighter .bar
-{
- display: none !important;
-}
-
-.syntaxhighlighter .bar.show
-{
- display: block !important;
-}
-
-.syntaxhighlighter.collapsed .bar
-{
- display: block !important;
-}
-
-/* Adjust some properties when collapsed */
-
-.syntaxhighlighter.collapsed .lines
-{
- display: none !important;
-}
-
-.syntaxhighlighter .lines.no-wrap
-{
- overflow: auto !important;
- overflow-y: hidden !important;
-}
-
-/* Styles for the toolbar */
-
-.syntaxhighlighter .toolbar
-{
- position: absolute !important;
- right: 0px !important;
- top: 0px !important;
- font-size: 1px !important;
- padding: 8px 8px 8px 0 !important; /* in px because images don't scale with ems */
-}
-
-.syntaxhighlighter.collapsed .toolbar
-{
- font-size: 80% !important;
- padding: .2em 0 .5em .5em !important;
- position: static !important;
-}
-
-.syntaxhighlighter .toolbar a.item,
-.syntaxhighlighter .toolbar .item
-{
- display: block !important;
- float: left !important;
- margin-left: 8px !important;
- background-repeat: no-repeat !important;
- overflow: hidden !important;
- text-indent: -5000px !important;
-}
-
-.syntaxhighlighter.collapsed .toolbar .item
-{
- display: none !important;
-}
-
-.syntaxhighlighter.collapsed .toolbar .item.expandSource
-{
- background-image: url(magnifier.png) !important;
- display: inline !important;
- text-indent: 0 !important;
- width: auto !important;
- float: none !important;
- height: 16px !important;
- padding-left: 20px !important;
-}
-
-.syntaxhighlighter .toolbar .item.viewSource
-{
- background-image: url(page_white_code.png) !important;
-}
-
-.syntaxhighlighter .toolbar .item.printSource
-{
- background-image: url(printer.png) !important;
-}
-
-.syntaxhighlighter .toolbar .item.copyToClipboard
-{
- text-indent: 0 !important;
- background: none !important;
- overflow: visible !important;
-}
-
-.syntaxhighlighter .toolbar .item.about
-{
- background-image: url(help.png) !important;
-}
-
-/**
- * Print view.
- * Colors are based on the default theme without background.
- */
-
-.syntaxhighlighter.printing,
-.syntaxhighlighter.printing .line.alt1 .content,
-.syntaxhighlighter.printing .line.alt2 .content,
-.syntaxhighlighter.printing .line.highlighted .number,
-.syntaxhighlighter.printing .line.highlighted.alt1 .content,
-.syntaxhighlighter.printing .line.highlighted.alt2 .content,
-{
- background: none !important;
-}
-
-/* Gutter line numbers */
-.syntaxhighlighter.printing .line .number
-{
- color: #bbb !important;
-}
-
-/* Add border to the lines */
-.syntaxhighlighter.printing .line .content
-{
- color: #000 !important;
-}
-
-/* Toolbar when visible */
-.syntaxhighlighter.printing .toolbar
-{
- display: none !important;
-}
-
-.syntaxhighlighter.printing a
-{
- text-decoration: none !important;
-}
-
-.syntaxhighlighter.printing .plain,
-.syntaxhighlighter.printing .plain a
-{
- color: #000 !important;
-}
-
-.syntaxhighlighter.printing .comments,
-.syntaxhighlighter.printing .comments a
-{
- color: #008200 !important;
-}
-
-.syntaxhighlighter.printing .string,
-.syntaxhighlighter.printing .string a
-{
- color: blue !important;
-}
-
-.syntaxhighlighter.printing .keyword
-{
- color: #069 !important;
- font-weight: bold !important;
-}
-
-.syntaxhighlighter.printing .preprocessor
-{
- color: gray !important;
-}
-
-.syntaxhighlighter.printing .variable
-{
- color: #a70 !important;
-}
-
-.syntaxhighlighter.printing .value
-{
- color: #090 !important;
-}
-
-.syntaxhighlighter.printing .functions
-{
- color: #ff1493 !important;
-}
-
-.syntaxhighlighter.printing .constants
-{
- color: #0066CC !important;
-}
-
-.syntaxhighlighter.printing .script
-{
- font-weight: bold !important;
-}
-
-.syntaxhighlighter.printing .color1,
-.syntaxhighlighter.printing .color1 a
-{
- color: #808080 !important;
-}
-
-.syntaxhighlighter.printing .color2,
-.syntaxhighlighter.printing .color2 a
-{
- color: #ff1493 !important;
-}
-
-.syntaxhighlighter.printing .color3,
-.syntaxhighlighter.printing .color3 a
-{
- color: red !important;
-}
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
+ *
+ * @version
+ * 2.1.364 (October 15 2009)
+ *
+ * @copyright
+ * Copyright (C) 2004-2009 Alex Gorbatchev.
+ *
+ * @license
+ * This file is part of SyntaxHighlighter.
+ *
+ * SyntaxHighlighter is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SyntaxHighlighter is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SyntaxHighlighter. If not, see .
+ */
+.syntaxhighlighter,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody
+{
+ margin: 0 !important;
+ padding: 0 !important;
+ border: 0 !important;
+ outline: 0 !important;
+ background: none !important;
+ text-align: left !important;
+ float: none !important;
+ vertical-align: baseline !important;
+ position: static !important;
+ left: auto !important;
+ top: auto !important;
+ right: auto !important;
+ bottom: auto !important;
+ height: auto !important;
+ width: auto !important;
+ line-height: 1.1em !important;
+ -font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ -font-size: 1em !important;
+ min-height: inherit !important; /* For IE8, FF & WebKit */
+ min-height: auto !important; /* For IE7 */
+}
+
+.syntaxhighlighter
+{
+ width: 99% !important; /* 99% fixes IE8 horizontal scrollbar */
+ margin: 0 !important;
+ padding: 1px !important; /* adds a little border on top and bottom */
+ position: relative !important;
+}
+
+.syntaxhighlighter .bold
+{
+ font-weight: bold !important;
+}
+
+.syntaxhighlighter .italic
+{
+ font-style: italic !important;
+}
+
+.syntaxhighlighter .line
+{
+}
+
+.syntaxhighlighter .no-wrap .line .content
+{
+ white-space: pre !important;
+}
+
+.syntaxhighlighter .line table
+{
+ border-collapse: collapse !important;
+}
+
+.syntaxhighlighter .line td
+{
+ vertical-align: top !important;
+}
+
+.syntaxhighlighter .line .number
+{
+ width: 3em !important;
+}
+
+.syntaxhighlighter .line .number code
+{
+ width: 2.7em !important;
+ padding-right: .3em !important;
+ text-align: right !important;
+ display: block !important;
+}
+
+.syntaxhighlighter .line .content
+{
+ padding-left: .5em !important;
+}
+
+.syntaxhighlighter .line .spaces
+{
+}
+
+/* Disable border and margin on the lines when no gutter option is set */
+.syntaxhighlighter.nogutter .line .content
+{
+ border-left: none !important;
+}
+
+.syntaxhighlighter .bar
+{
+ display: none !important;
+}
+
+.syntaxhighlighter .bar.show
+{
+ display: block !important;
+}
+
+.syntaxhighlighter.collapsed .bar
+{
+ display: block !important;
+}
+
+/* Adjust some properties when collapsed */
+
+.syntaxhighlighter.collapsed .lines
+{
+ display: none !important;
+}
+
+.syntaxhighlighter .lines.no-wrap
+{
+ overflow: auto !important;
+ overflow-y: hidden !important;
+}
+
+/* Styles for the toolbar */
+
+.syntaxhighlighter .toolbar
+{
+ position: absolute !important;
+ right: 0px !important;
+ top: 0px !important;
+ font-size: 1px !important;
+ padding: 8px 8px 8px 0 !important; /* in px because images don't scale with ems */
+}
+
+.syntaxhighlighter.collapsed .toolbar
+{
+ font-size: 80% !important;
+ padding: .2em 0 .5em .5em !important;
+ position: static !important;
+}
+
+.syntaxhighlighter .toolbar a.item,
+.syntaxhighlighter .toolbar .item
+{
+ display: block !important;
+ float: left !important;
+ margin-left: 8px !important;
+ background-repeat: no-repeat !important;
+ overflow: hidden !important;
+ text-indent: -5000px !important;
+}
+
+.syntaxhighlighter.collapsed .toolbar .item
+{
+ display: none !important;
+}
+
+.syntaxhighlighter.collapsed .toolbar .item.expandSource
+{
+ background-image: url(magnifier.png) !important;
+ display: inline !important;
+ text-indent: 0 !important;
+ width: auto !important;
+ float: none !important;
+ height: 16px !important;
+ padding-left: 20px !important;
+}
+
+.syntaxhighlighter .toolbar .item.viewSource
+{
+ background-image: url(page_white_code.png) !important;
+}
+
+.syntaxhighlighter .toolbar .item.printSource
+{
+ background-image: url(printer.png) !important;
+}
+
+.syntaxhighlighter .toolbar .item.copyToClipboard
+{
+ text-indent: 0 !important;
+ background: none !important;
+ overflow: visible !important;
+}
+
+.syntaxhighlighter .toolbar .item.about
+{
+ background-image: url(help.png) !important;
+}
+
+/**
+ * Print view.
+ * Colors are based on the default theme without background.
+ */
+
+.syntaxhighlighter.printing,
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content,
+{
+ background: none !important;
+}
+
+/* Gutter line numbers */
+.syntaxhighlighter.printing .line .number
+{
+ color: #bbb !important;
+}
+
+/* Add border to the lines */
+.syntaxhighlighter.printing .line .content
+{
+ color: #000 !important;
+}
+
+/* Toolbar when visible */
+.syntaxhighlighter.printing .toolbar
+{
+ display: none !important;
+}
+
+.syntaxhighlighter.printing a
+{
+ text-decoration: none !important;
+}
+
+.syntaxhighlighter.printing .plain,
+.syntaxhighlighter.printing .plain a
+{
+ color: #000 !important;
+}
+
+.syntaxhighlighter.printing .comments,
+.syntaxhighlighter.printing .comments a
+{
+ color: #008200 !important;
+}
+
+.syntaxhighlighter.printing .string,
+.syntaxhighlighter.printing .string a
+{
+ color: blue !important;
+}
+
+.syntaxhighlighter.printing .keyword
+{
+ color: #069 !important;
+ font-weight: bold !important;
+}
+
+.syntaxhighlighter.printing .preprocessor
+{
+ color: gray !important;
+}
+
+.syntaxhighlighter.printing .variable
+{
+ color: #a70 !important;
+}
+
+.syntaxhighlighter.printing .value
+{
+ color: #090 !important;
+}
+
+.syntaxhighlighter.printing .functions
+{
+ color: #ff1493 !important;
+}
+
+.syntaxhighlighter.printing .constants
+{
+ color: #0066CC !important;
+}
+
+.syntaxhighlighter.printing .script
+{
+ font-weight: bold !important;
+}
+
+.syntaxhighlighter.printing .color1,
+.syntaxhighlighter.printing .color1 a
+{
+ color: #808080 !important;
+}
+
+.syntaxhighlighter.printing .color2,
+.syntaxhighlighter.printing .color2 a
+{
+ color: #ff1493 !important;
+}
+
+.syntaxhighlighter.printing .color3,
+.syntaxhighlighter.printing .color3 a
+{
+ color: red !important;
+}
diff --git a/html/lib/syntaxhighlighter_2.1.364/styles/shThemeDefault.css b/html/lib/syntaxhighlighter_2.1.364/styles/shThemeDefault.css
index a57dd05..3fef10d 100644
--- a/html/lib/syntaxhighlighter_2.1.364/styles/shThemeDefault.css
+++ b/html/lib/syntaxhighlighter_2.1.364/styles/shThemeDefault.css
@@ -1,173 +1,173 @@
-/**
- * SyntaxHighlighter
- * http://alexgorbatchev.com/
- *
- * SyntaxHighlighter is donationware. If you are using it, please donate.
- * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
- *
- * @version
- * 2.1.364 (October 15 2009)
- *
- * @copyright
- * Copyright (C) 2004-2009 Alex Gorbatchev.
- *
- * @license
- * This file is part of SyntaxHighlighter.
- *
- * SyntaxHighlighter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * SyntaxHighlighter is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with SyntaxHighlighter. If not, see .
- */
-/************************************
- * Default Syntax Highlighter theme.
- *
- * Interface elements.
- ************************************/
-
-.syntaxhighlighter
-{
- background-color: #fff !important;
-}
-
-/* Highlighed line number */
-.syntaxhighlighter .line.highlighted .number
-{
- color: black !important;
-}
-
-/* Highlighed line */
-.syntaxhighlighter .line.highlighted.alt1,
-.syntaxhighlighter .line.highlighted.alt2
-{
- background-color: #e0e0e0 !important;
-}
-
-/* Gutter line numbers */
-.syntaxhighlighter .line .number
-{
- color: #afafaf !important;
-}
-
-/* Add border to the lines */
-.syntaxhighlighter .line .content
-{
- border-left: 3px solid #6CE26C !important;
- color: #000 !important;
-}
-
-.syntaxhighlighter.printing .line .content
-{
- border: 0 !important;
-}
-
-/* First line */
-.syntaxhighlighter .line.alt1
-{
- background-color: #fff !important;
-}
-
-/* Second line */
-.syntaxhighlighter .line.alt2
-{
- background-color: #F8F8F8 !important;
-}
-
-.syntaxhighlighter .toolbar
-{
- background-color: #F8F8F8 !important;
- border: #E7E5DC solid 1px !important;
-}
-
-.syntaxhighlighter .toolbar a
-{
- color: #a0a0a0 !important;
-}
-
-.syntaxhighlighter .toolbar a:hover
-{
- color: red !important;
-}
-
-/************************************
- * Actual syntax highlighter colors.
- ************************************/
-.syntaxhighlighter .plain,
-.syntaxhighlighter .plain a
-{
- color: #000 !important;
-}
-
-.syntaxhighlighter .comments,
-.syntaxhighlighter .comments a
-{
- color: #008200 !important;
-}
-
-.syntaxhighlighter .string,
-.syntaxhighlighter .string a
-{
- color: blue !important;
-}
-
-.syntaxhighlighter .keyword
-{
- color: #069 !important;
- font-weight: bold !important;
-}
-
-.syntaxhighlighter .preprocessor
-{
- color: gray !important;
-}
-
-.syntaxhighlighter .variable
-{
- color: #a70 !important;
-}
-
-.syntaxhighlighter .value
-{
- color: #090 !important;
-}
-
-.syntaxhighlighter .functions
-{
- color: #ff1493 !important;
-}
-
-.syntaxhighlighter .constants
-{
- color: #0066CC !important;
-}
-
-.syntaxhighlighter .script
-{
- background-color: yellow !important;
-}
-
-.syntaxhighlighter .color1,
-.syntaxhighlighter .color1 a
-{
- color: #808080 !important;
-}
-
-.syntaxhighlighter .color2,
-.syntaxhighlighter .color2 a
-{
- color: #ff1493 !important;
-}
-
-.syntaxhighlighter .color3,
-.syntaxhighlighter .color3 a
-{
- color: red !important;
-}
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
+ *
+ * @version
+ * 2.1.364 (October 15 2009)
+ *
+ * @copyright
+ * Copyright (C) 2004-2009 Alex Gorbatchev.
+ *
+ * @license
+ * This file is part of SyntaxHighlighter.
+ *
+ * SyntaxHighlighter is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SyntaxHighlighter is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SyntaxHighlighter. If not, see .
+ */
+/************************************
+ * Default Syntax Highlighter theme.
+ *
+ * Interface elements.
+ ************************************/
+
+.syntaxhighlighter
+{
+ background-color: #fff !important;
+}
+
+/* Highlighed line number */
+.syntaxhighlighter .line.highlighted .number
+{
+ color: black !important;
+}
+
+/* Highlighed line */
+.syntaxhighlighter .line.highlighted.alt1,
+.syntaxhighlighter .line.highlighted.alt2
+{
+ background-color: #e0e0e0 !important;
+}
+
+/* Gutter line numbers */
+.syntaxhighlighter .line .number
+{
+ color: #afafaf !important;
+}
+
+/* Add border to the lines */
+.syntaxhighlighter .line .content
+{
+ border-left: 3px solid #6CE26C !important;
+ color: #000 !important;
+}
+
+.syntaxhighlighter.printing .line .content
+{
+ border: 0 !important;
+}
+
+/* First line */
+.syntaxhighlighter .line.alt1
+{
+ background-color: #fff !important;
+}
+
+/* Second line */
+.syntaxhighlighter .line.alt2
+{
+ background-color: #F8F8F8 !important;
+}
+
+.syntaxhighlighter .toolbar
+{
+ background-color: #F8F8F8 !important;
+ border: #E7E5DC solid 1px !important;
+}
+
+.syntaxhighlighter .toolbar a
+{
+ color: #a0a0a0 !important;
+}
+
+.syntaxhighlighter .toolbar a:hover
+{
+ color: red !important;
+}
+
+/************************************
+ * Actual syntax highlighter colors.
+ ************************************/
+.syntaxhighlighter .plain,
+.syntaxhighlighter .plain a
+{
+ color: #000 !important;
+}
+
+.syntaxhighlighter .comments,
+.syntaxhighlighter .comments a
+{
+ color: #008200 !important;
+}
+
+.syntaxhighlighter .string,
+.syntaxhighlighter .string a
+{
+ color: blue !important;
+}
+
+.syntaxhighlighter .keyword
+{
+ color: #069 !important;
+ font-weight: bold !important;
+}
+
+.syntaxhighlighter .preprocessor
+{
+ color: gray !important;
+}
+
+.syntaxhighlighter .variable
+{
+ color: #a70 !important;
+}
+
+.syntaxhighlighter .value
+{
+ color: #090 !important;
+}
+
+.syntaxhighlighter .functions
+{
+ color: #ff1493 !important;
+}
+
+.syntaxhighlighter .constants
+{
+ color: #0066CC !important;
+}
+
+.syntaxhighlighter .script
+{
+ background-color: yellow !important;
+}
+
+.syntaxhighlighter .color1,
+.syntaxhighlighter .color1 a
+{
+ color: #808080 !important;
+}
+
+.syntaxhighlighter .color2,
+.syntaxhighlighter .color2 a
+{
+ color: #ff1493 !important;
+}
+
+.syntaxhighlighter .color3,
+.syntaxhighlighter .color3 a
+{
+ color: red !important;
+}
diff --git a/html/lib/syntaxhighlighter_2.1.364/styles/shThemeDjango.css b/html/lib/syntaxhighlighter_2.1.364/styles/shThemeDjango.css
index 4a6564c..80a8b41 100644
--- a/html/lib/syntaxhighlighter_2.1.364/styles/shThemeDjango.css
+++ b/html/lib/syntaxhighlighter_2.1.364/styles/shThemeDjango.css
@@ -1,32 +1,32 @@
-/**
- * SyntaxHighlighter
- * http://alexgorbatchev.com/
- *
- * SyntaxHighlighter is donationware. If you are using it, please donate.
- * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
- *
- * @version
- * 2.1.364 (October 15 2009)
- *
- * @copyright
- * Copyright (C) 2004-2009 Alex Gorbatchev.
- *
- * @license
- * This file is part of SyntaxHighlighter.
- *
- * SyntaxHighlighter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * SyntaxHighlighter is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with SyntaxHighlighter. If not, see .
- */
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
+ *
+ * @version
+ * 2.1.364 (October 15 2009)
+ *
+ * @copyright
+ * Copyright (C) 2004-2009 Alex Gorbatchev.
+ *
+ * @license
+ * This file is part of SyntaxHighlighter.
+ *
+ * SyntaxHighlighter is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SyntaxHighlighter is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SyntaxHighlighter. If not, see .
+ */
/**
* Django SyntaxHighlighter theme
*/
diff --git a/html/lib/syntaxhighlighter_2.1.364/styles/shThemeEclipse.css b/html/lib/syntaxhighlighter_2.1.364/styles/shThemeEclipse.css
index e0dc24a..b9cfba0 100644
--- a/html/lib/syntaxhighlighter_2.1.364/styles/shThemeEclipse.css
+++ b/html/lib/syntaxhighlighter_2.1.364/styles/shThemeEclipse.css
@@ -1,32 +1,32 @@
-/**
- * SyntaxHighlighter
- * http://alexgorbatchev.com/
- *
- * SyntaxHighlighter is donationware. If you are using it, please donate.
- * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
- *
- * @version
- * 2.1.364 (October 15 2009)
- *
- * @copyright
- * Copyright (C) 2004-2009 Alex Gorbatchev.
- *
- * @license
- * This file is part of SyntaxHighlighter.
- *
- * SyntaxHighlighter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * SyntaxHighlighter is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with SyntaxHighlighter. If not, see .
- */
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
+ *
+ * @version
+ * 2.1.364 (October 15 2009)
+ *
+ * @copyright
+ * Copyright (C) 2004-2009 Alex Gorbatchev.
+ *
+ * @license
+ * This file is part of SyntaxHighlighter.
+ *
+ * SyntaxHighlighter is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SyntaxHighlighter is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SyntaxHighlighter. If not, see .
+ */
/**
* Eclipse IDE SyntaxHighlighter color theme
* (C) Code-House
diff --git a/html/lib/syntaxhighlighter_2.1.364/styles/shThemeEmacs.css b/html/lib/syntaxhighlighter_2.1.364/styles/shThemeEmacs.css
index 030fbc3..ee940c9 100644
--- a/html/lib/syntaxhighlighter_2.1.364/styles/shThemeEmacs.css
+++ b/html/lib/syntaxhighlighter_2.1.364/styles/shThemeEmacs.css
@@ -1,32 +1,32 @@
-/**
- * SyntaxHighlighter
- * http://alexgorbatchev.com/
- *
- * SyntaxHighlighter is donationware. If you are using it, please donate.
- * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
- *
- * @version
- * 2.1.364 (October 15 2009)
- *
- * @copyright
- * Copyright (C) 2004-2009 Alex Gorbatchev.
- *
- * @license
- * This file is part of SyntaxHighlighter.
- *
- * SyntaxHighlighter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * SyntaxHighlighter is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with SyntaxHighlighter. If not, see .
- */
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
+ *
+ * @version
+ * 2.1.364 (October 15 2009)
+ *
+ * @copyright
+ * Copyright (C) 2004-2009 Alex Gorbatchev.
+ *
+ * @license
+ * This file is part of SyntaxHighlighter.
+ *
+ * SyntaxHighlighter is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SyntaxHighlighter is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SyntaxHighlighter. If not, see .
+ */
/**
* Emacs SyntaxHighlighter theme based on theme by Joshua Emmons
* http://www.skia.net/
diff --git a/html/lib/syntaxhighlighter_2.1.364/styles/shThemeFadeToGrey.css b/html/lib/syntaxhighlighter_2.1.364/styles/shThemeFadeToGrey.css
index 9c0bb75..879b474 100644
--- a/html/lib/syntaxhighlighter_2.1.364/styles/shThemeFadeToGrey.css
+++ b/html/lib/syntaxhighlighter_2.1.364/styles/shThemeFadeToGrey.css
@@ -1,32 +1,32 @@
-/**
- * SyntaxHighlighter
- * http://alexgorbatchev.com/
- *
- * SyntaxHighlighter is donationware. If you are using it, please donate.
- * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
- *
- * @version
- * 2.1.364 (October 15 2009)
- *
- * @copyright
- * Copyright (C) 2004-2009 Alex Gorbatchev.
- *
- * @license
- * This file is part of SyntaxHighlighter.
- *
- * SyntaxHighlighter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * SyntaxHighlighter is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with SyntaxHighlighter. If not, see .
- */
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
+ *
+ * @version
+ * 2.1.364 (October 15 2009)
+ *
+ * @copyright
+ * Copyright (C) 2004-2009 Alex Gorbatchev.
+ *
+ * @license
+ * This file is part of SyntaxHighlighter.
+ *
+ * SyntaxHighlighter is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SyntaxHighlighter is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SyntaxHighlighter. If not, see .
+ */
/**
* Fade to Grey SyntaxHighlighter theme based on theme by Brasten Sager
* http://www.ibrasten.com/
diff --git a/html/lib/syntaxhighlighter_2.1.364/styles/shThemeMidnight.css b/html/lib/syntaxhighlighter_2.1.364/styles/shThemeMidnight.css
index 4039464..faf6185 100644
--- a/html/lib/syntaxhighlighter_2.1.364/styles/shThemeMidnight.css
+++ b/html/lib/syntaxhighlighter_2.1.364/styles/shThemeMidnight.css
@@ -1,32 +1,32 @@
-/**
- * SyntaxHighlighter
- * http://alexgorbatchev.com/
- *
- * SyntaxHighlighter is donationware. If you are using it, please donate.
- * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
- *
- * @version
- * 2.1.364 (October 15 2009)
- *
- * @copyright
- * Copyright (C) 2004-2009 Alex Gorbatchev.
- *
- * @license
- * This file is part of SyntaxHighlighter.
- *
- * SyntaxHighlighter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * SyntaxHighlighter is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with SyntaxHighlighter. If not, see .
- */
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
+ *
+ * @version
+ * 2.1.364 (October 15 2009)
+ *
+ * @copyright
+ * Copyright (C) 2004-2009 Alex Gorbatchev.
+ *
+ * @license
+ * This file is part of SyntaxHighlighter.
+ *
+ * SyntaxHighlighter is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SyntaxHighlighter is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SyntaxHighlighter. If not, see .
+ */
/**
* Midnight SyntaxHighlighter theme based on theme by J.D. Myers
* http://webdesign.lsnjd.com/
diff --git a/html/lib/syntaxhighlighter_2.1.364/styles/shThemeRDark.css b/html/lib/syntaxhighlighter_2.1.364/styles/shThemeRDark.css
index 972aa5e..e87cdc1 100644
--- a/html/lib/syntaxhighlighter_2.1.364/styles/shThemeRDark.css
+++ b/html/lib/syntaxhighlighter_2.1.364/styles/shThemeRDark.css
@@ -1,32 +1,32 @@
-/**
- * SyntaxHighlighter
- * http://alexgorbatchev.com/
- *
- * SyntaxHighlighter is donationware. If you are using it, please donate.
- * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
- *
- * @version
- * 2.1.364 (October 15 2009)
- *
- * @copyright
- * Copyright (C) 2004-2009 Alex Gorbatchev.
- *
- * @license
- * This file is part of SyntaxHighlighter.
- *
- * SyntaxHighlighter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * SyntaxHighlighter is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with SyntaxHighlighter. If not, see .
- */
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
+ *
+ * @version
+ * 2.1.364 (October 15 2009)
+ *
+ * @copyright
+ * Copyright (C) 2004-2009 Alex Gorbatchev.
+ *
+ * @license
+ * This file is part of SyntaxHighlighter.
+ *
+ * SyntaxHighlighter is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SyntaxHighlighter is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SyntaxHighlighter. If not, see .
+ */
/**
* RDark SyntaxHighlighter theme based on theme by Radu Dineiu
* http://www.vim.org/scripts/script.php?script_id=1732
diff --git a/html/lib/syntaxhighlighter_2.1.364/test.html b/html/lib/syntaxhighlighter_2.1.364/test.html
index 5a208ae..7bf236a 100644
--- a/html/lib/syntaxhighlighter_2.1.364/test.html
+++ b/html/lib/syntaxhighlighter_2.1.364/test.html
@@ -1,42 +1,42 @@
-
-
-
-
- SyntaxHighlighter Build Test Page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-SyntaxHihglighter Test
-This is a test file to insure that everything is working well.
-
-
-function test() : String
-{
- return 10;
-}
-
-
+
+
+
+
+ SyntaxHighlighter Build Test Page
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+SyntaxHihglighter Test
+This is a test file to insure that everything is working well.
+
+
+function test() : String
+{
+ return 10;
+}
+
+