Mercurial > hg > soundsoftware-site
comparison .svn/pristine/fe/fe0465ebb05e92c484a2edd16cfdf129d7d41205.svn-base @ 909:cbb26bc654de redmine-1.3
Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author | Chris Cannam |
---|---|
date | Fri, 24 Feb 2012 19:09:32 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
908:c6c2cbd0afee | 909:cbb26bc654de |
---|---|
1 module CodeRay | |
2 module Scanners | |
3 | |
4 load :html | |
5 load :ruby | |
6 | |
7 # Scanner for HTML ERB templates. | |
8 class ERB < Scanner | |
9 | |
10 register_for :erb | |
11 title 'HTML ERB Template' | |
12 | |
13 KINDS_NOT_LOC = HTML::KINDS_NOT_LOC | |
14 | |
15 ERB_RUBY_BLOCK = / | |
16 (<%(?!%)[-=\#]?) | |
17 ((?> | |
18 [^\-%]* # normal* | |
19 (?> # special | |
20 (?: %(?!>) | -(?!%>) ) | |
21 [^\-%]* # normal* | |
22 )* | |
23 )) | |
24 ((?: -?%> )?) | |
25 /x # :nodoc: | |
26 | |
27 START_OF_ERB = / | |
28 <%(?!%) | |
29 /x # :nodoc: | |
30 | |
31 protected | |
32 | |
33 def setup | |
34 @ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true | |
35 @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true | |
36 end | |
37 | |
38 def reset_instance | |
39 super | |
40 @html_scanner.reset | |
41 end | |
42 | |
43 def scan_tokens encoder, options | |
44 | |
45 until eos? | |
46 | |
47 if (match = scan_until(/(?=#{START_OF_ERB})/o) || scan_rest) and not match.empty? | |
48 @html_scanner.tokenize match, :tokens => encoder | |
49 | |
50 elsif match = scan(/#{ERB_RUBY_BLOCK}/o) | |
51 start_tag = self[1] | |
52 code = self[2] | |
53 end_tag = self[3] | |
54 | |
55 encoder.begin_group :inline | |
56 encoder.text_token start_tag, :inline_delimiter | |
57 | |
58 if start_tag == '<%#' | |
59 encoder.text_token code, :comment | |
60 else | |
61 @ruby_scanner.tokenize code, :tokens => encoder | |
62 end unless code.empty? | |
63 | |
64 encoder.text_token end_tag, :inline_delimiter unless end_tag.empty? | |
65 encoder.end_group :inline | |
66 | |
67 else | |
68 raise_inspect 'else-case reached!', encoder | |
69 | |
70 end | |
71 | |
72 end | |
73 | |
74 encoder | |
75 | |
76 end | |
77 | |
78 end | |
79 | |
80 end | |
81 end |