File: C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/rouge-3.26.1/lib/rouge/lexers/ocl.rb
module Rouge
module Lexers
class OCL < RegexLexer
title "OCL"
desc "OMG Object Constraint Language (omg.org/spec/OCL)"
tag 'ocl'
aliases 'OCL'
filenames '*.ocl'
mimetypes 'text/x-ocl'
def self.keywords
@keywords ||= Set.new %w(
context pre post inv init body def derive if then else endif import
package endpackage let in
)
end
def self.keywords_type
@keywords_type ||= Set.new %w(
Boolean Integer UnlimitedNatural Real String OrderedSet Tuple Bag Set
Sequence OclInvalid OclVoid TupleType OclState Collection OclMessage
)
end
def self.builtins
@builtins ||= Set.new %w(
self null result true false invalid @pre
)
end
def self.operators
@operators ||= Set.new %w(
or xor and not implies
)
end
def self.functions
@functions ||= Set.new %w(
oclAsSet oclIsNew oclIsUndefined oclIsInvalid oclAsType oclIsTypeOf
oclIsKindOf oclInState oclType oclLocale hasReturned result
isSignalSent isOperationCallabs floor round max min toString div mod
size substring concat toInteger toReal toUpperCase toLowerCase
indexOf equalsIgnoreCase at characters toBoolean includes excludes
count includesAll excludesAll isEmpty notEmpty sum product
selectByKind selectByType asBag asSequence asOrderedSet asSet flatten
union intersection including excluding symmetricDifferencecount
append prepend insertAt subOrderedSet first last reverse subSequence
any closure collect collectNested exists forAll isUnique iterate one
reject select sortedBy allInstances average conformsTo
)
end
state :single_string do
rule %r/\\./, Str::Escape
rule %r/'/, Str::Single, :pop!
rule %r/[^\\']+/, Str::Single
end
state :root do
rule %r/\s+/m, Text
rule %r/--.*/, Comment::Single
rule %r/\d+/, Num::Integer
rule %r/'/, Str::Single, :single_string
rule %r([->|+*/<>=~!@#%&|?^-]), Operator
rule %r/[;:()\[\],.]/, Punctuation
rule %r/\w[\w\d]*/ do |m|
if self.class.operators.include? m[0]
token Operator
elsif self.class.keywords_type.include? m[0]
token Keyword::Declaration
elsif self.class.keywords.include? m[0]
token Keyword
elsif self.class.builtins.include? m[0]
token Name::Builtin
elsif self.class.functions.include? m[0]
token Name::Function
else
token Name
end
end
end
end
end
end