11c38aecfSMasatake YAMATO /*
21c38aecfSMasatake YAMATO * Generated by ./misc/optlib2c from optlib/elixir.ctags, Don't edit this manually.
31c38aecfSMasatake YAMATO */
41c38aecfSMasatake YAMATO #include "general.h"
51c38aecfSMasatake YAMATO #include "parse.h"
61c38aecfSMasatake YAMATO #include "routines.h"
71c38aecfSMasatake YAMATO #include "field.h"
81c38aecfSMasatake YAMATO #include "xtag.h"
91c38aecfSMasatake YAMATO
101c38aecfSMasatake YAMATO
initializeElixirParser(const langType language CTAGS_ATTR_UNUSED)111c38aecfSMasatake YAMATO static void initializeElixirParser (const langType language CTAGS_ATTR_UNUSED)
121c38aecfSMasatake YAMATO {
131c38aecfSMasatake YAMATO }
141c38aecfSMasatake YAMATO
ElixirParser(void)151c38aecfSMasatake YAMATO extern parserDefinition* ElixirParser (void)
161c38aecfSMasatake YAMATO {
171c38aecfSMasatake YAMATO static const char *const extensions [] = {
181c38aecfSMasatake YAMATO "ex",
191c38aecfSMasatake YAMATO "exs",
201c38aecfSMasatake YAMATO NULL
211c38aecfSMasatake YAMATO };
221c38aecfSMasatake YAMATO
231c38aecfSMasatake YAMATO static const char *const aliases [] = {
241c38aecfSMasatake YAMATO NULL
251c38aecfSMasatake YAMATO };
261c38aecfSMasatake YAMATO
271c38aecfSMasatake YAMATO static const char *const patterns [] = {
281c38aecfSMasatake YAMATO NULL
291c38aecfSMasatake YAMATO };
301c38aecfSMasatake YAMATO
311c38aecfSMasatake YAMATO static kindDefinition ElixirKindTable [] = {
321c38aecfSMasatake YAMATO {
332c46f6d4SBryan Enders true, 'p', "protocol", "protocols (defprotocol...)",
342c46f6d4SBryan Enders },
352c46f6d4SBryan Enders {
36443b88f2SBryan Enders true, 'm', "module", "modules (defmodule ...)",
37443b88f2SBryan Enders },
38443b88f2SBryan Enders {
391c38aecfSMasatake YAMATO true, 'f', "function", "functions (def ...)",
401c38aecfSMasatake YAMATO },
411c38aecfSMasatake YAMATO {
421c38aecfSMasatake YAMATO true, 'c', "callback", "callbacks (defcallback ...)",
431c38aecfSMasatake YAMATO },
441c38aecfSMasatake YAMATO {
451c38aecfSMasatake YAMATO true, 'd', "delegate", "delegates (defdelegate ...)",
461c38aecfSMasatake YAMATO },
471c38aecfSMasatake YAMATO {
481c38aecfSMasatake YAMATO true, 'e', "exception", "exceptions (defexception ...)",
491c38aecfSMasatake YAMATO },
501c38aecfSMasatake YAMATO {
51943eb288SIvan Gonzalez Polanco true, 'g', "guard", "guards (defguard ...)",
52943eb288SIvan Gonzalez Polanco },
53943eb288SIvan Gonzalez Polanco {
541c38aecfSMasatake YAMATO true, 'i', "implementation", "implementations (defimpl ...)",
551c38aecfSMasatake YAMATO },
561c38aecfSMasatake YAMATO {
571c38aecfSMasatake YAMATO true, 'a', "macro", "macros (defmacro ...)",
581c38aecfSMasatake YAMATO },
591c38aecfSMasatake YAMATO {
601c38aecfSMasatake YAMATO true, 'o', "operator", "operators (e.g. \"defmacro a <<< b\")",
611c38aecfSMasatake YAMATO },
621c38aecfSMasatake YAMATO {
631c38aecfSMasatake YAMATO true, 'r', "record", "records (defrecord...)",
641c38aecfSMasatake YAMATO },
651c38aecfSMasatake YAMATO {
661c38aecfSMasatake YAMATO true, 't', "test", "tests (test ...)",
671c38aecfSMasatake YAMATO },
685b3505b0SBryan Enders {
695b3505b0SBryan Enders true, 'y', "type", "types (@type ...)",
705b3505b0SBryan Enders },
711c38aecfSMasatake YAMATO };
721c38aecfSMasatake YAMATO static tagRegexTable ElixirTagRegexTable [] = {
732c46f6d4SBryan Enders {"^[ \t]*defprotocol[ \t]+([A-Z][a-zA-Z0-9_]*\\.)*([A-Z][a-zA-Z0-9_?!]*)", "\\2",
742c46f6d4SBryan Enders "p", "{scope=set}", NULL, false},
751c38aecfSMasatake YAMATO {"^[ \t]*defmodule[ \t]+([A-Z][a-zA-Z0-9_]*\\.)*([A-Z][a-zA-Z0-9_?!]*)", "\\2",
76443b88f2SBryan Enders "m", "{scope=set}", NULL, false},
77bb84aac2SMasatake YAMATO {"^[ \t]*def((p?)|macro(p?))[ \t]+([a-zA-Z0-9_?!]+)[ \t]+([\\|\\^/&<>~.=!*+-]{1,3}|and|or|in|(not( +in)?)|when)[ \t]+[a-zA-Z0-9_?!]", "\\5",
78443b88f2SBryan Enders "o", "{scope=ref}{exclusive}", NULL, false},
79e951a313SBryan Enders {"^[ \t]*def[ \t]+([a-z_][a-zA-Z0-9_?!]*)", "\\1",
800da42576SMasatake YAMATO "f", "{scope=ref}{{. (public) access:}}", NULL, false},
81e951a313SBryan Enders {"^[ \t]*defp[ \t]+([a-z_][a-zA-Z0-9_?!]*)", "\\1",
820da42576SMasatake YAMATO "f", "{scope=ref}{{. (private) access:}}", NULL, false},
83443b88f2SBryan Enders {"^[ \t]*(@|def)callback[ \t]+([a-z_][a-zA-Z0-9_?!]*)", "\\2",
84443b88f2SBryan Enders "c", "{scope=ref}", NULL, false},
85443b88f2SBryan Enders {"^[ \t]*defdelegate[ \t]+([a-z_][a-zA-Z0-9_?!]*)", "\\1",
86443b88f2SBryan Enders "d", "{scope=ref}", NULL, false},
87443b88f2SBryan Enders {"^[ \t]*defexception[ \t]+([A-Z][a-zA-Z0-9_]*\\.)*([A-Z][a-zA-Z0-9_?!]*)", "\\2",
88*bd186360SMasatake YAMATO "e", "{scope=ref}{exclusive}", NULL, false},
89*bd186360SMasatake YAMATO {"^[ \t]*defexception[ \t]+", "",
90*bd186360SMasatake YAMATO "", "{exclusive}"
91*bd186360SMasatake YAMATO "{{\n"
92*bd186360SMasatake YAMATO " _scopetop {\n"
93*bd186360SMasatake YAMATO " dup :kind /module eq {\n"
94*bd186360SMasatake YAMATO " dup\n"
95*bd186360SMasatake YAMATO " :name /exception _tag _commit exch scope:\n"
96*bd186360SMasatake YAMATO " } if\n"
97*bd186360SMasatake YAMATO " } if\n"
98*bd186360SMasatake YAMATO "}}", NULL, false},
99e951a313SBryan Enders {"^[ \t]*defguard[ \t]+(is_[a-zA-Z0-9_?!]+)", "\\1",
1000da42576SMasatake YAMATO "g", "{scope=ref}{{. (public) access:}}", NULL, false},
101e951a313SBryan Enders {"^[ \t]*defguardp[ \t]+(is_[a-zA-Z0-9_?!]+)", "\\1",
1020da42576SMasatake YAMATO "g", "{scope=ref}{{. (private) access:}}", NULL, false},
103443b88f2SBryan Enders {"^[ \t]*defimpl[ \t]+([A-Z][a-zA-Z0-9_]*\\.)*([A-Z][a-zA-Z0-9_?!]*)", "\\2",
104443b88f2SBryan Enders "i", "{scope=ref}", NULL, false},
105e951a313SBryan Enders {"^[ \t]*defmacro[ \t]+([a-z_][a-zA-Z0-9_?!]*)(.[^\\|\\^/&<>~.=!*+-]+)", "\\1",
1060da42576SMasatake YAMATO "a", "{scope=ref}{{. (public) access:}}", NULL, false},
107e951a313SBryan Enders {"^[ \t]*defmacrop[ \t]+([a-z_][a-zA-Z0-9_?!]*)(.[^\\|\\^/&<>~.=!*+-]+)", "\\1",
1080da42576SMasatake YAMATO "a", "{scope=ref}{{. (private) access:}}", NULL, false},
109e951a313SBryan Enders {"^[ \t]*Record\\.defrecord[ \t(]+:([a-zA-Z0-9_]+)(\\)?)", "\\1",
1100da42576SMasatake YAMATO "r", "{scope=ref}{{. (public) access:}}", NULL, false},
111e951a313SBryan Enders {"^[ \t]*Record\\.defrecordp[ \t(]+:([a-zA-Z0-9_]+)(\\)?)", "\\1",
1120da42576SMasatake YAMATO "r", "{scope=ref}{{. (private) access:}}", NULL, false},
113c477ce56SIvan Gonzalez Polanco {"^[ \t]*test[ \t(]+\"([a-z_][a-zA-Z0-9_?! ]*)\"*(\\)?)[ \t]*do", "\\1",
114443b88f2SBryan Enders "t", "{scope=ref}", NULL, false},
1155b3505b0SBryan Enders {"^[ \t]*@(type|opaque)[ \t]+([a-z_][a-zA-Z0-9_?!]*)", "\\2",
1160da42576SMasatake YAMATO "y", "{scope=ref}{{. (public) access:}}", NULL, false},
1175b3505b0SBryan Enders {"^[ \t]*@typep[ \t]+([a-z_][a-zA-Z0-9_?!]*)", "\\1",
1180da42576SMasatake YAMATO "y", "{scope=ref}{{. (private) access:}}", NULL, false},
1191c38aecfSMasatake YAMATO };
1201c38aecfSMasatake YAMATO
1211c38aecfSMasatake YAMATO
1221c38aecfSMasatake YAMATO parserDefinition* const def = parserNew ("Elixir");
1231c38aecfSMasatake YAMATO
1241c38aecfSMasatake YAMATO def->enabled = true;
1251c38aecfSMasatake YAMATO def->extensions = extensions;
1261c38aecfSMasatake YAMATO def->patterns = patterns;
1271c38aecfSMasatake YAMATO def->aliases = aliases;
1281c38aecfSMasatake YAMATO def->method = METHOD_NOT_CRAFTED|METHOD_REGEX;
1296b1a862eSMasatake YAMATO def->useCork = CORK_QUEUE;
1301c38aecfSMasatake YAMATO def->kindTable = ElixirKindTable;
1311c38aecfSMasatake YAMATO def->kindCount = ARRAY_SIZE(ElixirKindTable);
1321c38aecfSMasatake YAMATO def->tagRegexTable = ElixirTagRegexTable;
1331c38aecfSMasatake YAMATO def->tagRegexCount = ARRAY_SIZE(ElixirTagRegexTable);
1341c38aecfSMasatake YAMATO def->initialize = initializeElixirParser;
1351c38aecfSMasatake YAMATO
1361c38aecfSMasatake YAMATO return def;
1371c38aecfSMasatake YAMATO }
138