1 /* 2 * 3 * Copyright (c) 2015, Red Hat, Inc. 4 * Copyright (c) 2015, Masatake YAMATO 5 * 6 * Author: Masatake YAMATO <yamato@redhat.com> 7 * 8 * This source code is released for free distribution under the terms of the 9 * GNU General Public License version 2 or (at your option) any later version. 10 * 11 */ 12 #ifndef CTAGS_MAIN_FIELD_H 13 #define CTAGS_MAIN_FIELD_H 14 15 /* 16 * INCLUDE FILES 17 */ 18 19 #include "general.h" 20 #include "types.h" 21 22 #include "vstring.h" 23 24 /* 25 * DATA DECLARATIONS 26 */ 27 28 typedef enum eFieldType { /* extension field content control */ 29 FIELD_UNKNOWN = -1, 30 31 /* BASIC FIELDS */ 32 FIELD_NAME, 33 FIELD_INPUT_FILE, 34 FIELD_PATTERN, 35 36 FIELD_ECTAGS_START, 37 FIELD_COMPACT_INPUT_LINE = FIELD_ECTAGS_START, 38 39 /* EXTENSION FIELDS */ 40 FIELD_JSON_LOOP_START, 41 FIELD_FILE_SCOPE = FIELD_JSON_LOOP_START, 42 FIELD_KIND_LONG, 43 FIELD_KIND, 44 FIELD_LANGUAGE, 45 FIELD_LINE_NUMBER, 46 FIELD_SCOPE, 47 FIELD_TYPE_REF, 48 FIELD_KIND_KEY, 49 FIELD_ECTAGS_LOOP_START, 50 FIELD_INHERITANCE = FIELD_ECTAGS_LOOP_START, 51 FIELD_ACCESS, 52 FIELD_IMPLEMENTATION, 53 FIELD_SIGNATURE, 54 FIELD_ECTAGS_LOOP_LAST = FIELD_SIGNATURE, 55 56 /* Extension fields newly introduced in Universal Ctags. */ 57 FIELDS_UCTAGS_START, 58 FIELD_REF_MARK = FIELDS_UCTAGS_START, 59 FIELD_SCOPE_KEY, 60 FIELD_SCOPE_KIND_LONG, 61 FIELD_UCTAGS_LOOP_START, 62 FIELD_ROLES = FIELD_UCTAGS_LOOP_START, 63 FIELD_EXTRAS, 64 FIELD_XPATH, 65 FIELD_END_LINE, 66 FIELD_EPOCH, 67 FIELD_NTH, 68 69 FIELD_BUILTIN_LAST = FIELD_NTH, 70 } fieldType ; 71 72 #define fieldDataTypeFalgs "sib" /* used in --list-fields */ 73 typedef enum eFieldDataType { 74 FIELDTYPE_STRING = 1 << 0, 75 FIELDTYPE_INTEGER = 1 << 1, 76 FIELDTYPE_BOOL = 1 << 2, 77 78 /* used in --list-fields */ 79 FIELDTYPE_END_MARKER = 1 << 3, 80 } fieldDataType; 81 82 typedef const char* (*fieldRenderer)(const tagEntryInfo *const, 83 const char *, 84 vString *); 85 86 #define FIELD_LETTER_NO_USE '\0' 87 struct sFieldDefinition { 88 /* letter, and ftype are initialized in the main part, 89 not in a parser. */ 90 #define NUL_FIELD_LETTER '\0' 91 unsigned char letter; 92 const char* name; 93 const char* description; 94 bool enabled; 95 96 fieldRenderer render; 97 fieldRenderer renderNoEscaping; 98 bool (* doesContainAnyChar) (const tagEntryInfo *const, const char*, const char *); 99 100 bool (* isValueAvailable) (const tagEntryInfo *const); 101 102 const char * getterValueType; 103 struct _EsObject * (* getValueObject) (const tagEntryInfo *, const fieldDefinition *); 104 const char * setterValueType; 105 106 /* Return es_false if passed value is acceptable. 107 Return an error object is unacceptable. */ 108 struct _EsObject * (* checkValueForSetter) (const fieldDefinition *, const struct _EsObject *); 109 struct _EsObject * (* setValueObject) (tagEntryInfo *, const fieldDefinition *, const struct _EsObject *); 110 111 fieldDataType dataType; /* used in json output */ 112 113 unsigned int ftype; /* Given from the main part */ 114 }; 115 116 117 /* 118 * FUNCTION PROTOTYPES 119 */ 120 121 extern bool isFieldEnabled (fieldType type); 122 123 #endif /* CTAGS_MAIN_FIELD_H */ 124