Project

General

Profile

Download (1.79 KB) Statistics
| Branch: | Tag: | Revision:
1
dp.sh.Brushes.Xml = function()
2
{
3
	this.CssClass = 'dp-xml';
4
}
5

    
6
dp.sh.Brushes.Xml.prototype	= new dp.sh.Highlighter();
7
dp.sh.Brushes.Xml.Aliases	= ['xml', 'xhtml', 'xslt', 'html', 'xhtml'];
8

    
9
dp.sh.Brushes.Xml.prototype.ProcessRegexList = function()
10
{
11
	function push(array, value)
12
	{
13
		array[array.length] = value;
14
	}
15
	
16
	/* If only there was a way to get index of a group within a match, the whole XML
17
	   could be matched with the expression looking something like that:
18
	
19
	   (<!\[CDATA\[\s*.*\s*\]\]>)
20
	   | (<!--\s*.*\s*?-->)
21
	   | (<)*(\w+)*\s*(\w+)\s*=\s*(".*?"|'.*?'|\w+)(/*>)*
22
	   | (</?)(.*?)(/?>)
23
	*/
24
	var index	= 0;
25
	var match	= null;
26
	var regex	= null;
27

    
28
	// Match CDATA in the following format <![ ... [ ... ]]>
29
	// <\!\[[\w\s]*?\[(.|\s)*?\]\]>
30
	this.GetMatches(new RegExp('<\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\]>', 'gm'), 'cdata');
31
	
32
	// Match comments
33
	// <!--\s*.*\s*?-->
34
	this.GetMatches(new RegExp('<!--\\s*.*\\s*?-->', 'gm'), 'comments');
35

    
36
	// Match attributes and their values
37
	// (\w+)\s*=\s*(".*?"|\'.*?\'|\w+)*
38
	regex = new RegExp('([\\w-\.]+)\\s*=\\s*(".*?"|\'.*?\'|\\w+)*', 'gm');
39
	while((match = regex.exec(this.code)) != null)
40
	{
41
		push(this.matches, new dp.sh.Match(match[1], match.index, 'attribute'));
42
	
43
		// if xml is invalid and attribute has no property value, ignore it	
44
		if(match[2] != undefined)
45
		{
46
			push(this.matches, new dp.sh.Match(match[2], match.index + match[0].indexOf(match[2]), 'attribute-value'));
47
		}
48
	}
49

    
50
	// Match opening and closing tag brackets
51
	// </*\?*(?!\!)|/*\?*>
52
	this.GetMatches(new RegExp('</*\\?*(?!\\!)|/*\\?*>', 'gm'), 'tag');
53

    
54
	// Match tag names
55
	// </*\?*\s*(\w+)
56
	regex = new RegExp('</*\\?*\\s*([\\w-\.]+)', 'gm');
57
	while((match = regex.exec(this.code)) != null)
58
	{
59
		push(this.matches, new dp.sh.Match(match[1], match.index + match[0].indexOf(match[1]), 'tag-name'));
60
	}
61
}
(14-14/16)