From 2c67fb76509a31263761609abd9bcb2570874aec Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Mon, 10 Jan 2011 11:36:21 +0000 Subject: [PATCH] ENHANCEMENT Added custom "SS" brush for syntax highlighting (needs work) --- code/DocumentationViewer.php | 2 + javascript/shBrushSS.js | 76 ++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 javascript/shBrushSS.js diff --git a/code/DocumentationViewer.php b/code/DocumentationViewer.php index 43fb986..4bc0141 100755 --- a/code/DocumentationViewer.php +++ b/code/DocumentationViewer.php @@ -65,6 +65,7 @@ class DocumentationViewer extends Controller { Requirements::javascript('sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushJScript.js'); Requirements::javascript('sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushPHP.js'); Requirements::javascript('sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushXML.js'); + Requirements::javascript('sapphiredocs/javascript/shBrushSS.js'); Requirements::combine_files( 'syntaxhighlighter.js', array( @@ -72,6 +73,7 @@ class DocumentationViewer extends Controller { 'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushJScript.js', 'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushPHP.js', 'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushXML.js' + 'sapphiredocs/javascript/shBrushSS.js' ) ); diff --git a/javascript/shBrushSS.js b/javascript/shBrushSS.js new file mode 100644 index 0000000..b892373 --- /dev/null +++ b/javascript/shBrushSS.js @@ -0,0 +1,76 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + * + * Modified from shBrushXML.js by SilverStripe Ltd. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = "control if end_if else elseif end_control"; + + function process(match, regexInfo) + { + var constructor = SyntaxHighlighter.Match, + code = match[0], + tag = new XRegExp('(<|<)[\\s\\/\\?]*(?[:\\w-\\.]+)', 'xg').exec(code), + result = [] + ; + + if (match.attributes != null) + { + var attributes, + regex = new XRegExp('(? [\\w:\\-\\.]+)' + + '\\s*=\\s*' + + '(? ".*?"|\'.*?\'|\\w+)', + 'xg'); + + while ((attributes = regex.exec(code)) != null) + { + result.push(new constructor(attributes.name, match.index + attributes.index, 'color1')); + result.push(new constructor(attributes.value, match.index + attributes.index + attributes[0].indexOf(attributes.value), 'string')); + } + } + + if (tag != null) + result.push( + new constructor(tag.name, match.index + tag[0].indexOf(tag.name), 'keyword') + ); + + return result; + } + + this.regexList = [ + { regex: new XRegExp('(\\<|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\\>|>)', 'gm'), css: 'color2' }, // + { regex: SyntaxHighlighter.regexLib.xmlComments, css: 'comments' }, // + { regex: /(<|<)%--[\s\S]*?--%(>|>)/gm, css: 'comments' }, // <%-- ... --%> + { regex: /\$[\w]*/gm, css: 'color2' }, // $Var + { regex: new XRegExp('(<|<)[\\s\\/\\?]*(\\w+)(?.*?)[\\s\\/\\?]*(>|>)', 'sg'), func: process }, + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // keywords + ]; + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['ss', 'silverstripe']; + + SyntaxHighlighter.brushes.SS = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})();