/* shBrushCSharp.js */ dp.sh.Brushes.CSharp = function() { var keywords = 'abstract as base bool break byte case catch char checked class const ' + 'continue decimal default delegate do double else enum event explicit ' + 'extern false finally fixed float for foreach get goto if implicit in int ' + 'interface internal is lock long namespace new null object operator out ' + 'override params private protected public readonly ref return sbyte sealed set ' + 'short sizeof stackalloc static string struct switch this throw true try ' + 'typeof uint ulong unchecked unsafe ushort using virtual void while'; this.regexList = [ // There's a slight problem with matching single line comments and figuring out // a difference between // and ///. Using lookahead and lookbehind solves the // problem, unfortunately JavaScript doesn't support lookbehind. So I'm at a // loss how to translate that regular expression to JavaScript compatible one. // { regex: new RegExp('(?) | () | (<)*(\w+)*\s*(\w+)\s*=\s*(".*?"|'.*?'|\w+)(/*>)* | () */ var index = 0; var match = null; var regex = null; // DOCTYPE // this.GetMatches(new RegExp('<\\!DOCTYPE.*?>', 'gm'), 'doctype'); // Match CDATA in the following format // <\!\[[\w\s]*?\[(.|\s)*?\]\]> this.GetMatches(new RegExp('<\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\]>', 'gm'), 'cdata'); // Match comments // this.GetMatches(new RegExp('', 'gm'), 'comment'); // Match attributes and their values // (\w+)\s*=\s*(".*?"|\'.*?\'|\w+)* regex = new RegExp('([\\w-\.]+)\\s*=\\s*(".*?"|\'.*?\'|\\w+)*', 'gm'); while((match = regex.exec(this.code)) != null) { if(this.validAttributes[match[1].toLowerCase()]) { var css = 'attribute'; } else { var css = 'invalid-attribute'; } push(this.matches, new dp.sh.Match(match[1], match.index, css)); // if xml is invalid and attribute has no property value, ignore it if(match[2] != undefined) { push(this.matches, new dp.sh.Match(match[2], match.index + match[0].indexOf(match[2]), 'attribute-value')); } } // Match opening and closing tag brackets // this.GetMatches(new RegExp('', 'gm'), 'tag'); // Match tag names // ) | () | (<)*(\w+)*\s*(\w+)\s*=\s*(".*?"|'.*?'|\w+)(/*>)* | () */ var index = 0; var match = null; var regex = null; // Match CDATA in the following format // <\!\[[\w\s]*?\[(.|\s)*?\]\]> this.GetMatches(new RegExp('<\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\]>', 'gm'), 'cdata'); // Match comments // this.GetMatches(new RegExp('', 'gm'), 'comment'); // Match attributes and their values // (\w+)\s*=\s*(".*?"|\'.*?\'|\w+)* regex = new RegExp('([\\w-\.]+)\\s*=\\s*(".*?"|\'.*?\'|\\w+)*', 'gm'); while((match = regex.exec(this.code)) != null) { push(this.matches, new dp.sh.Match(match[1], match.index, 'attribute')); // if xml is invalid and attribute has no property value, ignore it if(match[2] != undefined) { push(this.matches, new dp.sh.Match(match[2], match.index + match[0].indexOf(match[2]), 'attribute-value')); } } // Match opening and closing tag brackets // this.GetMatches(new RegExp('', 'gm'), 'tag'); // Match tag names //