Exuberant CTags at http://ctags.sourceforge.net/

John Fischer wrote:
> Thomas,
> 
> What community are you tracking?
> 
> 
>>>   2.4 Originating Community
>>>     2.4.1 Community Name
>>>     
>>>     2.4.2 Community Involvement
>>>       Indicate Sun's involvement in the community
>>>       [ ] Maintainer
>>>       [ ] Contributor
>>>       [x] Monitoring
> 
> Thanks,
> 
> John
> 
> On Mon, 2008-12-22 at 07:28, Brian Utterback wrote:
>> I am submitting this fastrack on behalf of Thomas Preisler.
>>
>> Exposure is open.
>>
>> Template Version: @(#)sac_nextcase %I% %G% SMI
>> This information is Copyright 2008 Sun Microsystems
>> 1. Introduction
>>      1.1. Project/Component Working Name:
>>       Exuberant CTags
>>      1.2. Name of Document Author/Supplier:
>>       Author:  Brian Utterback
>>      1.3  Date of This Document:
>>      22 December, 2008
>> 4. Technical Description
>>
>> Exuberant Ctags is a multilanguage reimplementation of the Unix ctags 
>> program. It generates an index of source code object definitions which 
>> is used by a number of editors and tools to instantly locate the 
>> definitions. Exuberant Ctags currently supports the following languages:
>>    Assembler, ASP, AWK, BETA, C, C++, C#, COBOL, Eiffel, Erlang,
>>    Fortran, HTML, Java, Javascript, Lisp, Lua, Make, Pascal, Perl,
>>    PHP, PL/SQL, Python, REXX, Ruby, Scheme,
>>    Shell (Bourne, Korn, Z), S-Lang, SML (Standard ML), Tcl, Vera,
>>    Verilog, Vim, and YACC.
>>
>> This project proposes to deliver the ctags binary from the Exuberant 
>> CTags FOSS project renamed to exctags to avoid conflict with the 
>> existing ctags binary currently delivered as part of the SUNWtoo 
>> programming tools package. This follows the already established 
>> convention used by other platforms.
>>
>> The FOSSchecklist and man page are enclosed for review.
>>
>> A minor/patch binding is requested.
>> -- 
>> blu
>>
>> "Murderous organizations have increased in size and scope; they are
>> more daring, they are served by the most terrible weapons offered by
>> modern science, and the world is nowadays threatened by new forces
>> which, if recklessly unchained, may some day wreck universal
>> destruction."  - Arthur Griffith, 1898
>> ----------------------------------------------------------------------
>> Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
>> Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom
>>
>> ______________________________________________________________________
>> FCL--FOSS Check List
>> 1.0 Project Information
>> 1.1 Name of project/component
>>   Exuberant Ctags Packaging for OpenSolaris
>>
>> 1.2 Author of document
>>   Thomas Preisler
>>
>> 2.0 Project Summary
>>   2.1 Project Description
>>   Package current version (5.7) of Exuberant CTags release.
>>
>>   Exuberant Ctags is a multilanguage reimplementation of the Unix
>>   ctags program. It generates an index of source code object definitions
>>   which is used by a number of editors and tools to instantly locate the
>>   definitions. Exuberant Ctags currently supports the following languages:
>>   Assembler, ASP, AWK, BETA, C, C++, C#, COBOL, Eiffel, Erlang, Fortran,
>>   HTML, Java, Javascript, Lisp, Lua, Make, Pascal, Perl, PHP, PL/SQL,
>>   Python, REXX, Ruby, Scheme, Shell (Bourne, Korn, Z), S-Lang,
>>   SML (Standard ML), Tcl, Vera, Verilog, Vim, and YACC. 
>>   
>>   2.2 Release binding
>>       What is is the release binding?
>>       (see 
>> http://opensolaris.org/os/community/arc/policies/release-taxonomy/)
>>       [ ] Major
>>       [ ] Minor
>>       [x] Patch or Micro
>>       [ ] Unknown -- ARC review required
>>
>>   2.3 Type of project
>>       Is this case a Linux Familiarity project?
>>       [ ] Yes
>>       [x] No
>>
>>   2.4 Originating Community
>>     2.4.1 Community Name
>>     
>>     2.4.2 Community Involvement
>>       Indicate Sun's involvement in the community
>>       [ ] Maintainer
>>       [ ] Contributor
>>       [x] Monitoring
>>       
>>       Will the project team work with the upstream community to resolve
>>       architectural issues of interest to Sun?
>>       [ ] Yes 
>>       [x] No - briefly explain
>>       Not needed.
>>       
>>       Will we or are we forking from the community?
>>       [ ] Yes - ARC review required prior to forking
>>       [x] No
>>       
>> 3.0 Technical Description
>>   3.1 Installation & Sharable
>>     3.1.1S Solaris Installation - section only required for Solaris Software
>>       (see 
>> http://opensolaris.org/os/community/arc/policies/install-locations/ for 
>> details)
>>       Does this project follow the Install Locations best practice?
>>       [x] Yes 
>>       [ ] No - ARC review required
>>       
>>       Does this project install into /usr under 
>> [sbin|bin|lib|include|man|share]?
>>       [x] Yes
>>       [ ] No or N/A
>>       
>>       Does this project install into /opt?
>>       [ ] Yes - explain below
>>       [x] No or N/A
>>       
>>       Does this project install into a different directory structure?
>>       [ ] Yes - ARC review required
>>       [x] No or N/A
>>       
>>       Do any of the components of this project conflict with anything under 
>> /usr?
>>       (see http://opensolaris.org/os/community/arc/caselog/2007/047/ for 
>> details)
>>       [ ] Yes - explain below (?)
>>       [x] No
>>       Default Exuberant Ctags binary name is ctags and would naturally 
>> install into /usr/bin/ctags
>>       but Solaris ctags is already installed in /usr/bin. To avoid conflict, 
>> Common pratice
>>       is to rename the binary and install it with the different name in 
>> '/usr/bin'. New name of 
>>       Exuberant Ctags is exctags which is a common alternative name used by 
>> many others (try google for exctags).
>>       
>>       If conflicts exist then will this project install under /usr/gnu?
>>       [ ] Yes
>>       [ ] No - ARC review required
>>       [x] N/A
>>       Note: Exuberant Ctags is not a GNU product.
>>       
>>       Is this project installing into /usr/sfw?
>>       [ ] Yes - ARC review required
>>       [x] No
>>       
>>     3.1.1W Windows Installation - section only required for Windows Software
>>      Section not applicable.
>>       
>>     3.1.2 Share and Sharable
>>       Does the module include any components that are used or shared by 
>>       other projects?
>>       [ ] Yes
>>       [x] No
>>     
>>       If yes are these components packaged to be shared with the other FOSS?
>>       [ ] Yes
>>       [ ] No - ARC review required
>>       [x] N/A
>>     
>>   3.2 Exported Libraries
>>       Are libraries being delivered by this project?
>>       [ ] Yes
>>       [x] No - continue with next section (section 3.3)
>>       
>>   3.3 Services and the /etc Directory
>>       (see http://opensolaris.org/os/community/arc/policies/SMF-policy/)
>>       Does the project integrate anything into /etc/init.d or /etc/rc?.d?
>>       [ ] Yes - ARC review required
>>       [x] No
>>       
>>       Does the project integrate any new entries into /etc/inittab or
>>       /etc/inetd.conf?
>>       [ ] Yes - ARC review required
>>       [x] No
>>       
>>       Does the project integrate any private non-public files into 
>> /etc/default
>>       or /etc/ configuration files?
>>       [ ] Yes - ARC review required
>>       [x] No
>>       
>>       Does the service manifests method context grant rights above that
>>       of the noaccess user and basic privilege set?
>>       [ ] Yes - ARC review required
>>       [x] No
>>         
>>   3.4 Security
>>     3.4.1 Secure By Default 
>>       (see 
>> http://opensolaris.org/os/community/arc/policies/secure-by-default/ for 
>> details)
>>       (see http://www.opensolaris.org/os/community/arc/policies/NITS-policy/ 
>> for details)
>>       (see parts of 
>> http://opensolaris.org/os/community/arc/policies/SMF-policy/ for
>>        addtional details)
>>       Are there any network services provided by this project?
>>       [ ] Yes
>>       [x] No - continue with the next section (section 3.4.2)
>>       
>>     3.4.2 Authorization
>>       (see http://opensolaris.org/os/community/arc/bestpractices/rbac-intro/ 
>> and
>>         http://opensolaris.org/os/community/arc/bestpractices/rbac-profiles/ 
>> and
>>         http://opensolaris.org/os/community/arc/bestpractices/rbac-profiles/
>>            for details)
>>       Are there any setuid/setgid privileged binaries in the project?
>>       [ ] Yes - ARC review required
>>       [x] No - continue with next section (section 3.4.3)
>>       
>>     3.4.3 Auditing
>>       (see http://opensolaris.org/os/community/arc/policies/audit-policy/ 
>> for details)
>>       (see http://opensolaris.org/os/community/arc/caselog/2003/397 for 
>> details)
>>       Does this component contain administrative or security enforcing 
>> software?
>>       [ ] Yes - ARC review required
>>       [x] No - continue to next section (section 3.4.4)
>>         
>>     3.4.4 Authentication
>>       (see http://opensolaris.org/os/community/arc/policies/PAM/)
>>       Do the components contain any authentication code?
>>       [ ] Yes
>>       [x] No - continue to next section (section 3.4.5)
>>       
>>     3.4.5 Passwords
>>       (see 
>> http://opensolaris.org/os/community/arc/bestpractices/passwords-cli/ and
>>            
>> http://opensolaris.org/os/community/arc/bestpractices/passwords-files/ for 
>> details)
>>       Do any of the components for the project deal with passwords?
>>       [ ] Yes
>>       [x] No - continue to next section (section 3.4.6)
>>       
>>     3.4.6 General Security Questions
>>       (see 
>> http://opensolaris.org/os/community/arc/bestpractices/security-questions/ 
>> for details)
>>       Are there any network protocols used by this project?
>>       [ ] Yes
>>       [x] No - continue with the next section (section 3.5)
>>       
>>   3.5 Networking
>>       Do the components access the network?
>>       [ ] Yes
>>       [x] No - continue with the next section (section 3.6)
>>       
>>   3.6 Core Solaris Components
>>       Do the components of this project compete with or duplicate core 
>>       Solaris components?
>>       [ ] Yes - ARC review required
>>       [x] No 
>>       
>>       Examples of Core Solaris Components include but are not limited to:
>>       
>>         Secure By Default
>>         Authorizations
>>         PAM -- Plugable Authentication Module
>>         Privilege
>>         PRM -- Process Rights Management -- Privilege
>>         Audit
>>         xVm -- Virtualization
>>         zones / Solaris Containers
>>         PRM -- Process Rights Management
>>         RBAC -- Role Based Access Control
>>         TX / Trusted Extensions
>>         ZFS
>>         SMF -- Service Management Facility
>>         FMA -- Fault Management Architecture
>>         SCF -- Smart Card Facility
>>         IPsec
>>         
>> 4.0 Interfaces
>>   (see 
>> http://www.opensolaris.org/os/community/arc/policies/interface-taxonomy/ for 
>> details)
>>   4.1 Exported Interfaces
>>   
>>     Interface Name                Classification  Comments
>>     ----------------              --------------  ----------------------
>>     SUNWexctags                   Uncommitted     Package
>>     /usr/bin/exctags              Uncommitted     Executable binary file
>>     
>>   4.2 Imported Interfaces
>>     Interface Name           Classification       Comments
>>     --------------------------- -------------------- 
>> --------------------------
>>     
>>     
>>   Brief Interface Classifications - See Appendix C for definitions
>>     Volatile - interfaces are fluid and will follow a rapidly changing 
>> community
>>     Uncommitted - interfaces are still evolving in the community and might 
>> follow
>>                the community
>>     Committed - interfaces are stable in the community
>>     Project Private - no review required, just document in table
>>     Contracted (interface modifier) - further review required
>>
>>
>> ______________________________________________________________________
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>> NAME
>>      ctags - Generate tag files for source code
>>
>>
>>
>> SYNOPSIS
>>      ctags [options] [file(s)]
>>
>>      etags [options] [file(s)]
>>
>>
>>
>> DESCRIPTION
>>      The  ctags  and  etags  programs  (hereinafter  collectively
>>      referred  to  as ctags, except where distinguished) generate
>>      an index (or "tag") file for a variety of  language  objects
>>      found  in  file(s).   This tag file allows these items to be
>>      quickly and easily located by a text editor or  other  util-
>>      ity.  A "tag" signifies a language object for which an index
>>      entry is  available  (or,  alternatively,  the  index  entry
>>      created for that object).
>>
>>      Alternatively, ctags can generate  a  cross  reference  file
>>      which  lists,  in human readable form, information about the
>>      various source objects found in a set of language files.
>>
>>      Tag index files are supported  by  numerous  editors,  which
>>      allow  the  user to locate the object associated with a name
>>      appearing in a source file and jump to  the  file  and  line
>>      which  defines  the  name.  Those known about at the time of
>>      this release are:
>>
>>          Vi(1)  and  its  derivatives  (e.g.  Elvis,  Vim,  Vile,
>>          Lemmy),  CRiSP,  Emacs,  FTE (Folding Text Editor), JED,
>>          jEdit, Mined, NEdit (Nirvana  Edit),  TSE  (The  SemWare
>>          Editor), UltraEdit, WorkSpace, X2, Zeus
>>
>>      Ctags is capable of generating different kinds of  tags  for
>>      each  of  many  different  languages. For a complete list of
>>      supported languages, the names by which they are recognized,
>>      and  the kinds of tags which are generated for each, see the
>>      --list-languages and --list-kinds options.
>>
>>
>>
>> SOURCE FILES
>>      Unless  the  --language-force  option  is   specified,   the
>>      language of each source file is automatically selected based
>>      upon a mapping of file names to languages. The  mappings  in
>>      effect   for   each   language  may  be  display  using  the
>>      --list-maps option and may be changed  using  the  --langmap
>>      option.   On  platforms  which  support it, if the name of a
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    1
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      file is not mapped to a language and the file is executable,
>>      the  first line of the file is checked to see if the file is
>>      a "#!" script for a recognized language.
>>
>>      By default, all other files names are ignored. This  permits
>>      running  ctags  on  all  files  in either a single directory
>>      (e.g. "ctags *"), or on all files in an entire source direc-
>>      tory  tree  (e.g.  "ctags -R"), since only those files whose
>>      names are mapped to languages will be scanned.
>>
>>      [The reason that .h  extensions  are  mapped  to  C++  files
>>      rather than C files is because it is common to use .h exten-
>>      sions in C++, and no harm results in treating  them  as  C++
>>      files.]
>>
>>
>>
>> OPTIONS
>>      Despite the wealth of available options, defaults are set so
>>      that  ctags  is  most  commonly executed without any options
>>      (e.g. "ctags *", or "ctags -R"), which  will  create  a  tag
>>      file  in  the  current  directory  for all recognized source
>>      files. The options described below are  provided  merely  to
>>      allow custom tailoring to meet special needs.
>>
>>      Note that spaces separating the single-letter  options  from
>>      their parameters are optional.
>>
>>      Note also that the  boolean  parameters  to  the  long  form
>>      options   (those   beginning  with  "--"  and  that  take  a
>>      "[=yes|no]" parameter) may be omitted, in which case  "=yes"
>>      is  implied. (e.g. --sort is equivalent to --sort=yes). Note
>>      further that "=1" and  "=on"  are  considered  synonyms  for
>>      "=yes", and that "=0" and "=off" are considered synonyms for
>>      "=no".
>>
>>      Some options are either ignored or  useful  only  when  used
>>      while  running  in  etags mode (see -e option). Such options
>>      will be noted.
>>
>>      Most options  may  appear  anywhere  on  the  command  line,
>>      affecting  only  those  files which follow the option. A few
>>      options, however, must appear before the first file name and
>>      will be noted as such.
>>
>>      Options taking language names will  accept  those  names  in
>>      either  upper or lower case. See the --list-languages option
>>      for a complete list of the built-in language names.
>>
>>
>>      -a   Equivalent to --append.
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    2
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      -B   Use  backward  searching  patterns  (e.g.   ?pattern?).
>>           [Ignored in etags mode]
>>
>>
>>      -e   Enable etags mode, which will create a tag file for use
>>           with  the  Emacs  editor.   Alternatively,  if ctags is
>>           invoked by a name containing the string "etags" (either
>>           by  renaming,  or  creating a link to, the executable),
>>           etags mode will be enabled.  This  option  must  appear
>>           before the first file name.
>>
>>
>>      -f tagfile
>>           Use the name specified by  tagfile  for  the  tag  file
>>           (default  is  "tags",  or  "TAGS" when running in etags
>>           mode). If tagfile is specified as  "-",  then  the  tag
>>           file  is written to standard output instead. Ctags will
>>           stubbornly refuse to take orders if tagfile exists  and
>>           its  first  line  contains something other than a valid
>>           tags line. This will save your neck if  you  mistakenly
>>           type  "ctags  -f  *.c", which would otherwise overwrite
>>           your first C file with the tags generated by the  rest!
>>           It  will  also  refuse to accept a multi-character file
>>           name which begins with a '-'  (dash)  character,  since
>>           this  most  likely means that you left out the tag file
>>           name and this option tried to grab the next  option  as
>>           the  file  name. If you really want to name your output
>>           tag file "-ugly", specify it as "./-ugly". This  option
>>           must  appear before the first file name. If this option
>>           is specified more than once, only the last will apply.
>>
>>
>>      -F   Use  forward  searching   patterns   (e.g.   /pattern/)
>>           (default).  [Ignored in etags mode]
>>
>>
>>      -h list
>>           Specifies a  list  of  file  extensions,  separated  by
>>           periods,  which  are  to  be interpreted as include (or
>>           header) files. To indicate files having  no  extension,
>>           use  a  period  not  followed by a non-period character
>>           (e.g. ".", "..x", ".x."). This option only affects  how
>>           the  scoping  of  a  particular kinds of tags is inter-
>>           preted (i.e. whether or not they are considered as glo-
>>           bally  visible or visible only within the file in which
>>           they are defined); it does not map the extension to any
>>           particular  language.  Any  tag  which  is located in a
>>           non-include file and cannot be seen  (e.g.  linked  to)
>>           from  another  file  is considered to have file-limited
>>           (e.g. static) scope. No kind of  tag  appearing  in  an
>>           include  file  will  be considered to have file-limited
>>           scope. If the first character in the  list  is  a  plus
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    3
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           sign,  then the extensions in the list will be appended
>>           to the current list; otherwise, the list  will  replace
>>           the  current  list. See, also, the --file-scope option.
>>           The default list is  ".h.H.hh.hpp.hxx.h++.inc.def".  To
>>           restore the default list, specify -h default. Note that
>>           if an extension supplied to this option is not  already
>>           mapped  to  a  particular  language  (see SOURCE FILES,
>>           above), you will also need to use either the  --langmap
>>           or --language-force option.
>>
>>
>>      -I identifier-list
>>           Specifies a list of identifiers which are  to  be  spe-
>>           cially  handled  while  parsing C and C++ source files.
>>           This option is specifically provided to handle  special
>>           cases  arising  through the use of preprocessor macros.
>>           When the identifiers  listed  are  simple  identifiers,
>>           these identifiers will be ignored during parsing of the
>>           source files. If an identifier is suffixed with  a  '+'
>>           character,  ctags  will  also  ignore  any parenthesis-
>>           enclosed argument list which may immediately follow the
>>           identifier  in the source files. If two identifiers are
>>           separated with the '=' character, the first identifiers
>>           is  replaced by the second identifiers for parsing pur-
>>           poses. The list of identifiers may be supplied directly
>>           on the command line or read in from a separate file. If
>>           the first character of identifier-list is '@', '.' or a
>>           pathname separator ('/' or '\'), or the first two char-
>>           acters specify a drive letter (e.g. "C:"), the  parame-
>>           ter  identifier-list  will be interpreted as a filename
>>           from which to read a list of identifiers, one per input
>>           line.  Otherwise, identifier-list is a list of identif-
>>           iers (or identifier pairs)  to  be  specially  handled,
>>           each  delimited  by  a either a comma or by white space
>>           (in which case the list should be quoted  to  keep  the
>>           entire  list as one command line argument). Multiple -I
>>           options may be supplied.  To clear the list  of  ignore
>>           identifiers,   supply   a   single   dash   ("-")   for
>>           identifier-list.
>>
>>           This feature is useful  when  preprocessor  macros  are
>>           used  in such a way that they cause syntactic confusion
>>           due to their presence. Indeed, this is the best way  of
>>           working around a number of problems caused by the pres-
>>           ence of syntax-busting  macros  in  source  files  (see
>>           CAVEATS,  below).  Some  examples  will illustrate this
>>           point.
>>
>>              int foo ARGDECL4(void *, ptr, long int, nbytes)
>>
>>
>>           In the above example, the  macro  "ARGDECL4"  would  be
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    4
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           mistakenly  interpreted  to be the name of the function
>>           instead of the correct name  of  "foo".  Specifying  -I
>>           ARGDECL4 results in the correct behavior.
>>
>>              /* creates an RCS version string in module */
>>              MODULE_VERSION("$Revision: 590 $")
>>
>>
>>           In the above example the  macro  invocation  looks  too
>>           much  like a function definition because it is not fol-
>>           lowed by a semicolon (indeed, it could even be followed
>>           by  a  global  variable definition that would look much
>>           like a K&R style function  parameter  declaration).  In
>>           fact,  this  seeming function definition could possibly
>>           even cause the rest of the  file  to  be  skipped  over
>>           while  trying to complete the definition. Specifying -I
>>           MODULE_VERSION+ would avoid such a problem.
>>
>>              CLASS Example {
>>                  // your content here
>>              };
>>
>>
>>           The example above uses "CLASS" as a preprocessor  macro
>>           which expands to something different for each platform.
>>           For  instance  CLASS   may   be   defined   as   "class
>>           __declspec(dllexport)"  on  Win32  platforms and simply
>>           "class" on UNIX.  Normally, the absence of the C++ key-
>>           word   "class"  would  cause  the  source  file  to  be
>>           incorrectly parsed. Correct behavior can be restored by
>>           specifying -I CLASS=class.
>>
>>
>>      -L file
>>           Read from file a list of  file  names  for  which  tags
>>           should be generated.  If file is specified as "-", then
>>           file names are read from  standard  input.  File  names
>>           read  using  this  option  are processed following file
>>           names appearing on the command line. Options  are  also
>>           accepted  in  this  input.  If this option is specified
>>           more than once, only the last will apply.  Note:   file
>>           is  read in line-oriented mode, where a new line is the
>>           only delimiter and non-trailing  white  space  is  con-
>>           sidered  significant, in order that file names contain-
>>           ing spaces may be  supplied  (however,  trailing  white
>>           space  is  stripped  from  lines);  this can affect how
>>           options are parsed if included in the input.
>>
>>
>>      -n   Equivalent to --excmd=number.
>>
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    5
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      -N   Equivalent to --excmd=pattern.
>>
>>
>>      -o tagfile
>>           Equivalent to -f tagfile.
>>
>>
>>      -R   Equivalent to --recurse.
>>
>>
>>      -u   Equivalent to --sort=no (i.e. "unsorted").
>>
>>
>>      -V   Equivalent to --verbose.
>>
>>
>>      -w   This  option  is   silently   ignored   for   backward-
>>           compatibility with the ctags of SVR4 Unix.
>>
>>
>>      -x   Print a tabular, human-readable cross reference  (xref)
>>           file  to  standard  output  instead of generating a tag
>>           file. The information contained in the output includes:
>>           the  tag  name;  the kind of tag; the line number, file
>>           name, and source line  (with  extra  white  space  con-
>>           densed)  of the file which defines the tag. No tag file
>>           is written and all options affecting  tag  file  output
>>           will  be ignored. Example applications for this feature
>>           are generating a listing of all functions located in  a
>>           source  file  (e.g. ctags -x --c-kinds=f file), or gen-
>>           erating a list of all externally visible  global  vari-
>>           ables   located   in  a  source  file  (e.g.  ctags  -x
>>           --c-kinds=v --file-scope=no  file).  This  option  must
>>           appear before the first file name.
>>
>>
>>      --append[=yes|no]
>>           Indicates whether tags  generated  from  the  specified
>>           files  should  be  appended to those already present in
>>           the tag file or should replace them. This option is off
>>           by  default.  This  option must appear before the first
>>           file name.
>>
>>
>>      --etags-include=file
>>           Include a reference to  file  in  the  tag  file.  This
>>           option  may be specified as many times as desired. This
>>           supports Emacs' capability to  use  a  tag  file  which
>>           "includes"  other  tag  files. [Available only in etags
>>           mode]
>>
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    6
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      --exclude=[pattern]
>>           Add pattern to a list  of  excluded  files  and  direc-
>>           tories.  This  option may be specified as many times as
>>           desired. For each file name considered by  ctags,  each
>>           pattern  specified  using  this option will be compared
>>           against    both     the     complete     path     (e.g.
>>           some/path/base.ext)  and  the base name (e.g. base.ext)
>>           of the file, thus allowing patterns which match a given
>>           file  name  irrespective  of  its path, or match only a
>>           specific path. If appropriate support is available from
>>           the  runtime  library  of your C compiler, then pattern
>>           may contain the  usual  shell  wildcards  (not  regular
>>           expressions)  common  on  Unix  (be  sure  to quote the
>>           option parameter to protect the  wildcards  from  being
>>           expanded  by  the  shell  before being passed to ctags;
>>           also be aware that wildcards can match the slash  char-
>>           acter,  '/').  You can determine if shell wildcards are
>>           available on your platform by examining the  output  of
>>           the  --version  option, which will include "+wildcards"
>>           in the compiled feature  list;  otherwise,  pattern  is
>>           matched  against file names using a simple textual com-
>>           parison.
>>
>>           If pattern begins with the character '@', then the rest
>>           of  the string is interpreted as a file name from which
>>           to read exclusion patterns, one per line. If pattern is
>>           empty,  the list of excluded patterns is cleared.  Note
>>           that at program startup, the default exclude list  con-
>>           tains  "EIFGEN",  "SCCS",  "RCS",  and "CVS", which are
>>           names of directories for  which  it  is  generally  not
>>           desirable  to  descend  while  processing the --recurse
>>           option.
>>
>>
>>      --excmd=type
>>           Determines the type of EX command used to  locate  tags
>>           in the source file.  [Ignored in etags mode]
>>
>>           The valid values for type (either the  entire  word  or
>>           the first letter is accepted) are:
>>
>>
>>           number   Use only line numbers  in  the  tag  file  for
>>                    locating tags. This has four advantages:
>>                    1.  Significantly  reduces  the  size  of  the
>>                        resulting tag file.
>>                    2.  Eliminates failures to find  tags  because
>>                        the  line  defining  the  tag has changed,
>>                        causing the pattern match  to  fail  (note
>>                        that  some  editors, such as vim, are able
>>                        to recover in many such instances).
>>                    3.  Eliminates finding identical matching, but
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    7
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>                        incorrect, source lines (see BUGS, below).
>>                    4.  Retains separate entries in the  tag  file
>>                        for  lines which are identical in content.
>>                        In pattern  mode,  duplicate  entries  are
>>                        dropped  because  the search patterns they
>>                        generate are identical, making the  dupli-
>>                        cate entries useless.
>>
>>
>>                    However, this option has one significant draw-
>>                    back:  changes  to  the source files can cause
>>                    the line numbers recorded in the tag  file  to
>>                    no  longer  correspond  to  the  lines  in the
>>                    source file, causing jumps  to  some  tags  to
>>                    miss  the  target  definition  by  one or more
>>                    lines. Basically, this  option  is  best  used
>>                    when the source code to which it is applied is
>>                    not subject to change. Selecting  this  option
>>                    type   causes  the  following  options  to  be
>>                    ignored: -BF.
>>
>>
>>           pattern  Use only search patterns for all tags,  rather
>>                    than  the  line numbers usually used for macro
>>                    definitions. This has  the  advantage  of  not
>>                    referencing  obsolete  line numbers when lines
>>                    have been added or removed since the tag  file
>>                    was generated.
>>
>>
>>           mixed    In this mode, patterns are generally used with
>>                    a few exceptions. For C, line numbers are used
>>                    for  macro  definition  tags.  This  was   the
>>                    default format generated by the original ctags
>>                    and is, therefore, retained as the default for
>>                    this  option.  For  Fortran,  line numbers are
>>                    used   for   common   blocks   because   their
>>                    corresponding   source   lines  are  generally
>>                    identical, making pattern searches useless for
>>                    finding all matches.
>>
>>
>>      --extra=[+|-]flags
>>           Specifies whether to include extra tag entries for cer-
>>           tain kinds of information. The parameter flags is a set
>>           of one-letter flags,  each  representing  one  kind  of
>>           extra tag entry to include in the tag file. If flags is
>>           preceded by by either the '+'  or  '-'  character,  the
>>           effect of each flag is added to, or removed from, those
>>           currently enabled;  otherwise  the  flags  replace  any
>>           current  settings.  The meaning of each flag is as fol-
>>           lows:
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    8
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>              f   Include an entry for the base file name of every
>>                  source file (e.g.  "example.c"), which addresses
>>                  the first line of the file.
>>
>>              q   Include an extra class-qualified tag  entry  for
>>                  each  tag  which  is  a  member  of a class (for
>>                  languages  for   which   this   information   is
>>                  extracted; currently C++, Eiffel, and Java). The
>>                  actual form of the qualified  tag  depends  upon
>>                  the  language  from  which  the  tag was derived
>>                  (using a form that is most natural for how qual-
>>                  ified  calls are specified in the language). For
>>                  C++, it is in the form "class::member"; for Eif-
>>                  fel  and Java, it is in the form "class.member".
>>                  This may allow easier  location  of  a  specific
>>                  tags  when  multiple  occurrences  of a tag name
>>                  occur in the tag file. Note, however, that  this
>>                  could  potentially  more than double the size of
>>                  the tag file.
>>
>>
>>      --fields=[+|-]flags
>>           Specifies the available extension fields which  are  to
>>           be  included  in  the  entries of the tag file (see TAG
>>           FILE FORMAT, below, for more information). The  parame-
>>           ter flags is a set of one-letter flags, each represent-
>>           ing one type of extension field to  include,  with  the
>>           following  meanings  (disabled  by default unless indi-
>>           cated):
>>
>>
>>              a   Access (or export) of class members
>>              f   File-restricted scoping [enabled]
>>              i   Inheritance information
>>              k   Kind of tag as a single letter [enabled]
>>              K   Kind of tag as full name
>>              l   Language of source file containing tag
>>              m   Implementation information
>>              n   Line number of tag definition
>>              s   Scope of tag definition [enabled]
>>              S   Signature of routine (e.g. prototype or  parame-
>>                  ter list)
>>              z   Include the "kind:" key in kind field
>>              t   Type and  name  of  a  variable  or  typedef  as
>>                  "typeref:" field [enabled]
>>
>>           Each letter or group of  letters  may  be  preceded  by
>>           either  '+'  to  add  it  to the default set, or '-' to
>>           exclude it. In the absence of any preceding '+' or  '-'
>>           sign,  only those kinds explicitly listed in flags will
>>           be included in the output (i.e. overriding the  default
>>           set).  This  option is ignored if the option --format=1
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    9
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           has been specified. The default value of this option is
>>           fks.
>>
>>
>>      --file-scope[=yes|no]
>>           Indicates whether tags scoped only for  a  single  file
>>           (i.e.  tags which cannot be seen outside of the file in
>>           which they are defined, such as "static"  tags)  should
>>           be  included  in  the output. See, also, the -h option.
>>           This option is enabled by default.
>>
>>
>>      --filter[=yes|no]
>>           Causes ctags to behave as a filter, reading source file
>>           names  from  standard  input and printing their tags to
>>           standard output on a file-by-file basis. If --sorted is
>>           enabled, tags are sorted only within the source file in
>>           which they are defined. File names are read from  stan-
>>           dard input in line-oriented input mode (see note for -L
>>           option) and only after file names listed on the command
>>           line  or  from  any  file supplied using the -L option.
>>           When this option is enabled, the options  -f,  -o,  and
>>           --totals are ignored. This option is quite esoteric and
>>           is disabled by default. This option must appear  before
>>           the first file name.
>>
>>
>>      --filter-terminator=string
>>           Specifies a string to print to standard output  follow-
>>           ing  the  tags  for  each  file  name  parsed  when the
>>           --filter option is enabled. This may permit an applica-
>>           tion  reading the output of ctags to determine when the
>>           output for each file is finished. Note that if the file
>>           name read is a directory and --recurse is enabled, this
>>           string will be printed only one once at the end of  all
>>           tags found for by descending the directory. This string
>>           will always be separated from the last tag line for the
>>           file  by its terminating newline.  This option is quite
>>           esoteric and is empty  by  default.  This  option  must
>>           appear before the first file name.
>>
>>
>>      --format=level
>>           Change the format of the output tag file. Currently the
>>           only  valid values for level are 1 or 2. Level 1 speci-
>>           fies the original tag file format and level 2 specifies
>>           a  new extended format containing extension fields (but
>>           in a manner which retains  backward-compatibility  with
>>           original  vi(1)  implementations). The default level is
>>           2. This option must appear before the first file  name.
>>           [Ignored in etags mode]
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   10
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      --help
>>           Prints to standard output a detailed usage description,
>>           and then exits.
>>
>>
>>      --if0[=yes|no]
>>           Indicates a preference as to  whether  code  within  an
>>           "#if  0" branch of a preprocessor conditional should be
>>           examined for non-macro  tags  (macro  tags  are  always
>>           included).  Because  the intent of this construct is to
>>           disable code, the default value of this option  is  no.
>>           Note that this indicates a preference only and does not
>>           guarantee skipping code within an "#if 0" branch, since
>>           the  fall-back  algorithm  used  to  generate tags when
>>           preprocessor conditionals are too complex  follows  all
>>           branches  of  a conditional. This option is disabled by
>>           default.
>>
>>
>>      --<LANG>-kinds=[+|-]kinds
>>           Specifies a list of language-specific kinds of tags (or
>>           kinds)  to  include in the output file for a particular
>>           language, where <LANG> is case-insensitive and  is  one
>>           of    the    built-in    language    names   (see   the
>>           --list-languages  option  for  a  complete  list).  The
>>           parameter  kinds  is a group of one-letter flags desig-
>>           nating kinds of tags (particular to  the  language)  to
>>           either include or exclude from the output. The specific
>>           sets of flags recognized for each language, their mean-
>>           ings  and  defaults  may be list using the --list-kinds
>>           option. Each letter or group of letters may be preceded
>>           by  either  '+' to add it to, or '-' to remove it from,
>>           the default set. In the absence of any preceding '+' or
>>           '-'  sign,  only those kinds explicitly listed in kinds
>>           will be included in the output  (i.e.   overriding  the
>>           default for the specified language).
>>
>>           As an example for the C language, in order to add  pro-
>>           totypes  and  external  variable  declarations  to  the
>>           default set of  tag  kinds,  but  exclude  macros,  use
>>           --c-kinds=+px-d;  to  include  only tags for functions,
>>           use --c-kinds=f.
>>
>>
>>      --langdef=name
>>           Defines a new user-defined language, name, to be parsed
>>           with  regular  expressions.  Once  defined, name may be
>>           used in other options taking language names. The  typi-
>>           cal use of this option is to first define the language,
>>           then map file names to it using --langmap, then specify
>>           regular  expressions using --regex-<LANG> to define how
>>           its tags are found.
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   11
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      --langmap=map[,map[...]]
>>           Controls how file names are mapped  to  languages  (see
>>           the  --list-maps option). Each comma-separated map con-
>>           sists of the language name (either a built-in or  user-
>>           defined  language),  a colon, and a list of file exten-
>>           sions and/or file name patterns. A  file  extension  is
>>           specified  by  preceding  the  extension  with a period
>>           (e.g. ".c").  A  file  name  pattern  is  specified  by
>>           enclosing    the    pattern    in   parentheses   (e.g.
>>           "([Mm]akefile)"). If appropriate support  is  available
>>           from  the  runtime library of your C compiler, then the
>>           file name pattern may contain the usual shell wildcards
>>           common  on  Unix (be sure to quote the option parameter
>>           to protect the wildcards from  being  expanded  by  the
>>           shell  before being passed to ctags). You can determine
>>           if shell wildcards are available on  your  platform  by
>>           examining  the  output  of  the --version option, which
>>           will include "+wildcards" in the compiled feature list;
>>           otherwise,  the  file name patterns are matched against
>>           file names using a simple textual comparison. When map-
>>           ping  a  file extension, it will first be unmapped from
>>           any other languages.
>>
>>           If the first character in a map is a  plus  sign,  then
>>           the  extensions and file name patterns in that map will
>>           be appended to the current map for that language;  oth-
>>           erwise, the map will replace the current map. For exam-
>>           ple, to specify that only files with extensions  of  .c
>>           and  .x  are  to  be  treated  as C language files, use
>>           "--langmap=c:.c.x"; to also add files  with  extensions
>>           of    .j    as    Java    language    files,    specify
>>           "--langmap=c:.c.x,java:+.j".  To  map  makefiles  (e.g.
>>           files  named  either  "Makefile", "makefile", or having
>>           the extension ".mak")  to  a  language  called  "make",
>>           specify   "--langmap=make:([Mm]akefile).mak".   To  map
>>           files having no extension, specify a  period  not  fol-
>>           lowed  by  a  non-period  character  (e.g.  ".", "..x",
>>           ".x."). To clear the mapping for a particular  language
>>           (thus  inhibiting automatic generation of tags for that
>>           language),  specify  an  empty  extension  list   (e.g.
>>           "--langmap=fortran:").  To restore the default language
>>           mappings for all a particular language, supply the key-
>>           word "default" for the mapping.  To specify restore the
>>           default language mappings for  all  languages,  specify
>>           "--langmap=default".  Note  that  file  extensions  are
>>           tested before file name  patterns  when  inferring  the
>>           language of a file.
>>
>>
>>      --language-force=language
>>           By default, ctags automatically selects the language of
>>           a  source  file,  ignoring  those  files whose language
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   12
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           cannot be determined (see SOURCE  FILES,  above).  This
>>           option forces the specified language (case-insensitive;
>>           either built-in or user-defined) to be used  for  every
>>           supplied  file  instead  of automatically selecting the
>>           language based upon its  extension.  In  addition,  the
>>           special  value  auto indicates that the language should
>>           be automatically selected (which  effectively  disables
>>           this option).
>>
>>
>>      --languages=[+|-]list
>>           Specifies the languages for  which  tag  generation  is
>>           enabled, with list containing a comma-separated list of
>>           language names (case-insensitive;  either  built-in  or
>>           user-defined).  If  the  first  language of list is not
>>           preceded by either a '+' or '-', the current list  will
>>           be  cleared  before adding or removing the languages in
>>           list. Until a '-' is encountered, each language in  the
>>           list  will  be added to the current list. As either the
>>           '+' or '-' is encountered in the  list,  the  languages
>>           following  it  are  added  or  removed from the current
>>           list, respectively. Thus, it becomes simple to  replace
>>           the  current  list  with a new one, or to add or remove
>>           languages from the current list.  The  actual  list  of
>>           files for which tags will be generated depends upon the
>>           language extension mapping in effect (see the --langmap
>>           option).  Note  that  all  languages,  including  user-
>>           defined languages are enabled  unless  explicitly  dis-
>>           abled  using  this  option.  Language names included in
>>           list may be any built-in  language  or  one  previously
>>           defined  with --langdef. The default is "all", which is
>>           also  accepted   as   a   valid   argument.   See   the
>>           --list-languages  option  for  a  complete  list of the
>>           built-in language names.
>>
>>
>>      --license
>>           Prints a summary of the software  license  to  standard
>>           output, and then exits.
>>
>>
>>      --line-directives[=yes|no]
>>           Specifies whether "#line" directives should  be  recog-
>>           nized. These are present in the output of preprocessors
>>           and contain the line  number,  and  possibly  the  file
>>           name,  of  the  original  source file(s) from which the
>>           preprocessor output file was generated.  When  enabled,
>>           this  option  will  cause ctags to generate tag entries
>>           marked with the file names and line  numbers  of  their
>>           locations  original  source  file(s),  instead of their
>>           actual locations in the preprocessor output. The actual
>>           file  names placed into the tag file will have the same
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   13
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           leading path  components  as  the  preprocessor  output
>>           file,  since  it  is  assumed  that the original source
>>           files are located relative to the  preprocessor  output
>>           file  (unless, of course, the #line directive specifies
>>           an absolute path). This option is off by default. Note:
>>           This option is generally only useful when used together
>>           with the --excmd=number (-n) option. Also, you may have
>>           to  use either the --langmap or --language-force option
>>           if the extension of the preprocessor output file is not
>>           known to ctags.
>>
>>
>>      --links[=yes|no]
>>           Indicates whether symbolic links (if supported)  should
>>           be followed. When disabled, symbolic links are ignored.
>>           This option is on by default.
>>
>>
>>      --list-kinds[=language|all]
>>           Lists the tag kinds recognized for either the specified
>>           language or all languages, and then exits. Each kind of
>>           tag recorded in the tag file is represented by  a  one-
>>           letter  flag,  which  is  also  used to filter the tags
>>           placed   into   the   output   through   use   of   the
>>           --<LANG>-kinds  option. Note that some languages and/or
>>           tag kinds may be implemented using regular  expressions
>>           and  may  not be available if regex support is not com-
>>           piled into ctags (see the --regex-<LANG> option).  Each
>>           kind listed is enabled unless followed by "[off]".
>>
>>
>>      --list-maps[=language|all]
>>           Lists the file extensions and file name patterns  which
>>           associate  a  file  name with a language for either the
>>           specified language or all languages,  and  then  exits.
>>           See the --langmap option, and SOURCE FILES, above.
>>
>>
>>      --list-languages
>>           Lists the names of the languages understood  by  ctags,
>>           and then exits.  These language names are case insensi-
>>           tive  and  may  be  used   in   the   --language-force,
>>           --languages,    --<LANG>-kinds,    and   --regex-<LANG>
>>           options.
>>
>>
>>      --options=file
>>           Read additional options from file. The file should con-
>>           tain  one  option  per  line.  As  a  special  case, if
>>           --options=NONE is specified as the first option on  the
>>           command  line, it will disable the automatic reading of
>>           any configuration options from either  a  file  or  the
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   14
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           environment (see FILES).
>>
>>
>>      --recurse[=yes|no]
>>           Recurse into directories encountered  in  the  list  of
>>           supplied  files. If the list of supplied files is empty
>>           and no file list is specified with the -L option,  then
>>           the  current  directory (i.e. ".") is assumed. Symbolic
>>           links are followed. If you don't like these  behaviors,
>>           either  explicitly specify the files or pipe the output
>>           of find(1) into ctags -L- instead. Note: This option is
>>           not  supported  on  all  platforms  at  present.  It is
>>           available if the output of the --help  option  includes
>>           this  option.  See, also, the --exclude to limit recur-
>>           sion.
>>
>>
>>      --regex-<LANG>=/regexp/replacement/[kind-spec/][flags]
>>           The /regexp/replacement/ pair define a regular  expres-
>>           sion  replacement pattern, similar in style to sed sub-
>>           stitution commands, with which to  generate  tags  from
>>           source  files  mapped  to  the  named language, <LANG>,
>>           (case-insensitive; either a  built-in  or  user-defined
>>           language).  The  regular expression, regexp, defines an
>>           extended  regular  expression  (roughly  that  used  by
>>           egrep(1)), which is used to locate a single source line
>>           containing a tag and may specify tab  characters  using
>>           \t.  When  a matching line is found, a tag will be gen-
>>           erated for the name defined by replacement, which  gen-
>>           erally  will  contain  the  special  back-references \1
>>           through \9 to refer to matching  sub-expression  groups
>>           within  regexp.  The  '/' separator characters shown in
>>           the parameter to the option can actually be replaced by
>>           any  character. Note that whichever separator character
>>           is used will have to be escaped with a backslash  ('\')
>>           character wherever it is used in the parameter as some-
>>           thing other than a separator.  The  regular  expression
>>           defined  by this option is added to the current list of
>>           regular expressions for the specified  language  unless
>>           the  parameter  is  omitted,  in which case the current
>>           list is cleared.
>>
>>           Unless modified by flags, regexp is  interpreted  as  a
>>           Posix  extended  regular  expression.  The  replacement
>>           should expand for all matching  lines  to  a  non-empty
>>           string  of  characters,  or  a  warning message will be
>>           reported. An optional kind specifier for tags  matching
>>           regexp  may  follow  replacement,  which will determine
>>           what kind of tag is reported in  the  "kind"  extension
>>           field  (see  TAG  FILE FORMAT, below). The full form of
>>           kind-spec is in the form of a single letter, a comma, a
>>           name (without spaces), a comma, a description, followed
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   15
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           by a separator, which specify the short and long  forms
>>           of   the   kind   value  and  its  textual  description
>>           (displayed using --list-kinds). Either  the  kind  name
>>           and/or  the description may be omitted. If kind-spec is
>>           omitted, it defaults to "r,regex". Finally,  flags  are
>>           one or more single-letter characters having the follow-
>>           ing effect upon the interpretation of regexp:
>>
>>
>>              b   The pattern is interpreted as a Posix basic reg-
>>                  ular expression.
>>
>>              e   The pattern is interpreted as a  Posix  extended
>>                  regular expression (default).
>>
>>              i   The regular expression is to  be  applied  in  a
>>                  case-insensitive manner.
>>
>>           Note that this option is available only  if  ctags  was
>>           compiled  with  support  for regular expressions, which
>>           depends upon your platform. You can determine  if  sup-
>>           port  for regular expressions is compiled in by examin-
>>           ing the output of  the  --version  option,  which  will
>>           include "+regex" in the compiled feature list.
>>
>>           For more information on the regular expressions used by
>>           ctags,  see  either the regex(5,7) man page, or the GNU
>>           info documentation for regex (e.g. "info regex").
>>
>>
>>      --sort[=yes|no|foldcase]
>>           Indicates whether the tag file should be sorted on  the
>>           tag name (default is yes). Note that the original vi(1)
>>           required sorted tags. The foldcase value specifies case
>>           insensitive  (or  case-folded)  sorting.   Fast  binary
>>           searches of tag files  sorted  with  case-folding  will
>>           require  special  support  from  tools using tag files,
>>           such as that found in the ctags  readtags  library,  or
>>           Vim  version  6.2  or  higher (using "set ignorecase").
>>           This option must appear before  the  first  file  name.
>>           [Ignored in etags mode]
>>
>>
>>      --tag-relative[=yes|no]
>>           Indicates that the file paths recorded in the tag  file
>>           should  be relative to the directory containing the tag
>>           file, rather than relative to  the  current  directory,
>>           unless  the  files  supplied  on  the  command line are
>>           specified with absolute paths. This option must  appear
>>           before  the  first  file  name. The default is yes when
>>           running in etags mode (see the -e  option),  no  other-
>>           wise.
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   16
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      --totals[=yes|no]
>>           Prints statistics about the source files read  and  the
>>           tag  file  written  during  the  current  invocation of
>>           ctags. This option is off by default.  This option must
>>           appear before the first file name.
>>
>>
>>      --verbose[=yes|no]
>>           Enable verbose mode. This  prints  out  information  on
>>           option  processing  and a brief message describing what
>>           action is being  taken  for  each  file  considered  by
>>           ctags. Normally, ctags does not read command line argu-
>>           ments until after options are read from the  configura-
>>           tion files (see FILES, below) and the CTAGS environment
>>           variable. However, if this option is the first argument
>>           on  the  command  line,  it will take effect before any
>>           options are read from these sources. The default is no.
>>
>>
>>      --version
>>           Prints a version identifier for ctags to standard  out-
>>           put,  and then exits. This is guaranteed to always con-
>>           tain the string "Exuberant Ctags".
>>
>>
>>
>> OPERATIONAL DETAILS
>>      As ctags considers each file  name  in  turn,  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
>>      adds an entry to the tag file for each language object it is
>>      written  to  handle. See TAG FILE FORMAT, below, for details
>>      on these entries.
>>
>>      This implementation of ctags imposes no formatting  require-
>>      ments  on  C code as do legacy implementations. Older imple-
>>      mentations of ctags tended to rely upon  certain  formatting
>>      assumptions  in  order  to  help  it resolve coding dilemmas
>>      caused by preprocessor conditionals.
>>
>>      In general,  ctags  tries  to  be  smart  about  conditional
>>      preprocessor  directives.  If  a preprocessor conditional is
>>      encountered within a statement which defines  a  tag,  ctags
>>      follows only the first branch of that conditional (except in
>>      the special case of "#if 0", in which case it  follows  only
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   17
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      the  last  branch).  The  reason for this is that failing to
>>      pursue only one branch can result in ambiguous syntax, as in
>>      the following example:
>>
>>           #ifdef TWO_ALTERNATIVES
>>           struct {
>>           #else
>>           union {
>>           #endif
>>               short a;
>>               long b;
>>           }
>>
>>      Both branches cannot be followed, or  braces  become  unbal-
>>      anced and ctags would be unable to make sense of the syntax.
>>
>>      If the application of this heuristic fails to properly parse
>>      a  file, generally due to complicated and inconsistent pair-
>>      ing within the conditionals, ctags will retry the file using
>>      a different heuristic which does not selectively follow con-
>>      ditional preprocessor branches, but instead  falls  back  to
>>      relying upon a closing brace ("}") in column 1 as indicating
>>      the end of a block once any  brace  imbalance  results  from
>>      following a #if conditional branch.
>>
>>      Ctags will also try  to  specially  handle  arguments  lists
>>      enclosed  in  double  sets of parentheses in order to accept
>>      the following conditional construct:
>>
>>           extern void foo __ARGS((int one, char two));
>>
>>      Any name immediately preceding the "(("  will  be  automati-
>>      cally ignored and the previous name will be used.
>>
>>      C++ operator definitions are specially handled. In order for
>>      consistency  with  all  types  of  operators (overloaded and
>>      conversion), the operator name in the tag file  will  always
>>      be  preceded  by  the  string  "operator " (i.e. even if the
>>      actual operator definition was written as "operator<<").
>>
>>      After creating or appending to the tag file, it is sorted by
>>      the tag name, removing identical tag lines.
>>
>>
>>
>> TAG FILE FORMAT
>>      When not running in etags mode, each entry in the  tag  file
>>      consists  of  a separate line, each looking like this in the
>>      most general case:
>>
>>       tag_name<TAB>file_name<TAB>ex_cmd;"<TAB>extension_fields
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   18
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      The fields and separators of these lines  are  specified  as
>>      follows:
>>
>>          1.  tag name
>>          2.  single tab character
>>          3.  name of the file in which the object associated with
>>              the tag is located
>>          4.  single tab character
>>          5.  EX command used to locate the tag within  the  file;
>>              generally  a  search  pattern  (either  /pattern/ or
>>              ?pattern?) or line number (see  --excmd).  Tag  file
>>              format  2  (see  --format)  extends  this EX command
>>              under certain circumstances  to  include  a  set  of
>>              extension fields (described below) embedded in an EX
>>              comment immediately  appended  to  the  EX  command,
>>              which  leaves  it  backward-compatible with original
>>              vi(1) implementations.
>>
>>      A few special tags are written into the tag file for  inter-
>>      nal  purposes.  These  tags  are composed in such a way that
>>      they always sort to the top of  the  file.   Therefore,  the
>>      first  two  characters of these tags are used a magic number
>>      to detect a tag file for purposes of determining  whether  a
>>      valid  tag  file  is  being overwritten rather than a source
>>      file.
>>
>>      Note that the name of each source file will be  recorded  in
>>      the  tag  file  exactly  as  it appears on the command line.
>>      Therefore, if the path you specified on the command line was
>>      relative  to the current directory, then it will be recorded
>>      in that same manner in  the  tag  file.  See,  however,  the
>>      --tag-relative option for how this behavior can be modified.
>>
>>      Extension fields are tab-separated key-value pairs  appended
>>      to  the  end  of  the  EX command as a comment, as described
>>      above. These key value pairs  appear  in  the  general  form
>>      "key:value". Their presence in the lines of the tag file are
>>      controlled by the --fields option. The possible keys and the
>>      meaning of their values are as follows:
>>
>>
>>      access      Indicates the visibility of this  class  member,
>>                  where value is specific to the language.
>>
>>
>>      file        Indicates that the tag has file-limited visibil-
>>                  ity. This key has no corresponding value.
>>
>>
>>      kind        Indicates the type, or kind, of tag.  Its  value
>>                  is  either  one  of the corresponding one-letter
>>                  flags described under the various --<LANG>-kinds
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   19
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>                  options  above,  or a full name. It is permitted
>>                  (and is, in fact, the default) for the key  por-
>>                  tion  of  this field to be omitted. The optional
>>                  behaviors  are  controlled  with  the   --fields
>>                  option.
>>
>>
>>      implementation
>>                  When present, this indicates a limited implemen-
>>                  tation  (abstract  vs. concrete) of a routine or
>>                  class, where value is specific to  the  language
>>                  ("virtual" or "pure virtual" for C++; "abstract"
>>                  for Java).
>>
>>
>>      inherits    When present, value. is a  comma-separated  list
>>                  of  classes  from  which  this  class is derived
>>                  (i.e. inherits from).
>>
>>
>>      signature   When  present,  value  is  a  language-dependent
>>                  representation  of the signature of a routine. A
>>                  routine signature in its complete form specifies
>>                  the  return  type  of  a  routine and its formal
>>                  argument list. This extension field is presently
>>                  supported  only  for  C-based languages and does
>>                  not include the return type.
>>
>>
>>      In addition, information on the scope of the tag  definition
>>      may  be  available,  with  the  key  portion  equal  to some
>>      language-dependent construct name and  its  value  the  name
>>      declared for that construct in the program. This scope entry
>>      indicates the scope in which the tag was found. For example,
>>      a  tag generated for a C structure member would have a scope
>>      looking like "struct:myStruct".
>>
>>
>>
>> HOW TO USE WITH VI
>>      Vi will, by default, expect a tag file by the name "tags" in
>>      the  current directory. Once the tag file is built, the fol-
>>      lowing commands exercise the tag indexing feature:
>>
>>      vi -t tag   Start vi and position the cursor at the file and
>>                  line where "tag" is defined.
>>
>>      :ta tag     Find a tag.
>>
>>      Ctrl-]      Find the tag under the cursor.
>>
>>      Ctrl-T      Return to previous location before jump  to  tag
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   20
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>                  (not widely implemented).
>>
>>
>>
>> HOW TO USE WITH GNU EMACS
>>      Emacs will, by default, expect a tag file by the name "TAGS"
>>      in  the  current  directory. Once the tag file is built, the
>>      following commands exercise the tag indexing feature:
>>
>>      M-x visit-tags-table <RET> FILE <RET>
>>                Select the tag file, "FILE", to use.
>>
>>      M-. [TAG] <RET>
>>                Find the first definition of TAG. The default  tag
>>                is the identifier under the cursor.
>>
>>      M-*       Pop back to where you previously invoked "M-.".
>>
>>      C-u M-.   Find the next definition for the last tag.
>>
>>
>>      For more commands, see the Tags  topic  in  the  Emacs  info
>>      document.
>>
>>
>>
>> HOW TO USE WITH NEDIT
>>      NEdit version 5.1 and later can handle the new extended  tag
>>      file  format (see --format). To make NEdit use the tag file,
>>      select "File->Load Tags File". To jump to the definition for
>>      a  tag,  highlight the word, the press Ctrl-D. NEdit 5.1 can
>>      can read multiple  tag  files  from  different  directories.
>>      Setting  the  X  resource nedit.tagFile to the name of a tag
>>      file instructs NEdit to automatically load that tag file  at
>>      startup time.
>>
>>
>>
>> CAVEATS
>>      Because ctags is neither a preprocessor nor a compiler,  use
>>      of  preprocessor  macros  can fool ctags into either missing
>>      tags or improperly generating inappropriate  tags.  Although
>>      ctags has been designed to handle certain common cases, this
>>      is the single biggest cause of reported problems. In partic-
>>      ular,  the  use  of  preprocessor constructs which alter the
>>      textual syntax of C can fool ctags. You can work around many
>>      such problems by using the -I option.
>>
>>      Note that since ctags generates patterns for  locating  tags
>>      (see  the  --excmd option), it is entirely possible that the
>>      wrong line may be found  by  your  editor  if  there  exists
>>      another   source   line  which  is  identical  to  the  line
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   21
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      containing the tag. The following example demonstrates  this
>>      condition:
>>
>>           int variable;
>>
>>           /* ... */
>>           void foo(variable)
>>           int variable;
>>           {
>>               /* ... */
>>           }
>>
>>      Depending upon which editor you use and where  in  the  code
>>      you happen to be, it is possible that the search pattern may
>>      locate the local parameter declaration in  foo()  before  it
>>      finds the actual global variable definition, since the lines
>>      (and therefore their search patterns  are  identical).  This
>>      can be avoided by use of the --excmd=n option.
>>
>>
>>
>> BUGS
>>      Ctags has more options than ls(1).
>>
>>      When  parsing  a  C++  member  function   definition   (e.g.
>>      "className::function"),  ctags  cannot determine whether the
>>      scope specifier is a class name or a namespace specifier and
>>      always  lists it as a class name in the scope portion of the
>>      extension fields. Also, if a C++ function is defined outside
>>      of  the  class  declaration  (the  usual  case),  the access
>>      specification  (i.e.  public,  protected,  or  private)  and
>>      implementation information (e.g. virtual, pure virtual) con-
>>      tained in the function declaration are not  known  when  the
>>      tag  is generated for the function definition. It will, how-
>>      ever be available for prototypes (e.g --c++-kinds=+p).
>>
>>      No qualified tags are generated for language objects  inher-
>>      ited into a class.
>>
>>
>>
>> ENVIRONMENT VARIABLES
>>      CTAGS   If this environment  variable  exists,  it  will  be
>>              expected  to  contain a set of default options which
>>              are read when ctags starts, after the  configuration
>>              files  listed  in FILES, below, are read, but before
>>              any command line options are read. Options appearing
>>              on  the command line will override options specified
>>              in this variable. Only options  will  be  read  from
>>              this  variable.  Note  that  all white space in this
>>              variable is considered a separator, making it impos-
>>              sible  to  pass  an  option  parameter containing an
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   22
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>              embedded space. If this is a problem, use  a  confi-
>>              guration file instead.
>>
>>
>>      ETAGS   Similar to the CTAGS variable above, this  variable,
>>              if  found,  will  be read when etags starts. If this
>>              variable is not found, etags will try to  use  CTAGS
>>              instead.
>>
>>
>>      TMPDIR  On Unix-like hosts where mkstemp() is available, the
>>              value  of  this  variable specifies the directory in
>>              which to place temporary files. This can  be  useful
>>              if the size of a temporary file becomes too large to
>>              fit on the partition holding the  default  temporary
>>              directory   defined   at  compilation  time.   ctags
>>              creates  temporary  files  only  if  either  (1)  an
>>              emacs-style tag file is being generated, (2) the tag
>>              file is being sent to standard output,  or  (3)  the
>>              program  was  compiled to use an internal sort algo-
>>              rithm to sort the tag files instead of the the  sort
>>              utility of the operating system. If the sort utility
>>              of the operating system is being used, it will  gen-
>>              erally  observe  this  variable  also.  Note that if
>>              ctags  is  setuid,  the  value  of  TMPDIR  will  be
>>              ignored.
>>
>>
>>
>> FILES
>>      /ctags.cnf (on MSDOS, MSWindows only)
>>      /etc/ctags.conf
>>      /usr/local/etc/ctags.conf
>>      $HOME/.ctags
>>      $HOME/ctags.cnf (on MSDOS, MSWindows only)
>>      .ctags
>>      ctags.cnf (on MSDOS, MSWindows only)
>>           If any of these configuration files exist, each will be
>>           expected  to contain a set of default options which are
>>           read in the order listed when ctags starts, but  before
>>           the  CTAGS  environment variable is read or any command
>>           line options are read. This makes it possible to set up
>>           site-wide,  personal  or  project-level defaults. It is
>>           possible to compile ctags to read an additional  confi-
>>           guration  file  before  any of those shown above, which
>>           will be indicated if the output produced by the  --ver-
>>           sion  option  lists  the "custom-conf" feature. Options
>>           appearing in the CTAGS environment variable or  on  the
>>           command  line  will override options specified in these
>>           files. Only options will be read from these files. Note
>>           that the option files are read in line-oriented mode in
>>           which spaces are significant (since  shell  quoting  is
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   23
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           not  possible).  Each  line  of the file is read as one
>>           command line parameter (as if it were quoted with  sin-
>>           gle  quotes).  Therefore,  use  new  lines  to indicate
>>           separate command-line arguments.
>>
>>
>>      tags The default tag file created by ctags.
>>
>>      TAGS The default tag file created by etags.
>>
>>
>> SEE ALSO
>>      The official Exuberant Ctags web site at:
>>
>>           http://ctags.sourceforge.net
>>
>>      Also ex(1), vi(1), elvis, or, better yet, vim, the  official
>>      editor  of  ctags.  For more information on vim, see the VIM
>>      Pages web site at:
>>
>>           http://www.vim.org/
>>
>>
>>
>> AUTHOR
>>      Darren Hiebert <dhiebert at users.sourceforge.net>
>>      http://DarrenHiebert.com/
>>
>>
>>
>> MOTIVATION
>>      "Think ye at all times of rendering some  service  to  every
>>      member of the human race."
>>
>>      "All effort and exertion put forth by man from the  fullness
>>      of  his  heart  is worship, if it is prompted by the highest
>>      motives and the will to do service to humanity."
>>
>>           -- From the Baha'i Writings
>>
>>
>>
>> CREDITS
>>      This version  of  ctags  was  originally  derived  from  and
>>      inspired   by   the   ctags   program  by  Steve  Kirkendall
>>      <kirkenda at cs.pdx.edu> that comes with  the  Elvis  vi  clone
>>      (though virtually none of the original code remains).
>>
>>      Credit is also due Bram Moolenaar <Bram at vim.org>, the author
>>      of  vim, who has devoted so much of his time and energy both
>>      to developing the editor as a  service  to  others,  and  to
>>      helping the orphans of Uganda.
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   24
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      The section entitled "HOW TO USE WITH GNU EMACS" was  shame-
>>      lessly stolen from the info page for GNU etags.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   25
>>
>>
>>
> 

-- 
blu

"Murderous organizations have increased in size and scope; they are
more daring, they are served by the most terrible weapons offered by
modern science, and the world is nowadays threatened by new forces
which, if recklessly unchained, may some day wreck universal
destruction."  - Arthur Griffith, 1898
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

Reply via email to