f20080305d
Определение специфических рекомендаций (матрица профилей §8):
1. Ж/д слой (закрыт мёртвый railway ×2.5 у РАС):
- /api/v1/water/{case_id} отдаёт railway=rail как LineString
(без service/industrial/military веток), кэш общий v2;
- railway_warning «перекрыть/проверить немедленно» по профилям;
- SearchMap: Polyline слой ж/д (тёмно-красный), счётчики 💧/🚂.
2. cant_swim → профиль не_умеет_плавать (water ×3.0, без изменения
радиуса, critical_warning «обследовать водоёмы НЕМЕДЛЕННО»):
- раньше чекбокс влиял только на текст, в скоринге был пробел;
- derive в analyze._derive_profiles — работает и для closed_cases.
3. unmodeled_profiles: ДЦП/слабое зрение/слух — честная пометка
«вне поведенческой модели» с пояснением (vector_tasks B12:
профили без аналога не выдавать за учтённые); блок на фронте
в карточке здоровья.
Площадь воды: сферический эксцесс, проверен на квадрате 53° (744017 м²
vs 743272 точного). Тесты: 202 passed (новый test_cant_swim_profile).
184 lines
8.3 KiB
Python
184 lines
8.3 KiB
Python
"""
|
|
pygments.lexers.slash
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Lexer for the Slash programming language.
|
|
|
|
:copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
|
|
:license: BSD, see LICENSE for details.
|
|
"""
|
|
|
|
from pygments.lexer import ExtendedRegexLexer, bygroups, DelegatingLexer
|
|
from pygments.token import Name, Number, String, Comment, Punctuation, \
|
|
Other, Keyword, Operator, Whitespace
|
|
|
|
__all__ = ['SlashLexer']
|
|
|
|
|
|
class SlashLanguageLexer(ExtendedRegexLexer):
|
|
_nkw = r'(?=[^a-zA-Z_0-9])'
|
|
|
|
def move_state(new_state):
|
|
return ("#pop", new_state)
|
|
|
|
def right_angle_bracket(lexer, match, ctx):
|
|
if len(ctx.stack) > 1 and ctx.stack[-2] == "string":
|
|
ctx.stack.pop()
|
|
yield match.start(), String.Interpol, '}'
|
|
ctx.pos = match.end()
|
|
pass
|
|
|
|
tokens = {
|
|
"root": [
|
|
(r"<%=", Comment.Preproc, move_state("slash")),
|
|
(r"<%!!", Comment.Preproc, move_state("slash")),
|
|
(r"<%#.*?%>", Comment.Multiline),
|
|
(r"<%", Comment.Preproc, move_state("slash")),
|
|
(r".|\n", Other),
|
|
],
|
|
"string": [
|
|
(r"\\", String.Escape, move_state("string_e")),
|
|
(r"\"", String, move_state("slash")),
|
|
(r"#\{", String.Interpol, "slash"),
|
|
(r'.|\n', String),
|
|
],
|
|
"string_e": [
|
|
(r'n', String.Escape, move_state("string")),
|
|
(r't', String.Escape, move_state("string")),
|
|
(r'r', String.Escape, move_state("string")),
|
|
(r'e', String.Escape, move_state("string")),
|
|
(r'x[a-fA-F0-9]{2}', String.Escape, move_state("string")),
|
|
(r'.', String.Escape, move_state("string")),
|
|
],
|
|
"regexp": [
|
|
(r'}[a-z]*', String.Regex, move_state("slash")),
|
|
(r'\\([\s\S])', String.Regex),
|
|
(r'{', String.Regex, "regexp_r"),
|
|
(r'.|\n', String.Regex),
|
|
],
|
|
"regexp_r": [
|
|
(r'}[a-z]*', String.Regex, "#pop"),
|
|
(r'\\([\s\S])', String.Regex),
|
|
(r'{', String.Regex, "regexp_r"),
|
|
],
|
|
"slash": [
|
|
(r"%>", Comment.Preproc, move_state("root")),
|
|
(r"\"", String, move_state("string")),
|
|
(r"'[a-zA-Z0-9_]+", String),
|
|
(r'%r{', String.Regex, move_state("regexp")),
|
|
(r'/\*.*?\*/', Comment.Multiline),
|
|
(r"(#|//).*?\n", Comment.Single),
|
|
(r'-?[0-9]+e[+-]?[0-9]+', Number.Float),
|
|
(r'-?[0-9]+\.[0-9]+(e[+-]?[0-9]+)?', Number.Float),
|
|
(r'-?[0-9]+', Number.Integer),
|
|
(r'nil'+_nkw, Name.Builtin),
|
|
(r'true'+_nkw, Name.Builtin),
|
|
(r'false'+_nkw, Name.Builtin),
|
|
(r'self'+_nkw, Name.Builtin),
|
|
(r'(class)(\s+)([A-Z][a-zA-Z0-9_\']*)',
|
|
bygroups(Keyword, Whitespace, Name.Class)),
|
|
(r'class'+_nkw, Keyword),
|
|
(r'extends'+_nkw, Keyword),
|
|
(r'(def)(\s+)(self)(\s*)(\.)(\s*)([a-z_][a-zA-Z0-9_\']*=?|<<|>>|==|<=>|<=|<|>=|>|\+|-(self)?|~(self)?|\*|/|%|^|&&|&|\||\[\]=?)',
|
|
bygroups(Keyword, Whitespace, Name.Builtin, Whitespace, Punctuation, Whitespace, Name.Function)),
|
|
(r'(def)(\s+)([a-z_][a-zA-Z0-9_\']*=?|<<|>>|==|<=>|<=|<|>=|>|\+|-(self)?|~(self)?|\*|/|%|^|&&|&|\||\[\]=?)',
|
|
bygroups(Keyword, Whitespace, Name.Function)),
|
|
(r'def'+_nkw, Keyword),
|
|
(r'if'+_nkw, Keyword),
|
|
(r'elsif'+_nkw, Keyword),
|
|
(r'else'+_nkw, Keyword),
|
|
(r'unless'+_nkw, Keyword),
|
|
(r'for'+_nkw, Keyword),
|
|
(r'in'+_nkw, Keyword),
|
|
(r'while'+_nkw, Keyword),
|
|
(r'until'+_nkw, Keyword),
|
|
(r'and'+_nkw, Keyword),
|
|
(r'or'+_nkw, Keyword),
|
|
(r'not'+_nkw, Keyword),
|
|
(r'lambda'+_nkw, Keyword),
|
|
(r'try'+_nkw, Keyword),
|
|
(r'catch'+_nkw, Keyword),
|
|
(r'return'+_nkw, Keyword),
|
|
(r'next'+_nkw, Keyword),
|
|
(r'last'+_nkw, Keyword),
|
|
(r'throw'+_nkw, Keyword),
|
|
(r'use'+_nkw, Keyword),
|
|
(r'switch'+_nkw, Keyword),
|
|
(r'\\', Keyword),
|
|
(r'λ', Keyword),
|
|
(r'__FILE__'+_nkw, Name.Builtin.Pseudo),
|
|
(r'__LINE__'+_nkw, Name.Builtin.Pseudo),
|
|
(r'[A-Z][a-zA-Z0-9_\']*'+_nkw, Name.Constant),
|
|
(r'[a-z_][a-zA-Z0-9_\']*'+_nkw, Name),
|
|
(r'@[a-z_][a-zA-Z0-9_\']*'+_nkw, Name.Variable.Instance),
|
|
(r'@@[a-z_][a-zA-Z0-9_\']*'+_nkw, Name.Variable.Class),
|
|
(r'\(', Punctuation),
|
|
(r'\)', Punctuation),
|
|
(r'\[', Punctuation),
|
|
(r'\]', Punctuation),
|
|
(r'\{', Punctuation),
|
|
(r'\}', right_angle_bracket),
|
|
(r';', Punctuation),
|
|
(r',', Punctuation),
|
|
(r'<<=', Operator),
|
|
(r'>>=', Operator),
|
|
(r'<<', Operator),
|
|
(r'>>', Operator),
|
|
(r'==', Operator),
|
|
(r'!=', Operator),
|
|
(r'=>', Operator),
|
|
(r'=', Operator),
|
|
(r'<=>', Operator),
|
|
(r'<=', Operator),
|
|
(r'>=', Operator),
|
|
(r'<', Operator),
|
|
(r'>', Operator),
|
|
(r'\+\+', Operator),
|
|
(r'\+=', Operator),
|
|
(r'-=', Operator),
|
|
(r'\*\*=', Operator),
|
|
(r'\*=', Operator),
|
|
(r'\*\*', Operator),
|
|
(r'\*', Operator),
|
|
(r'/=', Operator),
|
|
(r'\+', Operator),
|
|
(r'-', Operator),
|
|
(r'/', Operator),
|
|
(r'%=', Operator),
|
|
(r'%', Operator),
|
|
(r'^=', Operator),
|
|
(r'&&=', Operator),
|
|
(r'&=', Operator),
|
|
(r'&&', Operator),
|
|
(r'&', Operator),
|
|
(r'\|\|=', Operator),
|
|
(r'\|=', Operator),
|
|
(r'\|\|', Operator),
|
|
(r'\|', Operator),
|
|
(r'!', Operator),
|
|
(r'\.\.\.', Operator),
|
|
(r'\.\.', Operator),
|
|
(r'\.', Operator),
|
|
(r'::', Operator),
|
|
(r':', Operator),
|
|
(r'\s+', Whitespace),
|
|
(r'[a-z_][a-zA-Z0-9_\']*', Name.Variable),
|
|
],
|
|
}
|
|
|
|
|
|
class SlashLexer(DelegatingLexer):
|
|
"""
|
|
Lexer for the Slash programming language.
|
|
"""
|
|
|
|
name = 'Slash'
|
|
aliases = ['slash']
|
|
filenames = ['*.sla']
|
|
url = 'https://github.com/arturadib/Slash-A'
|
|
version_added = '2.4'
|
|
|
|
def __init__(self, **options):
|
|
from pygments.lexers.web import HtmlLexer
|
|
super().__init__(HtmlLexer, SlashLanguageLexer, **options)
|