|  | #!/usr/bin/python | 
|  | # | 
|  | # Contributors Listed Below - COPYRIGHT 2016 | 
|  | # [+] International Business Machines Corp. | 
|  | # | 
|  | # Redistribution and use in source and binary forms, with or without | 
|  | # modification, are permitted provided that the following conditions are | 
|  | # met: | 
|  | # | 
|  | # * Redistributions of source code must retain the above copyright | 
|  | #   notice, this list of conditions and the following disclaimer. | 
|  | # | 
|  | # * Redistributions in binary form must reproduce the above copyright | 
|  | #   notice, this list of conditions and the following disclaimer in the | 
|  | #  documentation and/or other materials provided with the distribution. | 
|  | # | 
|  | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
|  | # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
|  | # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
|  | # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 
|  | # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
|  | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
|  | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
|  | # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
|  | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
|  | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
|  | # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
|  |  | 
|  | from pygments.lexer import RegexLexer, bygroups, include | 
|  | from pygments.token import * | 
|  |  | 
|  | __all__ = ['DtsLexer'] | 
|  |  | 
|  | class DtsLexer(RegexLexer): | 
|  | name = 'DTS' | 
|  | aliases = ['dts', 'device-tree'] | 
|  | filenames = ['*.dts'] | 
|  |  | 
|  | tokens = { | 
|  | 'root': [ | 
|  | include('comments'), | 
|  | (r'/memreserve/', Keyword, ('memreserve')), | 
|  | (r'^/dts-v1/;$', Keyword), | 
|  | (r'\s+', Text), | 
|  | include('node'), | 
|  | ], | 
|  | 'comments': [ | 
|  | (r'//(\n|(.|\n)*?[^\\]\n)', Comment.Single), | 
|  | (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline), | 
|  | ], | 
|  | 'memreserve': [ | 
|  | include('comments'), | 
|  | include('integers'), | 
|  | (r'\s+', Text), | 
|  | (r';', Punctuation, '#pop') | 
|  | ], | 
|  | 'integers': [ | 
|  | (r'0x[0-9a-fA-F]+', Number.Hex), | 
|  | (r'0[0-7]+', Number.Oct), | 
|  | (r'\d+', Number.Integer), | 
|  | ], | 
|  | 'node': [ | 
|  | (r'\s+', Text), | 
|  | (r'((?:[0-9a-zA-Z,._+-]+):)?(\s*)([0-9a-zA-Z,._+-]+)(@[0-9a-zA-Z,._+-]+)?(\s*)({)', bygroups(Name.Label, Text, Name.Class, Name.Function, Text, Punctuation), ('node-content')), | 
|  | (r'(/)(\s+)({)', bygroups(Keyword, Text, Punctuation), ('node-content')), | 
|  | ], | 
|  | 'node-content': [ | 
|  | include('comments'), | 
|  | include('node'), | 
|  | (r'\s+', Text), | 
|  | (r'([0-9a-zA-Z,._+-]+)(:)', bygroups(Name.Label, Punctuation)), | 
|  | (r'([\#0-9a-zA-Z,._+-]+)(\s*)(=)(\s*)', bygroups(Name.Function, Text, Operator, Text), ('value')), | 
|  | (r'([\#0-9a-zA-Z,._+-]+)(;)', bygroups(Name.Function, Punctuation)), | 
|  | (r'};', Punctuation, ('#pop')), | 
|  | ], | 
|  | 'value': [ | 
|  | include('integers'), | 
|  | include('comments'), | 
|  | (r'(\&)([a-zA-Z0-9_-]+)', bygroups(Operator, Text)), | 
|  | (r'<', Punctuation, '#push'), | 
|  | (r'>', Punctuation, '#pop'), | 
|  | (r'\[', Punctuation, '#push'), | 
|  | (r'\]', Punctuation, '#pop'), | 
|  | (r'".*"', String), | 
|  | (r';', Punctuation, '#pop'), | 
|  | (r'\s+', Text), | 
|  | (r',', Punctuation) | 
|  | ], | 
|  | } |