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