lib/rouge/lexers/liquid.rb in rouge-3.10.0 vs lib/rouge/lexers/liquid.rb in rouge-3.11.0

- old
+ new

@@ -10,97 +10,89 @@ filenames '*.liquid' state :root do rule %r/[^\{]+/, Text - rule %r/(\{%)(\s*)/ do + rule %r/(\{%-?)(\s*)/ do groups Punctuation, Text::Whitespace push :tag_or_block end - rule %r/(\{\{)(\s*)/ do + rule %r/(\{\{-?)(\s*)/ do groups Punctuation, Text::Whitespace push :output end rule %r/\{/, Text end state :tag_or_block do # builtin logic blocks - rule %r/(if|unless|elsif|case)(?=\s+)/, Keyword::Reserved, :condition + rule %r/(if|elsif|unless|case)\b/, Keyword::Reserved, :condition + rule %r/(when)\b/, Keyword::Reserved, :when - rule %r/(when)(\s+)/ do - groups Keyword::Reserved, Text::Whitespace - push :when - end - - rule %r/(else)(\s*)(%\})/ do + rule %r/(else)(\s*)(-?%\})/ do groups Keyword::Reserved, Text::Whitespace, Punctuation pop! end # other builtin blocks - rule %r/(capture)(\s+)([^\s%]+)(\s*)(%\})/ do - groups Name::Tag, Text::Whitespace, Name::Attribute, Text::Whitespace, Punctuation + rule %r/(capture|(?:in|de)crement)(\s+)([^\s%]+)(\s*)(-?%\})/ do + groups Name::Tag, Text::Whitespace, Name::Variable, Text::Whitespace, Punctuation pop! end - rule %r/(comment)(\s*)(%\})/ do + rule %r/(comment)(\s*)(-?%\})/ do groups Name::Tag, Text::Whitespace, Punctuation push :comment end - rule %r/(raw)(\s*)(%\})/ do + rule %r/(raw)(\s*)(-?%\})/ do groups Name::Tag, Text::Whitespace, Punctuation push :raw end - rule %r/assign/, Name::Tag, :assign - rule %r/include/, Name::Tag, :include - # end of block - rule %r/(end(?:case|unless|if))(\s*)(%\})/ do + rule %r/(end(?:if|unless|case))(\s*)(-?%\})/ do groups Keyword::Reserved, Text::Whitespace, Punctuation pop! end - rule %r/(end(?:[^\s%]+))(\s*)(%\})/ do + rule %r/(end(?:[^\s%]+))(\s*)(-?%\})/ do groups Name::Tag, Text::Whitespace, Punctuation pop! end # builtin tags - rule %r/(cycle)(\s+)(([^\s:]*)(:))?(\s*)/ do |m| - token Name::Tag, m[1] - token Text::Whitespace, m[2] + rule %r/(assign|echo)\b/, Name::Tag, :assign + rule %r/(include|render)\b/, Name::Tag, :include - if m[4] =~ /'[^']*'/ - token Str::Single, m[4] - elsif m[4] =~ /"[^"]*"/ - token Str::Double, m[4] - else - token Name::Attribute, m[4] - end + rule %r/(cycle)(\s+)(?:([^\s:]*)(\s*)(:))?(\s*)/ do |m| + token_class = case m[3] + when %r/'[^']*'/ then Str::Single + when %r/"[^"]*"/ then Str::Double + else + Name::Attribute + end - token Punctuation, m[5] - token Text::Whitespace, m[6] + groups Name::Tag, Text::Whitespace, token_class, + Text::Whitespace, Punctuation, Text::Whitespace push :variable_tag_markup end # iteration rule %r/ - (for)(\s+) + (for|tablerow)(\s+) ([\w-]+)(\s+) (in)(\s+) ( - (?: [^\s,\|'"] | (?:"[^"]*"|'[^']*') )+ + (?: [^\s%,\|'"] | (?:"[^"]*"|'[^']*') )+ )(\s*) /x do |m| groups Name::Tag, Text::Whitespace, Name::Variable, Text::Whitespace, - Keyword::Reserved, Text::Whitespace + Name::Tag, Text::Whitespace token_class = case m[7] when %r/'[^']*'/ then Str::Single when %r/"[^"]*"/ then Str::Double else @@ -117,109 +109,80 @@ push :tag_markup end end state :output do - mixin :whitespace - mixin :generic + rule %r/(\|)(\s*)([a-zA-Z_][^\s}\|:]*)/ do + groups Punctuation, Text::Whitespace, Name::Function + push :filters + end - rule %r/\}\}/, Punctuation, :pop! - rule %r/\|/, Punctuation, :filters + mixin :end_of_tag + mixin :generic end state :filters do - mixin :whitespace - - rule(/\}\}/) { token Punctuation; reset_stack } - - rule %r/([^\s\|:]+)(:?)(\s*)/ do - groups Name::Function, Punctuation, Text::Whitespace - push :filter_markup + rule %r/(\|)(\s*)([a-zA-Z_][^\s%}\|:]*)/ do + groups Punctuation, Text::Whitespace, Name::Function end - end - state :filter_markup do - rule %r/\|/, Punctuation, :pop! - mixin :end_of_tag mixin :end_of_block - mixin :default_param_markup + mixin :variable_param_markup end state :condition do - mixin :end_of_block - mixin :whitespace + rule %r/([=!]=|[<>]=?)/, Operator + rule %r/(and|or|contains)\b/, Operator::Word - rule %r/([=!><]=?)/, Operator - - rule %r/\b(?:(!)|(not\b))/ do - groups Operator, Operator::Word - end - - rule %r/(contains)/, Operator::Word - + mixin :end_of_block mixin :generic - mixin :whitespace end state :when do mixin :end_of_block - mixin :whitespace mixin :generic end - state :operator do - rule %r/(\s*)((?:=|!|>|<)=?)(\s*)/ do - groups Text::Whitespace, Operator, Text::Whitespace - pop! - end - - rule %r/(\s*)(\bcontains\b)(\s*)/ do - groups Text::Whitespace, Operator::Word, Text::Whitespace - pop! - end - end - state :end_of_tag do - rule(/\}\}/) { token Punctuation; reset_stack } + rule(/-?\}\}/) { token Punctuation; reset_stack } end state :end_of_block do - rule(/%\}/) { token Punctuation; reset_stack } + rule(/-?%\}/) { token Punctuation; reset_stack } end # states for unknown markup state :param_markup do mixin :whitespace + mixin :keyword mixin :string + mixin :number rule %r/([^\s=:]+)(\s*)(=|:)/ do groups Name::Attribute, Text::Whitespace, Operator end - rule %r/(\{\{)(\s*)([^\s\}])(\s*)(\}\})/ do - groups Punctuation, Text::Whitespace, Text, Text::Whitespace, Punctuation - end - - mixin :number - mixin :keyword - - rule %r/,/, Punctuation + rule %r/[,:]/, Punctuation end state :default_param_markup do mixin :param_markup - rule %r/./, Text + + rule %r/\S+/, Text end state :variable_param_markup do mixin :param_markup mixin :variable - rule %r/./, Text + + rule %r/\S+/, Text end state :tag_markup do + rule %r/(reversed)\b/, Name::Attribute + mixin :end_of_block mixin :default_param_markup end state :variable_tag_markup do @@ -227,85 +190,96 @@ mixin :variable_param_markup end # states for different values types state :keyword do - rule %r/\b(false|true)\b/, Keyword::Constant + rule %r/(false|true|nil)\b/, Keyword::Constant end state :variable do - rule %r/\.(?=\w)/, Punctuation - rule %r/[a-zA-Z_]\w*\??/, Name::Variable + rule %r/(empty|blank|forloop\.[^\s%}\|:]+)\b/, Name::Builtin + rule %r/\.(?=\w)|\[|\]/, Punctuation + rule %r/(first|last|size)\b/, Name::Function + rule %r/[a-zA-Z_][\w-]*\??/, Name::Variable end state :string do rule %r/'[^']*'/, Str::Single rule %r/"[^"]*"/, Str::Double end state :number do + rule %r/-/, Operator rule %r/\d+\.\d+/, Num::Float rule %r/\d+/, Num::Integer end - state :array_index do - rule %r/\[/, Punctuation - rule %r/\]/, Punctuation - end - state :generic do - mixin :array_index + mixin :whitespace mixin :keyword mixin :string - mixin :variable mixin :number + mixin :variable end state :whitespace do rule %r/[ \t]+/, Text::Whitespace end state :comment do - rule %r/(\{%)(\s*)(endcomment)(\s*)(%\})/ do + rule %r/[^\{]+/, Comment + + rule %r/(\{%-?)(\s*)(endcomment)(\s*)(-?%\})/ do groups Punctuation, Text::Whitespace, Name::Tag, Text::Whitespace, Punctuation reset_stack end - rule %r/./, Comment + rule %r/\{/, Comment end state :raw do rule %r/[^\{]+/, Text - rule %r/(\{%)(\s*)(endraw)(\s*)(%\})/ do + rule %r/(\{%-?)(\s*)(endraw)(\s*)(-?%\})/ do groups Punctuation, Text::Whitespace, Name::Tag, Text::Whitespace, Punctuation reset_stack end rule %r/\{/, Text end state :assign do - mixin :whitespace - mixin :end_of_block + rule %r/=/, Operator - rule %r/(\s*)(=)(\s*)/ do - groups Text::Whitespace, Operator, Text::Whitespace + rule %r/(\|)(\s*)([a-zA-Z_][^\s%\|:]*)/ do + groups Punctuation, Text::Whitespace, Name::Function + push :filters end - rule %r/\|/, Punctuation, :filters - + mixin :end_of_block mixin :generic end state :include do - mixin :whitespace - - rule %r/([^\.]+)(\.)(html|liquid)/ do - groups Name::Attribute, Punctuation, Name::Attribute + rule %r/(\{\{-?)(\s*)/ do + groups Punctuation, Text::Whitespace + push :output_embed end + rule %r/(with|for)\b/, Name::Tag + rule %r/[^\s\.]+(\.[^\s\.]+)+\b/, Name::Other + mixin :variable_tag_markup + end + + state :output_embed do + rule %r/(\|)(\s*)([a-zA-Z_][^\s}\|:]*)/ do + groups Punctuation, Text::Whitespace, Name::Function + end + + rule %r/-?\}\}/, Punctuation, :pop! + + mixin :variable_param_markup end end end end