fast_haml 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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