15176f023SMasatake YAMATO /*
25176f023SMasatake YAMATO * Copyright (c) 1998-2002, Darren Hiebert
35176f023SMasatake YAMATO *
45176f023SMasatake YAMATO * This source code is released for free distribution under the terms of the
55176f023SMasatake YAMATO * GNU General Public License version 2 or (at your option) any later version.
65176f023SMasatake YAMATO *
75176f023SMasatake YAMATO * External interface to entry.c
85176f023SMasatake YAMATO */
95176f023SMasatake YAMATO
105176f023SMasatake YAMATO #include "general.h" /* must always come first */
115176f023SMasatake YAMATO
125176f023SMasatake YAMATO #include "entry.h"
13c08c70d0SMasatake YAMATO #include "field_p.h"
14d45725c1SMasatake YAMATO #include "fmt_p.h"
155176f023SMasatake YAMATO #include "mio.h"
1621996d92SMasatake YAMATO #include "options_p.h"
17*b9636b4dSMasatake YAMATO #include "ptag_p.h"
18285b4dfeSMasatake YAMATO #include "writer_p.h"
195176f023SMasatake YAMATO
20*b9636b4dSMasatake YAMATO #include <string.h>
21*b9636b4dSMasatake YAMATO
225176f023SMasatake YAMATO
230925aa59SMasatake YAMATO static int writeXrefEntry (tagWriter *writer CTAGS_ATTR_UNUSED,
245053d6adSMasatake YAMATO MIO * mio, const tagEntryInfo *const tag,
255053d6adSMasatake YAMATO void *clientData CTAGS_ATTR_UNUSED);
26*b9636b4dSMasatake YAMATO static int writeXrefPtagEntry (tagWriter *writer, MIO * mio, const ptagDesc *desc,
27*b9636b4dSMasatake YAMATO const char *const fileName,
28*b9636b4dSMasatake YAMATO const char *const pattern,
29*b9636b4dSMasatake YAMATO const char *const parserName,
30*b9636b4dSMasatake YAMATO void *clientData);
315176f023SMasatake YAMATO
325176f023SMasatake YAMATO tagWriter xrefWriter = {
335176f023SMasatake YAMATO .writeEntry = writeXrefEntry,
34*b9636b4dSMasatake YAMATO .writePtagEntry = writeXrefPtagEntry,
35*b9636b4dSMasatake YAMATO .printPtagByDefault = false,
365176f023SMasatake YAMATO .preWriteEntry = NULL,
375176f023SMasatake YAMATO .postWriteEntry = NULL,
3867d1f12fSJiří Techet .rescanFailedEntry = NULL,
398182f840SMasatake YAMATO .treatFieldAsFixed = NULL,
404b7a1543SMasatake YAMATO .defaultFileName = NULL,
415176f023SMasatake YAMATO };
425176f023SMasatake YAMATO
writeXrefPtagEntry(tagWriter * writer,MIO * mio,const ptagDesc * desc,const char * const fileName,const char * const pattern,const char * const parserName,void * clientData)43*b9636b4dSMasatake YAMATO static int writeXrefPtagEntry (tagWriter *writer, MIO * mio, const ptagDesc *desc,
44*b9636b4dSMasatake YAMATO const char *const fileName,
45*b9636b4dSMasatake YAMATO const char *const pattern,
46*b9636b4dSMasatake YAMATO const char *const parserName,
47*b9636b4dSMasatake YAMATO void *clientData)
48*b9636b4dSMasatake YAMATO {
49*b9636b4dSMasatake YAMATO tagEntryInfo e;
50*b9636b4dSMasatake YAMATO vString *name = vStringNewInit(PSEUDO_TAG_PREFIX);
51*b9636b4dSMasatake YAMATO
52*b9636b4dSMasatake YAMATO memset (&e, 0, sizeof(e));
53*b9636b4dSMasatake YAMATO
54*b9636b4dSMasatake YAMATO e.isPseudoTag = 1;
55*b9636b4dSMasatake YAMATO
56*b9636b4dSMasatake YAMATO vStringCatS (name, desc->name);
57*b9636b4dSMasatake YAMATO if (parserName)
58*b9636b4dSMasatake YAMATO {
59*b9636b4dSMasatake YAMATO vStringCatS (name, PSEUDO_TAG_SEPARATOR);
60*b9636b4dSMasatake YAMATO vStringCatS (name, parserName);
61*b9636b4dSMasatake YAMATO }
62*b9636b4dSMasatake YAMATO e.name = vStringValue (name);
63*b9636b4dSMasatake YAMATO e.inputFileName = fileName;
64*b9636b4dSMasatake YAMATO e.pattern = pattern;
65*b9636b4dSMasatake YAMATO
66*b9636b4dSMasatake YAMATO int length = writeXrefEntry (writer, mio, &e, clientData);
67*b9636b4dSMasatake YAMATO
68*b9636b4dSMasatake YAMATO vStringDelete (name);
69*b9636b4dSMasatake YAMATO
70*b9636b4dSMasatake YAMATO return length;
71*b9636b4dSMasatake YAMATO }
72*b9636b4dSMasatake YAMATO
writeXrefEntry(tagWriter * writer CTAGS_ATTR_UNUSED,MIO * mio,const tagEntryInfo * const tag,void * clientData CTAGS_ATTR_UNUSED)730925aa59SMasatake YAMATO static int writeXrefEntry (tagWriter *writer CTAGS_ATTR_UNUSED,
745053d6adSMasatake YAMATO MIO * mio, const tagEntryInfo *const tag,
755053d6adSMasatake YAMATO void *clientData CTAGS_ATTR_UNUSED)
765176f023SMasatake YAMATO {
775176f023SMasatake YAMATO int length;
785176f023SMasatake YAMATO static fmtElement *fmt1;
795176f023SMasatake YAMATO static fmtElement *fmt2;
805176f023SMasatake YAMATO
815176f023SMasatake YAMATO if (Option.customXfmt)
825176f023SMasatake YAMATO length = fmtPrint (Option.customXfmt, mio, tag);
835176f023SMasatake YAMATO else
845176f023SMasatake YAMATO {
855176f023SMasatake YAMATO if (tag->isFileEntry)
865176f023SMasatake YAMATO return 0;
875176f023SMasatake YAMATO
885176f023SMasatake YAMATO if (Option.tagFileFormat == 1)
895176f023SMasatake YAMATO {
905176f023SMasatake YAMATO if (fmt1 == NULL)
915176f023SMasatake YAMATO fmt1 = fmtNew ("%-16N %4n %-16F %C");
925176f023SMasatake YAMATO length = fmtPrint (fmt1, mio, tag);
935176f023SMasatake YAMATO }
945176f023SMasatake YAMATO else
955176f023SMasatake YAMATO {
965176f023SMasatake YAMATO if (fmt2 == NULL)
975176f023SMasatake YAMATO fmt2 = fmtNew ("%-16N %-10K %4n %-16F %C");
985176f023SMasatake YAMATO length = fmtPrint (fmt2, mio, tag);
995176f023SMasatake YAMATO }
1005176f023SMasatake YAMATO }
1015176f023SMasatake YAMATO
1025176f023SMasatake YAMATO mio_putc (mio, '\n');
1035176f023SMasatake YAMATO length++;
1045176f023SMasatake YAMATO
1055176f023SMasatake YAMATO return length;
1065176f023SMasatake YAMATO }
107