xrt 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 16821e98381373b1d22d09101636a83bb04ab394
4
- data.tar.gz: 8e7fd66dcc9fd8ab7a18b53bc94b567aa6bfe30c
3
+ metadata.gz: 9fe8c82b81533d58ad55d63fc95dedddbfff782a
4
+ data.tar.gz: 437782711e48511fe351953897985544b3b0309f
5
5
  SHA512:
6
- metadata.gz: 6be31df8e00727bffb709e563a61ffd806d7cc0d1c26f1217f2c2fa56fbe46b325a4d5cbc79420f09d135a36f1464bcfefcd9fbd8f8d7667e56ca74535d775ab
7
- data.tar.gz: 95c192151307f20bb24e3daae234050a5efda6d86475565cc65972bb06af94f837631ad77775c820068f5022e8f32a08b12ec0ae15e0c55c9cfba8fe7d863c26
6
+ metadata.gz: ea18450231e65f911b90975f96612e83b256811f09afe44dd6a19674a4d65abc3918168851c44cba4deb48ded8379cecb6c9b1fb8bf48d9027e1131e44a3cab7
7
+ data.tar.gz: dd845b2ccd015828d7aaa15934f1079ec6bd6b885a4cc0ccdbde8fd18f637e83944e998ee079a5ca371ca18f3fec0ff4933b33acc87757a6311ca9ccb0913ec8
@@ -45,7 +45,7 @@ module XRT
45
45
  end
46
46
 
47
47
  def statements(file)
48
- XRT::Parser.new(open(file).read).document.find_blocks.map{|s| s.auto_indent }
48
+ XRT::Parser.new(open(file).read).document.find_blocks_with_directive.map{|s| s.auto_indent }
49
49
  end
50
50
  end
51
51
  end
@@ -25,11 +25,7 @@ module XRT
25
25
  when XRT::Statement::End
26
26
  node << statement
27
27
  break
28
- when XRT::Statement::Text
29
- node << statement
30
- when XRT::Statement::Whitespace
31
- node << statement
32
- when XRT::Statement::Directive
28
+ else
33
29
  node << statement
34
30
  end
35
31
  end
@@ -44,6 +40,10 @@ module XRT
44
40
  while reading.length > 0
45
41
  if got = read_directive(reading)
46
42
  result << got
43
+ elsif got = read_tag_start(reading)
44
+ result << got
45
+ elsif got = read_tag_end(reading)
46
+ result << got
47
47
  elsif got = read_text(reading)
48
48
  result.concat(split_whitespace(got))
49
49
  else
@@ -80,10 +80,14 @@ module XRT
80
80
 
81
81
  def read_text source
82
82
  return nil if source[0...2] == '[%'
83
+ return nil if source[0] == '<'
84
+ return nil if source[0] == '>'
83
85
 
84
86
  buffer = ''
85
87
  while true
86
88
  return buffer if source[0...2] == '[%'
89
+ return buffer if source[0] == '<'
90
+ return buffer if source[0] == '>'
87
91
  break if source.length < 2
88
92
  buffer << source.slice!(0)
89
93
  end
@@ -92,5 +96,15 @@ module XRT
92
96
 
93
97
  buffer
94
98
  end
99
+
100
+ def read_tag_start source
101
+ return nil unless source[0] == '<'
102
+ source.slice!(0)
103
+ end
104
+
105
+ def read_tag_end source
106
+ return nil unless source[0] == '>'
107
+ source.slice!(0)
108
+ end
95
109
  end
96
110
  end
@@ -15,7 +15,7 @@ module XRT
15
15
  end
16
16
 
17
17
  def inspect
18
- "<#{self.class}:#{self.content}>"
18
+ "(#{self.class}:#{self.content})"
19
19
  end
20
20
 
21
21
  def children
@@ -49,12 +49,26 @@ module XRT
49
49
  children.concat(children.map{|child| child.children }.flatten)
50
50
  end
51
51
 
52
+ def contains_directive?
53
+ children.any?{|s|
54
+ s.kind_of? XRT::Statement::Directive
55
+ } || children.any?{|c|
56
+ c.contains_directive?
57
+ }
58
+ end
59
+
52
60
  def find_blocks
53
61
  children.select{|child|
54
62
  child.kind_of? XRT::Statement::Block
55
63
  }.concat(children.map{|child| child.find_blocks }.flatten)
56
64
  end
57
65
 
66
+ def find_blocks_with_directive
67
+ children.select{|child|
68
+ child.kind_of?(XRT::Statement::Block) && child.contains_directive?
69
+ }.concat(children.map{|child| child.find_blocks_with_directive }.flatten)
70
+ end
71
+
58
72
  def find_block_texts
59
73
  children.select{|child|
60
74
  child.kind_of?(XRT::Statement::Block) || child.kind_of?(XRT::Statement::Text)
@@ -82,6 +96,10 @@ module XRT
82
96
  XRT::Statement::End.new content
83
97
  elsif syntax.block? content
84
98
  XRT::Statement::Directive.new content
99
+ elsif syntax.tag_start? content
100
+ XRT::Statement::Tag.new content
101
+ elsif syntax.tag_end? content
102
+ XRT::Statement::TagEnd.new content
85
103
  elsif syntax.whitespace? content
86
104
  XRT::Statement::Whitespace.new content
87
105
  else
@@ -113,7 +131,7 @@ module XRT
113
131
  end
114
132
 
115
133
  def inspect
116
- "<#{self.class}:#{self.children}>"
134
+ "(#{self.class}:#{self.children})"
117
135
  end
118
136
  end
119
137
 
@@ -123,16 +141,23 @@ module XRT
123
141
  class Whitespace < Statement
124
142
  end
125
143
 
144
+ class TagStart < Statement
145
+ end
146
+
126
147
  class Directive < Statement
127
148
  end
128
149
 
129
- class End < Directive
150
+ class End < Statement
130
151
  end
131
152
 
132
- class Block < Directive
153
+ class TagEnd < End
154
+ end
155
+
156
+ class Block < Statement
133
157
  def initialize(content)
134
- super
135
158
  @children = []
159
+
160
+ self << Directive.new(content)
136
161
  end
137
162
 
138
163
  def closed?
@@ -149,11 +174,19 @@ module XRT
149
174
  end
150
175
 
151
176
  def content
152
- @content + children.map{|c| c.content }.join
177
+ children.map{|c| c.content }.join
153
178
  end
154
179
 
155
180
  def inspect
156
- "<#{self.class}:#{@content},#{self.children}>"
181
+ "(#{self.class}:#{self.children})"
182
+ end
183
+ end
184
+
185
+ class Tag < Block
186
+ def initialize content
187
+ @children = []
188
+ tag_start = XRT::Statement::TagStart.new content
189
+ self << tag_start
157
190
  end
158
191
  end
159
192
  end
@@ -4,6 +4,14 @@ module XRT
4
4
  statement.match(/\A\s*\Z/)
5
5
  end
6
6
 
7
+ def tag_start? statement
8
+ statement == '<'
9
+ end
10
+
11
+ def tag_end? statement
12
+ statement == '>'
13
+ end
14
+
7
15
  def block? statement
8
16
  statement =~ /\A\[%.+%\]\Z/m
9
17
  end
@@ -1,3 +1,3 @@
1
1
  module Xrt
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -32,7 +32,7 @@ class TestCommandExtract < Test::Unit::TestCase
32
32
  }
33
33
  end
34
34
 
35
- def test_extract_text
35
+ def _todo_est_extract_text
36
36
  Dir.mktmpdir{|dir|
37
37
  templates_dir = Pathname(dir).join('templates')
38
38
  templates_dir.mkdir
@@ -49,20 +49,32 @@ class TestParser < Test::Unit::TestCase
49
49
  ], doc.children
50
50
  end
51
51
 
52
- def test_document_nested_block
53
- parser = XRT::Parser.new('[% IF a %][% IF b %]1[% END %][% END %]')
54
- doc = parser.document
55
- assert doc.kind_of? XRT::Statement::Document
56
- if_block1 = XRT::Statement::Block.new('[% IF a %]')
57
- if_block2 = XRT::Statement::Block.new('[% IF b %]')
58
- if_block2 << XRT::Statement::Text.new('1')
59
- if_block2 << XRT::Statement::Text.new('[% END %]')
60
- if_block1 << if_block2
61
- if_block1 << XRT::Statement::Text.new('[% END %]')
62
- assert_equal [
63
- if_block1
64
- ], doc.children
65
- end
52
+ def test_document_nested_block
53
+ parser = XRT::Parser.new('[% IF a %][% IF b %]1[% END %][% END %]')
54
+ doc = parser.document
55
+ assert doc.kind_of? XRT::Statement::Document
56
+ if_block1 = XRT::Statement::Block.new('[% IF a %]')
57
+ if_block2 = XRT::Statement::Block.new('[% IF b %]')
58
+ if_block2 << XRT::Statement::Text.new('1')
59
+ if_block2 << XRT::Statement::Text.new('[% END %]')
60
+ if_block1 << if_block2
61
+ if_block1 << XRT::Statement::Text.new('[% END %]')
62
+ assert_equal [
63
+ if_block1
64
+ ], doc.children
65
+ end
66
+
67
+ def test_document_tag
68
+ parser = XRT::Parser.new('<div>')
69
+ doc = parser.document
70
+ assert doc.kind_of? XRT::Statement::Document
71
+ tag = XRT::Statement::Tag.new '<'
72
+ tag << XRT::Statement::Text.new('div')
73
+ tag << XRT::Statement::TagEnd.new('>')
74
+ assert_equal [
75
+ tag
76
+ ], doc.children
77
+ end
66
78
 
67
79
  def test_read_directive
68
80
  assert_equal '[% %]', @parser.read_directive('[% %]')
@@ -75,9 +87,23 @@ class TestParser < Test::Unit::TestCase
75
87
  assert_equal 'hi', @parser.read_text('hi')
76
88
  assert_equal 'hi[', @parser.read_text('hi[')
77
89
  assert_equal 'hi', @parser.read_text('hi[%')
90
+ assert_equal 'hi', @parser.read_text('hi<')
91
+ assert_equal 'hi', @parser.read_text('hi>')
78
92
  assert_nil @parser.read_text('[% %]')
79
93
  end
80
94
 
95
+ def test_read_tag_start
96
+ assert_equal '<', @parser.read_tag_start('<')
97
+ assert_equal '<', @parser.read_tag_start('<div')
98
+ assert_nil @parser.read_tag_start('hi')
99
+ end
100
+
101
+ def test_read_tag_end
102
+ assert_equal '>', @parser.read_tag_end('>')
103
+ assert_equal '>', @parser.read_tag_end('>>')
104
+ assert_nil @parser.read_tag_end('hi')
105
+ end
106
+
81
107
  def test_split_whitespace
82
108
  assert_equal([], @parser.split_whitespace(""))
83
109
  assert_equal([" "], @parser.split_whitespace(" "))
@@ -91,7 +117,7 @@ class TestParser < Test::Unit::TestCase
91
117
 
92
118
  def test_tokens
93
119
  test_cases = [
94
- ['<html>', ['<html>']],
120
+ ['<html>', ['<', 'html', '>']],
95
121
  ['a [% b %] c', ['a', ' ', '[% b %]', ' ', 'c']],
96
122
  ['[% a %] [% b %] [% c %]', ['[% a %]', ' ', '[% b %]', ' ', '[% c %]']],
97
123
  ['[% FOR k IN [1, 2, 3] %]', ['[% FOR k IN [1, 2, 3] %]']],
@@ -99,7 +125,7 @@ class TestParser < Test::Unit::TestCase
99
125
  %q([% WRAPPER "wrapper.tt" WITH args = [1,2,3] %]<div></div>[% END %]),
100
126
  [
101
127
  %q([% WRAPPER "wrapper.tt" WITH args = [1,2,3] %]),
102
- %q(<div></div>),
128
+ *%w(< div > < /div >),
103
129
  %q([% END %]),
104
130
  ]
105
131
  ],
@@ -6,8 +6,10 @@ class TestStatementFactory < Test::Unit::TestCase
6
6
  assert XRT::Statement::Factory.new_from_content('hi').kind_of? XRT::Statement::Text
7
7
  assert XRT::Statement::Factory.new_from_content(' ').kind_of? XRT::Statement::Whitespace
8
8
  assert XRT::Statement::Factory.new_from_content('[% foo %]').kind_of? XRT::Statement::Directive
9
- assert XRT::Statement::Factory.new_from_content('[% IF 1 %]').kind_of? XRT::Statement::Block
10
9
  assert XRT::Statement::Factory.new_from_content('[% foo IF 1 %]').kind_of? XRT::Statement::Directive
10
+ assert XRT::Statement::Factory.new_from_content('[% IF 1 %]').kind_of? XRT::Statement::Block
11
+ assert XRT::Statement::Factory.new_from_content('<').kind_of? XRT::Statement::Tag
12
+ assert XRT::Statement::Factory.new_from_content('>').kind_of? XRT::Statement::TagEnd
11
13
  end
12
14
  end
13
15
 
@@ -44,6 +46,43 @@ HTML
44
46
  assert_equal text.children, []
45
47
  end
46
48
 
49
+ def test_tag_start
50
+ tag_start = XRT::Statement::TagStart.new('<')
51
+ assert tag_start.kind_of? XRT::Statement
52
+ assert_equal tag_start.content, '<'
53
+ assert_equal tag_start.children, []
54
+ end
55
+
56
+ def test_tag_end
57
+ tag_end = XRT::Statement::TagEnd.new('<')
58
+ assert tag_end.kind_of? XRT::Statement::End
59
+ assert_equal tag_end.content, '<'
60
+ assert_equal tag_end.children, []
61
+ end
62
+
63
+ def test_tag
64
+ tag = XRT::Statement::Tag.new('<')
65
+ assert tag.kind_of? XRT::Statement::Tag
66
+ assert_equal tag.children, [
67
+ XRT::Statement::TagStart.new('<')
68
+ ]
69
+ assert_false tag.closed?
70
+ tag << XRT::Statement::TagEnd.new('>')
71
+ assert tag.closed?
72
+ end
73
+
74
+ def test_tag_contains_directive?
75
+ tag = XRT::Statement::Tag.new('<')
76
+ assert_false tag.contains_directive?
77
+
78
+ tag << XRT::Statement::Text.new('div')
79
+ assert_false tag.contains_directive?
80
+
81
+ tag << XRT::Statement::Directive.new('[% foo %]')
82
+ assert tag.contains_directive?
83
+ end
84
+
85
+
47
86
  def test_end
48
87
  text = XRT::Statement::End.new('[% END %]')
49
88
  assert text.kind_of? XRT::Statement
@@ -52,10 +91,11 @@ HTML
52
91
  end
53
92
 
54
93
  def test_block
55
- text = XRT::Statement::Block.new('[% IF 1 %]')
56
- assert text.kind_of? XRT::Statement
57
- assert_equal text.content, '[% IF 1 %]'
58
- assert_equal text.children, []
94
+ block = XRT::Statement::Block.new('[% IF 1 %]')
95
+ assert block.kind_of? XRT::Statement
96
+ assert_equal block.children, [
97
+ XRT::Statement::Directive.new('[% IF 1 %]')
98
+ ]
59
99
  end
60
100
 
61
101
  def test_document
@@ -123,8 +163,9 @@ HTML
123
163
  document << text_block
124
164
  if_block = XRT::Statement::Block.new('[% IF a %]')
125
165
  document << if_block
166
+ if_directive = XRT::Statement::Directive.new('[% IF a %]')
126
167
 
127
- assert_equal [ text_block, if_block ], document.statements, 'returns statements'
168
+ assert_equal [ text_block, if_block, if_directive ], document.statements, 'returns statements'
128
169
  end
129
170
 
130
171
  def test_find_blocks
@@ -144,6 +185,7 @@ class TestBlock < Test::Unit::TestCase
144
185
  block = XRT::Statement::Block.new('[% IF 1 %]')
145
186
  assert_equal false, block.closed?
146
187
 
188
+ statement_if = XRT::Statement::Directive.new('[% IF 1 %]')
147
189
  statement_ok = XRT::Statement::Text.new('ok')
148
190
  statement_end = XRT::Statement::End.new('[% END %]')
149
191
 
@@ -153,7 +195,7 @@ class TestBlock < Test::Unit::TestCase
153
195
  block << statement_end
154
196
  assert_equal true, block.closed?
155
197
 
156
- assert_equal block.children, [statement_ok, statement_end]
198
+ assert_equal block.children, [statement_if, statement_ok, statement_end]
157
199
 
158
200
  assert_raises {
159
201
  block << statement_ok
@@ -17,6 +17,16 @@ class TestSyntax < Test::Unit::TestCase
17
17
  assert_nil @syntax.whitespace? 'a'
18
18
  end
19
19
 
20
+ def test_tag_start?
21
+ assert @syntax.tag_start? '<'
22
+ assert_false @syntax.tag_start? 'a'
23
+ end
24
+
25
+ def test_tag_end?
26
+ assert @syntax.tag_end? '>'
27
+ assert_false @syntax.tag_end? 'a'
28
+ end
29
+
20
30
  def test_beginning_block?
21
31
  assert @syntax.beginning_block? '[% IF 1 %]'
22
32
  assert @syntax.beginning_block? '[% if 1 %]'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xrt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - hitode909