summaryrefslogtreecommitdiffstats
path: root/venv/lib/python3.9/site-packages/pygments/lexers/meson.py
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.9/site-packages/pygments/lexers/meson.py')
-rw-r--r--venv/lib/python3.9/site-packages/pygments/lexers/meson.py140
1 files changed, 140 insertions, 0 deletions
diff --git a/venv/lib/python3.9/site-packages/pygments/lexers/meson.py b/venv/lib/python3.9/site-packages/pygments/lexers/meson.py
new file mode 100644
index 00000000..f74f7191
--- /dev/null
+++ b/venv/lib/python3.9/site-packages/pygments/lexers/meson.py
@@ -0,0 +1,140 @@
+"""
+ pygments.lexers.meson
+ ~~~~~~~~~~~~~~~~~~~~~
+
+ Pygments lexer for the Meson build system
+
+ :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from pygments.lexer import RegexLexer, words, include
+from pygments.token import Comment, Name, Number, Punctuation, Operator, \
+ Keyword, String, Whitespace
+
+__all__ = ['MesonLexer']
+
+
+class MesonLexer(RegexLexer):
+ """Meson language lexer.
+
+ The grammar definition use to transcribe the syntax was retrieved from
+ https://mesonbuild.com/Syntax.html#grammar for version 0.58.
+ Some of those definitions are improperly transcribed, so the Meson++
+ implementation was also checked: https://github.com/dcbaker/meson-plus-plus.
+
+ .. versionadded:: 2.10
+ """
+
+ # TODO String interpolation @VARNAME@ inner matches
+ # TODO keyword_arg: value inner matches
+
+ name = 'Meson'
+ url = 'https://mesonbuild.com/'
+ aliases = ['meson', 'meson.build']
+ filenames = ['meson.build', 'meson_options.txt']
+ mimetypes = ['text/x-meson']
+
+ tokens = {
+ 'root': [
+ (r'#.*?$', Comment),
+ (r"'''.*'''", String.Single),
+ (r'[1-9][0-9]*', Number.Integer),
+ (r'0o[0-7]+', Number.Oct),
+ (r'0x[a-fA-F0-9]+', Number.Hex),
+ include('string'),
+ include('keywords'),
+ include('expr'),
+ (r'[a-zA-Z_][a-zA-Z_0-9]*', Name),
+ (r'\s+', Whitespace),
+ ],
+ 'string': [
+ (r"[']{3}([']{0,2}([^\\']|\\(.|\n)))*[']{3}", String),
+ (r"'.*?(?<!\\)(\\\\)*?'", String),
+ ],
+ 'keywords': [
+ (words((
+ 'if',
+ 'elif',
+ 'else',
+ 'endif',
+ 'foreach',
+ 'endforeach',
+ 'break',
+ 'continue',
+ ),
+ suffix=r'\b'), Keyword),
+ ],
+ 'expr': [
+ (r'(in|and|or|not)\b', Operator.Word),
+ (r'(\*=|/=|%=|\+]=|-=|==|!=|\+|-|=)', Operator),
+ (r'[\[\]{}:().,?]', Punctuation),
+ (words(('true', 'false'), suffix=r'\b'), Keyword.Constant),
+ include('builtins'),
+ (words((
+ 'meson',
+ 'build_machine',
+ 'host_machine',
+ 'target_machine',
+ ),
+ suffix=r'\b'), Name.Variable.Magic),
+ ],
+ 'builtins': [
+ # This list was extracted from the v0.58 reference manual
+ (words((
+ 'add_global_arguments',
+ 'add_global_link_arguments',
+ 'add_languages',
+ 'add_project_arguments',
+ 'add_project_link_arguments',
+ 'add_test_setup',
+ 'assert',
+ 'benchmark',
+ 'both_libraries',
+ 'build_target',
+ 'configuration_data',
+ 'configure_file',
+ 'custom_target',
+ 'declare_dependency',
+ 'dependency',
+ 'disabler',
+ 'environment',
+ 'error',
+ 'executable',
+ 'files',
+ 'find_library',
+ 'find_program',
+ 'generator',
+ 'get_option',
+ 'get_variable',
+ 'include_directories',
+ 'install_data',
+ 'install_headers',
+ 'install_man',
+ 'install_subdir',
+ 'is_disabler',
+ 'is_variable',
+ 'jar',
+ 'join_paths',
+ 'library',
+ 'message',
+ 'project',
+ 'range',
+ 'run_command',
+ 'set_variable',
+ 'shared_library',
+ 'shared_module',
+ 'static_library',
+ 'subdir',
+ 'subdir_done',
+ 'subproject',
+ 'summary',
+ 'test',
+ 'vcs_tag',
+ 'warning',
+ ),
+ prefix=r'(?<!\.)',
+ suffix=r'\b'), Name.Builtin),
+ (r'(?<!\.)import\b', Name.Namespace),
+ ],
+ }