fast_haml 0.1.3 → 0.1.4

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: 82e5ebff407e25bb08be2e8130a90cca37e0bfc6
4
- data.tar.gz: ac737189d9a874166e57300520d1f58179420e03
3
+ metadata.gz: e6d99c4413e3858045374b49a571cd49b41a6bdd
4
+ data.tar.gz: 9cca499f18f80fbd21e45fc661feafdf133342a2
5
5
  SHA512:
6
- metadata.gz: a9afecde05c50d903af4ef9fa480fbc89e8bfacc41256311a2a754a4acaa382128551ed2c9d20d57137db7747a66957230abd0ec4cda9e0c02a4aac88d49b941
7
- data.tar.gz: 2fc94f166bbf3b2830fa123968c995bf73e96ee23b75a2b933ce789f3b5fe056274b9af01db342d7a62fd9e3a1662f5df15b66b723657822c69c248cb26dc68e
6
+ metadata.gz: b7823392fa8c824f2658a6f2e565cc0c31a142e0dcff1e7e087f290248ff1775f1898ba8afcf33ca762c595f608f32ca29960f821be97841b515e4d23fd17ad0
7
+ data.tar.gz: 445518be81a78566281badd2336ec90f6c2a7b9cd1b515f2276bf32d8e285f9d7a8380634116fd3aee58d654064f04059075d4f322598f525534d410b59f8a9b
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.1.4 (2015-02-28)
2
+ - Fix newline generation around empty lines
3
+ - Internal: introduce Ast::Empty and remove LineCounter
4
+
1
5
  ## 0.1.3 (2015-02-27)
2
6
  - Fix internal compiler error when `>` is used
3
7
  - Fix newline generation at Ast::Element case
data/lib/fast_haml/ast.rb CHANGED
@@ -1,21 +1,5 @@
1
1
  module FastHaml
2
2
  module Ast
3
- module LineCounter
4
- def initialize(*)
5
- super
6
- @trailing_empty_lines = 0
7
- end
8
-
9
- def trailing_empty_lines
10
- @trailing_empty_lines
11
- end
12
-
13
- def increment_trailing_empty_lines
14
- @trailing_empty_lines += 1
15
- nil
16
- end
17
- end
18
-
19
3
  module HasChildren
20
4
  def initialize(*)
21
5
  super
@@ -28,12 +12,21 @@ module FastHaml
28
12
  end
29
13
 
30
14
  class Root < Struct.new(:children)
31
- include LineCounter
32
15
  include HasChildren
16
+ attr_reader :leading_empty_lines
17
+
18
+ def initialize(*)
19
+ super
20
+ @leading_empty_lines = 0
21
+ end
22
+
23
+ def increment_leading_empty_lines
24
+ @leading_empty_lines +=1
25
+ nil
26
+ end
33
27
  end
34
28
 
35
29
  class Doctype < Struct.new(:doctype)
36
- include LineCounter
37
30
  end
38
31
 
39
32
  class Element < Struct.new(
@@ -47,7 +40,6 @@ module FastHaml
47
40
  :nuke_inner_whitespace,
48
41
  :nuke_outer_whitespace,
49
42
  )
50
- include LineCounter
51
43
  include HasChildren
52
44
 
53
45
  def initialize(*)
@@ -68,7 +60,6 @@ module FastHaml
68
60
  :preserve,
69
61
  :mid_block_keyword,
70
62
  )
71
- include LineCounter
72
63
  include HasChildren
73
64
 
74
65
  def initialize(*)
@@ -86,7 +77,6 @@ module FastHaml
86
77
  end
87
78
 
88
79
  class SilentScript < Struct.new(:children, :script, :mid_block_keyword)
89
- include LineCounter
90
80
  include HasChildren
91
81
 
92
82
  def initialize(*)
@@ -98,7 +88,6 @@ module FastHaml
98
88
  end
99
89
 
100
90
  class HtmlComment < Struct.new(:children, :comment, :conditional)
101
- include LineCounter
102
91
  include HasChildren
103
92
 
104
93
  def initialize(*)
@@ -109,13 +98,10 @@ module FastHaml
109
98
  end
110
99
 
111
100
  class HamlComment < Struct.new(:children)
112
- include LineCounter
113
101
  include HasChildren
114
102
  end
115
103
 
116
104
  class Text < Struct.new(:text, :escape_html)
117
- include LineCounter
118
-
119
105
  def initialize(*)
120
106
  super
121
107
  if self.escape_html.nil?
@@ -125,12 +111,13 @@ module FastHaml
125
111
  end
126
112
 
127
113
  class Filter < Struct.new(:name, :texts)
128
- include LineCounter
129
-
130
114
  def initialize(*)
131
115
  super
132
116
  self.texts ||= []
133
117
  end
134
118
  end
119
+
120
+ class Empty
121
+ end
135
122
  end
136
123
  end
@@ -44,39 +44,33 @@ module FastHaml
44
44
  private
45
45
 
46
46
  def compile(ast)
47
- temple =
48
- case ast
49
- when Ast::Root
50
- compile_root(ast)
51
- when Ast::Doctype
52
- compile_doctype(ast)
53
- when Ast::HtmlComment
54
- compile_html_comment(ast)
55
- when Ast::HamlComment
56
- [:multi]
57
- when Ast::Element
58
- compile_element(ast)
59
- when Ast::Script
60
- compile_script(ast)
61
- when Ast::SilentScript
62
- compile_silent_script(ast)
63
- when Ast::Text
64
- compile_text(ast)
65
- when Ast::Filter
66
- compile_filter(ast)
67
- else
68
- raise "InternalError: Unknown AST node #{ast.class}: #{ast.inspect}"
69
- end
70
-
71
- if ast.trailing_empty_lines > 0
72
- [:multi, temple].concat([[:newline]] * ast.trailing_empty_lines)
47
+ case ast
48
+ when Ast::Root
49
+ compile_root(ast)
50
+ when Ast::Doctype
51
+ compile_doctype(ast)
52
+ when Ast::HtmlComment
53
+ compile_html_comment(ast)
54
+ when Ast::HamlComment, Ast::Empty
55
+ [:multi]
56
+ when Ast::Element
57
+ compile_element(ast)
58
+ when Ast::Script
59
+ compile_script(ast)
60
+ when Ast::SilentScript
61
+ compile_silent_script(ast)
62
+ when Ast::Text
63
+ compile_text(ast)
64
+ when Ast::Filter
65
+ compile_filter(ast)
73
66
  else
74
- temple
67
+ raise "InternalError: Unknown AST node #{ast.class}: #{ast.inspect}"
75
68
  end
76
69
  end
77
70
 
78
71
  def compile_root(ast)
79
72
  [:multi].tap do |temple|
73
+ temple.concat([[:newline]] * ast.leading_empty_lines)
80
74
  compile_children(ast, temple)
81
75
  end
82
76
  end
@@ -118,7 +112,7 @@ module FastHaml
118
112
  case child
119
113
  when Ast::Script
120
114
  child.children.empty?
121
- when Ast::SilentScript, Ast::HamlComment
115
+ when Ast::SilentScript, Ast::HamlComment, Ast::Empty
122
116
  false
123
117
  when Ast::Element
124
118
  !child.nuke_outer_whitespace
@@ -59,7 +59,7 @@ module FastHaml
59
59
  text, indent = @indent_tracker.process(line, @line_parser.lineno)
60
60
 
61
61
  if text.empty?
62
- @ast.increment_trailing_empty_lines
62
+ @ast << Ast::Empty.new
63
63
  return
64
64
  end
65
65
 
@@ -200,8 +200,13 @@ module FastHaml
200
200
  end
201
201
 
202
202
  def indent_enter(_, text)
203
+ empty_lines = []
204
+ while @ast.children.last.is_a?(Ast::Empty)
205
+ empty_lines << @ast.children.pop
206
+ end
203
207
  @stack.push(@ast)
204
208
  @ast = @ast.children.last
209
+ @ast.children = empty_lines
205
210
  if @ast.is_a?(Ast::Element) && @ast.self_closing
206
211
  syntax_error!('Illegal nesting: nesting within a self-closing tag is illegal')
207
212
  end
@@ -1,3 +1,3 @@
1
1
  module FastHaml
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -41,6 +41,30 @@ HAML
41
41
  %span hello
42
42
  %span #{raise LineVerifier}
43
43
  %span world
44
+ HAML
45
+ end
46
+
47
+ it do
48
+ expect { render_string(<<HAML) }.to raise_error(LineVerifier, raised_at(2))
49
+
50
+ %div= raise LineVerifier
51
+ HAML
52
+ end
53
+
54
+ it do
55
+ expect { render_string(<<HAML) }.to raise_error(LineVerifier, raised_at(4))
56
+ %div
57
+ %span= 1
58
+
59
+ %span= raise LineVerifier
60
+ HAML
61
+ end
62
+
63
+ it do
64
+ expect { render_string(<<HAML) }.to raise_error(LineVerifier, raised_at(3))
65
+ %div
66
+
67
+ %span= raise LineVerifier
44
68
  HAML
45
69
  end
46
70
  end
@@ -3,7 +3,6 @@ require 'spec_helper'
3
3
  RSpec.describe 'Preserve filter rendering', type: :render do
4
4
  it 'renders preserve filter' do
5
5
  expect(render_string(<<'HAML')).to eq("<span>start</span>\nhello&#x000A; <p>wor&#x000A;ld</p>&#x000A;<span>hello</span>\n<span>end</span>\n")
6
-
7
6
  %span start
8
7
  :preserve
9
8
  hello
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fast_haml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kohei Suzuki