62 lines
1.8 KiB
JavaScript
Executable File
62 lines
1.8 KiB
JavaScript
Executable File
dp.sh.Brushes.Xml = function()
|
|
{
|
|
this.CssClass = 'dp-xml';
|
|
}
|
|
|
|
dp.sh.Brushes.Xml.prototype = new dp.sh.Highlighter();
|
|
dp.sh.Brushes.Xml.Aliases = ['xml', 'xhtml', 'xslt', 'html', 'xhtml'];
|
|
|
|
dp.sh.Brushes.Xml.prototype.ProcessRegexList = function()
|
|
{
|
|
function push(array, value)
|
|
{
|
|
array[array.length] = value;
|
|
}
|
|
|
|
/* If only there was a way to get index of a group within a match, the whole XML
|
|
could be matched with the expression looking something like that:
|
|
|
|
(<!\[CDATA\[\s*.*\s*\]\]>)
|
|
| (<!--\s*.*\s*?-->)
|
|
| (<)*(\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
|
|
// <!--\s*.*\s*?-->
|
|
this.GetMatches(new RegExp('<!--\\s*.*\\s*?-->', 'gm'), 'comments');
|
|
|
|
// 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
|
|
// </*\?*\s*(\w+)
|
|
regex = new RegExp('</*\\?*\\s*([\\w-\.]+)', 'gm');
|
|
while((match = regex.exec(this.code)) != null)
|
|
{
|
|
push(this.matches, new dp.sh.Match(match[1], match.index + match[0].indexOf(match[1]), 'tag-name'));
|
|
}
|
|
}
|