| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 | /*Language: Device TreeDescription: *.dts files used in the Linux kernelAuthor: Martin Braun <martin.braun@ettus.com>, Moritz Fischer <moritz.fischer@ettus.com>Website: https://elinux.org/Device_Tree_ReferenceCategory: config*//** @type LanguageFn */function dts(hljs) {  const STRINGS = {    className: 'string',    variants: [      hljs.inherit(hljs.QUOTE_STRING_MODE, {        begin: '((u8?|U)|L)?"'      }),      {        begin: '(u8?|U)?R"',        end: '"',        contains: [hljs.BACKSLASH_ESCAPE]      },      {        begin: '\'\\\\?.',        end: '\'',        illegal: '.'      }    ]  };  const NUMBERS = {    className: 'number',    variants: [      {        begin: '\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)'      },      {        begin: hljs.C_NUMBER_RE      }    ],    relevance: 0  };  const PREPROCESSOR = {    className: 'meta',    begin: '#',    end: '$',    keywords: {      'meta-keyword': 'if else elif endif define undef ifdef ifndef'    },    contains: [      {        begin: /\\\n/,        relevance: 0      },      {        beginKeywords: 'include',        end: '$',        keywords: {          'meta-keyword': 'include'        },        contains: [          hljs.inherit(STRINGS, {            className: 'meta-string'          }),          {            className: 'meta-string',            begin: '<',            end: '>',            illegal: '\\n'          }        ]      },      STRINGS,      hljs.C_LINE_COMMENT_MODE,      hljs.C_BLOCK_COMMENT_MODE    ]  };  const DTS_REFERENCE = {    className: 'variable',    begin: /&[a-z\d_]*\b/  };  const DTS_KEYWORD = {    className: 'meta-keyword',    begin: '/[a-z][a-z\\d-]*/'  };  const DTS_LABEL = {    className: 'symbol',    begin: '^\\s*[a-zA-Z_][a-zA-Z\\d_]*:'  };  const DTS_CELL_PROPERTY = {    className: 'params',    begin: '<',    end: '>',    contains: [      NUMBERS,      DTS_REFERENCE    ]  };  const DTS_NODE = {    className: 'class',    begin: /[a-zA-Z_][a-zA-Z\d_@]*\s\{/,    end: /[{;=]/,    returnBegin: true,    excludeEnd: true  };  const DTS_ROOT_NODE = {    className: 'class',    begin: '/\\s*\\{',    end: /\};/,    relevance: 10,    contains: [      DTS_REFERENCE,      DTS_KEYWORD,      DTS_LABEL,      DTS_NODE,      DTS_CELL_PROPERTY,      hljs.C_LINE_COMMENT_MODE,      hljs.C_BLOCK_COMMENT_MODE,      NUMBERS,      STRINGS    ]  };  return {    name: 'Device Tree',    keywords: "",    contains: [      DTS_ROOT_NODE,      DTS_REFERENCE,      DTS_KEYWORD,      DTS_LABEL,      DTS_NODE,      DTS_CELL_PROPERTY,      hljs.C_LINE_COMMENT_MODE,      hljs.C_BLOCK_COMMENT_MODE,      NUMBERS,      STRINGS,      PREPROCESSOR,      {        begin: hljs.IDENT_RE + '::',        keywords: ""      }    ]  };}module.exports = dts;
 |