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

95 lines
2.5 KiB
Ruby

# -*- coding: utf-8 -*- #
# frozen_string_literal: true
module Rouge
module Lexers
class Pony < RegexLexer
tag 'pony'
filenames '*.pony'
keywords = Set.new %w(
actor addressof and as
be break
class compiler_intrinsic consume continue
do
else elseif embed end error
for fun
if ifdef in interface is isnt
lambda let
match
new not
object
primitive
recover repeat return
struct
then this trait try type
until use
var
where while with
)
capabilities = Set.new %w(
box iso ref tag trn val
)
types = Set.new %w(
Number Signed Unsigned Float
I8 I16 I32 I64 I128 U8 U32 U64 U128 F32 F64
EventID Align IntFormat NumberPrefix FloatFormat
Type
)
state :whitespace do
rule %r/\s+/m, Text
end
state :root do
mixin :whitespace
rule %r/"""/, Str::Doc, :docstring
rule %r{//(.*?)\n}, Comment::Single
rule %r{/(\\\n)?[*](.|\n)*?[*](\\\n)?/}, Comment::Multiline
rule %r/"/, Str, :string
rule %r([~!%^&*+=\|?:<>/-]), Operator
rule %r/(true|false|NULL)\b/, Name::Constant
rule %r{(?:[A-Z_][a-zA-Z0-9_]*)}, Name::Class
rule %r/[()\[\],.';]/, Punctuation
# Numbers
rule %r/0[xX]([0-9a-fA-F_]*\.[0-9a-fA-F_]+|[0-9a-fA-F_]+)[pP][+\-]?[0-9_]+[fFL]?[i]?/, Num::Float
rule %r/[0-9_]+(\.[0-9_]+[eE][+\-]?[0-9_]+|\.[0-9_]*|[eE][+\-]?[0-9_]+)[fFL]?[i]?/, Num::Float
rule %r/\.(0|[1-9][0-9_]*)([eE][+\-]?[0-9_]+)?[fFL]?[i]?/, Num::Float
rule %r/0[xX][0-9a-fA-F_]+/, Num::Hex
rule %r/(0|[1-9][0-9_]*)([LUu]|Lu|LU|uL|UL)?/, Num::Integer
rule %r/[a-z_][a-z0-9_]*/io do |m|
match = m[0]
if capabilities.include?(match)
token Keyword::Declaration
elsif keywords.include?(match)
token Keyword::Reserved
elsif types.include?(match)
token Keyword::Type
else
token Name
end
end
end
state :string do
rule %r/"/, Str, :pop!
rule %r/\\([\\abfnrtv"']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})/, Str::Escape
rule %r/[^\\"\n]+/, Str
rule %r/\\\n/, Str
rule %r/\\/, Str # stray backslash
end
state :docstring do
rule %r/"""/, Str::Doc, :pop!
rule %r/\n/, Str::Doc
rule %r/./, Str::Doc
end
end
end
end