From c03d886691380dd05fafdf4745d47659ecb24562 Mon Sep 17 00:00:00 2001 From: David Rose Date: Thu, 12 Jun 2003 22:18:41 +0000 Subject: [PATCH] add PandaNode::set_tag() and related functions --- panda/src/egg/eggGroup.I | 111 ++ panda/src/egg/eggGroup.cxx | 13 + panda/src/egg/eggGroup.h | 11 + panda/src/egg/lexer.cxx.prebuilt | 875 +++++------ panda/src/egg/lexer.lxx | 4 + panda/src/egg/parser.cxx.prebuilt | 1930 ++++++++++++------------ panda/src/egg/parser.h.prebuilt | 160 +- panda/src/egg/parser.yxx | 7 +- panda/src/egg2pg/eggLoader.cxx | 6 + panda/src/pgraph/nodePath.I | 59 + panda/src/pgraph/nodePath.h | 5 + panda/src/pgraph/pandaNode.I | 67 + panda/src/pgraph/pandaNode.cxx | 78 + panda/src/pgraph/pandaNode.h | 14 + panda/src/pgraph/sceneGraphReducer.cxx | 8 +- panda/src/putil/bam.h | 5 +- 16 files changed, 1906 insertions(+), 1447 deletions(-) diff --git a/panda/src/egg/eggGroup.I b/panda/src/egg/eggGroup.I index 98be0e73b8..7e3b788d9d 100644 --- a/panda/src/egg/eggGroup.I +++ b/panda/src/egg/eggGroup.I @@ -632,6 +632,117 @@ get_lod() const { return *_lod; } +//////////////////////////////////////////////////////////////////// +// Function: EggGroup::set_tag +// Access: Published +// Description: Associates a user-defined value with a user-defined +// key which is stored on the node. This value has no +// meaning to Panda; but it is stored indefinitely on +// the node until it is requested again. This value +// will be copied to the PandaNode that is created for +// this particular EggGroup if the egg file is loaded as +// a scene. +// +// Each unique key stores a different string value. +// There is no effective limit on the number of +// different keys that may be stored or on the length of +// any one key's value. +//////////////////////////////////////////////////////////////////// +INLINE void EggGroup:: +set_tag(const string &key, const string &value) { + _tag_data[key] = value; +} + +//////////////////////////////////////////////////////////////////// +// Function: EggGroup::get_tag +// Access: Published +// Description: Retrieves the user-defined value that was previously +// set on this node for the particular key, if any. If +// no value has been previously set, returns the empty +// string. +//////////////////////////////////////////////////////////////////// +INLINE string EggGroup:: +get_tag(const string &key) const { + TagData::const_iterator ti; + ti = _tag_data.find(key); + if (ti != _tag_data.end()) { + return (*ti).second; + } + return string(); +} + +//////////////////////////////////////////////////////////////////// +// Function: EggGroup::has_tag +// Access: Published +// Description: Returns true if a value has been defined on this node +// for the particular key (even if that value is the +// empty string), or false if no value has been set. +//////////////////////////////////////////////////////////////////// +INLINE bool EggGroup:: +has_tag(const string &key) const { + TagData::const_iterator ti; + ti = _tag_data.find(key); + return (ti != _tag_data.end()); +} + +//////////////////////////////////////////////////////////////////// +// Function: EggGroup::clear_tag +// Access: Published +// Description: Removes the value defined for this key on this +// particular node. After a call to clear_tag(), +// has_tag() will return false for the indicated key. +//////////////////////////////////////////////////////////////////// +INLINE void EggGroup:: +clear_tag(const string &key) { + _tag_data.erase(key); +} + + +//////////////////////////////////////////////////////////////////// +// Function: EggGroup::tag_begin +// Access: Public +// Description: Returns an iterator that can, in conjunction with +// tag_end(), be used to traverse the entire set of +// tag keys. Each iterator returns a pair. +// +// This interface is not safe to use outside of +// PANDAEGG.DLL. +//////////////////////////////////////////////////////////////////// +INLINE EggGroup::TagData::const_iterator EggGroup:: +tag_begin() const { + return _tag_data.begin(); +} + +//////////////////////////////////////////////////////////////////// +// Function: EggGroup::tag_end +// Access: Public +// Description: Returns an iterator that can, in conjunction with +// tag_begin(), be used to traverse the entire set of +// tag keys. Each iterator returns a pair. +// +// This interface is not safe to use outside of +// PANDAEGG.DLL. +//////////////////////////////////////////////////////////////////// +INLINE EggGroup::TagData::const_iterator EggGroup:: +tag_end() const { + return _tag_data.end(); +} + +//////////////////////////////////////////////////////////////////// +// Function: EggGrop::tag_size +// Access: Public +// Description: Returns the number of elements between tag_begin() +// and tag_end(). +// +// This interface is not safe to use outside of +// PANDAEGG.DLL. +//////////////////////////////////////////////////////////////////// +INLINE EggGroup::TagData::size_type EggGroup:: +tag_size() const { + return _tag_data.size(); +} //////////////////////////////////////////////////////////////////// // Function: EggGroup::vref_begin diff --git a/panda/src/egg/eggGroup.cxx b/panda/src/egg/eggGroup.cxx index 4ebf2a8265..bc504c15cc 100644 --- a/panda/src/egg/eggGroup.cxx +++ b/panda/src/egg/eggGroup.cxx @@ -65,6 +65,8 @@ operator = (const EggGroup ©) { _collision_name = copy._collision_name; _fps = copy._fps; + _tag_data = copy._tag_data; + unref_all_vertices(); _vref = copy._vref; @@ -287,6 +289,17 @@ write(ostream &out, int indent_level) const { EggRenderMode::write(out, indent_level + 2); + TagData::const_iterator ti; + for (ti = _tag_data.begin(); ti != _tag_data.end(); ++ti) { + const string &key = (*ti).first; + const string &value = (*ti).second; + + indent(out, indent_level + 2) << " "; + enquote_string(out, key) << " {\n"; + enquote_string(out, value, indent_level + 4) << "\n"; + indent(out, indent_level + 2) << "}\n"; + } + // We have to write the children nodes before we write the vertex // references, since we might be referencing a vertex that's defined // in one of those children nodes! diff --git a/panda/src/egg/eggGroup.h b/panda/src/egg/eggGroup.h index 5d98893d55..27ff40bb60 100644 --- a/panda/src/egg/eggGroup.h +++ b/panda/src/egg/eggGroup.h @@ -40,6 +40,7 @@ class EXPCL_PANDAEGG EggGroup : public EggGroupNode, public EggRenderMode, public EggTransform3d { public: typedef pmap VertexRef; + typedef pmap TagData; // These bits are all stored somewhere in _flags. enum GroupType { @@ -184,6 +185,15 @@ public: INLINE bool has_lod() const; INLINE const EggSwitchCondition &get_lod() const; + INLINE void set_tag(const string &key, const string &value); + INLINE string get_tag(const string &key) const; + INLINE bool has_tag(const string &key) const; + INLINE void clear_tag(const string &key); + + INLINE TagData::const_iterator tag_begin() const; + INLINE TagData::const_iterator tag_end() const; + INLINE TagData::size_type tag_size() const; + void ref_vertex(EggVertex *vert, double membership = 1.0); void unref_vertex(EggVertex *vert); void unref_all_vertices(); @@ -249,6 +259,7 @@ private: string _collision_name; double _fps; PT(EggSwitchCondition) _lod; + TagData _tag_data; VertexRef _vref; diff --git a/panda/src/egg/lexer.cxx.prebuilt b/panda/src/egg/lexer.cxx.prebuilt index 479df099f3..d1b8628e23 100644 --- a/panda/src/egg/lexer.cxx.prebuilt +++ b/panda/src/egg/lexer.cxx.prebuilt @@ -300,67 +300,67 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); *yy_cp = '\0'; \ yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 91 -#define YY_END_OF_BUFFER 92 -static yyconst short int yy_accept[516] = +#define YY_NUM_RULES 92 +#define YY_END_OF_BUFFER 93 +static yyconst short int yy_accept[518] = { 0, - 0, 0, 92, 90, 2, 1, 89, 90, 90, 90, - 90, 83, 83, 90, 90, 90, 5, 90, 1, 90, - 83, 90, 83, 4, 3, 83, 85, 90, 84, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 3, 3, 85, 90, 83, 84, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 0, 0, 93, 91, 2, 1, 90, 91, 91, 91, + 91, 84, 84, 91, 91, 91, 5, 91, 1, 91, + 84, 91, 84, 4, 3, 84, 86, 91, 85, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 3, 3, 86, 91, 84, 85, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 63, - 90, 90, 90, 87, 90, 88, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 16, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 30, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 74, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 22, 90, - 90, 90, 90, 20, 90, 90, 90, 90, 90, 29, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 63, + 91, 91, 91, 88, 91, 89, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 16, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 30, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 75, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 22, + 91, 91, 91, 91, 20, 91, 91, 91, 91, 91, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 49, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 71, 90, 90, 90, 90, 90, - 90, 86, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 17, 90, 90, 90, 90, 21, 90, 26, 90, - 90, 90, 90, 90, 90, 35, 90, 90, 90, 40, - 90, 90, 90, 90, 90, 90, 90, 50, 90, 52, - 53, 54, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 69, 70, 90, 90, 90, 90, 90, + 29, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 49, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 64, + 91, 91, 91, 91, 91, 91, 72, 91, 91, 91, + 91, 91, 91, 87, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 17, 91, 91, 91, 91, 21, 91, + 26, 91, 91, 91, 91, 91, 91, 35, 91, 91, + 91, 40, 91, 91, 91, 91, 91, 91, 91, 50, + 91, 52, 53, 54, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 70, 71, 91, 91, 91, - 90, 86, 90, 7, 90, 90, 11, 90, 90, 90, - 90, 90, 90, 19, 24, 90, 90, 28, 90, 90, - 31, 32, 90, 90, 39, 90, 90, 90, 90, 45, - 90, 90, 90, 90, 90, 90, 57, 90, 90, 90, - 62, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 10, 12, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 41, 90, - 90, 90, 90, 90, 90, 51, 55, 56, 90, 90, - 60, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 77, 90, 90, 90, 90, 90, 90, 13, 14, + 91, 91, 91, 87, 91, 7, 91, 91, 11, 91, + 91, 91, 91, 91, 91, 19, 24, 91, 91, 28, + 91, 91, 31, 32, 91, 91, 39, 91, 91, 91, + 91, 45, 91, 91, 91, 91, 91, 91, 57, 91, + 91, 91, 62, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 10, 12, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 41, 91, 91, 91, 91, 91, 91, 51, 55, 56, + 91, 91, 60, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 78, 91, 91, 91, 91, 91, 91, - 90, 90, 18, 90, 90, 33, 90, 90, 37, 38, - 90, 90, 90, 90, 90, 48, 90, 59, 90, 64, - 65, 90, 90, 90, 72, 73, 75, 76, 90, 90, - 90, 90, 90, 90, 90, 23, 90, 90, 34, 36, - 90, 90, 90, 90, 90, 58, 90, 66, 90, 90, - 90, 90, 90, 81, 90, 90, 8, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 67, 68, 90, - 90, 80, 90, 90, 90, 90, 90, 27, 42, 90, - 44, 46, 47, 90, 78, 79, 90, 6, 90, 90, - 90, 90, 90, 82, 90, 90, 90, 43, 90, 90, + 13, 14, 91, 91, 18, 91, 91, 33, 91, 91, + 37, 38, 91, 91, 91, 91, 91, 48, 91, 59, + 91, 65, 66, 91, 91, 91, 73, 74, 76, 77, + 91, 91, 91, 91, 91, 91, 91, 23, 91, 91, + 34, 36, 91, 91, 91, 91, 91, 58, 91, 67, + 91, 91, 91, 91, 91, 82, 91, 91, 8, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 68, + 69, 91, 91, 81, 91, 91, 91, 91, 91, 27, + 42, 91, 44, 46, 47, 91, 79, 80, 91, 6, + 91, 91, 91, 91, 91, 83, 91, 91, 91, 43, - 90, 90, 90, 90, 90, 90, 90, 9, 90, 90, - 61, 15, 90, 25, 0 + 91, 91, 91, 91, 91, 91, 91, 91, 91, 9, + 91, 91, 61, 15, 91, 25, 0 } ; static yyconst int yy_ec[256] = @@ -404,280 +404,282 @@ static yyconst int yy_meta[46] = 1, 1, 1, 1, 2 } ; -static yyconst short int yy_base[521] = +static yyconst short int yy_base[523] = { 0, - 0, 44, 622, 0, 623, 0, 623, 8, 81, 22, - 18, 100, 19, 123, 589, 601, 623, 0, 0, 29, - 30, 587, 51, 0, 65, 68, 14, 159, 164, 61, - 91, 170, 43, 582, 590, 584, 582, 582, 580, 68, - 64, 66, 579, 93, 175, 181, 128, 111, 587, 586, - 577, 584, 136, 0, 18, 207, 213, 0, 563, 587, - 575, 572, 584, 569, 102, 584, 564, 562, 561, 564, - 571, 559, 554, 550, 560, 561, 552, 556, 554, 173, - 560, 553, 552, 546, 561, 559, 545, 544, 551, 556, - 539, 48, 552, 555, 536, 554, 553, 536, 551, 542, + 0, 44, 624, 0, 625, 0, 625, 8, 81, 22, + 18, 100, 19, 123, 591, 603, 625, 0, 0, 29, + 30, 589, 51, 0, 65, 68, 14, 159, 164, 61, + 91, 170, 43, 584, 592, 586, 584, 584, 582, 68, + 64, 66, 581, 93, 175, 181, 128, 111, 589, 588, + 579, 586, 136, 0, 18, 207, 213, 0, 565, 589, + 577, 574, 586, 571, 102, 586, 566, 564, 563, 566, + 573, 561, 556, 552, 562, 563, 554, 558, 556, 173, + 562, 555, 554, 548, 563, 561, 547, 546, 553, 558, + 541, 48, 554, 557, 538, 556, 555, 538, 553, 544, - 548, 525, 543, 176, 527, 535, 534, 545, 532, 0, - 531, 523, 527, 0, 546, 0, 529, 534, 524, 531, - 516, 514, 520, 518, 512, 0, 509, 529, 507, 508, - 523, 519, 524, 496, 520, 515, 519, 497, 518, 0, - 504, 495, 500, 493, 496, 146, 506, 504, 496, 506, - 502, 501, 485, 490, 478, 503, 500, 188, 486, 487, - 477, 493, 476, 483, 68, 480, 479, 486, 478, 491, - 475, 474, 0, 473, 472, 465, 497, 459, 477, 476, - 478, 467, 490, 472, 467, 470, 470, 474, 0, 471, - 458, 469, 463, 0, 469, 454, 467, 457, 448, 0, + 102, 528, 546, 176, 530, 538, 537, 548, 535, 0, + 534, 526, 530, 0, 549, 0, 532, 537, 527, 534, + 519, 517, 523, 521, 515, 0, 512, 532, 510, 511, + 526, 522, 527, 499, 523, 518, 522, 500, 521, 0, + 507, 498, 503, 496, 499, 146, 509, 507, 499, 509, + 505, 504, 488, 493, 481, 506, 503, 188, 489, 490, + 480, 496, 479, 486, 498, 68, 482, 481, 488, 480, + 493, 477, 476, 0, 475, 474, 467, 499, 461, 479, + 478, 480, 469, 492, 474, 469, 472, 472, 476, 0, + 473, 460, 471, 465, 0, 471, 456, 469, 459, 450, - 442, 461, 441, 441, 460, 440, 448, 444, 456, 453, - 434, 449, 433, 449, 429, 441, 0, 448, 426, 446, - 445, 444, 433, 118, 436, 431, 436, 433, 428, 415, - 428, 415, 434, 433, 0, 416, 415, 414, 413, 422, - 425, 222, 407, 425, 408, 417, 422, 416, 415, 404, - 408, 0, 402, 414, 415, 414, 0, 403, 0, 406, - 411, 405, 394, 408, 407, 0, 396, 380, 404, 0, - 390, 217, 381, 401, 385, 386, 382, 0, 391, 0, - 0, 0, 382, 376, 394, 378, 377, 382, 390, 369, - 369, 366, 134, 0, 0, 365, 364, 363, 362, 357, + 0, 444, 463, 443, 443, 462, 442, 450, 446, 458, + 455, 436, 451, 435, 451, 431, 443, 0, 450, 428, + 448, 447, 446, 435, 118, 438, 433, 438, 435, 0, + 430, 417, 430, 417, 436, 435, 0, 418, 417, 416, + 415, 424, 427, 222, 409, 427, 410, 419, 424, 418, + 417, 406, 410, 0, 404, 416, 417, 416, 0, 405, + 0, 408, 413, 407, 396, 410, 409, 0, 398, 382, + 406, 0, 392, 217, 383, 403, 387, 388, 384, 0, + 393, 0, 0, 0, 384, 378, 396, 380, 379, 384, + 392, 371, 371, 368, 134, 0, 0, 367, 366, 365, - 366, 0, 376, 0, 377, 378, 0, 377, 370, 354, - 359, 369, 359, 0, 0, 367, 368, 0, 363, 364, - 0, 0, 365, 178, 0, 366, 343, 342, 342, 0, - 354, 351, 345, 359, 358, 357, 0, 352, 347, 230, - 0, 333, 347, 343, 335, 348, 329, 328, 327, 326, - 231, 335, 322, 324, 0, 0, 342, 341, 338, 333, - 338, 314, 331, 335, 328, 320, 332, 331, 0, 311, - 310, 302, 321, 318, 325, 0, 0, 0, 318, 323, - 0, 306, 321, 320, 299, 299, 296, 316, 315, 314, - 313, 0, 297, 295, 304, 295, 289, 302, 0, 0, + 364, 359, 368, 0, 378, 0, 379, 380, 0, 379, + 372, 356, 361, 371, 361, 0, 0, 369, 370, 0, + 365, 366, 0, 0, 367, 178, 0, 368, 345, 344, + 344, 0, 356, 353, 347, 361, 360, 359, 0, 354, + 349, 230, 0, 335, 349, 345, 337, 350, 331, 330, + 329, 328, 231, 337, 324, 326, 0, 0, 344, 343, + 340, 335, 340, 316, 333, 337, 330, 322, 334, 333, + 0, 313, 312, 304, 323, 320, 327, 0, 0, 0, + 320, 325, 0, 308, 323, 322, 301, 301, 298, 318, + 317, 316, 315, 0, 299, 297, 306, 297, 291, 304, - 285, 305, 0, 298, 297, 0, 302, 301, 0, 0, - 277, 292, 281, 282, 287, 0, 295, 0, 279, 0, - 0, 293, 278, 285, 0, 0, 0, 0, 280, 273, - 281, 197, 264, 232, 280, 0, 266, 265, 0, 0, - 277, 280, 275, 259, 258, 0, 273, 0, 277, 276, - 261, 261, 273, 0, 252, 265, 0, 264, 249, 247, - 267, 266, 261, 264, 263, 262, 251, 0, 0, 260, - 249, 0, 259, 246, 230, 218, 237, 0, 0, 236, - 0, 0, 0, 220, 0, 0, 240, 0, 218, 218, - 210, 223, 212, 0, 206, 167, 105, 0, 97, 91, + 0, 0, 287, 307, 0, 300, 299, 0, 304, 303, + 0, 0, 279, 294, 283, 284, 289, 0, 297, 0, + 281, 0, 0, 295, 280, 287, 0, 0, 0, 0, + 282, 275, 283, 197, 266, 232, 282, 0, 268, 267, + 0, 0, 279, 282, 277, 261, 260, 0, 275, 0, + 279, 278, 263, 263, 275, 0, 254, 267, 0, 266, + 251, 249, 269, 268, 263, 266, 265, 264, 253, 0, + 0, 262, 261, 0, 272, 249, 232, 220, 239, 0, + 0, 238, 0, 0, 0, 222, 0, 0, 242, 0, + 220, 220, 214, 238, 225, 0, 217, 201, 195, 0, - 102, 89, 75, 82, 46, 35, 32, 0, 21, 1, - 0, 0, 1, 0, 623, 267, 0, 270, 272, 274 + 172, 103, 107, 92, 75, 82, 46, 35, 32, 0, + 21, 1, 0, 0, 1, 0, 625, 267, 0, 270, + 272, 274 } ; -static yyconst short int yy_def[521] = +static yyconst short int yy_def[523] = { 0, - 516, 516, 515, 517, 515, 518, 515, 517, 517, 517, - 517, 517, 12, 517, 517, 517, 515, 517, 518, 517, - 12, 517, 517, 517, 519, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 519, 520, 517, 517, 517, 29, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 518, 518, 517, 519, 517, 520, 517, 519, 519, 519, + 519, 519, 12, 519, 519, 519, 517, 519, 520, 519, + 12, 519, 519, 519, 521, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 521, 522, 519, 519, 519, 29, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, - 517, 242, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 519, 519, 519, 244, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 0, 515, 515, 515, 515, 515 + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 0, 517, 517, 517, + 517, 517 } ; -static yyconst short int yy_nxt[669] = +static yyconst short int yy_nxt[671] = { 0, - 18, 5, 6, 7, 515, 515, 8, 9, 10, 11, - 12, 13, 13, 13, 13, 14, 20, 514, 21, 21, + 18, 5, 6, 7, 517, 517, 8, 9, 10, 11, + 12, 13, 13, 13, 13, 14, 20, 516, 21, 21, 21, 21, 21, 24, 55, 55, 15, 25, 55, 55, - 513, 16, 23, 23, 23, 23, 23, 512, 18, 23, - 23, 23, 23, 23, 17, 5, 6, 7, 511, 18, + 515, 16, 23, 23, 23, 23, 23, 514, 18, 23, + 23, 23, 23, 23, 17, 5, 6, 7, 513, 18, 8, 9, 10, 11, 12, 13, 13, 13, 13, 14, - 18, 23, 23, 23, 23, 23, 54, 510, 54, 76, - 15, 18, 77, 28, 154, 16, 509, 155, 23, 23, + 18, 23, 23, 23, 23, 23, 54, 512, 54, 76, + 15, 18, 77, 28, 154, 16, 511, 155, 23, 23, 23, 23, 23, 59, 60, 89, 84, 61, 17, 20, - 28, 21, 21, 21, 21, 21, 87, 229, 508, 62, + 28, 21, 21, 21, 21, 21, 87, 231, 510, 62, - 85, 90, 88, 86, 91, 230, 507, 22, 26, 54, + 85, 90, 88, 86, 91, 232, 509, 22, 26, 54, 21, 21, 21, 21, 21, 93, 63, 94, 109, 27, - 64, 506, 28, 65, 505, 95, 504, 110, 111, 503, - 66, 123, 124, 112, 125, 106, 284, 54, 502, 54, - 285, 29, 30, 31, 32, 107, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 345, 44, 45, - 46, 47, 48, 346, 49, 56, 56, 108, 206, 57, + 64, 164, 28, 65, 508, 95, 165, 110, 111, 507, + 66, 123, 124, 112, 125, 106, 286, 54, 506, 54, + 287, 29, 30, 31, 32, 107, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 347, 44, 45, + 46, 47, 48, 348, 49, 56, 56, 108, 207, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 96, - 54, 207, 58, 58, 58, 58, 58, 58, 67, 140, - 68, 367, 368, 141, 167, 97, 69, 98, 168, 101, + 54, 208, 58, 58, 58, 58, 58, 58, 67, 140, + 68, 369, 370, 141, 168, 97, 69, 98, 169, 101, - 99, 70, 169, 102, 501, 71, 219, 72, 73, 142, - 103, 74, 75, 454, 455, 100, 104, 57, 57, 57, - 57, 57, 105, 57, 57, 57, 57, 57, 500, 220, - 221, 222, 302, 302, 302, 302, 302, 327, 499, 498, - 302, 302, 302, 302, 302, 302, 381, 392, 457, 393, - 382, 497, 458, 328, 496, 495, 494, 493, 492, 491, - 490, 489, 488, 487, 394, 486, 395, 4, 4, 4, - 19, 19, 53, 53, 54, 54, 485, 484, 483, 482, - 481, 480, 479, 478, 477, 476, 475, 474, 473, 472, - 471, 470, 469, 468, 467, 466, 465, 464, 463, 462, + 99, 70, 170, 102, 505, 71, 220, 72, 73, 142, + 103, 74, 75, 456, 457, 100, 104, 57, 57, 57, + 57, 57, 105, 57, 57, 57, 57, 57, 504, 221, + 222, 223, 304, 304, 304, 304, 304, 329, 503, 502, + 304, 304, 304, 304, 304, 304, 383, 394, 459, 395, + 384, 501, 460, 330, 500, 499, 498, 497, 496, 495, + 494, 493, 492, 491, 396, 490, 397, 4, 4, 4, + 19, 19, 53, 53, 54, 54, 489, 488, 487, 486, + 485, 484, 483, 482, 481, 480, 479, 478, 477, 476, + 475, 474, 473, 472, 471, 470, 469, 468, 467, 466, - 461, 460, 459, 456, 453, 452, 451, 450, 449, 448, - 447, 446, 445, 444, 443, 442, 441, 440, 439, 438, - 437, 436, 435, 434, 433, 432, 431, 430, 429, 428, - 427, 426, 425, 424, 423, 422, 421, 420, 419, 418, - 417, 416, 415, 414, 413, 412, 411, 410, 409, 408, - 407, 406, 405, 404, 403, 402, 401, 400, 399, 398, - 397, 396, 391, 390, 389, 388, 387, 386, 385, 384, - 383, 380, 379, 378, 377, 376, 375, 374, 373, 372, - 371, 370, 369, 366, 365, 364, 363, 362, 361, 360, - 359, 358, 357, 356, 355, 354, 353, 352, 351, 350, + 465, 464, 463, 462, 461, 458, 455, 454, 453, 452, + 451, 450, 449, 448, 447, 446, 445, 444, 443, 442, + 441, 440, 439, 438, 437, 436, 435, 434, 433, 432, + 431, 430, 429, 428, 427, 426, 425, 424, 423, 422, + 421, 420, 419, 418, 417, 416, 415, 414, 413, 412, + 411, 410, 409, 408, 407, 406, 405, 404, 403, 402, + 401, 400, 399, 398, 393, 392, 391, 390, 389, 388, + 387, 386, 385, 382, 381, 380, 379, 378, 377, 376, + 375, 374, 373, 372, 371, 368, 367, 366, 365, 364, + 363, 362, 361, 360, 359, 358, 357, 356, 355, 354, - 349, 348, 347, 344, 343, 342, 341, 340, 339, 338, - 337, 336, 335, 334, 333, 332, 331, 330, 329, 326, - 325, 324, 323, 322, 321, 320, 319, 318, 317, 316, - 315, 314, 313, 312, 311, 310, 309, 308, 307, 306, - 305, 304, 303, 301, 300, 299, 298, 297, 296, 295, - 294, 293, 292, 291, 290, 289, 288, 287, 286, 283, - 282, 281, 280, 279, 278, 277, 276, 275, 274, 273, - 272, 271, 270, 269, 268, 267, 266, 265, 264, 263, - 262, 261, 260, 259, 258, 257, 256, 255, 254, 253, - 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, + 353, 352, 351, 350, 349, 346, 345, 344, 343, 342, + 341, 340, 339, 338, 337, 336, 335, 334, 333, 332, + 331, 328, 327, 326, 325, 324, 323, 322, 321, 320, + 319, 318, 317, 316, 315, 314, 313, 312, 311, 310, + 309, 308, 307, 306, 305, 303, 302, 301, 300, 299, + 298, 297, 296, 295, 294, 293, 292, 291, 290, 289, + 288, 285, 284, 283, 282, 281, 280, 279, 278, 277, + 276, 275, 274, 273, 272, 271, 270, 269, 268, 267, + 266, 265, 264, 263, 262, 261, 260, 259, 258, 257, + 256, 255, 254, 253, 252, 251, 250, 249, 248, 247, - 242, 241, 240, 239, 238, 237, 236, 235, 234, 233, - 232, 231, 228, 227, 226, 225, 224, 223, 218, 217, - 216, 215, 214, 213, 212, 211, 210, 209, 208, 205, - 204, 203, 202, 201, 200, 199, 198, 197, 196, 195, - 194, 193, 192, 191, 190, 189, 188, 187, 186, 185, - 184, 183, 182, 181, 180, 179, 178, 177, 176, 175, - 174, 173, 172, 171, 170, 166, 165, 164, 163, 162, - 161, 160, 159, 158, 157, 156, 153, 152, 151, 150, - 149, 148, 147, 146, 145, 144, 143, 139, 138, 137, - 136, 135, 134, 133, 132, 131, 130, 129, 128, 127, + 246, 245, 244, 243, 242, 241, 240, 239, 238, 237, + 236, 235, 234, 233, 230, 229, 228, 227, 226, 225, + 224, 219, 218, 217, 216, 215, 214, 213, 212, 211, + 210, 209, 206, 205, 204, 203, 202, 201, 200, 199, + 198, 197, 196, 195, 194, 193, 192, 191, 190, 189, + 188, 187, 186, 185, 184, 183, 182, 181, 180, 179, + 178, 177, 176, 175, 174, 173, 172, 171, 167, 166, + 163, 162, 161, 160, 159, 158, 157, 156, 153, 152, + 151, 150, 149, 148, 147, 146, 145, 144, 143, 139, + 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, - 126, 122, 121, 120, 119, 118, 117, 116, 115, 114, - 113, 92, 83, 82, 81, 80, 79, 78, 52, 51, - 50, 515, 3, 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 + 128, 127, 126, 122, 121, 120, 119, 118, 117, 116, + 115, 114, 113, 92, 83, 82, 81, 80, 79, 78, + 52, 51, 50, 517, 3, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517 } ; -static yyconst short int yy_chk[669] = +static yyconst short int yy_chk[671] = { 0, - 517, 1, 1, 1, 0, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 8, 513, 8, 8, + 519, 1, 1, 1, 0, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 8, 515, 8, 8, 8, 8, 8, 11, 27, 27, 1, 11, 55, 55, - 510, 1, 10, 10, 10, 10, 10, 509, 13, 20, - 20, 20, 20, 20, 1, 2, 2, 2, 507, 21, + 512, 1, 10, 10, 10, 10, 10, 511, 13, 20, + 20, 20, 20, 20, 1, 2, 2, 2, 509, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 13, 23, 23, 23, 23, 23, 25, 506, 25, 33, - 2, 21, 33, 23, 92, 2, 505, 92, 26, 26, + 13, 23, 23, 23, 23, 23, 25, 508, 25, 33, + 2, 21, 33, 23, 92, 2, 507, 92, 26, 26, 26, 26, 26, 30, 30, 42, 40, 30, 2, 9, - 26, 9, 9, 9, 9, 9, 41, 165, 504, 30, + 26, 9, 9, 9, 9, 9, 41, 166, 506, 30, - 40, 42, 41, 40, 42, 165, 503, 9, 12, 25, + 40, 42, 41, 40, 42, 166, 505, 9, 12, 25, 12, 12, 12, 12, 12, 44, 31, 44, 48, 12, - 31, 502, 12, 31, 501, 44, 500, 48, 48, 499, - 31, 65, 65, 48, 65, 47, 224, 53, 497, 53, - 224, 12, 14, 14, 14, 47, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 293, 14, 14, - 14, 14, 14, 293, 14, 28, 28, 47, 146, 28, + 31, 101, 12, 31, 504, 44, 101, 48, 48, 503, + 31, 65, 65, 48, 65, 47, 225, 53, 502, 53, + 225, 12, 14, 14, 14, 47, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 295, 14, 14, + 14, 14, 14, 295, 14, 28, 28, 47, 146, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 45, 53, 146, 29, 29, 29, 29, 29, 29, 32, 80, - 32, 324, 324, 80, 104, 45, 32, 45, 104, 46, + 32, 326, 326, 80, 104, 45, 32, 45, 104, 46, - 45, 32, 104, 46, 496, 32, 158, 32, 32, 80, - 46, 32, 32, 432, 432, 45, 46, 56, 56, 56, - 56, 56, 46, 57, 57, 57, 57, 57, 495, 158, - 158, 158, 242, 242, 242, 242, 242, 272, 493, 492, - 242, 242, 242, 242, 242, 242, 340, 351, 434, 351, - 340, 491, 434, 272, 490, 489, 487, 484, 480, 477, - 476, 475, 474, 473, 351, 471, 351, 516, 516, 516, - 518, 518, 519, 519, 520, 520, 470, 467, 466, 465, - 464, 463, 462, 461, 460, 459, 458, 456, 455, 453, - 452, 451, 450, 449, 447, 445, 444, 443, 442, 441, + 45, 32, 104, 46, 501, 32, 158, 32, 32, 80, + 46, 32, 32, 434, 434, 45, 46, 56, 56, 56, + 56, 56, 46, 57, 57, 57, 57, 57, 499, 158, + 158, 158, 244, 244, 244, 244, 244, 274, 498, 497, + 244, 244, 244, 244, 244, 244, 342, 353, 436, 353, + 342, 495, 436, 274, 494, 493, 492, 491, 489, 486, + 482, 479, 478, 477, 353, 476, 353, 518, 518, 518, + 520, 520, 521, 521, 522, 522, 475, 473, 472, 469, + 468, 467, 466, 465, 464, 463, 462, 461, 460, 458, + 457, 455, 454, 453, 452, 451, 449, 447, 446, 445, - 438, 437, 435, 433, 431, 430, 429, 424, 423, 422, - 419, 417, 415, 414, 413, 412, 411, 408, 407, 405, - 404, 402, 401, 398, 397, 396, 395, 394, 393, 391, - 390, 389, 388, 387, 386, 385, 384, 383, 382, 380, - 379, 375, 374, 373, 372, 371, 370, 368, 367, 366, - 365, 364, 363, 362, 361, 360, 359, 358, 357, 354, - 353, 352, 350, 349, 348, 347, 346, 345, 344, 343, - 342, 339, 338, 336, 335, 334, 333, 332, 331, 329, - 328, 327, 326, 323, 320, 319, 317, 316, 313, 312, - 311, 310, 309, 308, 306, 305, 303, 301, 300, 299, + 444, 443, 440, 439, 437, 435, 433, 432, 431, 426, + 425, 424, 421, 419, 417, 416, 415, 414, 413, 410, + 409, 407, 406, 404, 403, 400, 399, 398, 397, 396, + 395, 393, 392, 391, 390, 389, 388, 387, 386, 385, + 384, 382, 381, 377, 376, 375, 374, 373, 372, 370, + 369, 368, 367, 366, 365, 364, 363, 362, 361, 360, + 359, 356, 355, 354, 352, 351, 350, 349, 348, 347, + 346, 345, 344, 341, 340, 338, 337, 336, 335, 334, + 333, 331, 330, 329, 328, 325, 322, 321, 319, 318, + 315, 314, 313, 312, 311, 310, 308, 307, 305, 303, - 298, 297, 296, 292, 291, 290, 289, 288, 287, 286, - 285, 284, 283, 279, 277, 276, 275, 274, 273, 271, - 269, 268, 267, 265, 264, 263, 262, 261, 260, 258, - 256, 255, 254, 253, 251, 250, 249, 248, 247, 246, - 245, 244, 243, 241, 240, 239, 238, 237, 236, 234, - 233, 232, 231, 230, 229, 228, 227, 226, 225, 223, - 222, 221, 220, 219, 218, 216, 215, 214, 213, 212, - 211, 210, 209, 208, 207, 206, 205, 204, 203, 202, - 201, 199, 198, 197, 196, 195, 193, 192, 191, 190, - 188, 187, 186, 185, 184, 183, 182, 181, 180, 179, + 302, 301, 300, 299, 298, 294, 293, 292, 291, 290, + 289, 288, 287, 286, 285, 281, 279, 278, 277, 276, + 275, 273, 271, 270, 269, 267, 266, 265, 264, 263, + 262, 260, 258, 257, 256, 255, 253, 252, 251, 250, + 249, 248, 247, 246, 245, 243, 242, 241, 240, 239, + 238, 236, 235, 234, 233, 232, 231, 229, 228, 227, + 226, 224, 223, 222, 221, 220, 219, 217, 216, 215, + 214, 213, 212, 211, 210, 209, 208, 207, 206, 205, + 204, 203, 202, 200, 199, 198, 197, 196, 194, 193, + 192, 191, 189, 188, 187, 186, 185, 184, 183, 182, - 178, 177, 176, 175, 174, 172, 171, 170, 169, 168, - 167, 166, 164, 163, 162, 161, 160, 159, 157, 156, - 155, 154, 153, 152, 151, 150, 149, 148, 147, 145, - 144, 143, 142, 141, 139, 138, 137, 136, 135, 134, - 133, 132, 131, 130, 129, 128, 127, 125, 124, 123, - 122, 121, 120, 119, 118, 117, 115, 113, 112, 111, - 109, 108, 107, 106, 105, 103, 102, 101, 100, 99, - 98, 97, 96, 95, 94, 93, 91, 90, 89, 88, - 87, 86, 85, 84, 83, 82, 81, 79, 78, 77, - 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, + 181, 180, 179, 178, 177, 176, 175, 173, 172, 171, + 170, 169, 168, 167, 165, 164, 163, 162, 161, 160, + 159, 157, 156, 155, 154, 153, 152, 151, 150, 149, + 148, 147, 145, 144, 143, 142, 141, 139, 138, 137, + 136, 135, 134, 133, 132, 131, 130, 129, 128, 127, + 125, 124, 123, 122, 121, 120, 119, 118, 117, 115, + 113, 112, 111, 109, 108, 107, 106, 105, 103, 102, + 100, 99, 98, 97, 96, 95, 94, 93, 91, 90, + 89, 88, 87, 86, 85, 84, 83, 82, 81, 79, + 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, - 66, 64, 63, 62, 61, 60, 59, 52, 51, 50, - 49, 43, 39, 38, 37, 36, 35, 34, 22, 16, - 15, 3, 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 + 68, 67, 66, 64, 63, 62, 61, 60, 59, 52, + 51, 50, 49, 43, 39, 38, 37, 36, 35, 34, + 22, 16, 15, 3, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517 } ; static yy_state_type yy_last_accepting_state; @@ -969,14 +971,13 @@ eat_c_comment() { } - // accept() is called below as each piece is pulled off and // accepted by the lexer; it increments the current column number. INLINE void accept() { col_number += yyleng; } -#line 981 "lex.yy.c" +#line 982 "lex.yy.c" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -1127,7 +1128,7 @@ YY_DECL register char *yy_cp = NULL, *yy_bp = NULL; register int yy_act; -#line 291 "lexer.lxx" +#line 290 "lexer.lxx" @@ -1138,7 +1139,7 @@ YY_DECL } -#line 1143 "lex.yy.c" +#line 1144 "lex.yy.c" if ( yy_init ) { @@ -1189,13 +1190,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 516 ) + if ( yy_current_state >= 518 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 623 ); + while ( yy_base[yy_current_state] != 625 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1223,7 +1224,7 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 301 "lexer.lxx" +#line 300 "lexer.lxx" { // New line. Save a copy of the line so we can print it out for the // benefit of the user in case we get an error. @@ -1240,7 +1241,7 @@ YY_RULE_SETUP YY_BREAK case 2: YY_RULE_SETUP -#line 315 "lexer.lxx" +#line 314 "lexer.lxx" { // Eat whitespace. accept(); @@ -1248,7 +1249,7 @@ YY_RULE_SETUP YY_BREAK case 3: YY_RULE_SETUP -#line 320 "lexer.lxx" +#line 319 "lexer.lxx" { // Eat C++-style comments. accept(); @@ -1256,7 +1257,7 @@ YY_RULE_SETUP YY_BREAK case 4: YY_RULE_SETUP -#line 325 "lexer.lxx" +#line 324 "lexer.lxx" { // Eat C-style comments. accept(); @@ -1265,7 +1266,7 @@ YY_RULE_SETUP YY_BREAK case 5: YY_RULE_SETUP -#line 331 "lexer.lxx" +#line 330 "lexer.lxx" { // Send curly braces as themselves. accept(); @@ -1274,7 +1275,7 @@ YY_RULE_SETUP YY_BREAK case 6: YY_RULE_SETUP -#line 339 "lexer.lxx" +#line 338 "lexer.lxx" { accept(); return BEZIERCURVE; @@ -1282,7 +1283,7 @@ YY_RULE_SETUP YY_BREAK case 7: YY_RULE_SETUP -#line 343 "lexer.lxx" +#line 342 "lexer.lxx" { accept(); return BFACE; @@ -1290,7 +1291,7 @@ YY_RULE_SETUP YY_BREAK case 8: YY_RULE_SETUP -#line 347 "lexer.lxx" +#line 346 "lexer.lxx" { accept(); return BILLBOARD; @@ -1298,7 +1299,7 @@ YY_RULE_SETUP YY_BREAK case 9: YY_RULE_SETUP -#line 351 "lexer.lxx" +#line 350 "lexer.lxx" { accept(); return BILLBOARDCENTER; @@ -1306,7 +1307,7 @@ YY_RULE_SETUP YY_BREAK case 10: YY_RULE_SETUP -#line 355 "lexer.lxx" +#line 354 "lexer.lxx" { accept(); return BUNDLE; @@ -1314,7 +1315,7 @@ YY_RULE_SETUP YY_BREAK case 11: YY_RULE_SETUP -#line 359 "lexer.lxx" +#line 358 "lexer.lxx" { accept(); return SCALAR; @@ -1322,7 +1323,7 @@ YY_RULE_SETUP YY_BREAK case 12: YY_RULE_SETUP -#line 363 "lexer.lxx" +#line 362 "lexer.lxx" { accept(); return CLOSED; @@ -1330,7 +1331,7 @@ YY_RULE_SETUP YY_BREAK case 13: YY_RULE_SETUP -#line 367 "lexer.lxx" +#line 366 "lexer.lxx" { accept(); return COLLIDE; @@ -1338,7 +1339,7 @@ YY_RULE_SETUP YY_BREAK case 14: YY_RULE_SETUP -#line 371 "lexer.lxx" +#line 370 "lexer.lxx" { accept(); return COMMENT; @@ -1346,7 +1347,7 @@ YY_RULE_SETUP YY_BREAK case 15: YY_RULE_SETUP -#line 375 "lexer.lxx" +#line 374 "lexer.lxx" { accept(); return COORDSYSTEM; @@ -1354,7 +1355,7 @@ YY_RULE_SETUP YY_BREAK case 16: YY_RULE_SETUP -#line 379 "lexer.lxx" +#line 378 "lexer.lxx" { accept(); return CV; @@ -1362,7 +1363,7 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 383 "lexer.lxx" +#line 382 "lexer.lxx" { accept(); return DART; @@ -1370,7 +1371,7 @@ YY_RULE_SETUP YY_BREAK case 18: YY_RULE_SETUP -#line 387 "lexer.lxx" +#line 386 "lexer.lxx" { accept(); return DNORMAL; @@ -1378,7 +1379,7 @@ YY_RULE_SETUP YY_BREAK case 19: YY_RULE_SETUP -#line 391 "lexer.lxx" +#line 390 "lexer.lxx" { accept(); return DRGBA; @@ -1386,7 +1387,7 @@ YY_RULE_SETUP YY_BREAK case 20: YY_RULE_SETUP -#line 395 "lexer.lxx" +#line 394 "lexer.lxx" { accept(); return DUV; @@ -1394,7 +1395,7 @@ YY_RULE_SETUP YY_BREAK case 21: YY_RULE_SETUP -#line 399 "lexer.lxx" +#line 398 "lexer.lxx" { accept(); return DXYZ; @@ -1402,7 +1403,7 @@ YY_RULE_SETUP YY_BREAK case 22: YY_RULE_SETUP -#line 403 "lexer.lxx" +#line 402 "lexer.lxx" { accept(); return DCS; @@ -1410,7 +1411,7 @@ YY_RULE_SETUP YY_BREAK case 23: YY_RULE_SETUP -#line 407 "lexer.lxx" +#line 406 "lexer.lxx" { accept(); return DISTANCE; @@ -1418,7 +1419,7 @@ YY_RULE_SETUP YY_BREAK case 24: YY_RULE_SETUP -#line 411 "lexer.lxx" +#line 410 "lexer.lxx" { accept(); return DTREF; @@ -1426,7 +1427,7 @@ YY_RULE_SETUP YY_BREAK case 25: YY_RULE_SETUP -#line 415 "lexer.lxx" +#line 414 "lexer.lxx" { accept(); return DYNAMICVERTEXPOOL; @@ -1434,7 +1435,7 @@ YY_RULE_SETUP YY_BREAK case 26: YY_RULE_SETUP -#line 419 "lexer.lxx" +#line 418 "lexer.lxx" { accept(); return EXTERNAL_FILE; @@ -1442,7 +1443,7 @@ YY_RULE_SETUP YY_BREAK case 27: YY_RULE_SETUP -#line 423 "lexer.lxx" +#line 422 "lexer.lxx" { accept(); return FLIGHT; @@ -1450,7 +1451,7 @@ YY_RULE_SETUP YY_BREAK case 28: YY_RULE_SETUP -#line 427 "lexer.lxx" +#line 426 "lexer.lxx" { accept(); return GROUP; @@ -1458,7 +1459,7 @@ YY_RULE_SETUP YY_BREAK case 29: YY_RULE_SETUP -#line 431 "lexer.lxx" +#line 430 "lexer.lxx" { accept(); return HIP; @@ -1466,7 +1467,7 @@ YY_RULE_SETUP YY_BREAK case 30: YY_RULE_SETUP -#line 435 "lexer.lxx" +#line 434 "lexer.lxx" { accept(); return INTANGENT; @@ -1474,7 +1475,7 @@ YY_RULE_SETUP YY_BREAK case 31: YY_RULE_SETUP -#line 439 "lexer.lxx" +#line 438 "lexer.lxx" { accept(); return JOINT; @@ -1482,7 +1483,7 @@ YY_RULE_SETUP YY_BREAK case 32: YY_RULE_SETUP -#line 443 "lexer.lxx" +#line 442 "lexer.lxx" { accept(); return KNOTS; @@ -1490,7 +1491,7 @@ YY_RULE_SETUP YY_BREAK case 33: YY_RULE_SETUP -#line 447 "lexer.lxx" +#line 446 "lexer.lxx" { accept(); return INCLUDE; @@ -1498,7 +1499,7 @@ YY_RULE_SETUP YY_BREAK case 34: YY_RULE_SETUP -#line 451 "lexer.lxx" +#line 450 "lexer.lxx" { accept(); return INSTANCE; @@ -1506,7 +1507,7 @@ YY_RULE_SETUP YY_BREAK case 35: YY_RULE_SETUP -#line 455 "lexer.lxx" +#line 454 "lexer.lxx" { accept(); return LOOP; @@ -1514,7 +1515,7 @@ YY_RULE_SETUP YY_BREAK case 36: YY_RULE_SETUP -#line 459 "lexer.lxx" +#line 458 "lexer.lxx" { accept(); return MATERIAL; @@ -1522,7 +1523,7 @@ YY_RULE_SETUP YY_BREAK case 37: YY_RULE_SETUP -#line 463 "lexer.lxx" +#line 462 "lexer.lxx" { accept(); return MATRIX3; @@ -1530,7 +1531,7 @@ YY_RULE_SETUP YY_BREAK case 38: YY_RULE_SETUP -#line 467 "lexer.lxx" +#line 466 "lexer.lxx" { accept(); return MATRIX4; @@ -1538,7 +1539,7 @@ YY_RULE_SETUP YY_BREAK case 39: YY_RULE_SETUP -#line 471 "lexer.lxx" +#line 470 "lexer.lxx" { accept(); return MODEL; @@ -1546,7 +1547,7 @@ YY_RULE_SETUP YY_BREAK case 40: YY_RULE_SETUP -#line 475 "lexer.lxx" +#line 474 "lexer.lxx" { accept(); return MREF; @@ -1554,7 +1555,7 @@ YY_RULE_SETUP YY_BREAK case 41: YY_RULE_SETUP -#line 479 "lexer.lxx" +#line 478 "lexer.lxx" { accept(); return NORMAL; @@ -1562,7 +1563,7 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -#line 483 "lexer.lxx" +#line 482 "lexer.lxx" { accept(); return NURBSCURVE; @@ -1570,7 +1571,7 @@ YY_RULE_SETUP YY_BREAK case 43: YY_RULE_SETUP -#line 487 "lexer.lxx" +#line 486 "lexer.lxx" { accept(); return NURBSSURFACE; @@ -1578,7 +1579,7 @@ YY_RULE_SETUP YY_BREAK case 44: YY_RULE_SETUP -#line 491 "lexer.lxx" +#line 490 "lexer.lxx" { accept(); return OBJECTTYPE; @@ -1586,7 +1587,7 @@ YY_RULE_SETUP YY_BREAK case 45: YY_RULE_SETUP -#line 495 "lexer.lxx" +#line 494 "lexer.lxx" { accept(); return ORDER; @@ -1594,7 +1595,7 @@ YY_RULE_SETUP YY_BREAK case 46: YY_RULE_SETUP -#line 499 "lexer.lxx" +#line 498 "lexer.lxx" { accept(); return OUTTANGENT; @@ -1602,7 +1603,7 @@ YY_RULE_SETUP YY_BREAK case 47: YY_RULE_SETUP -#line 503 "lexer.lxx" +#line 502 "lexer.lxx" { accept(); return POINTLIGHT; @@ -1610,7 +1611,7 @@ YY_RULE_SETUP YY_BREAK case 48: YY_RULE_SETUP -#line 507 "lexer.lxx" +#line 506 "lexer.lxx" { accept(); return POLYGON; @@ -1618,7 +1619,7 @@ YY_RULE_SETUP YY_BREAK case 49: YY_RULE_SETUP -#line 511 "lexer.lxx" +#line 510 "lexer.lxx" { accept(); return REF; @@ -1626,7 +1627,7 @@ YY_RULE_SETUP YY_BREAK case 50: YY_RULE_SETUP -#line 515 "lexer.lxx" +#line 514 "lexer.lxx" { accept(); return RGBA; @@ -1634,7 +1635,7 @@ YY_RULE_SETUP YY_BREAK case 51: YY_RULE_SETUP -#line 519 "lexer.lxx" +#line 518 "lexer.lxx" { accept(); return ROTATE; @@ -1642,7 +1643,7 @@ YY_RULE_SETUP YY_BREAK case 52: YY_RULE_SETUP -#line 523 "lexer.lxx" +#line 522 "lexer.lxx" { accept(); return ROTX; @@ -1650,7 +1651,7 @@ YY_RULE_SETUP YY_BREAK case 53: YY_RULE_SETUP -#line 527 "lexer.lxx" +#line 526 "lexer.lxx" { accept(); return ROTY; @@ -1658,7 +1659,7 @@ YY_RULE_SETUP YY_BREAK case 54: YY_RULE_SETUP -#line 531 "lexer.lxx" +#line 530 "lexer.lxx" { accept(); return ROTZ; @@ -1666,7 +1667,7 @@ YY_RULE_SETUP YY_BREAK case 55: YY_RULE_SETUP -#line 535 "lexer.lxx" +#line 534 "lexer.lxx" { accept(); return SANIM; @@ -1674,7 +1675,7 @@ YY_RULE_SETUP YY_BREAK case 56: YY_RULE_SETUP -#line 539 "lexer.lxx" +#line 538 "lexer.lxx" { accept(); return SCALAR; @@ -1682,7 +1683,7 @@ YY_RULE_SETUP YY_BREAK case 57: YY_RULE_SETUP -#line 543 "lexer.lxx" +#line 542 "lexer.lxx" { accept(); return SCALE; @@ -1690,7 +1691,7 @@ YY_RULE_SETUP YY_BREAK case 58: YY_RULE_SETUP -#line 547 "lexer.lxx" +#line 546 "lexer.lxx" { accept(); return SEQUENCE; @@ -1698,7 +1699,7 @@ YY_RULE_SETUP YY_BREAK case 59: YY_RULE_SETUP -#line 551 "lexer.lxx" +#line 550 "lexer.lxx" { accept(); return SHADING; @@ -1706,7 +1707,7 @@ YY_RULE_SETUP YY_BREAK case 60: YY_RULE_SETUP -#line 555 "lexer.lxx" +#line 554 "lexer.lxx" { accept(); return SWITCH; @@ -1714,7 +1715,7 @@ YY_RULE_SETUP YY_BREAK case 61: YY_RULE_SETUP -#line 559 "lexer.lxx" +#line 558 "lexer.lxx" { accept(); return SWITCHCONDITION; @@ -1722,7 +1723,7 @@ YY_RULE_SETUP YY_BREAK case 62: YY_RULE_SETUP -#line 563 "lexer.lxx" +#line 562 "lexer.lxx" { accept(); return TABLE; @@ -1730,7 +1731,7 @@ YY_RULE_SETUP YY_BREAK case 63: YY_RULE_SETUP -#line 567 "lexer.lxx" +#line 566 "lexer.lxx" { accept(); return TABLE_V; @@ -1738,79 +1739,79 @@ YY_RULE_SETUP YY_BREAK case 64: YY_RULE_SETUP -#line 571 "lexer.lxx" +#line 570 "lexer.lxx" +{ + accept(); + return TAG; +} + YY_BREAK +case 65: +YY_RULE_SETUP +#line 574 "lexer.lxx" { accept(); return TEXLIST; } YY_BREAK -case 65: +case 66: YY_RULE_SETUP -#line 575 "lexer.lxx" +#line 578 "lexer.lxx" { accept(); return TEXTURE; } YY_BREAK -case 66: +case 67: YY_RULE_SETUP -#line 579 "lexer.lxx" +#line 582 "lexer.lxx" { accept(); return TLENGTHS; } YY_BREAK -case 67: +case 68: YY_RULE_SETUP -#line 583 "lexer.lxx" +#line 586 "lexer.lxx" { accept(); return TRANSFORM; } YY_BREAK -case 68: +case 69: YY_RULE_SETUP -#line 587 "lexer.lxx" +#line 590 "lexer.lxx" { accept(); return TRANSLATE; } YY_BREAK -case 69: +case 70: YY_RULE_SETUP -#line 591 "lexer.lxx" +#line 594 "lexer.lxx" { accept(); return TREF; } YY_BREAK -case 70: +case 71: YY_RULE_SETUP -#line 595 "lexer.lxx" +#line 598 "lexer.lxx" { accept(); return TRIM; } YY_BREAK -case 71: +case 72: YY_RULE_SETUP -#line 599 "lexer.lxx" +#line 602 "lexer.lxx" { accept(); return TXT; } YY_BREAK -case 72: -YY_RULE_SETUP -#line 603 "lexer.lxx" -{ - accept(); - return UKNOTS; -} - YY_BREAK case 73: YY_RULE_SETUP -#line 607 "lexer.lxx" +#line 606 "lexer.lxx" { accept(); return UKNOTS; @@ -1818,23 +1819,23 @@ YY_RULE_SETUP YY_BREAK case 74: YY_RULE_SETUP -#line 611 "lexer.lxx" +#line 610 "lexer.lxx" +{ + accept(); + return UKNOTS; +} + YY_BREAK +case 75: +YY_RULE_SETUP +#line 614 "lexer.lxx" { accept(); return UV; } YY_BREAK -case 75: -YY_RULE_SETUP -#line 615 "lexer.lxx" -{ - accept(); - return VKNOTS; -} - YY_BREAK case 76: YY_RULE_SETUP -#line 619 "lexer.lxx" +#line 618 "lexer.lxx" { accept(); return VKNOTS; @@ -1842,55 +1843,63 @@ YY_RULE_SETUP YY_BREAK case 77: YY_RULE_SETUP -#line 623 "lexer.lxx" +#line 622 "lexer.lxx" +{ + accept(); + return VKNOTS; +} + YY_BREAK +case 78: +YY_RULE_SETUP +#line 626 "lexer.lxx" { accept(); return VERTEX; } YY_BREAK -case 78: +case 79: YY_RULE_SETUP -#line 627 "lexer.lxx" +#line 630 "lexer.lxx" { accept(); return VERTEXANIM; } YY_BREAK -case 79: +case 80: YY_RULE_SETUP -#line 631 "lexer.lxx" +#line 634 "lexer.lxx" { accept(); return VERTEXPOOL; } YY_BREAK -case 80: +case 81: YY_RULE_SETUP -#line 635 "lexer.lxx" +#line 638 "lexer.lxx" { accept(); return VERTEXREF; } YY_BREAK -case 81: +case 82: YY_RULE_SETUP -#line 639 "lexer.lxx" +#line 642 "lexer.lxx" { accept(); return XFMANIM; } YY_BREAK -case 82: +case 83: YY_RULE_SETUP -#line 643 "lexer.lxx" +#line 646 "lexer.lxx" { accept(); return XFMSANIM; } YY_BREAK -case 83: +case 84: YY_RULE_SETUP -#line 650 "lexer.lxx" +#line 653 "lexer.lxx" { // An integer or floating-point number. accept(); @@ -1899,31 +1908,31 @@ YY_RULE_SETUP return NUMBER; } YY_BREAK -case 84: +case 85: YY_RULE_SETUP -#line 658 "lexer.lxx" +#line 661 "lexer.lxx" { // A hexadecimal integer number. accept(); - eggyylval._number = strtoul(yytext+2, NULL, 16); + eggyylval._ulong = strtoul(yytext+2, NULL, 16); eggyylval._string = yytext; - return NUMBER; -} - YY_BREAK -case 85: -YY_RULE_SETUP -#line 666 "lexer.lxx" -{ - // A binary integer number. - accept(); - eggyylval._number = strtoul(yytext+2, NULL, 2); - eggyylval._string = yytext; - return NUMBER; + return ULONG; } YY_BREAK case 86: YY_RULE_SETUP -#line 674 "lexer.lxx" +#line 669 "lexer.lxx" +{ + // A binary integer number. + accept(); + eggyylval._ulong = strtoul(yytext+2, NULL, 2); + eggyylval._string = yytext; + return ULONG; +} + YY_BREAK +case 87: +YY_RULE_SETUP +#line 677 "lexer.lxx" { // not-a-number. These sometimes show up in egg files accidentally. accept(); @@ -1933,9 +1942,9 @@ YY_RULE_SETUP return NUMBER; } YY_BREAK -case 87: +case 88: YY_RULE_SETUP -#line 683 "lexer.lxx" +#line 686 "lexer.lxx" { // infinity. As above. accept(); @@ -1944,9 +1953,9 @@ YY_RULE_SETUP return NUMBER; } YY_BREAK -case 88: +case 89: YY_RULE_SETUP -#line 691 "lexer.lxx" +#line 694 "lexer.lxx" { // minus infinity. As above. accept(); @@ -1955,9 +1964,9 @@ YY_RULE_SETUP return NUMBER; } YY_BREAK -case 89: +case 90: YY_RULE_SETUP -#line 700 "lexer.lxx" +#line 703 "lexer.lxx" { // Quoted string. accept(); @@ -1965,9 +1974,9 @@ YY_RULE_SETUP return STRING; } YY_BREAK -case 90: +case 91: YY_RULE_SETUP -#line 707 "lexer.lxx" +#line 710 "lexer.lxx" { // Unquoted string. accept(); @@ -1975,12 +1984,12 @@ YY_RULE_SETUP return STRING; } YY_BREAK -case 91: +case 92: YY_RULE_SETUP -#line 713 "lexer.lxx" +#line 716 "lexer.lxx" ECHO; YY_BREAK -#line 1985 "lex.yy.c" +#line 1994 "lex.yy.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -2272,7 +2281,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 >= 518 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -2307,11 +2316,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 >= 518 ) 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 == 517); return yy_is_jam ? 0 : yy_current_state; } @@ -2861,4 +2870,4 @@ int main() return 0; } #endif -#line 713 "lexer.lxx" +#line 716 "lexer.lxx" diff --git a/panda/src/egg/lexer.lxx b/panda/src/egg/lexer.lxx index bea8b9782e..60b33792da 100644 --- a/panda/src/egg/lexer.lxx +++ b/panda/src/egg/lexer.lxx @@ -567,6 +567,10 @@ NUMERIC ([+-]?(([0-9]+[.]?)|([0-9]*[.][0-9]+))([eE][+-]?[0-9]+)?) accept(); return TABLE_V; } +"" { + accept(); + return TAG; +} "" { accept(); return TEXLIST; diff --git a/panda/src/egg/parser.cxx.prebuilt b/panda/src/egg/parser.cxx.prebuilt index 7e5e83182a..ba94390d9b 100644 --- a/panda/src/egg/parser.cxx.prebuilt +++ b/panda/src/egg/parser.cxx.prebuilt @@ -11,85 +11,87 @@ #define yydebug eggyydebug #define yynerrs eggyynerrs # define NUMBER 257 -# define STRING 258 -# define BEZIERCURVE 259 -# define BFACE 260 -# define BILLBOARD 261 -# define BILLBOARDCENTER 262 -# define BUNDLE 263 -# define CLOSED 264 -# define COLLIDE 265 -# define COMMENT 266 -# define COORDSYSTEM 267 -# define CV 268 -# define DART 269 -# define DNORMAL 270 -# define DRGBA 271 -# define DUV 272 -# define DXYZ 273 -# define DCS 274 -# define DISTANCE 275 -# define DTREF 276 -# define DYNAMICVERTEXPOOL 277 -# define EXTERNAL_FILE 278 -# define FLIGHT 279 -# define GROUP 280 -# define HIP 281 -# define INTANGENT 282 -# define JOINT 283 -# define KNOTS 284 -# define INCLUDE 285 -# define INSTANCE 286 -# define LOOP 287 -# define MATERIAL 288 -# define MATRIX3 289 -# define MATRIX4 290 -# define MODEL 291 -# define MREF 292 -# define NORMAL 293 -# define NURBSCURVE 294 -# define NURBSSURFACE 295 -# define OBJECTTYPE 296 -# define ORDER 297 -# define OUTTANGENT 298 -# define POINTLIGHT 299 -# define POLYGON 300 -# define REF 301 -# define RGBA 302 -# define ROTATE 303 -# define ROTX 304 -# define ROTY 305 -# define ROTZ 306 -# define SANIM 307 -# define SCALAR 308 -# define SCALE 309 -# define SEQUENCE 310 -# define SHADING 311 -# define SWITCH 312 -# define SWITCHCONDITION 313 -# define TABLE 314 -# define TABLE_V 315 -# define TEXLIST 316 -# define TEXTURE 317 -# define TLENGTHS 318 -# define TRANSFORM 319 -# define TRANSLATE 320 -# define TREF 321 -# define TRIM 322 -# define TXT 323 -# define UKNOTS 324 -# define UV 325 -# define VKNOTS 326 -# define VERTEX 327 -# define VERTEXANIM 328 -# define VERTEXPOOL 329 -# define VERTEXREF 330 -# define XFMANIM 331 -# define XFMSANIM 332 -# define START_EGG 333 -# define START_GROUP_BODY 334 -# define START_TEXTURE_BODY 335 -# define START_PRIMITIVE_BODY 336 +# define ULONG 258 +# define STRING 259 +# define BEZIERCURVE 260 +# define BFACE 261 +# define BILLBOARD 262 +# define BILLBOARDCENTER 263 +# define BUNDLE 264 +# define CLOSED 265 +# define COLLIDE 266 +# define COMMENT 267 +# define COORDSYSTEM 268 +# define CV 269 +# define DART 270 +# define DNORMAL 271 +# define DRGBA 272 +# define DUV 273 +# define DXYZ 274 +# define DCS 275 +# define DISTANCE 276 +# define DTREF 277 +# define DYNAMICVERTEXPOOL 278 +# define EXTERNAL_FILE 279 +# define FLIGHT 280 +# define GROUP 281 +# define HIP 282 +# define INTANGENT 283 +# define JOINT 284 +# define KNOTS 285 +# define INCLUDE 286 +# define INSTANCE 287 +# define LOOP 288 +# define MATERIAL 289 +# define MATRIX3 290 +# define MATRIX4 291 +# define MODEL 292 +# define MREF 293 +# define NORMAL 294 +# define NURBSCURVE 295 +# define NURBSSURFACE 296 +# define OBJECTTYPE 297 +# define ORDER 298 +# define OUTTANGENT 299 +# define POINTLIGHT 300 +# define POLYGON 301 +# define REF 302 +# define RGBA 303 +# define ROTATE 304 +# define ROTX 305 +# define ROTY 306 +# define ROTZ 307 +# define SANIM 308 +# define SCALAR 309 +# define SCALE 310 +# define SEQUENCE 311 +# define SHADING 312 +# define SWITCH 313 +# define SWITCHCONDITION 314 +# define TABLE 315 +# define TABLE_V 316 +# define TAG 317 +# define TEXLIST 318 +# define TEXTURE 319 +# define TLENGTHS 320 +# define TRANSFORM 321 +# define TRANSLATE 322 +# define TREF 323 +# define TRIM 324 +# define TXT 325 +# define UKNOTS 326 +# define UV 327 +# define VKNOTS 328 +# define VERTEX 329 +# define VERTEXANIM 330 +# define VERTEXPOOL 331 +# define VERTEXREF 332 +# define XFMANIM 333 +# define XFMSANIM 334 +# define START_EGG 335 +# define START_GROUP_BODY 336 +# define START_TEXTURE_BODY 337 +# define START_PRIMITIVE_BODY 338 #line 6 "parser.yxx" @@ -203,12 +205,12 @@ egg_cleanup_parser() { -#define YYFINAL 672 +#define YYFINAL 683 #define YYFLAG -32768 -#define YYNTBASE 85 +#define YYNTBASE 87 /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */ -#define YYTRANSLATE(x) ((unsigned)(x) <= 336 ? yytranslate[x] : 194) +#define YYTRANSLATE(x) ((unsigned)(x) <= 338 ? yytranslate[x] : 196) /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */ static const char yytranslate[] = @@ -225,7 +227,7 @@ static const char yytranslate[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 83, 2, 84, 2, 2, 2, 2, + 2, 2, 2, 85, 2, 86, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -246,7 +248,7 @@ static const char yytranslate[] = 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82 + 76, 77, 78, 79, 80, 81, 82, 83, 84 }; #if YYDEBUG @@ -259,129 +261,132 @@ static const short yyprhs[] = 127, 128, 135, 137, 140, 144, 149, 155, 161, 167, 176, 185, 188, 196, 204, 208, 217, 226, 231, 241, 251, 252, 259, 260, 267, 268, 275, 277, 284, 290, - 298, 306, 312, 318, 324, 330, 336, 342, 348, 351, - 354, 357, 360, 362, 364, 367, 368, 374, 376, 379, - 382, 385, 388, 391, 394, 397, 404, 409, 414, 419, - 427, 434, 439, 444, 446, 463, 464, 470, 472, 475, - 478, 481, 484, 490, 495, 501, 506, 508, 518, 528, - 530, 537, 542, 554, 567, 568, 575, 576, 583, 584, - 591, 592, 599, 601, 607, 613, 619, 622, 628, 634, - 640, 647, 649, 655, 661, 667, 670, 676, 682, 688, - 694, 700, 706, 709, 715, 722, 724, 730, 736, 742, - 745, 751, 757, 763, 769, 775, 782, 784, 786, 788, - 792, 801, 810, 815, 825, 835, 837, 846, 849, 851, - 853, 855, 861, 863, 866, 868, 870, 871, 878, 879, - 886, 888, 891, 894, 897, 900, 903, 904, 911, 913, - 920, 926, 927, 934, 936, 943, 949, 950, 957, 959, - 966, 969, 971, 974, 976, 979, 981, 983, 985, 987, - 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, - 1009, 1012, 1014, 1016, 1018, 1020 + 298, 306, 312, 318, 324, 330, 336, 342, 348, 355, + 361, 364, 367, 370, 373, 375, 377, 380, 381, 387, + 389, 392, 395, 398, 401, 404, 407, 410, 417, 422, + 427, 432, 440, 447, 452, 457, 459, 476, 477, 483, + 485, 488, 491, 494, 497, 503, 508, 514, 519, 521, + 531, 541, 543, 550, 555, 567, 580, 581, 588, 589, + 596, 597, 604, 605, 612, 614, 620, 626, 632, 635, + 641, 647, 653, 660, 662, 668, 674, 680, 683, 689, + 695, 701, 707, 713, 719, 722, 728, 735, 737, 743, + 749, 755, 758, 764, 770, 776, 782, 788, 795, 797, + 799, 801, 805, 814, 823, 828, 838, 848, 850, 859, + 862, 864, 866, 868, 874, 876, 879, 881, 883, 884, + 891, 892, 899, 901, 904, 907, 910, 913, 916, 917, + 924, 926, 933, 939, 940, 947, 949, 956, 962, 963, + 970, 972, 979, 982, 984, 987, 989, 992, 994, 996, + 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, + 1018, 1020, 1022, 1024, 1027, 1029, 1031, 1033, 1035, 1037, + 1039, 1041 }; static const short yyrhs[] = { - 79, 86, 0, 80, 113, 0, 81, 92, 0, 82, - 147, 0, 193, 0, 86, 87, 0, 88, 0, 89, - 0, 90, 0, 93, 0, 96, 0, 97, 0, 107, - 0, 109, 0, 111, 0, 139, 0, 141, 0, 143, - 0, 145, 0, 164, 0, 13, 83, 185, 84, 0, - 12, 184, 83, 188, 84, 0, 0, 63, 183, 83, - 185, 91, 92, 84, 0, 193, 0, 92, 54, 183, - 83, 191, 84, 0, 92, 127, 0, 0, 34, 183, - 83, 94, 95, 84, 0, 193, 0, 95, 54, 183, - 83, 191, 84, 0, 24, 184, 83, 185, 84, 0, - 187, 24, 184, 83, 185, 84, 0, 0, 75, 183, - 98, 83, 99, 84, 0, 193, 0, 99, 100, 0, - 0, 73, 101, 83, 103, 84, 0, 0, 73, 192, - 102, 83, 103, 84, 0, 190, 0, 190, 190, 0, - 190, 190, 190, 0, 190, 190, 190, 190, 0, 103, - 71, 83, 104, 84, 0, 103, 39, 83, 105, 84, - 0, 103, 48, 83, 106, 84, 0, 103, 19, 187, - 83, 190, 190, 190, 84, 0, 103, 19, 83, 187, - 190, 190, 190, 84, 0, 190, 190, 0, 104, 18, - 187, 83, 190, 190, 84, 0, 104, 18, 83, 187, - 190, 190, 84, 0, 190, 190, 190, 0, 105, 16, - 187, 83, 190, 190, 190, 84, 0, 105, 16, 83, - 187, 190, 190, 190, 84, 0, 190, 190, 190, 190, - 0, 106, 17, 187, 83, 190, 190, 190, 190, 84, - 0, 106, 17, 83, 187, 190, 190, 190, 190, 84, - 0, 0, 26, 184, 108, 83, 113, 84, 0, 0, - 29, 184, 110, 83, 113, 84, 0, 0, 32, 184, - 112, 83, 113, 84, 0, 193, 0, 113, 54, 183, - 83, 191, 84, 0, 113, 7, 83, 187, 84, 0, - 113, 8, 83, 190, 190, 190, 84, 0, 113, 11, - 184, 83, 114, 115, 84, 0, 113, 20, 83, 192, - 84, 0, 113, 15, 83, 192, 84, 0, 113, 15, - 83, 4, 84, 0, 113, 58, 83, 192, 84, 0, - 113, 42, 83, 185, 84, 0, 113, 37, 83, 192, - 84, 0, 113, 62, 83, 192, 84, 0, 113, 116, - 0, 113, 135, 0, 113, 137, 0, 113, 87, 0, - 187, 0, 193, 0, 115, 187, 0, 0, 65, 117, - 83, 118, 84, 0, 193, 0, 118, 119, 0, 118, - 120, 0, 118, 121, 0, 118, 122, 0, 118, 123, - 0, 118, 124, 0, 118, 125, 0, 66, 83, 190, - 190, 190, 84, 0, 50, 83, 190, 84, 0, 51, - 83, 190, 84, 0, 52, 83, 190, 84, 0, 49, - 83, 190, 190, 190, 190, 84, 0, 55, 83, 190, - 190, 190, 84, 0, 55, 83, 190, 84, 0, 36, - 83, 126, 84, 0, 193, 0, 190, 190, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 0, 0, 65, 128, 83, 129, 84, 0, - 193, 0, 129, 133, 0, 129, 130, 0, 129, 131, - 0, 129, 132, 0, 66, 83, 190, 190, 84, 0, - 49, 83, 190, 84, 0, 55, 83, 190, 190, 84, - 0, 35, 83, 134, 84, 0, 193, 0, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 0, 76, 83, - 178, 136, 47, 83, 182, 84, 84, 0, 193, 0, - 136, 54, 183, 83, 191, 84, 0, 59, 83, 138, - 84, 0, 21, 83, 190, 190, 73, 83, 190, 190, - 190, 84, 84, 0, 21, 83, 190, 190, 190, 73, - 83, 190, 190, 190, 84, 84, 0, 0, 46, 184, - 140, 83, 147, 84, 0, 0, 45, 184, 142, 83, - 147, 84, 0, 0, 41, 184, 144, 83, 148, 84, - 0, 0, 40, 184, 146, 83, 149, 84, 0, 193, - 0, 147, 67, 83, 150, 84, 0, 147, 63, 83, - 151, 84, 0, 147, 38, 83, 152, 84, 0, 147, - 156, 0, 147, 39, 83, 153, 84, 0, 147, 48, - 83, 154, 84, 0, 147, 6, 83, 155, 84, 0, - 147, 54, 183, 83, 191, 84, 0, 193, 0, 148, - 67, 83, 150, 84, 0, 148, 63, 83, 151, 84, - 0, 148, 38, 83, 152, 84, 0, 148, 156, 0, - 148, 39, 83, 153, 84, 0, 148, 48, 83, 154, - 84, 0, 148, 6, 83, 155, 84, 0, 148, 43, - 83, 157, 84, 0, 148, 70, 83, 158, 84, 0, - 148, 72, 83, 159, 84, 0, 148, 145, 0, 148, - 68, 83, 160, 84, 0, 148, 54, 183, 83, 191, - 84, 0, 193, 0, 149, 67, 83, 150, 84, 0, - 149, 63, 83, 151, 84, 0, 149, 38, 83, 152, - 84, 0, 149, 156, 0, 149, 39, 83, 153, 84, - 0, 149, 48, 83, 154, 84, 0, 149, 6, 83, - 155, 84, 0, 149, 43, 83, 162, 84, 0, 149, - 30, 83, 163, 84, 0, 149, 54, 183, 83, 191, - 84, 0, 180, 0, 183, 0, 181, 0, 190, 190, - 190, 0, 153, 16, 187, 83, 190, 190, 190, 84, - 0, 153, 16, 83, 187, 190, 190, 190, 84, 0, - 190, 190, 190, 190, 0, 154, 17, 187, 83, 190, - 190, 190, 190, 84, 0, 154, 17, 83, 187, 190, - 190, 190, 190, 84, 0, 192, 0, 76, 83, 178, - 47, 83, 182, 84, 84, 0, 192, 192, 0, 179, - 0, 179, 0, 193, 0, 160, 33, 83, 161, 84, - 0, 193, 0, 161, 145, 0, 192, 0, 179, 0, - 0, 60, 184, 165, 83, 168, 84, 0, 0, 9, - 184, 167, 83, 168, 84, 0, 193, 0, 168, 164, - 0, 168, 166, 0, 168, 169, 0, 168, 172, 0, - 168, 175, 0, 0, 53, 184, 170, 83, 171, 84, - 0, 193, 0, 171, 54, 183, 83, 191, 84, 0, - 171, 61, 83, 179, 84, 0, 0, 77, 184, 173, - 83, 174, 84, 0, 193, 0, 174, 54, 183, 83, - 191, 84, 0, 174, 61, 83, 179, 84, 0, 0, - 78, 184, 176, 83, 177, 84, 0, 193, 0, 177, - 54, 183, 83, 191, 84, 0, 177, 169, 0, 193, - 0, 178, 192, 0, 193, 0, 179, 190, 0, 183, - 0, 183, 0, 183, 0, 193, 0, 187, 0, 186, - 0, 193, 0, 187, 0, 193, 0, 187, 0, 3, - 0, 4, 0, 193, 0, 189, 0, 187, 0, 189, - 187, 0, 3, 0, 3, 0, 4, 0, 3, 0, - 0 + 81, 88, 0, 82, 115, 0, 83, 94, 0, 84, + 149, 0, 195, 0, 88, 89, 0, 90, 0, 91, + 0, 92, 0, 95, 0, 98, 0, 99, 0, 109, + 0, 111, 0, 113, 0, 141, 0, 143, 0, 145, + 0, 147, 0, 166, 0, 14, 85, 187, 86, 0, + 13, 186, 85, 190, 86, 0, 0, 65, 185, 85, + 187, 93, 94, 86, 0, 195, 0, 94, 55, 185, + 85, 193, 86, 0, 94, 129, 0, 0, 35, 185, + 85, 96, 97, 86, 0, 195, 0, 97, 55, 185, + 85, 193, 86, 0, 25, 186, 85, 187, 86, 0, + 189, 25, 186, 85, 187, 86, 0, 0, 77, 185, + 100, 85, 101, 86, 0, 195, 0, 101, 102, 0, + 0, 75, 103, 85, 105, 86, 0, 0, 75, 194, + 104, 85, 105, 86, 0, 192, 0, 192, 192, 0, + 192, 192, 192, 0, 192, 192, 192, 192, 0, 105, + 73, 85, 106, 86, 0, 105, 40, 85, 107, 86, + 0, 105, 49, 85, 108, 86, 0, 105, 20, 189, + 85, 192, 192, 192, 86, 0, 105, 20, 85, 189, + 192, 192, 192, 86, 0, 192, 192, 0, 106, 19, + 189, 85, 192, 192, 86, 0, 106, 19, 85, 189, + 192, 192, 86, 0, 192, 192, 192, 0, 107, 17, + 189, 85, 192, 192, 192, 86, 0, 107, 17, 85, + 189, 192, 192, 192, 86, 0, 192, 192, 192, 192, + 0, 108, 18, 189, 85, 192, 192, 192, 192, 86, + 0, 108, 18, 85, 189, 192, 192, 192, 192, 86, + 0, 0, 27, 186, 110, 85, 115, 86, 0, 0, + 30, 186, 112, 85, 115, 86, 0, 0, 33, 186, + 114, 85, 115, 86, 0, 195, 0, 115, 55, 185, + 85, 193, 86, 0, 115, 8, 85, 189, 86, 0, + 115, 9, 85, 192, 192, 192, 86, 0, 115, 12, + 186, 85, 116, 117, 86, 0, 115, 21, 85, 194, + 86, 0, 115, 21, 85, 5, 86, 0, 115, 16, + 85, 194, 86, 0, 115, 16, 85, 5, 86, 0, + 115, 59, 85, 194, 86, 0, 115, 43, 85, 187, + 86, 0, 115, 38, 85, 194, 86, 0, 115, 63, + 186, 85, 190, 86, 0, 115, 64, 85, 194, 86, + 0, 115, 118, 0, 115, 137, 0, 115, 139, 0, + 115, 89, 0, 189, 0, 195, 0, 117, 189, 0, + 0, 67, 119, 85, 120, 86, 0, 195, 0, 120, + 121, 0, 120, 122, 0, 120, 123, 0, 120, 124, + 0, 120, 125, 0, 120, 126, 0, 120, 127, 0, + 68, 85, 192, 192, 192, 86, 0, 51, 85, 192, + 86, 0, 52, 85, 192, 86, 0, 53, 85, 192, + 86, 0, 50, 85, 192, 192, 192, 192, 86, 0, + 56, 85, 192, 192, 192, 86, 0, 56, 85, 192, + 86, 0, 37, 85, 128, 86, 0, 195, 0, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 0, 0, 67, 130, 85, + 131, 86, 0, 195, 0, 131, 135, 0, 131, 132, + 0, 131, 133, 0, 131, 134, 0, 68, 85, 192, + 192, 86, 0, 50, 85, 192, 86, 0, 56, 85, + 192, 192, 86, 0, 36, 85, 136, 86, 0, 195, + 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 0, 78, 85, 180, 138, 48, 85, 184, 86, 86, + 0, 195, 0, 138, 55, 185, 85, 193, 86, 0, + 60, 85, 140, 86, 0, 22, 85, 192, 192, 75, + 85, 192, 192, 192, 86, 86, 0, 22, 85, 192, + 192, 192, 75, 85, 192, 192, 192, 86, 86, 0, + 0, 47, 186, 142, 85, 149, 86, 0, 0, 46, + 186, 144, 85, 149, 86, 0, 0, 42, 186, 146, + 85, 150, 86, 0, 0, 41, 186, 148, 85, 151, + 86, 0, 195, 0, 149, 69, 85, 152, 86, 0, + 149, 65, 85, 153, 86, 0, 149, 39, 85, 154, + 86, 0, 149, 158, 0, 149, 40, 85, 155, 86, + 0, 149, 49, 85, 156, 86, 0, 149, 7, 85, + 157, 86, 0, 149, 55, 185, 85, 193, 86, 0, + 195, 0, 150, 69, 85, 152, 86, 0, 150, 65, + 85, 153, 86, 0, 150, 39, 85, 154, 86, 0, + 150, 158, 0, 150, 40, 85, 155, 86, 0, 150, + 49, 85, 156, 86, 0, 150, 7, 85, 157, 86, + 0, 150, 44, 85, 159, 86, 0, 150, 72, 85, + 160, 86, 0, 150, 74, 85, 161, 86, 0, 150, + 147, 0, 150, 70, 85, 162, 86, 0, 150, 55, + 185, 85, 193, 86, 0, 195, 0, 151, 69, 85, + 152, 86, 0, 151, 65, 85, 153, 86, 0, 151, + 39, 85, 154, 86, 0, 151, 158, 0, 151, 40, + 85, 155, 86, 0, 151, 49, 85, 156, 86, 0, + 151, 7, 85, 157, 86, 0, 151, 44, 85, 164, + 86, 0, 151, 31, 85, 165, 86, 0, 151, 55, + 185, 85, 193, 86, 0, 182, 0, 185, 0, 183, + 0, 192, 192, 192, 0, 155, 17, 189, 85, 192, + 192, 192, 86, 0, 155, 17, 85, 189, 192, 192, + 192, 86, 0, 192, 192, 192, 192, 0, 156, 18, + 189, 85, 192, 192, 192, 192, 86, 0, 156, 18, + 85, 189, 192, 192, 192, 192, 86, 0, 194, 0, + 78, 85, 180, 48, 85, 184, 86, 86, 0, 194, + 194, 0, 181, 0, 181, 0, 195, 0, 162, 34, + 85, 163, 86, 0, 195, 0, 163, 147, 0, 194, + 0, 181, 0, 0, 61, 186, 167, 85, 170, 86, + 0, 0, 10, 186, 169, 85, 170, 86, 0, 195, + 0, 170, 166, 0, 170, 168, 0, 170, 171, 0, + 170, 174, 0, 170, 177, 0, 0, 54, 186, 172, + 85, 173, 86, 0, 195, 0, 173, 55, 185, 85, + 193, 86, 0, 173, 62, 85, 181, 86, 0, 0, + 79, 186, 175, 85, 176, 86, 0, 195, 0, 176, + 55, 185, 85, 193, 86, 0, 176, 62, 85, 181, + 86, 0, 0, 80, 186, 178, 85, 179, 86, 0, + 195, 0, 179, 55, 185, 85, 193, 86, 0, 179, + 171, 0, 195, 0, 180, 194, 0, 195, 0, 181, + 192, 0, 185, 0, 185, 0, 185, 0, 195, 0, + 189, 0, 188, 0, 195, 0, 189, 0, 195, 0, + 189, 0, 3, 0, 4, 0, 5, 0, 195, 0, + 191, 0, 189, 0, 191, 189, 0, 3, 0, 4, + 0, 3, 0, 4, 0, 5, 0, 3, 0, 4, + 0, 0 }; #endif @@ -390,30 +395,31 @@ static const short yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const short yyrline[] = { - 0, 178, 180, 181, 182, 192, 194, 208, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, - 222, 232, 255, 269, 269, 297, 299, 403, 413, 413, - 440, 442, 536, 544, 563, 563, 591, 593, 603, 603, - 615, 615, 660, 665, 669, 673, 677, 678, 679, 680, - 688, 706, 711, 719, 736, 741, 749, 766, 771, 779, - 796, 796, 816, 816, 837, 837, 858, 860, 913, 925, - 930, 937, 943, 950, 963, 969, 975, 981, 987, 988, - 989, 990, 1003, 1025, 1027, 1048, 1048, 1064, 1066, 1067, - 1068, 1069, 1070, 1071, 1072, 1075, 1081, 1087, 1093, 1099, - 1105, 1109, 1115, 1119, 1121, 1142, 1142, 1161, 1163, 1164, - 1165, 1166, 1169, 1175, 1181, 1187, 1190, 1192, 1210, 1243, - 1248, 1272, 1284, 1290, 1306, 1306, 1325, 1325, 1344, 1344, - 1363, 1363, 1383, 1385, 1386, 1387, 1388, 1389, 1390, 1391, - 1392, 1440, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, - 1450, 1451, 1452, 1458, 1459, 1512, 1514, 1515, 1516, 1517, - 1518, 1519, 1520, 1521, 1522, 1523, 1581, 1598, 1638, 1655, - 1660, 1668, 1685, 1690, 1698, 1715, 1731, 1762, 1780, 1800, - 1820, 1826, 1836, 1843, 1861, 1877, 1898, 1898, 1920, 1920, - 1942, 1944, 1948, 1952, 1956, 1960, 1974, 1974, 1995, 1997, - 2009, 2022, 2022, 2043, 2045, 2062, 2075, 2075, 2096, 2098, - 2113, 2127, 2132, 2145, 2150, 2163, 2184, 2205, 2227, 2233, - 2244, 2256, 2262, 2272, 2277, 2290, 2295, 2307, 2312, 2327, - 2332, 2345, 2356, 2362, 2377, 2388 + 0, 179, 181, 182, 183, 193, 195, 209, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 233, 256, 270, 270, 298, 300, 407, 417, 417, + 444, 446, 540, 548, 567, 567, 595, 597, 607, 607, + 619, 619, 664, 669, 673, 677, 681, 682, 683, 684, + 692, 710, 715, 723, 740, 745, 753, 770, 775, 783, + 800, 800, 820, 820, 841, 841, 862, 864, 918, 930, + 935, 942, 948, 961, 968, 981, 987, 993, 999, 1004, + 1010, 1011, 1012, 1013, 1026, 1048, 1050, 1071, 1071, 1087, + 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1098, 1104, 1110, + 1116, 1122, 1128, 1132, 1138, 1142, 1144, 1165, 1165, 1184, + 1186, 1187, 1188, 1189, 1192, 1198, 1204, 1210, 1213, 1215, + 1233, 1266, 1271, 1295, 1307, 1313, 1329, 1329, 1348, 1348, + 1367, 1367, 1386, 1386, 1406, 1408, 1409, 1410, 1411, 1412, + 1413, 1414, 1415, 1463, 1465, 1466, 1467, 1468, 1469, 1470, + 1471, 1472, 1473, 1474, 1475, 1481, 1482, 1535, 1537, 1538, + 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1604, 1621, + 1661, 1678, 1683, 1691, 1708, 1713, 1721, 1738, 1754, 1785, + 1803, 1823, 1843, 1849, 1859, 1866, 1884, 1900, 1921, 1921, + 1943, 1943, 1965, 1967, 1971, 1975, 1979, 1983, 1997, 1997, + 2018, 2020, 2032, 2045, 2045, 2066, 2068, 2085, 2098, 2098, + 2119, 2121, 2136, 2150, 2155, 2168, 2173, 2186, 2207, 2228, + 2250, 2256, 2267, 2279, 2285, 2295, 2300, 2313, 2318, 2322, + 2334, 2339, 2354, 2359, 2372, 2374, 2388, 2395, 2401, 2417, + 2426, 2432 }; #endif @@ -423,8 +429,8 @@ static const short yyrline[] = /* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */ static const char *const yytname[] = { - "$", "error", "$undefined.", "NUMBER", "STRING", "BEZIERCURVE", "BFACE", - "BILLBOARD", "BILLBOARDCENTER", "BUNDLE", "CLOSED", "COLLIDE", + "$", "error", "$undefined.", "NUMBER", "ULONG", "STRING", "BEZIERCURVE", + "BFACE", "BILLBOARD", "BILLBOARDCENTER", "BUNDLE", "CLOSED", "COLLIDE", "COMMENT", "COORDSYSTEM", "CV", "DART", "DNORMAL", "DRGBA", "DUV", "DXYZ", "DCS", "DISTANCE", "DTREF", "DYNAMICVERTEXPOOL", "EXTERNAL_FILE", "FLIGHT", "GROUP", "HIP", "INTANGENT", "JOINT", @@ -433,8 +439,8 @@ static const char *const yytname[] = "OBJECTTYPE", "ORDER", "OUTTANGENT", "POINTLIGHT", "POLYGON", "REF", "RGBA", "ROTATE", "ROTX", "ROTY", "ROTZ", "SANIM", "SCALAR", "SCALE", "SEQUENCE", "SHADING", "SWITCH", "SWITCHCONDITION", "TABLE", "TABLE_V", - "TEXLIST", "TEXTURE", "TLENGTHS", "TRANSFORM", "TRANSLATE", "TREF", - "TRIM", "TXT", "UKNOTS", "UV", "VKNOTS", "VERTEX", "VERTEXANIM", + "TAG", "TEXLIST", "TEXTURE", "TLENGTHS", "TRANSFORM", "TRANSLATE", + "TREF", "TRIM", "TXT", "UKNOTS", "UV", "VKNOTS", "VERTEX", "VERTEXANIM", "VERTEXPOOL", "VERTEXREF", "XFMANIM", "XFMSANIM", "START_EGG", "START_GROUP_BODY", "START_TEXTURE_BODY", "START_PRIMITIVE_BODY", "'{'", "'}'", "grammar", "egg", "node", "coordsystem", "comment", "texture", @@ -469,30 +475,31 @@ static const char *const yytname[] = /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const short yyr1[] = { - 0, 85, 85, 85, 85, 86, 86, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 88, 89, 91, 90, 92, 92, 92, 94, 93, - 95, 95, 96, 96, 98, 97, 99, 99, 101, 100, - 102, 100, 103, 103, 103, 103, 103, 103, 103, 103, - 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, - 108, 107, 110, 109, 112, 111, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 114, 115, 115, 117, 116, 118, 118, 118, - 118, 118, 118, 118, 118, 119, 120, 121, 122, 123, - 124, 124, 125, 126, 126, 128, 127, 129, 129, 129, - 129, 129, 130, 131, 132, 133, 134, 134, 135, 136, - 136, 137, 138, 138, 140, 139, 142, 141, 144, 143, - 146, 145, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 150, 151, 152, 153, - 153, 153, 154, 154, 154, 155, 156, 157, 158, 159, - 160, 160, 161, 161, 162, 163, 165, 164, 167, 166, - 168, 168, 168, 168, 168, 168, 170, 169, 171, 171, - 171, 173, 172, 174, 174, 174, 176, 175, 177, 177, - 177, 178, 178, 179, 179, 180, 181, 182, 183, 183, - 184, 185, 185, 186, 186, 187, 187, 188, 188, 189, - 189, 190, 191, 191, 192, 193 + 0, 87, 87, 87, 87, 88, 88, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 90, 91, 93, 92, 94, 94, 94, 96, 95, + 97, 97, 98, 98, 100, 99, 101, 101, 103, 102, + 104, 102, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, + 110, 109, 112, 111, 114, 113, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 116, 117, 117, 119, 118, 120, + 120, 120, 120, 120, 120, 120, 120, 121, 122, 123, + 124, 125, 126, 126, 127, 128, 128, 130, 129, 131, + 131, 131, 131, 131, 132, 133, 134, 135, 136, 136, + 137, 138, 138, 139, 140, 140, 142, 141, 144, 143, + 146, 145, 148, 147, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, 152, 153, + 154, 155, 155, 155, 156, 156, 156, 157, 158, 159, + 160, 161, 162, 162, 163, 163, 164, 165, 167, 166, + 169, 168, 170, 170, 170, 170, 170, 170, 172, 171, + 173, 173, 173, 175, 174, 176, 176, 176, 178, 177, + 179, 179, 179, 180, 180, 181, 181, 182, 183, 184, + 185, 185, 186, 187, 187, 188, 188, 189, 189, 189, + 190, 190, 191, 191, 192, 192, 193, 193, 193, 194, + 194, 195 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -505,23 +512,24 @@ static const short yyr2[] = 0, 6, 1, 2, 3, 4, 5, 5, 5, 8, 8, 2, 7, 7, 3, 8, 8, 4, 9, 9, 0, 6, 0, 6, 0, 6, 1, 6, 5, 7, - 7, 5, 5, 5, 5, 5, 5, 5, 2, 2, - 2, 2, 1, 1, 2, 0, 5, 1, 2, 2, - 2, 2, 2, 2, 2, 6, 4, 4, 4, 7, - 6, 4, 4, 1, 16, 0, 5, 1, 2, 2, - 2, 2, 5, 4, 5, 4, 1, 9, 9, 1, - 6, 4, 11, 12, 0, 6, 0, 6, 0, 6, - 0, 6, 1, 5, 5, 5, 2, 5, 5, 5, - 6, 1, 5, 5, 5, 2, 5, 5, 5, 5, - 5, 5, 2, 5, 6, 1, 5, 5, 5, 2, - 5, 5, 5, 5, 5, 6, 1, 1, 1, 3, - 8, 8, 4, 9, 9, 1, 8, 2, 1, 1, - 1, 5, 1, 2, 1, 1, 0, 6, 0, 6, - 1, 2, 2, 2, 2, 2, 0, 6, 1, 6, - 5, 0, 6, 1, 6, 5, 0, 6, 1, 6, - 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, + 7, 5, 5, 5, 5, 5, 5, 5, 6, 5, + 2, 2, 2, 2, 1, 1, 2, 0, 5, 1, + 2, 2, 2, 2, 2, 2, 2, 6, 4, 4, + 4, 7, 6, 4, 4, 1, 16, 0, 5, 1, + 2, 2, 2, 2, 5, 4, 5, 4, 1, 9, + 9, 1, 6, 4, 11, 12, 0, 6, 0, 6, + 0, 6, 0, 6, 1, 5, 5, 5, 2, 5, + 5, 5, 6, 1, 5, 5, 5, 2, 5, 5, + 5, 5, 5, 5, 2, 5, 6, 1, 5, 5, + 5, 2, 5, 5, 5, 5, 5, 6, 1, 1, + 1, 3, 8, 8, 4, 9, 9, 1, 8, 2, + 1, 1, 1, 5, 1, 2, 1, 1, 0, 6, + 0, 6, 1, 2, 2, 2, 2, 2, 0, 6, + 1, 6, 5, 0, 6, 1, 6, 5, 0, 6, + 1, 6, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 1, 1, 1, 1, 0 + 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 0 }; /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE @@ -529,434 +537,440 @@ static const short yyr2[] = error. */ static const short yydefact[] = { - 0, 235, 235, 235, 235, 1, 5, 2, 66, 3, - 25, 4, 132, 225, 226, 235, 0, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 0, 0, 0, 235, 0, 0, - 0, 0, 235, 0, 0, 0, 85, 0, 81, 78, - 79, 80, 235, 105, 27, 0, 0, 0, 0, 235, - 0, 0, 0, 136, 0, 220, 224, 223, 235, 0, - 60, 62, 64, 0, 219, 218, 130, 128, 126, 124, - 186, 0, 34, 235, 0, 0, 0, 0, 0, 0, - 235, 0, 0, 0, 0, 0, 235, 0, 0, 0, - 235, 0, 0, 0, 235, 235, 235, 235, 0, 222, - 221, 235, 0, 0, 0, 28, 0, 0, 0, 0, - 0, 235, 0, 0, 0, 231, 0, 0, 234, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 235, 211, 0, 235, 0, 175, 0, 168, 216, 0, - 0, 0, 0, 0, 0, 167, 0, 166, 215, 0, - 229, 0, 228, 227, 21, 0, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 23, 235, 235, 68, 0, - 235, 82, 73, 72, 71, 76, 75, 232, 233, 0, - 74, 0, 121, 77, 0, 87, 0, 212, 119, 0, - 0, 107, 139, 135, 0, 137, 0, 0, 138, 0, - 0, 134, 133, 0, 22, 230, 32, 0, 0, 0, - 0, 30, 0, 155, 0, 141, 0, 0, 0, 190, - 235, 0, 36, 0, 0, 0, 83, 67, 0, 0, - 0, 0, 0, 0, 0, 0, 86, 88, 89, 90, - 91, 92, 93, 94, 0, 235, 26, 0, 0, 0, - 0, 106, 109, 110, 111, 108, 0, 0, 169, 0, - 0, 0, 140, 235, 61, 63, 65, 235, 29, 0, - 0, 0, 0, 0, 0, 235, 0, 0, 131, 159, - 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, - 0, 129, 152, 145, 127, 125, 235, 235, 235, 235, - 187, 191, 192, 193, 194, 195, 0, 38, 35, 37, - 33, 69, 70, 84, 0, 235, 0, 0, 0, 0, - 0, 0, 235, 0, 235, 0, 0, 0, 0, 0, - 0, 0, 172, 0, 217, 0, 0, 235, 235, 0, - 0, 0, 0, 235, 235, 0, 235, 0, 0, 0, - 0, 235, 235, 235, 235, 235, 188, 196, 201, 206, - 24, 0, 40, 0, 0, 0, 0, 103, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, + 0, 241, 241, 241, 241, 1, 5, 2, 66, 3, + 25, 4, 134, 227, 228, 229, 241, 0, 241, 241, + 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 0, 0, 0, 241, 0, + 0, 0, 0, 241, 0, 0, 241, 0, 87, 0, + 83, 80, 81, 82, 241, 107, 27, 0, 0, 0, + 0, 241, 0, 0, 0, 138, 0, 222, 226, 225, + 241, 0, 60, 62, 64, 0, 221, 220, 132, 130, + 128, 126, 188, 0, 34, 241, 0, 0, 0, 0, + 0, 0, 241, 0, 0, 0, 0, 0, 0, 241, + 0, 0, 0, 241, 0, 0, 0, 241, 241, 241, + 241, 0, 224, 223, 241, 0, 0, 0, 28, 0, + 0, 0, 0, 0, 241, 0, 0, 0, 234, 235, + 0, 0, 239, 240, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 241, 0, 241, 241, 213, 0, + 241, 0, 177, 0, 170, 218, 0, 0, 0, 0, + 0, 0, 169, 0, 168, 217, 0, 232, 0, 231, + 230, 21, 0, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 23, 241, 241, 68, 0, 241, 84, 74, + 73, 72, 71, 77, 76, 236, 237, 238, 0, 75, + 0, 123, 0, 79, 0, 89, 0, 214, 121, 0, + 0, 109, 141, 137, 0, 139, 0, 0, 140, 0, + 0, 136, 135, 0, 22, 233, 32, 0, 0, 0, + 0, 30, 0, 157, 0, 143, 0, 0, 0, 192, + 241, 0, 36, 0, 0, 0, 85, 67, 0, 78, + 0, 0, 0, 0, 0, 0, 0, 88, 90, 91, + 92, 93, 94, 95, 96, 0, 241, 26, 0, 0, + 0, 0, 108, 111, 112, 113, 110, 0, 0, 171, + 0, 0, 0, 142, 241, 61, 63, 65, 241, 29, + 0, 0, 0, 0, 0, 0, 241, 0, 0, 133, + 161, 0, 0, 0, 0, 0, 241, 0, 0, 0, + 0, 0, 131, 154, 147, 129, 127, 241, 241, 241, + 241, 189, 193, 194, 195, 196, 197, 0, 38, 35, + 37, 33, 69, 70, 86, 0, 241, 0, 0, 0, + 0, 0, 0, 241, 0, 241, 0, 0, 0, 0, + 0, 0, 0, 174, 0, 219, 0, 0, 241, 241, + 0, 0, 0, 0, 241, 241, 0, 241, 0, 0, + 0, 0, 241, 241, 241, 241, 241, 190, 198, 203, + 208, 24, 0, 40, 0, 0, 0, 0, 105, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 213, 0, 0, 0, 184, 0, 0, 0, 0, + 0, 187, 215, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 180, 0, 178, 0, 179, 0, 0, 0, 0, 0, - 0, 0, 0, 102, 0, 0, 96, 97, 98, 101, - 0, 0, 0, 0, 115, 0, 113, 0, 0, 0, - 0, 0, 0, 176, 0, 162, 164, 214, 158, 160, - 163, 161, 0, 157, 156, 148, 144, 146, 149, 177, - 147, 0, 143, 142, 0, 153, 150, 151, 235, 235, - 235, 235, 0, 42, 0, 0, 0, 0, 0, 0, - 0, 118, 120, 0, 114, 112, 0, 0, 0, 0, - 31, 165, 154, 235, 0, 0, 198, 0, 203, 0, - 208, 0, 0, 0, 0, 39, 43, 0, 0, 0, - 0, 0, 100, 95, 0, 171, 170, 0, 0, 0, - 182, 189, 235, 0, 197, 235, 0, 202, 235, 207, - 210, 0, 0, 0, 0, 0, 44, 41, 0, 0, - 0, 99, 0, 174, 173, 181, 183, 0, 235, 0, - 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 47, 0, 0, 48, 0, 0, 46, - 51, 122, 0, 0, 0, 0, 200, 0, 205, 0, - 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, - 123, 0, 0, 199, 204, 209, 0, 0, 0, 0, - 0, 0, 57, 0, 0, 0, 117, 50, 49, 0, + 0, 182, 0, 180, 0, 181, 0, 0, 0, 0, + 0, 0, 0, 0, 104, 0, 0, 98, 99, 100, + 103, 0, 0, 0, 0, 117, 0, 115, 0, 0, + 0, 0, 0, 0, 178, 0, 164, 166, 216, 160, + 162, 165, 163, 0, 159, 158, 150, 146, 148, 151, + 179, 149, 0, 145, 144, 0, 155, 152, 153, 241, + 241, 241, 241, 0, 42, 0, 0, 0, 0, 0, + 0, 0, 120, 122, 0, 116, 114, 0, 0, 0, + 0, 31, 167, 156, 241, 0, 0, 200, 0, 205, + 0, 210, 0, 0, 0, 0, 39, 43, 0, 0, + 0, 0, 0, 102, 97, 0, 173, 172, 0, 0, + 0, 184, 191, 241, 0, 199, 241, 0, 204, 241, + 209, 212, 0, 0, 0, 0, 0, 44, 41, 0, + 0, 0, 101, 0, 176, 175, 183, 185, 0, 241, + 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 47, 0, 0, 48, 0, 0, + 46, 51, 124, 0, 0, 0, 0, 202, 0, 207, + 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, + 0, 125, 0, 0, 201, 206, 211, 0, 0, 0, + 0, 0, 0, 57, 0, 0, 0, 119, 50, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 53, 52, 0, - 56, 55, 0, 0, 0, 59, 58, 0, 0, 104, - 0, 0, 0 + 0, 0, 0, 0, 0, 0, 0, 0, 53, 52, + 0, 56, 55, 0, 0, 0, 59, 58, 0, 0, + 106, 0, 0, 0 }; static const short yydefgoto[] = { - 670, 5, 58, 30, 31, 32, 240, 9, 33, 179, - 230, 34, 35, 132, 241, 329, 381, 440, 492, 578, - 574, 576, 36, 122, 37, 123, 38, 124, 7, 190, - 245, 59, 105, 204, 257, 258, 259, 260, 261, 262, - 263, 385, 64, 108, 210, 272, 273, 274, 275, 396, - 60, 206, 61, 147, 39, 129, 40, 128, 41, 127, - 42, 126, 11, 234, 232, 166, 164, 156, 159, 161, - 154, 73, 423, 431, 433, 429, 539, 414, 409, 43, - 130, 322, 435, 238, 323, 436, 515, 324, 437, 517, - 325, 438, 519, 150, 410, 167, 157, 353, 158, 74, - 118, 75, 84, 171, 172, 467, 199, 155, 85 + 681, 5, 60, 31, 32, 33, 250, 9, 34, 186, + 240, 35, 36, 135, 251, 340, 392, 451, 503, 589, + 585, 587, 37, 125, 38, 126, 39, 127, 7, 197, + 255, 61, 108, 214, 268, 269, 270, 271, 272, 273, + 274, 396, 66, 111, 220, 283, 284, 285, 286, 407, + 62, 216, 63, 153, 40, 132, 41, 131, 42, 130, + 43, 129, 11, 244, 242, 173, 171, 163, 166, 168, + 161, 75, 434, 442, 444, 440, 550, 425, 420, 44, + 133, 333, 446, 248, 334, 447, 526, 335, 448, 528, + 336, 449, 530, 157, 421, 174, 164, 364, 165, 76, + 121, 77, 86, 178, 179, 478, 208, 162, 87 }; static const short yypact[] = { - 170,-32768,-32768,-32768,-32768, 684,-32768, 1075,-32768, 14, - -32768, 368,-32768,-32768,-32768, 197, -18, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197,-32768, + 230,-32768,-32768,-32768,-32768, 739,-32768, 1168,-32768, 26, + -32768, 148,-32768,-32768,-32768,-32768, 248, -3, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768, 63, -12, 18, 197, 32, 38, - 73, 78, 197, 82, 98, 110,-32768, 114,-32768,-32768, - -32768,-32768, 197,-32768,-32768, 125, 130, 138, 144, 197, - 150, 154, 155,-32768, 159,-32768,-32768,-32768, 197, 160, - -32768,-32768,-32768, 161,-32768,-32768,-32768,-32768,-32768,-32768, - -32768, 164,-32768, 197, 197, 94, 177, 200, 148, 148, - 197, 178, 148, 83, 148, 181,-32768, 182, 183, 148, - 197, 94, 94, 185, 197, 197,-32768, 197, 100,-32768, - -32768, 197, 186, 187, 193,-32768, 201, 205, 209, 210, - 211, 197, 213, 214, 107,-32768, 94, 197,-32768, 169, - 171, 196, 202, 215, 203, 217, 219, 221, 223,-32768, - 148,-32768, 203,-32768, 225,-32768, 226,-32768,-32768, 24, - 94, 22, 94, 203, 231,-32768, 232,-32768,-32768, 52, - -32768, 233, 197,-32768,-32768, 235,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768,-32768,-32768, 197,-32768, 94, - -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 236, - -32768, 94,-32768,-32768, 419,-32768, 132,-32768,-32768, 237, - 108,-32768,-32768,-32768, 40,-32768, 94, 42,-32768, 94, - 238,-32768,-32768, 220,-32768,-32768,-32768, 842, 924, 1009, - 12,-32768, 172,-32768, 101,-32768, 224, 312, 58,-32768, - -32768, 8,-32768, 239, 240, 21,-32768,-32768, 94, 246, - 247, 257, 258, 269, 270, 271,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768, 272, 197,-32768, 273, 275, 278, - 279,-32768,-32768,-32768,-32768,-32768, 197, 280,-32768, 197, - 281, 94,-32768, 197,-32768,-32768,-32768, 197,-32768, 285, - 286, 287, 288, 289, 290, 197, 293, 294,-32768,-32768, - 295, 297, 298, 299, 300, 197, 302, 304, 306, 309, - 310,-32768,-32768,-32768,-32768,-32768, 197, 197, 197, 197, - -32768,-32768,-32768,-32768,-32768,-32768, 7, 148,-32768,-32768, - -32768,-32768,-32768,-32768, 72, 94, 94, 94, 94, 94, - 94, 94, 197, 311, 94, 94, 94, 94, 94, 94, - 94, 94,-32768, 313,-32768, 321, 148,-32768, 197, 94, - 148, 94, 322, 197, 197, 148, 197, 94, 148, 94, - 325, 197, 197,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768, 326,-32768, 327, 216, 328, 94,-32768, 94, 329, - 330, 331, 0, 94, 333, 203, 334, 94,-32768, 335, - 94, 94, 94, 94, 94, 94, 336, 203, 337, 339, - 94,-32768, 340, 36, 341,-32768, 43, 203, 342, 343, - 344, 345, 53, 346, 148, 66, 203, 349, 350, 29, - -32768, 352, 94, 354, 94, 357, 358, 362, 363, 94, - 364, 94, 369,-32768, 94, 94,-32768,-32768,-32768,-32768, - 94, 94, 367, 372,-32768, 94,-32768, 377, 380, 94, - 94, 94, 94,-32768, 382,-32768,-32768,-32768,-32768,-32768, - -32768,-32768, 389,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768, 391,-32768,-32768, 393,-32768,-32768,-32768,-32768,-32768, - -32768,-32768, 157, 94, 94, 94, 94, 94, 94, 394, - 395,-32768,-32768, 94,-32768,-32768, 396, 397, 94, 94, - -32768,-32768,-32768,-32768, 69, 70,-32768, 105,-32768, 10, - -32768, 45, 399, 400, 401,-32768, 94, 206, 94, 94, - 94, 402,-32768,-32768, 94,-32768,-32768, 403, 404, 30, - -32768,-32768, 197, 406,-32768, 197, 407,-32768, 197,-32768, - -32768, 197, 414, 94, 94, 94, 94,-32768, 415, 94, - 94,-32768, 94,-32768,-32768,-32768,-32768, 417,-32768, 421, - -32768, 422, 94, 94, 64, 94, 68, 94, -10, 94, - -32768, 418, 424, 94, 94, 203, 33, 203, 35, 203, - 94, 94, 47,-32768, 94, 50,-32768, 94, 55,-32768, - -32768,-32768, 426, 94, 94, 427,-32768, 428,-32768, 429, - 94, 94, 197, 431,-32768, 197, 432, 94, 197, 434, - -32768, 94, 94,-32768,-32768,-32768, 435, 436, 94, 94, - 94, 94,-32768, 94, 94, 94,-32768,-32768,-32768, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 437, 438, 94, 439, 441, 94, 94,-32768,-32768, 94, - -32768,-32768, 445, 449, 94,-32768,-32768, 94, 94,-32768, - 411, 477,-32768 + -32768,-32768,-32768,-32768,-32768, 73, 16, 38, 248, 62, + 84, 110, 125, 248, 131, 135, 248, 150,-32768, 156, + -32768,-32768,-32768,-32768, 248,-32768,-32768, 158, 162, 170, + 172, 248, 174, 176, 178,-32768, 195,-32768,-32768,-32768, + 248, 198,-32768,-32768,-32768, 201,-32768,-32768,-32768,-32768, + -32768,-32768,-32768, 203,-32768, 248, 248, 262, 204, 269, + 288, 273, 248, 211, 273, 223, 214, 273, 219,-32768, + 225, 244, 273, 248, 262, 262, 245, 248, 248,-32768, + 248, -8,-32768,-32768, 248, 246, 247, 249,-32768, 252, + 253, 254, 255, 256, 248, 257, 266, 98,-32768,-32768, + 262, 248,-32768,-32768, 276, 281, 283, 285, 286, 287, + 316, 289, 267, 291, 248, 293,-32768, 273,-32768, 316, + -32768, 294,-32768, 295,-32768,-32768, -7, 262, 10, 262, + 316, 296,-32768, 297,-32768,-32768, 104,-32768, 298, 248, + -32768,-32768, 299,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + -32768,-32768,-32768,-32768, 248,-32768, 262,-32768,-32768,-32768, + -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 300,-32768, + 262,-32768, 301,-32768, 250,-32768, 56,-32768,-32768, 302, + 107,-32768,-32768,-32768, 37,-32768, 262, 41,-32768, 262, + 303,-32768,-32768, 305,-32768,-32768,-32768, 864, 1004, 1071, + 32,-32768, 93,-32768, 137,-32768, 189, 229, 151,-32768, + -32768, 53,-32768, 306, 307, 31,-32768,-32768, 262,-32768, + 309, 311, 313, 314, 315, 318, 319,-32768,-32768,-32768, + -32768,-32768,-32768,-32768,-32768, 320, 248,-32768, 322, 323, + 330, 331,-32768,-32768,-32768,-32768,-32768, 248, 332,-32768, + 248, 333, 262,-32768, 248,-32768,-32768,-32768, 248,-32768, + 334, 335, 336, 337, 338, 339, 248, 340, 341,-32768, + -32768, 342, 343, 344, 345, 346, 248, 347, 348, 349, + 350, 351,-32768,-32768,-32768,-32768,-32768, 248, 248, 248, + 248,-32768,-32768,-32768,-32768,-32768,-32768, 99, 273,-32768, + -32768,-32768,-32768,-32768,-32768, 5, 262, 262, 262, 262, + 262, 262, 262, 248, 352, 262, 262, 262, 262, 262, + 262, 262, 262,-32768, 353,-32768, 356, 273,-32768, 248, + 262, 273, 262, 358, 248, 248, 273, 248, 262, 273, + 262, 359, 248, 248,-32768,-32768,-32768,-32768,-32768,-32768, + -32768,-32768, 361,-32768, 362, 258, 363, 262,-32768, 262, + 369, 370, 371, 20, 262, 372, 316, 375, 262,-32768, + 376, 262, 262, 262, 262, 262, 262, 377, 316, 379, + 380, 262,-32768, 381, 0, 386,-32768, 49, 316, 387, + 388, 389, 391, 30, 392, 273, 59, 316, 393, 394, + 19,-32768, 395, 262, 396, 262, 398, 399, 400, 401, + 262, 403, 262, 404,-32768, 262, 262,-32768,-32768,-32768, + -32768, 262, 262, 405, 406,-32768, 262,-32768, 407, 409, + 262, 262, 262, 262,-32768, 410,-32768,-32768,-32768,-32768, + -32768,-32768,-32768, 411,-32768,-32768,-32768,-32768,-32768,-32768, + -32768,-32768, 412,-32768,-32768, 414,-32768,-32768,-32768,-32768, + -32768,-32768,-32768, 54, 262, 262, 262, 262, 262, 262, + 415, 422,-32768,-32768, 262,-32768,-32768, 424, 425, 262, + 262,-32768,-32768,-32768,-32768, 160, 118,-32768, 163,-32768, + 55,-32768, 45, 428, 429, 430,-32768, 262, 222, 262, + 262, 262, 433,-32768,-32768, 262,-32768,-32768, 434, 435, + 48,-32768,-32768, 248, 431,-32768, 248, 437,-32768, 248, + -32768,-32768, 248, 438, 262, 262, 262, 262,-32768, 439, + 262, 262,-32768, 262,-32768,-32768,-32768,-32768, 441,-32768, + 443,-32768, 444, 262, 262, 35, 262, 70, 262, 39, + 262,-32768, 445, 446, 262, 262, 316, 28, 316, 34, + 316, 262, 262, 61,-32768, 262, 65,-32768, 262, 68, + -32768,-32768,-32768, 447, 262, 262, 448,-32768, 450,-32768, + 456, 262, 262, 248, 459,-32768, 248, 460, 262, 248, + 461,-32768, 262, 262,-32768,-32768,-32768, 462, 463, 262, + 262, 262, 262,-32768, 262, 262, 262,-32768,-32768,-32768, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 464, 465, 262, 466, 467, 262, 262,-32768,-32768, + 262,-32768,-32768, 468, 469, 262,-32768,-32768, 262, 262, + -32768, 374, 490,-32768 }; static const short yypgoto[] = { - -32768,-32768, 493,-32768,-32768,-32768,-32768, 296,-32768,-32768, - -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -196,-32768, - -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 81,-32768, + -32768,-32768, 495,-32768,-32768,-32768,-32768, 85,-32768,-32768, + -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -114,-32768, + -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 143,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -233,-32768, 49,-32768,-32768, -282, -201, -186, -184, -171, - -279, -134,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -231, - -32768,-32768,-32768, 46, -1,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768, 425, -352,-32768,-32768, 195, 167, 9, - -84,-32768, -5,-32768,-32768, -2, -122, -93, 657 + -241,-32768, 127,-32768,-32768, -224, -214, -205, -188, -189, + -291, -44,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -244, + -32768,-32768,-32768, 25, -21,-32768,-32768,-32768,-32768,-32768, + -32768,-32768,-32768, 440, -380,-32768,-32768, 177, 423, 36, + -95,-32768, -5, 402,-32768, -2, -158, -74, 668 }; -#define YYLAST 1227 +#define YYLAST 1249 static const short yytable[] = { - 44, 312, 44, 135, 140, 141, 142, 321, 598, 145, - 76, 148, 76, 76, 76, 76, 143, 76, 76, 76, - 76, 76, 432, 434, 13, 14, 79, 80, 81, 82, - 209, 86, 87, 88, 89, 90, 135, 175, 135, 217, - 214, 220, 76, 13, 14, 13, 14, 185, 13, 14, - 13, 14, 214, 13, 14, 138, 96, 207, 13, 14, - 217, 62, 484, 317, 548, 78, 287, 316, 62, 214, - 22, 94, 63, 119, 599, 135, 207, 408, 316, 63, - 592, 327, 419, 217, 449, 595, 420, 93, 76, 134, - 428, 380, 328, 136, 549, 119, 288, 135, 299, 223, - 313, 95, 133, 243, 146, 332, 218, 300, 215, 160, - 162, 317, 170, 485, 565, 97, 119, 606, 26, 608, - 469, 98, 317, 276, 542, 279, 119, 471, 551, 26, - 612, 543, 191, 615, 189, 318, 319, 477, 618, 301, - 302, 22, 320, 267, 303, 383, 318, 319, 593, 304, - 480, 138, 596, 541, 544, 305, 99, 268, 216, 545, - 219, 100, 418, 269, 306, 102, 546, 225, 307, 308, - 427, 309, 412, 310, 270, 413, 521, 72, 289, 264, - 421, 103, 119, 422, 174, 311, 265, 244, 83, 547, - 416, 188, 271, 104, 91, 92, 522, 106, 425, 248, - 13, 14, 290, 138, 139, 523, 197, 198, 109, 277, - 291, 292, 280, 110, 278, 293, 586, 281, 588, 101, - 294, 111, 44, 44, 44, 521, 295, 112, 524, 107, - 65, 236, 237, 114, 382, 296, 113, 115, 116, 297, - 333, 525, 117, 121, 125, 522, 334, 131, 72, 1, - 2, 3, 4, 192, 523, 193, 298, 227, 228, 229, - 137, 144, 66, 67, 149, 152, 153, 415, 163, 176, - 177, 348, 68, 453, 350, 424, 178, 524, 69, 352, - 194, 165, 168, 321, 180, 464, 195, 70, 181, 442, - 557, 71, 182, 183, 184, 472, 186, 187, 527, 196, - 72, 200, 201, 283, 481, 202, 566, 203, 314, 212, - 213, 76, 76, 76, 76, 221, 222, 224, 65, 226, - 247, 266, 282, 330, 331, 376, 377, 378, 379, 335, - 336, 479, 384, 386, 388, 389, 390, 391, 392, 393, - 337, 338, 397, 399, 400, 401, 402, 403, 404, 405, - 66, 67, 339, 340, 341, 342, 344, 160, 345, 162, - 68, 346, 347, 349, 351, 160, 69, 162, 356, 357, - 358, 359, 360, 361, 65, 70, 363, 364, 365, 71, - 366, 367, 368, 369, 444, 371, 445, 372, 72, 373, - 450, 451, 374, 375, 395, 455, 315, 406, 457, 458, - 459, 460, 461, 462, 407, 417, 66, 67, 426, 439, - 441, 671, 443, 446, 447, 448, 68, 452, 454, 456, - 463, 465, 69, 466, 468, 470, 473, 474, 475, 476, - 478, 70, 343, 482, 483, 71, 486, 493, 487, 495, - 488, 489, 497, 498, 72, 490, 491, 494, 499, 500, - 354, 501, 496, 503, 355, 249, 502, 506, 507, 508, - 509, 504, 362, 605, 505, 607, 510, 609, 250, 251, - 252, 253, 370, 511, 254, 512, 513, 672, 532, 533, - 535, 536, 553, 554, 555, 255, 561, 563, 564, 568, - 570, 526, 493, 528, 529, 530, 531, 573, 29, 581, - 585, 534, 601, 256, 587, 589, 537, 538, 602, 354, - 620, 623, 624, 625, 629, 631, 552, 634, 550, 637, - 638, 657, 658, 660, 556, 661, 558, 559, 560, 665, - 165, 168, 562, 666, 514, 0, 326, 394, 165, 168, - 0, 169, 0, 0, 0, 0, 572, 0, 0, 0, - 0, 575, 577, 579, 580, 0, 0, 582, 583, 0, - 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 590, 591, 0, 594, 0, 597, 0, 600, 0, 0, - 0, 603, 604, 0, 0, 0, 0, 613, 610, 611, - 616, 0, 614, 619, 0, 617, 0, 0, 0, 0, - 0, 621, 622, 0, 0, 0, 0, 628, 626, 627, - 630, 0, 0, 633, 0, 632, 0, 0, 0, 635, - 636, 0, 0, 0, 0, 0, 639, 640, 641, 642, - 0, 643, 644, 645, 0, 0, 0, 646, 647, 648, - 649, 650, 651, 652, 653, 654, 655, 656, 0, 0, - 659, 0, 0, 662, 663, 0, 0, 664, 6, 8, - 10, 12, 667, 0, 0, 668, 669, 0, 0, 0, - 0, 0, 77, 0, 77, 77, 77, 77, 0, 77, - 77, 77, 77, 77, 0, 0, 0, 13, 14, 0, - 0, 0, 0, 0, 0, 0, 15, 16, 0, 0, - 0, 0, 0, 0, 77, 0, 0, 0, 17, 567, - 18, 0, 569, 19, 0, 571, 20, 0, 21, 0, - 0, 0, 0, 0, 22, 23, 0, 0, 0, 24, - 25, 0, 0, 0, 0, 120, 0, 0, 0, 0, - 0, 0, 0, 0, 26, 0, 0, 27, 0, 0, - 77, 0, 0, 0, 0, 0, 0, 120, 0, 28, - 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 151, 173, 0, 0, 0, 120, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, + 45, 219, 45, 323, 332, 443, 445, 149, 138, 139, + 224, 78, 230, 78, 78, 78, 78, 224, 78, 78, + 78, 78, 78, 138, 139, 145, 147, 148, 227, 182, + 151, 138, 139, 155, 13, 14, 15, 138, 139, 192, + 13, 14, 15, 78, 13, 14, 15, 224, 13, 14, + 15, 78, 603, 495, 81, 82, 83, 84, 609, 88, + 89, 90, 91, 92, 13, 14, 15, 227, 13, 14, + 15, 13, 14, 15, 532, 122, 419, 227, 181, 225, + 394, 64, 80, 217, 98, 431, 480, 298, 606, 23, + 78, 137, 106, 65, 533, 140, 228, 122, 95, 253, + 300, 96, 217, 534, 275, 496, 460, 142, 143, 328, + 559, 276, 167, 169, 617, 177, 488, 343, 299, 122, + 619, 604, 287, 97, 301, 610, 290, 535, 338, 122, + 562, 136, 302, 303, 576, 482, 198, 304, 196, 339, + 536, 560, 305, 278, 311, 491, 623, 99, 306, 177, + 626, 430, 233, 629, 64, 67, 607, 279, 307, 439, + 429, 327, 308, 280, 423, 226, 65, 229, 438, 100, + 327, 74, 432, 553, 235, 281, 312, 313, 23, 309, + 554, 314, 424, 427, 195, 391, 315, 68, 69, 122, + 433, 436, 316, 282, 254, 101, 67, 70, 310, 597, + 324, 599, 317, 71, 555, 328, 318, 319, 258, 320, + 102, 321, 27, 72, 328, 74, 104, 73, 556, 288, + 105, 27, 291, 322, 289, 557, 74, 292, 68, 69, + 329, 330, 45, 45, 45, 107, 67, 331, 70, 329, + 330, 109, 532, 112, 71, 152, 552, 113, 464, 558, + 344, 13, 14, 15, 72, 114, 345, 115, 73, 117, + 475, 118, 533, 119, 393, 138, 139, 74, 68, 69, + 483, 534, 142, 143, 144, 325, 142, 143, 70, 492, + 120, 332, 359, 124, 71, 361, 128, 260, 134, 141, + 363, 142, 143, 146, 72, 535, 150, 426, 73, 154, + 261, 262, 263, 264, 156, 435, 265, 74, 568, 577, + 159, 1, 2, 3, 4, 326, 246, 247, 266, 205, + 206, 207, 78, 78, 78, 78, 237, 238, 239, 160, + 170, 183, 184, 453, 185, 337, 267, 187, 188, 189, + 190, 191, 193, 395, 397, 399, 400, 401, 402, 403, + 404, 194, 210, 408, 410, 411, 412, 413, 414, 415, + 416, 490, 199, 387, 388, 389, 390, 200, 167, 201, + 169, 202, 203, 204, 682, 209, 167, 211, 169, 213, + 222, 223, 231, 232, 234, 236, 257, 259, 277, 293, + 294, 538, 341, 342, 346, 455, 347, 456, 348, 349, + 350, 461, 462, 351, 352, 353, 466, 355, 356, 468, + 469, 470, 471, 472, 473, 357, 358, 360, 362, 367, + 368, 369, 370, 371, 372, 374, 375, 376, 377, 378, + 379, 380, 382, 383, 384, 385, 386, 406, 616, 417, + 618, 418, 620, 428, 437, 85, 450, 452, 504, 454, + 506, 93, 94, 508, 509, 457, 458, 459, 463, 510, + 511, 465, 467, 474, 514, 476, 477, 479, 517, 518, + 519, 520, 481, 484, 485, 486, 103, 487, 489, 493, + 494, 497, 498, 499, 500, 501, 502, 110, 505, 507, + 683, 512, 513, 515, 116, 516, 521, 522, 523, 524, + 30, 543, 537, 504, 539, 540, 541, 542, 544, 561, + 546, 547, 545, 564, 565, 566, 579, 548, 549, 572, + 574, 575, 581, 584, 525, 592, 596, 563, 598, 600, + 405, 612, 613, 631, 634, 567, 635, 569, 570, 571, + 172, 175, 636, 573, 640, 642, 645, 0, 648, 649, + 668, 669, 671, 672, 676, 677, 212, 583, 0, 176, + 0, 0, 586, 588, 590, 591, 0, 0, 593, 594, + 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 601, 602, 0, 605, 0, 608, 0, 611, 0, + 0, 0, 614, 615, 0, 0, 0, 0, 624, 621, + 622, 627, 0, 625, 630, 0, 628, 0, 0, 0, + 0, 0, 632, 633, 0, 0, 0, 0, 639, 637, + 638, 641, 0, 0, 644, 0, 643, 0, 0, 0, + 646, 647, 0, 0, 0, 0, 0, 650, 651, 652, + 653, 0, 654, 655, 656, 0, 0, 0, 657, 658, + 659, 660, 661, 662, 663, 664, 665, 666, 667, 0, + 0, 670, 0, 0, 673, 674, 0, 0, 675, 6, + 8, 10, 12, 678, 0, 0, 679, 680, 0, 0, + 0, 0, 0, 0, 79, 0, 79, 79, 79, 79, + 0, 79, 79, 79, 79, 79, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 205, 208, 0, 0, - 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8, 8, 8, 231, 233, 235, 12, - 12, 239, 0, 242, 120, 13, 14, 246, 0, 45, - 46, 0, 0, 47, 15, 16, 0, 48, 0, 0, - 0, 0, 49, 0, 0, 0, 17, 0, 18, 0, - 0, 19, 0, 0, 20, 0, 21, 0, 0, 50, - 0, 0, 22, 23, 51, 0, 0, 24, 25, 0, - 0, 0, 0, 0, 0, 0, 52, 10, 0, 0, - 53, 54, 26, 0, 55, 27, 0, 56, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 28, 57, 0, - 0, 0, 0, 0, 0, 0, 284, 13, 14, 0, - 0, 45, 46, 0, 0, 47, 15, 16, 0, 48, - 0, 0, 0, 0, 49, 0, 0, 0, 17, 0, - 18, 0, 0, 19, 0, 0, 20, 0, 21, 0, - 0, 50, 0, 0, 22, 23, 51, 0, 0, 24, - 25, 0, 0, 77, 77, 77, 77, 0, 52, 0, - 0, 0, 53, 54, 26, 0, 55, 27, 0, 56, - 0, 0, 387, 0, 0, 0, 0, 0, 0, 28, - 57, 398, 0, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 13, 14, 411, 0, 45, 46, 0, 0, - 47, 15, 16, 0, 48, 0, 0, 0, 0, 49, - 430, 411, 411, 17, 0, 18, 0, 0, 19, 0, - 0, 20, 0, 21, 0, 0, 50, 0, 0, 22, - 23, 51, 0, 0, 24, 25, 0, 0, 0, 0, - 0, 0, 0, 52, 0, 0, 0, 53, 54, 26, - 0, 55, 27, 0, 56, 0, 0, 0, 13, 14, - 0, 0, 45, 46, 28, 57, 47, 15, 16, 0, - 48, 0, 0, 286, 0, 49, 0, 0, 0, 17, - 0, 18, 0, 0, 19, 0, 0, 20, 0, 21, - 0, 0, 50, 0, 0, 22, 23, 51, 0, 0, - 24, 25, 0, 0, 0, 0, 0, 0, 0, 52, - 0, 0, 0, 53, 54, 26, 0, 55, 27, 0, - 56, 0, 0, 0, 0, 239, 516, 518, 520, 0, - 28, 57, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 79, 365, 0, 0, + 0, 366, 0, 0, 79, 0, 0, 0, 0, 373, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, + 0, 0, 13, 14, 15, 0, 0, 0, 123, 0, + 0, 0, 16, 17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 79, 18, 0, 19, 0, 0, 20, + 123, 0, 21, 0, 22, 0, 365, 158, 0, 0, + 23, 24, 0, 0, 0, 25, 26, 158, 180, 0, + 0, 0, 123, 0, 0, 0, 0, 172, 175, 0, + 27, 0, 123, 0, 28, 172, 175, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + 0, 0, 180, 0, 215, 218, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 8, 8, 241, 243, 245, 12, 12, 249, + 0, 252, 123, 0, 0, 256, 0, 13, 14, 15, + 0, 0, 46, 47, 0, 0, 48, 16, 17, 0, + 49, 0, 0, 0, 0, 50, 0, 0, 0, 18, + 0, 19, 0, 0, 20, 0, 0, 21, 0, 22, + 0, 0, 51, 0, 0, 23, 24, 52, 0, 0, + 25, 26, 0, 0, 0, 0, 0, 0, 10, 53, + 0, 0, 0, 54, 55, 27, 0, 56, 57, 28, + 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 29, 59, 0, 0, 0, 0, 0, 0, 0, + 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 411, 0, 411 + 0, 0, 0, 0, 0, 0, 578, 0, 0, 580, + 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 79, 79, 79, 79, 0, + 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, + 0, 0, 46, 47, 398, 0, 48, 16, 17, 0, + 49, 0, 0, 409, 0, 50, 0, 0, 0, 18, + 0, 19, 0, 0, 20, 0, 422, 21, 0, 22, + 0, 0, 51, 0, 0, 23, 24, 52, 0, 0, + 25, 26, 441, 422, 422, 0, 0, 0, 0, 53, + 0, 0, 0, 54, 55, 27, 0, 56, 57, 28, + 0, 58, 0, 0, 13, 14, 15, 0, 0, 46, + 47, 29, 59, 48, 16, 17, 0, 49, 0, 0, + 296, 0, 50, 0, 0, 0, 18, 0, 19, 0, + 0, 20, 0, 0, 21, 0, 22, 0, 0, 51, + 0, 0, 23, 24, 52, 0, 0, 25, 26, 0, + 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, + 54, 55, 27, 0, 56, 57, 28, 0, 58, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 29, 59, + 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 249, 527, 529, + 531, 13, 14, 15, 0, 0, 46, 47, 0, 0, + 48, 16, 17, 0, 49, 0, 0, 0, 0, 50, + 0, 0, 551, 18, 0, 19, 0, 0, 20, 0, + 0, 21, 0, 22, 0, 0, 51, 0, 0, 23, + 24, 52, 0, 0, 25, 26, 0, 0, 0, 0, + 0, 0, 0, 53, 0, 0, 0, 54, 55, 27, + 0, 56, 57, 28, 0, 58, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 29, 59, 422, 0, 422 }; static const short yycheck[] = { - 5, 234, 7, 3, 97, 98, 99, 238, 18, 102, - 15, 104, 17, 18, 19, 20, 100, 22, 23, 24, - 25, 26, 374, 375, 3, 4, 17, 18, 19, 20, - 152, 22, 23, 24, 25, 26, 3, 121, 3, 17, - 16, 163, 47, 3, 4, 3, 4, 131, 3, 4, - 3, 4, 16, 3, 4, 3, 47, 150, 3, 4, - 17, 54, 33, 53, 54, 83, 54, 9, 54, 16, - 40, 83, 65, 78, 84, 3, 169, 356, 9, 65, - 16, 73, 364, 17, 84, 17, 365, 24, 93, 94, - 372, 84, 84, 95, 84, 100, 84, 3, 232, 47, - 234, 83, 93, 187, 21, 84, 84, 6, 84, 111, - 112, 53, 117, 84, 84, 83, 121, 84, 60, 84, - 84, 83, 53, 83, 54, 83, 131, 84, 83, 60, - 83, 61, 137, 83, 136, 77, 78, 84, 83, 38, - 39, 40, 84, 35, 43, 73, 77, 78, 84, 48, - 84, 3, 84, 84, 84, 54, 83, 49, 160, 54, - 162, 83, 363, 55, 63, 83, 61, 172, 67, 68, - 371, 70, 358, 72, 66, 359, 19, 76, 6, 47, - 366, 83, 187, 367, 84, 84, 54, 189, 21, 84, - 361, 84, 84, 83, 27, 28, 39, 83, 369, 201, - 3, 4, 30, 3, 4, 48, 3, 4, 83, 214, - 38, 39, 217, 83, 216, 43, 568, 219, 570, 52, - 48, 83, 227, 228, 229, 19, 54, 83, 71, 62, - 6, 182, 183, 83, 327, 63, 69, 83, 83, 67, - 245, 84, 83, 83, 83, 39, 248, 83, 76, 79, - 80, 81, 82, 84, 48, 84, 84, 176, 177, 178, - 83, 83, 38, 39, 83, 83, 83, 360, 83, 83, - 83, 276, 48, 395, 279, 368, 83, 71, 54, 281, - 84, 114, 115, 514, 83, 407, 84, 63, 83, 73, - 84, 67, 83, 83, 83, 417, 83, 83, 494, 84, - 76, 84, 83, 83, 426, 84, 539, 84, 84, 84, - 84, 316, 317, 318, 319, 84, 84, 84, 6, 84, - 84, 84, 84, 84, 84, 316, 317, 318, 319, 83, - 83, 424, 334, 335, 336, 337, 338, 339, 340, 341, - 83, 83, 344, 345, 346, 347, 348, 349, 350, 351, - 38, 39, 83, 83, 83, 83, 83, 359, 83, 361, - 48, 83, 83, 83, 83, 367, 54, 369, 83, 83, - 83, 83, 83, 83, 6, 63, 83, 83, 83, 67, - 83, 83, 83, 83, 386, 83, 388, 83, 76, 83, - 392, 393, 83, 83, 83, 397, 84, 84, 400, 401, - 402, 403, 404, 405, 83, 83, 38, 39, 83, 83, - 83, 0, 84, 84, 84, 84, 48, 84, 84, 84, - 84, 84, 54, 84, 84, 84, 84, 84, 84, 84, - 84, 63, 265, 84, 84, 67, 84, 439, 84, 441, - 83, 83, 444, 445, 76, 83, 83, 83, 450, 451, - 283, 84, 83, 455, 287, 36, 84, 459, 460, 461, - 462, 84, 295, 585, 84, 587, 84, 589, 49, 50, - 51, 52, 305, 84, 55, 84, 83, 0, 84, 84, - 84, 84, 83, 83, 83, 66, 84, 84, 84, 83, - 83, 493, 494, 495, 496, 497, 498, 83, 5, 84, - 83, 503, 84, 84, 83, 83, 508, 509, 84, 342, - 84, 84, 84, 84, 83, 83, 521, 83, 519, 84, - 84, 84, 84, 84, 526, 84, 528, 529, 530, 84, - 363, 364, 534, 84, 488, -1, 240, 342, 371, 372, - -1, 116, -1, -1, -1, -1, 551, -1, -1, -1, - -1, 553, 554, 555, 556, -1, -1, 559, 560, -1, - 562, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 572, 573, -1, 575, -1, 577, -1, 579, -1, -1, - -1, 583, 584, -1, -1, -1, -1, 592, 590, 591, - 595, -1, 594, 598, -1, 597, -1, -1, -1, -1, - -1, 603, 604, -1, -1, -1, -1, 612, 610, 611, - 615, -1, -1, 618, -1, 617, -1, -1, -1, 621, - 622, -1, -1, -1, -1, -1, 628, 629, 630, 631, - -1, 633, 634, 635, -1, -1, -1, 639, 640, 641, - 642, 643, 644, 645, 646, 647, 648, 649, -1, -1, - 652, -1, -1, 655, 656, -1, -1, 659, 1, 2, - 3, 4, 664, -1, -1, 667, 668, -1, -1, -1, - -1, -1, 15, -1, 17, 18, 19, 20, -1, 22, - 23, 24, 25, 26, -1, -1, -1, 3, 4, -1, - -1, -1, -1, -1, -1, -1, 12, 13, -1, -1, - -1, -1, -1, -1, 47, -1, -1, -1, 24, 542, - 26, -1, 545, 29, -1, 548, 32, -1, 34, -1, - -1, -1, -1, -1, 40, 41, -1, -1, -1, 45, - 46, -1, -1, -1, -1, 78, -1, -1, -1, -1, - -1, -1, -1, -1, 60, -1, -1, 63, -1, -1, - 93, -1, -1, -1, -1, -1, -1, 100, -1, 75, - -1, -1, -1, 106, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 116, 117, -1, -1, -1, 121, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 131, -1, + 5, 159, 7, 244, 248, 385, 386, 102, 3, 4, + 17, 16, 170, 18, 19, 20, 21, 17, 23, 24, + 25, 26, 27, 3, 4, 99, 100, 101, 18, 124, + 104, 3, 4, 107, 3, 4, 5, 3, 4, 134, + 3, 4, 5, 48, 3, 4, 5, 17, 3, 4, + 5, 56, 17, 34, 18, 19, 20, 21, 19, 23, + 24, 25, 26, 27, 3, 4, 5, 18, 3, 4, + 5, 3, 4, 5, 20, 80, 367, 18, 86, 86, + 75, 55, 85, 157, 48, 376, 86, 55, 18, 41, + 95, 96, 56, 67, 40, 97, 86, 102, 25, 194, + 7, 85, 176, 49, 48, 86, 86, 3, 4, 54, + 55, 55, 114, 115, 86, 120, 86, 86, 86, 124, + 86, 86, 85, 85, 31, 86, 85, 73, 75, 134, + 85, 95, 39, 40, 86, 86, 141, 44, 140, 86, + 86, 86, 49, 36, 7, 86, 85, 85, 55, 154, + 85, 375, 48, 85, 55, 7, 86, 50, 65, 383, + 374, 10, 69, 56, 369, 167, 67, 169, 382, 85, + 10, 78, 377, 55, 179, 68, 39, 40, 41, 86, + 62, 44, 370, 372, 86, 86, 49, 39, 40, 194, + 378, 380, 55, 86, 196, 85, 7, 49, 242, 579, + 244, 581, 65, 55, 86, 54, 69, 70, 210, 72, + 85, 74, 61, 65, 54, 78, 85, 69, 55, 224, + 85, 61, 227, 86, 226, 62, 78, 229, 39, 40, + 79, 80, 237, 238, 239, 85, 7, 86, 49, 79, + 80, 85, 20, 85, 55, 22, 86, 85, 406, 86, + 255, 3, 4, 5, 65, 85, 258, 85, 69, 85, + 418, 85, 40, 85, 338, 3, 4, 78, 39, 40, + 428, 49, 3, 4, 5, 86, 3, 4, 49, 437, + 85, 525, 287, 85, 55, 290, 85, 37, 85, 85, + 292, 3, 4, 5, 65, 73, 85, 371, 69, 85, + 50, 51, 52, 53, 85, 379, 56, 78, 86, 550, + 85, 81, 82, 83, 84, 86, 189, 190, 68, 3, + 4, 5, 327, 328, 329, 330, 183, 184, 185, 85, + 85, 85, 85, 75, 85, 250, 86, 85, 85, 85, + 85, 85, 85, 345, 346, 347, 348, 349, 350, 351, + 352, 85, 85, 355, 356, 357, 358, 359, 360, 361, + 362, 435, 86, 327, 328, 329, 330, 86, 370, 86, + 372, 86, 86, 86, 0, 86, 378, 86, 380, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 85, 505, 86, 86, 85, 397, 85, 399, 85, 85, + 85, 403, 404, 85, 85, 85, 408, 85, 85, 411, + 412, 413, 414, 415, 416, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 596, 86, + 598, 85, 600, 85, 85, 22, 85, 85, 450, 86, + 452, 28, 29, 455, 456, 86, 86, 86, 86, 461, + 462, 86, 86, 86, 466, 86, 86, 86, 470, 471, + 472, 473, 86, 86, 86, 86, 53, 86, 86, 86, + 86, 86, 86, 85, 85, 85, 85, 64, 85, 85, + 0, 86, 86, 86, 71, 86, 86, 86, 86, 85, + 5, 86, 504, 505, 506, 507, 508, 509, 86, 530, + 86, 86, 514, 85, 85, 85, 85, 519, 520, 86, + 86, 86, 85, 85, 499, 86, 85, 532, 85, 85, + 353, 86, 86, 86, 86, 537, 86, 539, 540, 541, + 117, 118, 86, 545, 85, 85, 85, -1, 86, 86, + 86, 86, 86, 86, 86, 86, 154, 562, -1, 119, + -1, -1, 564, 565, 566, 567, -1, -1, 570, 571, + -1, 573, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 583, 584, -1, 586, -1, 588, -1, 590, -1, + -1, -1, 594, 595, -1, -1, -1, -1, 603, 601, + 602, 606, -1, 605, 609, -1, 608, -1, -1, -1, + -1, -1, 614, 615, -1, -1, -1, -1, 623, 621, + 622, 626, -1, -1, 629, -1, 628, -1, -1, -1, + 632, 633, -1, -1, -1, -1, -1, 639, 640, 641, + 642, -1, 644, 645, 646, -1, -1, -1, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, -1, + -1, 663, -1, -1, 666, 667, -1, -1, 670, 1, + 2, 3, 4, 675, -1, -1, 678, 679, -1, -1, + -1, -1, -1, -1, 16, -1, 18, 19, 20, 21, + -1, 23, 24, 25, 26, 27, -1, -1, -1, 276, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 149, 150, -1, -1, - 153, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 176, 177, 178, 179, 180, 181, 182, - 183, 184, -1, 186, 187, 3, 4, 190, -1, 7, - 8, -1, -1, 11, 12, 13, -1, 15, -1, -1, - -1, -1, 20, -1, -1, -1, 24, -1, 26, -1, - -1, 29, -1, -1, 32, -1, 34, -1, -1, 37, - -1, -1, 40, 41, 42, -1, -1, 45, 46, -1, - -1, -1, -1, -1, -1, -1, 54, 240, -1, -1, - 58, 59, 60, -1, 62, 63, -1, 65, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 75, 76, -1, - -1, -1, -1, -1, -1, -1, 84, 3, 4, -1, - -1, 7, 8, -1, -1, 11, 12, 13, -1, 15, - -1, -1, -1, -1, 20, -1, -1, -1, 24, -1, - 26, -1, -1, 29, -1, -1, 32, -1, 34, -1, - -1, 37, -1, -1, 40, 41, 42, -1, -1, 45, - 46, -1, -1, 316, 317, 318, 319, -1, 54, -1, - -1, -1, 58, 59, 60, -1, 62, 63, -1, 65, - -1, -1, 335, -1, -1, -1, -1, -1, -1, 75, - 76, 344, -1, -1, -1, -1, -1, -1, 84, -1, - -1, -1, 3, 4, 357, -1, 7, 8, -1, -1, - 11, 12, 13, -1, 15, -1, -1, -1, -1, 20, - 373, 374, 375, 24, -1, 26, -1, -1, 29, -1, - -1, 32, -1, 34, -1, -1, 37, -1, -1, 40, - 41, 42, -1, -1, 45, 46, -1, -1, -1, -1, - -1, -1, -1, 54, -1, -1, -1, 58, 59, 60, - -1, 62, 63, -1, 65, -1, -1, -1, 3, 4, - -1, -1, 7, 8, 75, 76, 11, 12, 13, -1, - 15, -1, -1, 84, -1, 20, -1, -1, -1, 24, - -1, 26, -1, -1, 29, -1, -1, 32, -1, 34, - -1, -1, 37, -1, -1, 40, 41, 42, -1, -1, - 45, 46, -1, -1, -1, -1, -1, -1, -1, 54, - -1, -1, -1, 58, 59, 60, -1, 62, 63, -1, - 65, -1, -1, -1, -1, 488, 489, 490, 491, -1, - 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 513, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 48, 294, -1, -1, + -1, 298, -1, -1, 56, -1, -1, -1, -1, 306, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, -1, 3, 4, 5, -1, -1, -1, 80, -1, + -1, -1, 13, 14, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 95, 25, -1, 27, -1, -1, 30, + 102, -1, 33, -1, 35, -1, 353, 109, -1, -1, + 41, 42, -1, -1, -1, 46, 47, 119, 120, -1, + -1, -1, 124, -1, -1, -1, -1, 374, 375, -1, + 61, -1, 134, -1, 65, 382, 383, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 77, -1, -1, -1, + -1, -1, 154, -1, 156, 157, -1, -1, 160, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 183, 184, 185, 186, 187, 188, 189, 190, 191, + -1, 193, 194, -1, -1, 197, -1, 3, 4, 5, + -1, -1, 8, 9, -1, -1, 12, 13, 14, -1, + 16, -1, -1, -1, -1, 21, -1, -1, -1, 25, + -1, 27, -1, -1, 30, -1, -1, 33, -1, 35, + -1, -1, 38, -1, -1, 41, 42, 43, -1, -1, + 46, 47, -1, -1, -1, -1, -1, -1, 250, 55, + -1, -1, -1, 59, 60, 61, -1, 63, 64, 65, + -1, 67, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 77, 78, -1, -1, -1, -1, -1, -1, -1, + 86, -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, - -1, -1, -1, -1, -1, 568, -1, 570 + -1, -1, -1, -1, -1, -1, 553, -1, -1, 556, + -1, -1, 559, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 327, 328, 329, 330, -1, + -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, + -1, -1, 8, 9, 346, -1, 12, 13, 14, -1, + 16, -1, -1, 355, -1, 21, -1, -1, -1, 25, + -1, 27, -1, -1, 30, -1, 368, 33, -1, 35, + -1, -1, 38, -1, -1, 41, 42, 43, -1, -1, + 46, 47, 384, 385, 386, -1, -1, -1, -1, 55, + -1, -1, -1, 59, 60, 61, -1, 63, 64, 65, + -1, 67, -1, -1, 3, 4, 5, -1, -1, 8, + 9, 77, 78, 12, 13, 14, -1, 16, -1, -1, + 86, -1, 21, -1, -1, -1, 25, -1, 27, -1, + -1, 30, -1, -1, 33, -1, 35, -1, -1, 38, + -1, -1, 41, 42, 43, -1, -1, 46, 47, -1, + -1, -1, -1, -1, -1, -1, 55, -1, -1, -1, + 59, 60, 61, -1, 63, 64, 65, -1, 67, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 77, 78, + -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 499, 500, 501, + 502, 3, 4, 5, -1, -1, 8, 9, -1, -1, + 12, 13, 14, -1, 16, -1, -1, -1, -1, 21, + -1, -1, 524, 25, -1, 27, -1, -1, 30, -1, + -1, 33, -1, 35, -1, -1, 38, -1, -1, 41, + 42, 43, -1, -1, 46, 47, -1, -1, -1, -1, + -1, -1, -1, 55, -1, -1, -1, 59, 60, 61, + -1, 63, 64, 65, -1, 67, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 77, 78, 579, -1, 581 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/share/bison/bison.simple" @@ -1666,13 +1680,13 @@ yyreduce: switch (yyn) { case 6: -#line 195 "parser.yxx" +#line 196 "parser.yxx" { DCAST(EggData, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); } break; case 21: -#line 234 "parser.yxx" +#line 235 "parser.yxx" { string strval = yyvsp[-1]._string; EggCoordinateSystem *cs = new EggCoordinateSystem; @@ -1687,13 +1701,13 @@ case 21: } break; case 22: -#line 257 "parser.yxx" +#line 258 "parser.yxx" { yyval._egg = new EggComment(yyvsp[-3]._string, yyvsp[-1]._string); } break; case 23: -#line 271 "parser.yxx" +#line 272 "parser.yxx" { string tref_name = yyvsp[-2]._string; Filename filename = yyvsp[0]._string; @@ -1708,14 +1722,14 @@ case 23: } break; case 24: -#line 284 "parser.yxx" +#line 285 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); } break; case 26: -#line 300 "parser.yxx" +#line 301 "parser.yxx" { EggTexture *texture = DCAST(EggTexture, egg_stack.back()); string name = yyvsp[-3]._string; @@ -1815,13 +1829,16 @@ case 26: } else if (cmp_nocase_uh(name, "alpha_file") == 0) { texture->set_alpha_filename(strval); + } else if (cmp_nocase_uh(name, "alpha_file_channel") == 0) { + texture->set_alpha_file_channel((int)value); + } else { eggyywarning("Unsupported texture scalar: " + name); } } break; case 28: -#line 415 "parser.yxx" +#line 419 "parser.yxx" { string mref_name = yyvsp[-1]._string; EggMaterial *material = new EggMaterial(mref_name); @@ -1835,14 +1852,14 @@ case 28: } break; case 29: -#line 427 "parser.yxx" +#line 431 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); } break; case 31: -#line 443 "parser.yxx" +#line 447 "parser.yxx" { EggMaterial *material = DCAST(EggMaterial, egg_stack.back()); string name = yyvsp[-3]._string; @@ -1928,7 +1945,7 @@ case 31: } break; case 32: -#line 538 "parser.yxx" +#line 542 "parser.yxx" { string node_name = yyvsp[-3]._string; Filename filename = yyvsp[-1]._string; @@ -1937,7 +1954,7 @@ case 32: } break; case 33: -#line 545 "parser.yxx" +#line 549 "parser.yxx" { if (cmp_nocase_uh(yyvsp[-5]._string, "group") != 0) { eggyyerror("keyword 'group' expected"); @@ -1949,7 +1966,7 @@ case 33: } break; case 34: -#line 565 "parser.yxx" +#line 569 "parser.yxx" { string name = yyvsp[0]._string; EggVertexPool *pool = new EggVertexPool(name); @@ -1963,20 +1980,20 @@ case 34: } break; case 35: -#line 577 "parser.yxx" +#line 581 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); } break; case 38: -#line 605 "parser.yxx" +#line 609 "parser.yxx" { egg_stack.push_back(new EggVertex); } break; case 39: -#line 609 "parser.yxx" +#line 613 "parser.yxx" { PT(EggVertex) vtx = DCAST(EggVertex, egg_stack.back()); egg_stack.pop_back(); @@ -1985,7 +2002,7 @@ case 39: } break; case 40: -#line 616 "parser.yxx" +#line 620 "parser.yxx" { vertex_index = (int)yyvsp[0]._number; EggVertexPool *pool = DCAST(EggVertexPool, egg_stack.back()); @@ -2012,7 +2029,7 @@ case 40: } break; case 41: -#line 641 "parser.yxx" +#line 645 "parser.yxx" { PT(EggVertex) vtx = DCAST(EggVertex, egg_stack.back()); egg_stack.pop_back(); @@ -2024,31 +2041,31 @@ case 41: } break; case 42: -#line 662 "parser.yxx" +#line 666 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos(yyvsp[0]._number); } break; case 43: -#line 666 "parser.yxx" +#line 670 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos(LPoint2d(yyvsp[-1]._number, yyvsp[0]._number)); } break; case 44: -#line 670 "parser.yxx" +#line 674 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos(LPoint3d(yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); } break; case 45: -#line 674 "parser.yxx" +#line 678 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos(LPoint4d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); } break; case 49: -#line 681 "parser.yxx" +#line 685 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dxyzs. insert(EggMorphVertex(yyvsp[-5]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2058,7 +2075,7 @@ case 49: } break; case 50: -#line 689 "parser.yxx" +#line 693 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dxyzs. insert(EggMorphVertex(yyvsp[-4]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2068,13 +2085,13 @@ case 50: } break; case 51: -#line 708 "parser.yxx" +#line 712 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_uv(TexCoordd(yyvsp[-1]._number, yyvsp[0]._number)); } break; case 52: -#line 712 "parser.yxx" +#line 716 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_duvs. insert(EggMorphTexCoord(yyvsp[-4]._string, LVector2d(yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2084,7 +2101,7 @@ case 52: } break; case 53: -#line 720 "parser.yxx" +#line 724 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_duvs. insert(EggMorphTexCoord(yyvsp[-3]._string, LVector2d(yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2094,13 +2111,13 @@ case 53: } break; case 54: -#line 738 "parser.yxx" +#line 742 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_normal(Normald(yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); } break; case 55: -#line 742 "parser.yxx" +#line 746 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dnormals. insert(EggMorphNormal(yyvsp[-5]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2110,7 +2127,7 @@ case 55: } break; case 56: -#line 750 "parser.yxx" +#line 754 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dnormals. insert(EggMorphNormal(yyvsp[-4]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2120,13 +2137,13 @@ case 56: } break; case 57: -#line 768 "parser.yxx" +#line 772 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_color(Colorf(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); } break; case 58: -#line 772 "parser.yxx" +#line 776 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_drgbas. insert(EggMorphColor(yyvsp[-6]._string, LVector4f(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2136,7 +2153,7 @@ case 58: } break; case 59: -#line 780 "parser.yxx" +#line 784 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_drgbas. insert(EggMorphColor(yyvsp[-5]._string, LVector4f(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2146,21 +2163,21 @@ case 59: } break; case 60: -#line 798 "parser.yxx" +#line 802 "parser.yxx" { EggGroup *group = new EggGroup(yyvsp[0]._string); egg_stack.push_back(group); } break; case 61: -#line 803 "parser.yxx" +#line 807 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); } break; case 62: -#line 818 "parser.yxx" +#line 822 "parser.yxx" { EggGroup *group = new EggGroup(yyvsp[0]._string); group->set_group_type(EggGroup::GT_joint); @@ -2168,14 +2185,14 @@ case 62: } break; case 63: -#line 824 "parser.yxx" +#line 828 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); } break; case 64: -#line 839 "parser.yxx" +#line 843 "parser.yxx" { EggGroup *group = new EggGroup(yyvsp[0]._string); group->set_group_type(EggGroup::GT_instance); @@ -2183,18 +2200,19 @@ case 64: } break; case 65: -#line 845 "parser.yxx" +#line 849 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); } break; case 67: -#line 861 "parser.yxx" +#line 865 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string name = yyvsp[-3]._string; double value = yyvsp[-1]._number; + unsigned long ulong_value = yyvsp[-1]._ulong; string strval = yyvsp[-1]._string; if (cmp_nocase_uh(name, "fps") == 0) { @@ -2230,22 +2248,22 @@ case 67: group->set_depth_test_mode(m); } } else if (cmp_nocase_uh(name, "draw_order") == 0) { - group->set_draw_order((int)value); + group->set_draw_order(ulong_value); } else if (cmp_nocase_uh(name, "bin") == 0) { group->set_bin(strval); } else if (cmp_nocase_uh(name, "collide_mask") == 0) { - group->set_collide_mask((int)value); + group->set_collide_mask(group->get_collide_mask() | ulong_value); } else if (cmp_nocase_uh(name, "from_collide_mask") == 0) { - group->set_from_collide_mask((int)value); + group->set_from_collide_mask(group->get_from_collide_mask() | ulong_value); } else if (cmp_nocase_uh(name, "into_collide_mask") == 0) { - group->set_into_collide_mask((int)value); + group->set_into_collide_mask(group->get_into_collide_mask() | ulong_value); } else { eggyywarning("Unknown group scalar " + name); } } break; case 68: -#line 914 "parser.yxx" +#line 919 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string strval = yyvsp[-1]._string; @@ -2259,14 +2277,14 @@ case 68: } break; case 69: -#line 926 "parser.yxx" +#line 931 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); group->set_billboard_center(LPoint3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number)); } break; case 70: -#line 931 "parser.yxx" +#line 936 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string name = yyvsp[-4]._string; @@ -2275,15 +2293,30 @@ case 70: } break; case 71: -#line 938 "parser.yxx" +#line 943 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)yyvsp[-1]._number; - group->set_dcs_flag(value!=0); + group->set_dcs_type(value!=0 ? EggGroup::DC_default : EggGroup::DC_none); } break; case 72: -#line 944 "parser.yxx" +#line 949 "parser.yxx" +{ + // The special flavor of DCS, with { sync } or { nosync }. + EggGroup *group = DCAST(EggGroup, egg_stack.back()); + string strval = yyvsp[-1]._string; + + EggGroup::DCSType f = EggGroup::string_dcs_type(strval); + if (f == EggGroup::DC_none) { + eggyywarning("Unknown DCS type " + strval); + } else { + group->set_dcs_type(f); + } +} + break; +case 73: +#line 962 "parser.yxx" { // The traditional flavor of DART, with { 0 } or { 1 }. EggGroup *group = DCAST(EggGroup, egg_stack.back()); @@ -2291,8 +2324,8 @@ case 72: group->set_dart_type(value!=0 ? EggGroup::DT_default : EggGroup::DT_none); } break; -case 73: -#line 951 "parser.yxx" +case 74: +#line 969 "parser.yxx" { // The special flavor of DART, with { sync } or { nosync }. EggGroup *group = DCAST(EggGroup, egg_stack.back()); @@ -2306,46 +2339,53 @@ case 73: } } break; -case 74: -#line 964 "parser.yxx" +case 75: +#line 982 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)yyvsp[-1]._number; group->set_switch_flag(value!=0); } break; -case 75: -#line 970 "parser.yxx" +case 76: +#line 988 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string type = yyvsp[-1]._string; group->add_object_type(type); } break; -case 76: -#line 976 "parser.yxx" +case 77: +#line 994 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)yyvsp[-1]._number; group->set_model_flag(value!=0); } break; -case 77: -#line 982 "parser.yxx" +case 78: +#line 1000 "parser.yxx" +{ + EggGroup *group = DCAST(EggGroup, egg_stack.back()); + group->set_tag(yyvsp[-3]._string, yyvsp[-1]._string); +} + break; +case 79: +#line 1005 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)yyvsp[-1]._number; group->set_texlist_flag(value!=0); } break; -case 81: -#line 991 "parser.yxx" +case 83: +#line 1014 "parser.yxx" { DCAST(EggGroup, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); } break; -case 82: -#line 1005 "parser.yxx" +case 84: +#line 1028 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string strval = yyvsp[0]._string; @@ -2358,8 +2398,8 @@ case 82: } } break; -case 84: -#line 1028 "parser.yxx" +case 86: +#line 1051 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string strval = yyvsp[0]._string; @@ -2372,56 +2412,56 @@ case 84: } } break; -case 85: -#line 1050 "parser.yxx" +case 87: +#line 1073 "parser.yxx" { DCAST(EggGroup, egg_stack.back())->clear_transform(); } break; -case 95: -#line 1076 "parser.yxx" +case 97: +#line 1099 "parser.yxx" { DCAST(EggGroup, egg_stack.back())->add_translate(LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number)); } break; -case 96: -#line 1082 "parser.yxx" +case 98: +#line 1105 "parser.yxx" { DCAST(EggGroup, egg_stack.back())->add_rotx(yyvsp[-1]._number); } break; -case 97: -#line 1088 "parser.yxx" +case 99: +#line 1111 "parser.yxx" { DCAST(EggGroup, egg_stack.back())->add_roty(yyvsp[-1]._number); } break; -case 98: -#line 1094 "parser.yxx" +case 100: +#line 1117 "parser.yxx" { DCAST(EggGroup, egg_stack.back())->add_rotz(yyvsp[-1]._number); } break; -case 99: -#line 1100 "parser.yxx" +case 101: +#line 1123 "parser.yxx" { DCAST(EggGroup, egg_stack.back())->add_rotate(yyvsp[-4]._number, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number)); } break; -case 100: -#line 1106 "parser.yxx" +case 102: +#line 1129 "parser.yxx" { DCAST(EggGroup, egg_stack.back())->add_scale(LVecBase3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number)); } break; -case 101: -#line 1110 "parser.yxx" +case 103: +#line 1133 "parser.yxx" { DCAST(EggGroup, egg_stack.back())->add_uniform_scale(yyvsp[-1]._number); } break; -case 104: -#line 1125 "parser.yxx" +case 106: +#line 1148 "parser.yxx" { DCAST(EggGroup, egg_stack.back())->add_matrix (LMatrix4d(yyvsp[-15]._number, yyvsp[-14]._number, yyvsp[-13]._number, yyvsp[-12]._number, @@ -2430,46 +2470,46 @@ case 104: yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); } break; -case 105: -#line 1144 "parser.yxx" +case 107: +#line 1167 "parser.yxx" { matrix_2d = LMatrix3d::ident_mat(); } break; -case 106: -#line 1148 "parser.yxx" +case 108: +#line 1171 "parser.yxx" { DCAST(EggTexture, egg_stack.back())->set_transform(matrix_2d); } break; -case 112: -#line 1170 "parser.yxx" +case 114: +#line 1193 "parser.yxx" { matrix_2d *= LMatrix3d::translate_mat(yyvsp[-2]._number, yyvsp[-1]._number); } break; -case 113: -#line 1176 "parser.yxx" +case 115: +#line 1199 "parser.yxx" { matrix_2d *= LMatrix3d::rotate_mat(yyvsp[-1]._number); } break; -case 114: -#line 1182 "parser.yxx" +case 116: +#line 1205 "parser.yxx" { matrix_2d *= LMatrix3d::scale_mat(yyvsp[-2]._number, yyvsp[-1]._number); } break; -case 117: -#line 1195 "parser.yxx" +case 119: +#line 1218 "parser.yxx" { matrix_2d *= LMatrix3d(yyvsp[-8]._number, yyvsp[-7]._number, yyvsp[-6]._number, yyvsp[-5]._number, yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number); } break; -case 118: -#line 1212 "parser.yxx" +case 120: +#line 1235 "parser.yxx" { if (yyvsp[-2]._egg != (EggVertexPool *)NULL) { EggVertexPool *pool = DCAST(EggVertexPool, yyvsp[-2]._egg); @@ -2492,14 +2532,14 @@ case 118: } } break; -case 119: -#line 1245 "parser.yxx" +case 121: +#line 1268 "parser.yxx" { yyval._number = 1.0; } break; -case 120: -#line 1249 "parser.yxx" +case 122: +#line 1272 "parser.yxx" { string name = yyvsp[-3]._string; double value = yyvsp[-1]._number; @@ -2514,74 +2554,74 @@ case 120: yyval._number = result; } break; -case 122: -#line 1286 "parser.yxx" +case 124: +#line 1309 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); group->set_lod(EggSwitchConditionDistance(yyvsp[-8]._number, yyvsp[-7]._number, LPoint3d(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number))); } break; -case 123: -#line 1291 "parser.yxx" +case 125: +#line 1314 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); group->set_lod(EggSwitchConditionDistance(yyvsp[-9]._number, yyvsp[-8]._number, LPoint3d(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number), yyvsp[-7]._number)); } break; -case 124: -#line 1308 "parser.yxx" +case 126: +#line 1331 "parser.yxx" { egg_stack.push_back(new EggPolygon(yyvsp[0]._string)); } break; -case 125: -#line 1312 "parser.yxx" -{ - yyval._egg = egg_stack.back(); - egg_stack.pop_back(); -} - break; -case 126: -#line 1327 "parser.yxx" -{ - egg_stack.push_back(new EggPoint(yyvsp[0]._string)); -} - break; case 127: -#line 1331 "parser.yxx" +#line 1335 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); } break; case 128: -#line 1346 "parser.yxx" +#line 1350 "parser.yxx" { - egg_stack.push_back(new EggNurbsSurface(yyvsp[0]._string)); + egg_stack.push_back(new EggPoint(yyvsp[0]._string)); } break; case 129: -#line 1350 "parser.yxx" +#line 1354 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); } break; case 130: -#line 1365 "parser.yxx" +#line 1369 "parser.yxx" { - egg_stack.push_back(new EggNurbsCurve(yyvsp[0]._string)); + egg_stack.push_back(new EggNurbsSurface(yyvsp[0]._string)); } break; case 131: -#line 1369 "parser.yxx" +#line 1373 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); } break; -case 140: -#line 1393 "parser.yxx" +case 132: +#line 1388 "parser.yxx" +{ + egg_stack.push_back(new EggNurbsCurve(yyvsp[0]._string)); +} + break; +case 133: +#line 1392 "parser.yxx" +{ + yyval._egg = egg_stack.back(); + egg_stack.pop_back(); +} + break; +case 142: +#line 1416 "parser.yxx" { EggPrimitive *primitive = DCAST(EggPrimitive, egg_stack.back()); string name = yyvsp[-3]._string; @@ -2621,16 +2661,16 @@ case 140: } } break; -case 152: -#line 1453 "parser.yxx" +case 154: +#line 1476 "parser.yxx" { EggNurbsCurve *curve = DCAST(EggNurbsCurve, yyvsp[0]._egg); EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); nurbs->_curves_on_surface.push_back(curve); } break; -case 154: -#line 1460 "parser.yxx" +case 156: +#line 1483 "parser.yxx" { EggNurbsSurface *primitive = DCAST(EggNurbsSurface, egg_stack.back()); string name = yyvsp[-3]._string; @@ -2674,8 +2714,8 @@ case 154: } } break; -case 165: -#line 1524 "parser.yxx" +case 167: +#line 1547 "parser.yxx" { EggNurbsCurve *primitive = DCAST(EggNurbsCurve, egg_stack.back()); string name = yyvsp[-3]._string; @@ -2725,8 +2765,8 @@ case 165: } } break; -case 166: -#line 1583 "parser.yxx" +case 168: +#line 1606 "parser.yxx" { if (yyvsp[0]._egg != (EggTexture *)NULL) { EggTexture *texture = DCAST(EggTexture, yyvsp[0]._egg); @@ -2734,8 +2774,8 @@ case 166: } } break; -case 167: -#line 1600 "parser.yxx" +case 169: +#line 1623 "parser.yxx" { EggTexture *texture = NULL; @@ -2766,8 +2806,8 @@ case 167: DCAST(EggPrimitive, egg_stack.back())->set_texture(texture); } break; -case 168: -#line 1640 "parser.yxx" +case 170: +#line 1663 "parser.yxx" { if (yyvsp[0]._egg != (EggMaterial *)NULL) { EggMaterial *material = DCAST(EggMaterial, yyvsp[0]._egg); @@ -2775,14 +2815,14 @@ case 168: } } break; -case 169: -#line 1657 "parser.yxx" +case 171: +#line 1680 "parser.yxx" { DCAST(EggPrimitive, egg_stack.back())->set_normal(Normald(yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); } break; -case 170: -#line 1661 "parser.yxx" +case 172: +#line 1684 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_dnormals. insert(EggMorphNormal(yyvsp[-5]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2791,8 +2831,8 @@ case 170: } } break; -case 171: -#line 1669 "parser.yxx" +case 173: +#line 1692 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_dnormals. insert(EggMorphNormal(yyvsp[-4]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2801,14 +2841,14 @@ case 171: } } break; -case 172: -#line 1687 "parser.yxx" +case 174: +#line 1710 "parser.yxx" { DCAST(EggPrimitive, egg_stack.back())->set_color(Colorf(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); } break; -case 173: -#line 1691 "parser.yxx" +case 175: +#line 1714 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_drgbas. insert(EggMorphColor(yyvsp[-6]._string, LVector4f(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2817,8 +2857,8 @@ case 173: } } break; -case 174: -#line 1699 "parser.yxx" +case 176: +#line 1722 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_drgbas. insert(EggMorphColor(yyvsp[-5]._string, LVector4f(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2827,16 +2867,16 @@ case 174: } } break; -case 175: -#line 1717 "parser.yxx" +case 177: +#line 1740 "parser.yxx" { EggPrimitive *primitive = DCAST(EggPrimitive, egg_stack.back()); int value = (int)yyvsp[0]._number; primitive->set_bface_flag(value!=0); } break; -case 176: -#line 1733 "parser.yxx" +case 178: +#line 1756 "parser.yxx" { if (yyvsp[-2]._egg != (EggVertexPool *)NULL) { EggVertexPool *pool = DCAST(EggVertexPool, yyvsp[-2]._egg); @@ -2858,8 +2898,8 @@ case 176: } } break; -case 177: -#line 1764 "parser.yxx" +case 179: +#line 1787 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); int u_order = (int)yyvsp[-1]._number; @@ -2868,8 +2908,8 @@ case 177: nurbs->set_v_order(v_order); } break; -case 178: -#line 1782 "parser.yxx" +case 180: +#line 1805 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); PTA_double nums = yyvsp[0]._number_list; @@ -2880,8 +2920,8 @@ case 178: } } break; -case 179: -#line 1802 "parser.yxx" +case 181: +#line 1825 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); PTA_double nums = yyvsp[0]._number_list; @@ -2892,23 +2932,23 @@ case 179: } } break; -case 180: -#line 1822 "parser.yxx" +case 182: +#line 1845 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); nurbs->_trims.push_back(EggNurbsSurface::Trim()); } break; -case 182: -#line 1838 "parser.yxx" +case 184: +#line 1861 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); nassertr(!nurbs->_trims.empty(), 0); nurbs->_trims.back().push_back(EggNurbsSurface::Loop()); } break; -case 183: -#line 1844 "parser.yxx" +case 185: +#line 1867 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); nassertr(!nurbs->_trims.empty(), 0); @@ -2917,16 +2957,16 @@ case 183: nurbs->_trims.back().back().push_back(curve); } break; -case 184: -#line 1863 "parser.yxx" +case 186: +#line 1886 "parser.yxx" { EggNurbsCurve *nurbs = DCAST(EggNurbsCurve, egg_stack.back()); int order = (int)yyvsp[0]._number; nurbs->set_order(order); } break; -case 185: -#line 1879 "parser.yxx" +case 187: +#line 1902 "parser.yxx" { EggNurbsCurve *nurbs = DCAST(EggNurbsCurve, egg_stack.back()); PTA_double nums = yyvsp[0]._number_list; @@ -2937,82 +2977,82 @@ case 185: } } break; -case 186: -#line 1900 "parser.yxx" +case 188: +#line 1923 "parser.yxx" { EggTable *table = new EggTable(yyvsp[0]._string); table->set_table_type(EggTable::TT_table); egg_stack.push_back(table); } break; -case 187: -#line 1906 "parser.yxx" +case 189: +#line 1929 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); } break; -case 188: -#line 1922 "parser.yxx" +case 190: +#line 1945 "parser.yxx" { EggTable *table = new EggTable(yyvsp[0]._string); table->set_table_type(EggTable::TT_bundle); egg_stack.push_back(table); } break; -case 189: -#line 1928 "parser.yxx" +case 191: +#line 1951 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); } break; -case 191: -#line 1945 "parser.yxx" -{ - DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); -} - break; -case 192: -#line 1949 "parser.yxx" -{ - DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); -} - break; case 193: -#line 1953 "parser.yxx" +#line 1968 "parser.yxx" { DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); } break; case 194: -#line 1957 "parser.yxx" +#line 1972 "parser.yxx" { DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); } break; case 195: -#line 1961 "parser.yxx" +#line 1976 "parser.yxx" { DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); } break; case 196: -#line 1976 "parser.yxx" +#line 1980 "parser.yxx" +{ + DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); +} + break; +case 197: +#line 1984 "parser.yxx" +{ + DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); +} + break; +case 198: +#line 1999 "parser.yxx" { EggSAnimData *anim_data = new EggSAnimData(yyvsp[0]._string); egg_stack.push_back(anim_data); } break; -case 197: -#line 1981 "parser.yxx" +case 199: +#line 2004 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); } break; -case 199: -#line 1998 "parser.yxx" +case 201: +#line 2021 "parser.yxx" { EggSAnimData *anim_data = DCAST(EggSAnimData, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3025,28 +3065,28 @@ case 199: } } break; -case 200: -#line 2010 "parser.yxx" +case 202: +#line 2033 "parser.yxx" { DCAST(EggSAnimData, egg_stack.back())->set_data(yyvsp[-1]._number_list); } break; -case 201: -#line 2024 "parser.yxx" +case 203: +#line 2047 "parser.yxx" { EggXfmAnimData *anim_data = new EggXfmAnimData(yyvsp[0]._string); egg_stack.push_back(anim_data); } break; -case 202: -#line 2029 "parser.yxx" +case 204: +#line 2052 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); } break; -case 204: -#line 2046 "parser.yxx" +case 206: +#line 2069 "parser.yxx" { EggXfmAnimData *anim_data = DCAST(EggXfmAnimData, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3064,28 +3104,28 @@ case 204: } } break; -case 205: -#line 2063 "parser.yxx" +case 207: +#line 2086 "parser.yxx" { DCAST(EggXfmAnimData, egg_stack.back())->set_data(yyvsp[-1]._number_list); } break; -case 206: -#line 2077 "parser.yxx" +case 208: +#line 2100 "parser.yxx" { EggXfmSAnim *anim_group = new EggXfmSAnim(yyvsp[0]._string); egg_stack.push_back(anim_group); } break; -case 207: -#line 2082 "parser.yxx" +case 209: +#line 2105 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); } break; -case 209: -#line 2099 "parser.yxx" +case 211: +#line 2122 "parser.yxx" { EggXfmSAnim *anim_group = DCAST(EggXfmSAnim, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3101,38 +3141,38 @@ case 209: } } break; -case 210: -#line 2114 "parser.yxx" +case 212: +#line 2137 "parser.yxx" { DCAST(EggXfmSAnim, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); } break; -case 211: -#line 2129 "parser.yxx" -{ - yyval._number_list = PTA_double::empty_array(0); -} - break; -case 212: -#line 2133 "parser.yxx" -{ - yyval._number_list.push_back((double)yyvsp[0]._number); -} - break; case 213: -#line 2147 "parser.yxx" +#line 2152 "parser.yxx" { yyval._number_list = PTA_double::empty_array(0); } break; case 214: -#line 2151 "parser.yxx" +#line 2156 "parser.yxx" +{ + yyval._number_list.push_back((double)yyvsp[0]._number); +} + break; +case 215: +#line 2170 "parser.yxx" +{ + yyval._number_list = PTA_double::empty_array(0); +} + break; +case 216: +#line 2174 "parser.yxx" { yyval._number_list.push_back(yyvsp[0]._number); } break; -case 215: -#line 2165 "parser.yxx" +case 217: +#line 2188 "parser.yxx" { string name = yyvsp[0]._string; Textures::iterator vpi = textures.find(name); @@ -3144,8 +3184,8 @@ case 215: } } break; -case 216: -#line 2186 "parser.yxx" +case 218: +#line 2209 "parser.yxx" { string name = yyvsp[0]._string; Materials::iterator vpi = materials.find(name); @@ -3157,8 +3197,8 @@ case 216: } } break; -case 217: -#line 2207 "parser.yxx" +case 219: +#line 2230 "parser.yxx" { string name = yyvsp[0]._string; VertexPools::iterator vpi = vertex_pools.find(name); @@ -3170,72 +3210,94 @@ case 217: } } break; -case 218: -#line 2229 "parser.yxx" +case 220: +#line 2252 "parser.yxx" { eggyyerror("Name required."); yyval._string = ""; } break; -case 221: -#line 2258 "parser.yxx" +case 223: +#line 2281 "parser.yxx" { eggyyerror("String required."); yyval._string = ""; } break; -case 223: -#line 2274 "parser.yxx" +case 225: +#line 2297 "parser.yxx" { yyval._string = ""; } break; -case 225: -#line 2292 "parser.yxx" -{ - yyval._string = yyvsp[0]._string; -} - break; case 227: -#line 2309 "parser.yxx" -{ - yyval._string = ""; -} - break; -case 228: -#line 2313 "parser.yxx" +#line 2315 "parser.yxx" { yyval._string = yyvsp[0]._string; } break; -case 229: -#line 2329 "parser.yxx" +case 228: +#line 2319 "parser.yxx" { yyval._string = yyvsp[0]._string; } break; case 230: -#line 2333 "parser.yxx" +#line 2336 "parser.yxx" { - yyval._string = yyvsp[-1]._string + "\n" + yyvsp[0]._string; + yyval._string = ""; +} + break; +case 231: +#line 2340 "parser.yxx" +{ + yyval._string = yyvsp[0]._string; } break; case 232: -#line 2358 "parser.yxx" +#line 2356 "parser.yxx" { - yyval._number = yyvsp[0]._number; yyval._string = yyvsp[0]._string; } break; case 233: -#line 2363 "parser.yxx" +#line 2360 "parser.yxx" { - yyval._number = 0.0; + yyval._string = yyvsp[-1]._string + "\n" + yyvsp[0]._string; +} + break; +case 235: +#line 2375 "parser.yxx" +{ + yyval._number = yyvsp[0]._ulong; +} + break; +case 236: +#line 2390 "parser.yxx" +{ + yyval._number = yyvsp[0]._number; + yyval._ulong = (unsigned long)yyvsp[0]._number; yyval._string = yyvsp[0]._string; } break; -case 234: -#line 2379 "parser.yxx" +case 237: +#line 2396 "parser.yxx" +{ + yyval._number = yyvsp[0]._ulong; + yyval._ulong = yyvsp[0]._ulong; + yyval._string = yyvsp[0]._string; +} + break; +case 238: +#line 2402 "parser.yxx" +{ + yyval._number = 0.0; + yyval._ulong = 0; + yyval._string = yyvsp[0]._string; +} + break; +case 239: +#line 2419 "parser.yxx" { int i = (int)yyvsp[0]._number; if ((double)i != yyvsp[0]._number) { @@ -3244,6 +3306,12 @@ case 234: } } break; +case 240: +#line 2427 "parser.yxx" +{ + yyval._number = yyvsp[0]._ulong; +} + break; } #line 705 "/usr/share/bison/bison.simple" @@ -3477,4 +3545,4 @@ yyreturn: #endif return yyresult; } -#line 2390 "parser.yxx" +#line 2434 "parser.yxx" diff --git a/panda/src/egg/parser.h.prebuilt b/panda/src/egg/parser.h.prebuilt index 3170676903..3bb95b734b 100644 --- a/panda/src/egg/parser.h.prebuilt +++ b/panda/src/egg/parser.h.prebuilt @@ -2,85 +2,87 @@ # define BISON_Y_TAB_H # define NUMBER 257 -# define STRING 258 -# define BEZIERCURVE 259 -# define BFACE 260 -# define BILLBOARD 261 -# define BILLBOARDCENTER 262 -# define BUNDLE 263 -# define CLOSED 264 -# define COLLIDE 265 -# define COMMENT 266 -# define COORDSYSTEM 267 -# define CV 268 -# define DART 269 -# define DNORMAL 270 -# define DRGBA 271 -# define DUV 272 -# define DXYZ 273 -# define DCS 274 -# define DISTANCE 275 -# define DTREF 276 -# define DYNAMICVERTEXPOOL 277 -# define EXTERNAL_FILE 278 -# define FLIGHT 279 -# define GROUP 280 -# define HIP 281 -# define INTANGENT 282 -# define JOINT 283 -# define KNOTS 284 -# define INCLUDE 285 -# define INSTANCE 286 -# define LOOP 287 -# define MATERIAL 288 -# define MATRIX3 289 -# define MATRIX4 290 -# define MODEL 291 -# define MREF 292 -# define NORMAL 293 -# define NURBSCURVE 294 -# define NURBSSURFACE 295 -# define OBJECTTYPE 296 -# define ORDER 297 -# define OUTTANGENT 298 -# define POINTLIGHT 299 -# define POLYGON 300 -# define REF 301 -# define RGBA 302 -# define ROTATE 303 -# define ROTX 304 -# define ROTY 305 -# define ROTZ 306 -# define SANIM 307 -# define SCALAR 308 -# define SCALE 309 -# define SEQUENCE 310 -# define SHADING 311 -# define SWITCH 312 -# define SWITCHCONDITION 313 -# define TABLE 314 -# define TABLE_V 315 -# define TEXLIST 316 -# define TEXTURE 317 -# define TLENGTHS 318 -# define TRANSFORM 319 -# define TRANSLATE 320 -# define TREF 321 -# define TRIM 322 -# define TXT 323 -# define UKNOTS 324 -# define UV 325 -# define VKNOTS 326 -# define VERTEX 327 -# define VERTEXANIM 328 -# define VERTEXPOOL 329 -# define VERTEXREF 330 -# define XFMANIM 331 -# define XFMSANIM 332 -# define START_EGG 333 -# define START_GROUP_BODY 334 -# define START_TEXTURE_BODY 335 -# define START_PRIMITIVE_BODY 336 +# define ULONG 258 +# define STRING 259 +# define BEZIERCURVE 260 +# define BFACE 261 +# define BILLBOARD 262 +# define BILLBOARDCENTER 263 +# define BUNDLE 264 +# define CLOSED 265 +# define COLLIDE 266 +# define COMMENT 267 +# define COORDSYSTEM 268 +# define CV 269 +# define DART 270 +# define DNORMAL 271 +# define DRGBA 272 +# define DUV 273 +# define DXYZ 274 +# define DCS 275 +# define DISTANCE 276 +# define DTREF 277 +# define DYNAMICVERTEXPOOL 278 +# define EXTERNAL_FILE 279 +# define FLIGHT 280 +# define GROUP 281 +# define HIP 282 +# define INTANGENT 283 +# define JOINT 284 +# define KNOTS 285 +# define INCLUDE 286 +# define INSTANCE 287 +# define LOOP 288 +# define MATERIAL 289 +# define MATRIX3 290 +# define MATRIX4 291 +# define MODEL 292 +# define MREF 293 +# define NORMAL 294 +# define NURBSCURVE 295 +# define NURBSSURFACE 296 +# define OBJECTTYPE 297 +# define ORDER 298 +# define OUTTANGENT 299 +# define POINTLIGHT 300 +# define POLYGON 301 +# define REF 302 +# define RGBA 303 +# define ROTATE 304 +# define ROTX 305 +# define ROTY 306 +# define ROTZ 307 +# define SANIM 308 +# define SCALAR 309 +# define SCALE 310 +# define SEQUENCE 311 +# define SHADING 312 +# define SWITCH 313 +# define SWITCHCONDITION 314 +# define TABLE 315 +# define TABLE_V 316 +# define TAG 317 +# define TEXLIST 318 +# define TEXTURE 319 +# define TLENGTHS 320 +# define TRANSFORM 321 +# define TRANSLATE 322 +# define TREF 323 +# define TRIM 324 +# define TXT 325 +# define UKNOTS 326 +# define UV 327 +# define VKNOTS 328 +# define VERTEX 329 +# define VERTEXANIM 330 +# define VERTEXPOOL 331 +# define VERTEXREF 332 +# define XFMANIM 333 +# define XFMSANIM 334 +# define START_EGG 335 +# define START_GROUP_BODY 336 +# define START_TEXTURE_BODY 337 +# define START_PRIMITIVE_BODY 338 extern YYSTYPE eggyylval; diff --git a/panda/src/egg/parser.yxx b/panda/src/egg/parser.yxx index 5a7c6a804c..ecf80693d6 100644 --- a/panda/src/egg/parser.yxx +++ b/panda/src/egg/parser.yxx @@ -125,7 +125,7 @@ egg_cleanup_parser() { %token NURBSCURVE NURBSSURFACE OBJECTTYPE ORDER %token OUTTANGENT POINTLIGHT POLYGON REF RGBA ROTATE ROTX ROTY ROTZ %token SANIM SCALAR SCALE SEQUENCE SHADING SWITCH SWITCHCONDITION -%token TABLE TABLE_V TEXLIST TEXTURE TLENGTHS TRANSFORM TRANSLATE +%token TABLE TABLE_V TAG TEXLIST TEXTURE TLENGTHS TRANSFORM TRANSLATE %token TREF TRIM TXT UKNOTS UV VKNOTS VERTEX VERTEXANIM %token VERTEXPOOL VERTEXREF %token XFMANIM XFMSANIM @@ -995,6 +995,11 @@ group_body: EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)$4; group->set_model_flag(value!=0); +} + | group_body TAG optional_name '{' repeated_string '}' +{ + EggGroup *group = DCAST(EggGroup, egg_stack.back()); + group->set_tag($3, $5); } | group_body TEXLIST '{' integer '}' { diff --git a/panda/src/egg2pg/eggLoader.cxx b/panda/src/egg2pg/eggLoader.cxx index df61c4989e..e2ec44a03b 100644 --- a/panda/src/egg2pg/eggLoader.cxx +++ b/panda/src/egg2pg/eggLoader.cxx @@ -1467,6 +1467,12 @@ create_group_arc(EggGroup *egg_group, PandaNode *parent, PandaNode *node) { _decals.insert(node); } + // Copy all the tags from the group onto the node. + EggGroup::TagData::const_iterator ti; + for (ti = egg_group->tag_begin(); ti != egg_group->tag_end(); ++ti) { + node->set_tag((*ti).first, (*ti).second); + } + // If the group specified some property that should propagate down // to the leaves, we have to remember this node and apply the // property later, after we've created the actual geometry. diff --git a/panda/src/pgraph/nodePath.I b/panda/src/pgraph/nodePath.I index c09c154818..b737c40bf8 100644 --- a/panda/src/pgraph/nodePath.I +++ b/panda/src/pgraph/nodePath.I @@ -1124,6 +1124,65 @@ compare_to(const NodePath &other) const { return _head - other._head; } +//////////////////////////////////////////////////////////////////// +// Function: NodePath::set_tag +// Access: Published +// Description: Associates a user-defined value with a user-defined +// key which is stored on the node. This value has no +// meaning to Panda; but it is stored indefinitely on +// the node until it is requested again. +// +// Each unique key stores a different string value. +// There is no effective limit on the number of +// different keys that may be stored or on the length of +// any one key's value. +//////////////////////////////////////////////////////////////////// +INLINE void NodePath:: +set_tag(const string &key, const string &value) { + nassertv_always(!is_empty()); + node()->set_tag(key, value); +} + +//////////////////////////////////////////////////////////////////// +// Function: NodePath::get_tag +// Access: Published +// Description: Retrieves the user-defined value that was previously +// set on this node for the particular key, if any. If +// no value has been previously set, returns the empty +// string. +//////////////////////////////////////////////////////////////////// +INLINE string NodePath:: +get_tag(const string &key) const { + nassertr_always(!is_empty(), string()); + return node()->get_tag(key); +} + +//////////////////////////////////////////////////////////////////// +// Function: NodePath::has_tag +// Access: Published +// Description: Returns true if a value has been defined on this node +// for the particular key (even if that value is the +// empty string), or false if no value has been set. +//////////////////////////////////////////////////////////////////// +INLINE bool NodePath:: +has_tag(const string &key) const { + nassertr_always(!is_empty(), false); + return node()->has_tag(key); +} + +//////////////////////////////////////////////////////////////////// +// Function: NodePath::clear_tag +// Access: Published +// Description: Removes the value defined for this key on this +// particular node. After a call to clear_tag(), +// has_tag() will return false for the indicated key. +//////////////////////////////////////////////////////////////////// +INLINE void NodePath:: +clear_tag(const string &key) { + nassertv_always(!is_empty()); + node()->clear_tag(key); +} + INLINE ostream &operator << (ostream &out, const NodePath &node_path) { node_path.output(out); diff --git a/panda/src/pgraph/nodePath.h b/panda/src/pgraph/nodePath.h index 4f6f6c6cec..305422a7d0 100644 --- a/panda/src/pgraph/nodePath.h +++ b/panda/src/pgraph/nodePath.h @@ -519,6 +519,11 @@ PUBLISHED: int flatten_medium(); int flatten_strong(); + INLINE void set_tag(const string &key, const string &value); + INLINE string get_tag(const string &key) const; + INLINE bool has_tag(const string &key) const; + INLINE void clear_tag(const string &key); + bool write_bam_file(const string &filename) const; private: diff --git a/panda/src/pgraph/pandaNode.I b/panda/src/pgraph/pandaNode.I index 0d336600ff..dcaae24f96 100644 --- a/panda/src/pgraph/pandaNode.I +++ b/panda/src/pgraph/pandaNode.I @@ -137,6 +137,7 @@ CData(const PandaNode::CData ©) : _state(copy._state), _effects(copy._effects), _transform(copy._transform), + _tag_data(copy._tag_data), _draw_mask(copy._draw_mask), _fixed_internal_bound(copy._fixed_internal_bound) { @@ -657,6 +658,72 @@ clear_transform() { transform_changed(); } +//////////////////////////////////////////////////////////////////// +// Function: PandaNode::set_tag +// Access: Published +// Description: Associates a user-defined value with a user-defined +// key which is stored on the node. This value has no +// meaning to Panda; but it is stored indefinitely on +// the node until it is requested again. +// +// Each unique key stores a different string value. +// There is no effective limit on the number of +// different keys that may be stored or on the length of +// any one key's value. +//////////////////////////////////////////////////////////////////// +INLINE void PandaNode:: +set_tag(const string &key, const string &value) { + CDWriter cdata(_cycler); + cdata->_tag_data[key] = value; +} + +//////////////////////////////////////////////////////////////////// +// Function: PandaNode::get_tag +// Access: Published +// Description: Retrieves the user-defined value that was previously +// set on this node for the particular key, if any. If +// no value has been previously set, returns the empty +// string. +//////////////////////////////////////////////////////////////////// +INLINE string PandaNode:: +get_tag(const string &key) const { + CDReader cdata(_cycler); + TagData::const_iterator ti; + ti = cdata->_tag_data.find(key); + if (ti != cdata->_tag_data.end()) { + return (*ti).second; + } + return string(); +} + +//////////////////////////////////////////////////////////////////// +// Function: PandaNode::has_tag +// Access: Published +// Description: Returns true if a value has been defined on this node +// for the particular key (even if that value is the +// empty string), or false if no value has been set. +//////////////////////////////////////////////////////////////////// +INLINE bool PandaNode:: +has_tag(const string &key) const { + CDReader cdata(_cycler); + TagData::const_iterator ti; + ti = cdata->_tag_data.find(key); + return (ti != cdata->_tag_data.end()); +} + +//////////////////////////////////////////////////////////////////// +// Function: PandaNode::clear_tag +// Access: Published +// Description: Removes the value defined for this key on this +// particular node. After a call to clear_tag(), +// has_tag() will return false for the indicated key. +//////////////////////////////////////////////////////////////////// +INLINE void PandaNode:: +clear_tag(const string &key) { + CDWriter cdata(_cycler); + cdata->_tag_data.erase(key); +} + //////////////////////////////////////////////////////////////////// // Function: PandaNode::ls // Access: Published diff --git a/panda/src/pgraph/pandaNode.cxx b/panda/src/pgraph/pandaNode.cxx index 9f3d8e4d6a..64288f918d 100644 --- a/panda/src/pgraph/pandaNode.cxx +++ b/panda/src/pgraph/pandaNode.cxx @@ -134,6 +134,13 @@ write_datagram(BamWriter *manager, Datagram &dg) const { write_up_list(_up, manager, dg); write_down_list(_down, manager, dg); write_down_list(_stashed, manager, dg); + + dg.add_uint32(_tag_data.size()); + TagData::const_iterator ti; + for (ti = _tag_data.begin(); ti != _tag_data.end(); ++ti) { + dg.add_string((*ti).first); + dg.add_string((*ti).second); + } } //////////////////////////////////////////////////////////////////// @@ -192,6 +199,16 @@ fillin(DatagramIterator &scan, BamReader *manager) { fillin_up_list(_up, scan, manager); fillin_down_list(_down, scan, manager); fillin_down_list(_stashed, scan, manager); + + // Read in the tag list. + if (manager->get_file_minor_ver() >= 4) { + int num_tags = scan.get_uint32(); + for (int i = 0; i < num_tags; i++) { + string key = scan.get_string(); + string value = scan.get_string(); + _tag_data[key] = value; + } + } } //////////////////////////////////////////////////////////////////// @@ -1242,6 +1259,57 @@ copy_children(PandaNode *other) { } } +//////////////////////////////////////////////////////////////////// +// Function: PandaNode::copy_tags +// Access: Published +// Description: Copies all of the tags stored on the other node onto +// this node. If a particular tag exists on both nodes, +// the contents of this node's value is replaced by that +// of the other. +//////////////////////////////////////////////////////////////////// +void PandaNode:: +copy_tags(PandaNode *other) { + if (other == this) { + // Trivial. + return; + } + + CDWriter cdataw(_cycler); + CDReader cdatar(other->_cycler); + TagData::const_iterator ti; + for (ti = cdatar->_tag_data.begin(); + ti != cdatar->_tag_data.end(); + ++ti) { + cdataw->_tag_data[(*ti).first] = (*ti).second; + } +} + +//////////////////////////////////////////////////////////////////// +// Function: PandaNode::list_tags +// Access: Published +// Description: Writes a list of all the tag keys assigned to the +// node to the indicated stream. Writes one instance of +// the separator following each key (but does not write +// a terminal separator). The value associated with +// each key is not written. +// +// This is mainly for the benefit of the realtime user, +// to see the list of all of the associated tag keys. +//////////////////////////////////////////////////////////////////// +void PandaNode:: +list_tags(ostream &out, const string &separator) const { + CDReader cdata(_cycler); + if (!cdata->_tag_data.empty()) { + TagData::const_iterator ti = cdata->_tag_data.begin(); + out << (*ti).first; + ++ti; + while (ti != cdata->_tag_data.end()) { + out << separator << (*ti).first; + ++ti; + } + } +} + //////////////////////////////////////////////////////////////////// // Function: PandaNode::output // Access: Published, Virtual @@ -1261,6 +1329,11 @@ void PandaNode:: write(ostream &out, int indent_level) const { indent(out, indent_level) << *this; CDReader cdata(_cycler); + if (!cdata->_tag_data.empty()) { + out << " ["; + list_tags(out, " "); + out << "]"; + } if (!cdata->_transform->is_identity()) { out << " " << *cdata->_transform; } @@ -1984,6 +2057,11 @@ void PandaNode:: r_list_descendants(ostream &out, int indent_level) const { CDReader cdata(_cycler); indent(out, indent_level) << *this; + if (!cdata->_tag_data.empty()) { + out << " ["; + list_tags(out, " "); + out << "]"; + } if (!cdata->_transform->is_identity()) { out << " " << *cdata->_transform; } diff --git a/panda/src/pgraph/pandaNode.h b/panda/src/pgraph/pandaNode.h index 152dc50fbc..12db9995d7 100644 --- a/panda/src/pgraph/pandaNode.h +++ b/panda/src/pgraph/pandaNode.h @@ -150,6 +150,13 @@ PUBLISHED: INLINE const TransformState *get_transform() const; INLINE void clear_transform(); + INLINE void set_tag(const string &key, const string &value); + INLINE string get_tag(const string &key) const; + INLINE bool has_tag(const string &key) const; + INLINE void clear_tag(const string &key); + void copy_tags(PandaNode *other); + void list_tags(ostream &out, const string &separator = "\n") const; + INLINE void set_draw_mask(DrawMask mask); INLINE DrawMask get_draw_mask() const; @@ -262,6 +269,11 @@ private: // each NodePathComponent destructs, it removes itself from this // set. typedef pset Paths; + + // This is used to maintain a table of keyed data on each node, for + // the user's purposes. + typedef pmap TagData; + // This is the data that must be cycled between pipeline stages. class EXPCL_PANDA CData : public CycleData { @@ -295,6 +307,8 @@ private: CPT(RenderEffects) _effects; CPT(TransformState) _transform; + TagData _tag_data; + // This is the draw_mask of this particular node. DrawMask _draw_mask; diff --git a/panda/src/pgraph/sceneGraphReducer.cxx b/panda/src/pgraph/sceneGraphReducer.cxx index 4c2abd85f3..d0d3d05d09 100644 --- a/panda/src/pgraph/sceneGraphReducer.cxx +++ b/panda/src/pgraph/sceneGraphReducer.cxx @@ -440,10 +440,12 @@ do_flatten_child(PandaNode *grandparent_node, PandaNode *parent_node, if (new_parent != child_node) { new_parent->steal_children(child_node); + new_parent->copy_tags(child_node); } if (new_parent != parent_node) { grandparent_node->replace_child(parent_node, new_parent); + new_parent->copy_tags(parent_node); } return true; @@ -456,7 +458,7 @@ do_flatten_child(PandaNode *grandparent_node, PandaNode *parent_node, // together into a single node, leaving the resulting // node attached to the parent. // -// Returns a pointer to a PandaNode the reflects the +// Returns a pointer to a PandaNode that reflects the // combined node (which may be either of the source nodes, // or a new node altogether) if the siblings are // successfully collapsed, or NULL if we chickened out. @@ -483,16 +485,20 @@ do_flatten_siblings(PandaNode *parent_node, PandaNode *child1, if (new_child == child1) { new_child->steal_children(child2); parent_node->remove_child(child2); + new_child->copy_tags(child2); } else if (new_child == child2) { new_child->steal_children(child1); parent_node->remove_child(child1); + new_child->copy_tags(child1); } else { new_child->steal_children(child1); new_child->steal_children(child2); parent_node->remove_child(child2); parent_node->replace_child(child1, new_child); + new_child->copy_tags(child1); + new_child->copy_tags(child2); } return new_child; diff --git a/panda/src/putil/bam.h b/panda/src/putil/bam.h index f66ee6fa0b..b9b2c00aa0 100644 --- a/panda/src/putil/bam.h +++ b/panda/src/putil/bam.h @@ -34,10 +34,11 @@ static const unsigned short _bam_major_ver = 4; // Bumped to major version 3 on 12/8/00 to change float64's to float32's. // Bumped to major version 4 on 4/10/02 to store new scene graph. -static const unsigned short _bam_minor_ver = 3; +static const unsigned short _bam_minor_ver = 4; // Bumped to minor version 1 on 4/10/03 to add CullFaceAttrib::reverse. // Bumped to minor version 2 on 4/12/03 to add num_components to texture. -// Bumped to minor version 3 on 4/15/03 to add ImageBuffer::_alpha_file_channel. +// Bumped to minor version 3 on 4/15/03 to add ImageBuffer::_alpha_file_channel +// Bumped to minor version 4 on 6/12/03 to add PandaNode::set_tag(). #endif