hamlit 0.4.2 → 0.4.3

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: 89d7cfad07da030166e5964134abf59d18e44865
4
- data.tar.gz: 441d90d73df696acc1348d3f8ce755d43aa30c1c
3
+ metadata.gz: 1688e256cfeb017819cd1ea62ba2a083a9347224
4
+ data.tar.gz: 77978ed4df48aa09950e3462ea3e00914d1da7e8
5
5
  SHA512:
6
- metadata.gz: f87e5a80a46d4b9d092c6788d5debb783281cb59bc4c50b43141ebc7bf0041835b4097784819023c207b013665aced148855c16d71b0c450eccb037ac7e22c07
7
- data.tar.gz: d493776d47975894589784a773c1f003b10227b20a3e2e086ce55431fa1b016d5f1290d0218fc5ec7c6241fe8a4501a18e010a6c0a6c7d7ade8d2c5d66911a41
6
+ metadata.gz: cb9bdcb4facccdb71d92e5e80014797326ac2c1e118b61a137b203ec4f145ad4d2529a58a0450beb340f623909f035cdf824e91fed50e2708bac1ec582a22840
7
+ data.tar.gz: 3e1a31ea12ab7ab547e7b38516cf80b95f48a29ef3c7cf20d4a8c128eeb0dd1f5499cbd59cf4ff86e8df6bf453487b0f8fcd7a1d4d6efd54e1df3070d391a17a
@@ -13,22 +13,22 @@ gemfile:
13
13
  env:
14
14
  - TASK=spec
15
15
  - TASK=rails:spec
16
- - TASK=bench TIME=10
16
+ - TASK=bench TIME=20
17
17
  matrix:
18
18
  allow_failures:
19
- - env: TASK=bench TIME=10
19
+ - env: TASK=bench TIME=20
20
20
  exclude:
21
21
  - env: TASK=spec
22
22
  gemfile: spec/rails/Gemfile
23
23
  - env: TASK=rails:spec
24
24
  gemfile: Gemfile
25
- - env: TASK=bench TIME=10
25
+ - env: TASK=bench TIME=20
26
26
  gemfile: spec/rails/Gemfile
27
27
  - rvm: 2.1
28
28
  env: TASK=rails:spec
29
29
  - rvm: 2.1
30
- env: TASK=bench TIME=10
30
+ env: TASK=bench TIME=20
31
31
  - rvm: 2.0.0
32
32
  env: TASK=rails:spec
33
33
  - rvm: 2.0.0
34
- env: TASK=bench TIME=10
34
+ env: TASK=bench TIME=20
@@ -1,3 +1,12 @@
1
+ ## v0.4.3
2
+
3
+ - Allow empty else statement
4
+ - https://github.com/k0kubun/hamlit/issues/14
5
+ - Thanks to @jeffblake
6
+ - Accept comment-only script
7
+ - https://github.com/k0kubun/hamlit/issues/13
8
+ - Thanks to @jeffblake
9
+
1
10
  ## v0.4.2
2
11
 
3
12
  - Bugfix about parsing nested attributes
@@ -18,41 +27,41 @@
18
27
 
19
28
  ## v0.3.4
20
29
 
21
- - Allow tab indentation.
30
+ - Allow tab indentation
22
31
  - https://github.com/k0kubun/hamlit/issues/9
23
32
  - Thanks to @tdtds
24
33
 
25
34
  ## v0.3.3
26
35
 
27
- - Accept multi byte parsing.
36
+ - Accept multi byte parsing
28
37
  - https://github.com/k0kubun/hamlit/issues/8
29
38
  - Thanks to @machu
30
39
 
31
40
  ## v0.3.2
32
41
 
33
- - Bugfix for compiling old attributes.
42
+ - Bugfix for compiling old attributes
34
43
  - https://github.com/k0kubun/hamlit/issues/7
35
44
  - Thanks to @creasty
36
45
 
37
46
  ## v0.3.1
38
47
 
39
- - Hyphenate data attributes.
48
+ - Hyphenate data attributes
40
49
  - https://github.com/k0kubun/hamlit/issues/5
41
50
  - Thanks to @os0x
42
51
 
43
52
  ## v0.3.0
44
53
 
45
- - Specify a version in dependency of temple.
54
+ - Specify a version in dependency of temple
46
55
 
47
56
  ## v0.2.0
48
57
 
49
- - Allow comments in script.
58
+ - Allow comments in script
50
59
  - https://github.com/k0kubun/hamlit/issues/3
51
60
  - Thanks to @eagletmt
52
61
 
53
62
  ## v0.1.3
54
63
 
55
- - Bugfix for attribute nesting on runtime.
64
+ - Bugfix for attribute nesting on runtime
56
65
  - https://github.com/k0kubun/hamlit/issues/1
57
66
  - Thanks to @eagletmt
58
67
 
@@ -64,10 +73,10 @@
64
73
 
65
74
  ## v0.1.1
66
75
 
67
- - Drop obsolete `--ugly` option for CLI.
76
+ - Drop obsolete `--ugly` option for CLI
68
77
  - Currently pretty mode is not implemented.
69
78
 
70
79
  ## v0.1.0
71
80
 
72
- - Initial release.
81
+ - Initial release
73
82
  - Passing haml-spec with ugly mode.
data/README.md CHANGED
@@ -15,21 +15,22 @@ or just replace `gem "haml"` with `gem "hamlit"`.
15
15
  ## Features
16
16
  ### Fast rendering
17
17
 
18
- Hamlit's rendering is **8.47x times faster** than original haml.
19
-
20
- ![](http://i.gyazo.com/57b726102a4a169d4b85cc22fcbb3ff3.png)
18
+ Hamlit's rendering is **7.24x times faster** than original haml.
21
19
 
22
20
  ```
23
- hamlit: 133922.9 i/s
24
- erubis: 123464.1 i/s - 1.08x slower
25
- slim: 110404.3 i/s - 1.21x slower
26
- faml: 92009.3 i/s - 1.46x slower
27
- haml: 15810.4 i/s - 8.47x slower
21
+ erubis: 114417.8 i/s
22
+ hamlit: 107367.5 i/s - 1.07x slower
23
+ slim: 104728.0 i/s - 1.09x slower
24
+ faml: 87624.2 i/s - 1.31x slower
25
+ haml: 15796.0 i/s - 7.24x slower
28
26
  ```
29
27
 
30
- [This benchmark](https://github.com/k0kubun/hamlit/blob/74ede1101f228828e343ceb1af481c45eaf0a1dd/benchmarks/benchmark.rb)
28
+ [This benchmark](https://github.com/k0kubun/hamlit/blob/b6f112aa1f51816ab9a3a81bd7810ed9cffd26aa/benchmarks/benchmark.rb)
31
29
  is the same as [slim-template/slim](https://github.com/slim-template/slim)'s one for fairness.
32
- ([The result on travis CI](https://travis-ci.org/k0kubun/hamlit/jobs/56403724))
30
+ ([The result on travis CI](https://travis-ci.org/k0kubun/hamlit/jobs/57333515))
31
+
32
+ Note that there are [some incompatibilities](https://github.com/k0kubun/hamlit/issues) related to performance.
33
+ You may want [faml](https://github.com/eagletmt/faml) for a better compatibility.
33
34
 
34
35
  ### Better parser
35
36
 
@@ -59,9 +60,7 @@ For compatibility with Haml, Hamlit does not escape html automatically in sinatr
59
60
  You can enable html escaping manually:
60
61
 
61
62
  ```ruby
62
- configure do
63
- Hamlit::Engine.set_default_options(escape_html: true)
64
- end
63
+ set :haml, { escape_html: true }
65
64
  ```
66
65
 
67
66
  ## Why high performance?
@@ -81,6 +80,13 @@ code by Hamlit is very fast.
81
80
  Not only relying on temple optimizers, but also Hamlit's compiler cares about many cases
82
81
  to optimize performance such as string interpolation.
83
82
 
83
+ ## TODO
84
+
85
+ Currently there are some important incompatibilities that should be fixed.
86
+
87
+ - Remove falsy attributes [#2](https://github.com/k0kubun/hamlit/issues/2)
88
+ - Escape attribute values [#10](https://github.com/k0kubun/hamlit/issues/10)
89
+
84
90
  ## License
85
91
 
86
92
  MIT License
@@ -34,6 +34,7 @@ class Benchmarks
34
34
  fast_erubis = Erubis::FastEruby.new(@erb_code)
35
35
  haml_ugly = Haml::Engine.new(@haml_code, format: :html5, ugly: true)
36
36
  tenjin = Tenjin::Engine.new.get_template(@rbhtml_path)
37
+ hamlit = Hamlit::Engine.new(escape_html: true)
37
38
 
38
39
  context = Context.new
39
40
 
@@ -46,7 +47,7 @@ class Benchmarks
46
47
  def run_slim_ugly; #{Slim::Engine.new.call @slim_code}; end
47
48
  def run_faml; #{Faml::Engine.new.call @haml_code}; end
48
49
  def run_tenjin; _buf = ''; #{tenjin.script}; end
49
- def run_hamlit; #{Hamlit::Engine.new.call @haml_code}; end
50
+ def run_hamlit; #{hamlit.call @haml_code}; end
50
51
  }
51
52
 
52
53
  bench('hamlit', Hamlit::VERSION) { context.run_hamlit }
@@ -21,8 +21,8 @@ module Hamlit
21
21
  assert_scan!(scanner, /=|&=|!=/)
22
22
  options = DEFAULT_SCRIPT_OPTIONS.merge(options)
23
23
 
24
- code = scan_code(scanner)
25
- return syntax_error("There's no Ruby code for = to evaluate.") if code.empty?
24
+ code, with_comment = scan_code(scanner, comment_check: true)
25
+ return syntax_error("There's no Ruby code for = to evaluate.") if code.empty? && !with_comment
26
26
  unless has_block?
27
27
  return [:dynamic, code] if options[:disable_escape]
28
28
  return escape_html([:dynamic, code], options[:force_escape])
@@ -48,11 +48,12 @@ module Hamlit
48
48
  return [:multi]
49
49
  end
50
50
 
51
- ast = [:code]
52
- ast << scan_code(scanner)
53
- return ast unless has_block?
51
+ ast = [:multi, [:code, scan_code(scanner)]]
52
+ unless has_block?
53
+ ast << [:code, 'end'] if @current_indent > next_indent
54
+ return ast
55
+ end
54
56
 
55
- ast = [:multi, ast]
56
57
  ast += with_indented { parse_lines }
57
58
  ast << [:code, 'end'] unless same_indent?(next_line) && internal_statement?(next_line)
58
59
  ast
@@ -60,7 +61,7 @@ module Hamlit
60
61
 
61
62
  private
62
63
 
63
- def scan_code(scanner)
64
+ def scan_code(scanner, comment_check: false)
64
65
  code = ''
65
66
  loop do
66
67
  code += (scanner.scan(/.+/) || '').strip
@@ -70,15 +71,21 @@ module Hamlit
70
71
  scanner = StringScanner.new(current_line)
71
72
  code += ' '
72
73
  end
73
- remove_comment(code)
74
+ remove_comment(code, comment_check: comment_check)
74
75
  end
75
76
 
76
- def remove_comment(code)
77
+ def remove_comment(code, comment_check: false)
77
78
  result = ''
79
+ with_comment = false
78
80
  Ripper.lex(code).each do |(row, col), type, str|
79
- next if type == :on_comment
81
+ if type == :on_comment
82
+ with_comment = true
83
+ next
84
+ end
80
85
  result += str
81
86
  end
87
+
88
+ return [result, with_comment] if comment_check
82
89
  result
83
90
  end
84
91
 
@@ -1,3 +1,3 @@
1
1
  module Hamlit
2
- VERSION = "0.4.2"
2
+ VERSION = "0.4.3"
3
3
  end
@@ -12,10 +12,12 @@ describe Hamlit::Engine do
12
12
 
13
13
  it 'renders one-line script with comment' do
14
14
  assert_render(<<-HAML, <<-HTML)
15
+ = # comment_only
15
16
  = '#' + "#" # = 3 #
16
17
  = ['#',
17
18
  "#"] # comment
18
19
  HAML
20
+
19
21
  ##
20
22
  ["#", "#"]
21
23
  HTML
@@ -67,6 +67,18 @@ describe Hamlit::Engine do
67
67
  HTML
68
68
  end
69
69
 
70
+ it 'renders empty else statement' do
71
+ assert_render(<<-'HAML', <<-HTML)
72
+ %span
73
+ - if false
74
+ ng
75
+ - else
76
+ HAML
77
+ <span>
78
+ </span>
79
+ HTML
80
+ end
81
+
70
82
  it 'accept if inside if-else' do
71
83
  assert_render(<<-'HAML', <<-HTML)
72
84
  - if false
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hamlit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takashi Kokubun
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-05 00:00:00.000000000 Z
11
+ date: 2015-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: temple