Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
doxverilog
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
doxverilog
Commits
75cfc919
Commit
75cfc919
authored
Feb 27, 2000
by
dimitri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Release 2000-02-27
parent
b76d4ee1
Changes
38
Hide whitespace changes
Inline
Side-by-side
Showing
38 changed files
with
9686 additions
and
9301 deletions
+9686
-9301
INSTALL
INSTALL
+5
-5
README
README
+2
-2
VERSION
VERSION
+1
-1
config.doc
doc/config.doc
+19
-1
starting.doc
doc/starting.doc
+3
-4
classdef.cpp
src/classdef.cpp
+51
-12
classdef.h
src/classdef.h
+2
-1
config.cpp
src/config.cpp
+707
-682
config.h
src/config.h
+1
-0
config.l
src/config.l
+17
-5
debug.cpp
src/debug.cpp
+2
-0
debug.h
src/debug.h
+2
-1
diagram.cpp
src/diagram.cpp
+1
-1
dot.cpp
src/dot.cpp
+55
-24
doxygen.cpp
src/doxygen.cpp
+172
-57
entry.h
src/entry.h
+37
-30
filedef.cpp
src/filedef.cpp
+1
-0
groupdef.cpp
src/groupdef.cpp
+1
-0
htmlgen.cpp
src/htmlgen.cpp
+6
-1
index.cpp
src/index.cpp
+2
-2
memberdef.cpp
src/memberdef.cpp
+1
-1
memberdef.h
src/memberdef.h
+1
-0
memberlist.cpp
src/memberlist.cpp
+8
-4
namespacedef.cpp
src/namespacedef.cpp
+1
-0
scanner.cpp
src/scanner.cpp
+8521
-8460
scanner.l
src/scanner.l
+26
-5
translator.h
src/translator.h
+2
-0
translator_cz.h
src/translator_cz.h
+2
-0
translator_de.h
src/translator_de.h
+1
-0
translator_es.h
src/translator_es.h
+1
-0
translator_fi.h
src/translator_fi.h
+1
-0
translator_fr.h
src/translator_fr.h
+2
-0
translator_it.h
src/translator_it.h
+2
-0
translator_nl.h
src/translator_nl.h
+2
-0
translator_se.h
src/translator_se.h
+2
-0
util.cpp
src/util.cpp
+24
-1
util.h
src/util.h
+1
-0
tmake.conf
tmake/lib/hpux-cc/tmake.conf
+1
-1
No files found.
INSTALL
View file @
75cfc919
DOXYGEN Version 1.1.0-2000022
0
DOXYGEN Version 1.1.0-2000022
7
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-2000022
0
.src.tar.gz # uncompress the archive
gunzip doxygen-1.1.0-2000022
7
.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.0-2000022
0
.src.tar # unpack it
tar xf doxygen-1.1.0-2000022
7
.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 (2
0
February 2000)
Dimitri van Heesch (2
7
February 2000)
README
View file @
75cfc919
DOXYGEN Version 1.1.0-2000022
0
DOXYGEN Version 1.1.0-2000022
7
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 (2
0
February 2000)
Dimitri van Heesch (2
7
February 2000)
VERSION
View file @
75cfc919
1.1.0-2000022
0
1.1.0-2000022
7
doc/config.doc
View file @
75cfc919
...
@@ -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
>
...
...
doc/starting.doc
View file @
75cfc919
...
@@ -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
...
...
src/classdef.cpp
View file @
75cfc919
...
@@ -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
);
relatedMembers
.
inSort
(
md
);
if
(
Config
::
sortMembersFlag
)
relatedMembers
.
inSort
(
md
);
else
relatedMembers
.
append
(
md
);
}
}
else
if
(
md
->
isFriend
())
else
if
(
md
->
isFriend
())
{
{
friends
.
append
(
md
);
friends
.
append
(
md
);
relatedMembers
.
inSort
(
md
);
if
(
Config
::
sortMembersFlag
)
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
);
functionMembers
.
inSort
(
md
);
if
(
Config
::
sortMembersFlag
)
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
);
functionMembers
.
inSort
(
md
);
if
(
Config
::
sortMembersFlag
)
functionMembers
.
inSort
(
md
);
else
functionMembers
.
append
(
md
);
break
;
break
;
case
Public
:
case
Public
:
pubSlots
.
append
(
md
);
pubSlots
.
append
(
md
);
functionMembers
.
inSort
(
md
);
if
(
Config
::
sortMembersFlag
)
functionMembers
.
inSort
(
md
);
else
functionMembers
.
append
(
md
);
break
;
break
;
case
Private
:
case
Private
:
priSlots
.
append
(
md
);
priSlots
.
append
(
md
);
functionMembers
.
inSort
(
md
);
if
(
Config
::
sortMembersFlag
)
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
:
typedefMembers
.
inSort
(
md
);
if
(
Config
::
sortMembersFlag
)
typedefMembers
.
inSort
(
md
);
else
typedefMembers
.
append
(
md
);
break
;
break
;
case
MemberDef
:
:
Enumeration
:
case
MemberDef
:
:
Enumeration
:
enumMembers
.
inSort
(
md
);
if
(
Config
::
sortMembersFlag
)
enumMembers
.
inSort
(
md
);
else
enumMembers
.
append
(
md
);
break
;
break
;
case
MemberDef
:
:
EnumValue
:
case
MemberDef
:
:
EnumValue
:
enumValMembers
.
inSort
(
md
);
if
(
Config
::
sortMembersFlag
)
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
functionMembers
.
inSort
(
md
);
{
if
(
Config
::
sortMembersFlag
)
functionMembers
.
inSort
(
md
);
else
functionMembers
.
append
(
md
);
}
break
;
break
;
case
MemberDef
:
:
Variable
:
case
MemberDef
:
:
Variable
:
variableMembers
.
inSort
(
md
);
if
(
Config
::
sortMembersFlag
)
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
());
...
...
src/classdef.h
View file @
75cfc919
...
@@ -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
();
...
...
src/config.cpp
View file @
75cfc919
...
@@ -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 10
4
#define YY_NUM_RULES 10
5
#define YY_END_OF_BUFFER 10
5
#define YY_END_OF_BUFFER 10
6
static
yyconst
short
int
yy_accept
[
10
73
]
=
static
yyconst
short
int
yy_accept
[
10
89
]
=
{
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
[
1
084
]
=
static
yyconst
short
int
yy_base
[
1
100
]
=
{
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
[
1
084
]
=
static
yyconst
short
int
yy_def
[
1
100
]
=
{
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
[
14
41
]
=
static
yyconst
short
int
yy_nxt
[
14
59
]
=
{
0
,
{
0
,
10
72
,
347
,
19
,
19
,
66
,
67
,
66
,
109
,
110
,
109
,
10
88
,
350
,
19
,
19
,
66
,
67
,
66
,
109
,
110
,
109
,
10
72
,
348
,
73
,
66
,
67
,
66
,
100
,
83
,
74
,
1072
,
10
88
,
351
,
73
,
66
,
67
,
66
,
100
,
83
,
74
,
1088
,
71
,
77
,
81
,
75
,
164
,
79
,
76
,
78
,
4
78
,
72
,
71
,
77
,
81
,
75
,
164
,
79
,
76
,
78
,
4
83
,
72
,
84
,
101
,
130
,
131
,
82
,
80
,
4
79
,
165
,
20
,
20
,
84
,
101
,
130
,
131
,
82
,
80
,
4
84
,
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
,
17
1
,
88
,
96
,
97
,
313
,
172
,
86
,
44
,
85
,
95
,
17
2
,
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
,
69
4
,
155
,
104
,
66
,
87
,
103
,
66
,
67
,
66
,
118
,
69
6
,
155
,
104
,
66
,
67
,
66
,
31
4
,
105
,
41
7
,
45
,
45
,
135
,
156
,
136
,
67
,
66
,
31
7
,
105
,
69
7
,
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
,
1
86
,
124
,
149
,
109
,
110
,
109
,
150
,
187
,
196
,
162
,
1
69
,
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
,
63
2
,
329
,
447
,
336
,
451
,
473
,
511
,
439
,
700
,
701
,
42
2
,
6
99
,
702
,
51
,
469
,
705
,
506
,
537
,
52
,
18
,
18
,
6
39
,
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
,
33
4
,
434
,
442
,
446
,
448
,
526
,
566
,
568
,
571
,
505
,
33
7
,
516
,
447
,
451
,
524
,
532
,
573
,
517
,
575
,
616
,
5
26
,
435
,
443
,
447
,
628
,
527
,
567
,
569
,
572
,
506
,
5
78
,
453
,
448
,
452
,
511
,
533
,
574
,
702
,
576
,
525
,
5
27
,
706
,
707
,
708
,
629
,
711
,
20
,
18
,
712
,
713
,
5
79
,
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
,
54
3
,
542
,
541
,
540
,
539
,
548
,
547
,
546
,
545
,
544
,
54
1
,
540
,
539
,
538
,
537
,
53
8
,
535
,
534
,
533
,
532
,
531
,
530
,
529
,
528
,
525
,
53
6
,
535
,
534
,
531
,
530
,
529
,
528
,
527
,
526
,
523
,
52
4
,
523
,
522
,
521
,
520
,
517
,
516
,
515
,
514
,
513
,
52
2
,
521
,
520
,
519
,
518
,
515
,
514
,
513
,
510
,
509
,
5
12
,
509
,
508
,
507
,
504
,
503
,
502
,
501
,
500
,
499
,
5
08
,
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
,
28
7
,
286
,
283
,
282
,
281
,
280
,
279
,
278
,
289
,
288
,
28
5
,
284
,
283
,
282
,
281
,
280
,
279
,
278
,
277
,
27
6
,
275
,
272
,
271
,
270
,
269
,
268
,
267
,
266
,
277
,
27
4
,
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
,
19
7
,
194
,
193
,
192
,
191
,
190
,
201
,
200
,
199
,
198
,
19
5
,
194
,
193
,
192
,
191
,
190
,
189
,
18
8
,
185
,
184
,
183
,
182
,
181
,
180
,
179
,
178
,
189
,
18
6
,
185
,
184
,
183
,
182
,
181
,
180
,
179
,
178
,
1
77
,
119
,
176
,
116
,
175
,
174
,
173
,
170
,
169
,
168
,
1
19
,
177
,
116
,
176
,
175
,
174
,
171
,
168
,
167
,
166
,
16
7
,
166
,
163
,
160
,
159
,
158
,
157
,
154
,
153
,
147
,
16
3
,
160
,
159
,
158
,
157
,
154
,
153
,
147
,
146
,
145
,
14
6
,
145
,
144
,
143
,
142
,
141
,
140
,
139
,
134
,
133
,
14
4
,
143
,
142
,
141
,
140
,
139
,
134
,
133
,
132
,
129
,
1
32
,
129
,
128
,
127
,
126
,
125
,
121
,
119
,
68
,
112
,
1
28
,
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
,
10
72
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
,
10
88
,
1088
,
1088
,
1088
,
1088
,
1088
,
1088
,
1088
,
1088
,
1088
,
10
72
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
,
10
88
,
1088
,
1088
,
1088
,
1088
,
1088
,
1088
,
1088
,
1088
,
1088
,
10
72
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
,
10
88
,
1088
,
1088
,
1088
,
1088
,
1088
,
1088
,
1088
,
1088
,
1088
,
10
72
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
,
1072
10
88
,
1088
,
1088
,
1088
,
1088
,
1088
,
1088
,
1088
}
;
}
;
static
yyconst
short
int
yy_chk
[
14
41
]
=
static
yyconst
short
int
yy_chk
[
14
59
]
=
{
0
,
{
0
,
0
,
28
1
,
1
,
2
,
20
,
20
,
20
,
45
,
45
,
45
,
0
,
28
3
,
1
,
2
,
20
,
20
,
20
,
45
,
45
,
45
,
0
,
28
1
,
26
,
51
,
51
,
51
,
39
,
30
,
26
,
0
,
0
,
28
3
,
26
,
51
,
51
,
51
,
39
,
30
,
26
,
0
,
25
,
27
,
29
,
26
,
100
,
28
,
26
,
27
,
4
07
,
25
,
25
,
27
,
29
,
26
,
100
,
28
,
26
,
27
,
4
11
,
25
,
30
,
39
,
76
,
76
,
29
,
28
,
4
07
,
100
,
1
,
2
,
30
,
39
,
76
,
76
,
29
,
28
,
4
11
,
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
,
25
4
,
106
,
31
,
6
,
31
,
37
,
106
,
32
,
37
,
37
,
25
6
,
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
,
62
1
,
93
,
40
,
66
,
31
,
40
,
63
,
63
,
63
,
63
,
62
2
,
93
,
40
,
66
,
66
,
66
,
25
4
,
40
,
35
3
,
5
,
6
,
80
,
93
,
80
,
66
,
66
,
25
6
,
40
,
62
3
,
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
,
1
30
,
70
,
90
,
109
,
109
,
109
,
90
,
130
,
138
,
98
,
1
04
,
70
,
90
,
104
,
471
,
130
,
90
,
109
,
109
,
1
84
,
90
,
190
,
214
,
224
,
90
,
439
,
184
,
622
,
7
,
1
09
,
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
,
2
62
,
190
,
332
,
337
,
450
,
262
,
347
,
262
,
555
,
8
,
2
15
,
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
>=
10
73
)
if
(
yy_current_state
>=
10
89
)
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
]
!=
1
396
);
while
(
yy_base
[
yy_current_state
]
!=
1
414
);
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 29
5
"config.l"
#line 29
6
"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
9
0
:
case
9
1
:
YY_RULE_SETUP
YY_RULE_SETUP
#line 30
3
"config.l"
#line 30
4
"config.l"
{
(
*
s
)
+=
yytext
;
}
{
(
*
s
)
+=
yytext
;
}
YY_BREAK
YY_BREAK
case
9
1
:
case
9
2
:
YY_RULE_SETUP
YY_RULE_SETUP
#line 30
4
"config.l"
#line 30
5
"config.l"
{
lastState
=
YY_START
;
{
lastState
=
YY_START
;
BEGIN
(
GetQuotedString
);
BEGIN
(
GetQuotedString
);
tmpString
.
resize
(
0
);
tmpString
.
resize
(
0
);
}
}
YY_BREAK
YY_BREAK
case
9
2
:
case
9
3
:
YY_RULE_SETUP
YY_RULE_SETUP
#line 30
8
"config.l"
#line 30
9
"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
9
3
:
case
9
4
:
YY_RULE_SETUP
YY_RULE_SETUP
#line 31
3
"config.l"
#line 31
4
"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
9
4
:
case
9
5
:
YY_RULE_SETUP
YY_RULE_SETUP
#line 32
2
"config.l"
#line 32
3
"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
9
5
:
case
9
6
:
YY_RULE_SETUP
YY_RULE_SETUP
#line 33
5
"config.l"
#line 33
6
"config.l"
{
{
tmpString
+=
'"'
;
tmpString
+=
'"'
;
}
}
YY_BREAK
YY_BREAK
case
9
6
:
case
9
7
:
YY_RULE_SETUP
YY_RULE_SETUP
#line 33
8
"config.l"
#line 33
9
"config.l"
{
tmpString
+=*
yytext
;
}
{
tmpString
+=*
yytext
;
}
YY_BREAK
YY_BREAK
case
9
7
:
case
9
8
:
YY_RULE_SETUP
YY_RULE_SETUP
#line 3
39
"config.l"
#line 3
40
"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
9
8
:
case
9
9
:
YY_RULE_SETUP
YY_RULE_SETUP
#line 35
4
"config.l"
#line 35
5
"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
>=
10
73
)
if
(
yy_current_state
>=
10
89
)
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
>=
10
73
)
if
(
yy_current_state
>=
10
89
)
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
==
10
72
);
yy_is_jam
=
(
yy_current_state
==
10
88
);
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 36
3
"config.l"
#line 36
4
"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_DETAIL
S
_SEC and REPEAT_BRIEF tags are both set to YES then
\n
"
;
t
<<
"# If the ALWAYS_DETAIL
ED
_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
<<
"#
i
f the INHERIT_DOCS tag is set to YES (the default) then an undocumented
\n
"
;
t
<<
"#
I
f 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
<<
"#
i
f the INLINE_INFO tag is set to YES (the default) then a tag [inline]
\n
"
;
t
<<
"#
I
f 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
"
;
}
}
...
...
src/config.h
View file @
75cfc919
...
@@ -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
src/config.l
View file @
75cfc919
...
@@ -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_DETAIL
S
_SEC and REPEAT_BRIEF tags are both set to YES then\n";
t << "# If the ALWAYS_DETAIL
ED
_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 << "#
i
f the INHERIT_DOCS tag is set to YES (the default) then an undocumented\n";
t << "#
I
f 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 << "#
i
f the INLINE_INFO tag is set to YES (the default) then a tag [inline]\n";
t << "#
I
f 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";
}
}
...
...
src/debug.cpp
View file @
75cfc919
...
@@ -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
;
}
}
...
...
src/debug.h
View file @
75cfc919
...
@@ -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
);
...
...
src/diagram.cpp
View file @
75cfc919
...
@@ -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
;
}
}
src/dot.cpp
View file @
75cfc919
...
@@ -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,27 +863,42 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
...
@@ -848,27 +863,42 @@ 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
;
DotNode
*
bn
=
m_usedNodes
->
find
(
in
)
;
bool
doc
=
TRUE
,
src
=
FALSE
;
if
(
b
n
)
// file is already a node in the graph
if
(
b
fd
)
{
{
n
->
addChild
(
bn
,
0
,
0
,
0
);
in
=
bfd
->
absFilePath
();
bn
->
addParent
(
n
);
doc
=
bfd
->
isLinkableInProject
(
);
bn
->
setDistance
(
distance
);
src
=
bfd
->
generateSource
()
||
(
!
bfd
->
isReference
()
&&
Config
::
sourceBrowseFlag
);
}
}
else
if
(
doc
||
src
)
{
{
bn
=
new
DotNode
(
QCString
url
=
bfd
?
bfd
->
getOutputFileBase
().
data
()
:
""
;
m_curNodeNumber
++
,
if
(
!
doc
&&
src
)
ii
->
includeName
,
{
bfd
?
(
bfd
->
getReference
()
+
"$"
+
bfd
->
getOutputFileBase
()).
data
()
:
0
,
url
+=
"-source"
;
distance
}
);
DotNode
*
bn
=
m_usedNodes
->
find
(
in
);
if
(
distance
>
m_maxDistance
)
m_maxDistance
=
distance
;
if
(
bn
)
// file is already a node in the graph
n
->
addChild
(
bn
,
0
,
0
,
0
);
{
bn
->
addParent
(
n
);
n
->
addChild
(
bn
,
0
,
0
,
0
);
m_usedNodes
->
insert
(
in
,
bn
);
bn
->
addParent
(
n
);
if
(
bfd
)
buildGraph
(
bn
,
bfd
,
distance
+
1
);
bn
->
setDistance
(
distance
);
}
else
{
bn
=
new
DotNode
(
m_curNodeNumber
++
,
ii
->
includeName
,
bfd
?
(
bfd
->
getReference
()
+
"$"
+
url
).
data
()
:
0
,
distance
);
if
(
distance
>
m_maxDistance
)
m_maxDistance
=
distance
;
n
->
addChild
(
bn
,
0
,
0
,
0
);
bn
->
addParent
(
n
);
m_usedNodes
->
insert
(
in
,
bn
);
if
(
bfd
)
buildGraph
(
bn
,
bfd
,
distance
+
1
);
}
}
}
}
}
}
}
...
@@ -876,6 +906,7 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
...
@@ -876,6 +906,7 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
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
"
);
...
...
src/doxygen.cpp
View file @
75cfc919
...
@@ -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 with
out
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 namespac
e `%s'\n",
Debug
::
print
(
Debug
::
FindMembers
,
0
,
"4. Try to add member `%s' to scop
e `%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' class
TempList=`%s' class
Name=`%s'\n",
//printf("scopeName=`%s' class
Name=`%s' namespace
Name=`%s'\n",
// scopeName.data(),class
TempList.data(),class
Name.data());
// scopeName.data(),class
Name.data(),namespace
Name.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
try
Scope
;
QCString
try
Class
;
if
(
scope
Name
.
find
(
'<'
)
==-
1
&&
!
classTempList
.
isEmpty
())
if
(
class
Name
.
find
(
'<'
)
==-
1
&&
!
classTempList
.
isEmpty
())
try
Scope
=
insertTemplateSpecifierInScope
(
scope
Name
,
classTempList
);
try
Class
=
insertTemplateSpecifierInScope
(
class
Name
,
classTempList
);
else
else
try
Scope
=
scope
Name
.
copy
();
try
Class
=
class
Name
.
copy
();
//printf("try
Scope=%s\n",tryScope
.data());
//printf("try
Class=%s\n",tryClass
.data());
if
(
leftScopeMatch
(
try
Scope
,
sc
))
if
(
leftScopeMatch
(
try
Class
,
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
);
}
}
...
@@ -4602,6 +4710,12 @@ int main(int argc,char **argv)
...
@@ -4602,6 +4710,12 @@ int main(int argc,char **argv)
generateConfigFile
(
configName
,
shortList
);
generateConfigFile
(
configName
,
shortList
);
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
;
...
@@ -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
;
...
...
src/entry.h
View file @
75cfc919
...
@@ -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
();
...
...
src/filedef.cpp
View file @
75cfc919
...
@@ -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
();
...
...
src/groupdef.cpp
View file @
75cfc919
...
@@ -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
());
...
...
src/htmlgen.cpp
View file @
75cfc919
...
@@ -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
;
...
...
src/index.cpp
View file @
75cfc919
...
@@ -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());
...
...
src/memberdef.cpp
View file @
75cfc919
...
@@ -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
);
}
}
...
...
src/memberdef.h
View file @
75cfc919
...
@@ -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
;
}
...
...
src/memberlist.cpp
View file @
75cfc919
...
@@ -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());
...
...
src/namespacedef.cpp
View file @
75cfc919
...
@@ -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
();
...
...
src/scanner.cpp
View file @
75cfc919
This source diff could not be displayed because it is too large. You can
view the blob
instead.
src/scanner.l
View file @
75cfc919
...
@@ -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,7 +3646,10 @@ VAR [vV][aA][rR]
...
@@ -3634,7 +3646,10 @@ VAR [vV][aA][rR]
current->extends->append(
current->extends->append(
new BaseInfo(baseName,baseProt,baseVirt)
new BaseInfo(baseName,baseProt,baseVirt)
);
);
baseProt=Private;
if (current->section == Entry::INTERFACE_SEC)
baseProt=Public;
else
baseProt=Private;
baseVirt=Normal;
baseVirt=Normal;
baseName.resize(0);
baseName.resize(0);
BEGIN(BasesProt);
BEGIN(BasesProt);
...
@@ -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;
...
...
src/translator.h
View file @
75cfc919
...
@@ -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:"
;
...
...
src/translator_cz.h
View file @
75cfc919
...
@@ -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:"
;
...
...
src/translator_de.h
View file @
75cfc919
...
@@ -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
;
...
...
src/translator_es.h
View file @
75cfc919
...
@@ -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
;
...
...
src/translator_fi.h
View file @
75cfc919
...
@@ -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
;
...
...
src/translator_fr.h
View file @
75cfc919
...
@@ -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 :"
;
...
...
src/translator_it.h
View file @
75cfc919
...
@@ -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:"
;
...
...
src/translator_nl.h
View file @
75cfc919
...
@@ -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:"
;
...
...
src/translator_se.h
View file @
75cfc919
...
@@ -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:"
;
...
...
src/util.cpp
View file @
75cfc919
...
@@ -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
);
...
...
src/util.h
View file @
75cfc919
...
@@ -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
tmake/lib/hpux-cc/tmake.conf
View file @
75cfc919
...
@@ -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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment