15c7fc943SAndré Rivotti Casimiro /*
25c7fc943SAndré Rivotti Casimiro * Copyright (c) 2015, André Rivotti Casimiro <andre.r.casimiro@gmail.com>
35c7fc943SAndré Rivotti Casimiro *
45c7fc943SAndré Rivotti Casimiro * This source code is released for free distribution under the terms of the
50ce38835Sviccuad * GNU General Public License version 2 or (at your option) any later version.
65c7fc943SAndré Rivotti Casimiro *
7ab86f721SMasatake YAMATO * This module contains functions for generating tags for DTS language files.
85c7fc943SAndré Rivotti Casimiro */
95c7fc943SAndré Rivotti Casimiro
105c7fc943SAndré Rivotti Casimiro /*
115c7fc943SAndré Rivotti Casimiro * INCLUDE FILES
125c7fc943SAndré Rivotti Casimiro */
135c7fc943SAndré Rivotti Casimiro #include "general.h"
1487214e15SMasatake YAMATO #include "cpreprocessor.h"
15ee4d2ebdSMasatake YAMATO #include "field.h"
163230cfb0SMasatake YAMATO #include "kind.h"
175c7fc943SAndré Rivotti Casimiro #include "parse.h"
183db72c21SMasatake YAMATO #include "routines.h"
193230cfb0SMasatake YAMATO
205654c1fbSMasatake YAMATO static tagRegexTable dtsTagRegexTable [] = {
215c7fc943SAndré Rivotti Casimiro /* phandle = <0x00> */
22dc0f490fSMasatake YAMATO {"^[ \t]*phandle[ \t]+=[ \t]+<(0x[a-fA-F0-9]+)>", "\\1",
23dc0f490fSMasatake YAMATO "p,phandler,phandlers", "{scope=ref}"},
245c7fc943SAndré Rivotti Casimiro
255c7fc943SAndré Rivotti Casimiro /* label: */
26dc0f490fSMasatake YAMATO {"^[ \t]*([a-zA-Z][a-zA-Z0-9_]*)[ \t]*:", "\\1",
27dc0f490fSMasatake YAMATO "l,label,labels", "{scope=push}"},
28d76b7aeaSMasatake YAMATO
29d76b7aeaSMasatake YAMATO /* extras for tracking scopes */
30dc0f490fSMasatake YAMATO {"^[ \t]*([a-zA-Z][a-zA-Z0-9_]*)[ \t]*\\{", "",
31dc0f490fSMasatake YAMATO "", "{scope=push}{placeholder}"},
322f1ec6c0SMasatake YAMATO {"\\}[ \t]*;", "",
33dc0f490fSMasatake YAMATO "", "{scope=pop}{exclusive}"},
34dc0f490fSMasatake YAMATO };
355c7fc943SAndré Rivotti Casimiro
36dc0f490fSMasatake YAMATO /*
37dc0f490fSMasatake YAMATO * FUNCTION DEFINITIONS
38dc0f490fSMasatake YAMATO */
runCppGetc(void)393f54e71fSMasatake YAMATO static void runCppGetc (void)
403f54e71fSMasatake YAMATO {
411c84720dSMasatake YAMATO cppInit (false, false, false, false,
42*d00bddf9SMasatake YAMATO KIND_GHOST_INDEX, 0, 0,
43*d00bddf9SMasatake YAMATO KIND_GHOST_INDEX,
44ee4d2ebdSMasatake YAMATO KIND_GHOST_INDEX, 0, 0,
45ee4d2ebdSMasatake YAMATO FIELD_UNKNOWN);
463f54e71fSMasatake YAMATO
472d7d0792SMasatake YAMATO findRegexTagsMainloop (cppGetc);
483f54e71fSMasatake YAMATO
493f54e71fSMasatake YAMATO cppTerminate ();
503f54e71fSMasatake YAMATO }
513f54e71fSMasatake YAMATO
DTSParser(void)525c7fc943SAndré Rivotti Casimiro extern parserDefinition* DTSParser (void)
535c7fc943SAndré Rivotti Casimiro {
545c7fc943SAndré Rivotti Casimiro static const char *const extensions [] = { "dts", "dtsi", NULL };
555c7fc943SAndré Rivotti Casimiro parserDefinition* const def = parserNew ("DTS");
565c7fc943SAndré Rivotti Casimiro def->extensions = extensions;
573f54e71fSMasatake YAMATO def->parser = runCppGetc;
58dc0f490fSMasatake YAMATO def->tagRegexTable = dtsTagRegexTable;
593db72c21SMasatake YAMATO def->tagRegexCount = ARRAY_SIZE (dtsTagRegexTable);
603f54e71fSMasatake YAMATO def->method = METHOD_REGEX;
61ce990805SThomas Braun def->requestAutomaticFQTag = true;
625c7fc943SAndré Rivotti Casimiro return def;
635c7fc943SAndré Rivotti Casimiro }
64