summaryrefslogtreecommitdiffstats
path: root/venv/lib/python3.9/site-packages/pygments/lexers/devicetree.py
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.9/site-packages/pygments/lexers/devicetree.py')
-rw-r--r--venv/lib/python3.9/site-packages/pygments/lexers/devicetree.py109
1 files changed, 109 insertions, 0 deletions
diff --git a/venv/lib/python3.9/site-packages/pygments/lexers/devicetree.py b/venv/lib/python3.9/site-packages/pygments/lexers/devicetree.py
new file mode 100644
index 00000000..9221464f
--- /dev/null
+++ b/venv/lib/python3.9/site-packages/pygments/lexers/devicetree.py
@@ -0,0 +1,109 @@
+"""
+ pygments.lexers.devicetree
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Lexers for Devicetree language.
+
+ :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from pygments.lexer import RegexLexer, bygroups, include, default, words
+from pygments.token import Comment, Keyword, Name, Number, Operator, \
+ Punctuation, String, Text, Whitespace
+
+__all__ = ['DevicetreeLexer']
+
+
+class DevicetreeLexer(RegexLexer):
+ """
+ Lexer for Devicetree files.
+
+ .. versionadded:: 2.7
+ """
+
+ name = 'Devicetree'
+ url = 'https://www.devicetree.org/'
+ aliases = ['devicetree', 'dts']
+ filenames = ['*.dts', '*.dtsi']
+ mimetypes = ['text/x-c']
+
+ #: optional Whitespace or /*...*/ style comment
+ _ws = r'\s*(?:/[*][^*/]*?[*]/\s*)*'
+
+ tokens = {
+ 'macro': [
+ # Include preprocessor directives (C style):
+ (r'(#include)(' + _ws + r')([^\n]+)',
+ bygroups(Comment.Preproc, Comment.Multiline, Comment.PreprocFile)),
+ # Define preprocessor directives (C style):
+ (r'(#define)(' + _ws + r')([^\n]+)',
+ bygroups(Comment.Preproc, Comment.Multiline, Comment.Preproc)),
+ # devicetree style with file:
+ (r'(/[^*/{]+/)(' + _ws + r')("[^\n{]+")',
+ bygroups(Comment.Preproc, Comment.Multiline, Comment.PreprocFile)),
+ # devicetree style with property:
+ (r'(/[^*/{]+/)(' + _ws + r')([^\n;{]*)([;]?)',
+ bygroups(Comment.Preproc, Comment.Multiline, Comment.Preproc, Punctuation)),
+ ],
+ 'whitespace': [
+ (r'\n', Whitespace),
+ (r'\s+', Whitespace),
+ (r'\\\n', Text), # line continuation
+ (r'//(\n|[\w\W]*?[^\\]\n)', Comment.Single),
+ (r'/(\\\n)?[*][\w\W]*?[*](\\\n)?/', Comment.Multiline),
+ # Open until EOF, so no ending delimiter
+ (r'/(\\\n)?[*][\w\W]*', Comment.Multiline),
+ ],
+ 'statements': [
+ (r'(L?)(")', bygroups(String.Affix, String), 'string'),
+ (r'0x[0-9a-fA-F]+', Number.Hex),
+ (r'\d+', Number.Integer),
+ (r'([^\s{}/*]*)(\s*)(:)', bygroups(Name.Label, Text, Punctuation), '#pop'),
+ (words(('compatible', 'model', 'phandle', 'status', '#address-cells',
+ '#size-cells', 'reg', 'virtual-reg', 'ranges', 'dma-ranges',
+ 'device_type', 'name'), suffix=r'\b'), Keyword.Reserved),
+ (r'([~!%^&*+=|?:<>/#-])', Operator),
+ (r'[()\[\]{},.]', Punctuation),
+ (r'[a-zA-Z_][\w-]*(?=(?:\s*,\s*[a-zA-Z_][\w-]*|(?:' + _ws + r'))*\s*[=;])',
+ Name),
+ (r'[a-zA-Z_]\w*', Name.Attribute),
+ ],
+ 'root': [
+ include('whitespace'),
+ include('macro'),
+
+ # Nodes
+ (r'([^/*@\s&]+|/)(@?)((?:0x)?[0-9a-fA-F,]*)(' + _ws + r')(\{)',
+ bygroups(Name.Function, Operator, Number.Integer,
+ Comment.Multiline, Punctuation), 'node'),
+
+ default('statement'),
+ ],
+ 'statement': [
+ include('whitespace'),
+ include('statements'),
+ (';', Punctuation, '#pop'),
+ ],
+ 'node': [
+ include('whitespace'),
+ include('macro'),
+
+ (r'([^/*@\s&]+|/)(@?)((?:0x)?[0-9a-fA-F,]*)(' + _ws + r')(\{)',
+ bygroups(Name.Function, Operator, Number.Integer,
+ Comment.Multiline, Punctuation), '#push'),
+
+ include('statements'),
+
+ (r'\};', Punctuation, '#pop'),
+ (';', Punctuation),
+ ],
+ 'string': [
+ (r'"', String, '#pop'),
+ (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|'
+ r'u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})', String.Escape),
+ (r'[^\\"\n]+', String), # all other characters
+ (r'\\\n', String), # line continuation
+ (r'\\', String), # stray backslash
+ ],
+ }