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.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +3 -0
- data/.github/workflows/release.yml +46 -0
- data/.github/workflows/test.yml +13 -15
- data/.gitignore +16 -16
- data/.yardopts +0 -3
- data/CHANGELOG.md +204 -4
- data/FAQ.md +1 -1
- data/Gemfile +20 -11
- data/MIT-LICENSE +1 -1
- data/README.md +23 -34
- data/REFERENCE.md +100 -171
- data/Rakefile +15 -82
- data/bin/bench +66 -0
- data/bin/console +10 -0
- data/bin/ruby +3 -0
- data/bin/setup +7 -0
- data/bin/stackprof +27 -0
- data/bin/test +24 -0
- data/exe/haml +6 -0
- data/haml.gemspec +39 -39
- data/lib/haml/ambles.rb +20 -0
- data/lib/haml/attribute_builder.rb +127 -184
- data/lib/haml/attribute_compiler.rb +90 -194
- data/lib/haml/attribute_parser.rb +92 -126
- data/lib/haml/cli.rb +154 -0
- data/lib/haml/compiler/children_compiler.rb +155 -0
- data/lib/haml/compiler/comment_compiler.rb +51 -0
- data/lib/haml/compiler/doctype_compiler.rb +52 -0
- data/lib/haml/compiler/script_compiler.rb +114 -0
- data/lib/haml/compiler/silent_script_compiler.rb +24 -0
- data/lib/haml/compiler/tag_compiler.rb +76 -0
- data/lib/haml/compiler.rb +63 -296
- data/lib/haml/dynamic_merger.rb +67 -0
- data/lib/haml/engine.rb +48 -227
- data/lib/haml/error.rb +5 -4
- data/lib/haml/escape.rb +13 -0
- data/lib/haml/escape_any.rb +21 -0
- data/lib/haml/filters/base.rb +12 -0
- data/lib/haml/filters/cdata.rb +20 -0
- data/lib/haml/filters/coffee.rb +17 -0
- data/lib/haml/filters/css.rb +33 -0
- data/lib/haml/filters/erb.rb +10 -0
- data/lib/haml/filters/escaped.rb +22 -0
- data/lib/haml/filters/javascript.rb +33 -0
- data/lib/haml/filters/less.rb +20 -0
- data/lib/haml/filters/markdown.rb +11 -0
- data/lib/haml/filters/plain.rb +29 -0
- data/lib/haml/filters/preserve.rb +22 -0
- data/lib/haml/filters/ruby.rb +10 -0
- data/lib/haml/filters/sass.rb +15 -0
- data/lib/haml/filters/scss.rb +15 -0
- data/lib/haml/filters/text_base.rb +25 -0
- data/lib/haml/filters/tilt_base.rb +59 -0
- data/lib/haml/filters.rb +54 -378
- data/lib/haml/force_escape.rb +29 -0
- data/lib/haml/helpers.rb +3 -697
- data/lib/haml/html.rb +22 -0
- data/lib/haml/identity.rb +13 -0
- data/lib/haml/object_ref.rb +35 -0
- data/lib/haml/parser.rb +168 -33
- data/lib/haml/rails_helpers.rb +53 -0
- data/lib/haml/rails_template.rb +62 -0
- data/lib/haml/railtie.rb +3 -46
- data/lib/haml/ruby_expression.rb +32 -0
- data/lib/haml/string_splitter.rb +140 -0
- data/lib/haml/template.rb +15 -34
- data/lib/haml/temple_line_counter.rb +2 -1
- data/lib/haml/util.rb +21 -17
- data/lib/haml/version.rb +1 -2
- data/lib/haml/whitespace.rb +8 -0
- data/lib/haml.rb +5 -21
- metadata +176 -52
- data/.gitmodules +0 -3
- data/TODO +0 -24
- data/benchmark.rb +0 -70
- data/bin/haml +0 -9
- data/lib/haml/.gitattributes +0 -1
- data/lib/haml/buffer.rb +0 -182
- data/lib/haml/escapable.rb +0 -77
- data/lib/haml/exec.rb +0 -347
- data/lib/haml/generator.rb +0 -42
- data/lib/haml/helpers/action_view_extensions.rb +0 -60
- data/lib/haml/helpers/action_view_mods.rb +0 -132
- data/lib/haml/helpers/action_view_xss_mods.rb +0 -60
- data/lib/haml/helpers/safe_erubi_template.rb +0 -20
- data/lib/haml/helpers/safe_erubis_template.rb +0 -33
- data/lib/haml/helpers/xss_mods.rb +0 -114
- data/lib/haml/options.rb +0 -273
- data/lib/haml/plugin.rb +0 -54
- data/lib/haml/sass_rails_filter.rb +0 -47
- data/lib/haml/template/options.rb +0 -27
- data/lib/haml/temple_engine.rb +0 -124
- data/yard/default/.gitignore +0 -1
- data/yard/default/fulldoc/html/css/common.sass +0 -15
- 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:
|
|
2
|
-
|
|
3
|
-
require 'haml/
|
|
4
|
-
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
|
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::
|
|
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
|
|
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
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
|
-
|
|
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:
|
|
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
|
-
|
|
12
|
-
bindir:
|
|
11
|
+
- Takashi Kokubun
|
|
12
|
+
bindir: exe
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date:
|
|
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.
|
|
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.
|
|
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:
|
|
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:
|
|
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:
|
|
113
|
+
version: '0'
|
|
58
114
|
- !ruby/object:Gem::Dependency
|
|
59
|
-
name:
|
|
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:
|
|
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:
|
|
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
|
-
-
|
|
140
|
-
-
|
|
141
|
-
- bin/
|
|
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
|
|
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/
|
|
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/
|
|
153
|
-
- lib/haml/
|
|
271
|
+
- lib/haml/escape.rb
|
|
272
|
+
- lib/haml/escape_any.rb
|
|
154
273
|
- lib/haml/filters.rb
|
|
155
|
-
- lib/haml/
|
|
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/
|
|
158
|
-
- lib/haml/
|
|
159
|
-
- lib/haml/
|
|
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/
|
|
296
|
+
- lib/haml/rails_helpers.rb
|
|
297
|
+
- lib/haml/rails_template.rb
|
|
166
298
|
- lib/haml/railtie.rb
|
|
167
|
-
- lib/haml/
|
|
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
|
-
-
|
|
175
|
-
|
|
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
|
-
|
|
182
|
-
changelog_uri: https://github.com/haml/haml/
|
|
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
|
|
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.
|
|
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