Skip to content

Commit d8e63f6

Browse files
committed
fix liquid handling of tagging
1 parent 40a3fa2 commit d8e63f6

File tree

1 file changed

+33
-10
lines changed

1 file changed

+33
-10
lines changed

lib/coderay/scanners/liquid.rb

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class Liquid < Scanner
1515

1616
FILTER_KEYWORDS = /#{FILTER_WITH_VALUE_KEYWORDS}|textilize|capitalize|downcase|upcase|first|last|sort|map|size|escape_once|escape|strip_html|strip_newlines|newline_to_br/
1717

18-
SELECTOR_KEYWORDS = /in|with|snippet|script|content_item|folder|widget|wrapper|category|asset_folder|asset/
18+
SELECTOR_KEYWORDS = /tagged|in|with|snippet|script|content_item|folder|widget|wrapper|category|asset_folder|asset/
1919

2020
LIQUID_DIRECTIVE_BLOCK = /
2121
{{1,2}%
@@ -74,20 +74,43 @@ def scan_csv_list(encoder, list)
7474
end
7575
end
7676

77+
def scan_key_of_key_value_pair(encoder, options, match)
78+
scan_spaces(encoder)
79+
key = scan(/\w+/)
80+
81+
if key =~ /#{SELECTOR_KEYWORDS}/o
82+
encoder.text_token key, :directive
83+
else
84+
encoder.text_token key, :key
85+
end
86+
end
87+
88+
def scan_value_of_key_value_pair(encoder, options, match)
89+
scan_spaces(encoder)
90+
first_character = peek(1)
91+
92+
if values = scan(/\S+,\S+/)
93+
#match is set, so do nothing else
94+
elsif first_character == '"' || first_character == "'"
95+
values = scan(/#{first_character}.*?#{first_character}/)
96+
else
97+
values = scan(/\S+/)
98+
end
99+
#scan_spaces(encoder)
100+
scan_csv_list(encoder, values)
101+
end
102+
77103
def scan_key_value_pair(encoder, options, match)
78104
scan_spaces(encoder)
79105
if match = check(/#{KEY_VALUE_REGEX}/o)
80-
key = scan(/\w+/)
81-
delimiter, values = scan(/(:)(\S+)|(".*?")|('.*?')/).match(/(:)(\S+)|(".*?")|('.*?')/).captures
82-
83-
if key =~ /#{SELECTOR_KEYWORDS}/o
84-
encoder.text_token key, :directive
85-
else
86-
encoder.text_token key, :key
87-
end
106+
scan_key_of_key_value_pair(encoder, options, match)
88107

108+
delimiter = scan(/:/)
89109
encoder.text_token delimiter, :delimiter
90-
scan_csv_list(encoder, values)
110+
111+
scan_value_of_key_value_pair(encoder, options, match)
112+
113+
scan_spaces(encoder)
91114
true
92115
else
93116
false

0 commit comments

Comments
 (0)