rf-web/vendor/bundle/gems/rouge-3.12.0/lib/rouge/lexers/qml.rb
2019-10-21 10:18:17 +02:00

75 lines
1.9 KiB
Ruby

# -*- coding: utf-8 -*- #
# frozen_string_literal: true
module Rouge
module Lexers
load_lexer 'javascript.rb'
class Qml < Javascript
title "QML"
desc 'QML, a UI markup language'
tag 'qml'
aliases 'qml'
filenames '*.qml'
mimetypes 'application/x-qml', 'text/x-qml'
id_with_dots = /[$a-zA-Z_][a-zA-Z0-9_.]*/
prepend :root do
rule %r/(#{id_with_dots})(\s*)({)/ do
groups Keyword::Type, Text, Punctuation
push :type_block
end
rule %r/(#{id_with_dots})(\s+)(on)(\s+)(#{id_with_dots})(\s*)({)/ do
groups Keyword::Type, Text, Keyword, Text, Name::Label, Text, Punctuation
push :type_block
end
rule %r/[{]/, Punctuation, :push
end
state :type_block do
rule %r/(id)(\s*)(:)(\s*)(#{id_with_dots})/ do
groups Name::Label, Text, Punctuation, Text, Keyword::Declaration
end
rule %r/(#{id_with_dots})(\s*)(:)/ do
groups Name::Label, Text, Punctuation
push :expr_start
end
rule %r/(signal)(\s+)(#{id_with_dots})/ do
groups Keyword::Declaration, Text, Name::Label
push :signal
end
rule %r/(property)(\s+)(#{id_with_dots})(\s+)(#{id_with_dots})(\s*)(:?)/ do
groups Keyword::Declaration, Text, Keyword::Type, Text, Name::Label, Text, Punctuation
push :expr_start
end
rule %r/[}]/, Punctuation, :pop!
mixin :root
end
state :signal do
mixin :comments_and_whitespace
rule %r/\(/ do
token Punctuation
goto :signal_args
end
rule %r//, Text, :pop!
end
state :signal_args do
mixin :comments_and_whitespace
rule %r/(#{id_with_dots})(\s+)(#{id_with_dots})(\s*)(,?)/ do
groups Keyword::Type, Text, Name, Text, Punctuation
end
rule %r/\)/ , Punctuation, :pop!
end
end
end
end