xref: /Universal-ctags/parsers/myrddin.c (revision 1f9cdae041442312d8953a2354c9b1ff206d981a)
1 /*
2  *   Copyright (c) 2016, Ori Bernstein
3  *
4  *   This source code is released for free distribution under the terms of the
5  *   GNU General Public License version 2 or (at your option) any later version.
6  *
7  *   This module contains functions for generating tags for Myrddin language
8  *   files. (https://myrlang.org)
9  */
10 
11 /*
12  *   INCLUDE FILES
13  */
14 #include "general.h"  /* must always come first */
15 #include "parse.h"
16 
17 static tagRegexTable myrddinTagRegexTable [] = {
18 	/* const foo = {; function literal } */
19 	{"^([ \t]*extern)?[ \t]*const[ \t]+([a-zA-Z_][a-zA-Z0-9_]*)[ \t]*=[ \t]\\{",
20 		"\\2", "f,function,functions", NULL},
21 	/* const foo = initializer */
22 	{"^([ \t]*extern)?[ \t]*const[ \t]+([a-zA-Z_][a-zA-Z0-9_]*)[ \t]*(=[ \t][^{].*)?$",
23 		"\\2", "c,constant,constants", NULL},
24 	/* var foo = initializer */
25 	{"^([ \t]*extern)?[ \t]*var[ \t]+([a-zA-Z_][a-zA-Z0-9_]*)",
26 		"\\2", "v,var,variables", NULL},
27 	/* type foo = name */
28 	{"^[ \t]*type[ \t]+([a-zA-Z_][a-zA-Z0-9_]*)[ \t]*=",
29 		"\\1", "t,type,types", NULL},
30 	/* trait foo = trait-defn ;; */
31 	{"^[ \t]*trait[ \t]+([a-zA-Z_][a-zA-Z0-9_]*)[ \t]*=",
32 		"\\1", "r,trait,traits", NULL},
33 	/* pkg foo = declarations ;; */
34 	{"^[ \t]*pkg[ \t]+([a-zA-Z_][a-zA-Z0-9_]*)",
35 		"\\1", "p,pkg,packages", NULL},
36 };
37 
38 /*
39  *   FUNCTION DEFINITIONS
40  */
41 
MyrddinParser(void)42 extern parserDefinition *MyrddinParser (void)
43 {
44 	static const char *const extensions [] = { "myr", NULL };
45 	parserDefinition* const def = parserNew ("Myrddin");
46 	def->extensions = extensions;
47 	def->tagRegexTable = myrddinTagRegexTable;
48 	def->tagRegexCount = ARRAY_SIZE (myrddinTagRegexTable);
49 	def->method     = METHOD_NOT_CRAFTED|METHOD_REGEX;
50 	return def;
51 }
52