xref: /Universal-ctags/parsers/dts.c (revision d00bddf924a65af2169f33a172990e5419cafaf9)
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