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