| """ |
| pygments.lexers.pointless |
| ~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| Lexers for Pointless. |
| |
| :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. |
| :license: BSD, see LICENSE for details. |
| """ |
| |
| from pygments.lexer import RegexLexer, words |
| from pygments.token import Comment, Error, Keyword, Name, Number, Operator, \ |
| Punctuation, String, Text |
| |
| __all__ = ['PointlessLexer'] |
| |
| |
| class PointlessLexer(RegexLexer): |
| """ |
| For Pointless source code. |
| |
| .. versionadded:: 2.7 |
| """ |
| |
| name = 'Pointless' |
| url = 'https://ptls.dev' |
| aliases = ['pointless'] |
| filenames = ['*.ptls'] |
| |
| ops = words([ |
| "+", "-", "*", "/", "**", "%", "+=", "-=", "*=", |
| "/=", "**=", "%=", "|>", "=", "==", "!=", "<", ">", |
| "<=", ">=", "=>", "$", "++", |
| ]) |
| |
| keywords = words([ |
| "if", "then", "else", "where", "with", "cond", |
| "case", "and", "or", "not", "in", "as", "for", |
| "requires", "throw", "try", "catch", "when", |
| "yield", "upval", |
| ], suffix=r'\b') |
| |
| tokens = { |
| 'root': [ |
| (r'[ \n\r]+', Text), |
| (r'--.*$', Comment.Single), |
| (r'"""', String, 'multiString'), |
| (r'"', String, 'string'), |
| (r'[\[\](){}:;,.]', Punctuation), |
| (ops, Operator), |
| (keywords, Keyword), |
| (r'\d+|\d*\.\d+', Number), |
| (r'(true|false)\b', Name.Builtin), |
| (r'[A-Z][a-zA-Z0-9]*\b', String.Symbol), |
| (r'output\b', Name.Variable.Magic), |
| (r'(export|import)\b', Keyword.Namespace), |
| (r'[a-z][a-zA-Z0-9]*\b', Name.Variable) |
| ], |
| 'multiString': [ |
| (r'\\.', String.Escape), |
| (r'"""', String, '#pop'), |
| (r'"', String), |
| (r'[^\\"]+', String), |
| ], |
| 'string': [ |
| (r'\\.', String.Escape), |
| (r'"', String, '#pop'), |
| (r'\n', Error), |
| (r'[^\\"]+', String), |
| ], |
| } |