2225
|
1 -*- indented-text -*-
|
|
2
|
|
3 This file contains two sections:
|
|
4
|
|
5 1) An EBNF (Extended Backus Normal Form) description of the format of
|
|
6 the tags file created by etags.c and interpreted by etags.el;
|
|
7 2) A discussion of tag names and implicit tag names.
|
|
8
|
|
9 ====================== 1) EBNF tag file description =====================
|
|
10
|
|
11 Productions created from current behaviour to aid extensions
|
|
12 Francesco Potorti` <pot@gnu.org> 2002
|
|
13 ----------------
|
|
14
|
|
15 FF ::= #x0c /* tag section starter */
|
|
16
|
|
17 LF ::= #x0a /* line terminator */
|
|
18
|
|
19 DEL ::= #x7f /* pattern terminator */
|
|
20
|
|
21 SOH ::= #x01 /* name terminator */
|
|
22
|
|
23 regchar ::= [^#x0a#x0c#x7f] /* regular character */
|
|
24
|
|
25 regstring ::= { regchar } /* regular string */
|
|
26
|
|
27 unsint ::= [0-9] { [0-9] } /* non-negative integer */
|
|
28
|
|
29
|
|
30
|
|
31 tagfile ::= { tagsection } /* a tags file */
|
|
32
|
|
33 tagsection ::= FF LF ( includesec | regularsec ) LF
|
|
34
|
|
35 includesec ::= filename ",include" [ LF fileprop ]
|
|
36
|
|
37 regularsec ::= filename "," [ unsint ] [ LF fileprop ] { LF tag }
|
|
38
|
|
39 filename ::= regchar regstring /* a file name */
|
|
40
|
|
41 fileprop ::= "(" regstring ")" /* an elisp alist */
|
|
42
|
|
43 tag ::= directtag | patterntag
|
|
44
|
|
45 directtag ::= DEL realposition /* no pattern */
|
|
46
|
|
47 patterntag ::= pattern DEL [ tagname SOH ] position
|
|
48
|
|
49 pattern ::= regstring /* a tag pattern */
|
|
50
|
|
51 tagname ::= regchar regstring /* a tag name */
|
|
52
|
|
53 position ::= realposition | "," /* charpos,linepos */
|
|
54
|
|
55 realposition ::= "," unsint | unsint "," | unsint "," unsint
|
|
56
|
|
57 ==================== end of EBNF tag file description ====================
|
|
58
|
|
59
|
|
60
|
|
61 ======================= 2) discussion of tag names =======================
|
|
62
|
|
63 - WHAT ARE TAG NAMES
|
|
64 Tag lines in a tags file are usually made from the above defined pattern
|
|
65 and by an optional tag name. The pattern is a string that is searched
|
|
66 in the source file to find the tagged line.
|
|
67
|
|
68 - WHY TAG NAMES ARE GOOD
|
|
69 When a user looks for a tag, Emacs first compares the tag with the tag
|
|
70 names contained in the tags file. If no match is found, Emacs compares
|
|
71 the tag with the patterns. The tag name is then the preferred way to
|
|
72 look for tags in the tags file, because when the tag name is present
|
|
73 Emacs can find a tag faster and more accurately. These tag names are
|
|
74 part of tag lines in the tags file, so we call them "explicit".
|
|
75
|
|
76 - WHY IMPLICIT TAG NAMES ARE EVEN BETTER
|
|
77 When a tag line has no name, but a name can be deduced from the pattern,
|
|
78 we say that the tag line has an implicit tag name. Often tag names are
|
|
79 redundant; this happens when the name of a tag is an easily guessable
|
|
80 substring of the tag pattern. We define a set of rules to decide
|
|
81 whether it is possible to deduce the tag name from the pattern, and make
|
|
82 an unnamed tag in those cases. The name deduced from the pattern of an
|
|
83 unnamed tag is the implicit name of that tag.
|
2325
|
84 When the user looks for a tag, and Emacs finds no explicit tag names
|
2225
|
85 that match it, Emacs then looks for an tag whose implicit tag name
|
|
86 matches the request. etags.c uses implicit tag names when possible, in
|
|
87 order to reduce the size of the tags file.
|
|
88 An implicit tag name is deduced from the pattern by discarding the
|
|
89 last character if it is one of ` \f\t\n\r()=,;', then taking all the
|
|
90 rightmost consecutive characters in the pattern which are not one of
|
|
91 those.
|
|
92
|
|
93 ===================== end of discussion of tag names =====================
|