File Coverage

blib/lib/Syntax/Highlight/Engine/Kate/Xslt.pm
Criterion Covered Total %
statement 68 173 39.3
branch 30 120 25.0
condition 1 3 33.3
subroutine 11 19 57.8
pod 0 16 0.0
total 110 331 33.2


line stmt bran cond sub pod time code
1             # Copyright (c) 2005 - 2006 Hans Jeuken. All rights reserved.
2             # This program is free software; you can redistribute it and/or
3             # modify it under the same terms as Perl itself.
4              
5             # This file was generated from the 'xslt.xml' file of the syntax highlight
6             # engine of the kate text editor (http://www.kate-editor.org
7              
8             #kate xml version 1.03
9             #kate version 2.1
10             #kate author Peter Lammich (views@gmx.de)
11             #generated: Sun Feb 3 22:02:06 2008, localtime
12              
13             package Syntax::Highlight::Engine::Kate::Xslt;
14              
15             our $VERSION = '0.12';
16              
17 1     1   637 use strict;
  1         2  
  1         31  
18 1     1   6 use warnings;
  1         2  
  1         32  
19 1     1   5 use base('Syntax::Highlight::Engine::Kate::Template');
  1         2  
  1         1719  
20              
21             sub new {
22 2     2 0 914 my $proto = shift;
23 2   33     13 my $class = ref($proto) || $proto;
24 2         15 my $self = $class->SUPER::new(@_);
25 2         32 $self->attributes({
26             'Alert' => 'Alert',
27             'Attribute' => 'Others',
28             'Attribute Value' => 'BaseN',
29             'Comment' => 'Comment',
30             'Entity Reference' => 'Char',
31             'Invalid' => 'Error',
32             'Normal Text' => 'Normal',
33             'Tag' => 'Keyword',
34             'Variable' => 'Variable',
35             'XPath' => 'Others',
36             'XPath 2.0/ XSLT 2.0 Function' => 'Operator',
37             'XPath Attribute' => 'Float',
38             'XPath Axis' => 'DecVal',
39             'XPath String' => 'BaseN',
40             'XPath/ XSLT Function' => 'Function',
41             'XSLT 2.0 Tag' => 'Reserved',
42             'XSLT Tag' => 'Reserved',
43             });
44 2         11 $self->listAdd('functions',
45             'boolean',
46             'ceiling',
47             'concat',
48             'contains',
49             'count',
50             'current',
51             'document',
52             'element-available',
53             'false',
54             'floor',
55             'format-number',
56             'function-available',
57             'generate-id',
58             'id',
59             'key',
60             'lang',
61             'last',
62             'local-name',
63             'name',
64             'namespace-uri',
65             'normalize-space',
66             'not',
67             'number',
68             'position',
69             'round',
70             'starts-with',
71             'string',
72             'string-length',
73             'substring',
74             'substring-after',
75             'substring-before',
76             'sum',
77             'system-property',
78             'text',
79             'translate',
80             'true',
81             'unparsed-entity-uri',
82             );
83 2         10 $self->listAdd('functions_2.0',
84             'QName',
85             'abs',
86             'adjust-date-to-timezone',
87             'adjust-dateTime-to-timezone',
88             'adjust-time-to-timezone',
89             'avg',
90             'base-uri',
91             'codepoints-to-string',
92             'collection',
93             'compare',
94             'current-date',
95             'current-dateTime',
96             'current-group',
97             'current-grouping-key',
98             'current-time',
99             'data',
100             'dateTime',
101             'day-from-date',
102             'day-from-dateTime',
103             'days-from-duration',
104             'deep-equal',
105             'default-collation',
106             'distinct-values',
107             'doc',
108             'document-uri',
109             'empty',
110             'ends-with',
111             'error',
112             'escape-uri',
113             'exactly-one',
114             'exists',
115             'expanded-QName',
116             'format-date',
117             'format-dateTime',
118             'format-time',
119             'hours-from-dateTime',
120             'hours-from-duration',
121             'hours-from-time',
122             'idref',
123             'implicit-timezone',
124             'in-scope-prefixes',
125             'index-of',
126             'input',
127             'insert-before',
128             'local-name-from-QName',
129             'lower-case',
130             'matches',
131             'max',
132             'min',
133             'minutes-from-dateTime',
134             'minutes-from-duration',
135             'minutes-from-time',
136             'month-from-date',
137             'month-from-dateTime',
138             'months-from-duration',
139             'namespace-uri-for-prefix',
140             'namespace-uri-from-QName',
141             'node-kind',
142             'node-name',
143             'normalize-unicode',
144             'one-or-more',
145             'regex-group',
146             'remove',
147             'replace',
148             'resolve-QName',
149             'resolve-uri',
150             'reverse',
151             'root',
152             'round-half-to-even',
153             'seconds-from-dateTime',
154             'seconds-from-duration',
155             'seconds-from-time',
156             'sequence-node-identical',
157             'static-base-uri',
158             'string-join',
159             'string-to-codepoints',
160             'subsequence',
161             'subtract-dateTimes-yielding-dayTimeDuration',
162             'subtract-dateTimes-yielding-yearMonthDuration',
163             'subtract-dates-yielding-dayTimeDuration',
164             'subtract-dates-yielding-yearMonthDuration',
165             'timezone-from-date',
166             'timezone-from-dateTime',
167             'timezone-from-time',
168             'tokenize',
169             'trace',
170             'unordered',
171             'unparsed-entity-public-id',
172             'unparsed-text',
173             'upper-case',
174             'year-from-date',
175             'year-from-dateTime',
176             'years-from-duration',
177             'zero-or-one',
178             );
179 2         7 $self->listAdd('keytags',
180             'xsl:apply-imports',
181             'xsl:apply-templates',
182             'xsl:attribute',
183             'xsl:attribute-set',
184             'xsl:call-template',
185             'xsl:choose',
186             'xsl:comment',
187             'xsl:copy',
188             'xsl:copy-of',
189             'xsl:decimal-format',
190             'xsl:element',
191             'xsl:fallback',
192             'xsl:for-each',
193             'xsl:if',
194             'xsl:import',
195             'xsl:include',
196             'xsl:key',
197             'xsl:message',
198             'xsl:namespace-alias',
199             'xsl:number',
200             'xsl:otherwise',
201             'xsl:output',
202             'xsl:param',
203             'xsl:preserve-space',
204             'xsl:processing-instruction',
205             'xsl:sort',
206             'xsl:strip-space',
207             'xsl:stylesheet',
208             'xsl:template',
209             'xsl:text',
210             'xsl:transform',
211             'xsl:value-of',
212             'xsl:variable',
213             'xsl:when',
214             'xsl:with-param',
215             );
216 2         8 $self->listAdd('keytags_2.0',
217             'xsl:analyze-string',
218             'xsl:character-map',
219             'xsl:document',
220             'xsl:for-each-group',
221             'xsl:function',
222             'xsl:import-schema',
223             'xsl:matching-substring',
224             'xsl:namespace',
225             'xsl:next-match',
226             'xsl:non-matching-substring',
227             'xsl:output-character',
228             'xsl:perform-sort',
229             'xsl:result-document',
230             'xsl:sequence',
231             );
232 2         50 $self->contextdata({
233             'attrValue' => {
234             callback => \&parseattrValue,
235             attribute => 'Invalid',
236             },
237             'attributes' => {
238             callback => \&parseattributes,
239             attribute => 'Attribute',
240             },
241             'comment' => {
242             callback => \&parsecomment,
243             attribute => 'Comment',
244             },
245             'detectEntRef' => {
246             callback => \&parsedetectEntRef,
247             attribute => 'Normal Text',
248             },
249             'normalText' => {
250             callback => \&parsenormalText,
251             attribute => 'Normal Text',
252             },
253             'sqstring' => {
254             callback => \&parsesqstring,
255             attribute => 'Attribute Value',
256             },
257             'sqxpath' => {
258             callback => \&parsesqxpath,
259             attribute => 'XPath',
260             },
261             'sqxpathstring' => {
262             callback => \&parsesqxpathstring,
263             attribute => 'XPath String',
264             },
265             'string' => {
266             callback => \&parsestring,
267             attribute => 'Attribute Value',
268             },
269             'tagname' => {
270             callback => \&parsetagname,
271             attribute => 'Tag',
272             },
273             'xattrValue' => {
274             callback => \&parsexattrValue,
275             attribute => 'Invalid',
276             },
277             'xattributes' => {
278             callback => \&parsexattributes,
279             attribute => 'Attribute',
280             },
281             'xpath' => {
282             callback => \&parsexpath,
283             attribute => 'XPath',
284             },
285             'xpathstring' => {
286             callback => \&parsexpathstring,
287             attribute => 'XPath String',
288             },
289             });
290 2         11 $self->deliminators('\\s||\\.|\\(|\\)|\\!|\\+|,|<|=|>|\\%|\\&|\\*|\\/|;|\\?|\\[|\\]|\\^|\\{|\\||\\}|\\~|\\\\|-|:');
291 2         11 $self->basecontext('normalText');
292 2         17 $self->keywordscase(0);
293 2         10 $self->initialize;
294 2         7 bless ($self, $class);
295 2         15 return $self;
296             }
297              
298             sub language {
299 0     0 0 0 return 'xslt';
300             }
301              
302             sub parseattrValue {
303 100     100 0 261 my ($self, $text) = @_;
304             # attribute => 'Invalid'
305             # char => '/'
306             # char1 => '>'
307             # context => '#pop#pop#pop'
308             # type => 'Detect2Chars'
309 100 50       416 if ($self->testDetect2Chars($text, '/', '>', 0, 0, 0, undef, 0, '#pop#pop#pop', 'Invalid')) {
310 0         0 return 1
311             }
312             # attribute => 'Invalid'
313             # char => '>'
314             # context => '#pop#pop#pop'
315             # type => 'DetectChar'
316 100 50       439 if ($self->testDetectChar($text, '>', 0, 0, 0, undef, 0, '#pop#pop#pop', 'Invalid')) {
317 0         0 return 1
318             }
319             # attribute => 'Attribute Value'
320             # char => '"'
321             # context => 'string'
322             # type => 'DetectChar'
323 100 50       464 if ($self->testDetectChar($text, '"', 0, 0, 0, undef, 0, 'string', 'Attribute Value')) {
324 100         259 return 1
325             }
326             # attribute => 'Attribute Value'
327             # char => '''
328             # context => 'sqstring'
329             # type => 'DetectChar'
330 0 0       0 if ($self->testDetectChar($text, '\'', 0, 0, 0, undef, 0, 'sqstring', 'Attribute Value')) {
331 0         0 return 1
332             }
333 0         0 return 0;
334             };
335              
336             sub parseattributes {
337 774     774 0 1677 my ($self, $text) = @_;
338             # attribute => 'Tag'
339             # char => '/'
340             # char1 => '>'
341             # context => '#pop#pop'
342             # type => 'Detect2Chars'
343 774 100       2316 if ($self->testDetect2Chars($text, '/', '>', 0, 0, 0, undef, 0, '#pop#pop', 'Tag')) {
344 38         152 return 1
345             }
346             # attribute => 'Tag'
347             # char => '>'
348             # context => '#pop#pop'
349             # type => 'DetectChar'
350 736 100       2193 if ($self->testDetectChar($text, '>', 0, 0, 0, undef, 0, '#pop#pop', 'Tag')) {
351 36         111 return 1
352             }
353             # String => '\s*=\s*'
354             # attribute => 'Normal Text'
355             # context => 'attrValue'
356             # type => 'RegExpr'
357 700 100       2118 if ($self->testRegExpr($text, '\\s*=\\s*', 0, 0, 0, undef, 0, 'attrValue', 'Normal Text')) {
358 100         300 return 1
359             }
360 600         1454 return 0;
361             };
362              
363             sub parsecomment {
364 710     710 0 1297 my ($self, $text) = @_;
365             # String => '-->'
366             # attribute => 'Comment'
367             # context => '#pop'
368             # endRegion => 'comment'
369             # type => 'StringDetect'
370 710 100       2032 if ($self->testStringDetect($text, '-->', 0, 0, 0, undef, 0, '#pop', 'Comment')) {
371 10         34 return 1
372             }
373             # String => '-(-(?!->))+'
374             # attribute => 'Invalid'
375             # context => '#stay'
376             # type => 'RegExpr'
377 700 50       1931 if ($self->testRegExpr($text, '-(-(?!->))+', 0, 0, 0, undef, 0, '#stay', 'Invalid')) {
378 0         0 return 1
379             }
380             # String => '(FIXME|TODO|HACK)'
381             # attribute => 'Alert'
382             # context => '#stay'
383             # type => 'RegExpr'
384 700 100       1984 if ($self->testRegExpr($text, '(FIXME|TODO|HACK)', 0, 0, 0, undef, 0, '#stay', 'Alert')) {
385 2         9 return 1
386             }
387 698         1698 return 0;
388             };
389              
390             sub parsedetectEntRef {
391 1860     1860 0 3140 my ($self, $text) = @_;
392             # String => '&(#[0-9]+|#[xX][0-9A-Fa-f]+|[A-Za-z_:][\w.:_-]*);'
393             # attribute => 'Entity Reference'
394             # context => '#stay'
395             # type => 'RegExpr'
396 1860 50       5035 if ($self->testRegExpr($text, '&(#[0-9]+|#[xX][0-9A-Fa-f]+|[A-Za-z_:][\\w.:_-]*);', 0, 0, 0, undef, 0, '#stay', 'Entity Reference')) {
397 0         0 return 1
398             }
399 1860         5287 return 0;
400             };
401              
402             sub parsenormalText {
403 852     852 0 1621 my ($self, $text) = @_;
404             # String => '