# -*- coding: utf-8 -*- """ pygments.lexers.clean ~~~~~~~~~~~~~~~~~~~~~ Lexer for the Clean language. :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS. :license: BSD, see LICENSE for details. """ from pygments.lexer import ExtendedRegexLexer, LexerContext, \ bygroups, words, include, default from pygments.token import Comment, Keyword, Literal, Name, Number, Operator, \ Punctuation, String, Text, Whitespace __all__ = ['CleanLexer'] class CleanLexer(ExtendedRegexLexer): """ Lexer for the general purpose, state-of-the-art, pure and lazy functional programming language Clean (http://clean.cs.ru.nl/Clean). .. versionadded: 2.2 """ name = 'Clean' aliases = ['clean'] filenames = ['*.icl', '*.dcl'] def get_tokens_unprocessed(self, text=None, context=None): ctx = LexerContext(text, 0) ctx.indent = 0 return ExtendedRegexLexer.get_tokens_unprocessed(self, text, context=ctx) def check_class_not_import(lexer, match, ctx): if match.group(0) == 'import': yield match.start(), Keyword.Namespace, match.group(0) ctx.stack = ctx.stack[:-1] + ['fromimportfunc'] else: yield match.start(), Name.Class, match.group(0) ctx.pos = match.end() def check_instance_class(lexer, match, ctx): if match.group(0) == 'instance' or match.group(0) == 'class': yield match.start(), Keyword, match.group(0) else: yield match.start(), Name.Function, match.group(0) ctx.stack = ctx.stack + ['fromimportfunctype'] ctx.pos = match.end() @staticmethod def indent_len(text): # Tabs are four spaces: # https://svn.cs.ru.nl/repos/clean-platform/trunk/doc/STANDARDS.txt text = text.replace('\n', '') return len(text.replace('\t', ' ')), len(text) def store_indent(lexer, match, ctx): ctx.indent, _ = CleanLexer.indent_len(match.group(0)) ctx.pos = match.end() yield match.start(), Text, match.group(0) def check_indent1(lexer, match, ctx): indent, reallen = CleanLexer.indent_len(match.group(0)) if indent > ctx.indent: yield match.start(), Whitespace, match.group(0) ctx.pos = match.start() + reallen + 1 else: ctx.indent = 0 ctx.pos = match.start() ctx.stack = ctx.stack[:-1] yield match.start(), Whitespace, match.group(0)[1:] def check_indent2(lexer, match, ctx): indent, reallen = CleanLexer.indent_len(match.group(0)) if indent > ctx.indent: yield match.start(), Whitespace, match.group(0) ctx.pos = match.start() + reallen + 1 else: ctx.indent = 0 ctx.pos = match.start() ctx.stack = ctx.stack[:-2] def check_indent3(lexer, match, ctx): indent, reallen = CleanLexer.indent_len(match.group(0)) if indent > ctx.indent: yield match.start(), Whitespace, match.group(0) ctx.pos = match.start() + reallen + 1 else: ctx.indent = 0 ctx.pos = match.start() ctx.stack = ctx.stack[:-3] yield match.start(), Whitespace, match.group(0)[1:] if match.group(0) == '\n\n': ctx.pos = ctx.pos + 1 def skip(lexer, match, ctx): ctx.stack = ctx.stack[:-1] ctx.pos = match.end() yield match.start(), Comment, match.group(0) keywords = ('class', 'instance', 'where', 'with', 'let', 'let!', 'in', 'case', 'of', 'infix', 'infixr', 'infixl', 'generic', 'derive', 'otherwise', 'code', 'inline') tokens = { 'common': [ (r';', Punctuation, '#pop'), (r'//', Comment, 'singlecomment'), ], 'root': [ # Comments (r'//.*\n', Comment.Single), (r'(?s)/\*\*.*?\*/', Comment.Special), (r'(?s)/\*.*?\*/', Comment.Multi), # Modules, imports, etc. (r'\b((?:implementation|definition|system)\s+)?(module)(\s+)([\w`.]+)', bygroups(Keyword.Namespace, Keyword.Namespace, Text, Name.Class)), (r'(?<=\n)import(?=\s)', Keyword.Namespace, 'import'), (r'(?<=\n)from(?=\s)', Keyword.Namespace, 'fromimport'), # Keywords # We cannot use (?s)^|(?<=\s) as prefix, so need to repeat this (words(keywords, prefix=r'(?<=\s)', suffix=r'(?=\s)'), Keyword), (words(keywords, prefix=r'^', suffix=r'(?=\s)'), Keyword), # Function definitions (r'(?=\{\|)', Whitespace, 'genericfunction'), (r'(?<=\n)([ \t]*)([\w`$()=\-<>~*\^|+&%]+)((?:\s+\w)*)(\s*)(::)', bygroups(store_indent, Name.Function, Keyword.Type, Whitespace, Punctuation), 'functiondefargs'), # Type definitions (r'(?<=\n)([ \t]*)(::)', bygroups(store_indent, Punctuation), 'typedef'), (r'^([ \t]*)(::)', bygroups(store_indent, Punctuation), 'typedef'), # Literals (r'\'\\?.(?<!\\)\'', String.Char), (r'\'\\\d+\'', String.Char), (r'\'\\\\\'', String.Char), # (special case for '\\') (r'[+\-~]?\s*\d+\.\d+(E[+\-~]?\d+)?\b', Number.Float), (r'[+\-~]?\s*0[0-7]\b', Number.Oct), (r'[+\-~]?\s*0x[0-9a-fA-F]\b', Number.Hex), (r'[+\-~]?\s*\d+\b', Number.Integer), (r'"', String.Double, 'doubleqstring'), (words(('True', 'False'), prefix=r'(?<=\s)', suffix=r'(?=\s)'), Literal), # Qualified names (r'(\')([\w.]+)(\'\.)', bygroups(Punctuation, Name.Namespace, Punctuation)), # Everything else is some name (r'([\w`$%/?@]+\.?)*[\w`$%/?@]+', Name), # Punctuation (r'[{}()\[\],:;.#]', Punctuation), (r'[+\-=!<>|&~*\^/]', Operator), (r'\\\\', Operator), # Lambda expressions (r'\\.*?(->|\.|=)', Name.Function), # Whitespace (r'\s', Whitespace), include('common'), ], 'fromimport': [ include('common'), (r'([\w`.]+)', check_class_not_import), (r'\n', Whitespace, '#pop'), (r'\s', Whitespace), ], 'fromimportfunc': [ include('common'), (r'(::)(\s+)([^,\s]+)', bygroups(Punctuation, Text, Keyword.Type)), (r'([\w`$()=\-<>~*\^|+&%/]+)', check_instance_class), (r',', Punctuation), (r'\n', Whitespace, '#pop'), (r'\s', Whitespace), ], 'fromimportfunctype': [ include('common'), (r'[{(\[]', Punctuation, 'combtype'), (r',', Punctuation, '#pop'), (r'[:;.#]', Punctuation), (r'\n', Whitespace, '#pop:2'), (r'[^\S\n]+', Whitespace), (r'\S+', Keyword.Type), ], 'combtype': [ include('common'), (r'[})\]]', Punctuation, '#pop'), (r'[{(\[]', Punctuation, '#pop'), (r'[,:;.#]', Punctuation), (r'\s+', Whitespace), (r'\S+', Keyword.Type), ], 'import': [ include('common'), (words(('from', 'import', 'as', 'qualified'), prefix='(?<=\s)', suffix='(?=\s)'), Keyword.Namespace), (r'[\w`.]+', Name.Class), (r'\n', Whitespace, '#pop'), (r',', Punctuation), (r'[^\S\n]+', Whitespace), ], 'singlecomment': [ (r'(.)(?=\n)', skip), (r'.+(?!\n)', Comment), ], 'doubleqstring': [ (r'[^\\"]+', String.Double), (r'"', String.Double, '#pop'), (r'\\.', String.Double), ], 'typedef': [ include('common'), (r'[\w`]+', Keyword.Type), (r'[:=|(),\[\]{}!*]', Punctuation), (r'->', Punctuation), (r'\n(?=[^\s|])', Whitespace, '#pop'), (r'\s', Whitespace), (r'.', Keyword.Type), ], 'genericfunction': [ include('common'), (r'\{\|', Punctuation), (r'\|\}', Punctuation, '#pop'), (r',', Punctuation), (r'->', Punctuation), (r'(\s+of\s+)(\{)', bygroups(Keyword, Punctuation), 'genericftypes'), (r'\s', Whitespace), (r'[\w`\[\]{}!]+', Keyword.Type), (r'[*()]', Punctuation), ], 'genericftypes': [ include('common'), (r'[\w`]+', Keyword.Type), (r',', Punctuation), (r'\s', Whitespace), (r'\}', Punctuation, '#pop'), ], 'functiondefargs': [ include('common'), (r'\n(\s*)', check_indent1), (r'[!{}()\[\],:;.#]', Punctuation), (r'->', Punctuation, 'functiondefres'), (r'^(?=\S)', Whitespace, '#pop'), (r'\S', Keyword.Type), (r'\s', Whitespace), ], 'functiondefres': [ include('common'), (r'\n(\s*)', check_indent2), (r'^(?=\S)', Whitespace, '#pop:2'), (r'[!{}()\[\],:;.#]', Punctuation), (r'\|', Punctuation, 'functiondefclasses'), (r'\S', Keyword.Type), (r'\s', Whitespace), ], 'functiondefclasses': [ include('common'), (r'\n(\s*)', check_indent3), (r'^(?=\S)', Whitespace, '#pop:3'), (r'[,&]', Punctuation), (r'\[', Punctuation, 'functiondefuniquneq'), (r'[\w`$()=\-<>~*\^|+&%/{}\[\]@]', Name.Function, 'functionname'), (r'\s+', Whitespace), ], 'functiondefuniquneq': [ include('common'), (r'[a-z]+', Keyword.Type), (r'\s+', Whitespace), (r'<=|,', Punctuation), (r'\]', Punctuation, '#pop') ], 'functionname': [ include('common'), (r'[\w`$()=\-<>~*\^|+&%/]+', Name.Function), (r'(?=\{\|)', Punctuation, 'genericfunction'), default('#pop'), ] }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
__init__.py | File | 10.65 KB | 0644 |
|
_asy_builtins.py | File | 26.68 KB | 0644 |
|
_cl_builtins.py | File | 13.72 KB | 0644 |
|
_cocoa_builtins.py | File | 39.04 KB | 0644 |
|
_csound_builtins.py | File | 21.14 KB | 0644 |
|
_lasso_builtins.py | File | 131.38 KB | 0644 |
|
_lua_builtins.py | File | 8.14 KB | 0644 |
|
_mapping.py | File | 53.43 KB | 0644 |
|
_mql_builtins.py | File | 24.16 KB | 0644 |
|
_openedge_builtins.py | File | 47.23 KB | 0644 |
|
_php_builtins.py | File | 150.75 KB | 0644 |
|
_postgres_builtins.py | File | 10.95 KB | 0644 |
|
_scilab_builtins.py | File | 51.18 KB | 0644 |
|
_sourcemod_builtins.py | File | 26.48 KB | 0644 |
|
_stan_builtins.py | File | 9.88 KB | 0644 |
|
_stata_builtins.py | File | 24.55 KB | 0644 |
|
_tsql_builtins.py | File | 15.12 KB | 0644 |
|
_vim_builtins.py | File | 55.75 KB | 0644 |
|
actionscript.py | File | 10.92 KB | 0644 |
|
agile.py | File | 900 B | 0644 |
|
algebra.py | File | 7.03 KB | 0644 |
|
ambient.py | File | 2.5 KB | 0644 |
|
ampl.py | File | 4.02 KB | 0644 |
|
apl.py | File | 3.09 KB | 0644 |
|
archetype.py | File | 10.87 KB | 0644 |
|
asm.py | File | 24.67 KB | 0644 |
|
automation.py | File | 19.19 KB | 0644 |
|
basic.py | File | 19.83 KB | 0644 |
|
bibtex.py | File | 4.61 KB | 0644 |
|
business.py | File | 27.02 KB | 0644 |
|
c_cpp.py | File | 10.28 KB | 0644 |
|
c_like.py | File | 23.56 KB | 0644 |
|
capnproto.py | File | 2.14 KB | 0644 |
|
chapel.py | File | 3.43 KB | 0644 |
|
clean.py | File | 10.16 KB | 0644 |
|
compiled.py | File | 1.35 KB | 0644 |
|
configs.py | File | 27.6 KB | 0644 |
|
console.py | File | 4.02 KB | 0644 |
|
crystal.py | File | 16.45 KB | 0644 |
|
csound.py | File | 12.25 KB | 0644 |
|
css.py | File | 30.77 KB | 0644 |
|
d.py | File | 9.31 KB | 0644 |
|
dalvik.py | File | 4.32 KB | 0644 |
|
data.py | File | 18.33 KB | 0644 |
|
diff.py | File | 4.76 KB | 0644 |
|
dotnet.py | File | 27.02 KB | 0644 |
|
dsls.py | File | 32.55 KB | 0644 |
|
dylan.py | File | 10.18 KB | 0644 |
|
ecl.py | File | 5.74 KB | 0644 |
|
eiffel.py | File | 2.42 KB | 0644 |
|
elm.py | File | 2.93 KB | 0644 |
|
erlang.py | File | 18.49 KB | 0644 |
|
esoteric.py | File | 9.27 KB | 0644 |
|
ezhil.py | File | 2.95 KB | 0644 |
|
factor.py | File | 17.44 KB | 0644 |
|
fantom.py | File | 9.75 KB | 0644 |
|
felix.py | File | 9.19 KB | 0644 |
|
forth.py | File | 6.98 KB | 0644 |
|
fortran.py | File | 9.54 KB | 0644 |
|
foxpro.py | File | 25.62 KB | 0644 |
|
functional.py | File | 698 B | 0644 |
|
go.py | File | 3.61 KB | 0644 |
|
grammar_notation.py | File | 6.18 KB | 0644 |
|
graph.py | File | 2.31 KB | 0644 |
|
graphics.py | File | 25.23 KB | 0644 |
|
haskell.py | File | 30.49 KB | 0644 |
|
haxe.py | File | 30.23 KB | 0644 |
|
hdl.py | File | 18.26 KB | 0644 |
|
hexdump.py | File | 3.42 KB | 0644 |
|
html.py | File | 18.82 KB | 0644 |
|
idl.py | File | 14.63 KB | 0644 |
|
igor.py | File | 19.53 KB | 0644 |
|
inferno.py | File | 3.04 KB | 0644 |
|
installers.py | File | 12.56 KB | 0644 |
|
int_fiction.py | File | 54.47 KB | 0644 |
|
iolang.py | File | 1.86 KB | 0644 |
|
j.py | File | 4.42 KB | 0644 |
|
javascript.py | File | 58.72 KB | 0644 |
|
julia.py | File | 13.76 KB | 0644 |
|
jvm.py | File | 65.18 KB | 0644 |
|
lisp.py | File | 137.38 KB | 0644 |
|
make.py | File | 7.16 KB | 0644 |
|
markup.py | File | 19.97 KB | 0644 |
|
math.py | File | 700 B | 0644 |
|
matlab.py | File | 28.47 KB | 0644 |
|
ml.py | File | 27.23 KB | 0644 |
|
modeling.py | File | 12.53 KB | 0644 |
|
modula2.py | File | 51.33 KB | 0644 |
|
monte.py | File | 6.16 KB | 0644 |
|
ncl.py | File | 62.49 KB | 0644 |
|
nimrod.py | File | 5.05 KB | 0644 |
|
nit.py | File | 2.68 KB | 0644 |
|
nix.py | File | 3.94 KB | 0644 |
|
oberon.py | File | 3.65 KB | 0644 |
|
objective.py | File | 22.22 KB | 0644 |
|
ooc.py | File | 2.93 KB | 0644 |
|
other.py | File | 1.73 KB | 0644 |
|
parasail.py | File | 2.67 KB | 0644 |
|
parsers.py | File | 26.94 KB | 0644 |
|
pascal.py | File | 31.88 KB | 0644 |
|
pawn.py | File | 7.9 KB | 0644 |
|
perl.py | File | 31.26 KB | 0644 |
|
php.py | File | 10.48 KB | 0644 |
|
praat.py | File | 12.26 KB | 0644 |
|
prolog.py | File | 11.78 KB | 0644 |
|
python.py | File | 41.39 KB | 0644 |
|
qvt.py | File | 5.97 KB | 0644 |
|
r.py | File | 23.2 KB | 0644 |
|
rdf.py | File | 9.18 KB | 0644 |
|
rebol.py | File | 18.18 KB | 0644 |
|
resource.py | File | 2.86 KB | 0644 |
|
rnc.py | File | 1.94 KB | 0644 |
|
roboconf.py | File | 2.02 KB | 0644 |
|
robotframework.py | File | 18.3 KB | 0644 |
|
ruby.py | File | 21.62 KB | 0644 |
|
rust.py | File | 7.51 KB | 0644 |
|
sas.py | File | 9.23 KB | 0644 |
|
scripting.py | File | 66.17 KB | 0644 |
|
shell.py | File | 30.69 KB | 0644 |
|
smalltalk.py | File | 7.05 KB | 0644 |
|
smv.py | File | 2.74 KB | 0644 |
|
snobol.py | File | 2.69 KB | 0644 |
|
special.py | File | 3.08 KB | 0644 |
|
sql.py | File | 28.75 KB | 0644 |
|
stata.py | File | 3.54 KB | 0644 |
|
supercollider.py | File | 3.43 KB | 0644 |
|
tcl.py | File | 5.27 KB | 0644 |
|
templates.py | File | 71.73 KB | 0644 |
|
testing.py | File | 10.5 KB | 0644 |
|
text.py | File | 977 B | 0644 |
|
textedit.py | File | 5.92 KB | 0644 |
|
textfmts.py | File | 10.6 KB | 0644 |
|
theorem.py | File | 18.59 KB | 0644 |
|
trafficscript.py | File | 1.51 KB | 0644 |
|
typoscript.py | File | 8.2 KB | 0644 |
|
urbi.py | File | 5.62 KB | 0644 |
|
varnish.py | File | 7.1 KB | 0644 |
|
verification.py | File | 3.62 KB | 0644 |
|
web.py | File | 918 B | 0644 |
|
webmisc.py | File | 38.96 KB | 0644 |
|
whiley.py | File | 3.92 KB | 0644 |
|
x10.py | File | 1.92 KB | 0644 |
|