Brought web site and win32 build directory into CVS and build process.

git-svn-id: svn://svn.code.sf.net/p/ctags/code/trunk@70 c5d04d22-be80-434c-894e-aa346cc9e8e8
This commit is contained in:
darren 2002-01-27 01:42:30 +00:00
parent 4fc3c45b07
commit 080601cde5
12 changed files with 89 additions and 1206 deletions

View File

@ -19,3 +19,4 @@ syntax.vim
ctags-[0-9].[0-9]*
showtags
win32
releases

3
.gdbinit Normal file
View File

@ -0,0 +1,3 @@
define pst
call ps(st)
end

View File

@ -1,3 +1,4 @@
<!-- $Id$ -->
<html>
<head>
<title>Exuberant Ctags: Adding a new parser</title>

View File

@ -43,11 +43,11 @@ REDIR = 2>&1 | tee $(ERRFILE)
RPM_ROOT= $(HOME)/Rpm
CTAGS_DOSDIR = win32
WEB_ARCHIVE_DIR = $(HOME)/public_html/archives
WEB_CTAGS_DIR = $(HOME)/public_html/ctags
WEB_ARCHIVE_DIR = releases
CTAGS_WEBSITE = website
DEP_DIR = .deps
CC = gcc
CC = gcc3
INCLUDE = -I.
DEFS = -DHAVE_CONFIG_H
COMP_FLAGS = $(INCLUDE) $(DEFS) $(CFLAGS)
@ -198,6 +198,38 @@ cvs-tagcheck-%:
cvs-files:
@ls -1 $(CVS_FILES)
#
# Web site files
#
website-%: website-man-% website-index-% $(CTAGS_WEBSITE)/news.html \
$(CTAGS_WEBSITE)/EXTENDING.html
:
website-man-%: ctags.1 Makefile
@ echo "---------- Generating $(CTAGS_WEBSITE)/ctags.html"
man2html $< | sed -e "s/@@VERSION@@/$*/g" \
-e 's%<A HREF="mailto:[^"]*">\([^@]*\)@\([^<]*\)</A>%\1\&#64;\2%' \
> $(CTAGS_WEBSITE)/ctags.html
website-index-%: index.html Makefile
@ echo "---------- Generating $(CTAGS_WEBSITE)/index.html"
sed -e "s/@@VERSION@@/$*/g" \
-e "s/@@DOS_VERSION@@/`echo $* | sed 's/\.//g'`/g" \
-e "s/@@DATE@@/`date +'%d %B %Y'`/" \
$< > $(CTAGS_WEBSITE)/index.html
$(CTAGS_WEBSITE)/EXTENDING.html: EXTENDING.html
@ echo "---------- Generating $(CTAGS_WEBSITE)/EXTENDING.html"
ln -s ../$< $@
$(CTAGS_WEBSITE)/news.html: NEWS Makefile
@ echo "---------- Generating $(CTAGS_WEBSITE)/news.html"
sed -e 's/</\&lt;/g' -e 's/>/\&gt;/g' \
-e 's@^Current Version:.*$$@<html><head><title>Exuberant Ctags: Change Notes</title></head><body><h1>Change Notes</h1><pre>@' \
-e 's@\(^ctags-.* (.*)\)$$@<b>\1</b>@' \
-e 's@^vim:.*$$@</pre><hr><a href="http:index.html">Back to <strong>Exuberant Ctags</strong></a></body></html>@' \
$< > $@
#
# Release management
#
@ -237,7 +269,8 @@ dos1-%: $(DOS_FILES)
done
cd $(CTAGS_DOSDIR); mv makefile makefile.bak; \
sed -e 's/^\(VERSION = \).*$$/\1$*
/' makefile.bak > makefile
/' makefile.bak > makefile ;\
rm makefile.bak
dos2-%: $(DOS_VER_FILES)
for file in $^ ;do \
@ -260,7 +293,7 @@ rpm-%: ctags-%.tar.gz ctags.spec $(RPM_ROOT)/SOURCES $(RPM_ROOT)/SPECS
@ echo "---------- Building RPM"
cp -p ctags-$*.tar.gz $(RPM_ROOT)/SOURCES/
sed -e "s/@@VERSION@@/$*/" ctags.spec > $(RPM_ROOT)/SPECS/ctags-$*.spec
(cd $(RPM_ROOT)/SPECS; rpm -ba ctags-$*.spec)
(cd $(RPM_ROOT)/SPECS; CC=gcc3 rpm -ba ctags-$*.spec)
rm -fr $(RPM_ROOT)/BUILD/ctags-$*
ctags32-%: ctags-%.tar.gz
@ -283,11 +316,9 @@ cleanrelease-%:
rm -f $(RPM_ROOT)/SRPMS/ctags-$*-1.src.rpm
rm -f $(RPM_ROOT)/SPECS/ctags-$*.spec
internal-release-%: ctags-%.tar.gz ctags-%.tar.Z dos-% rpm-%
internal-release-%: ctags-%.tar.gz ctags-%.tar.Z dos-% rpm-% website-%
@ echo "---------- Copying files to web archive"
cp -p ctags-$*.tar.* $(WEB_ARCHIVE_DIR)
cp -p EXTENDING.html $(WEB_CTAGS_DIR)
cp -p ctags-$*/ctags.html $(WEB_CTAGS_DIR)/ctags.html
cp -p $(RPM_ROOT)/RPMS/i386/ctags-$*-1.i386.rpm $(WEB_ARCHIVE_DIR)
cp -p $(RPM_ROOT)/SRPMS/ctags-$*-1.src.rpm $(WEB_ARCHIVE_DIR)
cp -p ctags-$*/ctags.lsm $(WEB_ARCHIVE_DIR)/ctags-$*.lsm

View File

@ -1 +1,3 @@
index.html
news.html
ctags.html

View File

@ -1,338 +0,0 @@
<!-- $Id$ -->
<html>
<head>
<title>Exuberant Ctags: Adding a new parser</title>
</head>
<body>
<h1>How to Add a New Parser to Exuberant Ctags</h1>
<b>Exuberant Ctags</b> has been designed to make it very easy to add your own
custom language parser.
<h2>Operational background</h2>
As ctags considers each file name, it tries to determine the language of the
file by applying the following three tests in order: if the file extension has
been mapped to a language, if the file name matches a shell pattern mapped to
a language, and finally if the file is executable and its first line specifies
an interpreter using the Unix-style "#!" specification (if supported on the
platform). If a language was identified, the file is opened and then the
appropriate language parser is called to operate on the currently open file.
The parser parses through the file and whenever it finds some interesting
token, calls a function to define a tag entry.
<h2>Integrating a new parser</h2>
Let's assume that I want to add support for my new language, <em>Swine</em>,
the successor to Perl (i.e. Perl before Swine &lt;wince&gt;).
<p>
First, I create a new module, <code>swine.c</code>, and add one externally
visible function to it, <code>extern parserDefinition *SwineParser(void)</code>,
and add its name to the table in <code>parsers.h</code>. The job of this
parser definition function is to create an instance of the
<code>parserDefinition</code> structure (using <code>parserNew()</code>) and
populate it with information defining how files of this language are
recognized, what kinds of tags it can locate, and the function used to invoke
the parser on the currently open file.
<p>
The structure <code>parserDefinition</code> allows assignment of the following
fields:
<pre>
<code>
const char *name; /* name of language */
kindOption *kinds; /* tag kinds handled by parser */
unsigned int kindCount; /* size of `kinds' list */
const char *const *extensions; /* list of default extensions */
const char *const *patterns; /* list of default file name patterns */
parserInitialize initialize; /* initialization routine, if needed */
simpleParser parser; /* simple parser (common case) */
rescanParser parser2; /* rescanning parser (unusual case) */
boolean regex; /* is this a regex parser? */
</code>
</pre>
<p>
The <code>name</code> field must be set to a non-empty string. Also, unless
<code>regex</code> is set true (see below), either <code>parser</code> or
<code>parser2</code> must set to point to a parsing routine which will
generate the tag entries. All other fields are optional.
<p>
Now all that is left is to implement the parser. In order to do its job, the
parser should read the file stream using using one of the two I/O interfaces:
either the character-oriented <code>fileGetc()</code>, or the line-oriented
<code>fileReadLine()</code>. When using <code>fileGetc()</code>, the parser
can put back a character using <code>fileUngetc()</code>. How our Swine parser
actually parses the contents of the file is entirely up to the writer of the
parser--it can be as crude or elegant as desired. You will note a variety of
examples from the most complex (c.c) to the simplest (make.c).
<p>
When the Swine parser identifies an interesting token for which it wants to
add a tag to the tag file, it should create a <code>tagEntryInfo</code>
structure and initialize it by calling <code>initTagEntry()</code>, which
initializes defaults and fills information about the current line number and
the file position of the beginning of the line. After filling in information
defining the current entry (and possibly overriding the file position or other
defaults), the parser passes this structure to <code>makeTagEntry()</code>.
<p>
Instead of writing a character-oriented parser, it may be possible to specify
regular expressions which define the tags. In this case, instead of defining a
parsing function, <code>SwineParser()</code>, sets <code>regex</code> to true,
and points <code>initialize</code> to a function which calls
<code>addTagRegex()</code> to install the regular expressions which define its
tags. The regular expressions thus installed are compared against each line
of the input file and generate a specified tag when matched.
<p>
A regex-based parser is inherently line-oriented (i.e. the entire tag must be
recognizable from looking at a single line) and context-insensitive (i.e the
generation of the tag is entirely based upon when the regular expression
matches a single line). However, a regex-based callback mechanism is also
available, installed via the function <code>addCallbackRegex()</code>. This
allows a specified function to be invoked whenever a specific regular
expression is matched. This allows a character-oriented parser to operate
based upon context of what happened on a previous line (e.g. the start or end
of a multi-line comment). Note that regex callbacks are called just before the
first character of that line can is read via either <code>fileGetc()</code> or
using <code>fileGetc()</code>. The effect of this is that before either of
these routines return, a callback routine may be invoked because the line
matched a regex callback. A callback function to be installed is defined by
these types:
<pre>
<code>
typedef void (*regexCallback) (const char *line, const regexMatch *matches, unsigned int count);
typedef struct {
off_t start; /* character index in line where match starts */
size_t length; /* length of match */
} regexMatch;
</code>
</pre>
<p>
The callback function is passed the line matching the regular expression and
an array of <code>count</code> structures defining the subexpression matches
of the regular expression, starting from \0 (the entire line).
<p>
This is all there is to it. All other details are specific to the parser and
how it wants to do its job. There are some support functions which can take
care of some commonly needed parsing tasks, such as keyword table lookups (see
keyword.c), which you can make use of if desired (examples of its use can be
found in c.c, eiffel.c, and fortran.c). Almost everything is already taken care
of automatically for you by the infrastructure. Writing the actual parsing
algorithm is the hardest part, but is not constrained by any need to conform
to anything in ctags other than that mentioned above.
<p>
There are several different approaches used in the parsers inside <b>Exuberant
Ctags</b> and you can browse through these as examples of how to go about
creating your own.
<h2>Examples</h2>
Below you will find several example parsers demonstrating most of the
facilities available. These include three alternative implementations
of a Swine parser, which generate tags for lines beginning with
"<CODE>def</CODE>" followed by some name.
<pre>
/***************************************************************************
* swine.c
* Character-based parser for Swine definitions
**************************************************************************/
/* INCLUDE FILES */
#include "general.h" /* always include first */
#include &lt;string.h&gt; /* to declare strxxx() functions */
#include &lt;ctype.h&gt; /* to define isxxx() macros */
#include "parse.h" /* always include */
#include "read.h" /* to define file fileReadLine() */
/* DATA DEFINITIONS */
typedef enum eSwineKinds {
K_DEFINE
} swineKind;
static kindOption SwineKinds [] = {
{ TRUE, 'd', "definition", "pig definition" }
};
/* FUNCTION DEFINITIONS */
static void findSwineTags (void)
{
vString *name = vStringNew ();
const unsigned char *line;
while ((line = fileReadLine ()) != NULL)
{
/* Look for a line beginning with "def" followed by name */
if (strncmp ((const char*) line, "def", (size_t) 3) == 0 &amp;&amp;
isspace ((int) line [3]))
{
const unsigned char *cp = line + 4;
while (isspace ((int) *cp))
++cp;
while (isalnum ((int) *cp) || *cp == '_')
{
vStringPut (name, (int) *cp);
++cp;
}
vStringTerminate (name);
makeSimpleTag (name, SwineKinds, K_DEFINE);
vStringClear (name);
}
}
vStringDelete (name);
}
/* Create parser definition stucture */
extern parserDefinition* SwineParser (void)
{
static const char *const extensions [] = { "swn", NULL };
parserDefinition* def = parserNew ("Swine");
def-&gt;kinds = SwineKinds;
def-&gt;kindCount = KIND_COUNT (SwineKinds);
def-&gt;extensions = extensions;
def-&gt;parser = findSwineTags;
return def;
}
</pre>
<p>
<pre>
/***************************************************************************
* swine.c
* Regex-based parser for Swine
**************************************************************************/
/* INCLUDE FILES */
#include "general.h" /* always include first */
#include "parse.h" /* always include */
/* FUNCTION DEFINITIONS */
static void installSwineRegex (const langType language)
{
addTagRegex (language, "^def[ \t]*([A-Z0-9_]+)", "\\1", "d,definition", NULL);
}
/* Create parser definition stucture */
extern parserDefinition* SwineParser (void)
{
static const char *const extensions [] = { "swn", NULL };
parserDefinition* def = parserNew ("Swine");
parserDefinition* const def = parserNew ("Makefile");
def-&gt;patterns = patterns;
def-&gt;extensions = extensions;
def-&gt;initialize = installMakefileRegex;
def-&gt;regex = TRUE;
return def;
}
</pre>
<p>
<pre>
/***************************************************************************
* swine.c
* Regex callback-based parser for Swine definitions
**************************************************************************/
/* INCLUDE FILES */
#include "general.h" /* always include first */
#include "parse.h" /* always include */
#include "read.h" /* to define file fileReadLine() */
/* DATA DEFINITIONS */
typedef enum eSwineKinds {
K_DEFINE
} swineKind;
static kindOption SwineKinds [] = {
{ TRUE, 'd', "definition", "pig definition" }
};
/* FUNCTION DEFINITIONS */
static void definition (const char *const line, const regexMatch *const matches,
const unsigned int count)
{
if (count &gt; 1) /* should always be true per regex */
{
vString *const name = vStringNew ();
vStringNCopyS (name, matches [1].start, matches [1].length);
makeSimpleTag (name, SwineKinds, K_DEFINE);
}
}
static void findSwineTags (void)
{
while (fileReadLine () != NULL)
; /* don't need to do anything here since callback is sufficient */
}
static void installSwine (const langType language)
{
addCallbackRegex (language, "^def +([a-zA-Z0-9_]+)", NULL, definition);
}
/* Create parser definition stucture */
extern parserDefinition* SwineParser (void)
{
static const char *const extensions [] = { "swn", NULL };
parserDefinition* def = parserNew ("Swine");
def-&gt;kinds = SwineKinds;
def-&gt;kindCount = KIND_COUNT (SwineKinds);
def-&gt;extensions = extensions;
def-&gt;parser = findSwineTags;
def-&gt;initialize = installSwine;
return def;
}
</pre>
<p>
<pre>
/***************************************************************************
* make.c
* Regex-based parser for makefile macros
**************************************************************************/
/* INCLUDE FILES */
#include "general.h" /* always include first */
#include "parse.h" /* always include */
/* FUNCTION DEFINITIONS */
static void installMakefileRegex (const langType language)
{
addTagRegex (language, "(^|[ \t])([A-Z0-9_]+)[ \t]*:?=", "\\2", "m,macro", "i");
}
/* Create parser definition stucture */
extern parserDefinition* MakefileParser (void)
{
static const char *const patterns [] = { "[Mm]akefile", NULL };
static const char *const extensions [] = { "mak", NULL };
parserDefinition* const def = parserNew ("Makefile");
def-&gt;patterns = patterns;
def-&gt;extensions = extensions;
def-&gt;initialize = installMakefileRegex;
def-&gt;regex = TRUE;
return def;
}
</pre>
<hr>
<a href="http:index.html">
<img align=left border=0 src="http:../images/return.gif" alt="Return">
Back to <strong>Exuberant Ctags</strong>
</a>
</body>
</html>

View File

@ -1,226 +0,0 @@
<!-- $Id$ -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="GENERATOR" CONTENT="Mozilla/4.03 [en] (X11; I; Linux 2.0.1.31 i586) [Netscape]">
<META NAME="author" CONTENT="Darren Hiebert">
<META NAME="description" CONTENT="Distribution site for Exuberant Ctags.">
<META NAME="keywords" CONTENT="Darren Hiebert Exuberant Ctags">
<TITLE>Exuberant Ctags</TITLE>
</HEAD>
<BODY BGCOLOR="#B0B0B0" TEXT="#000000" ALINK="#0000FF" VLINK="#551A8B">
<CENTER>
<H1>
<FONT COLOR="#00FFFF"><FONT SIZE="+4">EXUBERANT CTAGS</FONT></FONT></H1></CENTER>
<HR>
<H2>
A multilanguage implementation of CTAGS by Darren Hiebert<SUP>&reg;</SUP></H2>
<!--
<A HREF="http://work.ucsd.edu:5141/cgi-bin/http_webster?exuberant"><STRONG>ex·u·ber·ant</STRONG>
-->
<FORM method=post action="http://www.m-w.com/cgi-bin/dictionary">
<INPUT type=hidden name=va value="exuberant">
<A HREF="http://www.m-w.com/cgi-bin/dictionary"><STRONG><INPUT type=submit value="ex·u·ber·ant"></STRONG></A>
: produced in extreme abundance
: <FONT SIZE=-1>PLENTIFUL</FONT>&nbsp;&nbsp;
<STRONG><EM>synonym</EM></STRONG> see <FONT SIZE=-1>PROFUSE</FONT>
</FORM>
<UL>
<LI>Now used in at least <STRONG>44</FONT></STRONG>
<A HREF="countries.html">countries</A>
in <b><i>all 7 continents (now including Antarctica!)</i></b>
<!-- <FONT COLOR="#FFFF00"> -->
<LI>Supports 25 programming languages
<LI>Featured in the book,
<A HREF="http://www.oreilly.com/catalog/vi6/chapter/ch08.html#ch08_05.htm">
<EM>Learning the vi Editor</EM></A>, a title in the
<A HREF="http://www.oreilly.com">O'Reilly</A> series
<LI>Covered in the March 2001 issue of <A HREF="http://www.cuj.com">C++ Users Journal</A>, "Navigating Linux Source Code".
<LI>Praised in the <A HREF="lg18-wkndmech.html">Weekend Mechanic column</A>
of the July 1997 issue of <A HREF="http://www.ssc.com/lg/">Linux Gazette</A>
<LI>Freely available under the terms of the
<A HREF="http://www.gnu.org/copyleft/gpl.html">GNU General Public License</A>.
<LI>Included in the
<A HREF="http://www.redhat.com">RedHat</A> and
<A HREF="http://www.debian.org">Debian</A> Linux distributions
<LI>Read users' exuberant <A HREF="quotes.html">feedback</A>
</UL>
<B>Ctags</B> is hosted by &nbsp;
<A href="http://sourceforge.net">
<IMG src="http://sourceforge.net/sflogo.php?group_id=6556&type=1"
width="88" height="31" border="0" alt="SourceForge Logo"> </A>
<P>
<A HREF="http://sourceforge.net/projects/ctags"><B>Ctags</B> project page at SourceForge</A>
<P>
<HR>
<EM><FONT COLOR="#FF0000">NOTE:</FONT></EM>
If you are a satisfied user of <B>Exuberant Ctags</B>, please rate it at
<A HREF="http://freshmeat.net/rate/2502">Freshmeat</A> and
<A HREF="http://www.icewalkers.com/app_vote.php3?id=1032">IceWalkers</A>
<P>
<HR>
<H2>Download</H2>
<H3>
Version 5.2.1 [<EM><FONT COLOR="#FF0000">25 January 2002</FONT></EM>]:&nbsp;
</H3>
<H3><EM>Now supports the following languages:</EM></H3>
<BLOCKQUOTE>
<H4><EM>Assembler, AWK, ASP, BETA, Bourne/Korn/Zsh Shell, C, C++, COBOL,
Eiffel, Fortran, Java, Lisp, Lua, Make, Pascal, Perl, PHP, Python, REXX,
Ruby, S-Lang, Scheme, Tcl, Vim, and YACC.</EM>
</H4>
</BLOCKQUOTE>
<A HREF="news.html">Change Notes</A>
<BR>
<BR>
<TABLE BORDER>
<TR>
<TD><STRONG>Contents</STRONG></TD>
<TD><STRONG>Package</STRONG></TD>
</TR>
<TR>
<TD>Source only distribution (gzipped)</TD>
<TD><A HREF="http://prdownloads.sourceforge.net/ctags/ctags-5.2.1.tar.gz">ctags-5.2.1.tar.gz</A>&nbsp;</TD>
</TR>
<TR>
<TD>Source only distribution (compressed)</TD>
<TD><A HREF="http://prdownloads.sourceforge.net/ctags/ctags-5.2.1.tar.Z">ctags-5.2.1.tar.Z</A>&nbsp;</TD>
</TR>
<TR>
<TD ALIGN=LEFT>Red Hat source RPM</TD>
<TD><A HREF="http://prdownloads.sourceforge.net/ctags/ctags-5.2.1-1.src.rpm">ctags-5.2.1-1.src.rpm</A>&nbsp;</TD>
</TR>
<TR>
<TD ALIGN=LEFT>Red Hat 7.2 binary RPM (libc6, 2.1)</TD>
<TD><A HREF="http://prdownloads.sourceforge.net/ctags/ctags-5.2.1-1.i386.rpm">ctags-5.2.1-1.i386.rpm</A>&nbsp;</TD>
</TR>
<!--
<TR>
<TD>Source and binary for 16-bit MS-DOS</TD>
<TD><A HREF="http://prdownloads.sourceforge.net/ctags/ec34-16.zip">ec34-16.zip</A></TD>
</TR>
<TR>
<TD>Source and binary for MS-DOS with DPMI</TD>
<TD><A HREF="http://prdownloads.sourceforge.net/ctags/ec34-32.zip">ec34-32.zip</A></TD>
</TR>
-->
<TR>
<TD>Source and binary for Windows 95/NT</TD>
<TD><A HREF="http://prdownloads.sourceforge.net/ctags/ec521w32.zip">ec521w32.zip</A></TD>
</TR>
<TR>
<TD>Source and binary for OS/2</TD>
<TD><A HREF="http://prdownloads.sourceforge.net/ctags/ec52os2.zip">ec52os2.zip</A>&nbsp;</TD>
</TR>
</TABLE>
<HR>
<H2>Information</H2>
Q: <A HREF="whatis.html">What is ctags?</A>
<BR>
Q: <A HREF="desire.html">What makes this implementation of ctags desirable?</A>
<BR>
Q: <A HREF="tools.html">Which editors and tools support <STRONG>Exuberant Ctags</STRONG>?</A>
<BR>
Q: <A HREF="extending.html">How do I add a new parser to <STRONG>Exuberant Ctags</STRONG>?</A>
<BR>
Q: <A HREF="FORMAT">What is the format of tag files produced by <STRONG>Exuberant Ctags</STRONG>?</A>
<BR>
<BR>
<H3>
<A HREF="ctags.html">User Manual</A>
</H3>
<H3>
<A HREF="faq.html">Frequently Asked Questions (FAQ)</A>
</H3>
<H3>
<A HREF="http://freshmeat.net/articles/view/149">How to Report Bugs Effectively</A>
</H3>
<P>
<HR>
<H2>Support</H2>
<TABLE BORDER>
<TR>
<TD><STRONG>Item</STRONG></TD>
<TD><STRONG>Description</STRONG></TD>
</TR>
<TR>
<TD>
<LI><A HREF="http://lists.sourceforge.net/mailman/listinfo/ctags-announce">Ctags-announce</A> mailing list
</TD>
<TD>Release announcements for Exuberant Ctags</TD>
</TR>
<TR>
<TD>
<LI><A HREF="http://lists.sourceforge.net/mailman/listinfo/ctags-users">Ctags-users</A> mailing list
</TD>
<TD>Discussions on using Exuberant Ctags</TD>
</TR>
<TR>
<TD>
<LI><A HREF="http://sourceforge.net/bugs/?func=addbug&group_id=6556">Submit
bug</A>
</TD>
<TD>Submit a bug report using SourceForge Bug Tracking</TD>
</TR>
<TR>
<TD>
<LI><A HREF="http://sourceforge.net/projects/ctags">General</A>
</TD>
<TD>Full list of support facilities at SourceForge</TD>
</TR>
</TABLE>
<HR>
Darren Hiebert<SUP>&reg;</SUP> is a registered trademark of Darren
Hiebert<SUP>&reg;</SUP> and is used here with my own permission&nbsp;
<HR>
<A HREF="http://DarrenHiebert.com">Home</A>
</BODY>
</HTML>

View File

@ -1,634 +0,0 @@
<!-- $Id$ -->
<html>
<head>
<title>Exuberant Ctags: Change Notes</title>
</head>
<body>
<h1>Change Notes</h1>
<pre>
<b>ctags-5.2.1 (Sun Jan 20 2002)</b>
* Portabilitiy fixes [Mingw32].
* Added "RCS" and "CVS" to list of directories excluded by default.
* Fixed missing tags for function pointers declared const or volatile
[C, Bug #503764].
<b>ctags-5.2 (Sun Dec 23 2001)</b>
* Portabilitiy fixes [HP-UX, Solaris, VMS, OS/2].
* Made code compilable by a C++ compiler.
* Changed reading of option files to ignore blank lines.
* Changed and enhanced interface to readtags library (see readtags.h).
* Changed from using addLanguageRegex() to addTagRegex() in regex-based
parsers.
* Added support for Lua language, submitted by Max Ischenko.
* Added instructions to man page on using tags with NEdit.
* Added setargv.obj to link for wildcard expansion [MSVC].
* Added capability to have regex invoke a callback in a regex parser.
* Fixed regex tag problem which left newlines in back-references.
* Fixed missing class-qualified tags [Eiffel].
* Fixed spurious tags for entries in final indexing clause [Eiffel].
* Fixed problem with invalid filenames in preprocessor line directives.
* Fixed bug parsing scoped variables (e.g. "b:variable") [Vim, Bug #487608].
* Fixed problem compiling readtags.c on some hosts.
* Fixed memory overwrite problem in readtags library.
<b>ctags-5.1 (Tue Nov 06 2001)</b>
* Changed name of option configuration files for MSDOS, MSWindows, and OS/2.
* Changed regex support to enforce REG_NEWLINE. This fixes problem where the
newline character was explicity being matched by user patterns [Bug #431477].
* Added new public domain library for reading tag files (see readtags.h).
* Added support for variables and namespaces, provided by Jay Glanville [Vim].
* Added report of non-options in option configuration files and CTAGS
environment variable.
* Added support for YACC language, submitted by Nick Hibma [YACC].
* Added support for Perl packages, submitted by Nick Hibma [Perl].
* Added '$' as valid identifier character for DEC C compiler [VMS, Bug #425147].
* Added compilation date and time to --version output.
* Added configure check for HP-UX to determine if ANSI options needed [HP-UX].
* Removed tags for forward class/struct declarations [C/C++, Bug #432563].
* Eliminated ;" separator from end of tag line when no extension fields are
present.
* Fixed segmentation violation for some Lisp files [Lisp].
* Fixed segmentation violation occurring when file referenced in #line
directive was from an unknown language.
* Fixed loss of sync when parsing bit fields named with C++ reserved word [C].
* Fixed compilation problem on gcc-2.7.2.
* Fixed problem parsing verbatim strings [Eiffel].
* Fixed problem with PHP references [PHP].
* Fixed handling of Perl __DATA__ sections [Perl].
* Fixed problem resulting from white space in tag name due to regex name
specifier.
* Fixed double reading of $HOME/.ctags when current directory is $HOME.
* Fixed problem reading option configuration files using CR-LF newlines.
* Fixed problem preventing output control over tag kinds of regex patterns
[Bug #429869]
<b>ctags-5.0.1 (Sun Apr 15 2001)</b>
* Fixed problem checking recursive links [SunOS 4.x].
* Improved security on hosts where mkstemp() is not available.
<b>ctags-5.0 (Sun Mar 18 2001)</b>
* Restructured code to simplify support for new language parsers.
* Changed source code to use ANSI-style function definitions.
* Changed scope-qualified tag entries to omit enumeration name [C/C++].
* Changed reading of files supplied to -I option to read one token per line.
* Changed reading of option files to read one argument per line.
* Changed default extension fields, now controlled by new option --fields.
* Changed detection of etags invocation to accept any name containing "etags".
* Removed -p option, which only caused confusion and is rendered obsolete by
the change immediately above.
* Removed 'A' flag to the --c-types, --eiffel-types, and --java-types
options, replacing its functionality with the new --fields option.
* Removed 'C' flag to the --c-types, --eiffel-types, and --java-types
options, replacing its functionality with the new --extra option.
* Deprecated -i option, which was long ago replaced with the --c-types option.
* Deprecated --file-tags option, now incorporated into new --extra option.
* Deprecated --kind-long option, now incorporated into new --fields option.
* Renamed --lang[uage] option to --language-force.
* Renamed makefiles for non-Unix platforms.
* Improved parsing of assembly language files [Asm].
* Improved parsing of Fortran language files, adding new tag kinds [Fortran].
* Added documentation explaining how to extend ctags with new parsers.
* Added support for regular expressions, using either Posix or Gnu interface.
* Added support for mapping file names to languages using shell patterns.
* Added support for ASP scripts, submitted by Patrick Dehne [ASP].
* Added support for Makefiles [Make].
* Added support for Pascal language [Pascal].
* Added support for PHP scripts, submitted by Jesus Castagnetto [PHP].
* Added support for REXX language [REXX], based on submission by Alexaner Mai.
* Added support for Ruby, submitted by Thaddeus Covert [Ruby].
* Added support for S-Lang, submitted by Francesc Rocher [SLang].
* Added support for Macintosh platform using MPW (by Maarten Hekkelman).
* Added .tk as recognized extension [Tcl].
* Added .cp and .hp as C++ extensions [C++].
* Added .zsh as shell script extension [Sh].
* Added support for trigraphs for C-based languages [C/C++].
* Added language recognition for shell scripts using "#!/usr/bin/env command".
* Added check for recursive directory links.
* Added support for "[" form of verbatim strings [Eiffel].
* Added --exclude option to exclude directories while recursing.
* Added --fields option to specify extension fields to include in output.
* Added --extra option to allow control over extra tags.
* Added --regex-<LANG> option to define language-specific regular expressions.
* Added --<LANG>-types options for all supported languages.
* Added --langdef option to define new languages to be parsed with regex.
* Added --languages option to restrict set of languages scanned for tags.
* Added --tag-relative option to make file paths recorded in tag file relative
to location of tag file itself instead of the current working directory when
file arguments are specified using relative paths.
* Added restriction of permissions of created temporary files when mkstemp()
is not available for security.
* Reimplemented line directive handling to work for all languages.
* Fixed tag generation for packages [Java].
* Fixed Lisp parser [Lisp].
* Fixed Mingw32 port [Win32].
* Fixed bug in procedure name parsing [Tcl].
* Fixed bug resulting in wrong column being checked for paragraphs [Cobol].
* Fixed bug in language dispatch for executable "#!" scripts [Unix].
* Fixed bugs resulting in incorrect scope entries in tag file [C++/Java].
* Fixed warning caused by reinstallation of etags link [Unix].
* Fixed destruction of existing tag file when no files supplied on invocation.
* Fixed problem in Makefile.in which prevented configuring and building in
non-source directory. Also changed Makefile.in to generate and use correct
object and executable file extensions when run on Win32.
<b>ctags-4.0.3 (Sun Jul 16 2000)</b>
* Fixed compiler warnings [Amiga].
* Fixed problem in configure.in causing struct stat st_ino member test to fail.
* Fixed problem with TAGS entries for files using DOS-style (CR-LF) new lines.
* Improved algorithm for locating Perl functions and skipping pods.
* Improved algorithm for locating Bourne shell functions.
* Renamed Makefile.amiga to Makefile.manx [Amiga].
* Added Makefile.sas for SAS C compiler [Amiga].
* Updated Makefile.qdos [QDOS].
* Improved support for DECC compiler [VAX].
<b>ctags-4.0.2 (Mon Jul 10 2000)</b>
* Now silently ignore -w option for backwards compatibility with SVR4 ctags.
* Fixed bug resulting in no extension flags when using --kind-long option.
<b>ctags-4.0.1 (Wed Jun 28 2000)</b>
* Fixed segmentation violation when using --file-tags.
<b>ctags-4.0 (Thu Jun 22 2000)</b>
* Fixed infinite loop on certain syntactically invalid class constructs [C++].
* Fixed problem of incorrect tags for some pure virtual functions [C++].
* Fixed inability to clear all tag types when using --c-types= (all languages).
* Fixed problem of arguments to parameterized class being reported as
ancestors in the "inherits" extension flag.
* Fixed missed tags for typedef-ed function pointers having a PROTO((a,b))
style argument list.
* Fixed missing file tags for referenced files when using --line-directives
option [C/C++].
* Fixed failure to recognize drive-qualified file name as a file name when
supplied as argument to -I option [Win32].
* Fixed problem with missing comma in "inherits" extension flag [Java].
* Fixed problem with incorrect or redundant parents listed for "inherits"
extension flag [Java].
* Added check to avoid recursive symbolic links to directories.
* Added warning message for -i option, which is deprecated and being dropped.
* Added support for Assembler, COBOL, LISP, PERL, and Scheme, taken from Gnu
etags.
* Added support for AWK, Bourne Shell, Python, TCL, and Vim scripts.
* Added support for the BETA language, submitted by Erik Corry.
* Added ability to determine language from interpreter specified in first line
of executable files if they are not recognized by their extension.
* Added --options option.
* Added ability to specify files having no extension with -h and --langmap
options.
* Added compile time option to separate path components with a unix-style path
separator for sharing tag file across platforms, enabled by defining the
label UNIX_PATH_SEPARATOR [Win32].
* Fixed portability issues [VMS].
<b>ctags-3.5.2 (Mon Apr 24 2000)</b>
* Fixed problem preventing Emacs-style tags from being written to stdout.
<b>ctags-3.5.1 (Sun Apr 23 2000)</b>
* Fixed infinite loop in writing Emacs-style TAGS file on platforms using
tmpnam() instead of mkstemp() [Win32].
* Fixed minor problems in Borland makefiles [Win32].
* Fixed compiler warning [DJGPP].
<b>ctags-3.5 (Fri Apr 14 2000)</b>
* Fixed core dump when including access field in tag file [Java].
* Fixed failure to identify end of statement for block statements [Java].
* Fixed bug with lone "end" in feature adaptation part of inheritance clause
[Eiffel].
* Fixed problem preventing const functions from being recognized as pure
virtual [C/C++].
* Fixed problem with no tags found after certain macro calls [C/C++].
* Fixed bug in descrip.mms build file [VMS].
* Changed to use mkstemp() (when available) to create temporary files for
security reasons and allow configuring default temporary directory, and to
override this directory at run-time by setting TMPDIR environment variable.
* Added support for extracting inheritance information into new "inherits"
extension flag [C++, Java].
* Added Makefile.bc5 for Borland C++ version 5.5 compiler (free version).
* Added new question to FAQ regarding Xemacs.
* Updated FAQ regarding new release of NEdit.
* Renamed Borland 3.1 makefile from Makefile.bcc to Makefile.bc3.
* Renamed Microsoft Visual C++ makefile from Makefile.w32 to Makefile.mvc.
<b>ctags-3.4 (Thu Jan 13 2000)</b>
* Fixed sorting problems when LC_ALL environment variable was set to foreign
locale (not fixed by previous release).
* Fixed nested scoping reported in extension flags and class-qualified tags.
* Eliminated generation of class-qualified tag entries when --c-types=+C
option is in effect but scope is empty (e.g. "::main").
* Added support for default access of class members in Java.
* Added new extension flag "implementation", which indicates if a routine or
class is virtual or abstract.
* Minor changes for OS/2 compilation.
<b>ctags-3.3.3 (Thu Dec 16 1999)</b>
* Changed how input is read for -L and --filter options to permit file names
containing spaces (see man page).
* Fixed scope recorded for C++ class elements, especially in namespaces.
* Fixed spurious tag generated for MODULE PROCEDURE in interfaces [Fortran].
* Fixed sorting problems when LC_ALL environment variable was set to foreign
locale.
* Fixed crash on Windows when compiled with Mingw32 gcc compiler.
* Fixed compilation problems on Cray.
<b>ctags-3.3.2 (Mon Sep 24 1999)</b>
* Fixed compile problem on AIX 4.1.
* Improved recovery from syntax error [Fortran].
* Changed name of configure option (now --enable-custom-config).
* Changed Makefile.bcc to optimize for space, since code size exceeded 64KB.
<b>ctags-3.3.1 (Mon Sep 20 1999)</b>
* Fixed segmentation violation occurring when directory recursion was selected.
* Fixed misleading message when out of memory during internal sort.
<b>ctags-3.3 (Fri Sep 17 1999)</b>
* Fixed missing class-qualified tags [Java].
* Fixed missing tag for functions having function pointer argument [C].
* Fixed parsing of conversion functions [C++].
* Added missing space following "operator" keyword to the tag names generated
for function call operators [C++].
* Fixed string parsing to retry file as free source form upon EOF [Fortran].
* Fixed missing tags following comments [Fortran].
* Fixed missing labels for free source form [Fortran].
* Removed 72 character limit for fixed form source lines, since many compilers
relax this limit and it is commonly taken advantage of. This was sometimes
causing fixed form source to be parsed as free form source [Fortran].
* Changed misleading message when file could not be accessed.
* Changed behavior of --verbose option to display option processing.
* Changed -I option to permit clearing the token list with "-I-".
* Changed --lang option to accept new "auto" parameter.
* Changed --langmap option to accept new "default" parameter.
* Changed --eiffel-types option to accept new 'C' flag to generate
class-qualified tags.
* Changed -h option to accept new "default" parameter.
* Changed option processing. Most options may now appear anywhere on the
command line, affecting only those files which follow them.
* Added ability to specify default options in any of the files /etc/ctags.conf,
/usr/local/etc/ctags.conf, $HOME/.ctags, .ctags, and one optional file,
which can be supplied at configure time.
* Added --filter option.
* Added --filter-terminator option.
<b>ctags-3.2.4 (Thu Jul 01 1999)</b>
* Changed name of macro in Makefile.in to avoid being overriden by CTAGS
environment variable.
<b>ctags-3.2.3 (Mon Jun 21 1999)</b>
* Small portability change for EMX compiler on OS/2.
* Slight change to W32 and BCC makefiles.
<b>ctags-3.2.2 (Sat May 29 1999)</b>
* Fixed endless error loop in case of unreadable file.
* Fixed redundant include entries in TAGS file when using --etags-include.
<b>ctags-3.2.1 (Wed May 09 1999)</b>
* Fixed problem reading -I token list from file.
* Fixed with "using" declarations which corrupted tag file [C++].
* Fixed configure.in to more reliably recognize existing prototypes.
* Added ability to ignore preprocessor directives in Fortran files.
* Added support for egcs/MingW32 compiler [Win32].
<b>ctags-3.2 (Wed Mar 03 1999)</b>
* Fixed spurious tags related to export specifiers of feature clauses [Eiffel].
* Fixed problem with template in ctor-initialer [C++].
* Fixed typo causing compiler error [MSVC].
* Extended -I option to allow token replacement [thanks to Flemming Madsen].
* Added --etags-include option to support TAGS file includes.
* Added support for QDOS [thanks to Thierry Godefroy].
<b>ctags-3.1.2 (Tue Jan 26 1999)</b>
* Changed extension flags to eliminate space between label and value to remain
true to the intent of the agreement on the extended format made with editor
authors.
* Added --links option to permit ignoring symbolic links.
* Fixed missing tags upon ANSI style variable function argument lists.
* Fixed missing tags for methods with fully qualified type names in argument
list [Java].
* Fixed double tags generated for enumerators followed by comma.
* Fixed missing path prefix for -p option [Win 95/NT].
<b>ctags-3.1 (Wed Jan 20 1999)</b>
* Changed -h and -langmap options to accept a plus sign as the first character
of their arguments to indicate that arguments should be added to current.
* Changed default for member tags to 'on' [C/C++].
* Changed default for local entities to 'off' [Eiffel].
* Added tags for forward class/struct/union/enum declarations when using
-c-types=+x [C/C++].
* Fixed memory overwrite bug causing general protection fault [Win 95/NT].
* Fixed missing tags for methods with throws clause [Java].
* Fixed bad tags generated for null macro names [C].
* Fixed spurious tag for features and entities of BIT type [Eiffel].
* Fixed spurious tags when local entity declaration list was empty [Eiffel].
* Fixed missing tags for contructors and destructors [C++].
* Fixed failure to recognize function when declaration for first argument
was of template type [C++].
<b>ctags-3.0.3 (Mon Dec 21 1998)</b>
* Fixed mistake made in previous version which caused macro tags to be missed.
* Fixed parsing of --langmap option.
<b>ctags-3.0.2 (Mon Dec 21 1998)</b>
* Added tags for names undefined with #undef (C/C++).
* Added tags for renamed features (Eiffel).
* Improved Emacs-style tag file contents (per Ian Zimmerman).
* Fixed problem handling deferred, external, once, obsolete features in Eiffel.
* Fixed porting problem [OSF1 V4.0].
<b>ctags-3.0.1 (Sat Dec 12 1998)</b>
* Fixed problem with certain macros and functions with no declared return type.
* Fixed problem causing endless loop on MSDOS/Win32 by restoring use of binary
mode on opening of source files.
* Fixed porting problems on SunOS 4.1.x and MSVC++ 5.0.
<b>ctags-3.0 (Sun Dec 06 1998)</b>
* Added support for the Eiffel language (everyone should learn Eiffel).
* Added support for the Fortran language.
* Added --c-types option to specify tag types to be included for C/C++.
* Added --eiffel-types option to specify tag types to be included for Eiffel.
* Added --fortran-types option to specify tag types to be included for Fortran.
* Added --file-scope option to place verbose tag description into tag file.
* Added --file-tags option to place tags for source file names into tag file.
* Added --java-types option to specify tag types to be included for Java.
* Added --kind-long option to place verbose tag description into tag file.
* Added --linedirectives option to enable processing of #line directives so
that running ctags on preprocessor output can generate line numbers and file
names which correspond to the original source files.
* Added -V option to enable verbose message for each file considered.
* Added special handling for macros of form "INIT(= value)".
* Added ability to suffix an ignored identifier (-I option) with the '+'
character, thus instructing ctags to also ignore any argument list which
may follow the identifier.
* Changed the -i option, moving Java language options to the new --java-types
option. The -i option is now deprecated in favor of the new language
specific tag type options.
* Changed behavior of handling of ignored identifiers (-I option) to still
generate a tag for any macro definition for that identifier.
* Changed handling of -h option so that include files are no longer assumed to
be C++ files.
* Changed tags for operators to always precede the operator with the string
"operator ", thus making it consistent for all operators. [C++]
* Changed C/C++ parsing, catching many more tricky constructs.
* Changed extension flags to place a space between the label and the value for
readability.
* Fixed core dump which occurred when using -iF (now --file-tags) together
with -e (etags) on a zero-length file.
* Fixed missing or incorrect tags for conversions operators or operator "()".
* Fixed incorrect parent class in extension flags for type declarations of the
form "class Bar { OtherClass::sometype foo; }".
* Fixed missing tags for "friend" and "static" prototypes in header files.
* Fixed problem of external "sort" reporting locale not available on HPUX.
* Fixed -p option.
* Fixed VMS support. It should now work for any source file type.
<b>ctags-2.3.2 (Wed Sep 09 1998)</b>
* Fixed -h option; broken since version 1.7, yet only just reported.
<b>ctags-2.3.1 (Sun Aug 30 1998)</b>
* Fixed improper handling of derived structs.
* Fixed wrong class name tag when a nested-name-specifier was present in class
declaration.
* Added parent information into tag extension flags for data structures to
match that already present for members.
* Add missing documentation for --langmap option in the --help output.
* Eliminated compiler warning [gcc 2.8.1].
<b>ctags-2.3 (Thu Aug 20 1998)</b>
* Eliminated compiler warnings [sgi mipspro].
<b>ctags-2.2.7 (Mon Aug 17 1998)</b>
* Fixed porting problem [Borland C++].
<b>ctags-2.2.6 (Wed Aug 12 1998)</b>
* Added directory recursion support for Amiga.
* Fixed core dump encountered on some platforms when the CTAGS environment
variable was set but empty.
* Fixed porting problem [MSVC].
<b>ctags-2.2.3</b> (Sun Aug 02 1998)
<b>ctags-2.2.2</b> (Fri Jul 24 1998)
* Fixed porting problems [AIX, HP-UX, OSF/1, SunOS, MSVC].
<b>ctags-2.2.1</b> (Fri Jul 24 1998)
* Now uses a default directory name of "." when using -R or --recurse option
(e.g. "ctags -R" is equivalent to "ctags -R .").
* Directories named "SCCS" are skipped when using the -R or --recurse option
under Unix.
* Fixed porting problems [HP-UX, IRIX, SunOS, MSDOS/Windows].
<b>ctags-2.2</b> (Mon Jul 20 1998)
* Added the --recurse and -R options to allow recursing into directories.
This allows running ctags on an entire source directory tree using the
single command "ctags -R &lt;dir&gt;". Currently, this option is only supported
on UNIX, MSDOS, Windows 95/NT, and OS/2. Other platforms will have to wait.
* Changed writing of Emacs-style TAGS file to binary mode [MSDOS/Windows].
* Fixed porting problems [HP-UX].
<b>ctags-2.1.1</b> (Mon Jul 06 1998)
* Changed -h option to allow only periods to separate extensions.
* Added the --langmap option to allow overriding the default associations
between source language and file extension.
* Added configuration check and code work-around for putenv() prototypes
missing the const from the argument declaration [IRIX 5.2 and CRAY J90].
* Added makefile for VMS.
* Fixed porting problem [HP-UX].
<b>ctags-2.1</b> (Wed Jul 01 1998)
* Added Java support.
* Eliminated the --keywords option introduced in the 2.0.4, replacing it with
automatic detection of the language (i.e. recognized keywords) based upon
the file extension.
* Added the --lang option for manually overriding the automatic selection of
the language.
* Added new flag 'i' to the -i option to allow generating tags for Java
interfaces.
* Added new flag 'n' to the -i option to allow generating tags for C++
namespaces.
* Added new flag 'x' to the -i option to allow generating tags for extern
variable declarations.
* Added new extension flags, "private", "protected", and "public", which
indicate the visibility of class members when it can be determined.
* Changed behavior of flag 'C' of the -i option to add tags of form
"class.member" for Java.
* Changed how files on command line are handled. Ctags will now only scan
those files whose extensions it knows about unless the --lang option is
specified. This allows running ctags on all files in a directory without
having to be specific (e.g. "ctags *").
* Removed support for duplicate tag warnings and the -w and -W options. These
options are silently ignored for now.
<pre>
<b>ctags-2.0.4</b> (Sat May 23 1998)
* Added sorting time to the output of the --totals option.
* Added the --keywords option to allow restricting the recognized
declaration keywords in order to handle legacy source code which uses
newer keywords for variable and parameter names.
* Ignore list now also applies to macro tags.
* /dev/stdout now properly handled as parameter to -f/-o option.
* Fixed problem handling an operator definition in C++ when white space
appeared between the "operator" keyword and the operator (e.g. "=").
* Fixed handling of non-symbolic operators (e.g. "new", "delete", etc.).
* Fixed sort order problem for some locale settings.
* Fixed segmentation violation when using ignore list (-I) on SunOS 4.x.
* Fixed bug causing a segmentation violation caused by a stack overwrite when
testing a particular kind of non-standard tag file format.
<b>ctags-2.0.3</b> (Sun Mar 12 1998)
* Added configure check for "strip" program.
* Added new sub-flag 'C' to the -i option to allow adding extra tags to
the tag file in the form "class::member" for class methods and members.
<b>ctags-2.0.2</b> (Wed Feb 25 1998)
* Added stripping of installed binary for "install" target.
<b>ctags-2.0.1</b> (Thu Feb 19 1998)
* Added support for C++.
* Added new sub-flag 'F' to the -i option to allow adding an extra tag for
the basename of each source file supplied to ctags. This provides the
ability to jump to a source file in Vi using ":tag file.c".
* Added new sub-flag 'm' to generate tags for class, structure, and union
members (disabled by default).
* Added several new sub-flags to the -i option to allow finer specification
of which types of tags to include/exclude.
* Added ".hh" extension to the default list of files recognized as header
files.
* Added explicit handling of special gcc construct __attribute((..)),
which could lead to incorrect tag generation.
* Added configure option --disable-extended-format to allow building ctags
with the extended format disabled by default.
* Added configure option --enable-macro-patterns to change the default
behavior of ctags to generate patterns instead of line numbers for macro
(define) tags.
* Changed configure option --enable-internal-sort to --disable-external-sort.
* Changed makefile for OS/2.
* Removed support for the -d, -t and -T options which had been deprecated
for some time.
* Removed ANNOUNCE file in distribution, consolidating it with the README
file.
* Replaced CHANGES file with NEWS for more GNU-like standard distribution.
* Improved the detection of macros of the type generated by Microsoft Visual C
when generating source code. These caused subsequent statements to fail to
have tags generated for them. Still not bullet proof, though.
* Fixed a problem which prevented the use of / as a path separator under MSDOS
and Win 95/NT.
* Fixed problem of blank lines occuring in the tag file.
* Fixed recognition of declarations with parentheses.
* Fixed problem of missing tags for objects within extern "C" blocks.
* Fixed problem in source file counts when using --totals option.
* Extended the length of tag type field in -x output to be more verbose.
* Fixed option initialization error which caused static tags to be excluded.
<b>ctags-1.7</b> (Mon Oct 13 1997)
* Tag files now use a new extended format which is backwards compatible with
existing Vi implementations, yet provides extended information which can be
used by supporting editors.
* Added documentation pseudo-tags (e.g. !_TAG_FILE_FORMAT) to tag file.
* Added the --excmd option as alternative to the -n and -N options.
* Added the --format option to allow forcing the old-style tag file format.
* Added the --if0 to control how "#if 0" branches are handled.
* Added the --sort option as alternative to -u option.
* Added the --totals option to print statistics of tag generation.
* Added the --version option.
* Improved handling of preprocessor conditionals.
* Code within an #if 0 is now never scanned for non-macro tags by default
since tags within that code could conceivably be overridden by more
desirable tags in the #else branch to follow. Macro tags in these branches
are always included.
* Fixed problem which could leave invalid tag entries in tag file when an
internal re-scan of a source file occurred.
* Fixed problem with internal sort mechanism when appending tags to existing
file.
* Changed external sort command to filter out duplicate identical tags lines
(including the pattern) unless warnings for duplicate tags are enabled.
* Added data to emacs style tag entries to more closely match that produced by
the GNU etags.
* Removed fixed limits on maximum tag line length.
* Correction to Amiga makefile.
* Improvements to Win32 portability with changes to Makefile.w32.
<b>ctags-1.6</b> (Tue May 13 1997)
* Now using GNU autoconf to permit automatic host configuration.
* Added the -e option to generate Emacs style tag files
* Added ETAGS environment variable to be used when -e option is in effect.
* Added the -p option to supply a default path for source files.
* Fixed problem of incorrect line numbers in tag file when form feeds and
vertical tabs occured in the source file.
* Fixed problem preventing ignoring of identifiers specified via the -I option
when the identifiers were followed by a parameter list in the source code.
* Changed the search patterns generated for #define macros when using -N
option. It now includes the character following the name (or "$" if end of
line) instead of the "\>" used previously. Some editors did not support this
metacharacter for tag searches.
* Removed -u (unique) flag from sort command line invocation to retain exactly
indentical tag patterns in the same file. This is in preparation for editor
support of duplicate tags.
* Fixed problem resulting in no tags generated following a function-like
macro reference outside of a function block.
* Fixed problem of no tags generated for typedef for function or function
pointer.
* Fixed problem of no tags generated after encountering strange function
declarations (e.g. "foo(params) saywhat (void);")
<b>ctags-1.5</b> (Sat Oct 5 1996)
* Added generation of tags for objects inside C++ extern blocks (e.g.
'extern "C" {...}' construct).
* Added generation of tags for function definitions inside brace-enclosed
("{}") blocks, since function definitions are allowed inside classes and
extern blocks.
* Added the -N option to force patterns to be used for all tags (including
macro tags).
* Changed the search patterns generated for macro definitions to be terminated
with "\>", which allows the pattern to still match even when the #define
line beyond the macro name is changed.
* Fixed problem resulting in no tags generated for files containing a
function-like macro, such as 'MODULE_ID("$Id")', even when ignoring the
keyword. This also fixed a problem that caused tags to be missed for
initialized function pointer definitions.
* Redirected error messages to stdout for MSDOS version.
<b>ctags-1.4</b> (Sun Aug 18 1996)
* Added recursive parsing of class/struct/enum blocks to look for
class/struct/enum tags and enumeration values.
* Added the -I option to specify keywords to ignore in the source files.
* Fixed problem resulting in no tag generated when declaring a pointer const
or volatile.
* Fixed problem resulting in no tag generated for comma terminated function
declarations.
<b>ctags-1.3</b> (Sun Jun 16 1996)
* Fixed problem problem which caused "struct tag;" to be misinterpreted as a
variable definition.
* Added the -n option to use line numbers in the tag file instead of patterns.
* Added the -? option as an alternative for the --help option.
<b>ctags-1.2</b> (Wed Jun 5 1996)
* Fixed a problem caused by an unitialized variable.
<b>ctags-1.1</b> (Tue Jun 4 1996)
* Fixed problem reading parameter list to the -h option.
<b>ctags-1.0a</b> (Mon Jun 3 1996)
* Added ctags.lsm to distribution
<b>ctags-1.0</b> (Fri May 31 1996)
* First public release.
</pre>
<hr>
<a href="http:index.html">Back to <strong>Exuberant Ctags</strong></a>
</body>
</html>

4
win32/.cvsignore Normal file
View File

@ -0,0 +1,4 @@
ctagsw32.exe
ctagsos2.exe
ctags[1-9]*
ec[1-9]*.zip

BIN
win32/ctags.ide Normal file

Binary file not shown.

BIN
win32/gnu_regex.exe Normal file

Binary file not shown.

39
win32/makefile.in Normal file
View File

@ -0,0 +1,39 @@
# $Id$
# Makefile for building Win32 releases
VERSION = 521
# Borland C library directory
ZIP = "c:\Program Files\WinZip\wzzip"
#ZIP = pkzip -xctags$(VERSION)\gnu_regex_dist\*.*
# Add this file for wildcard expansion (does NOT work with 4.0!)
#ctagsw32.exe: ctags$(VERSION)\mk_mvc.mak
# cd ctags$(VERSION)
# nmake -f mk_mvc.mak clean
# nmake -f mk_mvc.mak
# copy ctags.exe ..\$@
# nmake -f mk_mvc.mak clean
# cd ..
zip: ctagsw32.exe
- del ec$(VERSION)w32.zip
- del ctags$(VERSION)\ctags.tds
copy ctagsw32.exe ctags$(VERSION)\ctags.exe
$(ZIP) -Pr ec$(VERSION)w32 ctags$(VERSION)\*.*
- del ctags$(VERSION)\ctags.exe
# copy ctags16.exe ctags$(VERSION)\ctags.exe
# $(ZIP) -Pr ec$(VERSION)-16 ctags$(VERSION)\*.*
# copy ctags32.exe ctags$(VERSION)\ctags.exe
# $(ZIP) -Pr ec$(VERSION)-32 ctags$(VERSION)\*.*
zip-os2: ctagsos2.exe
- del ec$(VERSION)os2.zip
copy ctagsos2.exe ctags$(VERSION)\ctags.exe
$(ZIP) -Pr ec$(VERSION)os2 ctags$(VERSION)\*.*
del ctags$(VERSION)\ctags.exe
clean:
- del ctagsw32.exe
- del ctagsos2.exe