2 * Copyright (c) 2016, Red Hat, Inc.
3 * Copyright (c) 2016, Masatake YAMATO
5 * This source code is released for free distribution under the terms of the
6 * GNU General Public License version 2 or (at your option) any later version.
14 #include "options_p.h"
17 extern tagWriter uCtagsWriter
;
18 extern tagWriter eCtagsWriter
;
19 extern tagWriter etagsWriter
;
20 extern tagWriter xrefWriter
;
21 extern tagWriter jsonWriter
;
23 static tagWriter
*writerTable
[WRITER_COUNT
] = {
24 [WRITER_U_CTAGS
] = &uCtagsWriter
,
25 [WRITER_E_CTAGS
] = &eCtagsWriter
,
26 [WRITER_ETAGS
] = &etagsWriter
,
27 [WRITER_XREF
] = &xrefWriter
,
28 [WRITER_JSON
] = &jsonWriter
,
29 [WRITER_CUSTOM
] = NULL
,
32 static tagWriter
*writer
;
34 extern void setTagWriter (writerType wtype
, tagWriter
*customWriter
)
36 if (wtype
!= WRITER_CUSTOM
)
37 writer
= writerTable
[wtype
];
39 writer
= customWriter
;
43 extern void writerSetup (MIO
*mio
, void *clientData
)
45 writer
->clientData
= clientData
;
47 if (writer
->preWriteEntry
)
48 writer
->private = writer
->preWriteEntry (writer
, mio
,
51 writer
->private = NULL
;
54 extern bool writerTeardown (MIO
*mio
, const char *filename
)
56 if (writer
->postWriteEntry
)
59 r
= writer
->postWriteEntry (writer
, mio
, filename
,
61 writer
->private = NULL
;
67 extern int writerWriteTag (MIO
* mio
, const tagEntryInfo
*const tag
)
69 return writer
->writeEntry (writer
, mio
, tag
,
73 extern int writerWritePtag (MIO
* mio
,
75 const char *const fileName
,
76 const char *const pattern
,
77 const char *const parserName
)
79 if (writer
->writePtagEntry
== NULL
)
82 return writer
->writePtagEntry (writer
, mio
, desc
, fileName
,
88 extern void writerRescanFailed (unsigned long validTagNum
)
90 if (writer
->rescanFailedEntry
)
91 writer
->rescanFailedEntry(writer
, validTagNum
, writer
->clientData
);
94 extern bool ptagMakeCtagsOutputMode (ptagDesc
*desc
, langType langType CTAGS_ATTR_UNUSED
,
95 const void *data CTAGS_ATTR_UNUSED
)
99 if (&uCtagsWriter
== writer
)
101 else if (&eCtagsWriter
== writer
)
104 return writePseudoTag (desc
,
106 "u-ctags or e-ctags",
110 extern const char *outputDefaultFileName (void)
112 return writer
->defaultFileName
;
115 extern bool writerCanPrintPtag (void)
117 return (writer
->writePtagEntry
)? true: false;
120 extern bool writerDoesTreatFieldAsFixed (int fieldType
)
122 if (writer
->treatFieldAsFixed
)
123 return writer
->treatFieldAsFixed (fieldType
);
128 extern enum filenameSepOp
getFilenameSeparator (enum filenameSepOp currentSetting
)
130 if (writer
->overrideFilenameSeparator
)
131 return writer
->overrideFilenameSeparator (currentSetting
);
132 return currentSetting
;
136 extern bool ptagMakeCtagsOutputFilesep (ptagDesc
*desc
,
137 langType language CTAGS_ATTR_UNUSED
,
140 const char *sep
= "slash";
142 const optionValues
*opt
= data
;
143 if (getFilenameSeparator (opt
->useSlashAsFilenameSeparator
)
144 != FILENAME_SEP_USE_SLASH
)
147 return writePseudoTag (desc
, sep
, "slash or backslash", NULL
);
150 extern bool ptagMakeCtagsOutputExcmd (ptagDesc
*desc
,
151 langType language CTAGS_ATTR_UNUSED
,
155 const optionValues
*opt
= data
;
175 return writePseudoTag (desc
, excmd
,
176 "number, pattern, mixed, or combineV2",
180 extern void writerCheckOptions (bool fieldsWereReset
)
182 if (writer
->checkOptions
)
183 writer
->checkOptions (writer
, fieldsWereReset
);
186 extern bool writerPrintPtagByDefault (void)
188 return writer
->printPtagByDefault
;