123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- """
- pygments.lexers.soong
- ~~~~~~~~~~~~~~~~~~~~~
- Lexers for Soong (Android.bp Blueprint) files.
- :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
- :license: BSD, see LICENSE for details.
- """
- from pygments.lexer import RegexLexer, bygroups, include
- from pygments.token import Comment, Name, Number, Operator, Punctuation, \
- String, Whitespace
- __all__ = ['SoongLexer']
- class SoongLexer(RegexLexer):
- name = 'Soong'
- version_added = '2.18'
- url = 'https://source.android.com/docs/setup/reference/androidbp'
- aliases = ['androidbp', 'bp', 'soong']
- filenames = ['Android.bp']
- tokens = {
- 'root': [
- # A variable assignment
- (r'(\w*)(\s*)(\+?=)(\s*)',
- bygroups(Name.Variable, Whitespace, Operator, Whitespace),
- 'assign-rhs'),
- # A top-level module
- (r'(\w*)(\s*)(\{)',
- bygroups(Name.Function, Whitespace, Punctuation),
- 'in-rule'),
- # Everything else
- include('comments'),
- (r'\s+', Whitespace), # newlines okay
- ],
- 'assign-rhs': [
- include('expr'),
- (r'\n', Whitespace, '#pop'),
- ],
- 'in-list': [
- include('expr'),
- include('comments'),
- (r'\s+', Whitespace), # newlines okay in a list
- (r',', Punctuation),
- (r'\]', Punctuation, '#pop'),
- ],
- 'in-map': [
- # A map key
- (r'(\w+)(:)(\s*)', bygroups(Name, Punctuation, Whitespace)),
- include('expr'),
- include('comments'),
- (r'\s+', Whitespace), # newlines okay in a map
- (r',', Punctuation),
- (r'\}', Punctuation, '#pop'),
- ],
- 'in-rule': [
- # Just re-use map syntax
- include('in-map'),
- ],
- 'comments': [
- (r'//.*', Comment.Single),
- (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline),
- ],
- 'expr': [
- (r'(true|false)\b', Name.Builtin),
- (r'0x[0-9a-fA-F]+', Number.Hex),
- (r'\d+', Number.Integer),
- (r'".*?"', String),
- (r'\{', Punctuation, 'in-map'),
- (r'\[', Punctuation, 'in-list'),
- (r'\w+', Name),
- ],
- }
|