2 * Copyright (c) 2016, Jiri Techet
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.
7 * Defines ctags API when compiled as a library.
10 #include "general.h" /* must always come first */
14 #include "ctags-api.h"
27 static bool nofatalErrorPrinter (const errorSelection selection
,
28 const char *const format
,
29 va_list ap
, void *data CTAGS_ATTR_UNUSED
)
31 fprintf (stderr
, "%s: ", (selection
& WARNING
) ? "Warning: " : "Error");
32 vfprintf (stderr
, format
, ap
);
33 if (selection
& PERROR
)
35 fprintf (stderr
, " : %s", strerror (errno
));
44 extern void ctagsInit(void)
46 setErrorPrinter (nofatalErrorPrinter
, NULL
);
47 setTagWriter (&ctagsWriter
);
55 initDefaultTrashBox ();
57 /* make sure all parsers are initialized */
58 initializeParser (LANG_AUTO
);
63 extern void ctagsParse(unsigned char *buffer
, size_t bufferSize
,
64 const char *fileName
, const langType language
,
65 tagEntryFunction tagCallback
, passStartCallback passCallback
,
68 if (buffer
== NULL
&& fileName
== NULL
)
70 error(FATAL
, "Neither buffer nor file provided to ctagsParse()");
74 createTagsWithFallback(buffer
, bufferSize
, fileName
, language
,
75 tagCallback
, passCallback
, userData
);
79 extern const char *ctagsGetLangName(int lang
)
81 return getLanguageName(lang
);
85 extern int ctagsGetNamedLang(const char *name
)
87 return getNamedLanguage(name
, 0);
91 extern const char *ctagsGetLangKinds(int lang
)
93 const parserDefinition
*def
= getParserDefinition(lang
);
95 static char kinds
[257];
97 for (i
= 0; i
< def
->kindCount
; i
++)
98 kinds
[i
] = def
->kindTable
[i
].letter
;
105 extern const char *ctagsGetKindName(char kind
, int lang
)
107 const parserDefinition
*def
= getParserDefinition(lang
);
110 for (i
= 0; i
< def
->kindCount
; i
++)
112 if (def
->kindTable
[i
].letter
== kind
)
113 return def
->kindTable
[i
].name
;
119 extern char ctagsGetKindFromName(const char *name
, int lang
)
121 const parserDefinition
*def
= getParserDefinition(lang
);
124 for (i
= 0; i
< def
->kindCount
; i
++)
126 if (strcmp(def
->kindTable
[i
].name
, name
) == 0)
127 return def
->kindTable
[i
].letter
;
133 extern bool ctagsIsUsingRegexParser(int lang
)
135 return getParserDefinition(lang
)->method
& METHOD_REGEX
;
139 extern unsigned int ctagsGetLangCount(void)
141 return countParsers();
144 #endif /* CTAGS_LIB */