xref: /Universal-ctags/main/field.h (revision 4dd2919f62dbb50491c5bb20543c48007f6a690c)
12894800fSMasatake YAMATO /*
22894800fSMasatake YAMATO  *
32894800fSMasatake YAMATO  *  Copyright (c) 2015, Red Hat, Inc.
42894800fSMasatake YAMATO  *  Copyright (c) 2015, Masatake YAMATO
52894800fSMasatake YAMATO  *
62894800fSMasatake YAMATO  *  Author: Masatake YAMATO <yamato@redhat.com>
72894800fSMasatake YAMATO  *
82894800fSMasatake YAMATO  *   This source code is released for free distribution under the terms of the
92894800fSMasatake YAMATO  *   GNU General Public License version 2 or (at your option) any later version.
102894800fSMasatake YAMATO  *
112894800fSMasatake YAMATO  */
125474c2e5SMasatake YAMATO #ifndef CTAGS_MAIN_FIELD_H
135474c2e5SMasatake YAMATO #define CTAGS_MAIN_FIELD_H
142894800fSMasatake YAMATO 
15c08c70d0SMasatake YAMATO /*
16c08c70d0SMasatake YAMATO *   INCLUDE FILES
17c08c70d0SMasatake YAMATO */
18c08c70d0SMasatake YAMATO 
192894800fSMasatake YAMATO #include "general.h"
20c645eb4cSMasatake YAMATO #include "types.h"
21c645eb4cSMasatake YAMATO 
22cc2cd3ceSMasatake YAMATO #include "vstring.h"
232894800fSMasatake YAMATO 
24c08c70d0SMasatake YAMATO /*
25c08c70d0SMasatake YAMATO *   DATA DECLARATIONS
26c08c70d0SMasatake YAMATO */
27c08c70d0SMasatake YAMATO 
282894800fSMasatake YAMATO typedef enum eFieldType { /* extension field content control */
292894800fSMasatake YAMATO 	FIELD_UNKNOWN = -1,
305f95b209SMasatake YAMATO 
315f95b209SMasatake YAMATO 	/* BASIC FIELDS */
325f95b209SMasatake YAMATO 	FIELD_NAME,
33800ba473SMasatake YAMATO 	FIELD_INPUT_FILE,
345f95b209SMasatake YAMATO 	FIELD_PATTERN,
350b491fdfSMasatake YAMATO 
360b491fdfSMasatake YAMATO 	FIELD_ECTAGS_START,
370b491fdfSMasatake YAMATO 	FIELD_COMPACT_INPUT_LINE = FIELD_ECTAGS_START,
385f95b209SMasatake YAMATO 
395f95b209SMasatake YAMATO 	/* EXTENSION FIELDS */
400b491fdfSMasatake YAMATO 	FIELD_JSON_LOOP_START,
410b491fdfSMasatake YAMATO 	FIELD_FILE_SCOPE = FIELD_JSON_LOOP_START,
422894800fSMasatake YAMATO 	FIELD_KIND_LONG,
432894800fSMasatake YAMATO 	FIELD_KIND,
442894800fSMasatake YAMATO 	FIELD_LANGUAGE,
452894800fSMasatake YAMATO 	FIELD_LINE_NUMBER,
462894800fSMasatake YAMATO 	FIELD_SCOPE,
472894800fSMasatake YAMATO 	FIELD_TYPE_REF,
482894800fSMasatake YAMATO 	FIELD_KIND_KEY,
490b491fdfSMasatake YAMATO 	FIELD_ECTAGS_LOOP_START,
500b491fdfSMasatake YAMATO 	FIELD_INHERITANCE = FIELD_ECTAGS_LOOP_START,
510b491fdfSMasatake YAMATO 	FIELD_ACCESS,
520b491fdfSMasatake YAMATO 	FIELD_IMPLEMENTATION,
530b491fdfSMasatake YAMATO 	FIELD_SIGNATURE,
540b491fdfSMasatake YAMATO 	FIELD_ECTAGS_LOOP_LAST = FIELD_SIGNATURE,
5522f33d7aSMasatake YAMATO 
560b491fdfSMasatake YAMATO 	/* Extension fields newly introduced in Universal Ctags. */
570b491fdfSMasatake YAMATO 	FIELDS_UCTAGS_START,
580b491fdfSMasatake YAMATO 	FIELD_REF_MARK = FIELDS_UCTAGS_START,
59aad248efSMasatake YAMATO 	FIELD_SCOPE_KEY,
600b491fdfSMasatake YAMATO 	FIELD_SCOPE_KIND_LONG,
610b491fdfSMasatake YAMATO 	FIELD_UCTAGS_LOOP_START,
620b491fdfSMasatake YAMATO 	FIELD_ROLES = FIELD_UCTAGS_LOOP_START,
6395ad9dc1SMasatake YAMATO 	FIELD_EXTRAS,
6476a4ccb4SMasatake YAMATO 	FIELD_XPATH,
658023231dSMasatake YAMATO 	FIELD_END_LINE,
66c314f261SMasatake YAMATO 	FIELD_EPOCH,
67f0a23ab8SMasatake YAMATO 	FIELD_NTH,
680b491fdfSMasatake YAMATO 
69f0a23ab8SMasatake YAMATO 	FIELD_BUILTIN_LAST = FIELD_NTH,
702894800fSMasatake YAMATO } fieldType ;
712894800fSMasatake YAMATO 
72d0ada60dSMasatake YAMATO #define fieldDataTypeFalgs "sib" /* used in --list-fields */
7324c73016SMasatake YAMATO typedef enum eFieldDataType {
7424c73016SMasatake YAMATO 	FIELDTYPE_STRING  = 1 << 0,
7524c73016SMasatake YAMATO 	FIELDTYPE_INTEGER = 1 << 1,
7624c73016SMasatake YAMATO 	FIELDTYPE_BOOL    = 1 << 2,
77d0ada60dSMasatake YAMATO 
78d0ada60dSMasatake YAMATO 	/* used in --list-fields */
79d0ada60dSMasatake YAMATO 	FIELDTYPE_END_MARKER = 1 << 3,
8024c73016SMasatake YAMATO } fieldDataType;
8124c73016SMasatake YAMATO 
825e272693SMasatake YAMATO typedef const char* (*fieldRenderer)(const tagEntryInfo *const,
835e272693SMasatake YAMATO 									 const char *,
845e272693SMasatake YAMATO 									 vString *);
855e272693SMasatake YAMATO 
86a696f376SMasatake YAMATO #define FIELD_LETTER_NO_USE '\0'
87f60f4e0bSMasatake YAMATO struct sFieldDefinition {
88ce2f7842SMasatake YAMATO 	/* letter, and ftype are initialized in the main part,
89ad1a3891SMasatake YAMATO 	   not in a parser. */
90ad1a3891SMasatake YAMATO #define NUL_FIELD_LETTER '\0'
91ad1a3891SMasatake YAMATO 	unsigned char letter;
92ad1a3891SMasatake YAMATO 	const char* name;
93ad1a3891SMasatake YAMATO 	const char* description;
94ce990805SThomas Braun 	bool enabled;
955e272693SMasatake YAMATO 
965e272693SMasatake YAMATO 	fieldRenderer render;
975e272693SMasatake YAMATO 	fieldRenderer renderNoEscaping;
98c54f0614SMasatake YAMATO 	bool (* doesContainAnyChar) (const tagEntryInfo *const, const char*, const char *);
995e272693SMasatake YAMATO 
100b599bf48SMasatake YAMATO 	bool (* isValueAvailable) (const tagEntryInfo *const);
1015e272693SMasatake YAMATO 
102fba3677cSMasatake YAMATO 	const char * getterValueType;
103*4dd2919fSMasatake YAMATO 	struct _EsObject * (* getValueObject) (const tagEntryInfo *, const fieldDefinition *);
104fba3677cSMasatake YAMATO 	const char * setterValueType;
105fba3677cSMasatake YAMATO 
106fba3677cSMasatake YAMATO 	/* Return es_false if passed value is acceptable.
107fba3677cSMasatake YAMATO 	   Return an error object is unacceptable. */
108*4dd2919fSMasatake YAMATO 	struct _EsObject * (* checkValueForSetter) (const fieldDefinition *, const struct _EsObject *);
109*4dd2919fSMasatake YAMATO 	struct _EsObject * (* setValueObject) (tagEntryInfo *, const fieldDefinition *, const struct _EsObject *);
110fba3677cSMasatake YAMATO 
11124c73016SMasatake YAMATO 	fieldDataType dataType; /* used in json output */
112ad1a3891SMasatake YAMATO 
113ad1a3891SMasatake YAMATO 	unsigned int ftype;	/* Given from the main part */
114f60f4e0bSMasatake YAMATO };
115ad1a3891SMasatake YAMATO 
1162894800fSMasatake YAMATO 
1175d1f9f22SMasatake YAMATO /*
118c08c70d0SMasatake YAMATO *   FUNCTION PROTOTYPES
119c08c70d0SMasatake YAMATO */
1205d1f9f22SMasatake YAMATO 
121ce990805SThomas Braun extern bool isFieldEnabled (fieldType type);
122aa9256e3SMasatake YAMATO 
1235474c2e5SMasatake YAMATO #endif	/* CTAGS_MAIN_FIELD_H */
124