]> git.draconx.ca Git - gob-dx.git/commitdiff
Release 2.0.12 v2.0.12
authorGeorge Lebl <jirka@5z.com>
Sat, 23 Jul 2005 06:15:00 +0000 (22:15 -0800)
committerNick Bowler <nbowler@draconx.ca>
Tue, 19 Feb 2019 17:34:08 +0000 (12:34 -0500)
25 files changed:
COPYING.generated-code
ChangeLog
NEWS
configure
configure.in
doc/gob2.1.in
examples/Makefile.am
examples/Makefile.in
examples/README
examples/my-glade-main.c [new file with mode: 0644]
examples/my-glade.glade [new file with mode: 0644]
examples/my-glade.gob [new file with mode: 0644]
gob2.spec
src/checks.c
src/checks.h
src/lexer.c
src/lexer.l
src/main.c
src/main.h
src/parse.c
src/parse.h
src/parse.y
src/treefuncs.c
src/treefuncs.def
src/treefuncs.h

index 82527ab9884ef08e74cca9519c3438c096bda629..29f2bf3a41427ff48ec5eab533d6ad18678c49eb 100644 (file)
@@ -1,505 +1,6 @@
-This is the license for the generated code.  It is the LGPL which you need to comply with anyway in order to link with Glib or GTK+.
-   - George <jirka@5z.com>
+The generated code (except for your code that is) is in the public domain.
+By generated code I mean the code that gob adds in addition to whatever
+you have in your .gob file.  Your code is under whatever license you want
+it to be.
 
-                    GNU LESSER GENERAL PUBLIC LICENSE
-                      Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-                 GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                           NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-Copyright (C) <year> <name of author>
-
-This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
+-George
index 2845d350e079007f1ff2380d012c4bf90e1537a9..13fa1c64780d418cfd3a1bb7a6ff43fa584825f2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,40 @@
+Fri Jul 22 13:10:20 2005  George Lebl <jirka@5z.com>
+
+       * Release 2.0.12
+
+       * doc/gob2.1.in: slight update
+
+Fri Jul 22 12:56:26 2005  George Lebl <jirka@5z.com>
+
+       * src/main.c: Apply patch from "Big Thor" <lirico@web.de> to
+         not use TYPE_SELF for the privates code
+
+Fri Jul 22 12:48:27 2005  George Lebl <jirka@5z.com>
+
+       * Apply patch from Nicolas Bruguier <gandalfn@club-internet.fr>
+         but changed the syntax slightly, fixed some minor glitches and
+         added documentation.
+
+       * src/check.[ch], src/lexer.l, src/main.[ch], src/parse.y, 
+         src/treefuncs.[ch],src/treefuncs.def: Add liglade support
+
+Fri Jul 22 11:41:20 2005  George Lebl <jirka@5z.com>
+
+       * src/lexer.l: allow parsing properties with no param spec, patch
+         from Jean-Yves Lefort <jylefort@brutele.be>
+
+Wed Jul 06 16:35:14 2005  George Lebl <jirka@5z.com>
+
+       * src/main.c: Apply patch from Jean-Yves Lefort <jylefort@brutele.be>
+         to fixup parameters: (remove MASK, CHILD_ARG and add LAX_VALIDATION
+         and PRIVATE, and allow user created parameters).
+
+Thu Dec 23 14:35:12 2004  George Lebl <jirka@5z.com>
+
+       * src/main.[ch], src/lexer.l:  Add support for prealloc and add
+         support for bitfields.  Patch from "K. Haley"
+         <haleykd@users.sourceforge.net>
+
 Tue Oct 26 16:30:44 2004  George Lebl <jirka@5z.com>
 
        * Release 2.0.11
@@ -136,7 +173,7 @@ Thu Feb 19 11:17:45 2004  George Lebl <jirka@5z.com>
          by tweaking the includes and removing the -W options from AM_CFLAGS
          as those are supported only by gcc
 
-2003-02-08  Tomasz K³oczko <kloczek@pld.org.pl>
+2003-02-08  Tomasz K³oczko <kloczek@pld.org.pl>
 
        * gob2.m4: Trivial fix: added missing [] quotation macro name
          defined in AC_DEFUN() (neccessary for aclocal from automake 1.8.x
diff --git a/NEWS b/NEWS
index 7e00747c052528cc6202175fb4e93b139d2d2dc3..bab32a5d715b20fb5026c97bbf46331876e663a5 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,10 @@
+2.0.12:
+       * libglade support (see manpage) (Nicolas Brugier)
+       * Fixes to property parsing and allow user created
+         parameters (Jean-Yves Lefort)
+       * Add support for prealloc and allow bitfields (K. Haley)
+       * Don't reference TYPE_SELF when generating privates (Big Thor)
+
 2.0.11:
        * When privates and overrides were used in 2.0.10 compilation of
          object may have broken on some compilers.
index d66e14b55334996bc7d2869c611f5e8ced904b21..9d6590f4cf9d7e5cb64a4cfe69527c35418c78a9 100755 (executable)
--- a/configure
+++ b/configure
@@ -1561,7 +1561,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE=gob2
- VERSION=2.0.11
+ VERSION=2.0.12
 
 
 cat >>confdefs.h <<_ACEOF
index fd759e672df5d44226266d1bc0b4022960f2d6ee..0359f69b832451a9ed42f28d70a1d9c5431a7b86 100644 (file)
@@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script.
 AC_PREREQ(2.2)
 AC_INIT(src/treefuncs.h)
 AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(gob2,2.0.11)
+AM_INIT_AUTOMAKE(gob2,2.0.12)
 AM_MAINTAINER_MODE
 
 GLIB_REQUIRED=2.0.0
index 0a591df2cdb61a090d6f54ecf3b57773c4d2445a..1d386a2c0a7941f93bfdbc1d378ccd6bb5858979 100644 (file)
@@ -1,6 +1,6 @@
 .\"
 .\" gob manual page
-.\" (C) 1999,2000,2001,2002 George Lebl <jirka@5z.com>
+.\" (C) 1999,2000,2001,2002,2005 George Lebl <jirka@5z.com>
 .\" 
 .\" This manual page is covered by the terms of the GNU General
 .\" Public License.  
@@ -444,7 +444,8 @@ There is a STRING type which has only the extra \'default_value\' attribute.
 .PP
 The OBJECT type is one of the types that doesn\'t have a \'default_value\' and it
 only has an \'object_type\' attribute (in addition to nick and blurb of course)
-that is the exact object type that this property accepts.
+that is the exact object type that this property accepts.  The object_type
+should be as a type, that is for example \'Gtk:Button\'.
 .PP
 There is a BOXED type which is a pointer which has a boxed type defined
 (such that GObject knows how to copy and destroy this pointer).  Here
@@ -1026,6 +1027,66 @@ for the correct prototypes if you can\'t figure them out from the idl itself.
 Also note that the first argument is not "self", but the servant and you must
 use bonobo_object_from_servant function to get the actual object pointer.
 
+.SH DIRECT LIBGLADE SUPPORT
+.PP
+Gob can simplify writing a libglade class.  Just create a new object that
+derives from a GtkContainer widget.  Then use a "GladeXML" class flag
+with the glade file name, root widget and optional domain  as arguments
+between double quotes.  For example:
+.nf
+
+class My:Glade from Gtk:Window (GladeXML "gob-libglade.glade" "root")
+{
+  ....
+}
+
+.fi
+Note however that then "gob-libglade.glade" would have to be in the current
+directory.  You could specify a path, but that may not work for all
+installations.  You can replace the glade filename with a token to be used
+in the generated .c file and you can then have a macro with the filename,
+as follows:
+.nf
+
+class My:Glade from Gtk:Window (GladeXML GLADE_FILE "root")
+{
+  ....
+}
+
+.fi
+And somewhere in your header files you would have
+.nf
+
+#define GLADE_FILE "/path/to/file.glade"
+
+.fi
+
+You can declare widgets as data members by adding a 'GladeXML' to
+the definition.
+.nf
+
+private Gtk:Button * button1 GladeXML;
+
+.fi
+This will automatically set the "button1" from the GladeXML file.
+
+All signals created with glade are automatically connected if you defined
+those class methods in your class.  For example suppose in glade that
+we set the "connect" signal on button1 to go to on_button1_clicked, then
+in our gob file we can just write:
+.nf
+
+public void
+on_button1_clicked(self, GtkButton * button)
+{
+}
+
+.fi
+
+See the examples directory for a full example.  Note that this feature
+requires version at least 2.0.12.
+
+
 .SH IDENTIFIER CONFLICTS
 .PP
 Gob will need to define some local variables and functions in the generated
index 42fe237ccf69678fb836058d23c56571606f84c9..a1a152cc6ccb1b9c80dbb4d959a4286443e0e206 100644 (file)
@@ -3,6 +3,10 @@ EXTRA_DIST = \
        gtk-button-count.gob    \
        my-person.gob           \
        GNOME_Foo_SomeInterface.idl \
-       foo-some-interface.gob
+       foo-some-interface.gob \
+       my-glade.gob            \
+       my-glade.glade          \
+       my-glade-main.c
+       
 
 SUBDIRS = .
index 72358539a5dcca1bb632b4e190df8883c288589f..1e42feb389682eccbd4f13e1051191d684ee9009 100644 (file)
@@ -145,7 +145,10 @@ EXTRA_DIST = \
        gtk-button-count.gob    \
        my-person.gob           \
        GNOME_Foo_SomeInterface.idl \
-       foo-some-interface.gob
+       foo-some-interface.gob \
+       my-glade.gob            \
+       my-glade.glade          \
+       my-glade-main.c
 
 all: all-recursive
 
index 228f420277df95984a9fc5bc6509bae436dba5e5..40b42cf076523725c0cf357bb49bd89f270d592b 100644 (file)
@@ -17,3 +17,8 @@ GNOME_Foo_SomeInterface.idl
 foo-some-interface.gob Example idl and gob file for a BonoboClass
                        implementation.  It can be this easy to write
                        Bonobo classes.
+
+my-glade.gob
+my-glade.glade
+my-glade-main.c                Example gob and glade file (plus a driver program)
+                       to use the libglade integration
diff --git a/examples/my-glade-main.c b/examples/my-glade-main.c
new file mode 100644 (file)
index 0000000..8e71f05
--- /dev/null
@@ -0,0 +1,51 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
+/*
+ * main.c
+ * Copyright (C) gandalfn 2005 <gandalfn@club-internet.fr>
+ * 
+ * main.c is free software.
+ * 
+ * You may redistribute it and/or modify it under the terms of the
+ * GNU General Public License, as published by the Free Software
+ * Foundation; either version 2, or (at your option) any later version.
+ * 
+ * main.c is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with main.c.  See the file "COPYING".  If not,
+ * write to:  The Free Software Foundation, Inc.,
+ *            59 Temple Place - Suite 330,
+ *            Boston,  MA  02111-1307, USA.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <config.h>
+
+#include <gtk/gtk.h>
+#include "my-glade.h"
+
+
+int
+main (int argc, char *argv[])
+{
+       GtkWidget *window1;
+
+
+       
+       gtk_set_locale ();
+       gtk_init (&argc, &argv);
+
+       window1 = my_glade_new();
+       gtk_widget_show (window1);
+
+       gtk_main ();
+       return 0;
+}
diff --git a/examples/my-glade.glade b/examples/my-glade.glade
new file mode 100644 (file)
index 0000000..d0ef617
--- /dev/null
@@ -0,0 +1,98 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkWindow" id="window1">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">window1</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="default_width">500</property>
+  <property name="default_height">400</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <signal name="delete_event" handler="gtk_main_quit" last_modification_time="Sun, 22 May 2005 16:00:42 GMT"/>
+
+  <child>
+    <widget class="GtkVBox" id="root">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child>
+       <widget class="GtkLabel" id="label1">
+         <property name="visible">True</property>
+         <property name="label" translatable="yes">Ceci est un test gob liglade</property>
+         <property name="use_underline">False</property>
+         <property name="use_markup">False</property>
+         <property name="justify">GTK_JUSTIFY_LEFT</property>
+         <property name="wrap">False</property>
+         <property name="selectable">False</property>
+         <property name="xalign">0.5</property>
+         <property name="yalign">0.5</property>
+         <property name="xpad">0</property>
+         <property name="ypad">0</property>
+         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+         <property name="width_chars">-1</property>
+         <property name="single_line_mode">False</property>
+         <property name="angle">0</property>
+       </widget>
+       <packing>
+         <property name="padding">0</property>
+         <property name="expand">True</property>
+         <property name="fill">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkHButtonBox" id="hbuttonbox1">
+         <property name="border_width">5</property>
+         <property name="visible">True</property>
+         <property name="layout_style">GTK_BUTTONBOX_SPREAD</property>
+         <property name="spacing">5</property>
+
+         <child>
+           <widget class="GtkButton" id="button1">
+             <property name="visible">True</property>
+             <property name="can_default">True</property>
+             <property name="can_focus">True</property>
+             <property name="label">gtk-about</property>
+             <property name="use_stock">True</property>
+             <property name="relief">GTK_RELIEF_NORMAL</property>
+             <property name="focus_on_click">True</property>
+             <signal name="clicked" handler="on_button1_clicked" last_modification_time="Sun, 22 May 2005 15:43:56 GMT"/>
+           </widget>
+         </child>
+
+         <child>
+           <widget class="GtkButton" id="button2">
+             <property name="visible">True</property>
+             <property name="can_default">True</property>
+             <property name="can_focus">True</property>
+             <property name="label">gtk-quit</property>
+             <property name="use_stock">True</property>
+             <property name="relief">GTK_RELIEF_NORMAL</property>
+             <property name="focus_on_click">True</property>
+             <signal name="clicked" handler="gtk_main_quit" last_modification_time="Sun, 22 May 2005 15:45:45 GMT"/>
+           </widget>
+         </child>
+       </widget>
+       <packing>
+         <property name="padding">0</property>
+         <property name="expand">False</property>
+         <property name="fill">False</property>
+       </packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+</glade-interface>
diff --git a/examples/my-glade.gob b/examples/my-glade.gob
new file mode 100644 (file)
index 0000000..41d12a2
--- /dev/null
@@ -0,0 +1,24 @@
+requires 2.0.12
+
+class My:Glade from Gtk:Window (GladeXML "my-glade.glade" "root")
+/* If you don't want to specify the glade file directly, you can use a global
+   variable or a macro as follows:
+ class My:Glade from Gtk:Window (GladeXML GLADE_FILE "root")
+*/
+{
+               private Gtk:Label * label1 GladeXML;
+               
+               public GtkWidget *
+               new(void)
+               {
+                       MyGlade * self = GET_NEW;
+                       
+                       return GTK_WIDGET(self);
+               }
+               
+               public void
+               on_button1_clicked(self, GtkButton * button)
+               {
+                       gtk_label_set_text(selfp->label1, "Vous venez d'appuyer sur le bouton A propos");
+               }
+}
index c57175fdb735ec8547e33a14bfb041e5249eb9e6..bb766a14e30e16f5696487bc11adc1731c1d2b0d 100644 (file)
--- a/gob2.spec
+++ b/gob2.spec
@@ -1,4 +1,4 @@
-%define  ver     2.0.11
+%define  ver     2.0.12
 %define  rel     1
 %define  prefix  /usr
 
index ab6b8b3098660dc1477f24a0b4458520f4a9dd95..63f44cc6f28babdcb66640b17eb8c344c8a92470 100644 (file)
@@ -676,6 +676,22 @@ count_initializers (Class *c)
        return num;
 }
 
+int
+count_glade_widgets (Class *c)
+{
+       int num = 0;
+       GList *li;
+       for (li = c->nodes; li != NULL; li = li->next) {
+               Node *n = li->data;
+               if (n->type == VARIABLE_NODE) {
+                       Variable *v = (Variable *)n;
+                       if (v->glade_widget)
+                               num++;
+               }
+       }
+       return num;
+}
+
 gboolean
 find_get_type (Class *c)
 {
index 69fe1392c601158dee8aed55db39a90233f47df9..88dd8d12e6cf58aa07ae75c16ca9a57098b2477d 100644 (file)
@@ -49,6 +49,7 @@ int           count_protecteds                (Class *c);
 int            count_unreftors                 (Class *c);
 int            count_destructors               (Class *c);
 int            count_initializers              (Class *c);
+int            count_glade_widgets             (Class *c);
 gboolean       find_get_type                   (Class *c);
 
 #endif
index dde247593c06311faf1cb7288c7da90e6d41aa46..368c7dc74ea66ad9f7ebc9591a8712d529408ca4 100644 (file)
@@ -284,139 +284,146 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
        *yy_cp = '\0'; \
        yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 113
-#define YY_END_OF_BUFFER 114
-static yyconst short int yy_acclist[615] =
+#define YY_NUM_RULES 120
+#define YY_END_OF_BUFFER 121
+static yyconst short int yy_acclist[651] =
     {   0,
-      114,  111,  113,  110,  111,  113,    1,  112,  113,  111,
-      112,  113,  111,  113,  111,  113,  111,  113,  100,  111,
-      113,  100,  111,  113,  111,  113,  104,  111,  113,  104,
-      111,  113,  104,  111,  113,  104,  111,  113,  110,  111,
-      113,  111,  113,  111,  113,  104,  111,  113,   29,  111,
-      113,    1,   30,  112,  113,   29,  111,  112,  113,   29,
-      111,  113,   29,  111,  113,   29,  111,  113,   53,  111,
-      113,    1,   54,  112,  113,   53,  111,  112,  113,   45,
-       53,  111,  113,   53,  111,  113,   53,  111,  113,   53,
-      111,  113,   51,   53,  111,  113,   52,   53,  111,  113,
-
-       53,  111,  113,   53,  111,  113,   49,  111,  113,    1,
-       50,  112,  113,   49,  111,  112,  113,   48,   49,  111,
-      113,   49,  111,  113,   49,  111,  113,  111,  113,  104,
-      111,  113,  104,  111,  113,  104,  111,  113,  107,  111,
-      113,  111,  113,  111,  113,  111,  113,  104,  111,  113,
-      104,  111,  113,  104,  111,  113,  104,  111,  113,  104,
-      111,  113,  104,  111,  113,  104,  111,  113,  104,  111,
-      113,  104,  111,  113,  104,  111,  113,  104,  111,  113,
-      104,  111,  113,  108,  111,  113,  109,  111,  113,   97,
-      111,  113,   46,  111,  113,   98,  111,  113,   99,  111,
-
-      113,  111,  113,  104,  111,  113,  104,  111,  113,  104,
-      111,  113,  104,  111,  113,  104,  111,  113,  104,  111,
-      113,  104,  111,  113,  104,  111,  113,  104,  111,  113,
-      104,  111,  113,  104,  111,  113,  104,  111,  113,   10,
-      111,  113,   10,  111,  112,  113,   10,  111,  113,   10,
-      111,  113,   10,  111,  113,   10,  111,  113,   15,  111,
-      113,   15,  111,  112,  113,   15,  111,  113,   15,  111,
-      113,   15,  111,  113,   15,  111,  113,   18,  111,  113,
-       18,  111,  112,  113,   18,  111,  113,   18,  111,  113,
-      100,   23,  100,  100,  103,  104,  102,  104,  104,  104,
-
-      104,   36,  104,   28,   24,   44,   37,   47,   25,  104,
-      104,  104,   26,  106,  104,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-      104,  104,   27,  104,  104,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,    9,    7,   14,   13,   11,
-       12,   14,   17,   16,  105,  105,  100,    3,  100,  100,
-      103,  103,  102,  101,  102,  104,  104,  104,  104,   31,
-       35,  104,   42,   38,   40,   19,   20,  104,  104,  104,
-       75,   21,  104,  104,  104,  104,  104,  104,  104,   70,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-
-      104,  104,  104,   22,  104,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,  104,   12,  103,  102,  101,
-      102,  104,   57,  104,  104,  104,   32,   33,   34,  104,
-       43,   39,   41,  104,   61,  104,   60,  104,    6,  104,
-       73,  104,  104,  104,  104,   65,  104,  104,   68,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-      104,   62,  104,  104,  104,  104,   65,  104,  104,  104,
-      104,   85,  104,  104,  104,  104,   91,  104,    8,   55,
-      104,   56,  104,   58,  104,  104,  104,   60,  104,   74,
-      104,  104,   71,  104,  104,  104,  104,  104,  104,   69,
-
-      104,  104,  104,  104,   64,  104,  104,  104,   86,  104,
-      104,  104,  104,   90,  104,  104,  104,  104,  104,  104,
-      104,  104,   72,  104,  104,  104,  104,  104,   76,  104,
-       82,  104,   66,  104,   63,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,  104,    4,  104,  104,  104,
-      104,   77,  104,  104,  104,  104,   81,  104,  104,  104,
-      104,  104,   87,  104,   88,  104,  104,  104,  104,   80,
-      104,  104,   83,  104,   84,  104,  104,   67,  104,  104,
-      104,  104,  104,  104,  104,   79,  104,   78,  104,  104,
-      104,   93,  104,  104,  104,  104,    4,    2,   95,  104,
-
-      104,   92,  104,  104,   94,  104,    5,  104,   96,  104,
-      104,   89,  104,   59
+      121,  117,  120,  116,  117,  120,    1,  118,  120,  117,
+      118,  120,  117,  120,  117,  120,  117,  120,  105,  117,
+      120,  105,  117,  120,  117,  120,  109,  117,  120,  109,
+      117,  120,  109,  117,  120,  109,  117,  120,  116,  117,
+      120,  117,  120,  117,  120,  109,  117,  120,  109,  117,
+      120,   29,  117,  120,    1,   30,  118,  120,   29,  117,
+      118,  120,   29,  117,  120,   29,  117,  120,   29,  117,
+      120,   53,  117,  120,    1,   54,  118,  120,   53,  117,
+      118,  120,   45,   53,  117,  120,   53,  117,  120,   53,
+      117,  120,   53,  117,  120,   51,   53,  117,  120,   52,
+
+       53,  117,  120,   53,  117,  120,   53,  117,  120,   49,
+      117,  120,    1,   50,  118,  120,   49,  117,  118,  120,
+       48,   49,  117,  120,   49,  117,  120,   49,  117,  120,
+       62,  117,  120,  117,  120,  109,  117,  120,  109,  117,
+      120,  109,  117,  120,  113,  117,  120,   65,  117,  120,
+        1,   66,  118,  120,   65,  117,  118,  120,   64,   65,
+      117,  120,   65,  117,  120,   65,  117,  120,  117,  120,
+      117,  120,  117,  120,  117,  120,  109,  117,  120,  109,
+      117,  120,  109,  117,  120,  109,  117,  120,  109,  117,
+      120,  109,  117,  120,  109,  117,  120,  109,  117,  120,
+
+      109,  117,  120,  109,  117,  120,  109,  117,  120,  109,
+      117,  120,  114,  117,  120,  115,  117,  120,  102,  117,
+      120,   46,  117,  120,  103,  117,  120,  104,  117,  120,
+      117,  120,  109,  117,  120,  109,  117,  120,  109,  117,
+      120,  109,  117,  120,  109,  117,  120,  109,  117,  120,
+      109,  117,  120,  109,  117,  120,  109,  117,  120,  109,
+      117,  120,  109,  117,  120,  109,  117,  120,   10,  117,
+      120,   10,  117,  118,  120,   10,  117,  120,   10,  117,
+      120,   10,  117,  120,   10,  117,  120,   15,  117,  120,
+       15,  117,  118,  120,   15,  117,  120,   15,  117,  120,
+
+       15,  117,  120,   15,  117,  120,   18,  117,  120,   18,
+      117,  118,  120,   18,  117,  120,   18,  117,  120,  105,
+       23,  105,  105,  108,  109,  109,  109,  109,  109,   36,
+      109,  109,   28,   24,   44,   37,   47,   25,  109,  109,
+      109,   63,   26,  112,  111,  109,  109,  109,  109,  109,
+      109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
+      109,  109,  109,   27,  109,  109,  109,  109,  109,  109,
+      109,  109,  109,  109,  109,  109,    9,    7,   14,   13,
+       11,   12,   14,   17,   16,  110,  110,  105,    3,  105,
+      105,  108,  106,  107,  109,  109,  109,  109,   31,   35,
+
+      109,  109,   42,   38,   40,   19,   20,  109,  109,  109,
+       80,   21,  109,  109,  109,  109,  109,  109,  109,   75,
+      109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
+      109,  109,  109,   22,  109,  109,  109,  109,  109,  109,
+      109,  109,  109,  109,  109,  109,   12,  108,  106,  107,
+      109,   57,  109,  109,  109,   32,   33,   34,  109,  109,
+       43,   39,   41,  109,   61,  109,   60,  109,    6,  109,
+       78,  109,  109,  109,  109,   70,  109,  109,   73,  109,
+      109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
+      109,   67,  109,  109,  109,  109,   70,  109,  109,  109,
+
+      109,   90,  109,  109,  109,  109,   96,  109,    8,  108,
+       55,  109,   56,  109,   58,  109,  109,  109,  109,   60,
+      109,   79,  109,  109,   76,  109,  109,  109,  109,  109,
+      109,   74,  109,  109,  109,  109,   69,  109,  109,  109,
+       91,  109,  109,  109,  109,   95,  109,  109,  109,  109,
+      109,  109,  109,  109,  109,   77,  109,  109,  109,  109,
+      109,   81,  109,   87,  109,   71,  109,   68,  109,  109,
+      109,  109,  109,  109,  109,  109,  109,  109,  109,    4,
+      109,  109,  109,  109,  109,   82,  109,  109,  109,  109,
+       86,  109,  109,  109,  109,  109,   92,  109,   93,  109,
+
+      109,  109,  109,  109,   85,  109,  109,   88,  109,   89,
+      109,  109,   72,  109,  109,  109,  109,  109,  109,  109,
+       84,  109,   83,  109,  109,  109,   98,  109,  109,  109,
+      109,    4,    2,  100,  109,  109,   97,  109,  109,   99,
+      109,  119,    5,  109,  101,  109,  109,   94,  109,   59
     } ;
 
-static yyconst short int yy_accept[517] =
+static yyconst short int yy_accept[552] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    2,    4,    7,   10,   13,   15,   17,
-       19,   22,   25,   27,   30,   33,   36,   39,   42,   44,
-       46,   49,   52,   56,   60,   63,   66,   69,   72,   76,
-       80,   84,   87,   90,   93,   97,  101,  104,  107,  110,
-      114,  118,  122,  125,  128,  130,  133,  136,  139,  142,
-      144,  146,  148,  151,  154,  157,  160,  163,  166,  169,
-      172,  175,  178,  181,  184,  187,  190,  193,  196,  199,
-      202,  204,  207,  210,  213,  216,  219,  222,  225,  228,
-
-      231,  234,  237,  240,  243,  247,  250,  253,  256,  259,
-      262,  266,  269,  272,  275,  278,  281,  285,  288,  291,
-      291,  291,  292,  293,  293,  293,  294,  294,  294,  295,
-      296,  297,  298,  299,  300,  301,  302,  302,  302,  302,
-      302,  302,  302,  302,  303,  304,  305,  305,  305,  305,
-      305,  305,  306,  306,  307,  307,  307,  308,  309,  310,
-      310,  311,  312,  313,  313,  314,  314,  314,  314,  315,
-      316,  317,  318,  319,  320,  321,  322,  323,  324,  325,
-      326,  327,  328,  329,  330,  331,  332,  333,  334,  334,
-      335,  336,  337,  338,  339,  340,  341,  342,  343,  344,
-
-      345,  346,  347,  347,  347,  347,  348,  348,  349,  349,
-      349,  350,  351,  351,  353,  354,  355,  356,  356,  357,
-      358,  358,  359,  360,  361,  362,  363,  364,  366,  367,
-      368,  369,  370,  370,  370,  370,  370,  371,  371,  371,
-      372,  372,  372,  373,  373,  374,  374,  374,  374,  375,
-      376,  376,  377,  377,  377,  378,  379,  380,  381,  382,
-      382,  382,  383,  383,  383,  384,  385,  386,  387,  388,
-      389,  390,  392,  393,  394,  395,  396,  397,  398,  399,
-      400,  401,  402,  403,  404,  404,  405,  406,  407,  408,
-      409,  410,  411,  412,  413,  414,  415,  416,  417,  417,
-
-      418,  418,  419,  420,  422,  423,  425,  426,  427,  427,
-      427,  427,  428,  428,  429,  430,  430,  431,  431,  432,
-      433,  434,  434,  435,  437,  439,  439,  440,  441,  443,
-      444,  445,  446,  448,  449,  451,  452,  453,  454,  455,
-      456,  457,  458,  459,  460,  461,  462,  464,  465,  466,
-      467,  469,  470,  471,  472,  474,  475,  476,  477,  479,
-      479,  480,  480,  480,  482,  484,  486,  486,  486,  486,
-      486,  486,  487,  487,  487,  488,  490,  492,  493,  495,
-      496,  497,  498,  499,  500,  502,  503,  504,  505,  507,
-      508,  509,  511,  512,  513,  514,  516,  517,  518,  519,
-
-      520,  520,  520,  520,  520,  520,  521,  521,  521,  522,
-      523,  525,  526,  527,  528,  529,  531,  533,  535,  537,
-      538,  539,  540,  541,  542,  543,  544,  545,  546,  547,
-      547,  548,  548,  548,  549,  549,  549,  550,  551,  552,
-      554,  555,  556,  557,  559,  560,  561,  562,  563,  565,
-      567,  568,  569,  569,  569,  569,  569,  570,  570,  570,
-      572,  573,  575,  577,  578,  580,  581,  582,  583,  584,
-      585,  586,  586,  586,  586,  586,  586,  586,  586,  586,
-      588,  590,  591,  592,  594,  595,  596,  597,  597,  598,
-      598,  598,  598,  599,  599,  601,  602,  604,  605,  607,
-
-      607,  607,  607,  608,  609,  611,  611,  611,  612,  612,
-      612,  614,  614,  614,  615,  615
+        1,    1,    1,    1,    1,    2,    4,    7,   10,   13,
+       15,   17,   19,   22,   25,   27,   30,   33,   36,   39,
+       42,   44,   46,   49,   52,   55,   59,   63,   66,   69,
+       72,   75,   79,   83,   87,   90,   93,   96,  100,  104,
+      107,  110,  113,  117,  121,  125,  128,  131,  134,  136,
+      139,  142,  145,  148,  151,  155,  159,  163,  166,  169,
+      171,  173,  175,  177,  180,  183,  186,  189,  192,  195,
+      198,  201,  204,  207,  210,  213,  216,  219,  222,  225,
+
+      228,  231,  233,  236,  239,  242,  245,  248,  251,  254,
+      257,  260,  263,  266,  269,  272,  276,  279,  282,  285,
+      288,  291,  295,  298,  301,  304,  307,  310,  314,  317,
+      320,  320,  320,  321,  322,  322,  322,  323,  323,  323,
+      324,  325,  326,  326,  327,  328,  329,  330,  330,  330,
+      330,  330,  330,  330,  330,  330,  331,  332,  333,  334,
+      334,  334,  334,  334,  334,  335,  335,  336,  336,  336,
+      337,  338,  339,  339,  340,  341,  342,  343,  343,  344,
+      344,  345,  345,  345,  346,  347,  348,  349,  350,  351,
+      352,  353,  354,  355,  356,  357,  358,  359,  360,  361,
+
+      362,  363,  364,  365,  365,  366,  367,  368,  369,  370,
+      371,  372,  373,  374,  375,  376,  377,  378,  378,  378,
+      378,  379,  379,  380,  380,  380,  381,  382,  382,  384,
+      385,  386,  387,  387,  388,  389,  389,  390,  391,  392,
+      393,  393,  394,  395,  396,  397,  398,  399,  399,  399,
+      399,  399,  399,  400,  400,  400,  401,  401,  401,  402,
+      403,  403,  404,  404,  404,  404,  405,  406,  406,  407,
+      407,  407,  408,  409,  410,  411,  412,  412,  412,  413,
+      413,  413,  414,  415,  416,  417,  418,  419,  420,  422,
+      423,  424,  425,  426,  427,  428,  429,  430,  431,  432,
+
+      433,  434,  434,  435,  436,  437,  438,  439,  440,  441,
+      442,  443,  444,  445,  446,  447,  447,  448,  448,  449,
+      450,  450,  451,  451,  452,  454,  455,  456,  456,  456,
+      456,  456,  457,  457,  458,  459,  459,  460,  461,  461,
+      462,  463,  464,  464,  465,  467,  469,  469,  470,  471,
+      473,  474,  475,  476,  478,  479,  481,  482,  483,  484,
+      485,  486,  487,  488,  489,  490,  491,  492,  494,  495,
+      496,  497,  499,  500,  501,  502,  504,  505,  506,  507,
+      509,  509,  510,  510,  510,  511,  513,  515,  517,  517,
+      517,  517,  517,  517,  517,  518,  519,  519,  519,  520,
+
+      522,  524,  525,  527,  528,  529,  530,  531,  532,  534,
+      535,  536,  537,  539,  540,  541,  543,  544,  545,  546,
+      548,  549,  550,  551,  552,  552,  552,  552,  552,  552,
+      552,  553,  554,  554,  554,  555,  556,  558,  559,  560,
+      561,  562,  564,  566,  568,  570,  571,  572,  573,  574,
+      575,  576,  577,  578,  579,  580,  580,  580,  581,  581,
+      581,  582,  583,  583,  583,  584,  585,  586,  588,  589,
+      590,  591,  593,  594,  595,  596,  597,  599,  601,  602,
+      603,  603,  603,  603,  603,  603,  604,  605,  605,  605,
+      607,  608,  610,  612,  613,  615,  616,  617,  618,  619,
+
+      620,  621,  621,  621,  621,  621,  621,  621,  621,  621,
+      621,  621,  623,  625,  626,  627,  629,  630,  631,  632,
+      632,  633,  633,  633,  633,  633,  634,  634,  636,  637,
+      639,  640,  642,  642,  642,  643,  643,  643,  644,  645,
+      647,  647,  647,  648,  648,  648,  650,  650,  650,  651,
+      651
     } ;
 
 static yyconst int yy_ec[256] =
@@ -461,282 +468,299 @@ static yyconst int yy_meta[60] =
         8,    8,    8,    8,    8,    8,    8,    1,    1
     } ;
 
-static yyconst short int yy_base[546] =
+static yyconst short int yy_base[585] =
     {   0,
-        0,   58,   58,   65,   69,  126,   80,   85,   60,   86,
-      172, 1224,  102,  111,  225, 1223,  101,  149,  140,  158,
-      162,  165, 1230, 1233, 1233, 1233, 1233, 1199,  163,   67,
-      177,  225,    0, 1208,   42,   57,   45,  196,  103,  164,
-      105, 1233, 1233, 1233, 1212,  114, 1198, 1233, 1233, 1233,
-     1233,  169,   87,    0, 1233, 1233,  209, 1166, 1233, 1233,
-     1233, 1233,    0,  212,  117,  130,   61,  149, 1233,  266,
-      175,  270,  197,  255,   49,  157,  139,  209,  201,  152,
-      214,  270,  245,  272, 1233, 1233, 1233, 1233, 1233, 1233,
-      236,  261,  274,  278,  254,  273,  283,  277,  218,  225,
-
-      286,  276,  284, 1233, 1233, 1209,  326,  328,  334, 1233,
-     1233, 1208,  339,  340,  341, 1219, 1218,  320,  355, 1210,
-     1209,  346, 1233, 1215,  350,  357,  363,    0,  369, 1197,
-     1196, 1195,  287,  215,  309,  358,  387, 1177,  388, 1172,
-      348,  358,  310, 1233,  376, 1233,    0, 1202,  344, 1201,
-     1200, 1233, 1206, 1233,  395, 1162, 1233, 1233, 1233, 1204,
-      378,  384,  385, 1192, 1192, 1201,  396, 1172, 1173,  389,
-      387,  388,  397,  398,  399,  402,  403,  404,  333,  413,
-      410,  409,  414,  415,  418,  420,  421, 1233, 1198,  422,
-      292,  425,  426,  438,  427,  428,  437,  444,  441,  448,
-
-      446, 1233,  471,  486,  493, 1233,  495, 1233,  498,  500,
-      506, 1233, 1185, 1233, 1233, 1233, 1233, 1189, 1188,  500,
-     1194, 1233,  504,    0, 1176, 1175, 1174, 1173,  456,  460,
-      490,  494, 1143, 1145, 1146, 1131, 1233, 1155, 1129, 1233,
-     1128, 1144,  473, 1157, 1233, 1173, 1172, 1171, 1233, 1233,
-     1177, 1233, 1144, 1175, 1233,  504,  505,  507, 1233,  526,
-     1174, 1233, 1145,  522,  510,  511,  514,  515,  447,  522,
-      516, 1155,  523,  524,  525,  528,  526,  527,  532,  531,
-      534,  544,  536,  537, 1171, 1233,  539,  549,  562,  548,
-      551,  555,  563,  567,  571,  572,  552,  574,  597, 1233,
-
-      610, 1153, 1152, 1151,  577, 1150,  581,  582, 1116, 1131,
-      557, 1233, 1131, 1233, 1233, 1112,  586, 1139, 1233, 1233,
-     1233, 1120,  587, 1143, 1142,  616, 1233,  594, 1141,  600,
-      601,  603, 1140,  604, 1139,  605,  609,  606,  612,  616,
-      610,  615,  624,  614,  625,  617, 1138,  620,  630,  621,
-      458,  626,  638,  641, 1137,  643,  645,  647, 1136,  666,
-     1233,  673,  679, 1135, 1134, 1133, 1111,  685, 1104, 1113,
-     1116,  651,    0, 1095,  660,  653, 1127,  668, 1126,  669,
-      672,  675,  674,  676, 1125,  678,  679,  680, 1124,  682,
-      683, 1123,  686,  687,  684,  694,  692,  693,  697,  701,
-
-     1092,  721, 1093, 1090, 1087,  710, 1108, 1088,  709,  700,
-     1103,  699,  714,  722,  723, 1094, 1087, 1074, 1073,  724,
-      728,  730,  732,  733,  734,  736,  738,  737,  739, 1055,
-      760,  712, 1040,  743, 1031,  993,  740,  751,  748,  993,
-      745,  760,  753,  987,  747,  768,  773,  775,  979,  970,
-      776,  778,  924,  907,  866,  872,  797,  788,  806,  891,
-      781,  890,  889,  789,  888,  790,  791,  793,  794,  795,
-      796,  817,  899,  847,  857,  831,  837,  845,  813,  868,
-      860,  802,  807,  854,  804,  811,  806,  866, 1233,  839,
-      851,  859, 1233,  829,  540,  838,  462,  809,  335,  273,
-
-      867,  859, 1233,  840,  237,  217,  873,  859,  150,  881,
-      172,  899,  901, 1233, 1233,  918,  927,  936,  945,  954,
-      963,  972,  975,  979,  987,  996, 1001, 1010, 1019, 1024,
-     1027, 1031, 1039, 1048, 1057, 1066, 1071, 1080, 1088, 1092,
-     1096, 1103, 1111, 1120, 1129
+        0,   58,   58,   65,   69,  126,   80,   85,   74,   87,
+       93,  113,  172, 1318,  131,  136,  225, 1317,  100,  147,
+      135,  159,  175,  190, 1324, 1327, 1327, 1327, 1327, 1293,
+      225,   62,  231,  237,    0, 1302,   42,  150,   60,  232,
+       63,  164,  156,   77, 1327, 1327, 1327, 1306,  173, 1292,
+     1327, 1327, 1327, 1327,  245,  104,    0, 1327, 1327,  279,
+     1260, 1327, 1327, 1327, 1327,    0,  262, 1327,  144,  110,
+      161,  143, 1327, 1327, 1327, 1327, 1327,    0,  282,  275,
+      214,  279,  283,  171,  285,  263,  182,  138,  219,  266,
+      179,  287,  295,  270,  292, 1327, 1327, 1327, 1327, 1327,
+
+     1327,  296,  297,  298,  311,  288,  170,  310,  226,  308,
+      326,  329,  299,  307, 1327, 1327, 1303,  351,  359,  360,
+     1327, 1327, 1302,  365,  366,  371, 1313, 1312,  373,  377,
+     1304, 1303,  373, 1327, 1309,  377,  383,  390,    0,  397,
+     1291, 1290, 1289,  365,  302,  332,  385,  417, 1258, 1270,
+      418, 1265,  373,  375,  310, 1327,  198,  402, 1327,    0,
+     1295,  380, 1294, 1293, 1327, 1299, 1327,  428, 1255, 1327,
+     1327, 1327, 1297,  408,  406,  409, 1327, 1285, 1285, 1294,
+      426,  430, 1265, 1266,   62,  435,  437,  412,  420,  432,
+      416,  434,  436,  237,  440,  444,  446,  451,  439,  454,
+
+      456,  455, 1327, 1291,  457,  459,  460,  463,  464,  468,
+      471,  472,  479,  480,  474,  481, 1327,  506,  520,  525,
+     1327,  530, 1327,  512,  532,  537, 1327, 1278, 1327, 1327,
+     1327, 1327, 1282, 1281,  532, 1287, 1327,  536,    0, 1269,
+        0, 1268, 1267,  517,  521,  522,  524, 1249, 1236, 1238,
+     1239, 1224, 1327, 1248, 1222, 1327, 1221, 1237,  526,  536,
+     1250, 1327, 1266, 1265, 1264, 1327, 1327, 1270, 1327, 1237,
+     1268, 1327,  537,  538,  540, 1327,  559, 1267, 1327, 1238,
+      554,  544,  554,  547,  555,  556,  557,  559, 1248,  560,
+      558,  561,  562,  567,  566,  573,  564,  574,  581,  575,
+
+      484, 1264, 1327,  576,  583,  580,  585,  589,  592,  598,
+      603,  587,  605,  609,  611,  634, 1327,  639, 1246, 1245,
+     1244, 1243, 1242,  612, 1241,  614,  615, 1227, 1206, 1221,
+      451, 1327, 1221, 1327, 1327, 1202,  623,  624, 1229, 1327,
+     1327, 1327, 1210,  627, 1233, 1232,  647, 1327,  631, 1231,
+      632,  636,  637, 1230,  638, 1229,  639,  640,  642,  648,
+      641,  649,  654,  651,  650,  655,  652, 1228,  664,  657,
+      660,  672,  675,  677,  679, 1227,  680,  682,  683, 1226,
+      704, 1327,  715,  706, 1225, 1224, 1223, 1222, 1197, 1199,
+      717, 1192, 1201, 1204,  694,  691,    0, 1183,  696,  705,
+
+     1215,  708, 1214,  709,  710,  711,  712,  714, 1213,  719,
+      716,  717, 1212,  720,  722, 1211,  724,  723,  726,  733,
+      728,  731,  734,  738, 1186, 1179,  771, 1180, 1177, 1168,
+      744,  737, 1188, 1175,  739,  751, 1182,  759,  756,  748,
+      752, 1171, 1156, 1155, 1154,  760,  755,  762,  763,  774,
+      776,  778,  781,  785,  782, 1112, 1087,  819,  751, 1076,
+      787,  788, 1085, 1053,  790,  791,  792, 1062,  786,  793,
+      796, 1053,  798,  813,  799,  800, 1044, 1029,  804,  820,
+      944,  927,  970,  929,  935,  842,  844,  834,  852,  954,
+      829,  953,  951,  839,  919,  821,  840,  841,  843,  845,
+
+      847,  866,  868,  931,  853,  851,  880,  887,  891,  899,
+      864,  867,  861,  853,  859,  860,  863,  864,  893,  869,
+     1327,  469,  917,  908,  925, 1327,  907,  417,  901,  415,
+      911,  304,  285,  944, 1327,  935,  933, 1327,  908,  238,
+      178,  946,  912,  127,  940,  117,  964,  966, 1327, 1327,
+      983,  992, 1001, 1010, 1019, 1028, 1037, 1046, 1049, 1053,
+     1061, 1070, 1079, 1084, 1093, 1102, 1107, 1110, 1113, 1121,
+     1130, 1139, 1148, 1153, 1162, 1170, 1172, 1176, 1180, 1187,
+     1191, 1199, 1208, 1217
     } ;
 
-static yyconst short int yy_def[546] =
+static yyconst short int yy_def[585] =
     {   0,
-      515,    1,  516,  516,  517,  517,  518,  518,    1,    1,
-        1,   11,    1,    1,    1,   15,  519,  519,  520,  520,
-      521,  521,  515,  515,  515,  515,  515,  522,  515,  515,
-      515,  515,  523,  524,  524,  524,  524,  515,  515,  515,
-      524,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  525,  515,  515,  515,  515,  515,  515,
-      515,  515,  526,  515,  515,  524,  524,  524,  515,  515,
-      515,  527,  524,  524,  524,  524,  524,  524,  524,  524,
-      524,  524,  524,  524,  515,  515,  515,  515,  515,  515,
-      515,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-
-      524,  524,  524,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      528,  515,  515,  529,  515,  515,  515,  530,  515,  531,
-      524,  532,  524,  524,  524,  524,  515,  515,  515,  515,
-      515,  515,  515,  515,  524,  515,  533,  515,  515,  515,
-      515,  515,  534,  515,  515,  515,  515,  515,  515,  535,
-      524,  524,  524,  515,  515,  536,  515,  537,  515,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-      524,  524,  524,  524,  524,  524,  524,  515,  538,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-
-      524,  515,  515,  515,  515,  515,  539,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      529,  515,  515,  530,  531,  540,  532,  541,  524,  524,
-      524,  524,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  524,  515,  515,  515,  515,  515,  515,  515,
-      534,  515,  515,  535,  515,  524,  524,  524,  515,  515,
-      536,  515,  537,  527,  524,  524,  524,  524,  524,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-      524,  524,  524,  524,  538,  515,  524,  524,  524,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  542,  515,
-
-      515,  540,  532,  541,  524,  524,  524,  524,  515,  515,
-      515,  515,  515,  515,  515,  515,  524,  515,  515,  515,
-      515,  515,  524,  524,  524,  515,  515,  524,  524,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  515,
-      515,  542,  515,  524,  524,  524,  515,  515,  515,  515,
-      515,  524,  543,  515,  524,  524,  524,  524,  524,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-
-      515,  515,  515,  515,  515,  524,  515,  515,  524,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  515,
-      515,  515,  515,  524,  515,  515,  524,  524,  524,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-      524,  524,  515,  515,  515,  515,  524,  515,  515,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-      524,  515,  544,  515,  515,  515,  515,  515,  515,  524,
-      524,  524,  524,  524,  524,  524,  524,  544,  515,  515,
-      515,  515,  515,  545,  524,  524,  524,  524,  524,  515,
-
-      515,  545,  515,  524,  524,  515,  515,  524,  515,  515,
-      524,  515,  515,  515,    0,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515
+      550,    1,  551,  551,  552,  552,  553,  553,    1,    1,
+      554,  554,    1,   13,    1,    1,    1,   17,  555,  555,
+      556,  556,  557,  557,  550,  550,  550,  550,  550,  558,
+      550,  550,  550,  550,  559,  560,  560,  560,  560,  550,
+      550,  550,  560,  560,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  561,  550,  550,  550,
+      550,  550,  550,  550,  550,  562,  550,  550,  550,  560,
+      560,  560,  550,  550,  550,  550,  550,  563,  550,  550,
+      550,  559,  564,  560,  560,  560,  560,  560,  560,  560,
+      560,  560,  560,  560,  560,  550,  550,  550,  550,  550,
+
+      550,  550,  560,  560,  560,  560,  560,  560,  560,  560,
+      560,  560,  560,  560,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  565,  550,  550,  566,  550,  550,  550,  567,  550,
+      568,  560,  569,  560,  560,  560,  560,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  560,  560,  550,  570,
+      550,  550,  550,  550,  550,  571,  550,  550,  550,  550,
+      550,  550,  572,  560,  560,  560,  550,  550,  550,  573,
+      550,  550,  574,  550,  560,  560,  560,  560,  560,  560,
+      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
+
+      560,  560,  550,  575,  560,  560,  560,  560,  560,  560,
+      560,  560,  560,  560,  560,  560,  550,  550,  550,  550,
+      550,  576,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  566,  550,  550,  567,  568,
+      577,  578,  579,  560,  560,  560,  560,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  560,  560,
+      550,  550,  550,  550,  550,  550,  550,  571,  550,  550,
+      572,  550,  560,  560,  560,  550,  550,  573,  550,  574,
+      564,  560,  560,  560,  560,  560,  560,  560,  560,  560,
+      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
+
+      560,  575,  550,  560,  560,  560,  560,  560,  560,  560,
+      560,  560,  560,  560,  560,  580,  550,  550,  581,  578,
+      550,  579,  569,  560,  560,  560,  560,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  560,  560,  550,  550,
+      550,  550,  550,  560,  560,  560,  550,  550,  560,  560,
+      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
+      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
+      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
+      550,  550,  580,  550,  581,  560,  560,  560,  550,  550,
+      550,  550,  550,  550,  560,  560,  582,  550,  560,  560,
+
+      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
+      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
+      560,  560,  560,  560,  550,  550,  550,  550,  550,  550,
+      560,  560,  550,  550,  560,  560,  560,  560,  560,  560,
+      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
+      560,  560,  560,  560,  560,  550,  550,  550,  550,  550,
+      560,  560,  550,  550,  560,  560,  560,  560,  560,  560,
+      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
+      550,  550,  550,  550,  550,  560,  560,  550,  550,  560,
+      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
+
+      560,  550,  550,  583,  550,  550,  550,  550,  550,  550,
+      550,  560,  560,  560,  560,  560,  560,  560,  560,  583,
+      550,  550,  550,  550,  550,  550,  584,  560,  560,  560,
+      560,  560,  550,  550,  550,  550,  584,  550,  560,  560,
+      550,  550,  560,  550,  550,  560,  550,  550,  550,    0,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550
     } ;
 
-static yyconst short int yy_nxt[1293] =
+static yyconst short int yy_nxt[1387] =
     {   0,
-       24,   25,   26,   25,   27,   25,   24,   24,   24,   28,
-       24,   24,   24,   29,   30,   31,   32,   32,   32,   33,
-       24,   24,   34,   34,   34,   34,   34,   34,   24,   24,
-       24,   34,   34,   34,   35,   34,   36,   37,   34,   34,
-       34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
-       34,   34,   34,   34,   34,   34,   34,   24,   24,   38,
-       43,  132,   44,   38,  132,   39,   40,   43,  132,   44,
-       45,   49,   46,   50,   65,   51,  132,   45,   52,  123,
-      132,  124,   60,   53,   61,  133,   62,   60,  136,   61,
-       47,   62,   64,   39,   66,  174,   34,   67,   54,  152,
-
-       65,  153,  134,   26,  139,  105,  135,   41,  139,   63,
-      162,   68,   87,  106,   63,  139,   24,   69,   39,  139,
-       66,   87,   34,   67,  132,   24,   55,   56,   49,  159,
-       50,  160,   51,   57,   58,   52,   34,   68,   34,   34,
-       53,  145,   26,   69,  111,   34,  140,   34,   34,  132,
-      107,   26,  112,  105,  107,   54,  108,  140,  132,  113,
-       26,  109,  111,  113,   26,  114,  117,   26,  132,  117,
-      115,  132,  119,  161,  118,  148,  132,  118,  122,  122,
-      122,  122,  176,   55,   56,   70,   71,  165,  163,  166,
-      125,  132,  126,  126,  126,  127,  141,  137,  149,  241,
-
-       72,  137,  175,  142,   73,  179,   74,   75,   76,   77,
-      155,  143,   78,  139,  155,   79,  132,  139,   80,   81,
-      132,  144,   82,   68,   83,   84,  150,  151,  132,   85,
-       86,   88,  128,  132,  132,   89,   90,  132,  125,   91,
-      129,  129,  129,  129,  132,  138,  170,  178,  188,  156,
-      189,  198,  140,  509,  177,  140,  132,  199,   92,   93,
-       94,   95,   96,  180,  132,   78,  181,  230,   79,   97,
-       98,   99,  100,  132,  132,  101,  102,   83,  103,  164,
-      132,  122,  122,  122,  122,  167,  167,  167,  167,  132,
-      185,  132,  132,  132,  171,  132,  132,  132,  172,  193,
-
-      169,  173,  132,  132,  190,  132,  132,  191,  506,  182,
-      183,  132,  186,  171,  192,  195,  194,  197,  187,  229,
-      173,  184,  215,  196,  174,  182,  200,  203,  132,  139,
-      187,  203,  201,  139,  216,  205,  206,  184,  204,  207,
-      209,  139,  211,  212,  209,  139,  211,  288,  202,  241,
-      246,  210,  132,  213,  132,  214,  139,  215,  231,  242,
-      139,  220,  220,  220,  220,  223,  223,  223,  223,  274,
-      125,  140,  126,  126,  126,  127,  125,  132,  127,  127,
-      127,  127,  125,  140,  129,  129,  129,  129,  137,  139,
-      232,  235,  137,  139,  238,  132,  155,  132,  140,  236,
-
-      155,  247,  248,  132,  132,  237,  132,  132,  132,  239,
-      256,  167,  167,  167,  167,  240,  132,  132,  132,  266,
-      267,  132,  132,  132,  243,  258,  169,  265,  132,  132,
-      257,  140,  132,  132,  132,  156,  138,  132,  140,  132,
-      132,  132,  268,  277,  132,  132,  132,  132,  271,  273,
-      269,  270,  279,  275,  272,  278,  132,  132,  281,  276,
-      132,  284,  289,  132,  280,  132,  132,  132,  282,  283,
-      291,  294,  203,  293,  287,  132,  203,  132,  290,  132,
-      332,  132,  292,  204,  271,  295,  297,  205,  206,  395,
-      296,  207,  132,  298,  205,  206,  205,  206,  205,  209,
-
-      205,  211,  212,  209,  306,  211,  305,  301,  212,  132,
-      210,  301,  213,  132,  300,  220,  220,  220,  220,  223,
-      223,  223,  223,  132,  132,  317,  132,  326,  327,  132,
-      132,  326,  308,  132,  132,  132,  307,  167,  167,  167,
-      167,  132,  132,  132,  132,  132,  132,  132,  334,  324,
-      132,  132,  169,  132,  323,  132,  132,  325,  132,  132,
-      329,  335,  328,  132,  330,  331,  333,  132,  132,  340,
-      132,  132,  347,  336,  132,  338,  341,  342,  337,  339,
-      344,  132,  132,  343,  345,  349,  132,  346,  348,  352,
-      132,  132,  351,  132,  350,  353,  132,  358,  360,  361,
-
-      132,  132,  360,  354,  357,  132,  132,  356,  369,  355,
-      359,  301,  212,  132,  237,  301,  363,  326,  327,  132,
-      132,  326,  132,  132,  132,  132,  372,  364,  132,  132,
-      365,  132,  366,  132,  132,  132,  132,  325,  375,  132,
-      132,  381,  382,  132,  132,  132,  378,  386,  383,  132,
-      376,  387,  377,  392,  380,  379,  384,  132,  388,  389,
-      132,  385,  132,  390,  132,  393,  132,  360,  361,  391,
-      132,  360,  132,  394,  360,  361,  396,  399,  360,  132,
-      360,  361,  397,  387,  360,  398,  402,  132,  132,  400,
-      402,  132,  363,  132,  132,  132,  409,  132,  132,  132,
-
-      406,  132,  132,  132,  411,  132,  132,  410,  415,  412,
-      416,  132,  132,  132,  418,  421,  132,  422,  132,  132,
-      132,  417,  402,  413,  414,  425,  402,  420,  132,  132,
-      423,  419,  429,  132,  439,  424,  431,  431,  431,  431,
-      438,  132,  132,  132,  426,  427,  434,  132,  428,  132,
-      440,  132,  132,  132,  437,  132,  132,  132,  132,  132,
-      443,  454,  132,  455,  132,  454,  132,  132,  451,  240,
-      132,  444,  132,  441,  442,  431,  431,  431,  431,  132,
-      449,  445,  450,  446,  462,  448,  461,  132,  465,  447,
-      452,  460,  132,  457,  132,  132,  464,  132,  476,  467,
-
-      132,  463,  476,  466,  477,  478,  478,  479,  132,  132,
-      132,  479,  132,  132,  132,  132,  132,  480,  476,  494,
-      468,  132,  476,  132,  481,  132,  132,  470,  132,  484,
-      132,  469,  476,  494,  471,  503,  476,  482,  495,  496,
-      497,  485,  499,  487,  483,  505,  491,  491,  491,  491,
-      503,  486,  492,  492,  492,  492,  493,  132,  498,  132,
-      492,  492,  492,  492,  501,  503,  491,  491,  491,  491,
-      493,  500,  489,  132,  492,  492,  492,  492,  132,  132,
-      503,  504,  507,  507,  507,  507,  510,  132,  507,  507,
-      507,  507,  508,  490,  239,  511,  512,  512,  512,  512,
-
-      513,  514,  513,  514,  513,  489,  513,  132,  132,  132,
-      132,  475,  474,  473,  512,  512,  512,  512,   42,   42,
-       42,   42,   42,   42,   42,   42,   42,   48,   48,   48,
-       48,   48,   48,   48,   48,   48,   59,   59,   59,   59,
-       59,   59,   59,   59,   59,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  116,  116,  116,  116,  116,  116,  116,
-      116,  116,  120,  120,  472,  120,  120,  120,  120,  120,
-      120,  130,  130,  131,  131,  131,  131,  154,  154,  132,
-      154,  154,  154,  154,  154,  154,  158,  158,  132,  158,
-
-      158,  158,  158,  158,  158,  168,  132,  168,  168,  168,
-      218,  218,  132,  218,  218,  218,  218,  218,  218,  221,
-      221,  221,  221,  221,  221,  221,  221,  221,  224,  459,
-      224,  225,  225,  225,  225,  227,  227,  227,  227,  244,
-      244,  458,  244,  244,  244,  244,  244,  244,  251,  251,
-      251,  251,  251,  251,  251,  251,  251,  254,  254,  254,
-      254,  254,  254,  254,  254,  254,  261,  261,  261,  261,
-      261,  261,  261,  261,  261,  263,  456,  263,  263,  263,
-      285,  285,  285,  285,  285,  285,  285,  285,  285,  299,
-      299,  453,  132,  132,  299,  299,  302,  302,  302,  302,
-
-      304,  304,  304,  304,  362,  362,  132,  362,  362,  362,
-      362,  407,  407,  132,  407,  407,  407,  407,  407,  407,
-      488,  488,  132,  436,  488,  488,  488,  488,  488,  502,
-      502,  435,  502,  502,  502,  502,  502,  502,  433,  432,
-      236,  430,  132,  132,  132,  132,  132,  408,  405,  404,
-      403,  401,  132,  132,  132,  132,  132,  132,  132,  132,
-      132,  132,  132,  374,  373,  371,  370,  368,  367,  132,
-      132,  303,  226,  286,  132,  169,  262,  255,  322,  252,
-      321,  320,  319,  318,  316,  315,  314,  313,  312,  311,
-      310,  309,  132,  303,  226,  226,  222,  217,  217,  300,
-
-      286,  264,  169,  262,  260,  259,  255,  253,  252,  250,
-      249,  245,  234,  233,  228,  132,  226,  222,  219,  217,
-      215,  215,  208,  202,  157,  147,  146,  132,  121,  515,
-       39,   39,   23,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515
-
+       26,   27,   28,   27,   29,   27,   26,   26,   26,   30,
+       26,   26,   26,   31,   32,   33,   34,   34,   34,   35,
+       26,   26,   36,   36,   36,   36,   36,   36,   26,   26,
+       26,   36,   36,   36,   37,   36,   38,   39,   36,   36,
+       36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,   36,   26,   26,   40,
+       46,  143,   47,   40,  151,   41,   42,   46,  151,   47,
+       48,   52,   49,   53,  134,   54,  135,   48,   55,  143,
+       68,  143,   63,   56,   64,  144,   65,   63,   69,   64,
+       50,   65,   67,   68,   41,   75,  143,   76,   57,   77,
+
+      282,   69,   28,  147,  116,   43,  152,   44,   70,   66,
+       36,   71,  117,  158,   66,   75,  165,   76,  166,   77,
+       79,   70,   78,   36,   71,   72,   58,   59,   52,  143,
+       53,   73,   54,   60,   61,   55,  143,   28,   72,  122,
+       56,   98,   78,   41,   73,   26,   98,  123,  118,   28,
+       26,  116,  118,  174,  119,   57,  172,  143,  173,  120,
+      124,   28,  143,  122,  124,   36,  125,   36,   36,  143,
+       36,  126,   36,   36,  151,  143,  257,   28,  151,  128,
+      143,  191,  176,   58,   59,   80,   81,  129,   96,  143,
+      143,   82,   28,   96,  128,  145,  153,  130,  143,  146,
+
+       83,  143,  129,  154,   84,  157,   85,   86,   87,   88,
+      175,  155,   89,  209,  544,   90,  152,  143,   91,   92,
+      185,  156,   93,   72,   94,   95,  179,  190,  180,   96,
+       97,   99,  194,  148,  259,  100,  101,  148,  143,  102,
+      133,  133,  133,  133,  136,  143,  137,  137,  137,  138,
+      136,  161,  140,  140,  140,  140,  143,  143,  103,  104,
+      105,  106,  107,  151,  192,   89,  212,  151,   90,  108,
+      109,  110,  111,  291,  162,  112,  113,   94,  114,  149,
+      168,  150,  143,  151,  168,  143,  139,  151,  178,  143,
+      133,  133,  133,  133,  181,  181,  181,  181,  182,  182,
+
+      182,  182,  163,  164,  143,  152,  143,  143,  203,  189,
+      204,  143,  193,  184,  143,  200,  143,  143,  143,  169,
+      541,  143,  152,  143,  186,  152,  143,  143,  187,  143,
+      143,  188,  201,  208,  197,  198,  195,  186,  202,  196,
+      205,  213,  210,  206,  188,  143,  199,  207,  143,  257,
+      211,  143,  218,  202,  245,  216,  218,  189,  214,  258,
+      151,  220,  221,  219,  151,  222,  224,  151,  197,  215,
+      224,  151,  226,  227,  217,  230,  226,  225,  151,  230,
+      199,  246,  151,  228,  143,  229,  263,  231,  235,  235,
+      235,  235,  238,  238,  238,  238,  136,  244,  137,  137,
+
+      137,  138,  152,  136,  143,  138,  138,  138,  138,  152,
+      136,  254,  140,  140,  140,  140,  251,  247,  148,  151,
+      152,  143,  148,  151,  252,  143,  255,  143,  143,  168,
+      253,  143,  256,  168,  143,  143,  143,  264,  265,  143,
+      273,  181,  181,  181,  181,  182,  182,  182,  182,  275,
+      260,  143,  274,  143,  143,  143,  143,  285,  143,  143,
+      184,  152,  288,  143,  149,  143,  150,  283,  169,  284,
+      143,  152,  286,  143,  143,  143,  143,  294,  143,  143,
+      292,  290,  143,  143,  287,  289,  293,  143,  297,  296,
+      143,  143,  295,  143,  298,  301,  308,  306,  143,  143,
+
+      143,  533,  392,  143,  299,  300,  311,  218,  253,  304,
+      288,  218,  314,  224,  305,  307,  310,  224,  219,  368,
+      312,  220,  221,  309,  225,  222,  220,  221,  315,  313,
+      220,  220,  221,  226,  227,  220,  143,  226,  318,  227,
+      143,  143,  318,  143,  228,  143,  317,  235,  235,  235,
+      235,  238,  238,  238,  238,  143,  143,  143,  337,  143,
+      347,  348,  327,  143,  347,  325,  143,  324,  326,  182,
+      182,  182,  182,  143,  143,  143,  143,  143,  143,  143,
+      143,  143,  345,  143,  184,  143,  143,  344,  338,  353,
+      346,  355,  143,  143,  143,  143,  349,  351,  356,  143,
+
+      143,  354,  143,  350,  143,  352,  143,  357,  143,  359,
+      361,  143,  371,  360,  358,  362,  364,  143,  363,  370,
+      365,  366,  143,  377,  143,  369,  367,  373,  143,  372,
+      143,  143,  374,  143,  143,  381,  382,  378,  375,  381,
+      318,  227,  143,  143,  318,  376,  143,  380,  347,  348,
+      143,  143,  347,  384,  379,  143,  143,  143,  143,  143,
+      143,  143,  386,  387,  396,  388,  395,  143,  143,  143,
+      143,  143,  405,  143,  143,  399,  143,  346,  406,  143,
+      402,  408,  400,  143,  407,  412,  410,  401,  404,  403,
+      411,  143,  417,  414,  143,  413,  143,  416,  143,  143,
+
+      409,  143,  143,  419,  415,  381,  382,  381,  382,  381,
+      143,  381,  418,  143,  423,  143,  381,  382,  427,  411,
+      381,  421,  427,  422,  143,  420,  424,  143,  143,  143,
+      143,  143,  435,  143,  384,  143,  143,  431,  143,  143,
+      432,  143,  143,  143,  437,  143,  441,  143,  442,  438,
+      143,  444,  143,  143,  447,  448,  143,  143,  143,  436,
+      440,  439,  443,  143,  451,  446,  449,  143,  445,  455,
+      143,  143,  427,  462,  143,  143,  427,  450,  143,  143,
+      452,  143,  143,  453,  465,  454,  458,  458,  458,  458,
+      461,  466,  468,  143,  467,  143,  471,  143,  472,  469,
+
+      143,  143,  484,  470,  143,  143,  143,  143,  256,  143,
+      143,  143,  143,  473,  474,  143,  479,  143,  143,  143,
+      483,  486,  477,  143,  483,  478,  491,  476,  492,  494,
+      475,  495,  143,  480,  458,  458,  458,  458,  487,  143,
+      143,  490,  493,  507,  497,  508,  498,  507,  143,  508,
+      509,  510,  510,  511,  496,  500,  499,  511,  143,  143,
+      143,  143,  143,  143,  143,  512,  143,  507,  514,  508,
+      527,  507,  143,  508,  513,  521,  501,  516,  143,  143,
+      143,  507,  143,  143,  527,  507,  143,  522,  508,  528,
+      517,  529,  508,  515,  519,  523,  523,  523,  523,  530,
+
+      255,  518,  524,  524,  524,  524,  525,  525,  525,  525,
+      526,  531,  143,  538,  525,  525,  525,  525,  534,  535,
+      143,  536,  534,  524,  524,  524,  524,  143,  538,  532,
+      143,  143,  523,  523,  523,  523,  526,  521,  143,  538,
+      525,  525,  525,  525,  539,  534,  535,  540,  546,  534,
+      542,  542,  542,  542,  538,  547,  547,  547,  547,  545,
+      543,  542,  542,  542,  542,  548,  549,  548,  549,  548,
+      143,  548,  143,  143,  506,  505,  504,  503,  502,  547,
+      547,  547,  547,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   51,   51,   51,   51,   51,   51,   51,   51,
+
+       51,   62,   62,   62,   62,   62,   62,   62,   62,   62,
+       74,   74,   74,   74,   74,   74,   74,   74,   74,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  121,  121,
+      121,  121,  121,  121,  121,  121,  121,  127,  127,  127,
+      127,  127,  127,  127,  127,  127,  131,  131,  143,  131,
+      131,  131,  131,  131,  131,  141,  141,  142,  142,  142,
+      142,  167,  167,  143,  167,  167,  167,  167,  167,  167,
+      171,  171,  143,  171,  171,  171,  171,  171,  171,  177,
+      177,  143,  177,  177,  177,  177,  177,  177,  183,  489,
+      183,  183,  183,  233,  233,  488,  233,  233,  233,  233,
+
+      233,  233,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  239,  485,  239,  240,  240,  240,  240,  243,  243,
+      243,  261,  261,  482,  261,  261,  261,  261,  261,  261,
+      268,  268,  268,  268,  268,  268,  268,  268,  268,  271,
+      271,  271,  271,  271,  271,  271,  271,  271,  278,  278,
+      278,  278,  278,  278,  278,  278,  278,  280,  481,  280,
+      280,  280,  302,  302,  302,  302,  302,  302,  302,  302,
+      302,  316,  316,  143,  143,  143,  316,  316,  319,  319,
+      320,  320,  320,  320,  322,  322,  322,  322,  383,  383,
+      143,  383,  383,  383,  383,  385,  385,  385,  385,  433,
+
+      433,  143,  433,  433,  433,  433,  433,  433,  520,  520,
+      464,  463,  520,  520,  520,  520,  520,  537,  537,  460,
+      537,  537,  537,  537,  537,  537,  459,  252,  457,  456,
+      143,  143,  143,  143,  143,  434,  430,  429,  428,  426,
+      425,  143,  143,  143,  241,  143,  143,  143,  143,  143,
+      143,  143,  143,  398,  397,  394,  393,  391,  390,  389,
+      143,  550,  323,  242,  321,  241,  303,  143,  184,  279,
+      272,  343,  269,  342,  341,  340,  339,  336,  335,  334,
+      333,  332,  331,  330,  329,  328,  323,  321,  241,  237,
+      232,  232,  317,  303,  281,  184,  279,  277,  276,  272,
+
+      270,  269,  267,  266,  262,  250,  249,  248,  242,  143,
+      241,  237,  234,  232,  230,  230,  223,  217,  170,  160,
+      159,  143,  132,  550,   41,   41,   25,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550
     } ;
 
-static yyconst short int yy_chk[1293] =
+static yyconst short int yy_chk[1387] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -744,143 +768,152 @@ static yyconst short int yy_chk[1293] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
-        3,   35,    3,    2,   37,    2,    2,    4,   75,    4,
-        3,    5,    4,    5,    9,    5,   36,    4,    5,   30,
-       67,   30,    7,    5,    7,   35,    7,    8,   37,    8,
-        4,    8,    8,   10,    9,   75,    9,    9,    5,   53,
-
-       10,   53,   36,   17,   39,   17,   36,    2,   39,    7,
-       67,    9,   13,   17,    8,   46,   13,    9,   14,   46,
-       10,   14,   10,   10,   41,   14,    5,    5,    6,   65,
-        6,   65,    6,    6,    6,    6,   13,   10,   13,   13,
-        6,   41,   19,   10,   19,   14,   39,   14,   14,   66,
-       18,   18,   19,   18,   18,    6,   18,   46,   77,   20,
-       20,   18,   20,   20,   21,   20,   21,   22,   68,   22,
-       20,   80,   22,   66,   21,   52,   76,   22,   29,   29,
-       29,   29,   77,    6,    6,   11,   11,   71,   68,   71,
-       31,  511,   31,   31,   31,   31,   40,   38,   52,  509,
-
-       11,   38,   76,   40,   11,   80,   11,   11,   11,   11,
-       57,   40,   11,   64,   57,   11,   73,   64,   11,   11,
-       79,   40,   11,   11,   11,   11,   52,   52,   78,   11,
-       11,   15,   31,   81,  134,   15,   15,   99,   32,   15,
-       32,   32,   32,   32,  100,   38,   73,   79,   91,   57,
-       91,   99,   57,  506,   78,   64,  505,  100,   15,   15,
-       15,   15,   15,   81,   83,   15,   81,  134,   15,   15,
-       15,   15,   15,   95,   74,   15,   15,   15,   15,   70,
-       92,   70,   70,   70,   70,   72,   72,   72,   72,   82,
-       83,   84,   96,   93,   74,  102,   98,   94,   74,   95,
-
-       72,   74,   97,  103,   92,  101,  133,   92,  500,   82,
-       82,  191,   84,   93,   94,   97,   96,   98,   84,  133,
-       93,   82,  118,   97,   94,  101,  101,  107,  135,  108,
-      103,  107,  102,  108,  118,  109,  109,  101,  107,  109,
-      113,  114,  115,  115,  113,  114,  115,  191,  109,  143,
-      149,  113,  179,  115,  499,  115,  119,  119,  135,  143,
-      119,  122,  122,  122,  122,  125,  125,  125,  125,  179,
-      126,  108,  126,  126,  126,  126,  127,  136,  127,  127,
-      127,  127,  129,  114,  129,  129,  129,  129,  137,  139,
-      136,  141,  137,  139,  142,  145,  155,  161,  119,  141,
-
-      155,  149,  149,  162,  163,  141,  171,  172,  170,  142,
-      161,  167,  167,  167,  167,  142,  173,  174,  175,  171,
-      172,  176,  177,  178,  145,  163,  167,  170,  182,  181,
-      162,  139,  180,  183,  184,  155,  137,  185,  155,  186,
-      187,  190,  173,  181,  192,  193,  195,  196,  176,  178,
-      174,  175,  183,  180,  177,  182,  197,  194,  185,  180,
-      199,  187,  192,  198,  184,  201,  269,  200,  185,  186,
-      194,  197,  203,  196,  190,  229,  203,  351,  193,  230,
-      269,  497,  195,  203,  194,  198,  200,  204,  204,  351,
-      199,  204,  243,  201,  205,  205,  207,  207,  205,  209,
-
-      207,  210,  210,  209,  230,  210,  229,  211,  211,  231,
-      209,  211,  210,  232,  210,  220,  220,  220,  220,  223,
-      223,  223,  223,  256,  257,  243,  258,  260,  260,  265,
-      266,  260,  232,  267,  268,  271,  231,  264,  264,  264,
-      264,  270,  273,  274,  275,  277,  278,  276,  271,  257,
-      280,  279,  264,  281,  256,  283,  284,  258,  287,  495,
-      266,  273,  265,  282,  267,  268,  270,  290,  288,  277,
-      291,  297,  284,  274,  292,  276,  278,  279,  275,  276,
-      281,  289,  293,  280,  282,  288,  294,  283,  287,  291,
-      295,  296,  290,  298,  289,  292,  305,  297,  299,  299,
-
-      307,  308,  299,  293,  296,  317,  323,  295,  311,  294,
-      298,  301,  301,  328,  311,  301,  299,  326,  326,  330,
-      331,  326,  332,  334,  336,  338,  317,  305,  337,  341,
-      307,  339,  308,  344,  342,  340,  346,  323,  328,  348,
-      350,  337,  338,  343,  345,  352,  332,  342,  339,  349,
-      330,  342,  331,  348,  336,  334,  340,  353,  343,  344,
-      354,  341,  356,  345,  357,  349,  358,  360,  360,  346,
-      372,  360,  376,  350,  362,  362,  352,  356,  362,  375,
-      363,  363,  353,  358,  363,  354,  368,  378,  380,  357,
-      368,  381,  362,  383,  382,  384,  375,  386,  387,  388,
-
-      372,  390,  391,  395,  378,  393,  394,  376,  383,  380,
-      384,  397,  398,  396,  387,  391,  399,  393,  412,  410,
-      400,  386,  402,  381,  382,  396,  402,  390,  409,  406,
-      394,  388,  400,  413,  412,  395,  402,  402,  402,  402,
-      410,  414,  415,  420,  397,  398,  406,  421,  399,  422,
-      413,  423,  424,  425,  409,  426,  428,  427,  429,  437,
-      420,  431,  434,  432,  441,  431,  445,  439,  428,  432,
-      438,  421,  443,  414,  415,  431,  431,  431,  431,  442,
-      426,  422,  427,  423,  439,  425,  438,  446,  443,  424,
-      429,  437,  447,  434,  448,  451,  442,  452,  457,  446,
-
-      461,  441,  457,  445,  458,  458,  458,  459,  464,  466,
-      467,  459,  468,  469,  470,  471,  457,  461,  472,  479,
-      447,  482,  472,  485,  464,  487,  483,  451,  498,  468,
-      486,  448,  476,  479,  452,  494,  476,  466,  482,  483,
-      485,  469,  487,  471,  467,  498,  476,  476,  476,  476,
-      494,  470,  477,  477,  477,  477,  478,  496,  486,  504,
-      478,  478,  478,  478,  491,  502,  491,  491,  491,  491,
-      492,  490,  488,  484,  492,  492,  492,  492,  508,  481,
-      502,  496,  501,  501,  501,  501,  507,  480,  507,  507,
-      507,  507,  504,  475,  474,  508,  510,  510,  510,  510,
-
-      512,  512,  513,  513,  512,  473,  513,  465,  463,  462,
-      460,  456,  455,  454,  512,  512,  512,  512,  516,  516,
-      516,  516,  516,  516,  516,  516,  516,  517,  517,  517,
-      517,  517,  517,  517,  517,  517,  518,  518,  518,  518,
-      518,  518,  518,  518,  518,  519,  519,  519,  519,  519,
-      519,  519,  519,  519,  520,  520,  520,  520,  520,  520,
-      520,  520,  520,  521,  521,  521,  521,  521,  521,  521,
-      521,  521,  522,  522,  453,  522,  522,  522,  522,  522,
-      522,  523,  523,  524,  524,  524,  524,  525,  525,  450,
-      525,  525,  525,  525,  525,  525,  526,  526,  449,  526,
-
-      526,  526,  526,  526,  526,  527,  444,  527,  527,  527,
-      528,  528,  440,  528,  528,  528,  528,  528,  528,  529,
-      529,  529,  529,  529,  529,  529,  529,  529,  530,  436,
-      530,  531,  531,  531,  531,  532,  532,  532,  532,  533,
-      533,  435,  533,  533,  533,  533,  533,  533,  534,  534,
-      534,  534,  534,  534,  534,  534,  534,  535,  535,  535,
-      535,  535,  535,  535,  535,  535,  536,  536,  536,  536,
-      536,  536,  536,  536,  536,  537,  433,  537,  537,  537,
-      538,  538,  538,  538,  538,  538,  538,  538,  538,  539,
-      539,  430,  419,  418,  539,  539,  540,  540,  540,  540,
-
-      541,  541,  541,  541,  542,  542,  417,  542,  542,  542,
-      542,  543,  543,  416,  543,  543,  543,  543,  543,  543,
-      544,  544,  411,  408,  544,  544,  544,  544,  544,  545,
-      545,  407,  545,  545,  545,  545,  545,  545,  405,  404,
-      403,  401,  392,  389,  385,  379,  377,  374,  371,  370,
-      369,  367,  366,  365,  364,  359,  355,  347,  335,  333,
-      329,  325,  324,  322,  318,  316,  313,  310,  309,  306,
-      304,  303,  302,  285,  272,  263,  261,  254,  253,  251,
-      248,  247,  246,  244,  242,  241,  239,  238,  236,  235,
-      234,  233,  228,  227,  226,  225,  221,  219,  218,  213,
-
-      189,  169,  168,  166,  165,  164,  160,  156,  153,  151,
-      150,  148,  140,  138,  132,  131,  130,  124,  121,  120,
-      117,  116,  112,  106,   58,   47,   45,   34,   28,   23,
-       16,   12,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515
-
+        3,   37,    3,    2,   41,    2,    2,    4,   41,    4,
+        3,    5,    4,    5,   32,    5,   32,    4,    5,   39,
+        9,  185,    7,    5,    7,   37,    7,    8,    9,    8,
+        4,    8,    8,   10,   10,   11,   44,   11,    5,   11,
+
+      185,   10,   19,   39,   19,    2,   41,    2,    9,    7,
+        9,    9,   19,   44,    8,   12,   56,   12,   56,   12,
+       12,   10,   11,   10,   10,    9,    5,    5,    6,   70,
+        6,    9,    6,    6,    6,    6,  546,   21,   10,   21,
+        6,   15,   12,   16,   10,   15,   16,   21,   20,   20,
+       16,   20,   20,   70,   20,    6,   69,   88,   69,   20,
+       22,   22,   72,   22,   22,   15,   22,   15,   15,   38,
+       16,   22,   16,   16,   49,   43,  544,   23,   49,   23,
+       71,   88,   72,    6,    6,   13,   13,   23,   15,  107,
+       84,   13,   24,   16,   24,   38,   42,   24,   91,   38,
+
+       13,   87,   24,   42,   13,   43,   13,   13,   13,   13,
+       71,   42,   13,  107,  541,   13,   49,  157,   13,   13,
+       84,   42,   13,   13,   13,   13,   81,   87,   81,   13,
+       13,   17,   91,   40,  157,   17,   17,   40,   89,   17,
+       31,   31,   31,   31,   33,  109,   33,   33,   33,   33,
+       34,   55,   34,   34,   34,   34,  194,  540,   17,   17,
+       17,   17,   17,   67,   89,   17,  109,   67,   17,   17,
+       17,   17,   17,  194,   55,   17,   17,   17,   17,   40,
+       60,   40,   86,   79,   60,   90,   33,   79,   80,   94,
+       80,   80,   80,   80,   82,   82,   82,   82,   83,   83,
+
+       83,   83,   55,   55,   85,   67,   92,  106,  102,   86,
+      102,   95,   90,   83,   93,   94,  103,  104,  113,   60,
+      533,  145,   60,  532,   85,   79,  114,  110,   85,  108,
+      105,   85,   95,  106,   93,   93,   92,  104,   95,   92,
+      103,  110,  108,  103,  104,  111,   93,  105,  112,  155,
+      108,  146,  118,  114,  145,  113,  118,  105,  111,  155,
+      119,  120,  120,  118,  119,  120,  124,  125,  112,  112,
+      124,  125,  126,  126,  120,  129,  126,  124,  130,  130,
+      112,  146,  130,  126,  144,  126,  162,  129,  133,  133,
+      133,  133,  136,  136,  136,  136,  137,  144,  137,  137,
+
+      137,  137,  119,  138,  147,  138,  138,  138,  138,  125,
+      140,  154,  140,  140,  140,  140,  153,  147,  148,  151,
+      130,  158,  148,  151,  153,  175,  154,  174,  176,  168,
+      153,  188,  154,  168,  530,  191,  528,  162,  162,  189,
+      174,  181,  181,  181,  181,  182,  182,  182,  182,  176,
+      158,  190,  175,  192,  186,  193,  187,  188,  199,  195,
+      182,  151,  191,  196,  148,  197,  148,  186,  168,  187,
+      198,  168,  189,  200,  202,  201,  205,  196,  206,  207,
+      195,  193,  208,  209,  190,  192,  195,  210,  199,  198,
+      211,  212,  197,  215,  200,  202,  209,  207,  213,  214,
+
+      216,  522,  331,  301,  200,  201,  212,  218,  331,  205,
+      209,  218,  215,  224,  206,  208,  211,  224,  218,  301,
+      213,  219,  219,  210,  224,  219,  220,  220,  216,  214,
+      220,  222,  222,  225,  225,  222,  244,  225,  226,  226,
+      245,  246,  226,  247,  225,  259,  225,  235,  235,  235,
+      235,  238,  238,  238,  238,  260,  273,  274,  259,  275,
+      277,  277,  247,  282,  277,  245,  284,  244,  246,  281,
+      281,  281,  281,  283,  285,  286,  287,  291,  288,  290,
+      292,  293,  274,  297,  281,  295,  294,  273,  260,  286,
+      275,  288,  296,  298,  300,  304,  282,  284,  290,  306,
+
+      299,  287,  305,  283,  307,  285,  312,  291,  308,  293,
+      294,  309,  306,  293,  292,  295,  297,  310,  296,  305,
+      298,  299,  311,  312,  313,  304,  300,  308,  314,  307,
+      315,  324,  309,  326,  327,  316,  316,  313,  310,  316,
+      318,  318,  337,  338,  318,  311,  344,  315,  347,  347,
+      349,  351,  347,  316,  314,  352,  353,  355,  357,  358,
+      361,  359,  324,  326,  338,  327,  337,  360,  362,  365,
+      364,  367,  358,  363,  366,  349,  370,  344,  359,  371,
+      353,  361,  351,  369,  360,  364,  363,  352,  357,  355,
+      363,  372,  370,  366,  373,  365,  374,  369,  375,  377,
+
+      362,  378,  379,  372,  367,  381,  381,  384,  384,  381,
+      396,  384,  371,  395,  377,  399,  383,  383,  391,  379,
+      383,  374,  391,  375,  400,  373,  378,  402,  404,  405,
+      406,  407,  399,  408,  383,  411,  412,  395,  410,  414,
+      396,  415,  418,  417,  402,  419,  407,  421,  408,  404,
+      422,  411,  420,  423,  415,  417,  432,  424,  435,  400,
+      406,  405,  410,  431,  420,  414,  418,  440,  412,  424,
+      436,  441,  427,  432,  447,  439,  427,  419,  438,  446,
+      421,  448,  449,  422,  435,  423,  427,  427,  427,  427,
+      431,  436,  439,  450,  438,  451,  446,  452,  447,  440,
+
+      453,  455,  459,  441,  454,  469,  461,  462,  459,  465,
+      466,  467,  470,  448,  449,  471,  454,  473,  475,  476,
+      458,  461,  452,  479,  458,  453,  466,  451,  467,  470,
+      450,  471,  474,  455,  458,  458,  458,  458,  462,  480,
+      496,  465,  469,  486,  474,  487,  475,  486,  491,  487,
+      488,  488,  488,  489,  473,  479,  476,  489,  494,  497,
+      498,  486,  499,  487,  500,  491,  501,  502,  496,  503,
+      511,  502,  514,  503,  494,  520,  480,  498,  515,  516,
+      513,  507,  517,  518,  511,  507,  512,  506,  508,  514,
+      499,  515,  508,  497,  501,  507,  507,  507,  507,  517,
+
+      505,  500,  508,  508,  508,  508,  509,  509,  509,  509,
+      510,  518,  519,  527,  510,  510,  510,  510,  523,  523,
+      529,  524,  523,  524,  524,  524,  524,  539,  527,  519,
+      531,  543,  523,  523,  523,  523,  525,  504,  495,  537,
+      525,  525,  525,  525,  529,  534,  534,  531,  543,  534,
+      536,  536,  536,  536,  537,  545,  545,  545,  545,  542,
+      539,  542,  542,  542,  542,  547,  547,  548,  548,  547,
+      493,  548,  492,  490,  485,  484,  483,  482,  481,  547,
+      547,  547,  547,  551,  551,  551,  551,  551,  551,  551,
+      551,  551,  552,  552,  552,  552,  552,  552,  552,  552,
+
+      552,  553,  553,  553,  553,  553,  553,  553,  553,  553,
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  555,
+      555,  555,  555,  555,  555,  555,  555,  555,  556,  556,
+      556,  556,  556,  556,  556,  556,  556,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  558,  558,  478,  558,
+      558,  558,  558,  558,  558,  559,  559,  560,  560,  560,
+      560,  561,  561,  477,  561,  561,  561,  561,  561,  561,
+      562,  562,  472,  562,  562,  562,  562,  562,  562,  563,
+      563,  468,  563,  563,  563,  563,  563,  563,  564,  464,
+      564,  564,  564,  565,  565,  463,  565,  565,  565,  565,
+
+      565,  565,  566,  566,  566,  566,  566,  566,  566,  566,
+      566,  567,  460,  567,  568,  568,  568,  568,  569,  569,
+      569,  570,  570,  457,  570,  570,  570,  570,  570,  570,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  572,
+      572,  572,  572,  572,  572,  572,  572,  572,  573,  573,
+      573,  573,  573,  573,  573,  573,  573,  574,  456,  574,
+      574,  574,  575,  575,  575,  575,  575,  575,  575,  575,
+      575,  576,  576,  445,  444,  443,  576,  576,  577,  577,
+      578,  578,  578,  578,  579,  579,  579,  579,  580,  580,
+      442,  580,  580,  580,  580,  581,  581,  581,  581,  582,
+
+      582,  437,  582,  582,  582,  582,  582,  582,  583,  583,
+      434,  433,  583,  583,  583,  583,  583,  584,  584,  430,
+      584,  584,  584,  584,  584,  584,  429,  428,  426,  425,
+      416,  413,  409,  403,  401,  398,  394,  393,  392,  390,
+      389,  388,  387,  386,  385,  380,  376,  368,  356,  354,
+      350,  346,  345,  343,  339,  336,  333,  330,  329,  328,
+      325,  323,  322,  321,  320,  319,  302,  289,  280,  278,
+      271,  270,  268,  265,  264,  263,  261,  258,  257,  255,
+      254,  252,  251,  250,  249,  248,  243,  242,  240,  236,
+      234,  233,  228,  204,  184,  183,  180,  179,  178,  173,
+
+      169,  166,  164,  163,  161,  152,  150,  149,  143,  142,
+      141,  135,  132,  131,  128,  127,  123,  117,   61,   50,
+       48,   36,   30,   25,   18,   14,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550
     } ;
 
 static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
@@ -1007,19 +1040,21 @@ int yylex(void);
 
 #define CLASS_CODE 4
 
-#define CLASS_CODE_I 5
+#define CLASS_STRING 5
 
-#define PROPERTY_CODE 6
+#define CLASS_CODE_I 6
 
-#define PROPERTY_CODE_I 7
+#define PROPERTY_CODE 7
 
-#define GTK_DOC_BEFORE_NAME 8
+#define PROPERTY_CODE_I 8
 
-#define GTK_DOC 9
+#define GTK_DOC_BEFORE_NAME 9
 
-#define GTK_DOC_LINE 10
+#define GTK_DOC 10
 
-#line 1023 "lexer.c"
+#define GTK_DOC_LINE 11
+
+#line 1058 "lexer.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1173,7 +1208,7 @@ YY_DECL
        register char *yy_cp = NULL, *yy_bp = NULL;
        register int yy_act;
 
-#line 116 "lexer.l"
+#line 117 "lexer.l"
 
 
 
@@ -1184,7 +1219,7 @@ yy_current_state = 0;
 
 
 
-#line 1188 "lexer.c"
+#line 1223 "lexer.c"
 
        if ( yy_init )
                {
@@ -1233,14 +1268,14 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 516 )
+                               if ( yy_current_state >= 551 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        *yy_state_ptr++ = yy_current_state;
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 1233 );
+               while ( yy_base[yy_current_state] != 1327 );
 
 yy_find_action:
                yy_current_state = *--yy_state_ptr;
@@ -1271,7 +1306,7 @@ do_action:        /* This label is used only to access EOF actions. */
        { /* beginning of action switch */
 case 1:
 YY_RULE_SETUP
-#line 126 "lexer.l"
+#line 127 "lexer.l"
 { line_no++; REJECT; }
        YY_BREAK
 case 2:
@@ -1279,7 +1314,7 @@ case 2:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 128 "lexer.l"
+#line 129 "lexer.l"
 {
 /* Thy evil easter egg */
 #define QQ(x) long x
@@ -1307,12 +1342,12 @@ case 3:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 150 "lexer.l"
+#line 151 "lexer.l"
 { ; /*comment, ignore*/ }
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 152 "lexer.l"
+#line 153 "lexer.l"
 {
        char *p;
        char *number;
@@ -1352,7 +1387,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 189 "lexer.l"
+#line 190 "lexer.l"
 {
        if(look_for_includes==1) {
                char *p;
@@ -1375,7 +1410,7 @@ case 6:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 206 "lexer.l"
+#line 207 "lexer.l"
 {
                        /* eat out gtk doc stuff */
                        BEGIN(GTK_DOC_BEFORE_NAME);
@@ -1387,7 +1422,7 @@ case 7:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 211 "lexer.l"
+#line 212 "lexer.l"
 {
                        /* empty doc lines */
                        ;
@@ -1398,7 +1433,7 @@ case 8:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 215 "lexer.l"
+#line 216 "lexer.l"
 {
                        char *p;
                        BEGIN(GTK_DOC);
@@ -1412,14 +1447,14 @@ YY_RULE_SETUP
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 225 "lexer.l"
+#line 226 "lexer.l"
 {
                        BEGIN(CLASS_CODE_I);
                }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 228 "lexer.l"
+#line 229 "lexer.l"
 {
                        BEGIN(COMMENT);
                        before_comment = CLASS_CODE_I;
@@ -1430,7 +1465,7 @@ case 11:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 232 "lexer.l"
+#line 233 "lexer.l"
 {
                        /* empty doc lines */
                        add_to_cbuf(" *\n");
@@ -1438,7 +1473,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 236 "lexer.l"
+#line 237 "lexer.l"
 {
                        BEGIN(CLASS_CODE_I);
                        add_gtk_doc_func();
@@ -1446,7 +1481,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 240 "lexer.l"
+#line 241 "lexer.l"
 {
                        fflush(stdout);
                        add_to_cbuf(" * ");
@@ -1455,14 +1490,14 @@ YY_RULE_SETUP
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 245 "lexer.l"
+#line 246 "lexer.l"
 {
                        BEGIN(CLASS_CODE_I);
                }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 248 "lexer.l"
+#line 249 "lexer.l"
 {
                        BEGIN(COMMENT);
                        before_comment = CLASS_CODE_I;
@@ -1470,7 +1505,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 252 "lexer.l"
+#line 253 "lexer.l"
 {
                        BEGIN(CLASS_CODE_I);
                        add_to_cbuf("\n");
@@ -1482,7 +1517,7 @@ case 17:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 257 "lexer.l"
+#line 258 "lexer.l"
 {
                        BEGIN(GTK_DOC);
                        add_to_cbuf(yytext);
@@ -1491,7 +1526,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 262 "lexer.l"
+#line 263 "lexer.l"
 {
                        fflush(stdout);
                        add_to_cbuf(yytext);
@@ -1502,7 +1537,7 @@ case 19:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 267 "lexer.l"
+#line 268 "lexer.l"
 { add_to_cbuf(yytext); /*comment, ignore*/ }
        YY_BREAK
 case 20:
@@ -1510,7 +1545,7 @@ case 20:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 268 "lexer.l"
+#line 269 "lexer.l"
 { ; /*comment, ignore*/ }
        YY_BREAK
 case 21:
@@ -1518,7 +1553,7 @@ case 21:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 269 "lexer.l"
+#line 270 "lexer.l"
 { ; /*comment, ignore*/ }
        YY_BREAK
 case 22:
@@ -1526,17 +1561,17 @@ case 22:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 270 "lexer.l"
+#line 271 "lexer.l"
 { ; /*comment, ignore*/ }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 271 "lexer.l"
+#line 272 "lexer.l"
 {BEGIN(COMMENT); before_comment = INITIAL; }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 272 "lexer.l"
+#line 273 "lexer.l"
 {
        add_to_cbuf(yytext);
        BEGIN(COMMENT);
@@ -1545,22 +1580,22 @@ YY_RULE_SETUP
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 277 "lexer.l"
+#line 278 "lexer.l"
 {BEGIN(COMMENT); before_comment = CLASS_CODE; }
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 278 "lexer.l"
+#line 279 "lexer.l"
 {BEGIN(COMMENT); before_comment = CLASS_CODE_I; }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 279 "lexer.l"
+#line 280 "lexer.l"
 {BEGIN(COMMENT); before_comment = PROPERTY_CODE_I; }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 280 "lexer.l"
+#line 281 "lexer.l"
 {
        if(before_comment == C_CODE) add_to_cbuf(yytext);
        BEGIN(before_comment);
@@ -1568,7 +1603,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 284 "lexer.l"
+#line 285 "lexer.l"
 {
        /* comment, ignore */
        if(before_comment == C_CODE) add_to_cbuf(yytext);
@@ -1576,7 +1611,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 288 "lexer.l"
+#line 289 "lexer.l"
 {
        /* comment, ignore */
        if(before_comment == C_CODE) add_to_cbuf(yytext);
@@ -1584,7 +1619,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 293 "lexer.l"
+#line 294 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1596,7 +1631,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 301 "lexer.l"
+#line 302 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1608,7 +1643,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 310 "lexer.l"
+#line 311 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1620,7 +1655,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 318 "lexer.l"
+#line 319 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1632,7 +1667,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 326 "lexer.l"
+#line 327 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1644,7 +1679,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 334 "lexer.l"
+#line 335 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1658,7 +1693,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 344 "lexer.l"
+#line 345 "lexer.l"
 {
                        BEGIN(INITIAL);
                        yylval.cbuf = cbuf;
@@ -1670,42 +1705,42 @@ YY_RULE_SETUP
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 353 "lexer.l"
+#line 354 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 354 "lexer.l"
+#line 355 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 355 "lexer.l"
+#line 356 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 356 "lexer.l"
+#line 357 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 357 "lexer.l"
+#line 358 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 358 "lexer.l"
+#line 359 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 360 "lexer.l"
+#line 361 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 363 "lexer.l"
+#line 364 "lexer.l"
 {
                        BEGIN(CODE_STRING);
                        before_string = C_CODE;
@@ -1714,7 +1749,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 368 "lexer.l"
+#line 369 "lexer.l"
 {
                        BEGIN(CODE_STRING);
                        before_string = PROPERTY_CODE_I;
@@ -1723,12 +1758,12 @@ YY_RULE_SETUP
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 373 "lexer.l"
+#line 374 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 374 "lexer.l"
+#line 375 "lexer.l"
 {
                        BEGIN(before_string);
                        add_to_cbuf(yytext);
@@ -1742,17 +1777,17 @@ YY_RULE_SETUP
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 384 "lexer.l"
+#line 385 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 385 "lexer.l"
+#line 386 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 387 "lexer.l"
+#line 388 "lexer.l"
 {
                        parenth_depth++;
                        add_to_cbuf(yytext);
@@ -1760,7 +1795,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 391 "lexer.l"
+#line 392 "lexer.l"
 {
                        parenth_depth--;
                        if(parenth_depth<0) {
@@ -1776,17 +1811,17 @@ YY_RULE_SETUP
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 404 "lexer.l"
+#line 405 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 405 "lexer.l"
+#line 406 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 407 "lexer.l"
+#line 408 "lexer.l"
 {
                        static int found_classes = 0;
                        look_for_includes = 2;
@@ -1802,17 +1837,17 @@ YY_RULE_SETUP
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 420 "lexer.l"
+#line 421 "lexer.l"
 { return ERROR; }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 421 "lexer.l"
+#line 422 "lexer.l"
 { return ENUM; }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 422 "lexer.l"
+#line 423 "lexer.l"
 { return FLAGS; }
        YY_BREAK
 case 59:
@@ -1820,7 +1855,7 @@ case 59:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 424 "lexer.l"
+#line 425 "lexer.l"
 {
                        int maj = 0, min = 0, pl = 0;
                        int rmaj = 0, rmin = 0, rpl = 0;
@@ -1864,7 +1899,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 465 "lexer.l"
+#line 466 "lexer.l"
 {
                        if(for_cpp) {
                                error_printf(GOB_WARN, line_no,
@@ -1877,191 +1912,227 @@ YY_RULE_SETUP
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 475 "lexer.l"
+#line 476 "lexer.l"
 {return FROM;}
        YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 477 "lexer.l"
-{return VOID;}
+{
+                       BEGIN(CLASS_STRING);
+                       before_string = CLASS_CODE;
+                       add_to_cbuf(yytext);
+               }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 478 "lexer.l"
-{return STRUCT;}
+#line 482 "lexer.l"
+{ add_to_cbuf(yytext); }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 479 "lexer.l"
-{return UNION;}
+#line 483 "lexer.l"
+{
+                       BEGIN(before_string);
+                       add_to_cbuf(yytext);
+                       yylval.id = cbuf->str;
+                       g_string_free (cbuf, FALSE);
+                       cbuf = NULL;
+                       return STRING;
+               }
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 480 "lexer.l"
-{return ENUM;}
+#line 491 "lexer.l"
+{ add_to_cbuf(yytext); }
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 481 "lexer.l"
-{return SIGNED;}
+#line 492 "lexer.l"
+{ add_to_cbuf(yytext); }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 482 "lexer.l"
-{return UNSIGNED;}
+#line 494 "lexer.l"
+{return VOID;}
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 483 "lexer.l"
-{return LONG;}
+#line 495 "lexer.l"
+{return STRUCT;}
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 484 "lexer.l"
-{return SHORT;}
+#line 496 "lexer.l"
+{return UNION;}
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 485 "lexer.l"
-{return INT;}
+#line 497 "lexer.l"
+{return ENUM;}
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 486 "lexer.l"
-{return FLOAT;}
+#line 498 "lexer.l"
+{return SIGNED;}
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 487 "lexer.l"
-{return DOUBLE;}
+#line 499 "lexer.l"
+{return UNSIGNED;}
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 488 "lexer.l"
-{return CHAR;}
+#line 500 "lexer.l"
+{return LONG;}
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 489 "lexer.l"
-{return CONST;}
+#line 501 "lexer.l"
+{return SHORT;}
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 491 "lexer.l"
-{return THREEDOTS;}
+#line 502 "lexer.l"
+{return INT;}
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 493 "lexer.l"
-{yylval.line = line_no; return PUBLIC;}
+#line 503 "lexer.l"
+{return FLOAT;}
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 494 "lexer.l"
-{yylval.line = line_no; return PRIVATE;}
+#line 504 "lexer.l"
+{return DOUBLE;}
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 495 "lexer.l"
-{yylval.line = line_no; return PROTECTED;}
+#line 505 "lexer.l"
+{return CHAR;}
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 496 "lexer.l"
-{yylval.line = line_no; return CLASSWIDE;}
+#line 506 "lexer.l"
+{return CONST;}
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 497 "lexer.l"
-{yylval.line = line_no; return ARGUMENT;}
+#line 508 "lexer.l"
+{return THREEDOTS;}
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 498 "lexer.l"
-{yylval.line = line_no; return VIRTUAL;}
+#line 510 "lexer.l"
+{yylval.line = line_no; return PUBLIC;}
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 499 "lexer.l"
-{yylval.line = line_no; return SIGNAL;}
+#line 511 "lexer.l"
+{yylval.line = line_no; return PRIVATE;}
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 500 "lexer.l"
-{yylval.line = line_no; return OVERRIDE;}
+#line 512 "lexer.l"
+{yylval.line = line_no; return PROTECTED;}
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 501 "lexer.l"
+#line 513 "lexer.l"
+{yylval.line = line_no; return CLASSWIDE;}
+       YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 514 "lexer.l"
+{yylval.line = line_no; return ARGUMENT;}
+       YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 515 "lexer.l"
+{yylval.line = line_no; return VIRTUAL;}
+       YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 516 "lexer.l"
+{yylval.line = line_no; return SIGNAL;}
+       YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 517 "lexer.l"
+{yylval.line = line_no; return OVERRIDE;}
+       YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 518 "lexer.l"
 {
                                yylval.line = line_no;
                                BEGIN(PROPERTY_CODE);
                                return PROPERTY;
                        }
        YY_BREAK
-case 85:
+case 90:
 YY_RULE_SETUP
-#line 506 "lexer.l"
+#line 523 "lexer.l"
 { yylval.line = line_no; return NICK; }
        YY_BREAK
-case 86:
+case 91:
 YY_RULE_SETUP
-#line 507 "lexer.l"
+#line 524 "lexer.l"
 { yylval.line = line_no; return BLURB; }
        YY_BREAK
-case 87:
+case 92:
 YY_RULE_SETUP
-#line 508 "lexer.l"
+#line 525 "lexer.l"
 { yylval.line = line_no; return MAXIMUM; }
        YY_BREAK
-case 88:
+case 93:
 YY_RULE_SETUP
-#line 509 "lexer.l"
+#line 526 "lexer.l"
 { yylval.line = line_no; return MINIMUM; }
        YY_BREAK
-case 89:
+case 94:
 YY_RULE_SETUP
-#line 510 "lexer.l"
+#line 527 "lexer.l"
 { yylval.line = line_no; return DEFAULT_VALUE; }
        YY_BREAK
-case 90:
+case 95:
 YY_RULE_SETUP
-#line 511 "lexer.l"
+#line 528 "lexer.l"
 { yylval.line = line_no; return FLAGS; }
        YY_BREAK
-case 91:
+case 96:
 YY_RULE_SETUP
-#line 512 "lexer.l"
+#line 529 "lexer.l"
 { yylval.line = line_no; return TYPE; }
        YY_BREAK
-case 92:
+case 97:
 YY_RULE_SETUP
-#line 513 "lexer.l"
+#line 530 "lexer.l"
 { yylval.line = line_no; return FLAGS_TYPE; }
        YY_BREAK
-case 93:
+case 98:
 YY_RULE_SETUP
-#line 514 "lexer.l"
+#line 531 "lexer.l"
 { yylval.line = line_no; return ENUM_TYPE; }
        YY_BREAK
-case 94:
+case 99:
 YY_RULE_SETUP
-#line 515 "lexer.l"
+#line 532 "lexer.l"
 { yylval.line = line_no; return PARAM_TYPE; }
        YY_BREAK
-case 95:
+case 100:
 YY_RULE_SETUP
-#line 516 "lexer.l"
+#line 533 "lexer.l"
 { yylval.line = line_no; return BOXED_TYPE; }
        YY_BREAK
-case 96:
+case 101:
 YY_RULE_SETUP
-#line 517 "lexer.l"
+#line 534 "lexer.l"
 { yylval.line = line_no; return OBJECT_TYPE; }
        YY_BREAK
-case 97:
+case 102:
 YY_RULE_SETUP
-#line 518 "lexer.l"
+#line 535 "lexer.l"
 {
                yylval.line = line_no;
                property_paren_depth = 1;
@@ -2069,18 +2140,18 @@ YY_RULE_SETUP
                return '(';
                        }
        YY_BREAK
-case 98:
+case 103:
 YY_RULE_SETUP
-#line 524 "lexer.l"
+#line 541 "lexer.l"
 {
                yylval.line = line_no;
                property_paren_depth++;
                return '(';
                        }
        YY_BREAK
-case 99:
+case 104:
 YY_RULE_SETUP
-#line 529 "lexer.l"
+#line 546 "lexer.l"
 {
                yylval.line = line_no;
                property_paren_depth--;
@@ -2090,17 +2161,17 @@ YY_RULE_SETUP
                return ')';
                        }
        YY_BREAK
-case 100:
+case 105:
 YY_RULE_SETUP
-#line 538 "lexer.l"
+#line 555 "lexer.l"
 {
                        yylval.id = g_strdup(yytext);
                        return NUMBER;
                }
        YY_BREAK
-case 101:
+case 106:
 YY_RULE_SETUP
-#line 542 "lexer.l"
+#line 559 "lexer.l"
 {
                        /* This is cpp kind of token thingie */
                        if (for_cpp) {
@@ -2111,59 +2182,68 @@ YY_RULE_SETUP
                        }
                }
        YY_BREAK
-case 102:
+case 107:
 YY_RULE_SETUP
-#line 551 "lexer.l"
+#line 568 "lexer.l"
 {
                        /* this one is for a classname with a namespace */
                        yylval.id = g_strdup(yytext);
                        return TYPETOKEN;
                }
        YY_BREAK
-case 103:
+case 108:
 YY_RULE_SETUP
-#line 556 "lexer.l"
+#line 573 "lexer.l"
 {
                        /* this is for a classname with an empty namespace */
                        yylval.id = g_strdup(yytext);
                        return TYPETOKEN;
                }
        YY_BREAK
-case 104:
+case 109:
 YY_RULE_SETUP
-#line 561 "lexer.l"
+#line 578 "lexer.l"
 {
                        yylval.id = g_strdup(yytext);
                        return TOKEN;
                }
        YY_BREAK
-case 105:
+case 110:
 YY_RULE_SETUP
-#line 565 "lexer.l"
+#line 582 "lexer.l"
 {
                        yylval.id = g_strdup(yytext);
                        return SINGLE_CHAR;
                }
        YY_BREAK
-case 106:
+case 111:
 YY_RULE_SETUP
-#line 570 "lexer.l"
+#line 587 "lexer.l"
 {
                        yylval.id = g_strdup(yytext);
                        return ARRAY_DIM;
                }
        YY_BREAK
-case 107:
+case 112:
+YY_RULE_SETUP
+#line 591 "lexer.l"
+{
+                       /* cheat for bitfield */
+                       yylval.id = g_strdup(yytext);
+                       return ARRAY_DIM;
+               }
+       YY_BREAK
+case 113:
 YY_RULE_SETUP
-#line 575 "lexer.l"
+#line 596 "lexer.l"
 {
                        BEGIN(CLASS_CODE_I);
                        return '{';
                }
        YY_BREAK
-case 108:
+case 114:
 YY_RULE_SETUP
-#line 579 "lexer.l"
+#line 600 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth=1;
@@ -2174,43 +2254,59 @@ YY_RULE_SETUP
                        return '{';
                }
        YY_BREAK
-case 109:
+case 115:
 YY_RULE_SETUP
-#line 588 "lexer.l"
+#line 609 "lexer.l"
 {
                                BEGIN(INITIAL);
                                return '}';
                        }
        YY_BREAK
-case 110:
+case 116:
 YY_RULE_SETUP
-#line 593 "lexer.l"
+#line 614 "lexer.l"
 ;  /*ignore*/
        YY_BREAK
-case 111:
+case 117:
 YY_RULE_SETUP
-#line 595 "lexer.l"
+#line 616 "lexer.l"
 {
                        yylval.line = line_no;
                        return yytext[0];
                }
        YY_BREAK
-case 112:
+case 118:
 YY_RULE_SETUP
-#line 600 "lexer.l"
+#line 621 "lexer.l"
 ;  /*ignore*/
        YY_BREAK
-case 113:
+case 119:
+*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
+yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 623 "lexer.l"
+{
+                       char *p;
+                       int t;
+                       p = strchr (yytext,'p');
+                       g_assert (p); /* we MUST have found it */
+                       sscanf (p, "prealloc %d", &t);
+                       prealloc=t;
+               }
+       YY_BREAK
+case 120:
 YY_RULE_SETUP
-#line 602 "lexer.l"
+#line 632 "lexer.l"
 ECHO;
        YY_BREAK
-#line 2209 "lexer.c"
+#line 2304 "lexer.c"
                        case YY_STATE_EOF(INITIAL):
                        case YY_STATE_EOF(COMMENT):
                        case YY_STATE_EOF(C_CODE):
                        case YY_STATE_EOF(CODE_STRING):
                        case YY_STATE_EOF(CLASS_CODE):
+                       case YY_STATE_EOF(CLASS_STRING):
                        case YY_STATE_EOF(CLASS_CODE_I):
                        case YY_STATE_EOF(PROPERTY_CODE):
                        case YY_STATE_EOF(PROPERTY_CODE_I):
@@ -2505,7 +2601,7 @@ static yy_state_type yy_get_previous_state()
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 516 )
+                       if ( yy_current_state >= 551 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2535,11 +2631,11 @@ yy_state_type yy_current_state;
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 516 )
+               if ( yy_current_state >= 551 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 515);
+       yy_is_jam = (yy_current_state == 550);
        if ( ! yy_is_jam )
                *yy_state_ptr++ = yy_current_state;
 
@@ -3093,5 +3189,5 @@ int main()
        return 0;
        }
 #endif
-#line 602 "lexer.l"
+#line 632 "lexer.l"
 
index 56f86ada52aa2186740e99b3dc31a97faddd0a85..971b121886e3833837700dcd9c7a44bff47a9722 100644 (file)
@@ -104,6 +104,7 @@ int yylex(void);
 %x C_CODE
 %x CODE_STRING
 %x CLASS_CODE
+%x CLASS_STRING
 %x CLASS_CODE_I
 %x PROPERTY_CODE
 %x PROPERTY_CODE_I
@@ -473,6 +474,22 @@ flags              { return FLAGS; }
                }
 
 <CLASS_CODE>from       {return FROM;}
+<CLASS_CODE>\" {
+                       BEGIN(CLASS_STRING);
+                       before_string = CLASS_CODE;
+                       add_to_cbuf(yytext);
+               }
+<CLASS_STRING>\\.      { add_to_cbuf(yytext); }
+<CLASS_STRING>\"       {
+                       BEGIN(before_string);
+                       add_to_cbuf(yytext);
+                       yylval.id = cbuf->str;
+                       g_string_free (cbuf, FALSE);
+                       cbuf = NULL;
+                       return STRING;
+               }
+<CLASS_STRING>.        { add_to_cbuf(yytext); }
+<CLASS_STRING>\n       { add_to_cbuf(yytext); }
 
 <CLASS_CODE_I,PROPERTY_CODE_I>void     {return VOID;}
 <CLASS_CODE_I,PROPERTY_CODE_I>struct   {return STRUCT;}
@@ -548,12 +565,12 @@ flags             { return FLAGS; }
                                REJECT;
                        }
                }
-<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I,INITIAL>[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z0-9_]*)+ {
+<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I,INITIAL>[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z_][A-Za-z0-9_]*)+        {
                        /* this one is for a classname with a namespace */
                        yylval.id = g_strdup(yytext);
                        return TYPETOKEN;
                }
-<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I,INITIAL>:[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z0-9_]*)*        {
+<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I,INITIAL>:[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z_][A-Za-z0-9_]*)*       {
                        /* this is for a classname with an empty namespace */
                        yylval.id = g_strdup(yytext);
                        return TYPETOKEN;
@@ -571,12 +588,16 @@ flags             { return FLAGS; }
                        yylval.id = g_strdup(yytext);
                        return ARRAY_DIM;
                }
-
+<CLASS_CODE_I>:[0-9]+ {
+                       /* cheat for bitfield */
+                       yylval.id = g_strdup(yytext);
+                       return ARRAY_DIM;
+               }
 <CLASS_CODE>\{ {
                        BEGIN(CLASS_CODE_I);
                        return '{';
                }
-<CLASS_CODE_I>\{       {
+<CLASS_CODE_I,PROPERTY_CODE>\{ {
                        BEGIN(C_CODE);
                        parenth_depth=1;
                        class_after_c = TRUE;
@@ -599,4 +620,13 @@ flags              { return FLAGS; }
 
 <*>[\n\r]      ;  /*ignore*/
 
+^[ \t]*prealloc[ \t]+[0-9]+[ \t]*$ {
+                       char *p;
+                       int t;
+                       p = strchr (yytext,'p');
+                       g_assert (p); /* we MUST have found it */
+                       sscanf (p, "prealloc %d", &t);
+                       prealloc=t;
+               }
+
 %%
index f62f2f7065eda2c5c16720b8d6b3c003801af61a..a353061207aca83f582af43990a7ea5db4715280 100644 (file)
@@ -77,6 +77,7 @@ static int protecteds = 0; /* number of protected methods */
 static int unreftors = 0; /* number of variable unreffing destructors */
 static int destructors = 0; /* number of variable non-unreffing destructors */
 static int initializers = 0; /* number of variable initializers */
+static int glade_widgets = 0; /* number of glade widgets */
 static gboolean overrode_get_type = FALSE; /* provided your won _get_type */
 
 static gboolean made_aliases = FALSE;  /* if we made any shorthand aliases
@@ -110,6 +111,7 @@ gboolean no_write = FALSE;
 gboolean no_lines = FALSE;
 gboolean no_self_alias = FALSE;
 gboolean always_private_struct = FALSE;
+gint prealloc = 0;
 
 gboolean use_m4 = FALSE; /* preprocess sources with m4 */
 gboolean use_m4_clean = FALSE; /* preprocess sources with m4, no m4 flags */
@@ -1070,11 +1072,11 @@ add_get_type(void)
                   "\t\t\t(GClassFinalizeFunc) NULL,\n"
                   "\t\t\tNULL /* class_data */,\n"
                   "\t\t\tsizeof (%s),\n"
-                  "\t\t\t0 /* n_preallocs */,\n"
+                  "\t\t\t%d /* n_preallocs */,\n"
                   "\t\t\t(GInstanceInitFunc) %s_init,\n"
                   "\t\t\tNULL\n"
                   "\t\t};\n\n",
-                  funcbase, typebase, funcbase, typebase, funcbase);
+                  funcbase, typebase, funcbase, typebase, prealloc, funcbase);
 
        add_interface_infos ();
 
@@ -1428,8 +1430,8 @@ make_argument (Argument *a)
        char *argflags[] = {
                "CONSTRUCT",
                "CONSTRUCT_ONLY",
-               "CHILD_ARG",
-               "MASK",
+               "LAX_VALIDATION",
+               "PRIVATE",
                NULL
        };
 
@@ -1459,13 +1461,7 @@ make_argument (Argument *a)
                        if(strcmp(argflags[i], flag)==0)
                                break;
                }
-               /* if we haven't found it in our list */
-               if( ! argflags[i]) {
-                       error_printf(GOB_WARN, a->line_no,
-                                    "Unknown flag '%s' used, "
-                                    "perhaps it was misspelled", flag);
-               }
-               g_string_sprintfa(flags, " | G_PARAM_%s", flag);
+               g_string_sprintfa(flags, " | %s%s", argflags[i] ? "G_PARAM_" : "", flag);
        }
 
        g_string_append (flags, ")");
@@ -1625,8 +1621,8 @@ make_property (Property *p)
                char *argflags[] = {
                        "CONSTRUCT",
                        "CONSTRUCT_ONLY",
-                       "CHILD_ARG",
-                       "MASK",
+                       "LAX_VALIDATION",
+                       "PRIVATE",
                        NULL
                };
 
@@ -1655,13 +1651,7 @@ make_property (Property *p)
                                if(strcmp(argflags[i], flag)==0)
                                        break;
                        }
-                       /* if we haven't found it in our list */
-                       if( ! argflags[i]) {
-                               error_printf(GOB_WARN, p->line_no,
-                                            "Unknown flag '%s' used, "
-                                            "perhaps it was misspelled", flag);
-                       }
-                       g_string_sprintfa(flags, " | G_PARAM_%s", flag);
+                       g_string_sprintfa(flags, " | %s%s", argflags[i] ? "G_PARAM_" : "", flag);
                }
 
                g_string_append (flags, ")");
@@ -2024,8 +2014,11 @@ print_initializer(Method *m, Variable *v)
        if(v->initializer_line > 0)
                out_addline_infile(out, v->initializer_line);
 
-       out_printf(out, "\t%s->%s = %s;\n",
+       if (v->initializer_simple)
+               out_printf(out, "\t%s->%s = %s;\n",
                   root, v->id, v->initializer);
+       else
+               out_printf(out,v->initializer);
 
        if(v->initializer_line > 0)
                out_addline_outfile(out);
@@ -2033,6 +2026,28 @@ print_initializer(Method *m, Variable *v)
        g_free(root);
 }
 
+static void
+print_glade_widget(Method *m, Variable *v)
+{
+       char *root;
+  char *cast;
+       
+       if(!v->glade_widget)
+               return;
+
+       if(v->scope == PRIVATE_SCOPE)
+               root = g_strconcat(((FuncArg *)m->args->data)->name,
+                                  "->_priv", NULL);
+       else
+               root = g_strdup(((FuncArg *)m->args->data)->name);
+
+       cast = get_type(v->vtype, FALSE);
+       out_printf(out, "\t%s->%s = (%s)glade_xml_get_widget(%s->_glade_xml, \"%s\");\n",
+                  root, v->id, cast, root, v->id);
+
+       g_free(root);
+}
+       
 static void
 print_destructor (Variable *v)
 {
@@ -2250,9 +2265,10 @@ add_inits(Class *c)
                                   c->otype);
                        if (privates > 0) {
                                out_printf(out, "\t%s->_priv = "
-                                               "G_TYPE_INSTANCE_GET_PRIVATE(%s,TYPE_SELF,%sPrivate);\n",
+                                               "G_TYPE_INSTANCE_GET_PRIVATE(%s,%s,%sPrivate);\n",
                                                ((FuncArg *)m->args->data)->name,
                                                ((FuncArg *)m->args->data)->name,
+                                               macrotype,
                                                typebase);
                        } else if(always_private_struct) {
                                out_printf(out, "\t%s->_priv = NULL;\n",
@@ -2271,6 +2287,19 @@ add_inits(Class *c)
                                        print_initializer(m, v);
                                }
                        }
+                       if(glade_widgets > 0) {
+                               GList *li;
+                               for(li = ((Class *)class)->nodes;
+                                   li != NULL;
+                                   li = li->next) {
+                                       Node *n = li->data;
+                                       Variable *v = (Variable *)n;
+                                       if(n->type != VARIABLE_NODE ||
+                                          v->scope == CLASS_SCOPE)
+                                               continue;
+                                       print_glade_widget(m, v);
+                               }
+                       }
                } else if(m->method == CLASS_INIT_METHOD) {
                        gboolean did_base_obj = FALSE;
 
@@ -3257,6 +3286,12 @@ print_class_block(Class *c)
        char *s;
        gboolean printed_private = FALSE;
 
+       if (c->glade_xml)
+       {
+               out_printf(outph ? outph : outh, "#include <gtk/gtk.h>\n");
+               out_printf(outph ? outph : outh, "#include <glade/glade-xml.h>\n\n");
+       }
+       
        if(any_special) {
                out_printf(out, "/* utility types we may need */\n");
                if(special_array[SPECIAL_2POINTER])
@@ -3383,16 +3418,19 @@ print_class_block(Class *c)
 
                out_printf (outfp, "struct _%sPrivate {\n",
                            typebase);
-               for(li=c->nodes; li; li=li->next) {
-                       Node *n = li->data;
-                       Variable *v = (Variable *)n;
-                       if(n->type == VARIABLE_NODE &&
-                          v->scope == PRIVATE_SCOPE) {
-                               out_addline_infile(outfp, v->line_no);
-                               put_variable(v, outfp);
+               if (privates > 0)
+               {
+                for(li=c->nodes; li; li=li->next) {
+                        Node *n = li->data;
+                        Variable *v = (Variable *)n;
+                        if(n->type == VARIABLE_NODE &&
+                                       v->scope == PRIVATE_SCOPE) {
+                                out_addline_infile(outfp, v->line_no);
+                                put_variable(v, outfp);
+                        }
                        }
+                       out_addline_outfile(outfp);
                }
-               out_addline_outfile(outfp);
                out_printf(outfp, "};\n");
        }
 
@@ -3538,6 +3576,43 @@ print_class_block(Class *c)
                    no_gnu ? "" : " G_GNUC_UNUSED",
                    typebase, typebase, typebase, funcbase);
 
+       if (c->glade_xml)
+       {
+               out_printf (out, "/* a function to connect glade callback */\n");
+               out_printf (out,"static void\n"
+                           "___glade_xml_connect_foreach(const gchar *handler_name,\n"
+                           "GObject *object,\n"
+                           "const gchar *signal_name,\n"
+                           "const gchar *signal_data,\n"
+                           "GObject *connect_object,\n"
+                           "gboolean after,\n"
+                           "gpointer user_data)\n"
+                           "{\n"
+                           "\tstatic GModule * allsymbols = NULL;\n"
+                           "   \n"
+                           "\tif (!allsymbols) allsymbols = g_module_open(NULL, 0);\n"
+                           "\tif (allsymbols) {\n"
+                           "\t\tgchar * func_name = g_strdup_printf(\"%s_%%s\", handler_name);\n"
+                           "\t\tGCallback func;\n"
+                           "\n"
+                           "\t\tif (!g_module_symbol(allsymbols, func_name, (gpointer)&func)){\n"
+                           "\t\t\tif (!g_module_symbol(allsymbols, handler_name, (gpointer)&func)) {\n"
+                           "\t\t\t\tg_warning(\"could not find signal handler '%%s'.\", func_name);\n"
+                           "\t\t\t\tg_free(func_name);\n"
+                           "\t\t\t\treturn;\n"
+                           "\t\t\t}\n"
+                           "\t\t}\n"
+                           "\t\tif (after)\n"
+                           "\t\t\tg_signal_connect_data(object, signal_name, func, user_data, NULL, G_CONNECT_AFTER | G_CONNECT_SWAPPED);\n"
+                           "\t\telse\n"
+                           "\t\t\tg_signal_connect_data(object, signal_name, func, user_data, NULL, G_CONNECT_SWAPPED);\n"
+                           "\t\tg_free(func_name);\n"
+                           "\t}\n"
+                           "}\n"
+                           "\n",
+                           funcbase);
+       }
+
        if (need_dispose)
                add_dispose (c);
 
@@ -4290,6 +4365,7 @@ main(int argc, char *argv[])
        unreftors = count_unreftors ((Class *)class);
        destructors = count_destructors ((Class *)class);
        initializers = count_initializers ((Class *)class);
+       glade_widgets = count_glade_widgets ((Class *)class);
        overrode_get_type = find_get_type ((Class *)class);
 
        make_bases ();
index abc6049c0c7084366cbc387998a6ff6f05cbe94d..f644df9a0a77ef1e335753dfcd2df4736a55c4a4 100644 (file)
@@ -42,6 +42,7 @@ extern gboolean no_lines;
 extern gboolean no_self_alias;
 extern gboolean no_kill_underscores;
 extern gboolean always_private_struct;
+extern gint prealloc;
 
 extern char *filename;
 extern char *filebase;
index 762e14c4b3010cabfc31573d7c10b460cb106833..0146efb007d2356c55f7ecd3190e8914e42676a2 100644 (file)
@@ -187,6 +187,7 @@ static GList *error_vals = NULL;
 
 static char *chunk_size = NULL;
 static char *bonobo_object_class = NULL;
+static int glade_xml = FALSE;
 static GList *interfaces = NULL;
 static GList *typestack = NULL;
 static GList *funcargs = NULL;
@@ -202,6 +203,7 @@ static int destructor_line = 0;
 static gboolean destructor_simple = TRUE;
 static char *initializer = NULL;
 static int initializer_line = 0;
+static int glade_widget = FALSE;
 
 static char *onerror = NULL;
 static char *defreturn = NULL;
@@ -267,6 +269,7 @@ push_variable (char *name, int scope, int line_no, char *postfix)
        var = node_new (VARIABLE_NODE,
                        "scope", scope,
                        "vtype:steal", type,
+                       "glade_widget", glade_widget,
                        "id:steal", name,
                        "line_no", line_no,
                        "destructor_unref", destructor_unref,
@@ -275,8 +278,10 @@ push_variable (char *name, int scope, int line_no, char *postfix)
                        "destructor_simple", destructor_simple,
                        "initializer:steal", initializer,
                        "initializer_line", initializer_line,
+                       "initializer_simple", TRUE,
                        NULL);
        class_nodes = g_list_append(class_nodes, var);
+       glade_widget = FALSE;
 }
 
 static void
@@ -603,6 +608,41 @@ get_prop_enum_flag_cast (Property *prop)
        return ret;
 }
 
+static void
+add_construct_glade (char * file, char * root, char * domain)
+{
+       Node *var;
+       Type * type;
+       GList * flags = NULL;
+       char * set;
+       
+       type = (Type *)node_new (TYPE_NODE,
+                                "name", "GladeXML",
+                                "pointer", "*",
+                                NULL);
+       initializer = g_strdup_printf("\t{\n"
+                                     "\tGtkWidget * root;\n"
+                                     "\to->_priv->_glade_xml = glade_xml_new(%s, %s, %s);\n"
+                                     "\troot = glade_xml_get_widget(o->_priv->_glade_xml, %s);\n"
+                                     "\tgtk_widget_show(root);\n"
+                                     "\tgtk_container_add(GTK_CONTAINER(o), root);\n"
+                                     "\tglade_xml_signal_autoconnect_full(o->_priv->_glade_xml, (GladeXMLConnectFunc)___glade_xml_connect_foreach, (gpointer)o);\n"
+                                     "}\n", file, root, domain ? domain : "NULL", root);
+       
+       var = node_new (VARIABLE_NODE,
+                       "scope", PRIVATE_SCOPE,
+                       "vtype:steal", type,
+                       "glade_widget", FALSE,
+                       "id:steal", "_glade_xml",
+                       "destructor_unref", FALSE,
+                       "destructor", "g_object_unref", 
+                       "destructor_simple", TRUE,
+                       "initializer", initializer,
+                       "initializer_simple", FALSE,
+                       NULL);
+       class_nodes = g_list_prepend(class_nodes, var);
+}
+
 static void
 property_link_and_export (Node *node)
 {
@@ -780,7 +820,7 @@ ensure_property (void)
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 628 "parse.y"
+#line 668 "parse.y"
 typedef union YYSTYPE {
        char *id;
        GString *cbuf;
@@ -789,7 +829,7 @@ typedef union YYSTYPE {
        int sigtype;
 } YYSTYPE;
 /* Line 191 of yacc.c.  */
-#line 793 "parse.c"
+#line 833 "parse.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -801,7 +841,7 @@ typedef union YYSTYPE {
 
 
 /* Line 214 of yacc.c.  */
-#line 805 "parse.c"
+#line 845 "parse.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -907,16 +947,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state. */
 #define YYFINAL  23
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   572
+#define YYLAST   595
 
 /* YYNTOKENS -- Number of terminals. */
 #define YYNTOKENS  66
 /* YYNNTS -- Number of nonterminals. */
 #define YYNNTS  53
 /* YYNRULES -- Number of rules. */
-#define YYNRULES  189
+#define YYNRULES  194
 /* YYNRULES -- Number of states. */
-#define YYNSTATES  398
+#define YYNSTATES  412
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -968,23 +1008,24 @@ static const unsigned short yyprhs[] =
 {
        0,     0,     3,     7,    10,    13,    15,    17,    19,    21,
       23,    25,    27,    30,    33,    36,    39,    41,    43,    45,
-      47,    52,    56,    62,    63,    69,    75,    81,    84,    86,
-      88,    91,    95,    97,    99,   101,   103,   105,   107,   109,
-     111,   114,   118,   121,   125,   128,   131,   133,   135,   136,
-     142,   149,   162,   172,   179,   183,   184,   196,   205,   211,
-     215,   216,   220,   222,   224,   229,   231,   233,   237,   241,
-     245,   249,   253,   257,   261,   265,   269,   273,   277,   281,
-     285,   289,   293,   297,   301,   303,   309,   311,   315,   316,
-     320,   322,   325,   327,   329,   331,   334,   337,   340,   344,
-     348,   351,   354,   357,   359,   362,   364,   367,   369,   371,
-     373,   375,   377,   379,   381,   383,   385,   387,   389,   391,
-     393,   396,   399,   403,   406,   408,   412,   416,   419,   421,
-     426,   430,   432,   435,   437,   448,   460,   470,   480,   489,
-     501,   510,   516,   519,   524,   525,   527,   530,   532,   534,
-     537,   540,   544,   549,   554,   556,   560,   562,   566,   568,
-     571,   575,   582,   590,   593,   595,   597,   600,   603,   607,
-     611,   615,   619,   627,   636,   640,   642,   646,   648,   656,
-     665,   669,   671,   679,   688,   692,   694,   696,   699,   701
+      47,    52,    56,    62,    63,    69,    75,    81,    88,    96,
+     103,   111,   114,   116,   118,   121,   125,   127,   129,   131,
+     133,   135,   137,   139,   141,   144,   148,   151,   155,   158,
+     161,   163,   165,   167,   168,   174,   181,   194,   204,   211,
+     215,   216,   228,   237,   243,   247,   248,   252,   254,   256,
+     261,   263,   265,   269,   273,   277,   281,   285,   289,   293,
+     297,   301,   305,   309,   313,   317,   321,   325,   329,   333,
+     335,   341,   343,   347,   348,   352,   354,   357,   359,   361,
+     363,   366,   369,   372,   376,   380,   383,   386,   389,   391,
+     394,   396,   399,   401,   403,   405,   407,   409,   411,   413,
+     415,   417,   419,   421,   423,   425,   428,   431,   435,   438,
+     440,   444,   448,   451,   453,   458,   462,   464,   467,   469,
+     480,   492,   502,   512,   521,   533,   542,   548,   551,   556,
+     557,   559,   562,   564,   566,   569,   572,   576,   581,   586,
+     588,   592,   594,   598,   600,   603,   607,   614,   622,   625,
+     627,   629,   632,   635,   639,   643,   647,   651,   659,   668,
+     672,   674,   678,   680,   688,   697,   701,   703,   711,   720,
+     724,   726,   728,   731,   733
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
@@ -998,93 +1039,97 @@ static const yysigned_char yyrhs[] =
       54,    -1,    71,    53,    54,    -1,     3,    21,     4,    21,
       72,    -1,    -1,    55,    19,    19,    56,    72,    -1,    55,
       19,    21,    56,    72,    -1,    55,    19,    20,    56,    72,
+      -1,    55,    19,    30,    30,    56,    72,    -1,    55,    19,
+      30,    30,    30,    56,    72,    -1,    55,    19,    19,    30,
+      56,    72,    -1,    55,    19,    19,    30,    30,    56,    72,
       -1,    73,    74,    -1,    74,    -1,   102,    -1,    19,   102,
       -1,    19,    21,   102,    -1,    79,    -1,    80,    -1,    82,
       -1,    57,    -1,    31,    -1,    32,    -1,    33,    -1,    34,
       -1,    19,    19,    -1,    19,    53,    24,    -1,    58,   118,
       -1,    58,    53,    24,    -1,    76,    77,    -1,    77,    76,
-      -1,    77,    -1,    76,    -1,    -1,    75,    91,    19,    78,
-      57,    -1,    75,    91,    19,    22,    78,    57,    -1,    36,
-      89,    88,    19,    81,    19,    53,    24,    19,    53,    24,
-      57,    -1,    36,    89,    88,    19,    81,    19,    53,    24,
-      57,    -1,    36,    89,    88,    19,    81,    19,    -1,    55,
-      19,    56,    -1,    -1,    35,    19,    19,    83,    19,    53,
-      24,    19,    53,    24,    57,    -1,    35,    19,    19,    83,
-      19,    53,    24,    57,    -1,    35,    19,    19,    83,    57,
-      -1,    55,    84,    56,    -1,    -1,    84,    59,    87,    -1,
-      87,    -1,    30,    -1,    19,    55,    30,    56,    -1,   118,
-      -1,    85,    -1,    40,    58,    85,    -1,    41,    58,    85,
-      -1,    42,    58,   118,    -1,    43,    58,   118,    -1,    44,
-      58,    86,    -1,    46,    58,    90,    -1,    47,    58,    91,
-      -1,    48,    58,    21,    -1,    48,    58,    19,    -1,    49,
-      58,    21,    -1,    49,    58,    19,    -1,    50,    58,    21,
-      -1,    50,    58,    19,    -1,    51,    58,    21,    -1,    51,
-      58,    19,    -1,    52,    58,    21,    -1,    52,    58,    19,
-      -1,    19,    -1,    19,    55,    19,    91,    56,    -1,    19,
-      -1,    55,    90,    56,    -1,    -1,    19,    60,    90,    -1,
-      19,    -1,    92,    96,    -1,    92,    -1,    93,    -1,    19,
-      -1,     5,    19,    -1,    19,     5,    -1,    95,    19,    -1,
-       5,    95,    19,    -1,    95,    19,     5,    -1,    94,    93,
-      -1,    21,    93,    -1,     5,    93,    -1,    21,    -1,    21,
-       5,    -1,    94,    -1,    94,     5,    -1,     6,    -1,    18,
-      -1,    14,    -1,    15,    -1,    13,    -1,    16,    -1,    17,
-      -1,    11,    -1,    12,    -1,     7,    -1,     8,    -1,     9,
-      -1,    61,    -1,    61,     5,    -1,    61,    96,    -1,    61,
-       5,    96,    -1,    19,    99,    -1,    99,    -1,    75,    19,
-      99,    -1,    19,    75,    99,    -1,    75,    99,    -1,    97,
-      -1,    19,    55,   100,    56,    -1,   100,    59,    19,    -1,
-      19,    -1,    53,    24,    -1,    57,    -1,    38,    89,    98,
-      91,    19,    55,   105,    56,   103,   101,    -1,    75,    38,
-      89,    97,    91,    19,    55,   105,    56,   103,   101,    -1,
-      37,    75,    91,    19,    55,   105,    56,   103,   101,    -1,
-      75,    37,    91,    19,    55,   105,    56,   103,   101,    -1,
-      37,    91,    19,    55,   105,    56,   103,   101,    -1,    39,
-      55,    21,    56,    91,    19,    55,   105,    56,   103,   101,
-      -1,    75,    91,    19,    55,   105,    56,   103,   101,    -1,
-      19,    55,    19,    56,   101,    -1,    19,   104,    -1,    19,
-     104,    19,   104,    -1,    -1,   118,    -1,    53,    24,    -1,
-       6,    -1,    19,    -1,    19,     5,    -1,     5,    19,    -1,
-      19,    59,   106,    -1,    19,     5,    59,   106,    -1,     5,
-      19,    59,   106,    -1,   106,    -1,   107,    59,    10,    -1,
-     107,    -1,   107,    59,   108,    -1,   108,    -1,    91,    19,
-      -1,    91,    19,    22,    -1,    91,    19,    55,    19,   109,
-      56,    -1,    91,    19,    22,    55,    19,   109,    56,    -1,
-     109,   110,    -1,   110,    -1,    19,    -1,    62,   118,    -1,
-      63,   118,    -1,    62,    58,   118,    -1,    63,    58,   118,
-      -1,    58,    58,   118,    -1,    64,    58,   118,    -1,     9,
-      19,    53,   112,    54,    21,    57,    -1,     9,    19,    53,
-     112,    59,    54,    21,    57,    -1,   112,    59,   113,    -1,
-     113,    -1,    19,    58,   118,    -1,    19,    -1,    46,    19,
-      53,   115,    54,    21,    57,    -1,    46,    19,    53,   115,
-      59,    54,    21,    57,    -1,   115,    59,    19,    -1,    19,
-      -1,    45,    19,    53,   117,    54,    21,    57,    -1,    45,
-      19,    53,   117,    59,    54,    21,    57,    -1,   117,    59,
-      19,    -1,    19,    -1,    20,    -1,    65,    20,    -1,    23,
-      -1,    19,    -1
+      -1,    77,    -1,    76,    -1,    19,    -1,    -1,    75,    91,
+      19,    78,    57,    -1,    75,    91,    19,    22,    78,    57,
+      -1,    36,    89,    88,    19,    81,    19,    53,    24,    19,
+      53,    24,    57,    -1,    36,    89,    88,    19,    81,    19,
+      53,    24,    57,    -1,    36,    89,    88,    19,    81,    19,
+      -1,    55,    19,    56,    -1,    -1,    35,    19,    19,    83,
+      19,    53,    24,    19,    53,    24,    57,    -1,    35,    19,
+      19,    83,    19,    53,    24,    57,    -1,    35,    19,    19,
+      83,    57,    -1,    55,    84,    56,    -1,    -1,    84,    59,
+      87,    -1,    87,    -1,    30,    -1,    19,    55,    30,    56,
+      -1,   118,    -1,    85,    -1,    40,    58,    85,    -1,    41,
+      58,    85,    -1,    42,    58,   118,    -1,    43,    58,   118,
+      -1,    44,    58,    86,    -1,    46,    58,    90,    -1,    47,
+      58,    91,    -1,    48,    58,    21,    -1,    48,    58,    19,
+      -1,    49,    58,    21,    -1,    49,    58,    19,    -1,    50,
+      58,    21,    -1,    50,    58,    19,    -1,    51,    58,    21,
+      -1,    51,    58,    19,    -1,    52,    58,    21,    -1,    52,
+      58,    19,    -1,    19,    -1,    19,    55,    19,    91,    56,
+      -1,    19,    -1,    55,    90,    56,    -1,    -1,    19,    60,
+      90,    -1,    19,    -1,    92,    96,    -1,    92,    -1,    93,
+      -1,    19,    -1,     5,    19,    -1,    19,     5,    -1,    95,
+      19,    -1,     5,    95,    19,    -1,    95,    19,     5,    -1,
+      94,    93,    -1,    21,    93,    -1,     5,    93,    -1,    21,
+      -1,    21,     5,    -1,    94,    -1,    94,     5,    -1,     6,
+      -1,    18,    -1,    14,    -1,    15,    -1,    13,    -1,    16,
+      -1,    17,    -1,    11,    -1,    12,    -1,     7,    -1,     8,
+      -1,     9,    -1,    61,    -1,    61,     5,    -1,    61,    96,
+      -1,    61,     5,    96,    -1,    19,    99,    -1,    99,    -1,
+      75,    19,    99,    -1,    19,    75,    99,    -1,    75,    99,
+      -1,    97,    -1,    19,    55,   100,    56,    -1,   100,    59,
+      19,    -1,    19,    -1,    53,    24,    -1,    57,    -1,    38,
+      89,    98,    91,    19,    55,   105,    56,   103,   101,    -1,
+      75,    38,    89,    97,    91,    19,    55,   105,    56,   103,
+     101,    -1,    37,    75,    91,    19,    55,   105,    56,   103,
+     101,    -1,    75,    37,    91,    19,    55,   105,    56,   103,
+     101,    -1,    37,    91,    19,    55,   105,    56,   103,   101,
+      -1,    39,    55,    21,    56,    91,    19,    55,   105,    56,
+     103,   101,    -1,    75,    91,    19,    55,   105,    56,   103,
+     101,    -1,    19,    55,    19,    56,   101,    -1,    19,   104,
+      -1,    19,   104,    19,   104,    -1,    -1,   118,    -1,    53,
+      24,    -1,     6,    -1,    19,    -1,    19,     5,    -1,     5,
+      19,    -1,    19,    59,   106,    -1,    19,     5,    59,   106,
+      -1,     5,    19,    59,   106,    -1,   106,    -1,   107,    59,
+      10,    -1,   107,    -1,   107,    59,   108,    -1,   108,    -1,
+      91,    19,    -1,    91,    19,    22,    -1,    91,    19,    55,
+      19,   109,    56,    -1,    91,    19,    22,    55,    19,   109,
+      56,    -1,   109,   110,    -1,   110,    -1,    19,    -1,    62,
+     118,    -1,    63,   118,    -1,    62,    58,   118,    -1,    63,
+      58,   118,    -1,    58,    58,   118,    -1,    64,    58,   118,
+      -1,     9,    19,    53,   112,    54,    21,    57,    -1,     9,
+      19,    53,   112,    59,    54,    21,    57,    -1,   112,    59,
+     113,    -1,   113,    -1,    19,    58,   118,    -1,    19,    -1,
+      46,    19,    53,   115,    54,    21,    57,    -1,    46,    19,
+      53,   115,    59,    54,    21,    57,    -1,   115,    59,    19,
+      -1,    19,    -1,    45,    19,    53,   117,    54,    21,    57,
+      -1,    45,    19,    53,   117,    59,    54,    21,    57,    -1,
+     117,    59,    19,    -1,    19,    -1,    20,    -1,    65,    20,
+      -1,    23,    -1,    19,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
-       0,   649,   649,   650,   651,   652,   655,   664,   673,   682,
-     691,   700,   711,   712,   713,   714,   715,   716,   717,   718,
-     721,   726,   733,   747,   748,   760,   769,   783,   784,   787,
-     788,   797,   809,   810,   811,   812,   815,   816,   817,   818,
-     821,   841,   865,   869,   877,   878,   879,   880,   881,   887,
-     890,   895,   963,  1017,  1106,  1114,  1119,  1167,  1203,  1219,
-    1220,  1223,  1224,  1227,  1228,  1240,  1241,  1244,  1250,  1256,
-    1262,  1268,  1274,  1280,  1287,  1293,  1299,  1305,  1311,  1317,
-    1323,  1329,  1335,  1341,  1347,  1372,  1381,  1387,  1388,  1391,
-    1394,  1400,  1407,  1416,  1419,  1422,  1426,  1430,  1434,  1439,
-    1447,  1451,  1456,  1460,  1463,  1467,  1470,  1475,  1476,  1477,
-    1478,  1479,  1480,  1481,  1482,  1483,  1486,  1487,  1488,  1491,
-    1492,  1493,  1497,  1504,  1516,  1522,  1534,  1546,  1549,  1555,
-    1560,  1563,  1568,  1569,  1573,  1589,  1605,  1621,  1637,  1648,
-    1654,  1664,  1687,  1698,  1717,  1723,  1724,  1730,  1731,  1742,
-    1753,  1764,  1774,  1784,  1794,  1797,  1798,  1801,  1802,  1805,
-    1808,  1811,  1819,  1829,  1830,  1833,  1850,  1857,  1864,  1871,
-    1878,  1885,  1894,  1903,  1914,  1915,  1918,  1938,  1948,  1957,
-    1968,  1971,  1976,  1985,  1996,  1999,  2005,  2006,  2010,  2011
+       0,   689,   689,   690,   691,   692,   695,   704,   713,   722,
+     731,   740,   751,   752,   753,   754,   755,   756,   757,   758,
+     761,   766,   773,   789,   790,   802,   811,   823,   832,   841,
+     850,   861,   862,   865,   866,   875,   887,   888,   889,   890,
+     893,   894,   895,   896,   899,   919,   943,   947,   955,   956,
+     957,   958,   959,   967,   973,   976,   981,  1049,  1103,  1192,
+    1200,  1205,  1253,  1289,  1305,  1306,  1309,  1310,  1313,  1314,
+    1326,  1327,  1330,  1336,  1342,  1348,  1354,  1360,  1366,  1373,
+    1379,  1385,  1391,  1397,  1403,  1409,  1415,  1421,  1427,  1433,
+    1458,  1467,  1473,  1474,  1477,  1480,  1486,  1493,  1502,  1505,
+    1508,  1512,  1516,  1520,  1525,  1533,  1537,  1542,  1546,  1549,
+    1553,  1556,  1561,  1562,  1563,  1564,  1565,  1566,  1567,  1568,
+    1569,  1572,  1573,  1574,  1577,  1578,  1579,  1583,  1590,  1602,
+    1608,  1620,  1632,  1635,  1641,  1646,  1649,  1654,  1655,  1659,
+    1675,  1691,  1707,  1723,  1734,  1740,  1750,  1773,  1784,  1803,
+    1809,  1810,  1816,  1817,  1828,  1839,  1850,  1860,  1870,  1880,
+    1883,  1884,  1887,  1888,  1891,  1894,  1897,  1905,  1915,  1916,
+    1919,  1936,  1943,  1950,  1957,  1964,  1971,  1980,  1989,  2000,
+    2001,  2004,  2024,  2034,  2043,  2054,  2057,  2062,  2071,  2082,
+    2085,  2091,  2092,  2096,  2097
 };
 #endif
 
@@ -1135,23 +1180,24 @@ static const unsigned char yyr1[] =
 {
        0,    66,    67,    67,    67,    67,    68,    68,    68,    68,
       68,    68,    69,    69,    69,    69,    69,    69,    69,    69,
-      70,    70,    71,    72,    72,    72,    72,    73,    73,    74,
-      74,    74,    74,    74,    74,    74,    75,    75,    75,    75,
-      76,    76,    77,    77,    78,    78,    78,    78,    78,    79,
-      79,    80,    80,    80,    81,    81,    82,    82,    82,    83,
-      83,    84,    84,    85,    85,    86,    86,    87,    87,    87,
+      70,    70,    71,    72,    72,    72,    72,    72,    72,    72,
+      72,    73,    73,    74,    74,    74,    74,    74,    74,    74,
+      75,    75,    75,    75,    76,    76,    77,    77,    78,    78,
+      78,    78,    78,    78,    79,    79,    80,    80,    80,    81,
+      81,    82,    82,    82,    83,    83,    84,    84,    85,    85,
+      86,    86,    87,    87,    87,    87,    87,    87,    87,    87,
       87,    87,    87,    87,    87,    87,    87,    87,    87,    87,
-      87,    87,    87,    87,    87,    88,    88,    89,    89,    90,
-      90,    91,    91,    92,    92,    92,    92,    92,    92,    92,
-      93,    93,    93,    93,    93,    93,    93,    94,    94,    94,
-      94,    94,    94,    94,    94,    94,    95,    95,    95,    96,
-      96,    96,    96,    97,    97,    98,    98,    98,    98,    99,
-     100,   100,   101,   101,   102,   102,   102,   102,   102,   102,
-     102,   102,   103,   103,   103,   104,   104,   105,   105,   105,
-     105,   105,   105,   105,   105,   106,   106,   107,   107,   108,
-     108,   108,   108,   109,   109,   110,   110,   110,   110,   110,
-     110,   110,   111,   111,   112,   112,   113,   113,   114,   114,
-     115,   115,   116,   116,   117,   117,   118,   118,   118,   118
+      88,    88,    89,    89,    90,    90,    91,    91,    92,    92,
+      92,    92,    92,    92,    92,    93,    93,    93,    93,    93,
+      93,    93,    94,    94,    94,    94,    94,    94,    94,    94,
+      94,    95,    95,    95,    96,    96,    96,    96,    97,    97,
+      98,    98,    98,    98,    99,   100,   100,   101,   101,   102,
+     102,   102,   102,   102,   102,   102,   102,   103,   103,   103,
+     104,   104,   105,   105,   105,   105,   105,   105,   105,   105,
+     106,   106,   107,   107,   108,   108,   108,   108,   109,   109,
+     110,   110,   110,   110,   110,   110,   110,   111,   111,   112,
+     112,   113,   113,   114,   114,   115,   115,   116,   116,   117,
+     117,   118,   118,   118,   118
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1159,23 +1205,24 @@ static const unsigned char yyr2[] =
 {
        0,     2,     3,     2,     2,     1,     1,     1,     1,     1,
        1,     1,     2,     2,     2,     2,     1,     1,     1,     1,
-       4,     3,     5,     0,     5,     5,     5,     2,     1,     1,
-       2,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       2,     3,     2,     3,     2,     2,     1,     1,     0,     5,
-       6,    12,     9,     6,     3,     0,    11,     8,     5,     3,
-       0,     3,     1,     1,     4,     1,     1,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     1,     5,     1,     3,     0,     3,
-       1,     2,     1,     1,     1,     2,     2,     2,     3,     3,
-       2,     2,     2,     1,     2,     1,     2,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       2,     2,     3,     2,     1,     3,     3,     2,     1,     4,
-       3,     1,     2,     1,    10,    11,     9,     9,     8,    11,
-       8,     5,     2,     4,     0,     1,     2,     1,     1,     2,
-       2,     3,     4,     4,     1,     3,     1,     3,     1,     2,
-       3,     6,     7,     2,     1,     1,     2,     2,     3,     3,
-       3,     3,     7,     8,     3,     1,     3,     1,     7,     8,
-       3,     1,     7,     8,     3,     1,     1,     2,     1,     1
+       4,     3,     5,     0,     5,     5,     5,     6,     7,     6,
+       7,     2,     1,     1,     2,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     2,     3,     2,     3,     2,     2,
+       1,     1,     1,     0,     5,     6,    12,     9,     6,     3,
+       0,    11,     8,     5,     3,     0,     3,     1,     1,     4,
+       1,     1,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     1,
+       5,     1,     3,     0,     3,     1,     2,     1,     1,     1,
+       2,     2,     2,     3,     3,     2,     2,     2,     1,     2,
+       1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     2,     2,     3,     2,     1,
+       3,     3,     2,     1,     4,     3,     1,     2,     1,    10,
+      11,     9,     9,     8,    11,     8,     5,     2,     4,     0,
+       1,     2,     1,     1,     2,     2,     3,     4,     4,     1,
+       3,     1,     3,     1,     2,     3,     6,     7,     2,     1,
+       1,     2,     2,     3,     3,     3,     3,     7,     8,     3,
+       1,     3,     1,     7,     8,     3,     1,     7,     8,     3,
+       1,     1,     2,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1186,241 +1233,249 @@ static const unsigned char yydefact[] =
        0,     0,     0,     6,     8,     9,     7,    10,    11,     0,
        0,     0,    16,     0,     5,     0,    17,    18,    19,     0,
        0,     0,     0,     1,    12,     4,    13,    14,    15,     3,
-       0,     0,     0,     0,     0,     2,     0,    36,    37,    38,
-      39,     0,    88,     0,    88,     0,    21,    35,     0,    28,
-       0,    32,    33,    34,    29,    23,   177,     0,   175,   185,
-       0,   181,     0,     0,     0,     0,     0,    30,     0,     0,
-       0,     0,   107,   116,   117,   118,   114,   115,   111,   109,
-     110,   112,   113,   108,    94,   103,     0,     0,    92,    93,
-     105,     0,     0,     0,    20,    27,     0,    88,     0,     0,
-      22,     0,     0,     0,     0,     0,     0,     0,    31,     0,
-       0,    60,    90,     0,    86,     0,     0,    95,   102,     0,
-      96,   104,   101,     0,     0,   119,    91,   106,   100,    97,
-       0,     0,   128,     0,   124,     0,     0,     0,    48,     0,
-     189,   186,   188,     0,   176,     0,     0,   174,     0,   184,
-       0,     0,   180,     0,     0,     0,     0,     0,     0,    87,
-       0,    55,    98,     0,     0,   120,   121,    99,     0,     0,
-       0,   123,     0,   127,     0,     0,     0,     0,     0,     0,
-      48,     0,     0,    47,    46,     0,     0,     0,     0,   187,
-     172,     0,   182,     0,   178,     0,     0,   133,   141,    84,
+       0,     0,     0,     0,     0,     2,     0,    40,    41,    42,
+      43,     0,    93,     0,    93,     0,    21,    39,     0,    32,
+       0,    36,    37,    38,    33,    23,   182,     0,   180,   190,
+       0,   186,     0,     0,     0,     0,     0,    34,     0,     0,
+       0,     0,   112,   121,   122,   123,   119,   120,   116,   114,
+     115,   117,   118,   113,    99,   108,     0,     0,    97,    98,
+     110,     0,     0,     0,    20,    31,     0,    93,     0,     0,
+      22,     0,     0,     0,     0,     0,     0,     0,    35,     0,
+       0,    65,    95,     0,    91,     0,     0,   100,   107,     0,
+     101,   109,   106,     0,     0,   124,    96,   111,   105,   102,
+       0,     0,   133,     0,   129,     0,     0,     0,    53,     0,
+     194,   191,   193,     0,   181,     0,     0,   179,     0,   189,
+       0,     0,   185,     0,     0,     0,     0,     0,     0,    92,
+       0,    60,   103,     0,     0,   125,   126,   104,     0,     0,
+       0,   128,     0,   132,     0,     0,     0,     0,     0,    52,
+      53,     0,     0,    51,    50,     0,     0,     0,     0,     0,
+     192,   177,     0,   187,     0,   183,     0,     0,   138,   146,
+      89,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    67,     0,    63,    94,     0,     0,
+       0,     0,     0,   112,    99,     0,     0,   159,   161,   163,
+     127,   136,     0,   131,   130,     0,     0,     0,     0,    44,
+       0,     0,     0,     0,    46,    48,     0,    49,    54,     0,
+      23,    23,    23,     0,   178,   188,   184,   137,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    62,     0,    58,    89,     0,     0,     0,
-       0,     0,   107,    94,     0,     0,   154,   156,   158,   122,
-     131,     0,   126,   125,     0,     0,     0,     0,    40,     0,
-       0,     0,     0,    42,    44,    45,    49,    23,    23,    23,
-     173,   183,   179,   132,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    59,     0,     0,     0,
-       0,    53,     0,    95,    96,     0,   159,   144,     0,   129,
-       0,     0,     0,     0,     0,    41,    50,   144,    43,    24,
-      26,    25,     0,    63,    67,    68,    69,    70,   189,    66,
-      71,    65,    72,    73,    75,    74,    77,    76,    79,    78,
-      81,    80,    83,    82,    61,     0,    85,    54,     0,   144,
-       0,     0,   151,   160,     0,     0,     0,   155,   157,   130,
-       0,     0,   144,     0,     0,     0,     0,    57,     0,     0,
-     153,   152,     0,     0,     0,   142,   145,   138,   144,     0,
-       0,     0,   140,     0,     0,     0,    52,   136,     0,   165,
-       0,     0,     0,     0,     0,   164,   146,     0,     0,   144,
-     137,   144,    64,     0,     0,     0,     0,     0,   166,     0,
-     167,     0,   161,   163,   143,   134,     0,     0,    56,     0,
-     162,   170,   168,   169,   171,   139,   135,    51
+      64,     0,     0,     0,     0,    58,     0,   100,   101,     0,
+     164,   149,     0,   134,     0,     0,     0,     0,     0,    45,
+      55,   149,    47,     0,    23,    24,    26,    25,     0,    23,
+       0,    68,    72,    73,    74,    75,   194,    71,    76,    70,
+      77,    78,    80,    79,    82,    81,    84,    83,    86,    85,
+      88,    87,    66,     0,    90,    59,     0,   149,     0,     0,
+     156,   165,     0,     0,     0,   160,   162,   135,     0,     0,
+     149,     0,     0,    23,    29,    23,    27,     0,     0,    62,
+       0,     0,   158,   157,     0,     0,     0,   147,   150,   143,
+     149,     0,     0,     0,   145,    30,    28,     0,     0,     0,
+      57,   141,     0,   170,     0,     0,     0,     0,     0,   169,
+     151,     0,     0,   149,   142,   149,    69,     0,     0,     0,
+       0,     0,   171,     0,   172,     0,   166,   168,   148,   139,
+       0,     0,    61,     0,   167,   175,   173,   174,   176,   144,
+     140,    56
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
 static const short yydefgoto[] =
 {
       -1,    11,    12,    13,    14,    15,   100,    48,    49,    50,
-     183,   184,   185,    51,    52,   219,    53,   157,   212,   294,
-     300,   213,   115,    70,   113,   224,    88,    89,    90,    91,
-     126,   132,   133,   134,   231,   198,    54,   326,   345,   225,
-     226,   227,   228,   364,   365,    16,    57,    58,    17,    62,
-      18,    60,   346
+     183,   184,   185,    51,    52,   220,    53,   157,   213,   302,
+     308,   214,   115,    70,   113,   225,    88,    89,    90,    91,
+     126,   132,   133,   134,   232,   199,    54,   334,   357,   226,
+     227,   228,   229,   378,   379,    16,    57,    58,    17,    62,
+      18,    60,   358
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -317
+#define YYPACT_NINF -326
 static const short yypact[] =
 {
-     137,     4,    45,  -317,  -317,  -317,  -317,  -317,  -317,    99,
-     106,   134,  -317,   137,   170,    98,  -317,  -317,  -317,   156,
-     124,   125,   157,  -317,  -317,   170,  -317,  -317,  -317,   170,
-     154,   181,   209,   214,   222,   170,   215,  -317,  -317,  -317,
-    -317,   225,   196,   310,   196,   204,  -317,  -317,   188,  -317,
-     276,  -317,  -317,  -317,  -317,   217,   216,   113,  -317,  -317,
-     117,  -317,   146,   241,   301,   267,   276,  -317,   284,   292,
-     293,   357,  -317,  -317,  -317,  -317,  -317,  -317,  -317,  -317,
-    -317,  -317,  -317,  -317,   325,   425,   374,   317,   299,  -317,
-     439,   318,   231,   346,  -317,  -317,   374,   196,   358,   365,
-    -317,    74,   373,    76,   380,    84,   390,    90,  -317,   362,
-     409,   377,   375,   378,   392,   414,   453,  -317,  -317,   429,
-    -317,   453,  -317,   430,   406,     2,  -317,   453,  -317,   457,
-     224,   444,  -317,   374,  -317,   416,   454,   456,   126,   149,
-    -317,  -317,  -317,   458,  -317,   419,   459,  -317,   420,  -317,
-     460,   422,  -317,   461,    70,   428,   258,    21,   292,  -317,
-     465,   431,  -317,   432,   391,   299,  -317,  -317,   433,   466,
-     470,  -317,    -6,  -317,   471,   374,   436,    -6,   374,    26,
-       0,   391,     7,   434,   474,   437,   440,   441,   442,  -317,
-    -317,   438,  -317,   443,  -317,   445,   475,  -317,  -317,  -317,
-     446,   447,   448,   449,   450,   451,   452,   455,   462,   463,
-     464,   467,    91,  -317,   473,  -317,  -317,   374,   482,   484,
-     391,   408,   468,     6,   492,   472,  -317,   476,  -317,  -317,
-    -317,   147,  -317,  -317,   477,   493,   391,   495,  -317,   491,
-     479,   478,   494,  -317,  -317,  -317,  -317,   217,   217,   217,
-    -317,  -317,  -317,  -317,     1,     1,    74,    74,     9,   292,
-     374,   218,   219,   247,   248,   252,  -317,   258,   499,   481,
-     483,   480,   485,   153,   158,   374,    94,   497,   340,  -317,
-     498,   391,   487,   488,   490,  -317,  -317,   497,  -317,  -317,
-    -317,  -317,   496,  -317,  -317,  -317,  -317,  -317,   496,  -317,
-    -317,  -317,  -317,  -317,  -317,  -317,  -317,  -317,  -317,  -317,
-    -317,  -317,  -317,  -317,  -317,    47,  -317,  -317,   503,   497,
-     374,   374,  -317,   500,   510,    27,    70,  -317,  -317,  -317,
-     501,   391,   497,   391,    70,   489,   505,  -317,    54,    70,
-    -317,  -317,   511,    57,   507,   519,  -317,  -317,   497,   504,
-      70,   506,  -317,   508,   516,   512,  -317,  -317,    57,  -317,
-     509,    64,    66,   513,    50,  -317,  -317,    27,    70,   497,
-    -317,   497,  -317,   486,   522,    79,    74,    74,  -317,    74,
-    -317,    74,  -317,  -317,  -317,  -317,    70,    70,  -317,   502,
-    -317,  -317,  -317,  -317,  -317,  -317,  -317,  -317
+     166,    18,    73,  -326,  -326,  -326,  -326,  -326,  -326,   115,
+     116,   147,  -326,   166,   210,   121,  -326,  -326,  -326,   148,
+     127,   128,   135,  -326,  -326,   210,  -326,  -326,  -326,   210,
+     167,   175,   178,   204,   225,   210,   226,  -326,  -326,  -326,
+    -326,   230,   195,   330,   195,   199,  -326,  -326,   194,  -326,
+     296,  -326,  -326,  -326,  -326,   206,   209,   -32,  -326,  -326,
+     -18,  -326,   156,   217,   321,   261,   296,  -326,   268,   272,
+     274,   377,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,
+    -326,  -326,  -326,  -326,   290,   445,   394,   277,   237,  -326,
+     459,   280,   151,   279,  -326,  -326,   394,   195,   297,   304,
+    -326,    99,   310,    31,   311,    83,   329,    89,  -326,   300,
+     338,   325,   327,   341,   349,   395,   473,  -326,  -326,   402,
+    -326,   473,  -326,   412,   383,     5,  -326,   473,  -326,   443,
+     251,   433,  -326,   394,  -326,   397,   435,   436,    12,   188,
+    -326,  -326,  -326,   447,  -326,   424,   448,  -326,   425,  -326,
+     462,   438,  -326,   471,   163,   413,   278,    11,   272,  -326,
+     474,   441,  -326,   442,   411,   237,  -326,  -326,   444,   479,
+     481,  -326,     1,  -326,   482,   394,   449,     1,   394,    76,
+      19,   411,     9,   450,   483,   446,    84,   451,   453,   475,
+    -326,  -326,   454,  -326,   455,  -326,   456,   486,  -326,  -326,
+    -326,   457,   458,   460,   461,   463,   464,   465,   466,   467,
+     468,   469,   470,   -10,  -326,   476,  -326,  -326,   394,   487,
+     495,   411,   428,   477,    13,   498,   478,  -326,   472,  -326,
+    -326,  -326,    51,  -326,  -326,   480,   501,   411,   511,  -326,
+     508,   484,   488,   512,  -326,  -326,    76,  -326,  -326,    85,
+     206,   206,   206,    90,  -326,  -326,  -326,  -326,    98,    98,
+      99,    99,    60,   272,   394,   168,   252,   257,   258,   267,
+    -326,   278,   513,   489,   490,   485,   491,   158,   184,   394,
+      66,   520,   360,  -326,   521,   411,   493,   494,   496,  -326,
+    -326,   520,  -326,   497,   206,  -326,  -326,  -326,   499,   206,
+     502,  -326,  -326,  -326,  -326,  -326,   502,  -326,  -326,  -326,
+    -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,
+    -326,  -326,  -326,    14,  -326,  -326,   518,   520,   394,   394,
+    -326,   503,   524,    74,   163,  -326,  -326,  -326,   500,   411,
+     520,   411,   163,   206,  -326,   206,  -326,   519,   506,  -326,
+      29,   163,  -326,  -326,   533,   104,   530,   541,  -326,  -326,
+     520,   505,   163,   507,  -326,  -326,  -326,   509,   538,   514,
+    -326,  -326,   104,  -326,   510,    80,    93,   515,    68,  -326,
+    -326,    74,   163,   520,  -326,   520,  -326,   517,   540,    86,
+      99,    99,  -326,    99,  -326,    99,  -326,  -326,  -326,  -326,
+     163,   163,  -326,   522,  -326,  -326,  -326,  -326,  -326,  -326,
+    -326,  -326
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const short yypgoto[] =
 {
-    -317,  -317,     8,    82,   534,  -317,   -17,  -317,   515,   -31,
-     364,   366,   370,  -317,  -317,  -317,  -317,  -317,  -317,   -54,
-    -317,   285,  -317,   -29,  -154,   -42,  -317,   -68,  -317,   -62,
-    -109,   417,  -317,   -95,  -317,  -316,   -22,  -281,   186,  -179,
-    -220,  -317,   278,   203,  -247,    97,  -317,   469,   145,  -317,
-     200,  -317,  -101
+    -326,  -326,   142,   227,   553,  -326,  -239,  -326,   523,   -29,
+     385,   387,   392,  -326,  -326,  -326,  -326,  -326,  -326,     7,
+    -326,   305,  -326,   -19,  -152,   -42,  -326,   -69,  -326,   -68,
+    -106,   440,  -326,   -88,  -326,  -325,   -13,  -287,   197,  -176,
+    -264,  -326,   293,   208,  -136,   143,  -326,   492,   144,  -326,
+     233,  -326,  -101
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -151
+#define YYTABLE_NINF -156
 static const short yytable[] =
 {
-     144,    87,   241,   118,   216,    66,   334,   165,    98,   119,
-     347,   274,    86,   168,    67,    92,   166,   122,   352,   179,
-     292,    24,   128,   357,   110,    19,   140,   141,   298,   141,
-     142,   293,   142,    66,   370,   171,   173,    24,   339,   293,
-     214,   272,   108,    24,   123,   238,   140,   141,   118,   169,
-     142,   350,   385,   118,   136,   322,   229,   283,   182,   118,
-     242,   131,  -148,   125,    20,   275,   336,   368,   137,   359,
-     395,   396,   143,   355,   143,   232,   359,   233,   215,   239,
-     344,   243,   171,   140,   141,   140,   141,   142,   386,   142,
-     387,   174,   143,   140,   141,    56,    29,   142,   359,   170,
-     340,   341,   330,   149,   337,   302,   382,    35,   360,   152,
-      26,   356,   361,   362,   363,   360,   323,   383,    21,   361,
-     362,   363,   377,   196,   379,    22,    26,   197,   383,   143,
-     146,   143,    26,   235,    23,   390,   237,   360,   150,   143,
-       1,   361,   362,   363,   153,   179,     2,   266,   180,   324,
-     267,    30,   349,   118,   351,   296,   297,   301,    27,   119,
-      31,     3,     4,     5,     6,     7,     8,   102,   186,   187,
-     188,   104,   103,    36,    27,   269,   105,    32,    33,     2,
-      27,   181,     9,    10,   182,    37,    38,    39,    40,    41,
+     144,    87,   118,   119,   342,   242,   217,    66,    98,   359,
+     165,   295,   296,   297,    86,   330,   122,   364,   278,   166,
+     168,   128,   102,    67,   110,    92,   371,   103,   140,   141,
+     215,   179,   142,   348,   180,    66,   104,   384,   179,    19,
+     351,   105,   171,   173,   123,   276,   270,   118,   369,   271,
+      56,   108,   118,   362,   136,   344,   169,   399,   118,   230,
+     346,   287,   243,   131,   352,   353,   125,   181,   216,  -153,
+     182,   349,   279,   382,   143,   409,   410,   182,   137,   306,
+     141,   244,   233,   142,   234,   146,   370,   373,   331,   171,
+     301,   174,    20,   140,   141,   239,   400,   142,   401,   140,
+     141,   170,   149,   142,   365,   373,   366,   283,   152,   338,
+     284,   310,   140,   141,   249,   293,   142,   300,   140,   141,
+     298,   332,   142,   373,   396,   143,   374,   356,   301,   240,
+     375,   376,   377,   236,    21,    22,   238,   150,   391,   143,
+     250,   294,   404,   153,   374,   143,   299,    23,   375,   376,
+     377,   393,    31,   118,   119,    24,    26,    27,   143,   304,
+     305,   309,   374,   361,   143,   363,   375,   376,   377,     1,
+     130,    24,    26,    27,    30,     2,   273,    24,    26,    27,
+      32,    33,    37,    38,    39,    40,    36,   312,    34,   313,
+       3,     4,     5,     6,     7,     8,    55,    56,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,   186,   187,   188,
+     106,     9,    10,    36,  -155,   107,   197,   328,   189,     2,
+     198,    46,   311,    59,    47,    37,    38,    39,    40,    41,
       42,    43,    44,    45,     3,     4,     5,     6,     7,     8,
-     106,   295,    55,   279,   299,   107,   280,    36,    46,  -150,
-      34,    47,   320,    28,  -149,     9,    10,   321,   303,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    56,    28,
-     289,   290,   291,    59,    63,    28,    64,   304,   306,   305,
-     307,    61,    94,   168,    68,    47,    37,    38,    39,    40,
-     130,    69,    43,    44,    45,    37,    38,    39,    40,    93,
-     378,   380,    37,    38,    39,    40,   308,   310,   309,   311,
-      65,   312,    99,   313,   101,   391,   392,   199,   393,   169,
-     394,    71,    72,    73,    74,    75,   109,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    65,    85,   200,   201,
-     202,   203,   204,   111,   205,   206,   207,   208,   209,   210,
-     211,   112,   114,    96,    97,    71,    72,    73,    74,    75,
+    -154,    29,   397,   329,    61,    63,    28,    64,    94,    68,
+      69,    47,    35,   397,    93,     9,    10,    37,    38,    39,
+      40,    99,    28,    43,    44,    45,   303,   101,    28,   307,
+     168,   314,    65,   315,   392,   394,   316,   318,   317,   319,
+     109,    65,    37,    38,    39,    40,   320,   111,   321,   405,
+     406,   112,   407,   114,   408,   120,   124,   200,   125,   129,
+     135,    71,    72,    73,    74,    75,   169,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,   138,    85,   201,   202,
+     203,   204,   205,   139,   206,   207,   208,   209,   210,   211,
+     212,   145,   148,    96,    97,    71,    72,    73,    74,    75,
       63,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-     120,    85,    37,    38,    39,    40,   124,   129,    43,    44,
+     151,    85,    37,    38,    39,    40,   154,   155,    43,    44,
       45,    37,    38,    39,    40,    71,    72,    73,    74,    75,
-     327,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-     125,    85,   116,    72,    73,    74,    75,   135,    76,    77,
-      78,    79,    80,    81,    82,    83,   117,   138,    85,    71,
-      72,    73,    74,    75,   139,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,   145,    85,   221,   222,    73,    74,
-      75,   148,    76,    77,    78,    79,    80,    81,    82,    83,
-     223,   151,    85,   116,    72,    73,    74,    75,   154,    76,
-      77,    78,    79,    80,    81,    82,    83,   273,   155,    85,
-     121,    72,   156,   161,   159,   158,    76,    77,    78,    79,
-      80,    81,    82,    83,   127,    72,    85,   160,   162,   163,
+     335,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+     156,    85,   116,    72,    73,    74,    75,   158,    76,    77,
+      78,    79,    80,    81,    82,    83,   117,   159,    85,    71,
+      72,    73,    74,    75,   160,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,   161,    85,   222,   223,    73,    74,
+      75,   162,    76,    77,    78,    79,    80,    81,    82,    83,
+     224,   163,    85,   116,    72,    73,    74,    75,   164,    76,
+      77,    78,    79,    80,    81,    82,    83,   277,   167,    85,
+     121,    72,   172,   175,   176,   177,    76,    77,    78,    79,
+      80,    81,    82,    83,   127,    72,    85,   190,   181,   192,
       76,    77,    78,    79,    80,    81,    82,    83,   116,    72,
-      85,   164,   167,   172,    76,    77,    78,    79,    80,    81,
-      82,    83,   175,   176,    85,   177,   190,   192,   189,   194,
-     191,   193,   195,   181,   217,   230,   218,   220,   169,   168,
-     234,   236,   182,   179,   246,   250,   247,   248,   249,   253,
-     251,   270,   252,   271,   254,   255,   256,   257,   258,   259,
-     260,   276,   282,   261,   284,   285,   325,   329,   288,   353,
-     262,   263,   264,   315,  -147,   265,   268,   338,   277,   343,
-     358,   366,   281,   318,   287,   278,   286,   316,   367,   317,
-     373,   319,   331,   388,   332,   333,   389,    25,   245,   244,
-     240,   335,   314,   384,   178,   342,   328,   348,   354,   397,
-     369,   375,   371,    95,   372,   374,     0,   376,     0,     0,
-       0,   381,   147
+      85,   191,   193,   194,    76,    77,    78,    79,    80,    81,
+      82,    83,   196,   218,    85,   195,   219,   221,   231,   169,
+     168,   235,   246,   248,   237,   253,   274,   251,   182,   252,
+     257,   254,   255,   256,   275,   258,   259,   280,   260,   261,
+     286,   262,   263,   264,   265,   266,   267,   268,   269,   272,
+     288,   282,   289,  -152,   281,   285,   292,   323,   326,   333,
+     337,   290,   350,   355,   291,   324,   325,   327,   339,   367,
+     340,   341,   372,   343,   380,   345,   360,   347,   354,   368,
+     381,   383,   387,   385,   403,   386,    25,   388,   390,   247,
+     245,    95,   241,   395,   402,   336,   322,   178,   398,   411,
+     389,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   147
 };
 
 static const short yycheck[] =
 {
-     101,    43,   181,    71,   158,    36,   287,     5,    50,    71,
-     326,     5,    43,    19,    36,    44,   125,    85,   334,    19,
-      19,    13,    90,   339,    66,    21,    19,    20,    19,    20,
-      23,    30,    23,    64,   350,   130,   131,    29,   319,    30,
-      19,   220,    64,    35,    86,    19,    19,    20,   116,    55,
-      23,   332,   368,   121,    96,   275,   165,   236,    58,   127,
-      53,    92,    56,    61,    19,    59,    19,   348,    97,    19,
-     386,   387,    65,    19,    65,   170,    19,   172,    57,    53,
-      53,   182,   177,    19,    20,    19,    20,    23,   369,    23,
-     371,   133,    65,    19,    20,    19,    14,    23,    19,   130,
-     320,   321,   281,    19,    57,   259,    56,    25,    58,    19,
-      13,    57,    62,    63,    64,    58,    22,   364,    19,    62,
-      63,    64,    58,    53,    58,    19,    29,    57,   375,    65,
-      54,    65,    35,   175,     0,    56,   178,    58,    54,    65,
-       3,    62,    63,    64,    54,    19,     9,    56,    22,    55,
-      59,    53,   331,   221,   333,   256,   257,   258,    13,   221,
-       4,    24,    25,    26,    27,    28,    29,    54,    19,    20,
-      21,    54,    59,    19,    29,   217,    59,    53,    53,     9,
-      35,    55,    45,    46,    58,    31,    32,    33,    34,    35,
+     101,    43,    71,    71,   291,   181,   158,    36,    50,   334,
+       5,   250,   251,   252,    43,   279,    85,   342,     5,   125,
+      19,    90,    54,    36,    66,    44,   351,    59,    19,    20,
+      19,    19,    23,    19,    22,    64,    54,   362,    19,    21,
+     327,    59,   130,   131,    86,   221,    56,   116,    19,    59,
+      19,    64,   121,   340,    96,   294,    55,   382,   127,   165,
+     299,   237,    53,    92,   328,   329,    61,    55,    57,    56,
+      58,    57,    59,   360,    65,   400,   401,    58,    97,    19,
+      20,   182,   170,    23,   172,    54,    57,    19,    22,   177,
+      30,   133,    19,    19,    20,    19,   383,    23,   385,    19,
+      20,   130,    19,    23,   343,    19,   345,    56,    19,   285,
+      59,   263,    19,    20,    30,    30,    23,    19,    19,    20,
+      30,    55,    23,    19,    56,    65,    58,    53,    30,    53,
+      62,    63,    64,   175,    19,    19,   178,    54,    58,    65,
+      56,    56,    56,    54,    58,    65,    56,     0,    62,    63,
+      64,    58,     4,   222,   222,    13,    13,    13,    65,   260,
+     261,   262,    58,   339,    65,   341,    62,    63,    64,     3,
+      19,    29,    29,    29,    53,     9,   218,    35,    35,    35,
+      53,    53,    31,    32,    33,    34,    19,    19,    53,    21,
+      24,    25,    26,    27,    28,    29,    21,    19,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    19,    20,    21,
+      54,    45,    46,    19,    56,    59,    53,    59,    30,     9,
+      57,    54,   264,    19,    57,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    24,    25,    26,    27,    28,    29,
-      54,   255,    21,    56,   258,    59,    59,    19,    54,    56,
-      53,    57,    59,    13,    56,    45,    46,    59,   260,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    19,    29,
-     247,   248,   249,    19,    19,    35,    21,    19,    19,    21,
-      21,    19,    54,    19,    19,    57,    31,    32,    33,    34,
-      19,    55,    37,    38,    39,    31,    32,    33,    34,    55,
-     361,   362,    31,    32,    33,    34,    19,    19,    21,    21,
-      55,    19,    55,    21,    58,   376,   377,    19,   379,    55,
-     381,     5,     6,     7,     8,     9,    19,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    55,    21,    40,    41,
+      56,    14,   378,    59,    19,    19,    13,    21,    54,    19,
+      55,    57,    25,   389,    55,    45,    46,    31,    32,    33,
+      34,    55,    29,    37,    38,    39,   259,    58,    35,   262,
+      19,    19,    55,    21,   375,   376,    19,    19,    21,    21,
+      19,    55,    31,    32,    33,    34,    19,    19,    21,   390,
+     391,    19,   393,    19,   395,     5,    19,    19,    61,    19,
+      21,     5,     6,     7,     8,     9,    55,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    19,    21,    40,    41,
       42,    43,    44,    19,    46,    47,    48,    49,    50,    51,
-      52,    19,    19,    37,    38,     5,     6,     7,     8,     9,
+      52,    21,    21,    37,    38,     5,     6,     7,     8,     9,
       19,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-       5,    21,    31,    32,    33,    34,    19,    19,    37,    38,
+      21,    21,    31,    32,    33,    34,    56,    19,    37,    38,
       39,    31,    32,    33,    34,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      61,    21,     5,     6,     7,     8,     9,    21,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    19,    21,     5,
-       6,     7,     8,     9,    19,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    21,    21,     5,     6,     7,     8,
-       9,    21,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    21,    21,     5,     6,     7,     8,     9,    56,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    19,    21,
-       5,     6,    55,    19,    56,    60,    11,    12,    13,    14,
-      15,    16,    17,    18,     5,     6,    21,    55,    19,    19,
+      55,    21,     5,     6,     7,     8,     9,    60,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    56,    21,     5,
+       6,     7,     8,     9,    55,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    19,    21,     5,     6,     7,     8,
+       9,    19,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    19,    21,     5,     6,     7,     8,     9,    55,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,     5,    21,
+       5,     6,    19,    56,    19,    19,    11,    12,    13,    14,
+      15,    16,    17,    18,     5,     6,    21,    20,    55,    21,
       11,    12,    13,    14,    15,    16,    17,    18,     5,     6,
-      21,    55,     5,    19,    11,    12,    13,    14,    15,    16,
-      17,    18,    56,    19,    21,    19,    57,    57,    20,    57,
-      21,    21,    21,    55,    19,    19,    55,    55,    55,    19,
-      19,    55,    58,    19,    57,    57,    56,    56,    56,    24,
-      57,    19,    57,    19,    58,    58,    58,    58,    58,    58,
-      58,    19,    19,    58,    19,    24,    19,    19,    24,    30,
-      58,    58,    58,    24,    56,    58,    53,    24,    56,    19,
-      19,    24,    55,    53,    56,    59,    57,    56,    19,    56,
-      24,    56,    55,    57,    56,    55,    24,    13,   184,   183,
-     180,    55,   267,   367,   137,    55,   278,    56,    53,    57,
-      56,   358,    56,    48,    56,    53,    -1,    58,    -1,    -1,
-      -1,    58,   103
+      21,    57,    57,    21,    11,    12,    13,    14,    15,    16,
+      17,    18,    21,    19,    21,    57,    55,    55,    19,    55,
+      19,    19,    19,    57,    55,    30,    19,    56,    58,    56,
+      24,    57,    57,    57,    19,    58,    58,    19,    58,    58,
+      19,    58,    58,    58,    58,    58,    58,    58,    58,    53,
+      19,    59,    24,    56,    56,    55,    24,    24,    53,    19,
+      19,    57,    24,    19,    56,    56,    56,    56,    55,    30,
+      56,    55,    19,    56,    24,    56,    56,    55,    55,    53,
+      19,    56,    24,    56,    24,    56,    13,    53,    58,   184,
+     183,    48,   180,    58,    57,   282,   271,   137,   381,    57,
+     372,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   103
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1445,28 +1500,30 @@ static const unsigned char yystos[] =
       54,    21,    19,    54,    56,    19,    55,    83,    60,    56,
       55,    19,    19,    19,    55,     5,    96,     5,    19,    55,
       75,    99,    19,    99,    91,    56,    19,    19,    97,    19,
-      22,    55,    58,    76,    77,    78,    19,    20,    21,    20,
-      57,    21,    57,    21,    57,    21,    53,    57,   101,    19,
-      40,    41,    42,    43,    44,    46,    47,    48,    49,    50,
-      51,    52,    84,    87,    19,    57,    90,    19,    55,    81,
-      55,     5,     6,    19,    91,   105,   106,   107,   108,    96,
-      19,   100,    99,    99,    19,    91,    55,    91,    19,    53,
-      78,   105,    53,   118,    77,    76,    57,    56,    56,    56,
-      57,    57,    57,    24,    58,    58,    58,    58,    58,    58,
-      58,    58,    58,    58,    58,    58,    56,    59,    53,    91,
-      19,    19,   105,    19,     5,    59,    19,    56,    59,    56,
-      59,    55,    19,   105,    19,    24,    57,    56,    24,    72,
-      72,    72,    19,    30,    85,    85,   118,   118,    19,    85,
-      86,   118,    90,    91,    19,    21,    19,    21,    19,    21,
-      19,    21,    19,    21,    87,    24,    56,    56,    53,    56,
-      59,    59,   106,    22,    55,    19,   103,    10,   108,    19,
-     105,    55,    56,    55,   103,    55,    19,    57,    24,   103,
-     106,   106,    55,    19,    53,   104,   118,   101,    56,   105,
-     103,   105,   101,    30,    53,    19,    57,   101,    19,    19,
-      58,    62,    63,    64,   109,   110,    24,    19,   103,    56,
-     101,    56,    56,    24,    53,   109,    58,    58,   118,    58,
-     118,    58,    56,   110,   104,   101,   103,   103,    57,    24,
-      56,   118,   118,   118,   118,   101,   101,    57
+      22,    55,    58,    76,    77,    78,    19,    20,    21,    30,
+      20,    57,    21,    57,    21,    57,    21,    53,    57,   101,
+      19,    40,    41,    42,    43,    44,    46,    47,    48,    49,
+      50,    51,    52,    84,    87,    19,    57,    90,    19,    55,
+      81,    55,     5,     6,    19,    91,   105,   106,   107,   108,
+      96,    19,   100,    99,    99,    19,    91,    55,    91,    19,
+      53,    78,   105,    53,   118,    77,    19,    76,    57,    30,
+      56,    56,    56,    30,    57,    57,    57,    24,    58,    58,
+      58,    58,    58,    58,    58,    58,    58,    58,    58,    58,
+      56,    59,    53,    91,    19,    19,   105,    19,     5,    59,
+      19,    56,    59,    56,    59,    55,    19,   105,    19,    24,
+      57,    56,    24,    30,    56,    72,    72,    72,    30,    56,
+      19,    30,    85,    85,   118,   118,    19,    85,    86,   118,
+      90,    91,    19,    21,    19,    21,    19,    21,    19,    21,
+      19,    21,    87,    24,    56,    56,    53,    56,    59,    59,
+     106,    22,    55,    19,   103,    10,   108,    19,   105,    55,
+      56,    55,   103,    56,    72,    56,    72,    55,    19,    57,
+      24,   103,   106,   106,    55,    19,    53,   104,   118,   101,
+      56,   105,   103,   105,   101,    72,    72,    30,    53,    19,
+      57,   101,    19,    19,    58,    62,    63,    64,   109,   110,
+      24,    19,   103,    56,   101,    56,    56,    24,    53,   109,
+      58,    58,   118,    58,   118,    58,    56,   110,   104,   101,
+     103,   103,    57,    24,    56,   118,   118,   118,   118,   101,
+     101,    57
 };
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@@ -2077,27 +2134,27 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 649 "parse.y"
+#line 689 "parse.y"
     { ; }
     break;
 
   case 3:
-#line 650 "parse.y"
+#line 690 "parse.y"
     { ; }
     break;
 
   case 4:
-#line 651 "parse.y"
+#line 691 "parse.y"
     { ; }
     break;
 
   case 5:
-#line 652 "parse.y"
+#line 692 "parse.y"
     { ; }
     break;
 
   case 6:
-#line 655 "parse.y"
+#line 695 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", C_CCODE,
@@ -2110,7 +2167,7 @@ yyreduce:
     break;
 
   case 7:
-#line 664 "parse.y"
+#line 704 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", H_CCODE,
@@ -2123,7 +2180,7 @@ yyreduce:
     break;
 
   case 8:
-#line 673 "parse.y"
+#line 713 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", HT_CCODE,
@@ -2136,7 +2193,7 @@ yyreduce:
     break;
 
   case 9:
-#line 682 "parse.y"
+#line 722 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", PH_CCODE,
@@ -2149,7 +2206,7 @@ yyreduce:
     break;
 
   case 10:
-#line 691 "parse.y"
+#line 731 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", A_CCODE,
@@ -2162,7 +2219,7 @@ yyreduce:
     break;
 
   case 11:
-#line 700 "parse.y"
+#line 740 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", AT_CCODE,
@@ -2175,47 +2232,47 @@ yyreduce:
     break;
 
   case 12:
-#line 711 "parse.y"
+#line 751 "parse.y"
     { ; }
     break;
 
   case 13:
-#line 712 "parse.y"
+#line 752 "parse.y"
     { ; }
     break;
 
   case 14:
-#line 713 "parse.y"
+#line 753 "parse.y"
     { ; }
     break;
 
   case 15:
-#line 714 "parse.y"
+#line 754 "parse.y"
     { ; }
     break;
 
   case 16:
-#line 715 "parse.y"
+#line 755 "parse.y"
     { ; }
     break;
 
   case 17:
-#line 716 "parse.y"
+#line 756 "parse.y"
     { ; }
     break;
 
   case 18:
-#line 717 "parse.y"
+#line 757 "parse.y"
     { ; }
     break;
 
   case 19:
-#line 718 "parse.y"
+#line 758 "parse.y"
     { ; }
     break;
 
   case 20:
-#line 721 "parse.y"
+#line 761 "parse.y"
     {
                        ((Class *)class)->nodes = class_nodes;
                        class_nodes = NULL;
@@ -2224,7 +2281,7 @@ yyreduce:
     break;
 
   case 21:
-#line 726 "parse.y"
+#line 766 "parse.y"
     {
                        ((Class *)class)->nodes = NULL;
                        class_nodes = NULL;
@@ -2233,23 +2290,25 @@ yyreduce:
     break;
 
   case 22:
-#line 733 "parse.y"
+#line 773 "parse.y"
     {
                        class = node_new (CLASS_NODE,
                                          "otype:steal", yyvsp[-3].id,
                                          "ptype:steal", yyvsp[-1].id,
                                          "bonobo_object_class:steal", bonobo_object_class,
+                                         "glade_xml", glade_xml,
                                          "interfaces:steal", interfaces,
                                          "chunk_size:steal", chunk_size,
                                          NULL);
                        bonobo_object_class = NULL;
+                       glade_xml = FALSE;
                        chunk_size = NULL;
                        interfaces = NULL;
                                                }
     break;
 
   case 24:
-#line 748 "parse.y"
+#line 790 "parse.y"
     {
                        if(strcmp(yyvsp[-3].id,"chunks") == 0) {
                                g_free (chunk_size);
@@ -2265,7 +2324,7 @@ yyreduce:
     break;
 
   case 25:
-#line 760 "parse.y"
+#line 802 "parse.y"
     {
                        if (strcmp (yyvsp[-3].id, "interface") == 0) {
                                interfaces = g_list_append (interfaces,
@@ -2278,7 +2337,7 @@ yyreduce:
     break;
 
   case 26:
-#line 769 "parse.y"
+#line 811 "parse.y"
     {
                        if(strcmp(yyvsp[-3].id,"chunks") == 0) {
                                g_free (chunk_size);
@@ -2294,22 +2353,74 @@ yyreduce:
     break;
 
   case 27:
-#line 783 "parse.y"
-    { ; }
+#line 823 "parse.y"
+    {
+                       if (strcmp (yyvsp[-4].id, "GladeXML") == 0) {
+                               glade_xml = TRUE;
+                               add_construct_glade(yyvsp[-3].id, yyvsp[-2].id, NULL);
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+               }
     break;
 
   case 28:
-#line 784 "parse.y"
-    { ; }
+#line 832 "parse.y"
+    {
+                       if (strcmp (yyvsp[-5].id, "GladeXML") == 0) {
+                               glade_xml = TRUE;
+                               add_construct_glade(yyvsp[-4].id, yyvsp[-3].id, yyvsp[-2].id);
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+               }
     break;
 
   case 29:
-#line 787 "parse.y"
-    { ; }
+#line 841 "parse.y"
+    {
+                       if (strcmp (yyvsp[-4].id, "GladeXML") == 0) {
+                               glade_xml = TRUE;
+                               add_construct_glade(yyvsp[-3].id, yyvsp[-2].id, NULL);
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+               }
     break;
 
   case 30:
-#line 788 "parse.y"
+#line 850 "parse.y"
+    {
+                       if (strcmp (yyvsp[-5].id, "GladeXML") == 0) {
+                               glade_xml = TRUE;
+                               add_construct_glade(yyvsp[-4].id, yyvsp[-3].id, yyvsp[-2].id);
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+               }
+    break;
+
+  case 31:
+#line 861 "parse.y"
+    { ; }
+    break;
+
+  case 32:
+#line 862 "parse.y"
+    { ; }
+    break;
+
+  case 33:
+#line 865 "parse.y"
+    { ; }
+    break;
+
+  case 34:
+#line 866 "parse.y"
     {
                        if (strcmp (yyvsp[-1].id, "BonoboObject") != 0) {
                                g_free (yyvsp[-1].id);
@@ -2321,8 +2432,8 @@ yyreduce:
                                                }
     break;
 
-  case 31:
-#line 797 "parse.y"
+  case 35:
+#line 875 "parse.y"
     {
                        if (strcmp (yyvsp[-2].id, "interface") != 0) {
                                g_free (yyvsp[-2].id);
@@ -2337,48 +2448,48 @@ yyreduce:
                                                }
     break;
 
-  case 32:
-#line 809 "parse.y"
+  case 36:
+#line 887 "parse.y"
     { ; }
     break;
 
-  case 33:
-#line 810 "parse.y"
+  case 37:
+#line 888 "parse.y"
     { ; }
     break;
 
-  case 34:
-#line 811 "parse.y"
+  case 38:
+#line 889 "parse.y"
     { ; }
     break;
 
-  case 35:
-#line 812 "parse.y"
+  case 39:
+#line 890 "parse.y"
     { ; }
     break;
 
-  case 36:
-#line 815 "parse.y"
+  case 40:
+#line 893 "parse.y"
     { the_scope = PUBLIC_SCOPE; }
     break;
 
-  case 37:
-#line 816 "parse.y"
+  case 41:
+#line 894 "parse.y"
     { the_scope = PRIVATE_SCOPE; }
     break;
 
-  case 38:
-#line 817 "parse.y"
+  case 42:
+#line 895 "parse.y"
     { the_scope = PROTECTED_SCOPE; }
     break;
 
-  case 39:
-#line 818 "parse.y"
+  case 43:
+#line 896 "parse.y"
     { the_scope = CLASS_SCOPE; }
     break;
 
-  case 40:
-#line 821 "parse.y"
+  case 44:
+#line 899 "parse.y"
     {
                        if (strcmp (yyvsp[-1].id, "destroywith") == 0) {
                                g_free (yyvsp[-1].id);
@@ -2401,8 +2512,8 @@ yyreduce:
                                }
     break;
 
-  case 41:
-#line 841 "parse.y"
+  case 45:
+#line 919 "parse.y"
     {
                        if (strcmp (yyvsp[-2].id, "destroy") == 0) {
                                g_free(yyvsp[-2].id);
@@ -2427,16 +2538,16 @@ yyreduce:
                                        }
     break;
 
-  case 42:
-#line 865 "parse.y"
+  case 46:
+#line 943 "parse.y"
     {
                        initializer = yyvsp[0].id;
                        initializer_line = ccode_line;
                                }
     break;
 
-  case 43:
-#line 869 "parse.y"
+  case 47:
+#line 947 "parse.y"
     {
                        initializer = (yyvsp[0].cbuf)->str;
                        initializer_line = ccode_line;
@@ -2444,50 +2555,62 @@ yyreduce:
                                }
     break;
 
-  case 44:
-#line 877 "parse.y"
+  case 48:
+#line 955 "parse.y"
     { ; }
     break;
 
-  case 45:
-#line 878 "parse.y"
+  case 49:
+#line 956 "parse.y"
     { ; }
     break;
 
-  case 46:
-#line 879 "parse.y"
+  case 50:
+#line 957 "parse.y"
     { destructor = NULL; }
     break;
 
-  case 47:
-#line 880 "parse.y"
+  case 51:
+#line 958 "parse.y"
     { initializer = NULL; }
     break;
 
-  case 48:
-#line 881 "parse.y"
+  case 52:
+#line 959 "parse.y"
+    {
+                       if (strcmp (yyvsp[0].id, "GladeXML") == 0) {
+                               glade_widget = TRUE;
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+                                       }
+    break;
+
+  case 53:
+#line 967 "parse.y"
     {
                        destructor = NULL;
                        initializer = NULL;
                                        }
     break;
 
-  case 49:
-#line 887 "parse.y"
+  case 54:
+#line 973 "parse.y"
     {
                        push_variable(yyvsp[-2].id, the_scope,yyvsp[-4].line, NULL);
                                                }
     break;
 
-  case 50:
-#line 890 "parse.y"
+  case 55:
+#line 976 "parse.y"
     {
                        push_variable(yyvsp[-3].id, the_scope, yyvsp[-5].line, yyvsp[-2].id);
                                                }
     break;
 
-  case 51:
-#line 895 "parse.y"
+  case 56:
+#line 981 "parse.y"
     {
                        Node *node = NULL;
                        if(strcmp(yyvsp[-6].id,"get")==0 &&
@@ -2558,8 +2681,8 @@ yyreduce:
                                                }
     break;
 
-  case 52:
-#line 963 "parse.y"
+  case 57:
+#line 1049 "parse.y"
     {
                        Node *node = NULL;
                        if(strcmp(yyvsp[-3].id, "get") == 0) {
@@ -2616,8 +2739,8 @@ yyreduce:
                                                }
     break;
 
-  case 53:
-#line 1017 "parse.y"
+  case 58:
+#line 1103 "parse.y"
     {
                        Node *node;
                        char *get, *set = NULL;
@@ -2707,8 +2830,8 @@ yyreduce:
                                                }
     break;
 
-  case 54:
-#line 1106 "parse.y"
+  case 59:
+#line 1192 "parse.y"
     {
                        if (strcmp (yyvsp[-1].id, "export")!=0) {
                                g_free (yyvsp[-1].id); 
@@ -2719,15 +2842,15 @@ yyreduce:
                                                }
     break;
 
-  case 55:
-#line 1114 "parse.y"
+  case 60:
+#line 1200 "parse.y"
     {
                        yyval.id = NULL;
                                                }
     break;
 
-  case 56:
-#line 1119 "parse.y"
+  case 61:
+#line 1205 "parse.y"
     {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2778,8 +2901,8 @@ yyreduce:
                }
     break;
 
-  case 57:
-#line 1167 "parse.y"
+  case 62:
+#line 1253 "parse.y"
     {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2818,8 +2941,8 @@ yyreduce:
                }
     break;
 
-  case 58:
-#line 1203 "parse.y"
+  case 63:
+#line 1289 "parse.y"
     {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2836,33 +2959,33 @@ yyreduce:
                }
     break;
 
-  case 59:
-#line 1219 "parse.y"
+  case 64:
+#line 1305 "parse.y"
     { ; }
     break;
 
-  case 60:
-#line 1220 "parse.y"
+  case 65:
+#line 1306 "parse.y"
     { ; }
     break;
 
-  case 61:
-#line 1223 "parse.y"
+  case 66:
+#line 1309 "parse.y"
     { ; }
     break;
 
-  case 62:
-#line 1224 "parse.y"
+  case 67:
+#line 1310 "parse.y"
     { ; }
     break;
 
-  case 63:
-#line 1227 "parse.y"
+  case 68:
+#line 1313 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
-  case 64:
-#line 1228 "parse.y"
+  case 69:
+#line 1314 "parse.y"
     {
                        if (strcmp (yyvsp[-3].id, "_") != 0) {
                                g_free (yyvsp[-3].id);
@@ -2875,18 +2998,18 @@ yyreduce:
                }
     break;
 
-  case 65:
-#line 1240 "parse.y"
+  case 70:
+#line 1326 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
-  case 66:
-#line 1241 "parse.y"
+  case 71:
+#line 1327 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
-  case 67:
-#line 1244 "parse.y"
+  case 72:
+#line 1330 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2895,8 +3018,8 @@ yyreduce:
                  }
     break;
 
-  case 68:
-#line 1250 "parse.y"
+  case 73:
+#line 1336 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2905,8 +3028,8 @@ yyreduce:
                  }
     break;
 
-  case 69:
-#line 1256 "parse.y"
+  case 74:
+#line 1342 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2915,8 +3038,8 @@ yyreduce:
                  }
     break;
 
-  case 70:
-#line 1262 "parse.y"
+  case 75:
+#line 1348 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2925,8 +3048,8 @@ yyreduce:
                  }
     break;
 
-  case 71:
-#line 1268 "parse.y"
+  case 76:
+#line 1354 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2935,8 +3058,8 @@ yyreduce:
                  }
     break;
 
-  case 72:
-#line 1274 "parse.y"
+  case 77:
+#line 1360 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2945,8 +3068,8 @@ yyreduce:
                  }
     break;
 
-  case 73:
-#line 1280 "parse.y"
+  case 78:
+#line 1366 "parse.y"
     {
                Type *type = pop_type ();
                ensure_property ();
@@ -2956,8 +3079,8 @@ yyreduce:
                  }
     break;
 
-  case 74:
-#line 1287 "parse.y"
+  case 79:
+#line 1373 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2966,8 +3089,8 @@ yyreduce:
                  }
     break;
 
-  case 75:
-#line 1293 "parse.y"
+  case 80:
+#line 1379 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2976,8 +3099,8 @@ yyreduce:
                  }
     break;
 
-  case 76:
-#line 1299 "parse.y"
+  case 81:
+#line 1385 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2986,8 +3109,8 @@ yyreduce:
                  }
     break;
 
-  case 77:
-#line 1305 "parse.y"
+  case 82:
+#line 1391 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2996,8 +3119,8 @@ yyreduce:
                  }
     break;
 
-  case 78:
-#line 1311 "parse.y"
+  case 83:
+#line 1397 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3006,8 +3129,8 @@ yyreduce:
                  }
     break;
 
-  case 79:
-#line 1317 "parse.y"
+  case 84:
+#line 1403 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3016,8 +3139,8 @@ yyreduce:
                  }
     break;
 
-  case 80:
-#line 1323 "parse.y"
+  case 85:
+#line 1409 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3026,8 +3149,8 @@ yyreduce:
                  }
     break;
 
-  case 81:
-#line 1329 "parse.y"
+  case 86:
+#line 1415 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3036,8 +3159,8 @@ yyreduce:
                  }
     break;
 
-  case 82:
-#line 1335 "parse.y"
+  case 87:
+#line 1421 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3046,8 +3169,8 @@ yyreduce:
                  }
     break;
 
-  case 83:
-#line 1341 "parse.y"
+  case 88:
+#line 1427 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3056,8 +3179,8 @@ yyreduce:
                  }
     break;
 
-  case 84:
-#line 1347 "parse.y"
+  case 89:
+#line 1433 "parse.y"
     {
                ensure_property ();
                if (strcmp (yyvsp[0].id, "override") == 0) {
@@ -3083,8 +3206,8 @@ yyreduce:
                  }
     break;
 
-  case 85:
-#line 1372 "parse.y"
+  case 90:
+#line 1458 "parse.y"
     {
                        if(strcmp(yyvsp[-2].id,"type")!=0) {
                                g_free(yyvsp[-4].id);
@@ -3096,40 +3219,40 @@ yyreduce:
                                                }
     break;
 
-  case 86:
-#line 1381 "parse.y"
+  case 91:
+#line 1467 "parse.y"
     {
                        yyval.id = debool (yyvsp[0].id);
                        typestack = g_list_prepend(typestack,NULL);
                                                }
     break;
 
-  case 87:
-#line 1387 "parse.y"
+  case 92:
+#line 1473 "parse.y"
     { yyval.list = yyvsp[-1].list; }
     break;
 
-  case 88:
-#line 1388 "parse.y"
+  case 93:
+#line 1474 "parse.y"
     { yyval.list = NULL; }
     break;
 
-  case 89:
-#line 1391 "parse.y"
+  case 94:
+#line 1477 "parse.y"
     {
                        yyval.list = g_list_append(yyvsp[0].list,yyvsp[-2].id);
                                                }
     break;
 
-  case 90:
-#line 1394 "parse.y"
+  case 95:
+#line 1480 "parse.y"
     {
                        yyval.list = g_list_append(NULL,yyvsp[0].id);
                                                }
     break;
 
-  case 91:
-#line 1400 "parse.y"
+  case 96:
+#line 1486 "parse.y"
     {
                        Node *node = node_new (TYPE_NODE, 
                                               "name:steal", yyvsp[-1].id,
@@ -3139,8 +3262,8 @@ yyreduce:
                                                        }
     break;
 
-  case 92:
-#line 1407 "parse.y"
+  case 97:
+#line 1493 "parse.y"
     {
                        Node *node = node_new (TYPE_NODE, 
                                               "name:steal", yyvsp[0].id,
@@ -3149,46 +3272,46 @@ yyreduce:
                                                        }
     break;
 
-  case 93:
-#line 1416 "parse.y"
+  case 98:
+#line 1502 "parse.y"
     {
                        yyval.id = yyvsp[0].id;
                                                        }
     break;
 
-  case 94:
-#line 1419 "parse.y"
+  case 99:
+#line 1505 "parse.y"
     {
                        yyval.id = yyvsp[0].id;
                                                        }
     break;
 
-  case 95:
-#line 1422 "parse.y"
+  case 100:
+#line 1508 "parse.y"
     {
                        yyval.id = g_strconcat("const ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        }
     break;
 
-  case 96:
-#line 1426 "parse.y"
+  case 101:
+#line 1512 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
                                                        }
     break;
 
-  case 97:
-#line 1430 "parse.y"
+  case 102:
+#line 1516 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        }
     break;
 
-  case 98:
-#line 1434 "parse.y"
+  case 103:
+#line 1520 "parse.y"
     {
                        yyval.id = g_strconcat("const ", yyvsp[-1].id, " ",
                                             yyvsp[0].id, NULL);
@@ -3196,8 +3319,8 @@ yyreduce:
                                                        }
     break;
 
-  case 99:
-#line 1439 "parse.y"
+  case 104:
+#line 1525 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-2].id, " ",
                                             yyvsp[-1].id, " const", NULL);
@@ -3205,16 +3328,16 @@ yyreduce:
                                                        }
     break;
 
-  case 100:
-#line 1447 "parse.y"
+  case 105:
+#line 1533 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        }
     break;
 
-  case 101:
-#line 1451 "parse.y"
+  case 106:
+#line 1537 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[-1].id);
@@ -3222,131 +3345,131 @@ yyreduce:
                                                        }
     break;
 
-  case 102:
-#line 1456 "parse.y"
+  case 107:
+#line 1542 "parse.y"
     {
                        yyval.id = g_strconcat("const ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        }
     break;
 
-  case 103:
-#line 1460 "parse.y"
+  case 108:
+#line 1546 "parse.y"
     {
                        yyval.id = yyvsp[0].id;
                                                        }
     break;
 
-  case 104:
-#line 1463 "parse.y"
+  case 109:
+#line 1549 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
                                                        }
     break;
 
-  case 105:
-#line 1467 "parse.y"
+  case 110:
+#line 1553 "parse.y"
     {
                        yyval.id = g_strdup(yyvsp[0].id);
                                                        }
     break;
 
-  case 106:
-#line 1470 "parse.y"
+  case 111:
+#line 1556 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                                                        }
     break;
 
-  case 107:
-#line 1475 "parse.y"
+  case 112:
+#line 1561 "parse.y"
     { yyval.id = "void"; }
     break;
 
-  case 108:
-#line 1476 "parse.y"
+  case 113:
+#line 1562 "parse.y"
     { yyval.id = "char"; }
     break;
 
-  case 109:
-#line 1477 "parse.y"
+  case 114:
+#line 1563 "parse.y"
     { yyval.id = "short"; }
     break;
 
-  case 110:
-#line 1478 "parse.y"
+  case 115:
+#line 1564 "parse.y"
     { yyval.id = "int"; }
     break;
 
-  case 111:
-#line 1479 "parse.y"
+  case 116:
+#line 1565 "parse.y"
     { yyval.id = "long"; }
     break;
 
-  case 112:
-#line 1480 "parse.y"
+  case 117:
+#line 1566 "parse.y"
     { yyval.id = "float"; }
     break;
 
-  case 113:
-#line 1481 "parse.y"
+  case 118:
+#line 1567 "parse.y"
     { yyval.id = "double"; }
     break;
 
-  case 114:
-#line 1482 "parse.y"
+  case 119:
+#line 1568 "parse.y"
     { yyval.id = "signed"; }
     break;
 
-  case 115:
-#line 1483 "parse.y"
+  case 120:
+#line 1569 "parse.y"
     { yyval.id = "unsigned"; }
     break;
 
-  case 116:
-#line 1486 "parse.y"
+  case 121:
+#line 1572 "parse.y"
     { yyval.id = "struct"; }
     break;
 
-  case 117:
-#line 1487 "parse.y"
+  case 122:
+#line 1573 "parse.y"
     { yyval.id = "union"; }
     break;
 
-  case 118:
-#line 1488 "parse.y"
+  case 123:
+#line 1574 "parse.y"
     { yyval.id = "enum"; }
     break;
 
-  case 119:
-#line 1491 "parse.y"
+  case 124:
+#line 1577 "parse.y"
     { yyval.id = g_strdup("*"); }
     break;
 
-  case 120:
-#line 1492 "parse.y"
+  case 125:
+#line 1578 "parse.y"
     { yyval.id = g_strdup("* const"); }
     break;
 
-  case 121:
-#line 1493 "parse.y"
+  case 126:
+#line 1579 "parse.y"
     {
                                yyval.id = g_strconcat("*", yyvsp[0].id, NULL);
                                g_free(yyvsp[0].id);
                                        }
     break;
 
-  case 122:
-#line 1497 "parse.y"
+  case 127:
+#line 1583 "parse.y"
     {
                                yyval.id = g_strconcat("* const", yyvsp[0].id, NULL);
                                g_free(yyvsp[0].id);
                                        }
     break;
 
-  case 123:
-#line 1504 "parse.y"
+  case 128:
+#line 1590 "parse.y"
     {
                        if(strcmp(yyvsp[-1].id, "first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -3361,15 +3484,15 @@ yyreduce:
                                        }
     break;
 
-  case 124:
-#line 1516 "parse.y"
+  case 129:
+#line 1602 "parse.y"
     {
                        yyval.sigtype = SIGNAL_LAST_METHOD;
                                        }
     break;
 
-  case 125:
-#line 1522 "parse.y"
+  case 130:
+#line 1608 "parse.y"
     {
                        if(strcmp(yyvsp[-1].id,"first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -3384,8 +3507,8 @@ yyreduce:
                                        }
     break;
 
-  case 126:
-#line 1534 "parse.y"
+  case 131:
+#line 1620 "parse.y"
     {
                        if(strcmp(yyvsp[-2].id,"first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -3400,54 +3523,54 @@ yyreduce:
                                        }
     break;
 
-  case 127:
-#line 1546 "parse.y"
+  case 132:
+#line 1632 "parse.y"
     {
                        yyval.sigtype = SIGNAL_LAST_METHOD;
                                        }
     break;
 
-  case 128:
-#line 1549 "parse.y"
+  case 133:
+#line 1635 "parse.y"
     {
                        /* the_scope was default thus public */
                        the_scope = PUBLIC_SCOPE;
                                        }
     break;
 
-  case 129:
-#line 1555 "parse.y"
+  case 134:
+#line 1641 "parse.y"
     {
                        gtktypes = g_list_prepend(gtktypes, debool (yyvsp[-3].id));
                                                }
     break;
 
-  case 130:
-#line 1560 "parse.y"
+  case 135:
+#line 1646 "parse.y"
     {
                        gtktypes = g_list_append(gtktypes, debool (yyvsp[0].id));
                                                }
     break;
 
-  case 131:
-#line 1563 "parse.y"
+  case 136:
+#line 1649 "parse.y"
     { 
                        gtktypes = g_list_append(gtktypes, debool (yyvsp[0].id));
                                                        }
     break;
 
-  case 132:
-#line 1568 "parse.y"
+  case 137:
+#line 1654 "parse.y"
     { yyval.cbuf = yyvsp[0].cbuf; }
     break;
 
-  case 133:
-#line 1569 "parse.y"
+  case 138:
+#line 1655 "parse.y"
     { yyval.cbuf = NULL; }
     break;
 
-  case 134:
-#line 1573 "parse.y"
+  case 139:
+#line 1659 "parse.y"
     {
                        if(!has_self) {
                                yyerror(_("signal without 'self' as "
@@ -3466,8 +3589,8 @@ yyreduce:
                                                                        }
     break;
 
-  case 135:
-#line 1589 "parse.y"
+  case 140:
+#line 1675 "parse.y"
     {
                        if(!has_self) {
                                yyerror(_("signal without 'self' as "
@@ -3486,8 +3609,8 @@ yyreduce:
                                                                        }
     break;
 
-  case 136:
-#line 1605 "parse.y"
+  case 141:
+#line 1691 "parse.y"
     {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -3506,8 +3629,8 @@ yyreduce:
                                                                        }
     break;
 
-  case 137:
-#line 1621 "parse.y"
+  case 142:
+#line 1707 "parse.y"
     {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -3526,8 +3649,8 @@ yyreduce:
                                                                        }
     break;
 
-  case 138:
-#line 1637 "parse.y"
+  case 143:
+#line 1723 "parse.y"
     {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -3541,8 +3664,8 @@ yyreduce:
                                                                        }
     break;
 
-  case 139:
-#line 1648 "parse.y"
+  case 144:
+#line 1734 "parse.y"
     {
                        push_function(NO_SCOPE, OVERRIDE_METHOD, yyvsp[-8].id,
                                      yyvsp[-5].id, yyvsp[0].cbuf,
@@ -3551,8 +3674,8 @@ yyreduce:
                                                                        }
     break;
 
-  case 140:
-#line 1654 "parse.y"
+  case 145:
+#line 1740 "parse.y"
     {
                        if(the_scope == CLASS_SCOPE) {
                                yyerror(_("a method cannot be of class scope"));
@@ -3565,8 +3688,8 @@ yyreduce:
                                                                }
     break;
 
-  case 141:
-#line 1664 "parse.y"
+  case 146:
+#line 1750 "parse.y"
     {
                        if(strcmp(yyvsp[-4].id, "init")==0) {
                                push_init_arg(yyvsp[-2].id,FALSE);
@@ -3590,8 +3713,8 @@ yyreduce:
                                                }
     break;
 
-  case 142:
-#line 1687 "parse.y"
+  case 147:
+#line 1773 "parse.y"
     {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
@@ -3605,8 +3728,8 @@ yyreduce:
                                        }
     break;
 
-  case 143:
-#line 1698 "parse.y"
+  case 148:
+#line 1784 "parse.y"
     {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
@@ -3628,34 +3751,34 @@ yyreduce:
                                                }
     break;
 
-  case 144:
-#line 1717 "parse.y"
+  case 149:
+#line 1803 "parse.y"
     {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
                                        }
     break;
 
-  case 145:
-#line 1723 "parse.y"
+  case 150:
+#line 1809 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
-  case 146:
-#line 1724 "parse.y"
+  case 151:
+#line 1810 "parse.y"
     {
                        yyval.id = (yyvsp[0].cbuf)->str;
                        g_string_free(yyvsp[0].cbuf, FALSE);
                                        }
     break;
 
-  case 147:
-#line 1730 "parse.y"
+  case 152:
+#line 1816 "parse.y"
     { vararg = FALSE; has_self = FALSE; }
     break;
 
-  case 148:
-#line 1731 "parse.y"
+  case 153:
+#line 1817 "parse.y"
     {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3669,8 +3792,8 @@ yyreduce:
                                                }
     break;
 
-  case 149:
-#line 1742 "parse.y"
+  case 154:
+#line 1828 "parse.y"
     {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3684,8 +3807,8 @@ yyreduce:
                                                }
     break;
 
-  case 150:
-#line 1753 "parse.y"
+  case 155:
+#line 1839 "parse.y"
     {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3699,8 +3822,8 @@ yyreduce:
                                                }
     break;
 
-  case 151:
-#line 1764 "parse.y"
+  case 156:
+#line 1850 "parse.y"
     {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-2].id,"self")==0)
@@ -3713,8 +3836,8 @@ yyreduce:
                                        }
     break;
 
-  case 152:
-#line 1774 "parse.y"
+  case 157:
+#line 1860 "parse.y"
     {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-3].id,"self")==0)
@@ -3727,8 +3850,8 @@ yyreduce:
                                        }
     break;
 
-  case 153:
-#line 1784 "parse.y"
+  case 158:
+#line 1870 "parse.y"
     {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-2].id,"self")==0)
@@ -3741,47 +3864,47 @@ yyreduce:
                                        }
     break;
 
-  case 154:
-#line 1794 "parse.y"
+  case 159:
+#line 1880 "parse.y"
     { has_self = FALSE; }
     break;
 
-  case 155:
-#line 1797 "parse.y"
+  case 160:
+#line 1883 "parse.y"
     { vararg = TRUE; }
     break;
 
-  case 156:
-#line 1798 "parse.y"
+  case 161:
+#line 1884 "parse.y"
     { vararg = FALSE; }
     break;
 
-  case 157:
-#line 1801 "parse.y"
+  case 162:
+#line 1887 "parse.y"
     { ; }
     break;
 
-  case 158:
-#line 1802 "parse.y"
+  case 163:
+#line 1888 "parse.y"
     { ; }
     break;
 
-  case 159:
-#line 1805 "parse.y"
+  case 164:
+#line 1891 "parse.y"
     {
                        push_funcarg(yyvsp[0].id,NULL);
                                                                }
     break;
 
-  case 160:
-#line 1808 "parse.y"
+  case 165:
+#line 1894 "parse.y"
     {
                        push_funcarg(yyvsp[-1].id,yyvsp[0].id);
                                                                }
     break;
 
-  case 161:
-#line 1811 "parse.y"
+  case 166:
+#line 1897 "parse.y"
     {
                        if(strcmp(yyvsp[-2].id,"check")!=0) {
                                yyerror(_("parse error"));
@@ -3792,8 +3915,8 @@ yyreduce:
                                                                }
     break;
 
-  case 162:
-#line 1819 "parse.y"
+  case 167:
+#line 1905 "parse.y"
     {
                        if(strcmp(yyvsp[-2].id,"check")!=0) {
                                yyerror(_("parse error"));
@@ -3804,18 +3927,18 @@ yyreduce:
                                                                }
     break;
 
-  case 163:
-#line 1829 "parse.y"
+  case 168:
+#line 1915 "parse.y"
     { ; }
     break;
 
-  case 164:
-#line 1830 "parse.y"
+  case 169:
+#line 1916 "parse.y"
     { ; }
     break;
 
-  case 165:
-#line 1833 "parse.y"
+  case 170:
+#line 1919 "parse.y"
     {
                        if(strcmp(yyvsp[0].id,"type")==0) {
                                Node *node = node_new (CHECK_NODE,
@@ -3835,8 +3958,8 @@ yyreduce:
                                        }
     break;
 
-  case 166:
-#line 1850 "parse.y"
+  case 171:
+#line 1936 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", GT_CHECK,
@@ -3846,8 +3969,8 @@ yyreduce:
                                        }
     break;
 
-  case 167:
-#line 1857 "parse.y"
+  case 172:
+#line 1943 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", LT_CHECK,
@@ -3857,8 +3980,8 @@ yyreduce:
                                        }
     break;
 
-  case 168:
-#line 1864 "parse.y"
+  case 173:
+#line 1950 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", GE_CHECK,
@@ -3868,8 +3991,8 @@ yyreduce:
                                        }
     break;
 
-  case 169:
-#line 1871 "parse.y"
+  case 174:
+#line 1957 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", LE_CHECK,
@@ -3879,8 +4002,8 @@ yyreduce:
                                        }
     break;
 
-  case 170:
-#line 1878 "parse.y"
+  case 175:
+#line 1964 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", EQ_CHECK,
@@ -3890,8 +4013,8 @@ yyreduce:
                                        }
     break;
 
-  case 171:
-#line 1885 "parse.y"
+  case 176:
+#line 1971 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", NE_CHECK,
@@ -3901,8 +4024,8 @@ yyreduce:
                                        }
     break;
 
-  case 172:
-#line 1894 "parse.y"
+  case 177:
+#line 1980 "parse.y"
     {
                        Node *node = node_new (ENUMDEF_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3914,8 +4037,8 @@ yyreduce:
                        }
     break;
 
-  case 173:
-#line 1903 "parse.y"
+  case 178:
+#line 1989 "parse.y"
     {
                        Node *node = node_new (ENUMDEF_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3927,18 +4050,18 @@ yyreduce:
                        }
     break;
 
-  case 174:
-#line 1914 "parse.y"
+  case 179:
+#line 2000 "parse.y"
     {;}
     break;
 
-  case 175:
-#line 1915 "parse.y"
+  case 180:
+#line 2001 "parse.y"
     {;}
     break;
 
-  case 176:
-#line 1918 "parse.y"
+  case 181:
+#line 2004 "parse.y"
     {
                        Node *node;
                        char *num = yyvsp[0].id;
@@ -3961,8 +4084,8 @@ yyreduce:
                        }
     break;
 
-  case 177:
-#line 1938 "parse.y"
+  case 182:
+#line 2024 "parse.y"
     {
                        Node *node;
 
@@ -3973,8 +4096,8 @@ yyreduce:
        }
     break;
 
-  case 178:
-#line 1948 "parse.y"
+  case 183:
+#line 2034 "parse.y"
     {
                        Node *node = node_new (FLAGS_NODE,
                                               "ftype:steal", yyvsp[-1].id,
@@ -3986,8 +4109,8 @@ yyreduce:
                        }
     break;
 
-  case 179:
-#line 1957 "parse.y"
+  case 184:
+#line 2043 "parse.y"
     {
                        Node *node = node_new (FLAGS_NODE,
                                               "ftype:steal", yyvsp[-1].id,
@@ -3999,22 +4122,22 @@ yyreduce:
                        }
     break;
 
-  case 180:
-#line 1968 "parse.y"
+  case 185:
+#line 2054 "parse.y"
     {
                        flag_vals = g_list_append (flag_vals, yyvsp[0].id);
                }
     break;
 
-  case 181:
-#line 1971 "parse.y"
+  case 186:
+#line 2057 "parse.y"
     {
                        flag_vals = g_list_append (flag_vals, yyvsp[0].id);
                }
     break;
 
-  case 182:
-#line 1976 "parse.y"
+  case 187:
+#line 2062 "parse.y"
     {
                        Node *node = node_new (ERROR_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -4026,8 +4149,8 @@ yyreduce:
                        }
     break;
 
-  case 183:
-#line 1985 "parse.y"
+  case 188:
+#line 2071 "parse.y"
     {
                        Node *node = node_new (ERROR_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -4039,40 +4162,40 @@ yyreduce:
                        }
     break;
 
-  case 184:
-#line 1996 "parse.y"
+  case 189:
+#line 2082 "parse.y"
     {
                        error_vals = g_list_append (error_vals, yyvsp[0].id);
                }
     break;
 
-  case 185:
-#line 1999 "parse.y"
+  case 190:
+#line 2085 "parse.y"
     {
                        error_vals = g_list_append (error_vals, yyvsp[0].id);
                }
     break;
 
-  case 186:
-#line 2005 "parse.y"
+  case 191:
+#line 2091 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
-  case 187:
-#line 2006 "parse.y"
+  case 192:
+#line 2092 "parse.y"
     {
                        yyval.id = g_strconcat("-",yyvsp[0].id,NULL);
                        g_free(yyvsp[0].id);
                                        }
     break;
 
-  case 188:
-#line 2010 "parse.y"
+  case 193:
+#line 2096 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
-  case 189:
-#line 2011 "parse.y"
+  case 194:
+#line 2097 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
@@ -4080,7 +4203,7 @@ yyreduce:
     }
 
 /* Line 1000 of yacc.c.  */
-#line 4084 "parse.c"
+#line 4207 "parse.c"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -4305,6 +4428,6 @@ yyreturn:
 }
 
 
-#line 2014 "parse.y"
+#line 2100 "parse.y"
 
 
index 4e8ea24f432655aba5893594e37a11e7bb0b7019..eab260f832460442ba99eeeafe5cf6c3128c5137 100644 (file)
 
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 628 "parse.y"
+#line 668 "parse.y"
 typedef union YYSTYPE {
        char *id;
        GString *cbuf;
index a6471cec26a3716f7374fd2d22b39119e8682fab..f5d368800d945a00b9367d11e206c6dd6b851071 100644 (file)
@@ -46,6 +46,7 @@ static GList *error_vals = NULL;
 
 static char *chunk_size = NULL;
 static char *bonobo_object_class = NULL;
+static int glade_xml = FALSE;
 static GList *interfaces = NULL;
 static GList *typestack = NULL;
 static GList *funcargs = NULL;
@@ -61,6 +62,7 @@ static int destructor_line = 0;
 static gboolean destructor_simple = TRUE;
 static char *initializer = NULL;
 static int initializer_line = 0;
+static int glade_widget = FALSE;
 
 static char *onerror = NULL;
 static char *defreturn = NULL;
@@ -126,6 +128,7 @@ push_variable (char *name, int scope, int line_no, char *postfix)
        var = node_new (VARIABLE_NODE,
                        "scope", scope,
                        "vtype:steal", type,
+                       "glade_widget", glade_widget,
                        "id:steal", name,
                        "line_no", line_no,
                        "destructor_unref", destructor_unref,
@@ -134,8 +137,10 @@ push_variable (char *name, int scope, int line_no, char *postfix)
                        "destructor_simple", destructor_simple,
                        "initializer:steal", initializer,
                        "initializer_line", initializer_line,
+                       "initializer_simple", TRUE,
                        NULL);
        class_nodes = g_list_append(class_nodes, var);
+       glade_widget = FALSE;
 }
 
 static void
@@ -462,6 +467,41 @@ get_prop_enum_flag_cast (Property *prop)
        return ret;
 }
 
+static void
+add_construct_glade (char * file, char * root, char * domain)
+{
+       Node *var;
+       Type * type;
+       GList * flags = NULL;
+       char * set;
+       
+       type = (Type *)node_new (TYPE_NODE,
+                                "name", "GladeXML",
+                                "pointer", "*",
+                                NULL);
+       initializer = g_strdup_printf("\t{\n"
+                                     "\tGtkWidget * root;\n"
+                                     "\to->_priv->_glade_xml = glade_xml_new(%s, %s, %s);\n"
+                                     "\troot = glade_xml_get_widget(o->_priv->_glade_xml, %s);\n"
+                                     "\tgtk_widget_show(root);\n"
+                                     "\tgtk_container_add(GTK_CONTAINER(o), root);\n"
+                                     "\tglade_xml_signal_autoconnect_full(o->_priv->_glade_xml, (GladeXMLConnectFunc)___glade_xml_connect_foreach, (gpointer)o);\n"
+                                     "}\n", file, root, domain ? domain : "NULL", root);
+       
+       var = node_new (VARIABLE_NODE,
+                       "scope", PRIVATE_SCOPE,
+                       "vtype:steal", type,
+                       "glade_widget", FALSE,
+                       "id:steal", "_glade_xml",
+                       "destructor_unref", FALSE,
+                       "destructor", "g_object_unref", 
+                       "destructor_simple", TRUE,
+                       "initializer", initializer,
+                       "initializer_simple", FALSE,
+                       NULL);
+       class_nodes = g_list_prepend(class_nodes, var);
+}
+
 static void
 property_link_and_export (Node *node)
 {
@@ -735,10 +775,12 @@ classdec: CLASS TYPETOKEN FROM TYPETOKEN  classflags {
                                          "otype:steal", $<id>2,
                                          "ptype:steal", $<id>4,
                                          "bonobo_object_class:steal", bonobo_object_class,
+                                         "glade_xml", glade_xml,
                                          "interfaces:steal", interfaces,
                                          "chunk_size:steal", chunk_size,
                                          NULL);
                        bonobo_object_class = NULL;
+                       glade_xml = FALSE;
                        chunk_size = NULL;
                        interfaces = NULL;
                                                }
@@ -778,6 +820,42 @@ classflags:
                                YYERROR;
                        }
                }
+       | '(' TOKEN STRING STRING ')' classflags {
+                       if (strcmp ($<id>2, "GladeXML") == 0) {
+                               glade_xml = TRUE;
+                               add_construct_glade($<id>3, $<id>4, NULL);
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+               }
+       | '(' TOKEN STRING STRING STRING ')' classflags {
+                       if (strcmp ($<id>2, "GladeXML") == 0) {
+                               glade_xml = TRUE;
+                               add_construct_glade($<id>3, $<id>4, $<id>5);
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+               }
+       | '(' TOKEN TOKEN STRING ')' classflags {
+                       if (strcmp ($<id>2, "GladeXML") == 0) {
+                               glade_xml = TRUE;
+                               add_construct_glade($<id>3, $<id>4, NULL);
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+               }
+       | '(' TOKEN TOKEN STRING STRING ')' classflags {
+                       if (strcmp ($<id>2, "GladeXML") == 0) {
+                               glade_xml = TRUE;
+                               add_construct_glade($<id>3, $<id>4, $<id>5);
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+               }
        ;       
 
 classcode:     classcode thing                 { ; }
@@ -878,6 +956,14 @@ varoptions:        destructor initializer  { ; }
        |       initializer destructor  { ; }
        |       initializer             { destructor = NULL; }
        |       destructor              { initializer = NULL; }
+       |       TOKEN                   {
+                       if (strcmp ($<id>1, "GladeXML") == 0) {
+                               glade_widget = TRUE;
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+                                       }
        |                               {
                        destructor = NULL;
                        initializer = NULL;
index 100e1f41699bb06b8035a74aea8d37cf2afea798..6c2ca4092631d757e7e58b0dda984483c84e1155 100644 (file)
@@ -98,6 +98,7 @@ enum {
        QUARK_ptype_STEAL,
        QUARK_bonobo_object_class,
        QUARK_bonobo_object_class_STEAL,
+       QUARK_glade_xml,
        QUARK_chunk_size,
        QUARK_chunk_size_STEAL,
        QUARK_interfaces,
@@ -168,6 +169,7 @@ enum {
        QUARK_interface_STEAL,
        QUARK_vtype,
        QUARK_vtype_STEAL,
+       QUARK_glade_widget,
        QUARK_destructor_unref,
        QUARK_destructor,
        QUARK_destructor_STEAL,
@@ -176,6 +178,7 @@ enum {
        QUARK_initializer,
        QUARK_initializer_STEAL,
        QUARK_initializer_line,
+       QUARK_initializer_simple,
        QUARK_etype,
        QUARK_etype_STEAL,
        QUARK_prefix,
@@ -202,6 +205,7 @@ ensure_quarks (void)
        g_hash_table_insert (quark_ht, "ptype:steal", GINT_TO_POINTER (QUARK_ptype_STEAL));
        g_hash_table_insert (quark_ht, "bonobo_object_class", GINT_TO_POINTER (QUARK_bonobo_object_class));
        g_hash_table_insert (quark_ht, "bonobo_object_class:steal", GINT_TO_POINTER (QUARK_bonobo_object_class_STEAL));
+       g_hash_table_insert (quark_ht, "glade_xml", GINT_TO_POINTER (QUARK_glade_xml));
        g_hash_table_insert (quark_ht, "chunk_size", GINT_TO_POINTER (QUARK_chunk_size));
        g_hash_table_insert (quark_ht, "chunk_size:steal", GINT_TO_POINTER (QUARK_chunk_size_STEAL));
        g_hash_table_insert (quark_ht, "interfaces", GINT_TO_POINTER (QUARK_interfaces));
@@ -272,6 +276,7 @@ ensure_quarks (void)
        g_hash_table_insert (quark_ht, "interface:steal", GINT_TO_POINTER (QUARK_interface_STEAL));
        g_hash_table_insert (quark_ht, "vtype", GINT_TO_POINTER (QUARK_vtype));
        g_hash_table_insert (quark_ht, "vtype:steal", GINT_TO_POINTER (QUARK_vtype_STEAL));
+       g_hash_table_insert (quark_ht, "glade_widget", GINT_TO_POINTER (QUARK_glade_widget));
        g_hash_table_insert (quark_ht, "destructor_unref", GINT_TO_POINTER (QUARK_destructor_unref));
        g_hash_table_insert (quark_ht, "destructor", GINT_TO_POINTER (QUARK_destructor));
        g_hash_table_insert (quark_ht, "destructor:steal", GINT_TO_POINTER (QUARK_destructor_STEAL));
@@ -280,6 +285,7 @@ ensure_quarks (void)
        g_hash_table_insert (quark_ht, "initializer", GINT_TO_POINTER (QUARK_initializer));
        g_hash_table_insert (quark_ht, "initializer:steal", GINT_TO_POINTER (QUARK_initializer_STEAL));
        g_hash_table_insert (quark_ht, "initializer_line", GINT_TO_POINTER (QUARK_initializer_line));
+       g_hash_table_insert (quark_ht, "initializer_simple", GINT_TO_POINTER (QUARK_initializer_simple));
        g_hash_table_insert (quark_ht, "etype", GINT_TO_POINTER (QUARK_etype));
        g_hash_table_insert (quark_ht, "etype:steal", GINT_TO_POINTER (QUARK_etype_STEAL));
        g_hash_table_insert (quark_ht, "prefix", GINT_TO_POINTER (QUARK_prefix));
@@ -350,6 +356,7 @@ copy_class (Class * self)
        new->otype = g_strdup (self->otype);
        new->ptype = g_strdup (self->ptype);
        new->bonobo_object_class = g_strdup (self->bonobo_object_class);
+       new->glade_xml = self->glade_xml;
        new->chunk_size = g_strdup (self->chunk_size);
        new->interfaces = g_list_copy (self->interfaces); COPY_LIST_VALS(new->interfaces, g_strdup);
        new->nodes = node_list_copy (self->nodes);
@@ -506,6 +513,7 @@ copy_variable (Variable * self)
        new->type = VARIABLE_NODE;
        new->scope = self->scope;
        new->vtype = copy_type (self->vtype);
+       new->glade_widget = self->glade_widget;
        new->id = g_strdup (self->id);
        new->line_no = self->line_no;
        new->destructor_unref = self->destructor_unref;
@@ -514,6 +522,7 @@ copy_variable (Variable * self)
        new->destructor_simple = self->destructor_simple;
        new->initializer = g_strdup (self->initializer);
        new->initializer_line = self->initializer_line;
+       new->initializer_simple = self->initializer_simple;
        return new;
 }
 
@@ -897,6 +906,11 @@ setv_class (Class * self, va_list __ap)
                        self->bonobo_object_class = bonobo_object_class;
                        break;
                }
+               case QUARK_glade_xml: {
+                       gboolean glade_xml = va_arg (__ap, gboolean);
+                       self->glade_xml = glade_xml;
+                       break;
+               }
                case QUARK_chunk_size: {
                        char * chunk_size = va_arg (__ap, char *);
                        char * __old_value = self->chunk_size;
@@ -1627,6 +1641,11 @@ setv_variable (Variable * self, va_list __ap)
                        self->vtype = vtype;
                        break;
                }
+               case QUARK_glade_widget: {
+                       gboolean glade_widget = va_arg (__ap, gboolean);
+                       self->glade_widget = glade_widget;
+                       break;
+               }
                case QUARK_id: {
                        char * id = va_arg (__ap, char *);
                        char * __old_value = self->id;
@@ -1688,6 +1707,11 @@ setv_variable (Variable * self, va_list __ap)
                        self->initializer_line = initializer_line;
                        break;
                }
+               case QUARK_initializer_simple: {
+                       gboolean initializer_simple = va_arg (__ap, gboolean);
+                       self->initializer_simple = initializer_simple;
+                       break;
+               }
                default:
                        g_warning ("Argument named 'Variable::%s' does not exist", arg);
                        break;
index b5c693ff383ef8c0153c47dc640007f4ff976ee3..d58b0206959fb39cb65220cae4f5a5389b8aea59 100644 (file)
@@ -52,6 +52,7 @@ CLASS Class
   STRING       otype   # this object class type
   STRING       ptype   # parent class type
   STRING       bonobo_object_class # Class for BonoboObject
+       BOOL glade_xml # Glade XML Class
   STRING       chunk_size # if the object should be allocated with mem_chunks
   STRINGLIST   interfaces # GObject interfaces this class exports
   NODELIST     nodes
@@ -130,12 +131,13 @@ CLASS Method
   BOOL         vararg
   INT          unique_id       # A unique id for new methods
   BOOL         bonobo_object_func      # Function for BonoboObject
-  STRING       interface       # interface this belongs to
+               STRING  interface       # interface this belongs to
 ENDCLASS
 
 CLASS Variable
   INT          scope
   TYPE         vtype
+       BOOL glade_widget
   STRING       id
   INT          line_no
   BOOL         destructor_unref
@@ -144,6 +146,7 @@ CLASS Variable
   BOOL         destructor_simple
   STRING       initializer
   INT          initializer_line
+       BOOL   initializer_simple
 ENDCLASS
 
 CLASS EnumDef
index e134553c75353b955121c7d466fe3007bbe191c6..26dc94e3e47f93170261c0e51e61d281fd2ec51e 100644 (file)
@@ -114,6 +114,7 @@ struct _Class {
        char * otype;
        char * ptype;
        char * bonobo_object_class;
+       gboolean glade_xml;
        char * chunk_size;
        GList * interfaces;
        GList * nodes;
@@ -207,6 +208,7 @@ struct _Variable {
        NodeType type;
        int scope;
        Type * vtype;
+       gboolean glade_widget;
        char * id;
        int line_no;
        gboolean destructor_unref;
@@ -215,6 +217,7 @@ struct _Variable {
        gboolean destructor_simple;
        char * initializer;
        int initializer_line;
+       gboolean initializer_simple;
 };
 
 union _Node {