-
Allen, Bruce (CIV) authoredAllen, Bruce (CIV) authored
mp_code_expressions.py 1.90 KiB
from PyQt5.QtCore import QRegularExpression
# root names
ROOT_NAME_EXPRESSION = QRegularExpression(r"^\s*ROOT\s*(\w*)\s*:")
# composite names
COMPOSITE_NAME_EXPRESSION = QRegularExpression(r"^\s*(\w*)\s*:")
# schema names
SCHEMA_NAME_EXPRESSION = QRegularExpression(r"^\s*SCHEMA\s*(\w*)")
# atomic names are all words
ATOMIC_NAME_EXPRESSION = QRegularExpression(r"\b\w*\b")
# multiline comment expressions
COMMENT_START_EXPRESSION = QRegularExpression("/\\*")
COMMENT_END_EXPRESSION = QRegularExpression("\\*/")
# keywords, ref. MP documentation
_KEYWORDS = "ADD|AFTER|ALL|AND|APPLY|AT|ATTRIBUTES|AVG|BEFORE|BUILD|CHAIN|CHECK|CONTAINS|COORDINATE|CUT_END|CUT_FRONT|DIAGRAM|DISJ|DO|ELSE|ENCLOSING|ENSURE|EXISTS|FI|FIRST|FOLLOWS|FOREACH|FROM|IF|IN|IS|LAST|LEAST|MAP|MARK|MAX|MAY_OVERLAP|MIN|NOT|OD|ON|ONFAIL|OR|PRECEDES|REJECT|REVERSE|ROOT|SAY|SCHEMA|SET|SHARE|SHIFT_LEFT|SHIFT_RIGHT|SORT|SUCH|SUM|THAT|THEN|THIS|TIMES|WHEN"
KEYWORD_SET = set(_KEYWORDS.split('|'))
KEYWORD_EXPRESSION = QRegularExpression(r'\b(%s)\b'%_KEYWORDS)
# words
WORD_EXPRESSION = QRegularExpression("\\b\\w*")
# meta-symbols
META_SYMBOL_EXPRESSION = QRegularExpression(r'\$\$(EVENT|ROOT|COMPOSITE|ATOM|scope)')
# operators, any of: -+*=<>!(){}|
OPERATOR_EXPRESSION = QRegularExpression("[-+\/*=<>!\(\)\{\}\|]+")
# numbers
NUMBER_EXPRESSION = QRegularExpression(r'[+-]?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?')
# variables
VARIABLE_EXPRESSION = QRegularExpression("(<.*>)?\$[a-z][a-z0-9_]*")
# Double-quoted string, possibly containing escape sequences
QUOTED_TEXT_EXPRESSION = QRegularExpression(r'"[^"\\]*(\\.[^"\\]*)*"')
# brace, bracket IF, DO
PAREN_EXPRESSION = QRegularExpression("[\(\)]") # "(" or ")"
BRACE_EXPRESSION = QRegularExpression("[\{\}]") # "{" or "}"
BRACKET_EXPRESSION = QRegularExpression("[\[\]]") # "[" or "]"
IF_EXPRESSION = QRegularExpression("\\b(IF|FI)\\b") # IF or FI
DO_EXPRESSION = QRegularExpression("\\b(DO|OD)\\b") # DO or OD