[geany/geany] 3f52bf: entry: Take over uctags tag writing code
Jiří Techet
git-noreply at xxxxx
Mon Dec 17 21:05:42 UTC 2018
Branch: refs/heads/master
Author: Jiří Techet <techet at gmail.com>
Committer: Jiří Techet <techet at gmail.com>
Date: Sun, 09 Oct 2016 10:48:49 UTC
Commit: 3f52bfb4ab95598f125673049bac76226772b77b
https://github.com/geany/geany/commit/3f52bfb4ab95598f125673049bac76226772b77b
Log Message:
-----------
entry: Take over uctags tag writing code
We don't use it so we can grab whatever is there.
Modified Paths:
--------------
ctags/main/entry.c
ctags/main/entry.h
Modified: ctags/main/entry.c
122 lines changed, 78 insertions(+), 44 deletions(-)
===================================================================
@@ -50,7 +50,6 @@
#include "sort.h"
#include "strlist.h"
#include "xtag.h"
-#include "ctags.h"
/*
* MACROS
@@ -161,38 +160,53 @@ static void rememberMaxLengths (const size_t nameLength, const size_t lineLength
TagFile.max.line = lineLength;
}
-static void writePseudoTag (const char *const tagName,
- const char *const fileName,
- const char *const pattern)
+static void addCommonPseudoTags (void)
{
- const int length = mio_printf (TagFile.mio, "%s%s\t%s\t/%s/\n",
- PSEUDO_TAG_PREFIX, tagName, fileName, pattern);
- ++TagFile.numTags.added;
- rememberMaxLengths (strlen (tagName), (size_t) length);
+ int i;
+
+ for (i = 0; i < PTAG_COUNT; i++)
+ {
+ if (isPtagCommonInParsers (i))
+ makePtagIfEnabled (i, NULL);
+ }
}
-static void addPseudoTags (void)
+extern void makeFileTag (const char *const fileName)
{
- if (! Option.xref)
+ xtagType xtag = XTAG_UNKNOWN;
+
+ if (isXtagEnabled(XTAG_FILE_NAMES))
+ xtag = XTAG_FILE_NAMES;
+
+ if (xtag != XTAG_UNKNOWN)
{
- char format [11];
- const char *formatComment = "unknown format";
-
- sprintf (format, "%u", Option.tagFileFormat);
-
- if (Option.tagFileFormat == 1)
- formatComment = "original ctags format";
- else if (Option.tagFileFormat == 2)
- formatComment =
- "extended format; --format=1 will not append ;\" to lines";
-
- writePseudoTag ("TAG_FILE_FORMAT", format, formatComment);
- writePseudoTag ("TAG_FILE_SORTED", Option.sorted ? "1":"0",
- "0=unsorted, 1=sorted");
- writePseudoTag ("TAG_PROGRAM_AUTHOR", AUTHOR_NAME, "");
- writePseudoTag ("TAG_PROGRAM_NAME", PROGRAM_NAME, "");
- writePseudoTag ("TAG_PROGRAM_URL", PROGRAM_URL, "official site");
- writePseudoTag ("TAG_PROGRAM_VERSION", PROGRAM_VERSION, "");
+ tagEntryInfo tag;
+ kindOption *kind;
+
+ kind = getInputLanguageFileKind();
+ Assert (kind);
+ kind->enabled = isXtagEnabled(XTAG_FILE_NAMES);
+
+ /* TODO: you can return here if enabled == false. */
+
+ initTagEntry (&tag, baseFilename (fileName), kind);
+
+ tag.isFileEntry = true;
+ tag.lineNumberEntry = true;
+ markTagExtraBit (&tag, xtag);
+
+ tag.lineNumber = 1;
+ if (isFieldEnabled (FIELD_END))
+ {
+ /* isFieldEnabled is called again in the rendering
+ stage. However, it is called here for avoiding
+ unnecessary read line loop. */
+ while (readLineFromInputFile () != NULL)
+ ; /* Do nothing */
+ tag.extensionFields.endLine = getInputLineNumber ();
+ }
+
+ makeTagEntry (&tag);
}
}
@@ -315,41 +329,48 @@ extern void openTagFile (void)
/* Open a tempfile with read and write mode. Read mode is used when
* write the result to stdout. */
TagFile.mio = tempFile ("w+", &TagFile.name);
+ if (isXtagEnabled (XTAG_PSEUDO_TAGS))
+ addCommonPseudoTags ();
}
else
{
bool fileExists;
- setDefaultTagFileName ();
TagFile.name = eStrdup (Option.tagFileName);
fileExists = doesFileExist (TagFile.name);
if (fileExists && ! isTagFile (TagFile.name))
error (FATAL,
"\"%s\" doesn't look like a tag file; I refuse to overwrite it.",
TagFile.name);
- if (Option.append && fileExists)
+ if (Option.etags)
{
- TagFile.mio = mio_new_file (TagFile.name, "r+");
- if (TagFile.mio != NULL)
- {
- TagFile.numTags.prev = updatePseudoTags (TagFile.mio);
- mio_free (TagFile.mio);
- TagFile.mio = mio_new_file (TagFile.name, "a+");
- }
+ if (Option.append && fileExists)
+ TagFile.mio = mio_new_file (TagFile.name, "a+b");
+ else
+ TagFile.mio = mio_new_file (TagFile.name, "w+b");
}
else
{
- TagFile.mio = mio_new_file (TagFile.name, "w");
- if (TagFile.mio != NULL)
- addPseudoTags ();
+ if (Option.append && fileExists)
+ {
+ TagFile.mio = mio_new_file (TagFile.name, "r+");
+ if (TagFile.mio != NULL)
+ {
+ TagFile.numTags.prev = updatePseudoTags (TagFile.mio);
+ mio_free (TagFile.mio);
+ TagFile.mio = mio_new_file (TagFile.name, "a+");
+ }
+ }
+ else
+ {
+ TagFile.mio = mio_new_file (TagFile.name, "w");
+ if (TagFile.mio != NULL && isXtagEnabled (XTAG_PSEUDO_TAGS))
+ addCommonPseudoTags ();
+ }
}
-
if (TagFile.mio == NULL)
- {
error (FATAL | PERROR, "cannot open tag file");
- exit (1);
- }
}
if (TagsToStdout)
TagFile.directory = eStrdup (CurrentDirectory);
@@ -455,6 +476,19 @@ extern void setTagWriter (tagWriter *t)
/* writer = t; */
}
+extern void markTagExtraBit (tagEntryInfo *const tag, xtagType extra)
+{
+ unsigned int index;
+ unsigned int offset;
+
+ Assert (extra < XTAG_COUNT);
+ Assert (extra != XTAG_UNKNOWN);
+
+ index = (extra / 8);
+ offset = (extra % 8);
+ tag->extra [ index ] |= (1 << offset);
+}
+
extern unsigned long numTagsAdded(void)
{
return TagFile.numTags.added;
Modified: ctags/main/entry.h
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -129,5 +129,6 @@ extern void setTagFilePosition (MIOPos *p);
extern const char* getTagFileDirectory (void);
extern void getTagScopeInformation (tagEntryInfo *const tag,
const char **kind, const char **name);
+extern void markTagExtraBit (tagEntryInfo *const tag, xtagType extra);
#endif /* CTAGS_MAIN_ENTRY_H */
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list