"" "
pygments.lexers.kuin
~~~~~~~~~~~~~~~~~~~~
Lexers for the Kuin language.
:copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE for details.
"" "
from pygments.lexer import RegexLexer, include, using, this, bygroups, words
from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
Number, Punctuation, Whitespace
__all__ = ['KuinLexer' ]
class KuinLexer(RegexLexer):
"" "
For Kuin source code.
"" "
name = 'Kuin'
url = 'https://github.com/kuina/Kuin '
aliases = ['kuin' ]
filenames = ['*.kn' ]
version_added = '2.9'
tokens = {
'root' : [
include('statement' ),
],
'statement' : [
# Whitespace / Comment
include('whitespace' ),
# Block-statement
(r'(\+?)([ \t]*)(\*?)([ \t]*)(\bfunc)([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*)' ,
bygroups(Keyword,Whitespace, Keyword, Whitespace, Keyword,
using(this), Name.Function), 'func_' ),
(r'\b(class)([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*)' ,
bygroups(Keyword, using(this), Name.Class ), 'class_' ),
(r'\b(enum)([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*)' ,
bygroups(Keyword, using(this), Name.Constant), 'enum_' ),
(r'\b(block)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?' ,
bygroups(Keyword, using(this), Name.Other), 'block_' ),
(r'\b(ifdef)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?' ,
bygroups(Keyword, using(this), Name.Other), 'ifdef_' ),
(r'\b(if)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?' ,
bygroups(Keyword, using(this), Name.Other), 'if_' ),
(r'\b(switch)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?' ,
bygroups(Keyword, using(this), Name.Other), 'switch_' ),
(r'\b(while)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?' ,
bygroups(Keyword, using(this), Name.Other), 'while_' ),
(r'\b(for)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?' ,
bygroups(Keyword, using(this), Name.Other), 'for_' ),
(r'\b(foreach)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?' ,
bygroups(Keyword, using(this), Name.Other), 'foreach_' ),
(r'\b(try)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?' ,
bygroups(Keyword, using(this), Name.Other), 'try_' ),
# Line-statement
(r'\b(do)\b' , Keyword, 'do' ),
(r'(\+?[ \t]*\bvar)\b' , Keyword, 'var' ),
(r'\b(const)\b' , Keyword, 'const' ),
(r'\b(ret)\b' , Keyword, 'ret' ),
(r'\b(throw)\b' , Keyword, 'throw' ),
(r'\b(alias)\b' , Keyword, 'alias' ),
(r'\b(assert)\b' , Keyword, 'assert' ),
(r'\|' , Text, 'continued_line' ),
(r'[ \t]*\n' , Whitespace),
],
# Whitespace / Comment
'whitespace' : [
(r'^([ \t]*)(;.*)' , bygroups(Comment.Single, Whitespace)),
(r'[ \t]+(?![; \t])' , Whitespace),
(r'\{' , Comment.Multiline, 'multiline_comment' ),
],
'multiline_comment' : [
(r'\{' , Comment.Multiline, 'multiline_comment' ),
(r'(?:\s*;.*|[^{}\n]+)' , Comment.Multiline),
(r'\n' , Comment.Multiline),
(r'\}' , Comment.Multiline, '#pop'),
],
# Block-statement
'func_' : [
include('expr' ),
(r'\n' , Whitespace, 'func' ),
],
'func' : [
(r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(func)\b' ,
bygroups(Keyword, using(this), Keyword), '#pop:2'),
include('statement' ),
],
'class_' : [
include('expr' ),
(r'\n' , Whitespace, 'class' ),
],
'class' : [
(r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(class)\b' ,
bygroups(Keyword, using(this), Keyword), '#pop:2'),
include('statement' ),
],
'enum_' : [
include('expr' ),
(r'\n' , Whitespace, 'enum' ),
],
'enum' : [
(r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(enum)\b' ,
bygroups(Keyword, using(this), Keyword), '#pop:2'),
include('expr' ),
(r'\n' , Whitespace),
],
'block_' : [
include('expr' ),
(r'\n' , Whitespace, 'block' ),
],
'block' : [
(r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(block)\b' ,
bygroups(Keyword, using(this), Keyword), '#pop:2'),
include('statement' ),
include('break' ),
include('skip' ),
],
'ifdef_' : [
include('expr' ),
(r'\n' , Whitespace, 'ifdef' ),
],
'ifdef' : [
(r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(ifdef)\b' ,
bygroups(Keyword, using(this), Keyword), '#pop:2'),
(words(('rls' , 'dbg' ), prefix=r'\b' , suffix=r'\b' ),
Keyword.Constant, 'ifdef_sp' ),
include('statement' ),
include('break' ),
include('skip' ),
],
'ifdef_sp' : [
include('expr' ),
(r'\n' , Whitespace, '#pop'),
],
'if_' : [
include('expr' ),
(r'\n' , Whitespace, 'if' ),
],
'if' : [
(r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(if)\b' ,
bygroups(Keyword, using(this), Keyword), '#pop:2'),
(words(('elif' , 'else' ), prefix=r'\b' , suffix=r'\b' ), Keyword, 'if_sp' ),
include('statement' ),
include('break' ),
include('skip' ),
],
'if_sp' : [
include('expr' ),
(r'\n' , Whitespace, '#pop'),
],
'switch_' : [
include('expr' ),
(r'\n' , Whitespace, 'switch' ),
],
'switch' : [
(r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(switch)\b' ,
bygroups(Keyword, using(this), Keyword), '#pop:2'),
(words(('case' , 'default' , 'to' ), prefix=r'\b' , suffix=r'\b' ),
Keyword, 'switch_sp' ),
include('statement' ),
include('break' ),
include('skip' ),
],
'switch_sp' : [
include('expr' ),
(r'\n' , Whitespace, '#pop'),
],
'while_' : [
include('expr' ),
(r'\n' , Whitespace, 'while' ),
],
'while' : [
(r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(while)\b' ,
bygroups(Keyword, using(this), Keyword), '#pop:2'),
include('statement' ),
include('break' ),
include('skip' ),
],
'for_' : [
include('expr' ),
(r'\n' , Whitespace, 'for' ),
],
'for' : [
(r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(for)\b' ,
bygroups(Keyword, using(this), Keyword), '#pop:2'),
include('statement' ),
include('break' ),
include('skip' ),
],
'foreach_' : [
include('expr' ),
(r'\n' , Whitespace, 'foreach' ),
],
'foreach' : [
(r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(foreach)\b' ,
bygroups(Keyword, using(this), Keyword), '#pop:2'),
include('statement' ),
include('break' ),
include('skip' ),
],
'try_' : [
include('expr' ),
(r'\n' , Whitespace, 'try' ),
],
'try' : [
(r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(try)\b' ,
bygroups(Keyword, using(this), Keyword), '#pop:2'),
(words(('catch' , 'finally' , 'to' ), prefix=r'\b' , suffix=r'\b' ),
Keyword, 'try_sp' ),
include('statement' ),
include('break' ),
include('skip' ),
],
'try_sp' : [
include('expr' ),
(r'\n' , Whitespace, '#pop'),
],
# Line-statement
'break' : [
(r'\b(break)\b([ \t]+)([a-zA-Z_][0-9a-zA-Z_]*)' ,
bygroups(Keyword, using(this), Name.Other)),
],
'skip' : [
(r'\b(skip)\b([ \t]+)([a-zA-Z_][0-9a-zA-Z_]*)' ,
bygroups(Keyword, using(this), Name.Other)),
],
'alias' : [
include('expr' ),
(r'\n' , Whitespace, '#pop'),
],
'assert' : [
include('expr' ),
(r'\n' , Whitespace, '#pop'),
],
'const' : [
include('expr' ),
(r'\n' , Whitespace, '#pop'),
],
'do' : [
include('expr' ),
(r'\n' , Whitespace, '#pop'),
],
'ret' : [
include('expr' ),
(r'\n' , Whitespace, '#pop'),
],
'throw' : [
include('expr' ),
(r'\n' , Whitespace, '#pop'),
],
'var' : [
include('expr' ),
(r'\n' , Whitespace, '#pop'),
],
'continued_line' : [
include('expr' ),
(r'\n' , Whitespace, '#pop'),
],
'expr' : [
# Whitespace / Comment
include('whitespace' ),
# Punctuation
(r'\(' , Punctuation,),
(r'\)' , Punctuation,),
(r'\[' , Punctuation,),
(r'\]' , Punctuation,),
(r',' , Punctuation),
# Keyword
(words((
'true' , 'false' , 'null' , 'inf'
), prefix=r'\b' , suffix=r'\b' ), Keyword.Constant),
(words((
'me'
), prefix=r'\b' , suffix=r'\b' ), Keyword),
(words((
'bit16' , 'bit32' , 'bit64' , 'bit8' , 'bool' ,
'char' , 'class' , 'dict' , 'enum' , 'float' , 'func' ,
'int' , 'list' , 'queue' , 'stack'
), prefix=r'\b' , suffix=r'\b' ), Keyword.Type),
# Number
(r'\b[0-9]\.[0-9]+(?!\.)(:?e[\+-][0-9]+)?\b' , Number.Float),
(r'\b2#[01]+(?:b(?:8|16|32|64))?\b', Number.Bin),
(r'\b8#[0-7]+(?:b(?:8|16|32|64))?\b', Number.Oct),
(r'\b16#[0-9A-F]+(?:b(?:8|16|32|64))?\b', Number.Hex),
(r'\b[0-9]+(?:b(?:8|16|32|64))?\b' , Number.Decimal),
# String / Char
(r'"' , String.Double, 'string' ),
(r"'(?:\\.|.)+?'" , String.Char),
# Operator
(r'(?:\.|\$(?:>|<)?)' , Operator),
(r'(?:\^)' , Operator),
(r'(?:\+|-|!|##?)', Operator),
(r'(?:\*|/|%)' , Operator),
(r'(?:~)' , Operator),
(r'(?:(?:=|<>)(?:&|\$)?|<=?|>=?)' , Operator),
(r'(?:&)' , Operator),
(r'(?:\|)' , Operator),
(r'(?:\?)' , Operator),
(r'(?::(?::|\+|-|\*|/|%|\^|~)?)' , Operator),
# Identifier
(r"\b([a-zA-Z_][0-9a-zA-Z_]*)(?=@)\b" , Name),
(r"(@)?\b([a-zA-Z_][0-9a-zA-Z_]*)\b" ,
bygroups(Name.Other, Name.Variable)),
],
# String
'string' : [
(r'(?:\\[^{\n]|[^"\\])+' , String.Double),
(r'\\\{' , String.Double, 'toStrInString' ),
(r'"' , String.Double, '#pop'),
],
'toStrInString' : [
include('expr' ),
(r'\}' , String.Double, '#pop'),
],
}
quality 58%
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland