Commit 75cfc919 authored by dimitri's avatar dimitri

Release 2000-02-27

parent b76d4ee1
DOXYGEN Version 1.1.0-20000220
DOXYGEN Version 1.1.0-20000227
CONTENTS
--------
......@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
gunzip doxygen-1.1.0-20000220.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.0-20000220.src.tar # unpack it
gunzip doxygen-1.1.0-20000227.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.0-20000227.src.tar # unpack it
2. Run the configure script:
......@@ -71,7 +71,7 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
INSTALLATION INSTRUCTIONS FOR WINDOWS:
--------------------------------------
Currently, only Microsoft Visual C++ (version 5.0) is supported.
Currently, only Microsoft Visual C++ (version 5.0 or higher) is supported.
(For other compilers you may need to edit the perl script in wintools/make.pl
a bit). Let me know what you had to change if you got Doxygen working with
another windows compiler.
......@@ -252,4 +252,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (20 February 2000)
Dimitri van Heesch (27 February 2000)
DOXYGEN Version 1.1.0-20000220
DOXYGEN Version 1.1.0-20000227
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (20 February 2000)
Dimitri van Heesch (27 February 2000)
1.1.0-20000220
1.1.0-20000227
......@@ -51,6 +51,7 @@ followed by the descriptions of the tags grouped by category.
\begin{CompactList}
\endlatexonly
<li> \refitem cfg_allexternals ALLEXTERNALS
<li> \refitem cfg_always_detailed_sec ALWAYS_DETAILED_SEC
<li> \refitem cfg_alphabetical_index ALPHABETICAL_INDEX
<li> \refitem cfg_bin_abspath BIN_ABSPATH
<li> \refitem cfg_brief_member_desc BRIEF_MEMBER_DESC
......@@ -121,6 +122,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_search_includes SEARCH_INCLUDES
<li> \refitem cfg_searchengine SEARCHENGINE
<li> \refitem cfg_show_include_files SHOW_INCLUDE_FILES
<li> \refitem cfg_sort_member_docs SORT_MEMBER_DOCS
<li> \refitem cfg_source_browser SOURCE_BROWSER
<li> \refitem cfg_strip_code_comments STRIP_CODE_COMMENTS
<li> \refitem cfg_strip_from_path STRIP_FROM_PATH
......@@ -260,6 +262,12 @@ followed by the descriptions of the tags grouped by category.
If both \c HIDE_UNDOC_MEMBERS and \c BRIEF_MEMBER_DESC are set to \c NO, the
brief descriptions will be completely suppressed.
\anchor cfg_always_detailed_sec
<dt>\c ALWAYS_DETAILED_SEC <dd>
If the \c ALWAYS_DETAILED_SEC and \c REPEAT_BRIEF tags are both set to \c YES then
Doxygen will generate a detailed section even if there is only a brief
description.
\anchor cfg_full_path_names
<dt>\c FULL_PATH_NAMES <dd>
\addindex FULL_PATH_NAMES
......@@ -342,12 +350,22 @@ followed by the descriptions of the tags grouped by category.
\anchor cfg_inline_info
<dt>\c INLINE_INFO <dd>
\addindex INLINE_INFO
If the \c INLINE_INFO tag is set to \c YES (the default) then a tag [inline]
is inserted in the documentation for inline members.
\anchor cfg_sort_member_docs
<dt>\c SORT_MEMBER_DOCS <dd>
\addindex SORT_MEMBER_DOCS
If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
will sort the (detailed) documentation of file and class members
alphabetically by member name. If set to NO the members will appear in
declaration order.
\anchor cfg_tab_size
<dt>\c TAB_SIZE <dd>
the TAB_SIZE tag can be used to set the number of spaces in a tab.
\addindex TAB_SIZE
the \c TAB_SIZE tag can be used to set the number of spaces in a tab.
Doxygen uses this value to replace tabs by spaces in code fragments.
</dl>
......
......@@ -495,12 +495,11 @@ Go to the <a href="diagrams.html">next</a> section or return to the
Doxygen uses the "dot" tool to generate the following graphs:
<ul>
<li>if \ref cfg_graphical_hierarchy "GRAPHICAL_HIERARCHY" is set to \c YES,
a graphical representation of the class diagram will be drawn, along
a graphical representation of the class hierarchy will be drawn, along
with the textual one. Currently this feature is supported for HTML only.\n
<b>Warning:</b> When you have a very large class hierarchy where many
classes derive from a common
base class, the resulting image may become too big to handle for some
browsers.
classes derive from a common base class, the resulting image may become
too big to handle for some browsers.
<li>if \ref cfg_include_graph "INCLUDE_GRAPH" is set to \c YES, an include
dependency graph is generated for each documented file that includes at
least one other file. This feature is currently supported for HTML and RTF
......
......@@ -121,12 +121,18 @@ void ClassDef::insertMember(const MemberDef *md)
if (md->isRelated() && (Config::extractPrivateFlag || md->protection()!=Private))
{
related.append(md);
relatedMembers.inSort(md);
if (Config::sortMembersFlag)
relatedMembers.inSort(md);
else
relatedMembers.append(md);
}
else if (md->isFriend())
{
friends.append(md);
relatedMembers.inSort(md);
if (Config::sortMembersFlag)
relatedMembers.inSort(md);
else
relatedMembers.append(md);
}
else
{
......@@ -134,22 +140,34 @@ void ClassDef::insertMember(const MemberDef *md)
{
case MemberDef::Signal:
signals.append(md);
functionMembers.inSort(md);
if (Config::sortMembersFlag)
functionMembers.inSort(md);
else
functionMembers.append(md);
break;
case MemberDef::Slot:
switch (md->protection())
{
case Protected:
proSlots.append(md);
functionMembers.inSort(md);
if (Config::sortMembersFlag)
functionMembers.inSort(md);
else
functionMembers.append(md);
break;
case Public:
pubSlots.append(md);
functionMembers.inSort(md);
if (Config::sortMembersFlag)
functionMembers.inSort(md);
else
functionMembers.append(md);
break;
case Private:
priSlots.append(md);
functionMembers.inSort(md);
if (Config::sortMembersFlag)
functionMembers.inSort(md);
else
functionMembers.append(md);
break;
}
break;
......@@ -183,22 +201,43 @@ void ClassDef::insertMember(const MemberDef *md)
switch (md->memberType())
{
case MemberDef::Typedef:
typedefMembers.inSort(md);
if (Config::sortMembersFlag)
typedefMembers.inSort(md);
else
typedefMembers.append(md);
break;
case MemberDef::Enumeration:
enumMembers.inSort(md);
if (Config::sortMembersFlag)
enumMembers.inSort(md);
else
enumMembers.append(md);
break;
case MemberDef::EnumValue:
enumValMembers.inSort(md);
if (Config::sortMembersFlag)
enumValMembers.inSort(md);
else
enumValMembers.append(md);
break;
case MemberDef::Function:
if (md->name()==name() || md->name().find('~')!=-1)
if (md->name()==name() || // constructor
(md->name().find('~')!=-1 && // hack to detect destructor
md->name().find("operator")==-1
)
)
constructors.append(md);
else
functionMembers.inSort(md);
{
if (Config::sortMembersFlag)
functionMembers.inSort(md);
else
functionMembers.append(md);
}
break;
case MemberDef::Variable:
variableMembers.inSort(md);
if (Config::sortMembersFlag)
variableMembers.inSort(md);
else
variableMembers.append(md);
break;
default:
printf("Unexpected member type %d found!\n",md->memberType());
......
......@@ -47,7 +47,8 @@ class ClassDef : public Definition
enum CompoundType { Class=Entry::CLASS_SEC,
Struct=Entry::STRUCT_SEC,
Union=Entry::UNION_SEC,
Interface=Entry::INTERFACE_SEC
Interface=Entry::INTERFACE_SEC,
Exception=Entry::EXCEPTION_SEC
};
ClassDef(const char *name,CompoundType ct,const char *ref=0,const char *fName=0);
~ClassDef();
......
......@@ -302,128 +302,129 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
*yy_cp = '\0'; \
yy_c_buf_p = yy_cp;
#define YY_NUM_RULES 104
#define YY_END_OF_BUFFER 105
static yyconst short int yy_accept[1073] =
#define YY_NUM_RULES 105
#define YY_END_OF_BUFFER 106
static yyconst short int yy_accept[1089] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 105, 102, 103, 102,
102, 2, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 99, 102, 90, 87, 91, 2, 102,
90, 90, 97, 98, 89, 88, 98, 98, 96, 94,
94, 96, 96, 96, 102, 0, 101, 0, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 0, 100,
90, 92, 90, 97, 98, 89, 98, 95, 93, 0,
0, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 90, 98, 1, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 1, 1, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 0, 31, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 0, 42, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 0, 14, 86, 86, 86, 86, 86,
86, 0, 15, 86, 86, 0, 32, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 0, 13, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 0, 77, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 0, 24, 0, 37, 86,
0, 43, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 0, 18, 86,
86, 86, 0, 44, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
0, 30, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 0, 7, 86, 86, 0,
21, 86, 0, 39, 86, 86, 86, 86, 0, 9,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
0, 16, 86, 86, 86, 86, 86, 86, 0, 82,
86, 0, 17, 86, 86, 86, 86, 86, 0, 47,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 0, 11, 0, 10, 0, 6,
86, 86, 86, 86, 86, 86, 0, 75, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
0, 45, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 0, 29, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 0, 52, 0, 81, 86, 86,
86, 86, 86, 86, 86, 86, 86, 0, 28, 0,
74, 86, 0, 20, 86, 86, 0, 12, 0, 8,
86, 86, 86, 86, 86, 0, 3, 86, 0, 64,
86, 0, 46, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 0, 63, 0, 49,
86, 86, 86, 86, 86, 86, 0, 38, 0, 33,
86, 0, 51, 86, 86, 86, 86, 86, 86, 86,
86, 0, 27, 86, 0, 79, 86, 0, 65, 86,
86, 0, 23, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 0, 62,
86, 86, 86, 86, 86, 86, 86, 0, 40, 86,
86, 0, 50, 86, 86, 86, 86, 86, 86, 0,
36, 0, 76, 86, 86, 86, 86, 0, 73, 0,
4, 0, 83, 86, 86, 0, 69, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
0, 48, 0, 61, 86, 86, 86, 86, 86, 86,
0, 25, 86, 0, 54, 86, 0, 22, 0, 55,
86, 86, 0, 41, 86, 86, 86, 86, 0, 66,
86, 86, 86, 0, 35, 0, 34, 86, 86, 0,
19, 86, 86, 86, 86, 86, 0, 5, 86, 86,
0, 67, 86, 86, 0, 56, 86, 86, 86, 86,
0, 71, 86, 86, 86, 86, 0, 70, 86, 86,
0, 72, 86, 86, 86, 86, 0, 60, 86, 0,
59, 0, 58, 0, 68, 0, 84, 86, 0, 57,
0, 78, 0, 26, 86, 0, 80, 0, 85, 0,
53, 0
0, 0, 0, 0, 0, 0, 106, 103, 104, 103,
103, 2, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 100, 103, 91, 88, 92, 2, 103,
91, 91, 98, 99, 90, 89, 99, 99, 97, 95,
95, 97, 97, 97, 103, 0, 102, 0, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 0, 101,
91, 93, 91, 98, 99, 90, 99, 96, 94, 0,
0, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 91, 99, 1, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 1, 1, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 0, 31, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 0,
42, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 0, 14,
87, 87, 87, 87, 87, 87, 0, 15, 87, 87,
0, 32, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
0, 13, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 0, 77, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 0, 24, 0, 37, 87, 0, 43, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 0, 18, 87, 87, 87, 0,
44, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 0, 30,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 0, 7, 87, 87, 0, 21, 87,
0, 39, 87, 87, 87, 87, 0, 9, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 0,
16, 87, 87, 87, 87, 87, 87, 0, 82, 87,
0, 17, 87, 87, 87, 87, 87, 0, 47, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 0, 11, 0, 10, 0, 6, 87,
87, 87, 87, 87, 87, 0, 75, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
0, 45, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 0, 29, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 0, 52, 0, 81, 87, 87,
87, 87, 87, 87, 87, 87, 87, 0, 28, 0,
74, 87, 0, 20, 87, 87, 0, 12, 0, 8,
87, 87, 87, 87, 87, 0, 3, 87, 0, 64,
87, 0, 46, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 0, 63, 0,
49, 87, 87, 87, 87, 87, 87, 0, 38, 0,
33, 87, 0, 51, 87, 87, 87, 87, 87, 87,
87, 87, 0, 27, 87, 0, 79, 87, 0, 65,
87, 87, 0, 23, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
0, 62, 87, 87, 87, 87, 87, 87, 87, 0,
40, 87, 87, 0, 50, 87, 87, 87, 87, 87,
87, 0, 36, 0, 76, 87, 87, 87, 87, 0,
73, 0, 4, 0, 83, 87, 87, 87, 0, 69,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 0, 48, 0, 61, 87, 87, 87,
87, 87, 87, 0, 25, 87, 0, 54, 87, 0,
22, 0, 55, 87, 87, 87, 0, 41, 87, 87,
87, 87, 0, 66, 87, 87, 87, 0, 35, 0,
34, 87, 87, 0, 19, 87, 87, 87, 87, 87,
0, 5, 87, 0, 86, 87, 0, 67, 87, 87,
0, 56, 87, 87, 87, 87, 0, 71, 87, 87,
87, 87, 0, 70, 87, 87, 0, 72, 87, 87,
87, 87, 0, 60, 87, 0, 59, 0, 58, 0,
68, 0, 84, 87, 0, 57, 0, 78, 0, 26,
87, 0, 80, 0, 85, 0, 53, 0
} ;
static yyconst int yy_ec[256] =
......@@ -467,574 +468,582 @@ static yyconst int yy_meta[45] =
6, 6, 6, 1
} ;
static yyconst short int yy_base[1084] =
static yyconst short int yy_base[1100] =
{ 0,
0, 1, 45, 0, 87, 88, 131, 174, 218, 262,
305, 348, 100, 101, 392, 436, 1395, 1396, 1396, 3,
1351, 1396, 0, 1369, 0, 0, 1, 0, 2, 1,
79, 76, 1379, 1378, 1377, 1356, 80, 1355, 0, 92,
1374, 1369, 1372, 1396, 6, 0, 1396, 1396, 0, 1376,
12, 1340, 0, 0, 1380, 1396, 39, 1338, 1396, 1396,
1396, 1372, 111, 1336, 1369, 118, 1396, 1367, 0, 118,
1350, 1354, 1343, 1352, 1359, 9, 1340, 1355, 1356, 115,
1344, 1343, 1340, 1352, 1330, 1347, 1337, 1335, 1347, 134,
1325, 1326, 103, 1325, 1328, 1337, 1324, 124, 1332, 10,
1334, 1338, 1323, 1316, 1318, 80, 1317, 1316, 153, 1396,
0, 1396, 1335, 0, 0, 1342, 1333, 1396, 1396, 1333,
1299, 1323, 1319, 1325, 1297, 1319, 1318, 1294, 1302, 128,
1304, 1318, 1290, 1315, 1303, 1303, 1313, 120, 1308, 1300,
1306, 1294, 1304, 1303, 1295, 1291, 1298, 1292, 1298, 1293,
1280, 1295, 1298, 1293, 1279, 1268, 1279, 1289, 1265, 1280,
1287, 1280, 1284, 1267, 1282, 1258, 1267, 1261, 1265, 1273,
1253, 1274, 1277, 1264, 1247, 1246, 1396, 1251, 1273, 1248,
1271, 1265, 1242, 135, 1250, 1267, 1239, 1265, 1263, 150,
1252, 1247, 1241, 1247, 1259, 1255, 1230, 1229, 1238, 1247,
1226, 1225, 1224, 1233, 1245, 1228, 1230, 1233, 1226, 1227,
1240, 1219, 1227, 147, 1220, 1222, 1231, 1210, 1232, 1231,
1215, 1216, 1232, 145, 1229, 1203, 1227, 1213, 1209, 1218,
1225, 1216, 0, 0, 1204, 1221, 1203, 1219, 1192, 1200,
1217, 1199, 1188, 1213, 1205, 1210, 1200, 1209, 1192, 1204,
1196, 1203, 1202, 83, 1190, 1188, 1187, 1201, 1192, 1196,
1178, 169, 1193, 1169, 1192, 1186, 1189, 191, 1179, 1177,
1163, 1162, 1165, 1167, 1167, 1158, 1160, 1168, 1177, 1179,
0, 1162, 1160, 1154, 1157, 1169, 1167, 1170, 1146, 1164,
1160, 1151, 1156, 1164, 1163, 1139, 1147, 1152, 1159, 1150,
1150, 1157, 1145, 1145, 1138, 1152, 1137, 1143, 1126, 1148,
1147, 1123, 1130, 1133, 1145, 1146, 1145, 1125, 1141, 1128,
1128, 1129, 1125, 1134, 1117, 1117, 1108, 1119, 1129, 1113,
1104, 182, 1396, 1125, 1129, 1126, 165, 1123, 1107, 1106,
1097, 1104, 1107, 1121, 1112, 1100, 186, 1396, 1110, 1090,
1101, 1096, 108, 1101, 1086, 184, 1087, 1107, 1102, 1103,
1091, 1088, 1103, 1090, 1100, 1090, 1098, 189, 1093, 1083,
1072, 1071, 1070, 1081, 193, 1080, 1067, 195, 1079, 1065,
1091, 1063, 1070, 1069, 1083, 1086, 1066, 1081, 1075, 1068,
1081, 1061, 1055, 1063, 1077, 1049, 1048, 183, 1066, 1062,
1045, 1067, 1050, 1046, 1064, 1052, 13, 1042, 1061, 1045,
1050, 1035, 1040, 1059, 1055, 1043, 1044, 1048, 1053, 1053,
1039, 1035, 1047, 1032, 1037, 1030, 1034, 1038, 1041, 1044,
1031, 1024, 204, 230, 1396, 1041, 1040, 1039, 143, 1030,
1037, 231, 1396, 1019, 1020, 232, 1396, 1019, 1020, 158,
1030, 1016, 1011, 1022, 1001, 1016, 234, 1012, 1019, 1005,
1020, 1007, 1010, 1003, 1000, 189, 1015, 1004, 1002, 1004,
987, 1013, 1012, 992, 995, 996, 988, 999, 1006, 990,
987, 996, 998, 988, 996, 982, 981, 977, 990, 982,
983, 976, 989, 977, 235, 236, 963, 237, 989, 986,
968, 967, 984, 980, 238, 1396, 977, 963, 970, 980,
960, 965, 958, 972, 975, 974, 962, 961, 954, 960,
969, 964, 940, 255, 939, 239, 1396, 963, 951, 959,
958, 941, 956, 955, 256, 941, 957, 942, 950, 934,
934, 949, 931, 947, 934, 948, 929, 927, 928, 931,
939, 931, 243, 938, 177, 279, 932, 928, 919, 929,
934, 915, 920, 929, 920, 280, 1396, 281, 1396, 924,
282, 1396, 919, 929, 928, 920, 922, 898, 907, 915,
907, 902, 915, 916, 911, 902, 897, 896, 890, 902,
904, 911, 891, 892, 895, 888, 906, 905, 885, 903,
895, 874, 873, 882, 881, 878, 878, 890, 284, 890,
893, 873, 889, 876, 866, 878, 862, 813, 827, 810,
91, 148, 287, 192, 192, 288, 191, 293, 1396, 301,
190, 227, 302, 1396, 236, 233, 313, 230, 235, 244,
226, 237, 238, 280, 267, 292, 296, 316, 289, 294,
308, 295, 303, 307, 324, 310, 327, 300, 311, 300,
293, 333, 300, 318, 318, 314, 328, 317, 314, 321,
330, 337, 336, 343, 334, 358, 359, 360, 343, 343,
363, 1396, 336, 339, 349, 342, 372, 361, 347, 363,
352, 350, 349, 351, 356, 400, 1396, 370, 353, 401,
1396, 362, 403, 1396, 372, 376, 373, 380, 405, 1396,
391, 376, 393, 380, 399, 388, 405, 417, 380, 397,
420, 1396, 383, 411, 400, 400, 414, 392, 444, 1396,
394, 445, 1396, 406, 447, 417, 418, 422, 449, 1396,
439, 436, 423, 424, 433, 436, 445, 461, 462, 447,
449, 443, 451, 452, 469, 1396, 470, 1396, 474, 1396,
453, 441, 452, 459, 481, 482, 483, 1396, 470, 486,
458, 476, 489, 490, 475, 471, 467, 487, 480, 502,
488, 504, 484, 506, 493, 470, 494, 485, 500, 499,
515, 1396, 498, 503, 505, 497, 492, 484, 485, 524,
526, 514, 528, 1396, 501, 502, 503, 502, 504, 535,
537, 524, 540, 507, 542, 1396, 543, 1396, 525, 518,
537, 526, 528, 539, 555, 527, 557, 559, 1396, 560,
1396, 532, 562, 1396, 563, 536, 566, 1396, 568, 1396,
546, 574, 550, 560, 550, 580, 1396, 553, 582, 1396,
554, 585, 1396, 571, 571, 560, 566, 561, 578, 570,
582, 582, 583, 599, 583, 582, 602, 1396, 603, 1396,
589, 581, 582, 592, 593, 610, 611, 1396, 614, 1396,
586, 616, 1396, 602, 618, 597, 611, 594, 613, 615,
599, 630, 1396, 631, 632, 1396, 633, 634, 1396, 616,
612, 637, 1396, 610, 624, 645, 646, 648, 620, 631,
651, 629, 635, 626, 643, 621, 631, 633, 663, 1396,
636, 641, 637, 638, 639, 655, 670, 671, 1396, 672,
652, 675, 1396, 661, 649, 649, 664, 668, 684, 686,
1396, 687, 1396, 673, 689, 655, 691, 692, 1396, 693,
1396, 695, 1396, 698, 678, 704, 1396, 691, 707, 680,
695, 682, 699, 713, 704, 702, 689, 719, 720, 706,
722, 1396, 724, 1396, 699, 726, 714, 713, 703, 705,
735, 1396, 721, 738, 1396, 739, 740, 1396, 741, 1396,
727, 719, 744, 1396, 746, 713, 737, 753, 755, 1396,
731, 743, 740, 760, 1396, 761, 1396, 746, 764, 766,
1396, 749, 739, 740, 743, 773, 775, 1396, 748, 748,
779, 1396, 780, 768, 782, 1396, 766, 752, 763, 788,
791, 1396, 758, 794, 795, 796, 797, 1396, 799, 771,
802, 1396, 803, 808, 810, 794, 814, 1396, 815, 816,
1396, 817, 1396, 819, 1396, 821, 1396, 822, 823, 1396,
828, 1396, 830, 1396, 834, 835, 1396, 836, 1396, 837,
1396, 1396, 849, 855, 861, 867, 873, 879, 881, 887,
835, 893, 896
305, 348, 100, 101, 392, 436, 1413, 1414, 1414, 3,
1369, 1414, 0, 1387, 0, 0, 1, 0, 2, 1,
79, 76, 1397, 1396, 1395, 1374, 80, 1373, 0, 92,
1392, 1387, 1390, 1414, 6, 0, 1414, 1414, 0, 1394,
12, 1358, 0, 0, 1398, 1414, 39, 1356, 1414, 1414,
1414, 1390, 111, 1354, 1387, 118, 1414, 1385, 0, 118,
1368, 1372, 1361, 1370, 1377, 9, 1358, 1373, 1374, 115,
1362, 1361, 1358, 1370, 1348, 1365, 1355, 1353, 1365, 134,
1343, 1344, 103, 1343, 1346, 1355, 1342, 124, 1350, 10,
1352, 1356, 1341, 122, 1337, 80, 1336, 1335, 157, 1414,
0, 1414, 1354, 0, 0, 1361, 1352, 1414, 1414, 1352,
1318, 1342, 1338, 1344, 1316, 1338, 1337, 1313, 1321, 126,
1323, 1337, 1309, 1334, 1322, 1322, 1332, 133, 1327, 1319,
1325, 1313, 1323, 1322, 1314, 1310, 1317, 1311, 1317, 1312,
1299, 1314, 1317, 1312, 1298, 1287, 1298, 1308, 1284, 1299,
1306, 1299, 1303, 1286, 1301, 1277, 1286, 1280, 1282, 1283,
1291, 1271, 1292, 1295, 1282, 1265, 1264, 1414, 1269, 1291,
1266, 1289, 1283, 1260, 138, 1268, 1285, 1257, 1283, 1281,
135, 1270, 1265, 1259, 1265, 1277, 1273, 1248, 1247, 1256,
1265, 1244, 1243, 1242, 1251, 1263, 1246, 1248, 1251, 1244,
1245, 1258, 1237, 1245, 155, 1238, 1240, 1249, 1228, 1250,
1249, 1233, 1234, 1250, 147, 1247, 1221, 1220, 1244, 1230,
1226, 1235, 1242, 1233, 0, 0, 1221, 1238, 1220, 1236,
1209, 1217, 1234, 1216, 1205, 1230, 1222, 1227, 1217, 1226,
1209, 1221, 1213, 1220, 1219, 83, 1207, 1205, 1204, 1218,
1209, 1213, 1195, 170, 1210, 1186, 1209, 1203, 1206, 191,
1196, 1194, 1180, 1179, 1182, 1184, 1184, 1175, 1177, 1185,
1194, 1196, 0, 1179, 1177, 1171, 1174, 1186, 1184, 1179,
1186, 1162, 1180, 1176, 1167, 1172, 1180, 1179, 1155, 1163,
1168, 1175, 1166, 1166, 1173, 1161, 1161, 1154, 1168, 1153,
1159, 1142, 1164, 1163, 1139, 1146, 1149, 1161, 1162, 1161,
1141, 1157, 1144, 1144, 1145, 1141, 1150, 1133, 1133, 1124,
1135, 1145, 1129, 1120, 182, 1414, 1141, 1145, 1142, 165,
1139, 1123, 1122, 1113, 1120, 1123, 1137, 1128, 1116, 184,
1414, 1126, 1106, 1117, 1112, 170, 1117, 1125, 1101, 180,
1102, 1122, 1117, 1118, 1106, 1103, 1118, 1105, 1115, 1105,
1113, 187, 1108, 1098, 1087, 1086, 1085, 1096, 200, 1095,
1082, 202, 1094, 1080, 1106, 1078, 1085, 1084, 1098, 1101,
1081, 1096, 1090, 1083, 1096, 1076, 1070, 1078, 1092, 1064,
1063, 184, 1081, 1077, 1060, 1082, 1065, 1061, 1079, 1067,
13, 1057, 1076, 1060, 1065, 1050, 1055, 1074, 1070, 1058,
1059, 1063, 1068, 1057, 1067, 1053, 1049, 1061, 1046, 1051,
1044, 1048, 1052, 1055, 1058, 1045, 1038, 204, 205, 1414,
1055, 1054, 1053, 208, 1044, 1051, 231, 1414, 1033, 1034,
232, 1414, 1033, 1034, 222, 1044, 1030, 1025, 1036, 1015,
1030, 234, 1026, 1033, 1019, 1034, 1021, 1024, 1017, 1014,
137, 1029, 1018, 1016, 1018, 1001, 1027, 1026, 1006, 1009,
1010, 1002, 1013, 1020, 1004, 1001, 1010, 1012, 1002, 1010,
996, 995, 991, 1004, 996, 997, 1006, 989, 1002, 990,
235, 237, 976, 239, 1002, 999, 981, 980, 997, 993,
243, 1414, 990, 976, 983, 993, 973, 978, 971, 985,
988, 987, 975, 974, 967, 973, 982, 977, 953, 255,
952, 274, 1414, 976, 964, 972, 971, 954, 969, 968,
220, 954, 970, 955, 963, 947, 947, 962, 944, 960,
947, 961, 942, 940, 941, 944, 952, 944, 276, 951,
178, 279, 945, 941, 932, 942, 947, 928, 943, 932,
941, 932, 280, 1414, 281, 1414, 936, 282, 1414, 931,
941, 940, 932, 934, 910, 919, 927, 919, 914, 927,
928, 923, 914, 909, 908, 902, 914, 916, 923, 903,
904, 907, 900, 918, 917, 897, 915, 907, 886, 885,
894, 893, 890, 890, 896, 287, 896, 894, 831, 847,
834, 87, 108, 142, 168, 191, 176, 222, 232, 288,
237, 237, 293, 238, 301, 1414, 302, 235, 236, 313,
1414, 260, 275, 314, 271, 274, 301, 288, 284, 280,
281, 305, 292, 300, 306, 326, 299, 304, 318, 305,
313, 317, 333, 319, 335, 309, 326, 308, 301, 354,
308, 324, 328, 331, 346, 335, 329, 336, 345, 345,
344, 352, 343, 367, 368, 369, 352, 352, 372, 1414,
345, 348, 358, 351, 400, 368, 355, 371, 361, 359,
358, 360, 376, 403, 1414, 391, 374, 406, 1414, 383,
408, 1414, 394, 399, 396, 390, 415, 1414, 402, 388,
405, 383, 393, 410, 398, 415, 444, 389, 406, 445,
1414, 392, 420, 409, 409, 436, 414, 449, 1414, 416,
451, 1414, 427, 453, 441, 442, 432, 460, 1414, 451,
449, 436, 437, 444, 446, 454, 471, 472, 458, 460,
454, 462, 464, 480, 1414, 483, 1414, 484, 1414, 470,
452, 463, 470, 489, 491, 492, 1414, 480, 496, 468,
486, 500, 503, 485, 481, 477, 497, 488, 511, 497,
514, 494, 516, 503, 480, 505, 505, 497, 512, 511,
527, 1414, 509, 514, 516, 508, 503, 495, 496, 535,
536, 525, 539, 1414, 512, 513, 514, 513, 515, 547,
548, 535, 551, 518, 553, 1414, 554, 1414, 536, 528,
548, 537, 539, 550, 566, 538, 568, 570, 1414, 571,
1414, 543, 573, 1414, 574, 547, 577, 1414, 579, 1414,
557, 585, 561, 571, 561, 591, 1414, 564, 593, 1414,
565, 596, 1414, 582, 582, 574, 572, 579, 574, 590,
583, 594, 594, 595, 611, 595, 594, 614, 1414, 615,
1414, 601, 593, 594, 604, 605, 622, 623, 1414, 626,
1414, 598, 628, 1414, 614, 630, 609, 623, 606, 625,
627, 611, 642, 1414, 643, 644, 1414, 645, 646, 1414,
628, 624, 649, 1414, 622, 636, 657, 658, 660, 632,
643, 650, 664, 642, 648, 641, 657, 634, 644, 646,
676, 1414, 649, 654, 650, 651, 652, 668, 683, 684,
1414, 685, 665, 688, 1414, 674, 662, 662, 677, 681,
697, 699, 1414, 700, 1414, 686, 702, 668, 704, 705,
1414, 706, 1414, 708, 1414, 711, 691, 688, 719, 1414,
705, 722, 694, 709, 696, 713, 727, 717, 716, 702,
733, 734, 720, 736, 1414, 738, 1414, 713, 740, 728,
727, 717, 719, 749, 1414, 735, 752, 1414, 753, 754,
1414, 755, 1414, 741, 757, 734, 760, 1414, 761, 732,
753, 769, 772, 1414, 747, 759, 756, 776, 1414, 777,
1414, 762, 780, 781, 1414, 765, 755, 756, 759, 789,
792, 1414, 764, 794, 1414, 765, 796, 1414, 797, 785,
800, 1414, 783, 769, 781, 808, 809, 1414, 776, 812,
813, 814, 815, 1414, 816, 788, 820, 1414, 821, 827,
828, 812, 832, 1414, 833, 834, 1414, 835, 1414, 836,
1414, 839, 1414, 840, 841, 1414, 847, 1414, 848, 1414,
852, 853, 1414, 854, 1414, 855, 1414, 1414, 867, 873,
879, 885, 891, 897, 899, 905, 852, 911, 914
} ;
static yyconst short int yy_def[1084] =
static yyconst short int yy_def[1100] =
{ 0,
1073, 1073, 1072, 3, 1073, 1073, 1074, 1074, 1075, 1075,
1076, 1076, 1077, 1077, 1078, 1078, 1072, 1072, 1072, 1072,
1072, 1072, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1072, 1072, 1080, 1072, 1072, 1080, 1072,
1080, 1080, 1081, 1082, 1072, 1072, 1082, 1082, 1072, 1072,
1072, 1072, 1072, 1072, 1083, 1072, 1072, 1072, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1072, 1072,
1080, 1072, 1080, 1081, 1082, 1072, 1082, 1072, 1072, 1083,
1072, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1080, 1082, 1072, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1080, 1082, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1072, 1072, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1072, 1072, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1072, 1072, 1079, 1079, 1079, 1079, 1079,
1079, 1072, 1072, 1079, 1079, 1072, 1072, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1072, 1072, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1072, 1072, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1072, 1072, 1072, 1072, 1079,
1072, 1072, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1072, 1072, 1079,
1079, 1079, 1072, 1072, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1072, 1072, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1072, 1072, 1079, 1079, 1072,
1072, 1079, 1072, 1072, 1079, 1079, 1079, 1079, 1072, 1072,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1072, 1072, 1079, 1079, 1079, 1079, 1079, 1079, 1072, 1072,
1079, 1072, 1072, 1079, 1079, 1079, 1079, 1079, 1072, 1072,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1072, 1072, 1072, 1072, 1072, 1072,
1079, 1079, 1079, 1079, 1079, 1079, 1072, 1072, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1072, 1072, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1072, 1072, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1072, 1072, 1072, 1072, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1072, 1072, 1072,
1072, 1079, 1072, 1072, 1079, 1079, 1072, 1072, 1072, 1072,
1079, 1079, 1079, 1079, 1079, 1072, 1072, 1079, 1072, 1072,
1079, 1072, 1072, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1072, 1072, 1072, 1072,
1079, 1079, 1079, 1079, 1079, 1079, 1072, 1072, 1072, 1072,
1079, 1072, 1072, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1072, 1072, 1079, 1072, 1072, 1079, 1072, 1072, 1079,
1079, 1072, 1072, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1072, 1072,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1072, 1072, 1079,
1079, 1072, 1072, 1079, 1079, 1079, 1079, 1079, 1079, 1072,
1072, 1072, 1072, 1079, 1079, 1079, 1079, 1072, 1072, 1072,
1072, 1072, 1072, 1079, 1079, 1072, 1072, 1079, 1079, 1079,
1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
1072, 1072, 1072, 1072, 1079, 1079, 1079, 1079, 1079, 1079,
1072, 1072, 1079, 1072, 1072, 1079, 1072, 1072, 1072, 1072,
1079, 1079, 1072, 1072, 1079, 1079, 1079, 1079, 1072, 1072,
1079, 1079, 1079, 1072, 1072, 1072, 1072, 1079, 1079, 1072,
1072, 1079, 1079, 1079, 1079, 1079, 1072, 1072, 1079, 1079,
1072, 1072, 1079, 1079, 1072, 1072, 1079, 1079, 1079, 1079,
1072, 1072, 1079, 1079, 1079, 1079, 1072, 1072, 1079, 1079,
1072, 1072, 1079, 1079, 1079, 1079, 1072, 1072, 1079, 1072,
1072, 1072, 1072, 1072, 1072, 1072, 1072, 1079, 1072, 1072,
1072, 1072, 1072, 1072, 1079, 1072, 1072, 1072, 1072, 1072,
1072, 0, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072,
1072, 1072, 1072
1089, 1089, 1088, 3, 1089, 1089, 1090, 1090, 1091, 1091,
1092, 1092, 1093, 1093, 1094, 1094, 1088, 1088, 1088, 1088,
1088, 1088, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1088, 1088, 1096, 1088, 1088, 1096, 1088,
1096, 1096, 1097, 1098, 1088, 1088, 1098, 1098, 1088, 1088,
1088, 1088, 1088, 1088, 1099, 1088, 1088, 1088, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1088, 1088,
1096, 1088, 1096, 1097, 1098, 1088, 1098, 1088, 1088, 1099,
1088, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1096, 1098, 1088, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1096, 1098, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1088, 1088, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1088,
1088, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1088, 1088,
1095, 1095, 1095, 1095, 1095, 1095, 1088, 1088, 1095, 1095,
1088, 1088, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1088, 1088, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1088, 1088, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1088, 1088, 1088, 1088, 1095, 1088, 1088, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1088, 1088, 1095, 1095, 1095, 1088,
1088, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1088, 1088,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1088, 1088, 1095, 1095, 1088, 1088, 1095,
1088, 1088, 1095, 1095, 1095, 1095, 1088, 1088, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1088,
1088, 1095, 1095, 1095, 1095, 1095, 1095, 1088, 1088, 1095,
1088, 1088, 1095, 1095, 1095, 1095, 1095, 1088, 1088, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1088, 1088, 1088, 1088, 1088, 1088, 1095,
1095, 1095, 1095, 1095, 1095, 1088, 1088, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1088, 1088, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1088, 1088, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1088, 1088, 1088, 1088, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1088, 1088, 1088,
1088, 1095, 1088, 1088, 1095, 1095, 1088, 1088, 1088, 1088,
1095, 1095, 1095, 1095, 1095, 1088, 1088, 1095, 1088, 1088,
1095, 1088, 1088, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1088, 1088, 1088,
1088, 1095, 1095, 1095, 1095, 1095, 1095, 1088, 1088, 1088,
1088, 1095, 1088, 1088, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1088, 1088, 1095, 1088, 1088, 1095, 1088, 1088,
1095, 1095, 1088, 1088, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1088, 1088, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1088,
1088, 1095, 1095, 1088, 1088, 1095, 1095, 1095, 1095, 1095,
1095, 1088, 1088, 1088, 1088, 1095, 1095, 1095, 1095, 1088,
1088, 1088, 1088, 1088, 1088, 1095, 1095, 1095, 1088, 1088,
1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1095, 1095, 1095, 1088, 1088, 1088, 1088, 1095, 1095, 1095,
1095, 1095, 1095, 1088, 1088, 1095, 1088, 1088, 1095, 1088,
1088, 1088, 1088, 1095, 1095, 1095, 1088, 1088, 1095, 1095,
1095, 1095, 1088, 1088, 1095, 1095, 1095, 1088, 1088, 1088,
1088, 1095, 1095, 1088, 1088, 1095, 1095, 1095, 1095, 1095,
1088, 1088, 1095, 1088, 1088, 1095, 1088, 1088, 1095, 1095,
1088, 1088, 1095, 1095, 1095, 1095, 1088, 1088, 1095, 1095,
1095, 1095, 1088, 1088, 1095, 1095, 1088, 1088, 1095, 1095,
1095, 1095, 1088, 1088, 1095, 1088, 1088, 1088, 1088, 1088,
1088, 1088, 1088, 1095, 1088, 1088, 1088, 1088, 1088, 1088,
1095, 1088, 1088, 1088, 1088, 1088, 1088, 0, 1088, 1088,
1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088
} ;
static yyconst short int yy_nxt[1441] =
static yyconst short int yy_nxt[1459] =
{ 0,
1072, 347, 19, 19, 66, 67, 66, 109, 110, 109,
1072, 348, 73, 66, 67, 66, 100, 83, 74, 1072,
71, 77, 81, 75, 164, 79, 76, 78, 478, 72,
84, 101, 130, 131, 82, 80, 479, 165, 20, 20,
1088, 350, 19, 19, 66, 67, 66, 109, 110, 109,
1088, 351, 73, 66, 67, 66, 100, 83, 74, 1088,
71, 77, 81, 75, 164, 79, 76, 78, 483, 72,
84, 101, 130, 131, 82, 80, 484, 165, 20, 20,
66, 67, 66, 21, 21, 18, 18, 19, 18, 18,
22, 18, 18, 18, 23, 23, 18, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 23, 34, 35,
23, 36, 37, 38, 39, 40, 41, 23, 42, 43,
23, 23, 23, 20, 23, 23, 23, 23, 21, 44,
44, 85, 95, 171, 88, 96, 97, 313, 172, 86,
44, 85, 95, 172, 88, 96, 97, 316, 173, 86,
89, 90, 60, 60, 61, 61, 62, 62, 102, 98,
87, 103, 66, 67, 66, 118, 694, 155, 104, 66,
67, 66, 314, 105, 417, 45, 45, 135, 156, 136,
87, 103, 66, 67, 66, 118, 696, 155, 104, 66,
67, 66, 317, 105, 697, 45, 45, 135, 156, 136,
21, 21, 18, 47, 18, 48, 49, 50, 63, 63,
161, 122, 137, 64, 64, 123, 138, 418, 148, 195,
162, 186, 124, 149, 109, 110, 109, 150, 187, 196,
241, 151, 248, 273, 284, 152, 510, 242, 695, 51,
518, 285, 511, 274, 52, 18, 47, 18, 48, 49,
50, 322, 249, 332, 402, 519, 323, 347, 324, 631,
434, 403, 332, 333, 442, 325, 446, 348, 421, 326,
435, 422, 333, 468, 443, 505, 447, 536, 698, 632,
699, 702, 51, 469, 705, 506, 537, 52, 18, 18,
161, 122, 137, 64, 64, 123, 138, 250, 148, 187,
162, 169, 124, 149, 170, 542, 188, 150, 109, 110,
109, 151, 196, 243, 543, 152, 286, 251, 698, 51,
244, 275, 197, 287, 52, 18, 47, 18, 48, 49,
50, 276, 325, 335, 406, 350, 421, 326, 439, 327,
638, 407, 335, 336, 426, 351, 328, 427, 440, 699,
329, 447, 336, 451, 473, 511, 439, 700, 701, 422,
639, 448, 51, 452, 474, 512, 440, 52, 18, 18,
47, 18, 18, 22, 18, 18, 18, 18, 18, 18,
334, 434, 442, 446, 448, 526, 566, 568, 571, 505,
526, 435, 443, 447, 628, 527, 567, 569, 572, 506,
527, 706, 707, 708, 629, 711, 20, 18, 712, 713,
337, 516, 447, 451, 524, 532, 573, 517, 575, 616,
578, 453, 448, 452, 511, 533, 574, 702, 576, 525,
579, 617, 703, 706, 512, 707, 20, 18, 710, 713,
714, 21, 18, 18, 47, 18, 18, 22, 18, 18,
18, 18, 18, 18, 596, 609, 715, 716, 597, 598,
633, 566, 568, 571, 599, 681, 600, 610, 696, 700,
634, 567, 569, 572, 628, 682, 717, 718, 697, 701,
20, 18, 703, 633, 629, 21, 55, 56, 18, 48,
22, 50, 704, 634, 709, 719, 720, 721, 723, 724,
725, 726, 727, 728, 710, 729, 731, 722, 732, 734,
735, 737, 738, 741, 739, 730, 742, 743, 733, 744,
745, 746, 736, 57, 740, 747, 748, 749, 58, 55,
56, 18, 48, 22, 50, 750, 751, 752, 754, 755,
757, 759, 761, 762, 681, 763, 764, 753, 765, 756,
758, 760, 766, 767, 682, 769, 770, 771, 772, 773,
774, 775, 776, 768, 777, 778, 57, 779, 780, 781,
782, 58, 18, 18, 19, 18, 18, 18, 18, 18,
18, 696, 700, 18, 703, 783, 709, 784, 785, 786,
787, 697, 701, 788, 704, 789, 710, 790, 791, 793,
794, 721, 795, 796, 797, 798, 799, 800, 792, 801,
20, 722, 802, 805, 806, 21, 18, 18, 19, 18,
18, 18, 18, 18, 18, 729, 732, 18, 803, 807,
739, 808, 809, 810, 811, 730, 733, 812, 804, 813,
740, 814, 815, 817, 819, 820, 821, 822, 823, 824,
755, 757, 816, 818, 20, 759, 825, 826, 827, 21,
756, 758, 828, 830, 767, 760, 832, 833, 835, 836,
837, 839, 829, 831, 768, 841, 842, 834, 843, 844,
838, 840, 845, 846, 848, 849, 851, 852, 854, 855,
856, 857, 858, 847, 859, 850, 791, 853, 860, 861,
862, 863, 864, 865, 866, 867, 792, 869, 871, 803,
872, 873, 874, 875, 876, 868, 877, 870, 879, 804,
881, 882, 885, 815, 817, 886, 878, 887, 880, 888,
889, 883, 890, 816, 818, 891, 892, 894, 895, 884,
828, 830, 897, 833, 898, 900, 893, 837, 896, 839,
829, 831, 901, 834, 899, 902, 904, 838, 905, 840,
906, 846, 907, 849, 908, 903, 852, 909, 910, 911,
912, 847, 913, 850, 914, 915, 853, 916, 917, 918,
919, 921, 922, 867, 869, 923, 924, 925, 926, 927,
920, 928, 877, 868, 870, 879, 930, 882, 931, 932,
934, 929, 878, 935, 936, 880, 937, 883, 938, 933,
939, 892, 940, 895, 942, 898, 944, 945, 902, 946,
947, 893, 941, 896, 943, 899, 948, 950, 903, 952,
954, 955, 956, 958, 959, 960, 949, 951, 961, 953,
962, 963, 957, 964, 919, 965, 966, 967, 968, 969,
970, 971, 928, 973, 920, 975, 932, 976, 977, 978,
979, 972, 929, 974, 980, 981, 933, 940, 942, 983,
984, 986, 987, 948, 950, 982, 952, 941, 943, 989,
985, 991, 988, 949, 951, 956, 953, 992, 993, 990,
995, 996, 997, 998, 999, 957, 1001, 1002, 994, 1003,
1004, 1006, 1008, 971, 1000, 973, 1009, 1010, 1012, 1013,
1005, 1007, 1014, 972, 1015, 974, 981, 1011, 1016, 984,
1017, 987, 989, 1019, 1020, 993, 982, 1021, 1023, 985,
1018, 988, 990, 1024, 1025, 994, 999, 1022, 1027, 1028,
1029, 1004, 1006, 1030, 1026, 1031, 1000, 1010, 1033, 1034,
1035, 1005, 1007, 1036, 1037, 1032, 1017, 1011, 1039, 1040,
1021, 1041, 1043, 1025, 1038, 1044, 1018, 1045, 1046, 1047,
1022, 1042, 1031, 1026, 1049, 1050, 1052, 1054, 1037, 1048,
1056, 1058, 1032, 1041, 1059, 1051, 1053, 1055, 1038, 1061,
1057, 1063, 1065, 1042, 1060, 1047, 1066, 1050, 1052, 1062,
1054, 1064, 1056, 1068, 1059, 1048, 1067, 1051, 1053, 1061,
1055, 1063, 1057, 1069, 1060, 1070, 1066, 1068, 1070, 1062,
114, 1064, 693, 692, 691, 1071, 1067, 1069, 1071, 18,
18, 18, 18, 18, 18, 46, 46, 46, 46, 46,
46, 53, 53, 53, 53, 53, 53, 54, 54, 54,
54, 54, 54, 59, 59, 59, 59, 59, 59, 65,
65, 65, 65, 65, 65, 69, 69, 111, 690, 111,
111, 111, 111, 115, 689, 688, 115, 115, 115, 120,
120, 120, 687, 686, 685, 684, 683, 680, 679, 678,
18, 18, 18, 18, 603, 532, 715, 635, 604, 605,
640, 573, 575, 578, 606, 533, 607, 636, 689, 704,
641, 574, 576, 579, 708, 716, 719, 720, 690, 705,
20, 18, 635, 711, 709, 21, 55, 56, 18, 48,
22, 50, 636, 712, 640, 717, 721, 722, 723, 724,
725, 726, 727, 728, 641, 718, 729, 730, 732, 733,
734, 735, 736, 737, 738, 740, 741, 731, 743, 746,
747, 750, 751, 57, 739, 744, 742, 752, 58, 55,
56, 18, 48, 22, 50, 748, 753, 745, 754, 755,
756, 757, 758, 759, 760, 749, 761, 763, 764, 766,
768, 770, 771, 689, 772, 773, 762, 774, 765, 767,
769, 775, 778, 690, 779, 780, 57, 781, 782, 783,
784, 58, 18, 18, 19, 18, 18, 18, 18, 18,
18, 776, 785, 18, 704, 786, 787, 708, 788, 711,
789, 777, 790, 791, 705, 792, 717, 709, 793, 712,
794, 795, 796, 797, 798, 799, 718, 800, 803, 804,
20, 805, 806, 807, 808, 21, 18, 18, 19, 18,
18, 18, 18, 18, 18, 801, 730, 18, 809, 810,
738, 811, 741, 812, 813, 802, 731, 815, 816, 817,
739, 748, 742, 818, 814, 819, 820, 821, 822, 823,
824, 749, 825, 827, 20, 829, 830, 831, 832, 21,
833, 764, 826, 828, 766, 768, 834, 835, 836, 837,
838, 765, 840, 776, 767, 769, 842, 843, 845, 846,
839, 847, 841, 777, 849, 851, 852, 844, 853, 854,
855, 848, 856, 858, 850, 859, 861, 862, 864, 865,
866, 867, 857, 868, 869, 860, 870, 863, 801, 871,
872, 873, 874, 875, 876, 877, 878, 880, 802, 882,
813, 883, 884, 885, 886, 887, 879, 881, 888, 890,
814, 892, 893, 896, 825, 827, 897, 898, 889, 891,
899, 900, 894, 901, 826, 828, 902, 903, 905, 906,
895, 838, 840, 908, 843, 909, 911, 904, 847, 907,
849, 839, 841, 912, 844, 910, 913, 915, 848, 916,
850, 917, 856, 918, 859, 919, 914, 862, 920, 921,
922, 923, 857, 924, 860, 925, 926, 863, 927, 928,
929, 930, 931, 933, 934, 878, 880, 935, 936, 937,
938, 939, 932, 940, 888, 879, 881, 890, 942, 893,
943, 944, 946, 941, 889, 947, 948, 891, 949, 894,
950, 945, 951, 903, 952, 906, 954, 909, 956, 957,
913, 958, 959, 904, 953, 907, 955, 910, 960, 962,
914, 964, 966, 967, 968, 969, 971, 972, 961, 963,
973, 965, 974, 975, 976, 970, 977, 931, 978, 979,
980, 981, 982, 983, 984, 940, 986, 932, 988, 944,
989, 990, 991, 992, 985, 941, 987, 993, 994, 945,
952, 954, 996, 997, 999, 1000, 960, 962, 995, 964,
953, 955, 1002, 998, 1004, 1001, 961, 963, 1005, 965,
969, 1006, 1003, 1007, 1009, 1010, 1011, 1012, 1013, 1015,
970, 1016, 1017, 1008, 1018, 1020, 1022, 984, 1014, 986,
1023, 1024, 1026, 1027, 1019, 1021, 1028, 985, 1029, 987,
994, 1025, 1030, 997, 1031, 1000, 1002, 1033, 1034, 1036,
995, 1007, 1037, 998, 1032, 1001, 1003, 1039, 1035, 1040,
1041, 1008, 1038, 1013, 1043, 1044, 1045, 1018, 1020, 1046,
1042, 1047, 1024, 1014, 1049, 1050, 1051, 1019, 1021, 1052,
1053, 1048, 1025, 1031, 1055, 1034, 1056, 1037, 1057, 1059,
1054, 1041, 1060, 1032, 1061, 1035, 1062, 1038, 1058, 1063,
1047, 1042, 1065, 1066, 1068, 1070, 1053, 1072, 1074, 1064,
1048, 1057, 1075, 1067, 1069, 1071, 1054, 1073, 1077, 1079,
1081, 1058, 1076, 1063, 1082, 1066, 1068, 1070, 1078, 1080,
1072, 1084, 1075, 1064, 1083, 1067, 1069, 1071, 1077, 1079,
1073, 1085, 1076, 1086, 1082, 1084, 1086, 114, 1078, 1080,
695, 694, 693, 1087, 1083, 1085, 1087, 18, 18, 18,
18, 18, 18, 46, 46, 46, 46, 46, 46, 53,
53, 53, 53, 53, 53, 54, 54, 54, 54, 54,
54, 59, 59, 59, 59, 59, 59, 65, 65, 65,
65, 65, 65, 69, 69, 111, 692, 111, 111, 111,
111, 115, 691, 688, 115, 115, 115, 120, 120, 120,
687, 686, 685, 684, 683, 682, 681, 680, 679, 678,
677, 676, 675, 674, 673, 672, 671, 670, 669, 668,
667, 666, 665, 664, 663, 662, 661, 660, 659, 658,
657, 656, 655, 654, 653, 652, 651, 650, 649, 648,
647, 646, 645, 644, 643, 642, 641, 640, 639, 638,
637, 636, 635, 630, 627, 626, 625, 624, 623, 622,
621, 620, 619, 618, 617, 616, 615, 614, 613, 612,
611, 608, 607, 606, 605, 604, 603, 602, 601, 595,
594, 593, 592, 591, 590, 589, 588, 587, 586, 585,
584, 583, 582, 581, 580, 579, 578, 577, 576, 575,
647, 646, 645, 644, 643, 642, 637, 634, 633, 632,
631, 630, 629, 628, 627, 626, 625, 624, 623, 622,
621, 620, 619, 618, 615, 614, 613, 612, 611, 610,
609, 608, 602, 601, 600, 599, 598, 597, 596, 595,
574, 573, 570, 565, 564, 563, 562, 561, 560, 559,
594, 593, 592, 591, 590, 589, 588, 587, 586, 585,
584, 583, 582, 581, 580, 577, 572, 571, 570, 569,
568, 567, 566, 565, 564, 563, 562, 561, 560, 559,
558, 557, 556, 555, 554, 553, 552, 551, 550, 549,
548, 547, 546, 545, 544, 543, 542, 541, 540, 539,
538, 535, 534, 533, 532, 531, 530, 529, 528, 525,
524, 523, 522, 521, 520, 517, 516, 515, 514, 513,
512, 509, 508, 507, 504, 503, 502, 501, 500, 499,
548, 547, 546, 545, 544, 541, 540, 539, 538, 537,
536, 535, 534, 531, 530, 529, 528, 527, 526, 523,
522, 521, 520, 519, 518, 515, 514, 513, 510, 509,
508, 507, 506, 505, 504, 503, 502, 501, 500, 499,
498, 497, 496, 495, 494, 493, 492, 491, 490, 489,
488, 487, 486, 485, 484, 483, 482, 481, 480, 477,
476, 475, 474, 473, 472, 471, 470, 467, 466, 465,
464, 463, 462, 461, 460, 459, 458, 457, 456, 455,
488, 487, 486, 485, 482, 481, 480, 479, 478, 477,
454, 453, 452, 451, 450, 449, 445, 444, 441, 440,
439, 438, 437, 436, 433, 432, 431, 430, 429, 428,
427, 426, 425, 424, 423, 420, 419, 416, 415, 414,
413, 412, 411, 410, 409, 408, 407, 406, 405, 404,
476, 475, 472, 471, 470, 469, 468, 467, 466, 465,
464, 463, 462, 461, 460, 459, 458, 457, 456, 455,
454, 450, 449, 446, 445, 444, 443, 442, 441, 438,
437, 436, 435, 434, 433, 432, 431, 430, 429, 428,
425, 424, 423, 420, 419, 418, 417, 416, 415, 414,
413, 412, 411, 410, 409, 408, 405, 404, 403, 402,
401, 400, 399, 398, 397, 396, 395, 394, 393, 392,
391, 390, 389, 388, 387, 386, 385, 384, 383, 382,
381, 380, 379, 378, 377, 376, 375, 374, 373, 372,
371, 370, 369, 368, 367, 366, 365, 364, 363, 362,
361, 360, 359, 358, 357, 356, 355, 354, 353, 352,
351, 350, 349, 346, 345, 344, 343, 342, 341, 340,
339, 338, 337, 336, 335, 331, 330, 329, 328, 327,
321, 320, 319, 318, 317, 316, 315, 312, 311, 310,
361, 360, 359, 358, 357, 356, 355, 354, 353, 352,
349, 348, 347, 346, 345, 344, 343, 342, 341, 340,
339, 338, 334, 333, 332, 331, 330, 324, 323, 322,
321, 320, 319, 318, 315, 314, 313, 312, 311, 310,
309, 308, 307, 306, 305, 304, 303, 302, 301, 300,
299, 298, 297, 296, 295, 294, 293, 292, 291, 290,
289, 288, 287, 286, 283, 282, 281, 280, 279, 278,
277, 276, 275, 272, 271, 270, 269, 268, 267, 266,
289, 288, 285, 284, 283, 282, 281, 280, 279, 278,
277, 274, 273, 272, 271, 270, 269, 268, 267, 266,
265, 264, 263, 262, 261, 260, 259, 258, 257, 256,
255, 254, 253, 252, 251, 250, 247, 246, 245, 244,
243, 240, 239, 238, 237, 236, 235, 234, 233, 232,
231, 230, 229, 228, 227, 226, 225, 224, 223, 222,
255, 254, 253, 252, 249, 248, 247, 246, 245, 242,
241, 240, 239, 238, 237, 236, 235, 234, 233, 232,
231, 230, 229, 228, 227, 226, 225, 224, 223, 222,
221, 220, 219, 218, 217, 216, 215, 214, 213, 212,
211, 210, 209, 208, 207, 206, 205, 204, 203, 202,
201, 200, 199, 198, 197, 194, 193, 192, 191, 190,
189, 188, 185, 184, 183, 182, 181, 180, 179, 178,
177, 119, 176, 116, 175, 174, 173, 170, 169, 168,
167, 166, 163, 160, 159, 158, 157, 154, 153, 147,
146, 145, 144, 143, 142, 141, 140, 139, 134, 133,
132, 129, 128, 127, 126, 125, 121, 119, 68, 112,
117, 116, 113, 112, 108, 107, 106, 99, 94, 93,
92, 91, 70, 68, 1072, 17, 1072, 1072, 1072, 1072,
1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072,
1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072,
1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072,
1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072
201, 200, 199, 198, 195, 194, 193, 192, 191, 190,
189, 186, 185, 184, 183, 182, 181, 180, 179, 178,
119, 177, 116, 176, 175, 174, 171, 168, 167, 166,
163, 160, 159, 158, 157, 154, 153, 147, 146, 145,
144, 143, 142, 141, 140, 139, 134, 133, 132, 129,
128, 127, 126, 125, 121, 119, 68, 112, 117, 116,
113, 112, 108, 107, 106, 99, 94, 93, 92, 91,
70, 68, 1088, 17, 1088, 1088, 1088, 1088, 1088, 1088,
1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088
} ;
static yyconst short int yy_chk[1441] =
static yyconst short int yy_chk[1459] =
{ 0,
0, 281, 1, 2, 20, 20, 20, 45, 45, 45,
0, 281, 26, 51, 51, 51, 39, 30, 26, 0,
25, 27, 29, 26, 100, 28, 26, 27, 407, 25,
30, 39, 76, 76, 29, 28, 407, 100, 1, 2,
0, 283, 1, 2, 20, 20, 20, 45, 45, 45,
0, 283, 26, 51, 51, 51, 39, 30, 26, 0,
25, 27, 29, 26, 100, 28, 26, 27, 411, 25,
30, 39, 76, 76, 29, 28, 411, 100, 1, 2,
57, 57, 57, 1, 2, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 5,
6, 31, 37, 106, 32, 37, 37, 254, 106, 31,
6, 31, 37, 106, 32, 37, 37, 256, 106, 31,
32, 32, 13, 14, 13, 14, 13, 14, 40, 37,
31, 40, 63, 63, 63, 63, 621, 93, 40, 66,
66, 66, 254, 40, 353, 5, 6, 80, 93, 80,
31, 40, 63, 63, 63, 63, 622, 93, 40, 66,
66, 66, 256, 40, 623, 5, 6, 80, 93, 80,
5, 6, 7, 7, 7, 7, 7, 7, 13, 14,
98, 70, 80, 13, 14, 70, 80, 353, 90, 138,
98, 130, 70, 90, 109, 109, 109, 90, 130, 138,
184, 90, 190, 214, 224, 90, 439, 184, 622, 7,
450, 224, 439, 214, 7, 8, 8, 8, 8, 8,
8, 262, 190, 332, 337, 450, 262, 347, 262, 555,
368, 337, 268, 332, 375, 262, 378, 347, 356, 262,
368, 356, 268, 398, 375, 433, 378, 466, 624, 555,
625, 627, 8, 398, 631, 433, 466, 8, 9, 9,
98, 70, 80, 13, 14, 70, 80, 191, 90, 130,
98, 104, 70, 90, 104, 471, 130, 90, 109, 109,
109, 90, 138, 185, 471, 90, 225, 191, 624, 7,
185, 215, 138, 225, 7, 8, 8, 8, 8, 8,
8, 215, 264, 335, 340, 350, 356, 264, 372, 264,
561, 340, 270, 335, 360, 350, 264, 360, 372, 625,
264, 379, 270, 382, 402, 438, 439, 626, 627, 356,
561, 379, 8, 382, 402, 438, 439, 8, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
268, 434, 442, 446, 378, 457, 495, 496, 498, 505,
526, 434, 442, 446, 553, 457, 495, 496, 498, 505,
526, 632, 635, 636, 553, 638, 9, 9, 639, 640,
641, 9, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 524, 535, 642, 643, 524, 524,
556, 566, 568, 571, 524, 609, 524, 535, 623, 626,
556, 566, 568, 571, 628, 609, 644, 645, 623, 626,
10, 10, 630, 633, 628, 10, 11, 11, 11, 11,
11, 11, 630, 633, 637, 646, 647, 648, 649, 650,
651, 652, 653, 654, 637, 655, 656, 648, 657, 658,
659, 660, 661, 663, 662, 655, 664, 665, 657, 666,
667, 668, 659, 11, 662, 669, 670, 671, 11, 12,
12, 12, 12, 12, 12, 672, 673, 674, 675, 676,
677, 678, 679, 680, 681, 683, 684, 674, 685, 676,
677, 678, 686, 687, 681, 688, 689, 690, 691, 692,
693, 694, 695, 687, 698, 699, 12, 702, 705, 706,
707, 12, 15, 15, 15, 15, 15, 15, 15, 15,
15, 696, 700, 15, 703, 708, 709, 711, 712, 713,
714, 696, 700, 715, 703, 716, 709, 717, 718, 719,
720, 721, 723, 724, 725, 726, 727, 728, 718, 731,
15, 721, 734, 736, 737, 15, 16, 16, 16, 16,
16, 16, 16, 16, 16, 729, 732, 16, 735, 738,
739, 741, 742, 743, 744, 729, 732, 745, 735, 746,
739, 747, 748, 749, 750, 751, 752, 753, 754, 761,
755, 757, 748, 749, 16, 759, 762, 763, 764, 16,
755, 757, 765, 766, 767, 759, 769, 770, 771, 772,
773, 774, 765, 766, 767, 775, 776, 770, 777, 778,
773, 774, 779, 780, 781, 782, 783, 784, 785, 786,
787, 788, 789, 780, 790, 782, 791, 784, 793, 794,
795, 796, 797, 798, 799, 800, 791, 801, 802, 803,
805, 806, 807, 808, 809, 800, 810, 801, 811, 803,
812, 813, 814, 815, 817, 819, 810, 820, 811, 821,
822, 813, 823, 815, 817, 824, 825, 826, 827, 813,
828, 830, 832, 833, 835, 836, 825, 837, 827, 839,
828, 830, 841, 833, 835, 842, 843, 837, 844, 839,
845, 846, 848, 849, 851, 842, 852, 854, 855, 856,
857, 846, 858, 849, 859, 860, 852, 861, 862, 863,
864, 865, 866, 867, 869, 871, 872, 873, 874, 875,
864, 876, 877, 867, 869, 879, 881, 882, 884, 885,
886, 876, 877, 887, 888, 879, 889, 882, 890, 885,
891, 892, 894, 895, 897, 898, 900, 901, 902, 904,
905, 892, 894, 895, 897, 898, 906, 907, 902, 908,
909, 910, 911, 912, 913, 914, 906, 907, 915, 908,
916, 917, 911, 918, 919, 921, 922, 923, 924, 925,
926, 927, 928, 930, 919, 931, 932, 934, 935, 936,
937, 927, 928, 930, 938, 939, 932, 940, 942, 944,
945, 946, 947, 948, 950, 939, 952, 940, 942, 954,
945, 955, 947, 948, 950, 956, 952, 958, 959, 954,
960, 961, 962, 963, 964, 956, 965, 966, 959, 967,
968, 969, 970, 971, 964, 973, 975, 976, 977, 978,
968, 969, 979, 971, 980, 973, 981, 976, 983, 984,
986, 987, 989, 991, 992, 993, 981, 995, 996, 984,
986, 987, 989, 997, 998, 993, 999, 995, 1001, 1002,
1003, 1004, 1006, 1008, 998, 1009, 999, 1010, 1012, 1013,
1014, 1004, 1006, 1015, 1016, 1009, 1017, 1010, 1019, 1020,
1021, 1023, 1024, 1025, 1016, 1027, 1017, 1028, 1029, 1030,
1021, 1023, 1031, 1025, 1033, 1034, 1035, 1036, 1037, 1030,
1039, 1040, 1031, 1041, 1043, 1034, 1035, 1036, 1037, 1044,
1039, 1045, 1046, 1041, 1043, 1047, 1049, 1050, 1052, 1044,
1054, 1045, 1056, 1058, 1059, 1047, 1049, 1050, 1052, 1061,
1054, 1063, 1056, 1058, 1059, 1065, 1066, 1068, 1070, 1061,
1081, 1063, 620, 619, 618, 1065, 1066, 1068, 1070, 1073,
1073, 1073, 1073, 1073, 1073, 1074, 1074, 1074, 1074, 1074,
1074, 1075, 1075, 1075, 1075, 1075, 1075, 1076, 1076, 1076,
1076, 1076, 1076, 1077, 1077, 1077, 1077, 1077, 1077, 1078,
1078, 1078, 1078, 1078, 1078, 1079, 1079, 1080, 617, 1080,
1080, 1080, 1080, 1082, 616, 615, 1082, 1082, 1082, 1083,
1083, 1083, 614, 613, 612, 611, 610, 608, 607, 606,
605, 604, 603, 602, 601, 600, 599, 598, 597, 596,
595, 594, 593, 592, 591, 590, 589, 588, 587, 586,
585, 584, 583, 582, 581, 580, 579, 578, 577, 576,
575, 574, 573, 570, 565, 564, 563, 562, 561, 560,
559, 558, 557, 554, 552, 551, 550, 549, 548, 547,
546, 545, 544, 543, 542, 541, 540, 539, 538, 537,
536, 534, 533, 532, 531, 530, 529, 528, 525, 523,
522, 521, 520, 519, 518, 517, 516, 515, 514, 513,
512, 511, 510, 509, 508, 507, 504, 503, 502, 501,
500, 499, 497, 494, 493, 492, 491, 490, 489, 488,
487, 486, 485, 484, 483, 482, 481, 480, 479, 478,
477, 476, 475, 474, 473, 472, 471, 470, 469, 468,
467, 465, 464, 463, 462, 461, 460, 459, 458, 456,
455, 454, 453, 452, 451, 449, 448, 445, 444, 441,
440, 438, 437, 436, 432, 431, 430, 429, 428, 427,
426, 425, 424, 423, 422, 421, 420, 419, 418, 417,
416, 415, 414, 413, 412, 411, 410, 409, 408, 406,
405, 404, 403, 402, 401, 400, 399, 397, 396, 395,
394, 393, 392, 391, 390, 389, 388, 387, 386, 385,
384, 383, 382, 381, 380, 379, 377, 376, 374, 373,
372, 371, 370, 369, 367, 366, 365, 364, 363, 362,
361, 360, 359, 358, 357, 355, 354, 352, 351, 350,
349, 346, 345, 344, 343, 342, 341, 340, 339, 338,
336, 335, 334, 331, 330, 329, 328, 327, 326, 325,
324, 323, 322, 321, 320, 319, 318, 317, 316, 315,
314, 313, 312, 311, 310, 309, 308, 307, 306, 305,
304, 303, 302, 301, 300, 299, 298, 297, 296, 295,
294, 293, 292, 291, 290, 289, 288, 287, 286, 285,
284, 283, 282, 280, 279, 278, 277, 276, 275, 274,
273, 272, 271, 270, 269, 267, 266, 265, 264, 263,
261, 260, 259, 258, 257, 256, 255, 253, 252, 251,
250, 249, 248, 247, 246, 245, 244, 243, 242, 241,
240, 239, 238, 237, 236, 235, 232, 231, 230, 229,
228, 227, 226, 225, 223, 222, 221, 220, 219, 218,
217, 216, 215, 213, 212, 211, 210, 209, 208, 207,
206, 205, 204, 203, 202, 201, 200, 199, 198, 197,
196, 195, 194, 193, 192, 191, 189, 188, 187, 186,
185, 183, 182, 181, 180, 179, 178, 176, 175, 174,
173, 172, 171, 170, 169, 168, 167, 166, 165, 164,
163, 162, 161, 160, 159, 158, 157, 156, 155, 154,
153, 152, 151, 150, 149, 148, 147, 146, 145, 144,
143, 142, 141, 140, 139, 137, 136, 135, 134, 133,
132, 131, 129, 128, 127, 126, 125, 124, 123, 122,
121, 120, 117, 116, 113, 108, 107, 105, 104, 103,
102, 101, 99, 97, 96, 95, 94, 92, 91, 89,
88, 87, 86, 85, 84, 83, 82, 81, 79, 78,
77, 75, 74, 73, 72, 71, 68, 65, 64, 62,
58, 55, 52, 50, 43, 42, 41, 38, 36, 35,
34, 33, 24, 21, 17, 1072, 1072, 1072, 1072, 1072,
1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072,
1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072,
1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072,
1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072
270, 444, 447, 451, 455, 462, 501, 444, 502, 541,
504, 382, 447, 451, 511, 462, 501, 628, 502, 455,
504, 541, 629, 631, 511, 632, 9, 9, 634, 638,
639, 9, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 530, 532, 642, 559, 530, 530,
562, 573, 575, 578, 530, 532, 530, 559, 616, 630,
562, 573, 575, 578, 633, 643, 645, 646, 616, 630,
10, 10, 635, 637, 633, 10, 11, 11, 11, 11,
11, 11, 635, 637, 640, 644, 647, 648, 649, 650,
651, 652, 653, 654, 640, 644, 655, 656, 657, 658,
659, 660, 661, 662, 663, 664, 665, 656, 666, 668,
669, 671, 672, 11, 663, 667, 665, 673, 11, 12,
12, 12, 12, 12, 12, 670, 674, 667, 675, 676,
677, 678, 679, 680, 681, 670, 682, 683, 684, 685,
686, 687, 688, 689, 691, 692, 682, 693, 684, 685,
686, 694, 696, 689, 697, 698, 12, 699, 700, 701,
702, 12, 15, 15, 15, 15, 15, 15, 15, 15,
15, 695, 703, 15, 704, 706, 707, 708, 710, 711,
713, 695, 714, 715, 704, 716, 717, 708, 719, 711,
720, 721, 722, 723, 724, 725, 717, 726, 728, 729,
15, 732, 733, 734, 735, 15, 16, 16, 16, 16,
16, 16, 16, 16, 16, 727, 730, 16, 736, 737,
738, 740, 741, 743, 744, 727, 730, 745, 746, 747,
738, 748, 741, 750, 744, 751, 752, 753, 754, 755,
756, 748, 757, 758, 16, 759, 760, 761, 762, 16,
763, 764, 757, 758, 766, 768, 770, 771, 772, 773,
774, 764, 775, 776, 766, 768, 778, 779, 780, 781,
774, 782, 775, 776, 783, 784, 785, 779, 786, 787,
788, 782, 789, 790, 783, 791, 792, 793, 794, 795,
796, 797, 789, 798, 799, 791, 800, 793, 801, 803,
804, 805, 806, 807, 808, 809, 810, 811, 801, 812,
813, 815, 816, 817, 818, 819, 810, 811, 820, 821,
813, 822, 823, 824, 825, 827, 829, 830, 820, 821,
831, 832, 823, 833, 825, 827, 834, 835, 836, 837,
823, 838, 840, 842, 843, 845, 846, 835, 847, 837,
849, 838, 840, 851, 843, 845, 852, 853, 847, 854,
849, 855, 856, 858, 859, 861, 852, 862, 864, 865,
866, 867, 856, 868, 859, 869, 870, 862, 871, 872,
873, 874, 875, 876, 877, 878, 880, 882, 883, 884,
885, 886, 875, 887, 888, 878, 880, 890, 892, 893,
895, 896, 897, 887, 888, 898, 899, 890, 900, 893,
901, 896, 902, 903, 905, 906, 908, 909, 911, 912,
913, 915, 916, 903, 905, 906, 908, 909, 917, 918,
913, 919, 920, 921, 922, 923, 924, 925, 917, 918,
926, 919, 927, 928, 929, 923, 930, 931, 933, 934,
935, 936, 937, 938, 939, 940, 942, 931, 943, 944,
946, 947, 948, 949, 939, 940, 942, 950, 951, 944,
952, 954, 956, 957, 958, 959, 960, 962, 951, 964,
952, 954, 966, 957, 967, 959, 960, 962, 968, 964,
969, 971, 966, 972, 973, 974, 975, 976, 977, 978,
969, 979, 980, 972, 981, 982, 983, 984, 977, 986,
988, 989, 990, 991, 981, 982, 992, 984, 993, 986,
994, 989, 996, 997, 999, 1000, 1002, 1004, 1005, 1006,
994, 1007, 1009, 997, 999, 1000, 1002, 1010, 1005, 1011,
1012, 1007, 1009, 1013, 1015, 1016, 1017, 1018, 1020, 1022,
1012, 1023, 1024, 1013, 1026, 1027, 1028, 1018, 1020, 1029,
1030, 1023, 1024, 1031, 1033, 1034, 1036, 1037, 1039, 1040,
1030, 1041, 1043, 1031, 1044, 1034, 1045, 1037, 1039, 1046,
1047, 1041, 1049, 1050, 1051, 1052, 1053, 1055, 1056, 1046,
1047, 1057, 1059, 1050, 1051, 1052, 1053, 1055, 1060, 1061,
1062, 1057, 1059, 1063, 1065, 1066, 1068, 1070, 1060, 1061,
1072, 1074, 1075, 1063, 1065, 1066, 1068, 1070, 1077, 1079,
1072, 1074, 1075, 1081, 1082, 1084, 1086, 1097, 1077, 1079,
621, 620, 619, 1081, 1082, 1084, 1086, 1089, 1089, 1089,
1089, 1089, 1089, 1090, 1090, 1090, 1090, 1090, 1090, 1091,
1091, 1091, 1091, 1091, 1091, 1092, 1092, 1092, 1092, 1092,
1092, 1093, 1093, 1093, 1093, 1093, 1093, 1094, 1094, 1094,
1094, 1094, 1094, 1095, 1095, 1096, 618, 1096, 1096, 1096,
1096, 1098, 617, 615, 1098, 1098, 1098, 1099, 1099, 1099,
614, 613, 612, 611, 610, 609, 608, 607, 606, 605,
604, 603, 602, 601, 600, 599, 598, 597, 596, 595,
594, 593, 592, 591, 590, 589, 588, 587, 586, 585,
584, 583, 582, 581, 580, 577, 572, 571, 570, 569,
568, 567, 566, 565, 564, 563, 560, 558, 557, 556,
555, 554, 553, 552, 551, 550, 549, 548, 547, 546,
545, 544, 543, 542, 540, 539, 538, 537, 536, 535,
534, 531, 529, 528, 527, 526, 525, 524, 523, 522,
521, 520, 519, 518, 517, 516, 515, 514, 513, 510,
509, 508, 507, 506, 505, 503, 500, 499, 498, 497,
496, 495, 494, 493, 492, 491, 490, 489, 488, 487,
486, 485, 484, 483, 482, 481, 480, 479, 478, 477,
476, 475, 474, 473, 472, 470, 469, 468, 467, 466,
465, 464, 463, 461, 460, 459, 458, 457, 456, 454,
453, 450, 449, 446, 445, 443, 442, 441, 437, 436,
435, 434, 433, 432, 431, 430, 429, 428, 427, 426,
425, 424, 423, 422, 421, 420, 419, 418, 417, 416,
415, 414, 413, 412, 410, 409, 408, 407, 406, 405,
404, 403, 401, 400, 399, 398, 397, 396, 395, 394,
393, 392, 391, 390, 389, 388, 387, 386, 385, 384,
383, 381, 380, 378, 377, 376, 375, 374, 373, 371,
370, 369, 368, 367, 366, 365, 364, 363, 362, 361,
359, 358, 357, 355, 354, 353, 352, 349, 348, 347,
346, 345, 344, 343, 342, 341, 339, 338, 337, 334,
333, 332, 331, 330, 329, 328, 327, 326, 325, 324,
323, 322, 321, 320, 319, 318, 317, 316, 315, 314,
313, 312, 311, 310, 309, 308, 307, 306, 305, 304,
303, 302, 301, 300, 299, 298, 297, 296, 295, 294,
293, 292, 291, 290, 289, 288, 287, 286, 285, 284,
282, 281, 280, 279, 278, 277, 276, 275, 274, 273,
272, 271, 269, 268, 267, 266, 265, 263, 262, 261,
260, 259, 258, 257, 255, 254, 253, 252, 251, 250,
249, 248, 247, 246, 245, 244, 243, 242, 241, 240,
239, 238, 237, 234, 233, 232, 231, 230, 229, 228,
227, 226, 224, 223, 222, 221, 220, 219, 218, 217,
216, 214, 213, 212, 211, 210, 209, 208, 207, 206,
205, 204, 203, 202, 201, 200, 199, 198, 197, 196,
195, 194, 193, 192, 190, 189, 188, 187, 186, 184,
183, 182, 181, 180, 179, 177, 176, 175, 174, 173,
172, 171, 170, 169, 168, 167, 166, 165, 164, 163,
162, 161, 160, 159, 158, 157, 156, 155, 154, 153,
152, 151, 150, 149, 148, 147, 146, 145, 144, 143,
142, 141, 140, 139, 137, 136, 135, 134, 133, 132,
131, 129, 128, 127, 126, 125, 124, 123, 122, 121,
120, 117, 116, 113, 108, 107, 105, 103, 102, 101,
99, 97, 96, 95, 94, 92, 91, 89, 88, 87,
86, 85, 84, 83, 82, 81, 79, 78, 77, 75,
74, 73, 72, 71, 68, 65, 64, 62, 58, 55,
52, 50, 43, 42, 41, 38, 36, 35, 34, 33,
24, 21, 17, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088
} ;
static yy_state_type yy_last_accepting_state;
......@@ -1195,10 +1204,10 @@ bool Config::includeGraphFlag = TRUE;
bool Config::gfxHierarchyFlag = TRUE;
bool Config::showIncFileFlag = TRUE;
bool Config::stripCommentsFlag = TRUE;
bool Config::sortMembersFlag = TRUE;
int Config::tabSize = 8;
int Config::colsInAlphaIndex = 5;
/* -----------------------------------------------------------------
*
* static variables
......@@ -1450,13 +1459,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 1073 )
if ( yy_current_state >= 1089 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
while ( yy_base[yy_current_state] != 1396 );
while ( yy_base[yy_current_state] != 1414 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
......@@ -1910,16 +1919,21 @@ YY_RULE_SETUP
case 86:
YY_RULE_SETUP
#line 284 "config.l"
{ err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); }
{ BEGIN(GetBool); b=&Config::sortMembersFlag; }
YY_BREAK
case 87:
YY_RULE_SETUP
#line 285 "config.l"
{ yyLineNr++; BEGIN(Start); }
{ err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); }
YY_BREAK
case 88:
YY_RULE_SETUP
#line 286 "config.l"
{ yyLineNr++; BEGIN(Start); }
YY_BREAK
case 89:
YY_RULE_SETUP
#line 287 "config.l"
{
yyLineNr++;
if (!elemStr.isEmpty())
......@@ -1930,9 +1944,9 @@ YY_RULE_SETUP
BEGIN(Start);
}
YY_BREAK
case 89:
case 90:
YY_RULE_SETUP
#line 295 "config.l"
#line 296 "config.l"
{
if (!elemStr.isEmpty())
{
......@@ -1942,31 +1956,31 @@ YY_RULE_SETUP
elemStr.resize(0);
}
YY_BREAK
case 90:
case 91:
YY_RULE_SETUP
#line 303 "config.l"
#line 304 "config.l"
{ (*s)+=yytext; }
YY_BREAK
case 91:
case 92:
YY_RULE_SETUP
#line 304 "config.l"
#line 305 "config.l"
{ lastState=YY_START;
BEGIN(GetQuotedString);
tmpString.resize(0);
}
YY_BREAK
case 92:
case 93:
YY_RULE_SETUP
#line 308 "config.l"
#line 309 "config.l"
{
//printf(">> Enter env\n");
lastEnvState=YY_START;
BEGIN(GetEnvVar);
}
YY_BREAK
case 93:
case 94:
YY_RULE_SETUP
#line 313 "config.l"
#line 314 "config.l"
{
yytext[yyleng-1]='\0';
const char *env=getenv(yytext);
......@@ -1977,9 +1991,9 @@ YY_RULE_SETUP
BEGIN(lastEnvState);
}
YY_BREAK
case 94:
case 95:
YY_RULE_SETUP
#line 322 "config.l"
#line 323 "config.l"
{
//printf("Quoted String = `%s'\n",tmpString.data());
if (lastState==GetString)
......@@ -1994,21 +2008,21 @@ YY_RULE_SETUP
BEGIN(lastState);
}
YY_BREAK
case 95:
case 96:
YY_RULE_SETUP
#line 335 "config.l"
#line 336 "config.l"
{
tmpString+='"';
}
YY_BREAK
case 96:
case 97:
YY_RULE_SETUP
#line 338 "config.l"
#line 339 "config.l"
{ tmpString+=*yytext; }
YY_BREAK
case 97:
case 98:
YY_RULE_SETUP
#line 339 "config.l"
#line 340 "config.l"
{
QCString bs=yytext;
bs=bs.upper();
......@@ -2025,18 +2039,13 @@ YY_RULE_SETUP
}
}
YY_BREAK
case 98:
case 99:
YY_RULE_SETUP
#line 354 "config.l"
#line 355 "config.l"
{
elemStr+=yytext;
}
YY_BREAK
case 99:
YY_RULE_SETUP
#line 357 "config.l"
{ yyLineNr++; BEGIN(Start); }
YY_BREAK
case 100:
YY_RULE_SETUP
#line 358 "config.l"
......@@ -2045,21 +2054,26 @@ YY_RULE_SETUP
case 101:
YY_RULE_SETUP
#line 359 "config.l"
{ yyLineNr++; }
{ yyLineNr++; BEGIN(Start); }
YY_BREAK
case 102:
YY_RULE_SETUP
#line 360 "config.l"
{ yyLineNr++; }
YY_BREAK
case 103:
YY_RULE_SETUP
#line 361 "config.l"
{ yyLineNr++ ; }
YY_BREAK
case 104:
YY_RULE_SETUP
#line 363 "config.l"
#line 362 "config.l"
{ yyLineNr++ ; }
YY_BREAK
case 105:
YY_RULE_SETUP
#line 364 "config.l"
ECHO;
YY_BREAK
case YY_STATE_EOF(INITIAL):
......@@ -2360,7 +2374,7 @@ static yy_state_type yy_get_previous_state()
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 1073 )
if ( yy_current_state >= 1089 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
......@@ -2395,11 +2409,11 @@ yy_state_type yy_current_state;
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 1073 )
if ( yy_current_state >= 1089 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
yy_is_jam = (yy_current_state == 1072);
yy_is_jam = (yy_current_state == 1088);
return yy_is_jam ? 0 : yy_current_state;
}
......@@ -2954,7 +2968,7 @@ int main()
return 0;
}
#endif
#line 363 "config.l"
#line 364 "config.l"
/*@ ----------------------------------------------------------------------------
......@@ -3094,6 +3108,7 @@ void Config::init()
Config::gfxHierarchyFlag = TRUE;
Config::showIncFileFlag = TRUE;
Config::stripCommentsFlag = TRUE;
Config::sortMembersFlag = TRUE;
}
void writeTemplateConfig(QFile *f,bool sl)
......@@ -3236,7 +3251,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t <<"\n";
t << "# If the ALWAYS_DETAILS_SEC and REPEAT_BRIEF tags are both set to YES then\n";
t << "# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\n";
t << "# Doxygen will generate a detailed section even if there is only a brief\n";
t << "# description.\n";
t <<"\n";
......@@ -3347,7 +3362,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# if the INHERIT_DOCS tag is set to YES (the default) then an undocumented\n";
t << "# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented\n";
t << "# member inherits the documentation from any documented member that it\n";
t << "# reimplements.\n";
t << "\n";
......@@ -3356,7 +3371,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# if the INLINE_INFO tag is set to YES (the default) then a tag [inline]\n";
t << "# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]\n";
t << "# is inserted in the documentation for inline members.\n";
t << "\n";
}
......@@ -3364,7 +3379,17 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# the TAB_SIZE tag can be used to set the number of spaces in a tab.\n";
t << "# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen\n";
t << "# will sort the (detailed) documentation of file and class members \n";
t << "# alphabetically by member name. If set to NO the members will appear in\n";
t << "# declaration order.\n";
t << "\n";
}
t << "SORT_MEMBER_DOCS = YES\n";
if (!sl)
{
t << "\n";
t << "# The TAB_SIZE tag can be used to set the number of spaces in a tab.\n";
t << "# Doxygen uses this value to replace tabs by spaces in code fragments.\n";
t << "\n";
}
......
......@@ -114,6 +114,7 @@ struct Config
static bool rtfHyperFlag; // generate hyper links in RTF
static bool showIncFileFlag; // show include file in file documentation?
static bool stripCommentsFlag; // strip special comments from code fragments?
static bool sortMembersFlag; // sort members alphabetically?
};
#endif
......@@ -144,10 +144,10 @@ bool Config::includeGraphFlag = TRUE;
bool Config::gfxHierarchyFlag = TRUE;
bool Config::showIncFileFlag = TRUE;
bool Config::stripCommentsFlag = TRUE;
bool Config::sortMembersFlag = TRUE;
int Config::tabSize = 8;
int Config::colsInAlphaIndex = 5;
/* -----------------------------------------------------------------
*
* static variables
......@@ -281,6 +281,7 @@ static int yyread(char *buf,int max_size)
<Start>"RTF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::rtfHyperFlag; }
<Start>"SHOW_INCLUDE_FILES"[ \t]*"=" { BEGIN(GetBool); b=&Config::showIncFileFlag; }
<Start>"STRIP_CODE_COMMENTS"[ \t]*"=" { BEGIN(GetBool); b=&Config::stripCommentsFlag; }
<Start>"SORT_MEMBER_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::sortMembersFlag; }
<Start>[a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); }
<GetString,GetBool>\n { yyLineNr++; BEGIN(Start); }
<GetStrList>\n {
......@@ -499,6 +500,7 @@ void Config::init()
Config::gfxHierarchyFlag = TRUE;
Config::showIncFileFlag = TRUE;
Config::stripCommentsFlag = TRUE;
Config::sortMembersFlag = TRUE;
}
void writeTemplateConfig(QFile *f,bool sl)
......@@ -641,7 +643,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t <<"\n";
t << "# If the ALWAYS_DETAILS_SEC and REPEAT_BRIEF tags are both set to YES then\n";
t << "# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\n";
t << "# Doxygen will generate a detailed section even if there is only a brief\n";
t << "# description.\n";
t <<"\n";
......@@ -752,7 +754,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# if the INHERIT_DOCS tag is set to YES (the default) then an undocumented\n";
t << "# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented\n";
t << "# member inherits the documentation from any documented member that it\n";
t << "# reimplements.\n";
t << "\n";
......@@ -761,7 +763,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# if the INLINE_INFO tag is set to YES (the default) then a tag [inline]\n";
t << "# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]\n";
t << "# is inserted in the documentation for inline members.\n";
t << "\n";
}
......@@ -769,7 +771,17 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# the TAB_SIZE tag can be used to set the number of spaces in a tab.\n";
t << "# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen\n";
t << "# will sort the (detailed) documentation of file and class members \n";
t << "# alphabetically by member name. If set to NO the members will appear in\n";
t << "# declaration order.\n";
t << "\n";
}
t << "SORT_MEMBER_DOCS = YES\n";
if (!sl)
{
t << "\n";
t << "# The TAB_SIZE tag can be used to set the number of spaces in a tab.\n";
t << "# Doxygen uses this value to replace tabs by spaces in code fragments.\n";
t << "\n";
}
......
......@@ -45,6 +45,8 @@ static int labelToEnumValue(const char *l)
return Debug::Variables;
else if (label=="Preprocessor")
return Debug::Preprocessor;
else if (label=="Classes")
return Debug::Classes;
else
return 0;
}
......
......@@ -25,7 +25,8 @@ class Debug
FindMembers = 0x00000001,
Functions = 0x00000002,
Variables = 0x00000004,
Preprocessor = 0x00000008
Preprocessor = 0x00000008,
Classes = 0x00000010
};
static void print(DebugMask mask,int prio,const char *fmt,...);
static void setFlag(const char *label);
......
......@@ -1252,6 +1252,6 @@ void ClassDiagram::writeImageMap(QTextStream &t,const char *path,
image.save((QCString)path+"/"+fileName+".gif");
t << "</map></p>" << endl;
t << "</map>" << endl;
}
......@@ -136,7 +136,14 @@ static bool isLeaf(ClassDef *cd)
for ( ; (bcd=bcli.current()); ++bcli )
{
ClassDef *bClass = bcd->classDef;
if (bClass->isLinkable() || !isLeaf(bClass)) return FALSE;
//if (bClass->isLinkable() || !isLeaf(bClass)) return FALSE;
// if class is not a leaf
if (!isLeaf(bClass)) return FALSE;
// or class is not documented in this project
if (!Config::allExtFlag && !bClass->isLinkableInProject()) return FALSE;
// or class is not documented and all ALLEXTERNALS = YES
if (Config::allExtFlag && !bClass->isLinkable()) return FALSE;
}
}
return TRUE;
......@@ -523,7 +530,12 @@ DotGfxHierarchyTable::DotGfxHierarchyTable()
for (cli.toFirst();(cd=cli.current());++cli)
{
//printf("Trying %s superClasses=%d\n",cd->name().data(),cd->superClasses()->count());
if (cd->isLinkable() && isLeaf(cd)) // root class in the graph
if (isLeaf(cd) &&
(
(!Config::allExtFlag && cd->isLinkableInProject()) ||
(Config::allExtFlag && cd->isLinkable())
)
) // root class in the graph
{
//printf("Inserting root class %s\n",cd->name().data());
DotNode *n = new DotNode(m_curNodeNumber++,
......@@ -593,7 +605,10 @@ int DotGfxUsageGraph::m_curNodeNumber;
void DotGfxUsageGraph::addClass(ClassDef *cd,DotNode *n,int prot,
const char *label,int distance)
{
if (cd->isLinkable())
if (
(!Config::allExtFlag && cd->isLinkableInProject()) ||
(Config::allExtFlag && cd->isLinkable())
)
{
//printf(":: DoxGfxUsageGraph::addClass(class=%s,parent=%s,prot=%d,label=%s,dist=%d)\n",
// cd->name().data(),n->m_label.data(),prot,label,distance);
......@@ -735,7 +750,7 @@ static void findMaximalDotGraph(DotNode *root,int maxDist,
QCString dotCmd;
// create annotated dot file
dotCmd.sprintf("dot -Tdot %s.dot -o %s_tmp.dot\n",baseName.data(),baseName.data());
dotCmd.sprintf("dot -Tdot %s.dot -o %s_tmp.dot",baseName.data(),baseName.data());
if (system(dotCmd)!=0)
{
err("Problems running dot. Check your installation!\n");
......@@ -807,7 +822,7 @@ void DotGfxUsageGraph::writeGraph(QTextStream &out,
// run dot to create a .gif image
QCString dotCmd;
dotCmd.sprintf("dot -Tgif %s.dot -o %s.gif\n",baseName.data(),baseName.data());
dotCmd.sprintf("dot -Tgif %s.dot -o %s.gif",baseName.data(),baseName.data());
if (system(dotCmd)!=0)
{
err("Problems running dot. Check your installation!\n");
......@@ -848,27 +863,42 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
for (;(ii=ili.current());++ili)
{
FileDef *bfd = ii->fileDef;
QCString in = bfd ? bfd->absFilePath() : ii->includeName;
DotNode *bn = m_usedNodes->find(in);
if (bn) // file is already a node in the graph
QCString in = ii->includeName;
bool doc=TRUE,src=FALSE;
if (bfd)
{
n->addChild(bn,0,0,0);
bn->addParent(n);
bn->setDistance(distance);
in = bfd->absFilePath();
doc = bfd->isLinkableInProject();
src = bfd->generateSource() || (!bfd->isReference() && Config::sourceBrowseFlag);
}
else
if (doc || src)
{
bn = new DotNode(
m_curNodeNumber++,
ii->includeName,
bfd ? (bfd->getReference()+"$"+bfd->getOutputFileBase()).data() : 0,
distance
);
if (distance>m_maxDistance) m_maxDistance=distance;
n->addChild(bn,0,0,0);
bn->addParent(n);
m_usedNodes->insert(in,bn);
if (bfd) buildGraph(bn,bfd,distance+1);
QCString url=bfd ? bfd->getOutputFileBase().data() : "";
if (!doc && src)
{
url+="-source";
}
DotNode *bn = m_usedNodes->find(in);
if (bn) // file is already a node in the graph
{
n->addChild(bn,0,0,0);
bn->addParent(n);
bn->setDistance(distance);
}
else
{
bn = new DotNode(
m_curNodeNumber++,
ii->includeName,
bfd ? (bfd->getReference()+"$"+url).data() : 0,
distance
);
if (distance>m_maxDistance) m_maxDistance=distance;
n->addChild(bn,0,0,0);
bn->addParent(n);
m_usedNodes->insert(in,bn);
if (bfd) buildGraph(bn,bfd,distance+1);
}
}
}
}
......@@ -876,6 +906,7 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
DotInclDepGraph::DotInclDepGraph(FileDef *fd)
{
m_maxDistance = 0;
ASSERT(fd!=0);
m_diskName = fd->getOutputFileBase().copy();
m_startNode = new DotNode(m_curNodeNumber++,
fd->name(),
......@@ -918,7 +949,7 @@ void DotInclDepGraph::writeGraph(QTextStream &out,const char *path)
// run dot to create a .gif image
QCString dotCmd;
dotCmd.sprintf("dot -Tgif %s.dot -o %s.gif\n",baseName.data(),baseName.data());
dotCmd.sprintf("dot -Tgif %s.dot -o %s.gif",baseName.data(),baseName.data());
if (system(dotCmd)!=0)
{
err("Problems running dot. Check your installation!\n");
......
......@@ -91,6 +91,7 @@ FormulaDict formulaDict(1009); // all formulas
FormulaDict formulaNameDict(1009); // the label name of all formulas
StringDict tagDestinationDict(257); // all tag locations
// a member group
QDict<void> compoundKeywordDict(7); // keywords recognised as compounds
OutputList *outputList = 0; // list of output generating objects
PageInfo *mainPage = 0;
......@@ -369,7 +370,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
/*! Input is a scopeName, output is the scopename split into a
* namespace part (as large as possible) and a classname part.
*/
void extractNamespaceName(const QCString &scopeName,
static void extractNamespaceName(const QCString &scopeName,
QCString &className,QCString &namespaceName)
{
QCString clName=scopeName.copy();
......@@ -439,7 +440,8 @@ void buildClassList(Entry *root)
{
if (
((root->section & Entry::COMPOUNDDOC_MASK) ||
((root->section & Entry::COMPOUND_MASK))) &&
((root->section & Entry::COMPOUND_MASK))
) &&
!root->name.isEmpty()
)
{
......@@ -453,14 +455,16 @@ void buildClassList(Entry *root)
else
{
fullName=stripAnnonymousNamespaceScope(fullName);
//printf("new class with name %s\n",fullName.data());
Debug::print(Debug::Classes,0," Found class with name %s\n",fullName.data());
bool ambig;
ClassDef *cd;
//printf("findFileDef(%s)\n",root->fileName.data());
FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig);
if ((cd=getClass(fullName)))
{
Debug::print(Debug::Classes,0," Existing class!\n",fullName.data());
if (cd->templateArguments()==0)
{
//printf("existing ClassDef tempArgList=%p specScope=%s\n",root->tArgList,root->scopeSpec.data());
......@@ -529,7 +533,17 @@ void buildClassList(Entry *root)
case Entry::INTERFACE_SEC:
case Entry::INTERFACEDOC_SEC:
sec=ClassDef::Interface; break;
case Entry::EXCEPTION_SEC:
case Entry::EXCEPTIONDOC_SEC:
sec=ClassDef::Exception; break;
}
Debug::print(Debug::Classes,0," New class `%s' (sec=0x%08x)!\n",fullName.data(),root->section);
QCString className;
QCString namespaceName;
extractNamespaceName(fullName,className,namespaceName);
//printf("New class: namespace `%s' name=`%s'\n",className.data(),namespaceName.data());
ClassDef *cd=new ClassDef(fullName,sec);
cd->setDocumentation(root->doc); // copy docs to definition
cd->setBriefDescription(root->brief);
......@@ -553,6 +567,7 @@ void buildClassList(Entry *root)
}
}
// see if the class is found inside a namespace
bool found=addNamespace(root,cd);
cd->setFileDef(fd);
......@@ -561,6 +576,18 @@ void buildClassList(Entry *root)
addIncludeFile(cd,fd,root);
}
// namespace is part of the class name
if (!found && !namespaceName.isEmpty())
{
NamespaceDef *nd = namespaceDict[namespaceName];
if (nd)
{
cd->setNamespace(nd);
nd->insertClass(cd);
found=TRUE;
}
}
// if the class is not in a namespace then we insert
// it in the file definition
if (!found && fd && (root->section & Entry::COMPOUND_MASK))
......@@ -968,8 +995,9 @@ void buildVarList(Entry *root)
QRegExp re("([^)]*)");
int i=-1;
if (!root->name.isEmpty() &&
root->type!="class" && root->type!="interface" &&
root->type!="struct" && root->type!="union" &&
//root->type!="class" && root->type!="interface" &&
//root->type!="struct" && root->type!="union" &&
(root->type.isEmpty() || compoundKeywordDict.find(root->type)==0) &&
(
(root->section==Entry::VARIABLE_SEC
) ||
......@@ -1006,7 +1034,6 @@ void buildVarList(Entry *root)
}
else
{
//QRegExp re("([^)]*)");
i=root->type.find(re,0);
if (i!=-1) // function variable
{
......@@ -1016,14 +1043,17 @@ void buildVarList(Entry *root)
}
QCString scope,name=root->name.copy();
//bool stat=root->stat;
//int si;
//if ((si=name.findRev("::"))!=-1)
//{
// scope=name.left(si);
// name=name.right(name.length()-si-2);
//}
// find the scope of this variable (stripping the annonymous part
// at the beginning
// find the scope of this variable
Entry *p = root->parent;
while ((p->section & Entry::SCOPE_MASK))
{
//QCString scopeName = stripAnnonymousScope(p->name);
QCString scopeName = p->name.copy();
if (!scopeName.isEmpty())
{
......@@ -1064,7 +1094,6 @@ void buildVarList(Entry *root)
else
mtype=MemberDef::Variable;
//printf("name=`%s' scope=%s\n",name.data(),scope.data());
QCString classScope=stripAnnonymousNamespaceScope(scope);
QCString annScopePrefix=scope.left(scope.length()-classScope.length());
scope=classScope;
......@@ -1423,7 +1452,11 @@ void buildMemberList(Entry *root)
NamespaceDef *nd = 0;
if (root->parent->section == Entry::NAMESPACE_SEC )
{
nd = namespaceDict[root->parent->name];
QCString nscope=removeAnnonymousScopes(root->parent->name);
if (!nscope.isEmpty())
{
nd = namespaceDict[nscope];
}
}
if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
......@@ -1544,6 +1577,8 @@ void findFriends()
void transferFunctionDocumentation()
{
//printf("transferFunctionDocumentation()\n");
// find matching function declaration and definitions.
MemberNameListIterator mnli(functionNameList);
MemberName *mn;
for (;(mn=mnli.current());++mnli)
......@@ -1594,6 +1629,42 @@ void transferFunctionDocumentation()
}
}
void transferRelatedFunctionDocumentation()
{
// find match between function declaration and definition for
// related functions
MemberNameListIterator mnli(functionNameList);
MemberName *mn;
for (mnli.toFirst();(mn=mnli.current());++mnli)
{
MemberDef *md;
MemberNameIterator mni(*mn);
/* find a matching function declaration and definition for this function */
for (mni.toFirst();(md=mni.current());++mni) // for each global function
{
//printf(" Function `%s'\n",md->name().data());
MemberName *rmn;
if ((rmn=memberNameDict[md->name()])) // check if there is a member with the same name
{
//printf(" Member name found\n");
MemberDef *rmd;
MemberNameIterator rmni(*rmn);
for (rmni.toFirst();(rmd=rmni.current());++rmni) // for each member with the same name
{
//printf(" Member found: related=`%d'\n",rmd->isRelated());
if (rmd->isRelated() && // related function
matchArguments(md->argumentList(),rmd->argumentList()) // match argument lists
)
{
//printf(" Found related member `%s'\n",md->name().data());
md->makeRelated();
}
}
}
}
}
}
//----------------------------------------------------------------------
static bool findBaseClassRelation(Entry *root,ClassDef *cd,
......@@ -1685,7 +1756,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
}
if (found)
{
//printf(">>> Documented base class = %s\n",bi->name.data());
Debug::print(Debug::Classes,0," Documented base class `%s'\n",bi->name.data());
// add base class to this class
cd->insertBaseClass(baseClass,bi->prot,bi->virt,templSpec);
// add this class as super class to the base class
......@@ -1694,7 +1765,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
}
else if (insertUndocumented)
{
//printf(">>> Undocumented base class = %s\n",bi->name.data());
Debug::print(Debug::Classes,0," Undocumented base class `%s'\n",bi->name.data());
baseClass=new ClassDef(baseClassName,ClassDef::Class);
// add base class to this class
cd->insertBaseClass(baseClass,bi->prot,bi->virt,templSpec);
......@@ -1712,6 +1783,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
else
{
//printf(">>> base class %s not found!\n",bi->name.data());
Debug::print(Debug::Classes,0," Base class `%s' not found\n",bi->name.data());
}
}
if (scopeOffset==0)
......@@ -1759,7 +1831,7 @@ void computeClassRelations(Entry *root)
{
ClassDef *cd;
QCString bName=stripAnnonymousNamespaceScope(root->name);
//printf("Class %s\n",bName.data());
Debug::print(Debug::Classes,0," Class %s : \n",bName.data());
if ((cd=getClass(bName)))
{
//printf("Class %s %d\n",cd->name().data(),root->extends->count());
......@@ -2007,15 +2079,17 @@ static bool findUnrelatedFunction(Entry *root,
QCString n=name;
if (n.isEmpty()) return FALSE;
if (n.find("::")!=-1) return FALSE; // skip undefined class members
//printf("findUnrelatedFunction(namespace=%s,name=%s,tempArg=%s,decl=%s)\n",
// namespaceName.data(),name,tempArg,decl);
Debug::print(Debug::FindMembers,0,
"2. findUnrelatedFunction(namespace=%s,name=%s,tempArg=%s,decl=%s)\n",
namespaceName.data(),name,tempArg,decl);
MemberName *mn=functionNameDict[n+tempArg]; // look in function dictionary
if (mn==0)
{
mn=functionNameDict[n]; // try with template arguments
mn=functionNameDict[n]; // try without template arguments
}
if (mn) // function name defined
{
Debug::print(Debug::FindMembers,0,"3. Found function scope\n");
//int count=0;
MemberDef *md=mn->first();
bool found=FALSE;
......@@ -2028,6 +2102,9 @@ static bool findUnrelatedFunction(Entry *root,
//printf("File %s\n",fd ? fd->name().data() : "<none>");
NamespaceList *nl = fd ? fd->getUsedNamespaces() : 0;
//printf("NamespaceList %p\n",nl);
// search in the list of namespaces that are imported via a
// using declaration
bool viaUsingDirective = nl && nd && nl->find(nd)!=-1;
if ((namespaceName.isEmpty() && nd==0) || // not in a namespace
......@@ -2035,8 +2112,8 @@ static bool findUnrelatedFunction(Entry *root,
viaUsingDirective // member in `using' namespace
)
{
//printf("Adding docs `%s' to member `%s' in namespace `%s'\n",
// root->doc.data(),md->name().data(),namespaceName.data());
Debug::print(Debug::FindMembers,0,"4. Try to add member `%s' to scope `%s'\n",
md->name().data(),namespaceName.data());
//printf("Searching for match between %s and %s\n",
// argListToString(md->argumentList()).data(),
// argListToString(root->argList).data());
......@@ -2047,7 +2124,7 @@ static bool findUnrelatedFunction(Entry *root,
matchArguments(md->argumentList(),root->argList,0,nsName);
if (matching) // add docs to the member
{
//printf("Match found\n");
Debug::print(Debug::FindMembers,0,"5. Match found\n");
addMemberDocs(root,md,decl,FALSE);
found=TRUE;
}
......@@ -2235,26 +2312,14 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
);
//printf("scopeName=`%s'\n",scopeName.data());
bool isSpecialization = !root->scopeSpec.isEmpty() &&
root->scopeSpec != tempArgListToString(root->tArgList);
//bool isSpecialization = !root->scopeSpec.isEmpty() &&
// root->scopeSpec != tempArgListToString(root->tArgList);
//printf("1. scopeName=`%s' specialization=%d\n",
// scopeName.data(),isSpecialization
// );
// include template specifier in the scope if needed
if (!scopeName.isEmpty() && !root->scopeSpec.isEmpty() && isSpecialization)
{
//scopeName = insertTemplateSpecifierInScope(
// scopeName,removeRedundantWhiteSpace(root->scopeSpec));
//printf("2. scopeName=`%s'\n",scopeName.data());
}
// if this is a member template inside non template class, the parser puts
// template specifier in scopeSepc, so we copy it to the right location here
if (scopeName.isEmpty() && !root->scopeSpec.isEmpty() &&
root->memberSpec.isEmpty() && funcTempList.isEmpty()
)
// template specifier that was found is for a function
) // template specifier that was found is for a function
{
funcTempList = root->scopeSpec;
}
......@@ -2263,10 +2328,10 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
// if a related class name is specified and the class name could
// not be derived from the function declaration, then use the
// related field.
//printf("scopeName=`%s' classTempList=`%s' className=`%s'\n",
// scopeName.data(),classTempList.data(),className.data());
if (/*scopeName.isEmpty() &&*/ !related.isEmpty() && !isRelated)
{
//printf("scopeName=`%s' className=`%s' namespaceName=`%s'\n",
// scopeName.data(),className.data(),namespaceName.data());
if (!related.isEmpty() && !isRelated)
{ // related member, prefix user specified scope
isRelated=TRUE;
//scopeName=resolveDefines(related);
if (!scopeName.isEmpty() && scopeName!=related)
......@@ -2274,8 +2339,16 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
else
scopeName=related.copy();
}
else if (/*scopeName.isEmpty() &&*/ related.isEmpty() && root->parent &&
!root->parent->name.isEmpty())
// split scope into a namespace and a class part
extractNamespaceName(scopeName,className,namespaceName);
//printf("scopeName=`%s' className=`%s' namespaceName=`%s'\n",
// scopeName.data(),className.data(),namespaceName.data());
if (related.isEmpty() &&
root->parent &&
!root->parent->name.isEmpty()
) // prefix scope in which the member was found
{
Entry *p=root->parent;
while (p) // get full scope as class name
......@@ -2285,23 +2358,39 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
&& !sc.isEmpty() && sc[0]!='@'
)
{
QCString cn;
QCString nn;
extractNamespaceName(sc,cn,nn);
if (leftScopeMatch(nn,namespaceName) || namespaceName.isEmpty())
{
namespaceName=nn.copy();
}
if (leftScopeMatch(cn,className) || className.isEmpty())
{
className=cn.copy();
}
//printf("sc=`%s' cn=`%s' nn=`%s'\n",sc.data(),cn.data(),nn.data());
//printf("p->name=`%s' scopeName=`%s' classTempList=%s\n",
// p->name.data(),scopeName.data(),classTempList.data());
QCString tryScope;
QCString tryClass;
if (scopeName.find('<')==-1 && !classTempList.isEmpty())
tryScope=insertTemplateSpecifierInScope(scopeName,classTempList);
if (className.find('<')==-1 && !classTempList.isEmpty())
tryClass=insertTemplateSpecifierInScope(className,classTempList);
else
tryScope=scopeName.copy();
tryClass=className.copy();
//printf("tryScope=%s\n",tryScope.data());
//printf("tryClass=%s\n",tryClass.data());
if (leftScopeMatch(tryScope,sc))
if (leftScopeMatch(tryClass,cn))
break; // scope already present, so stop now
// prepend name to scope
if (!scopeName.isEmpty()) scopeName.prepend("::");
scopeName.prepend(sc);
break;
}
p=p->parent;
}
......@@ -2309,6 +2398,25 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
//printf("result: scope=%s\n",scopeName.data());
}
namespaceName=removeAnnonymousScopes(namespaceName);
// merge class and namespace scopes again
if (!namespaceName.isEmpty())
{
if (className.isEmpty())
{
scopeName=namespaceName;
}
else
{
scopeName=namespaceName+"::"+className;
}
}
else if (!className.isEmpty())
{
scopeName=className;
}
//printf("new scope=`%s'\n",scopeName.data());
if (!scopeName.isEmpty() &&
scopeName.find('<')==-1 &&
classTempList.isEmpty()
......@@ -2322,8 +2430,6 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
}
}
// see if (part of) the scope name is a namespace name
extractNamespaceName(scopeName,className,namespaceName);
QCString tempScopeName=scopeName.copy();
int ti=tempScopeName.find('<');
......@@ -2613,7 +2719,7 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
}
}
}
if (count==0)
if (count==0 && !(isFriend && funcType=="class"))
warn("Warning: no matching member found for \n%s\n"
"in file %s at line %d\n",
fullFuncDecl.data(),root->fileName.data(),root->startLine);
......@@ -2846,8 +2952,8 @@ void findMemberDocumentation(Entry *root)
int i,l;
QRegExp re("([a-zA-Z0-9: ]*\\*+[ \\*]*");
Debug::print(Debug::FindMembers,0,
"root->type=`%s' root->name=`%s' root->args=`%s' section=%x root->inLine=%d\n",
root->type.data(),root->name.data(),root->args.data(),root->section,root->inLine
"root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->inLine=%d\n",
root->type.data(),root->inside.data(),root->name.data(),root->args.data(),root->section,root->inLine
);
bool isFunc=TRUE;
if ((i=re.match(root->type,0,&l))!=-1) // func variable/typedef to func ptr
......@@ -2883,8 +2989,10 @@ void findMemberDocumentation(Entry *root)
((root->section==Entry::FUNCTION_SEC || // function
(root->section==Entry::VARIABLE_SEC &&
!root->type.isEmpty() && root->type.left(8)!="typedef " &&
root->type!="class" && root->type!="interface" &&
root->type!="struct" && root->type!="union")
compoundKeywordDict.find(root->type)==0
/*root->type!="class" && root->type!="interface" &&
root->type!="struct" && root->type!="union"*/
)
) &&
(!root->doc.isEmpty() || !root->brief.isEmpty() ||
root->bodyLine!=-1 || root->mGrpId!=-1 /*|| Config::extractAllFlag*/
......@@ -2896,6 +3004,7 @@ void findMemberDocumentation(Entry *root)
// root->name.data(),root->args.data(),root->exception.data());
//if (root->relates.length()) printf(" Relates %s\n",root->relates.data());
//printf("Inside=%s\n Relates=%s\n",root->inside.data(),root->relates.data());
if (!root->type.isEmpty())
{
findMember(root,
......@@ -2906,7 +3015,6 @@ void findMemberDocumentation(Entry *root)
root->exception,
root->relates,
FALSE,isFunc);
//}
}
else
{
......@@ -3364,7 +3472,7 @@ void generateFileDocs()
{
fd->writeDocumentation(*outputList);
}
if (src) // TODO: can this be TRUE for tag files?
if (src && !fd->isReference()) // TODO: can this be TRUE for tag files?
{
fd->writeSource(*outputList);
}
......@@ -4602,6 +4710,12 @@ int main(int argc,char **argv)
generateConfigFile(configName,shortList);
exit(1);
}
compoundKeywordDict.insert("class",(void *)8);
compoundKeywordDict.insert("struct",(void *)8);
compoundKeywordDict.insert("union",(void *)8);
compoundKeywordDict.insert("interface",(void *)8);
compoundKeywordDict.insert("exception",(void *)8);
QFileInfo configFileInfo1("Doxyfile"),configFileInfo2("doxyfile");
QCString config;
......@@ -4818,6 +4932,7 @@ int main(int argc,char **argv)
msg("Searching for member function documentation...\n");
findMemberDocumentation(root); // may introduce new members !
transferRelatedFunctionDocumentation();
msg("Freeing entry tree\n");
delete root;
......
......@@ -96,37 +96,44 @@ class Entry
CLASS_SEC = 0x00000001,
STRUCT_SEC = 0x00000002,
UNION_SEC = 0x00000004,
ENUM_SEC = 0x00000008,
EMPTY_SEC = 0x00000010,
PAGEDOC_SEC = 0x00000020,
VARIABLE_SEC = 0x00000040,
FUNCTION_SEC = 0x00000080,
TYPEDEF_SEC = 0x00000100,
CLASSDOC_SEC = 0x00000200,
MEMBERDOC_SEC = 0x00000400,
OVERLOADDOC_SEC = 0x00000800,
EXAMPLE_SEC = 0x00001000,
VARIABLEDOC_SEC = 0x00002000,
ENUMDOC_SEC = 0x00004000,
UNIONDOC_SEC = 0x00008000,
STRUCTDOC_SEC = 0x00010000,
SOURCE_SEC = 0x00020000,
HEADER_SEC = 0x00040000,
FILEDOC_SEC = 0x00080000,
DEFINEDOC_SEC = 0x00100000,
INCLUDE_SEC = 0x00200000,
DEFINE_SEC = 0x00400000,
GROUPDOC_SEC = 0x00800000,
NAMESPACE_SEC = 0x01000000,
NAMESPACEDOC_SEC = 0x02000000,
INTERFACE_SEC = 0x04000000,
INTERFACEDOC_SEC = 0x08000000,
MAINPAGEDOC_SEC = 0x10000000,
USINGDIR_SEC = 0x20000000,
COMPOUND_MASK = CLASS_SEC | STRUCT_SEC | UNION_SEC | INTERFACE_SEC,
COMPOUNDDOC_MASK = CLASSDOC_SEC | STRUCTDOC_SEC | UNIONDOC_SEC | INTERFACEDOC_SEC,
EXCEPTION_SEC = 0x00000008,
NAMESPACE_SEC = 0x00000010,
INTERFACE_SEC = 0x00000020,
COMPOUND_MASK = CLASS_SEC | STRUCT_SEC | UNION_SEC |
INTERFACE_SEC | EXCEPTION_SEC,
SCOPE_MASK = COMPOUND_MASK | NAMESPACE_SEC,
FILE_MASK = SOURCE_SEC | HEADER_SEC
CLASSDOC_SEC = 0x00000100,
STRUCTDOC_SEC = 0x00000200,
UNIONDOC_SEC = 0x00000400,
EXCEPTIONDOC_SEC = 0x00000800,
NAMESPACEDOC_SEC = 0x00001000,
INTERFACEDOC_SEC = 0x00002000,
COMPOUNDDOC_MASK = CLASSDOC_SEC | STRUCTDOC_SEC | UNIONDOC_SEC |
INTERFACEDOC_SEC | EXCEPTIONDOC_SEC,
SOURCE_SEC = 0x00010000,
HEADER_SEC = 0x00020000,
FILE_MASK = SOURCE_SEC | HEADER_SEC,
ENUMDOC_SEC = 0x00100000,
ENUM_SEC = 0x00200000,
EMPTY_SEC = 0x00300000,
PAGEDOC_SEC = 0x00400000,
VARIABLE_SEC = 0x00500000,
FUNCTION_SEC = 0x00600000,
TYPEDEF_SEC = 0x00700000,
MEMBERDOC_SEC = 0x00800000,
OVERLOADDOC_SEC = 0x00900000,
EXAMPLE_SEC = 0x00a00000,
VARIABLEDOC_SEC = 0x00b00000,
FILEDOC_SEC = 0x00c00000,
DEFINEDOC_SEC = 0x00d00000,
INCLUDE_SEC = 0x00e00000,
DEFINE_SEC = 0x00f00000,
GROUPDOC_SEC = 0x01000000,
USINGDIR_SEC = 0x01100000,
MAINPAGEDOC_SEC = 0x01200000
};
Entry();
......
......@@ -269,6 +269,7 @@ void FileDef::writeDocumentation(OutputList &ol)
case ClassDef::Struct: ol.writeString("struct"); break;
case ClassDef::Union: ol.writeString("union"); break;
case ClassDef::Interface: ol.writeString("interface"); break;
case ClassDef::Exception: ol.writeString("exception"); break;
}
ol.writeString(" ");
ol.insertMemberAlign();
......
......@@ -136,6 +136,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
case ClassDef::Struct: type="struct"; break;
case ClassDef::Union: type="union"; break;
case ClassDef::Interface: type="interface"; break;
case ClassDef::Exception: type="exception"; break;
}
ol.writeStartAnnoItem(type,cd->getOutputFileBase(),0,cd->name());
ol.writeEndAnnoItem(cd->name());
......
......@@ -184,7 +184,12 @@ void HtmlGenerator::writeStyleInfo(int part)
if (Config::htmlStyleSheet.isEmpty()) // write default style sheet
{
startPlainFile("doxygen.css");
t << "H1 { text-align: center }" << endl;
// alternative, cooler looking titles
//t << "H1 { text-align: center; border-width: thin none thin none;" << endl;
//t << " border-style : double; border-color : blue; padding-left : 1em; padding-right : 1em }" << endl;
t << "H1 { text-align: center; }" << endl;
t << "A.qindex {}" << endl;
t << "A.qindexRef {}" << endl;
t << "A.el { text-decoration: none; font-weight: bold }" << endl;
......
......@@ -211,7 +211,7 @@ void writeClassHierarchy(OutputList &ol)
ClassDef *cd=cli.current();
if (!hasVisibleRoot(cd->baseClasses()))
{
if (cd->isVisibleInHierarchy()) // WAS: isVisible()!
if (cd->isVisibleInHierarchy())
{
if (!started)
{
......@@ -399,7 +399,7 @@ void writeFileIndex(OutputList &ol)
{
bool doc = fd->isLinkableInProject();
bool src = fd->generateSource() || Config::sourceBrowseFlag;
if (doc || src)
if ((doc || src) && !fd->isReference())
{
//ol.writeIndexItem(fd->getReference(),fd->diskName(),
// fd->name());
......
......@@ -863,7 +863,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
//if (cd && (!isRelated() || templateArguments()!=0) &&
// ((al=scopeDefTemplateArguments()) || (al=cd->templateArguments()))
// )
if (scopeAl) // class template prefix
if (scopeAl && !related) // class template prefix
{
writeTemplatePrefix(ol,scopeAl);
}
......
......@@ -99,6 +99,7 @@ class MemberDef : public Definition
FileDef *getFileDef() { return fileDef; }
FileDef *getFileDec() { return fileDec; }
void setMemberClass(ClassDef *cd) { classDef=cd; }
void makeRelated() { related=TRUE; }
bool isRelated() const { return related; }
bool isStatic() const { return stat; }
bool isInline() const { return inLine; }
......
......@@ -63,7 +63,9 @@ void MemberList::countDecMembers()
case MemberDef::Variable: varCnt++,m_count++; break;
case MemberDef::Function: // fall through
case MemberDef::Signal: // fall through
case MemberDef::Slot: funcCnt++,m_count++; break;
case MemberDef::Slot: if (!md->isRelated() || md->memberClass())
funcCnt++,m_count++;
break;
case MemberDef::Enumeration: enumCnt++,m_count++; break;
case MemberDef::EnumValue: enumValCnt++,m_count++; break;
case MemberDef::Typedef: typeCnt++,m_count++; break;
......@@ -409,8 +411,10 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
MemberListIterator mli(*this);
for ( ; (md=mli.current()) ; ++mli )
{
if ( md->isFunction() || md->isSignal() ||
md->isSlot())
if (
( md->isFunction() || md->isSignal() || md->isSlot()) &&
( !md->isRelated() || md->memberClass() )
)
{
md->writeDeclaration(ol,cd,nd,fd,prevGroupId,inGroup);
prevGroupId = md->groupId();
......@@ -424,7 +428,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
MemberListIterator mli(*this);
for ( ; (md=mli.current()) ; ++mli )
{
if ( md->isFriend())
if (md->isFriend())
{
QCString type=md->typeString();
//printf("Friend: type=%s name=%s\n",type.data(),md->name().data());
......
......@@ -138,6 +138,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
case ClassDef::Struct: ol.writeString("struct"); break;
case ClassDef::Union: ol.writeString("union"); break;
case ClassDef::Interface: ol.writeString("interface"); break;
case ClassDef::Exception: ol.writeString("exception"); break;
}
ol.writeString(" ");
ol.insertMemberAlign();
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -2189,7 +2189,7 @@ VAR [vV][aA][rR]
lineCount();
BEGIN( ClassName );
}
<FindMembers>{B}*"interface"{BN}+ {
<FindMembers>{B}*"interface"{BN}+ { // M$/Corba IDL interface
isTypedef=FALSE;
current->section = Entry::INTERFACE_SEC;
addType( current ) ;
......@@ -2200,6 +2200,17 @@ VAR [vV][aA][rR]
lineCount();
BEGIN( ClassName );
}
<FindMembers>{B}*"exception"{BN}+ { // Corba IDL exception
isTypedef=FALSE;
current->section = Entry::EXCEPTION_SEC;
addType( current ) ;
current->type += " exception" ;
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
lineCount();
BEGIN( ClassName );
}
<FindMembers>{B}*(("typedef"{BN}+)?)"class"{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::CLASS_SEC;
......@@ -2897,7 +2908,7 @@ VAR [vV][aA][rR]
while (p)
{
// only look for class scopes, not namespace scopes
if (p->section & Entry::COMPOUND_MASK)
if ((p->section & Entry::COMPOUND_MASK) && !p->name.isEmpty())
{
//printf("Trying scope `%s'\n",p->name.data());
int i=p->name.findRev("::");
......@@ -3514,8 +3525,9 @@ VAR [vV][aA][rR]
lastClassTemplSpecContext = ClassVar;
BEGIN( ClassTemplSpec );
}
<ClassTemplSpec>">"({BN}*{SCOPENAME})? {
<ClassTemplSpec>">"({BN}*"::"{BN}*{SCOPENAME})? {
current->name += yytext;
lineCount();
if (--sharpCount<=0)
{
current->name = removeRedundantWhiteSpace(current->name);
......@@ -3580,7 +3592,7 @@ VAR [vV][aA][rR]
<BasesProt>"public" { baseProt = Public; }
<BasesProt>"protected" { baseProt = Protected; }
<BasesProt>"private" { baseProt = Private; }
<BasesProt>{BN} {}
<BasesProt>{BN} { lineCount(); }
<BasesProt>. { unput(*yytext); BEGIN(Bases); }
<Bases>("::")*{BN}*({ID}{BN}*"::"{BN}*)*{ID} {
//current->extends->append(
......@@ -3634,7 +3646,10 @@ VAR [vV][aA][rR]
current->extends->append(
new BaseInfo(baseName,baseProt,baseVirt)
);
baseProt=Private;
if (current->section == Entry::INTERFACE_SEC)
baseProt=Public;
else
baseProt=Private;
baseVirt=Normal;
baseName.resize(0);
BEGIN(BasesProt);
......@@ -3850,6 +3865,12 @@ VAR [vV][aA][rR]
current->startLine = yyLineNr;
BEGIN( ClassDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"idlexcept"{B}* {
current->section = Entry::EXCEPTIONDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( ClassDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"page"{B}* {
current->section = Entry::PAGEDOC_SEC;
current->fileName = yyFileName;
......
......@@ -527,6 +527,7 @@ class Translator
case ClassDef::Struct: result+=" Struct"; break;
case ClassDef::Union: result+=" Union"; break;
case ClassDef::Interface: result+=" Interface"; break;
case ClassDef::Exception: result+=" Exception"; break;
}
result+=" Reference";
return result;
......@@ -686,6 +687,7 @@ class Translator
case ClassDef::Struct: result+="struct"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="interface"; break;
case ClassDef::Exception: result+="exception"; break;
}
result+=" was generated from the following file";
if (single) result+=":"; else result+="s:";
......
......@@ -296,6 +296,7 @@ class TranslatorCzech : public Translator
case ClassDef::Struct: result+=" struktury"; break;
case ClassDef::Union: result+=" unie"; break;
case ClassDef::Interface: result+=" rozhrani"; break;
case ClassDef::Exception: result+=" exception"; break;
}
return result;
}
......@@ -454,6 +455,7 @@ class TranslatorCzech : public Translator
case ClassDef::Struct: result+="tuto strukturu"; break;
case ClassDef::Union: result+="tuto unii"; break;
case ClassDef::Interface: result+="toto rozhrani"; break;
case ClassDef::Exception: result+="exception"; break;
}
result+=" byla vygenerovana z nasledujiciho souboru";
if (single) result+=":"; else result+="s:";
......
......@@ -440,6 +440,7 @@ class TranslatorGerman : public Translator
case ClassDef::Struct: result+=" Strukturen"; break;
case ClassDef::Union: result+=" Varianten"; break;
case ClassDef::Interface: result+=" Interface"; break;
case ClassDef::Exception: result+=" Exception"; break;
}
result+="referenz";
return result;
......
......@@ -287,6 +287,7 @@ class TranslatorSpanish : public Translator
case ClassDef::Struct: result+=" Estructura"; break;
case ClassDef::Union: result+=" Unin"; break;
case ClassDef::Interface: result+=" Interface"; break;
case ClassDef::Exception: result+=" Exception"; break;
}
result+=" Referencia";
return result;
......
......@@ -473,6 +473,7 @@ class TranslatorFinnish : public Translator
case ClassDef::Struct: result+=" Struct"; break; // "Struct"
case ClassDef::Union: result+=" Union"; break; // "Union"
case ClassDef::Interface: result+=" Interface"; break; // "Interface"
case ClassDef::Exception: result+=" Exception"; break; // "Interface"
}
result+=" Referenssi"; // " Reference"
return result;
......
......@@ -499,6 +499,7 @@ class TranslatorFrench : public Translator
case ClassDef::Struct: result+="la structure "; break;
case ClassDef::Union: result+="l'union "; break;
case ClassDef::Interface: result+="l'interface "; break;
case ClassDef::Exception: result+="l'exception "; break;
}
result+=(QCString)clName;
......@@ -659,6 +660,7 @@ class TranslatorFrench : public Translator
case ClassDef::Struct: result+="structure"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="interface"; break;
case ClassDef::Exception: result+="exception"; break;
}
result+=" a été générée à partir ";
if (single) result+=" du fichier suivant :";
......
......@@ -538,6 +538,7 @@ class TranslatorItalian : public Translator
case ClassDef::Struct: result+="la struct "; break;
case ClassDef::Union: result+="la union "; break;
case ClassDef::Interface: result+="l'interfaccia "; break;
case ClassDef::Exception: result+="exception "; break;
}
result+=(QCString)clName;
return result;
......@@ -699,6 +700,7 @@ class TranslatorItalian : public Translator
case ClassDef::Struct: result+="struct"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="interfaccia"; break;
case ClassDef::Exception: result+="exception"; break;
}
result+=" è stata generata a partire ";
if (single) result+="dal seguente file:";
......
......@@ -270,6 +270,7 @@ class TranslatorDutch : public Translator
case ClassDef::Struct: result+=" Struct"; break;
case ClassDef::Union: result+=" Union"; break;
case ClassDef::Interface: result+=" Interface"; break;
case ClassDef::Exception: result+=" Exception"; break;
}
result+=" Referentie";
return result;
......@@ -403,6 +404,7 @@ class TranslatorDutch : public Translator
case ClassDef::Struct: result+="struct"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="interface"; break;
case ClassDef::Exception: result+="exception"; break;
}
result+=" is gegenereerd op grond van de volgende file";
if (single) result+=":"; else result+="s:";
......
......@@ -388,6 +388,7 @@ class TranslatorSwedish : public Translator
case ClassDef::Struct: result+=" strukt"; break;
case ClassDef::Union: result+=" union"; break;
case ClassDef::Interface: result+=" grnssnitt"; break;
case ClassDef::Exception: result+=" exception"; break;
}
result+="referens";
return result;
......@@ -525,6 +526,7 @@ class TranslatorSwedish : public Translator
case ClassDef::Struct: result+="denna strukt "; break;
case ClassDef::Union: result+="denna union "; break;
case ClassDef::Interface: result+="detta grnssnitt "; break;
case ClassDef::Exception: result+="exception "; break;
}
result+="var genererad frn fljande fil";
if (single) result+=":"; else result+="er:";
......
......@@ -59,6 +59,29 @@ bool isId(char c)
// return result;
//}
// remove all annoymous scopes from string s
QCString removeAnnonymousScopes(const QCString &s)
{
QCString result;
int i,ni,l=s.length();
int p=0;
while ((i=s.find('@',p))!=-1)
{
if (i>p+2) result+=s.mid(p,i-p-2);
if ((ni=s.find("::",i+1))!=-1)
{
p=ni+2;
}
else
{
p=l;
}
}
if (p!=l) result+=s.mid(p,l-p);
//printf("removeAnnonymousScopes(`%s')=`%s'\n",s.data(),result.data());
return result;
}
// strip annonymous left hand side part of the scope
QCString stripAnnonymousNamespaceScope(const QCString &s)
{
......@@ -85,7 +108,7 @@ void writePageRef(OutputList &ol,const char *cn,const char *mn)
ol.pushGeneratorState();
ol.enableAll();
//ol.enableAll();
ol.disable(OutputGenerator::Html);
ol.disable(OutputGenerator::Man);
if (Config::pdfHyperFlag) ol.disable(OutputGenerator::Latex);
......
......@@ -79,5 +79,6 @@ bool leftScopeMatch(const QCString &scope, const QCString &name);
void writePageRef(OutputList &ol,const char *cn,const char *mn);
QCString substituteKeywords(const QCString &s,const char *title);
int getPrefixIndex(const QCString &name);
QCString removeAnnonymousScopes(const QCString &s);
#endif
......@@ -8,7 +8,7 @@ TEMPLATE = app
CONFIG = qt warn_on release
TMAKE_CC = cc
TMAKE_CFLAGS = -w +a1
TMAKE_CFLAGS = -w +a1 -DAportable
TMAKE_CFLAGS_WARN_ON =
TMAKE_CFLAGS_WARN_OFF =
TMAKE_CFLAGS_RELEASE = -O
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment