This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
# -*- coding: utf-8 -*- #
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Rouge
|
||||
module Lexers
|
||||
class Eiffel < RegexLexer
|
||||
title "Eiffel"
|
||||
desc "Eiffel programming language"
|
||||
|
||||
tag 'eiffel'
|
||||
filenames '*.e'
|
||||
mimetypes 'text/x-eiffel'
|
||||
|
||||
LanguageKeywords = %w(
|
||||
across agent alias all and attached as assign attribute check
|
||||
class convert create debug deferred detachable do else elseif end
|
||||
ensure expanded export external feature from frozen if implies inherit
|
||||
inspect invariant like local loop not note obsolete old once or
|
||||
Precursor redefine rename require rescue retry select separate
|
||||
some then undefine until variant Void when xor
|
||||
)
|
||||
|
||||
BooleanConstants = %w(True False)
|
||||
|
||||
LanguageVariables = %w(Current Result)
|
||||
|
||||
SimpleString = /(?:[^"%\b\f\v]|%[A-DFHLNQR-V%'"()<>]|%\/(?:0[xX][\da-fA-F](?:_*[\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\d(?:_*\d)*)\/)+?/
|
||||
|
||||
state :root do
|
||||
rule %r/"\[/, Str::Other, :aligned_verbatim_string
|
||||
rule %r/"\{/, Str::Other, :non_aligned_verbatim_string
|
||||
rule %r/"(?:[^%\b\f\n\r\v]|%[A-DFHLNQR-V%'"()<>]|%\/(?:0[xX][\da-fA-F](?:_*[\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\d(?:_*\d)*)\/)*?"/, Str::Double
|
||||
rule %r/--.*/, Comment::Single
|
||||
rule %r/'(?:[^%\b\f\n\r\t\v]|%[A-DFHLNQR-V%'"()<>]|%\/(?:0[xX][\da-fA-F](?:_*[\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\d(?:_*\d)*)\/)'/, Str::Char
|
||||
|
||||
rule %r/(?:#{LanguageKeywords.join('|')})\b/, Keyword
|
||||
rule %r/(?:#{LanguageVariables.join('|')})\b/, Keyword::Variable
|
||||
rule %r/(?:#{BooleanConstants.join('|')})\b/, Keyword::Constant
|
||||
|
||||
rule %r/\b0[xX][\da-fA-F](?:_*[\da-fA-F])*b/, Num::Hex
|
||||
rule %r/\b0[cC][0-7](?:_*[0-7])*\b/, Num::Oct
|
||||
rule %r/\b0[bB][01](?:_*[01])*\b/, Num::Bin
|
||||
rule %r/\d(?:_*\d)*/, Num::Integer
|
||||
rule %r/(?:\d(?:_*\d)*)?\.(?:(?:\d(?:_*\d)*)?[eE][+-]?)?\d(?:_*\d)*|\d(?:_*\d)*\.?/, Num::Float
|
||||
|
||||
rule %r/:=|<<|>>|\(\||\|\)|->|\.|[{}\[\];(),:?]/, Punctuation::Indicator
|
||||
rule %r/\\\\|\|\.\.\||\.\.|\/[~\/]?|[><\/]=?|[-+*^=~≤≥−∀∃¦⟳⟲]/, Operator
|
||||
|
||||
rule %r/[A-Z][\dA-Z_]*/, Name::Class
|
||||
rule %r/[A-Za-z][\dA-Za-z_]*/, Name
|
||||
rule %r/\s+/, Text
|
||||
end
|
||||
|
||||
state :aligned_verbatim_string do
|
||||
rule %r/]"/, Str::Other, :pop!
|
||||
rule SimpleString, Str::Other
|
||||
end
|
||||
|
||||
state :non_aligned_verbatim_string do
|
||||
rule %r/}"/, Str::Other, :pop!
|
||||
rule SimpleString, Str::Other
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user