haml 5.2.2 → 7.2.0

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.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +3 -0
  3. data/.github/workflows/release.yml +46 -0
  4. data/.github/workflows/test.yml +13 -15
  5. data/.gitignore +16 -16
  6. data/.yardopts +0 -3
  7. data/CHANGELOG.md +204 -4
  8. data/FAQ.md +1 -1
  9. data/Gemfile +20 -11
  10. data/MIT-LICENSE +1 -1
  11. data/README.md +23 -34
  12. data/REFERENCE.md +100 -171
  13. data/Rakefile +15 -82
  14. data/bin/bench +66 -0
  15. data/bin/console +10 -0
  16. data/bin/ruby +3 -0
  17. data/bin/setup +7 -0
  18. data/bin/stackprof +27 -0
  19. data/bin/test +24 -0
  20. data/exe/haml +6 -0
  21. data/haml.gemspec +39 -39
  22. data/lib/haml/ambles.rb +20 -0
  23. data/lib/haml/attribute_builder.rb +127 -184
  24. data/lib/haml/attribute_compiler.rb +90 -194
  25. data/lib/haml/attribute_parser.rb +92 -126
  26. data/lib/haml/cli.rb +154 -0
  27. data/lib/haml/compiler/children_compiler.rb +155 -0
  28. data/lib/haml/compiler/comment_compiler.rb +51 -0
  29. data/lib/haml/compiler/doctype_compiler.rb +52 -0
  30. data/lib/haml/compiler/script_compiler.rb +114 -0
  31. data/lib/haml/compiler/silent_script_compiler.rb +24 -0
  32. data/lib/haml/compiler/tag_compiler.rb +76 -0
  33. data/lib/haml/compiler.rb +63 -296
  34. data/lib/haml/dynamic_merger.rb +67 -0
  35. data/lib/haml/engine.rb +48 -227
  36. data/lib/haml/error.rb +5 -4
  37. data/lib/haml/escape.rb +13 -0
  38. data/lib/haml/escape_any.rb +21 -0
  39. data/lib/haml/filters/base.rb +12 -0
  40. data/lib/haml/filters/cdata.rb +20 -0
  41. data/lib/haml/filters/coffee.rb +17 -0
  42. data/lib/haml/filters/css.rb +33 -0
  43. data/lib/haml/filters/erb.rb +10 -0
  44. data/lib/haml/filters/escaped.rb +22 -0
  45. data/lib/haml/filters/javascript.rb +33 -0
  46. data/lib/haml/filters/less.rb +20 -0
  47. data/lib/haml/filters/markdown.rb +11 -0
  48. data/lib/haml/filters/plain.rb +29 -0
  49. data/lib/haml/filters/preserve.rb +22 -0
  50. data/lib/haml/filters/ruby.rb +10 -0
  51. data/lib/haml/filters/sass.rb +15 -0
  52. data/lib/haml/filters/scss.rb +15 -0
  53. data/lib/haml/filters/text_base.rb +25 -0
  54. data/lib/haml/filters/tilt_base.rb +59 -0
  55. data/lib/haml/filters.rb +54 -378
  56. data/lib/haml/force_escape.rb +29 -0
  57. data/lib/haml/helpers.rb +3 -697
  58. data/lib/haml/html.rb +22 -0
  59. data/lib/haml/identity.rb +13 -0
  60. data/lib/haml/object_ref.rb +35 -0
  61. data/lib/haml/parser.rb +168 -33
  62. data/lib/haml/rails_helpers.rb +53 -0
  63. data/lib/haml/rails_template.rb +62 -0
  64. data/lib/haml/railtie.rb +3 -46
  65. data/lib/haml/ruby_expression.rb +32 -0
  66. data/lib/haml/string_splitter.rb +140 -0
  67. data/lib/haml/template.rb +15 -34
  68. data/lib/haml/temple_line_counter.rb +2 -1
  69. data/lib/haml/util.rb +21 -17
  70. data/lib/haml/version.rb +1 -2
  71. data/lib/haml/whitespace.rb +8 -0
  72. data/lib/haml.rb +5 -21
  73. metadata +176 -52
  74. data/.gitmodules +0 -3
  75. data/TODO +0 -24
  76. data/benchmark.rb +0 -70
  77. data/bin/haml +0 -9
  78. data/lib/haml/.gitattributes +0 -1
  79. data/lib/haml/buffer.rb +0 -182
  80. data/lib/haml/escapable.rb +0 -77
  81. data/lib/haml/exec.rb +0 -347
  82. data/lib/haml/generator.rb +0 -42
  83. data/lib/haml/helpers/action_view_extensions.rb +0 -60
  84. data/lib/haml/helpers/action_view_mods.rb +0 -132
  85. data/lib/haml/helpers/action_view_xss_mods.rb +0 -60
  86. data/lib/haml/helpers/safe_erubi_template.rb +0 -20
  87. data/lib/haml/helpers/safe_erubis_template.rb +0 -33
  88. data/lib/haml/helpers/xss_mods.rb +0 -114
  89. data/lib/haml/options.rb +0 -273
  90. data/lib/haml/plugin.rb +0 -54
  91. data/lib/haml/sass_rails_filter.rb +0 -47
  92. data/lib/haml/template/options.rb +0 -27
  93. data/lib/haml/temple_engine.rb +0 -124
  94. data/yard/default/.gitignore +0 -1
  95. data/yard/default/fulldoc/html/css/common.sass +0 -15
  96. data/yard/default/layout/html/footer.erb +0 -12
@@ -0,0 +1,140 @@
1
+ # frozen_string_literal: true
2
+ begin
3
+ require 'ripper'
4
+ rescue LoadError
5
+ end
6
+
7
+ module Haml
8
+ # Compile [:dynamic, "foo#{bar}"] to [:multi, [:static, 'foo'], [:dynamic, 'bar']]
9
+ class StringSplitter < Temple::Filter
10
+ if defined?(Ripper) && Ripper.respond_to?(:lex)
11
+ class << self
12
+ # `code` param must be valid string literal
13
+ def compile(code)
14
+ [].tap do |exps|
15
+ tokens = Ripper.lex(code.strip)
16
+ tokens.pop while tokens.last && [:on_comment, :on_sp].include?(tokens.last[1])
17
+
18
+ if tokens.size < 2
19
+ raise(Haml::InternalError, "Expected token size >= 2 but got: #{tokens.size}")
20
+ end
21
+ compile_tokens!(exps, tokens)
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def strip_quotes!(tokens)
28
+ _, type, beg_str = tokens.shift
29
+ if type != :on_tstring_beg
30
+ raise(Haml::InternalError, "Expected :on_tstring_beg but got: #{type}")
31
+ end
32
+
33
+ _, type, end_str = tokens.pop
34
+ if type != :on_tstring_end
35
+ raise(Haml::InternalError, "Expected :on_tstring_end but got: #{type}")
36
+ end
37
+
38
+ [beg_str, end_str]
39
+ end
40
+
41
+ def compile_tokens!(exps, tokens)
42
+ beg_str, end_str = strip_quotes!(tokens)
43
+
44
+ until tokens.empty?
45
+ _, type, str = tokens.shift
46
+
47
+ case type
48
+ when :on_tstring_content
49
+ beg_str, end_str = escape_quotes(beg_str, end_str)
50
+ exps << [:static, eval("#{beg_str}#{str}#{end_str}").to_s]
51
+ when :on_embexpr_beg
52
+ embedded = shift_balanced_embexpr(tokens)
53
+ exps << [:dynamic, embedded] unless embedded.empty?
54
+ end
55
+ end
56
+ end
57
+
58
+ # Some quotes are split-unsafe. Replace such quotes with null characters.
59
+ def escape_quotes(beg_str, end_str)
60
+ case [beg_str[-1], end_str]
61
+ when ['(', ')'], ['[', ']'], ['{', '}']
62
+ [beg_str.sub(/.\z/) { "\0" }, "\0"]
63
+ else
64
+ [beg_str, end_str]
65
+ end
66
+ end
67
+
68
+ def shift_balanced_embexpr(tokens)
69
+ String.new.tap do |embedded|
70
+ embexpr_open = 1
71
+
72
+ until tokens.empty?
73
+ _, type, str = tokens.shift
74
+ case type
75
+ when :on_embexpr_beg
76
+ embexpr_open += 1
77
+ when :on_embexpr_end
78
+ embexpr_open -= 1
79
+ break if embexpr_open == 0
80
+ end
81
+
82
+ embedded << str
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ def on_dynamic(code)
89
+ return [:dynamic, code] unless string_literal?(code)
90
+ return [:dynamic, code] if code.include?("\n")
91
+
92
+ temple = [:multi]
93
+ StringSplitter.compile(code).each do |type, content|
94
+ case type
95
+ when :static
96
+ temple << [:static, content]
97
+ when :dynamic
98
+ temple << on_dynamic(content)
99
+ end
100
+ end
101
+ temple
102
+ end
103
+
104
+ private
105
+
106
+ def string_literal?(code)
107
+ return false if SyntaxChecker.syntax_error?(code)
108
+
109
+ type, instructions = Ripper.sexp(code)
110
+ return false if type != :program
111
+ return false if instructions.size > 1
112
+
113
+ type, _ = instructions.first
114
+ type == :string_literal
115
+ end
116
+
117
+ class SyntaxChecker < Ripper
118
+ class ParseError < StandardError; end
119
+
120
+ def self.syntax_error?(code)
121
+ self.new(code).parse
122
+ false
123
+ rescue ParseError
124
+ true
125
+ end
126
+
127
+ private
128
+
129
+ def on_parse_error(*)
130
+ raise ParseError
131
+ end
132
+ end
133
+ else
134
+ # Do nothing if ripper is unavailable
135
+ def call(ast)
136
+ ast
137
+ end
138
+ end
139
+ end
140
+ end
data/lib/haml/template.rb CHANGED
@@ -1,39 +1,20 @@
1
- # frozen_string_literal: true
2
-
3
- require 'haml/template/options'
4
- if defined?(ActiveSupport)
5
- ActiveSupport.on_load(:action_view) do
6
- require 'haml/helpers/action_view_mods'
7
- require 'haml/helpers/action_view_extensions'
8
- end
9
- else
10
- require 'haml/helpers/action_view_mods'
11
- require 'haml/helpers/action_view_extensions'
12
- end
13
- require 'haml/helpers/xss_mods'
14
- require 'haml/helpers/action_view_xss_mods'
1
+ # frozen_string_literal: false
2
+ require 'temple'
3
+ require 'haml/engine'
4
+ require 'haml/helpers'
15
5
 
16
6
  module Haml
17
- class TempleEngine
18
- def precompiled_method_return_value_with_haml_xss
19
- "::Haml::Util.html_safe(#{precompiled_method_return_value_without_haml_xss})"
7
+ Template = Temple::Templates::Tilt.create(
8
+ Haml::Engine,
9
+ register_as: [:haml, :haml],
10
+ )
11
+
12
+ module TemplateExtension
13
+ # Activate Haml::Helpers for tilt templates.
14
+ # https://github.com/judofyr/temple/blob/v0.7.6/lib/temple/mixins/template.rb#L7-L11
15
+ def compile(*)
16
+ "extend Haml::Helpers; #{super}"
20
17
  end
21
- alias_method :precompiled_method_return_value_without_haml_xss, :precompiled_method_return_value
22
- alias_method :precompiled_method_return_value, :precompiled_method_return_value_with_haml_xss
23
18
  end
24
-
25
- module Helpers
26
- include Haml::Helpers::XssMods
27
- end
28
-
29
- module Util
30
- undef :rails_xss_safe? if defined? rails_xss_safe?
31
- def rails_xss_safe?; true; end
32
- end
33
-
19
+ Template.send(:extend, TemplateExtension)
34
20
  end
35
-
36
-
37
- Haml::Template.options[:escape_html] = true
38
-
39
- require 'haml/plugin'
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  module Haml
4
3
  # A module to count lines of expected code. This would be faster than actual code generation
5
4
  # and counting newlines in it.
@@ -22,6 +21,8 @@ module Haml
22
21
  end.reduce(:+)
23
22
  when :escape
24
23
  count_lines(args[1])
24
+ when :newline
25
+ 1
25
26
  else
26
27
  raise UnexpectedExpression.new("[HAML BUG] Unexpected Temple expression '#{type}' is given!")
27
28
  end
data/lib/haml/util.rb CHANGED
@@ -14,6 +14,24 @@ module Haml
14
14
  module Util
15
15
  extend self
16
16
 
17
+ begin # Ruby 3.2+ or ERB 4+
18
+ require 'erb/escape'
19
+
20
+ define_singleton_method(:escape_html, ERB::Escape.instance_method(:html_escape))
21
+ rescue LoadError
22
+ require 'cgi/escape'
23
+
24
+ def self.escape_html(html)
25
+ CGI.escapeHTML(html.to_s)
26
+ end
27
+ end
28
+
29
+ # TODO: Remove unescape_interpolation's workaround and get rid of `respond_to?`.
30
+ def self.escape_html_safe(html)
31
+ html = html.to_s
32
+ (html.respond_to?(:html_safe?) && html.html_safe?) ? html : escape_html(html)
33
+ end
34
+
17
35
  # Silence all output to STDERR within a block.
18
36
  #
19
37
  # @yield A block in which no output will be printed to STDERR
@@ -35,20 +53,6 @@ module Haml
35
53
  false
36
54
  end
37
55
 
38
- # Returns the given text, marked as being HTML-safe.
39
- # With older versions of the Rails XSS-safety mechanism,
40
- # this destructively modifies the HTML-safety of `text`.
41
- #
42
- # It only works if you are using ActiveSupport or the parameter `text`
43
- # implements the #html_safe method.
44
- #
45
- # @param text [String, nil]
46
- # @return [String, nil] `text`, marked as HTML-safe
47
- def html_safe(text)
48
- return unless text
49
- text.html_safe
50
- end
51
-
52
56
  # Checks that the encoding of a string is valid
53
57
  # and cleans up potential encoding gotchas like the UTF-8 BOM.
54
58
  # If it's not, yields an error string describing the invalid character
@@ -65,7 +69,7 @@ module Haml
65
69
  # Shortcut for UTF-8 which might be the majority case
66
70
  if str.encoding == Encoding::UTF_8
67
71
  return str.gsub(/\A\uFEFF/, '')
68
- elsif str.encoding.name =~ /^UTF-(16|32)(BE|LE)?$/
72
+ elsif /^UTF-(16|32)(BE|LE)?$/.match?(str.encoding.name)
69
73
  return str.gsub(Regexp.new("\\A\uFEFF".encode(str.encoding)), '')
70
74
  else
71
75
  return str
@@ -214,7 +218,7 @@ MSG
214
218
  end
215
219
  content = eval("\"#{interpolated}\"")
216
220
  content = "#{char}#{content}" if char == '@' || char == '$'
217
- content = "Haml::Helpers.html_escape((#{content}))" if escape_html
221
+ content = "Haml::Util.escape_html_safe((#{content}).to_s)" if escape_html
218
222
 
219
223
  res << "\#{#{content}}"
220
224
  end
@@ -248,7 +252,7 @@ MSG
248
252
  # From Ruby's parse.y
249
253
  return unless scanner.scan(/([^\s'":;]+)\s*:\s*("(?:\\.|[^"])*"|[^"\s;]+?)[\s;]*-\*-/n)
250
254
  name, val = scanner[1], scanner[2]
251
- return unless name =~ /(en)?coding/in
255
+ return unless /(en)?coding/in.match?(name)
252
256
  val = $1 if val =~ /^"(.*)"$/n
253
257
  return val
254
258
  ensure
data/lib/haml/version.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  module Haml
4
- VERSION = "5.2.2"
3
+ VERSION = '7.2.0'
5
4
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ module Haml
3
+ class Whitespace < Temple::Filter
4
+ def on_whitespace
5
+ [:static, "\n"]
6
+ end
7
+ end
8
+ end
data/lib/haml.rb CHANGED
@@ -1,25 +1,9 @@
1
1
  # frozen_string_literal: true
2
-
2
+ require 'haml/engine'
3
+ require 'haml/error'
3
4
  require 'haml/version'
5
+ require 'haml/template'
4
6
 
5
- # The module that contains everything Haml-related:
6
- #
7
- # * {Haml::Parser} is Haml's parser.
8
- # * {Haml::Compiler} is Haml's compiler.
9
- # * {Haml::Engine} is the class used to render Haml within Ruby code.
10
- # * {Haml::Options} is where Haml's runtime options are defined.
11
- # * {Haml::Error} is raised when Haml encounters an error.
12
- #
13
- # Also see the {file:REFERENCE.md full Haml reference}.
14
- module Haml
15
-
16
- def self.init_rails(*args)
17
- # Maintain this as a no-op for any libraries that may be depending on the
18
- # previous definition here.
19
- end
20
-
7
+ if File.basename($0) != 'haml'
8
+ require 'haml/railtie' if defined?(Rails::Railtie)
21
9
  end
22
-
23
- require 'haml/util'
24
- require 'haml/engine'
25
- require 'haml/railtie' if defined?(Rails::Railtie)
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haml
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.2
4
+ version: 7.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Natalie Weizenbaum
8
8
  - Hampton Catlin
9
9
  - Norman Clarke
10
10
  - Akira Matsuda
11
- autorequire:
12
- bindir: bin
11
+ - Takashi Kokubun
12
+ bindir: exe
13
13
  cert_chain: []
14
- date: 2021-07-27 00:00:00.000000000 Z
14
+ date: 1980-01-02 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: temple
@@ -19,14 +19,28 @@ dependencies:
19
19
  requirements:
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.8.0
22
+ version: 0.8.2
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 0.8.0
29
+ version: 0.8.2
30
+ - !ruby/object:Gem::Dependency
31
+ name: thor
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
30
44
  - !ruby/object:Gem::Dependency
31
45
  name: tilt
32
46
  requirement: !ruby/object:Gem::Requirement
@@ -42,21 +56,63 @@ dependencies:
42
56
  - !ruby/object:Gem::Version
43
57
  version: '0'
44
58
  - !ruby/object:Gem::Dependency
45
- name: rails
59
+ name: benchmark_driver
60
+ requirement: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ - !ruby/object:Gem::Dependency
73
+ name: bundler
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ - !ruby/object:Gem::Dependency
87
+ name: coffee-script
88
+ requirement: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ type: :development
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ - !ruby/object:Gem::Dependency
101
+ name: erubi
46
102
  requirement: !ruby/object:Gem::Requirement
47
103
  requirements:
48
104
  - - ">="
49
105
  - !ruby/object:Gem::Version
50
- version: 4.0.0
106
+ version: '0'
51
107
  type: :development
52
108
  prerelease: false
53
109
  version_requirements: !ruby/object:Gem::Requirement
54
110
  requirements:
55
111
  - - ">="
56
112
  - !ruby/object:Gem::Version
57
- version: 4.0.0
113
+ version: '0'
58
114
  - !ruby/object:Gem::Dependency
59
- name: rbench
115
+ name: less
60
116
  requirement: !ruby/object:Gem::Requirement
61
117
  requirements:
62
118
  - - ">="
@@ -70,7 +126,21 @@ dependencies:
70
126
  - !ruby/object:Gem::Version
71
127
  version: '0'
72
128
  - !ruby/object:Gem::Dependency
73
- name: minitest
129
+ name: minitest-reporters
130
+ requirement: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - "~>"
133
+ - !ruby/object:Gem::Version
134
+ version: '1.1'
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - "~>"
140
+ - !ruby/object:Gem::Version
141
+ version: '1.1'
142
+ - !ruby/object:Gem::Dependency
143
+ name: rails
74
144
  requirement: !ruby/object:Gem::Requirement
75
145
  requirements:
76
146
  - - ">="
@@ -84,7 +154,49 @@ dependencies:
84
154
  - !ruby/object:Gem::Version
85
155
  version: '4.0'
86
156
  - !ruby/object:Gem::Dependency
87
- name: nokogiri
157
+ name: rake
158
+ requirement: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ type: :development
164
+ prerelease: false
165
+ version_requirements: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ - !ruby/object:Gem::Dependency
171
+ name: sass
172
+ requirement: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
177
+ type: :development
178
+ prerelease: false
179
+ version_requirements: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ - !ruby/object:Gem::Dependency
185
+ name: slim
186
+ requirement: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ type: :development
192
+ prerelease: false
193
+ version_requirements: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ - !ruby/object:Gem::Dependency
199
+ name: string_template
88
200
  requirement: !ruby/object:Gem::Requirement
89
201
  requirements:
90
202
  - - ">="
@@ -98,7 +210,7 @@ dependencies:
98
210
  - !ruby/object:Gem::Version
99
211
  version: '0'
100
212
  - !ruby/object:Gem::Dependency
101
- name: simplecov
213
+ name: unindent
102
214
  requirement: !ruby/object:Gem::Requirement
103
215
  requirements:
104
216
  - - ">="
@@ -111,12 +223,7 @@ dependencies:
111
223
  - - ">="
112
224
  - !ruby/object:Gem::Version
113
225
  version: '0'
114
- description: |
115
- Haml (HTML Abstraction Markup Language) is a layer on top of HTML or XML that's
116
- designed to express the structure of documents in a non-repetitive, elegant, and
117
- easy way by using indentation rather than closing tags and allowing Ruby to be
118
- embedded with ease. It was originally envisioned as a plugin for Ruby on Rails,
119
- but it can function as a stand-alone templating engine.
226
+ description: An elegant, structured (X)HTML/XML templating engine.
120
227
  email:
121
228
  - haml@googlegroups.com
122
229
  - ronnie@dio.jp
@@ -125,9 +232,10 @@ executables:
125
232
  extensions: []
126
233
  extra_rdoc_files: []
127
234
  files:
235
+ - ".github/FUNDING.yml"
236
+ - ".github/workflows/release.yml"
128
237
  - ".github/workflows/test.yml"
129
238
  - ".gitignore"
130
- - ".gitmodules"
131
239
  - ".yardopts"
132
240
  - CHANGELOG.md
133
241
  - FAQ.md
@@ -136,55 +244,72 @@ files:
136
244
  - README.md
137
245
  - REFERENCE.md
138
246
  - Rakefile
139
- - TODO
140
- - benchmark.rb
141
- - bin/haml
247
+ - bin/bench
248
+ - bin/console
249
+ - bin/ruby
250
+ - bin/setup
251
+ - bin/stackprof
252
+ - bin/test
253
+ - exe/haml
142
254
  - haml.gemspec
143
255
  - lib/haml.rb
144
- - lib/haml/.gitattributes
256
+ - lib/haml/ambles.rb
145
257
  - lib/haml/attribute_builder.rb
146
258
  - lib/haml/attribute_compiler.rb
147
259
  - lib/haml/attribute_parser.rb
148
- - lib/haml/buffer.rb
260
+ - lib/haml/cli.rb
149
261
  - lib/haml/compiler.rb
262
+ - lib/haml/compiler/children_compiler.rb
263
+ - lib/haml/compiler/comment_compiler.rb
264
+ - lib/haml/compiler/doctype_compiler.rb
265
+ - lib/haml/compiler/script_compiler.rb
266
+ - lib/haml/compiler/silent_script_compiler.rb
267
+ - lib/haml/compiler/tag_compiler.rb
268
+ - lib/haml/dynamic_merger.rb
150
269
  - lib/haml/engine.rb
151
270
  - lib/haml/error.rb
152
- - lib/haml/escapable.rb
153
- - lib/haml/exec.rb
271
+ - lib/haml/escape.rb
272
+ - lib/haml/escape_any.rb
154
273
  - lib/haml/filters.rb
155
- - lib/haml/generator.rb
274
+ - lib/haml/filters/base.rb
275
+ - lib/haml/filters/cdata.rb
276
+ - lib/haml/filters/coffee.rb
277
+ - lib/haml/filters/css.rb
278
+ - lib/haml/filters/erb.rb
279
+ - lib/haml/filters/escaped.rb
280
+ - lib/haml/filters/javascript.rb
281
+ - lib/haml/filters/less.rb
282
+ - lib/haml/filters/markdown.rb
283
+ - lib/haml/filters/plain.rb
284
+ - lib/haml/filters/preserve.rb
285
+ - lib/haml/filters/ruby.rb
286
+ - lib/haml/filters/sass.rb
287
+ - lib/haml/filters/scss.rb
288
+ - lib/haml/filters/text_base.rb
289
+ - lib/haml/filters/tilt_base.rb
290
+ - lib/haml/force_escape.rb
156
291
  - lib/haml/helpers.rb
157
- - lib/haml/helpers/action_view_extensions.rb
158
- - lib/haml/helpers/action_view_mods.rb
159
- - lib/haml/helpers/action_view_xss_mods.rb
160
- - lib/haml/helpers/safe_erubi_template.rb
161
- - lib/haml/helpers/safe_erubis_template.rb
162
- - lib/haml/helpers/xss_mods.rb
163
- - lib/haml/options.rb
292
+ - lib/haml/html.rb
293
+ - lib/haml/identity.rb
294
+ - lib/haml/object_ref.rb
164
295
  - lib/haml/parser.rb
165
- - lib/haml/plugin.rb
296
+ - lib/haml/rails_helpers.rb
297
+ - lib/haml/rails_template.rb
166
298
  - lib/haml/railtie.rb
167
- - lib/haml/sass_rails_filter.rb
299
+ - lib/haml/ruby_expression.rb
300
+ - lib/haml/string_splitter.rb
168
301
  - lib/haml/template.rb
169
- - lib/haml/template/options.rb
170
- - lib/haml/temple_engine.rb
171
302
  - lib/haml/temple_line_counter.rb
172
303
  - lib/haml/util.rb
173
304
  - lib/haml/version.rb
174
- - yard/default/.gitignore
175
- - yard/default/fulldoc/html/css/common.sass
176
- - yard/default/layout/html/footer.erb
177
- homepage: http://haml.info/
305
+ - lib/haml/whitespace.rb
306
+ homepage: https://haml.info
178
307
  licenses:
179
308
  - MIT
180
309
  metadata:
181
- bug_tracker_uri: https://github.com/haml/haml/issues
182
- changelog_uri: https://github.com/haml/haml/blob/main/CHANGELOG.md
183
- documentation_uri: http://haml.info/docs.html
184
- homepage_uri: http://haml.info
185
- mailing_list_uri: https://groups.google.com/forum/?fromgroups#!forum/haml
310
+ rubygems_mfa_required: 'true'
311
+ changelog_uri: https://github.com/haml/haml/releases
186
312
  source_code_uri: https://github.com/haml/haml
187
- post_install_message:
188
313
  rdoc_options: []
189
314
  require_paths:
190
315
  - lib
@@ -192,15 +317,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
192
317
  requirements:
193
318
  - - ">="
194
319
  - !ruby/object:Gem::Version
195
- version: 2.0.0
320
+ version: 3.2.0
196
321
  required_rubygems_version: !ruby/object:Gem::Requirement
197
322
  requirements:
198
323
  - - ">="
199
324
  - !ruby/object:Gem::Version
200
325
  version: '0'
201
326
  requirements: []
202
- rubygems_version: 3.1.4
203
- signing_key:
327
+ rubygems_version: 3.6.7
204
328
  specification_version: 4
205
329
  summary: An elegant, structured (X)HTML/XML templating engine.
206
330
  test_files: []
data/.gitmodules DELETED
@@ -1,3 +0,0 @@
1
- [submodule "test/haml-spec"]
2
- path = test/haml-spec
3
- url = git://github.com/haml/haml-spec.git