00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #define YYBISON 1
00038
00039
00040 #define YYPURE 1
00041
00042
00043 #define YYLSP_NEEDED 0
00044
00045
00046
00047 #define yyparse cssyyparse
00048 #define yylex cssyylex
00049 #define yyerror cssyyerror
00050 #define yylval cssyylval
00051 #define yychar cssyychar
00052 #define yydebug cssyydebug
00053 #define yynerrs cssyynerrs
00054
00055
00056
00057 #ifndef YYTOKENTYPE
00058 # define YYTOKENTYPE
00059
00060
00061 enum yytokentype {
00062 S = 258,
00063 SGML_CD = 259,
00064 INCLUDES = 260,
00065 DASHMATCH = 261,
00066 BEGINSWITH = 262,
00067 ENDSWITH = 263,
00068 CONTAINS = 264,
00069 STRING = 265,
00070 IDENT = 266,
00071 HASH = 267,
00072 IMPORT_SYM = 268,
00073 PAGE_SYM = 269,
00074 MEDIA_SYM = 270,
00075 FONT_FACE_SYM = 271,
00076 CHARSET_SYM = 272,
00077 NAMESPACE_SYM = 273,
00078 KHTML_RULE_SYM = 274,
00079 KHTML_DECLS_SYM = 275,
00080 KHTML_VALUE_SYM = 276,
00081 IMPORTANT_SYM = 277,
00082 QEMS = 278,
00083 EMS = 279,
00084 EXS = 280,
00085 PXS = 281,
00086 CMS = 282,
00087 MMS = 283,
00088 INS = 284,
00089 PTS = 285,
00090 PCS = 286,
00091 DEGS = 287,
00092 RADS = 288,
00093 GRADS = 289,
00094 MSECS = 290,
00095 SECS = 291,
00096 HERZ = 292,
00097 KHERZ = 293,
00098 DIMEN = 294,
00099 PERCENTAGE = 295,
00100 NUMBER = 296,
00101 URI = 297,
00102 FUNCTION = 298,
00103 UNICODERANGE = 299
00104 };
00105 #endif
00106 #define S 258
00107 #define SGML_CD 259
00108 #define INCLUDES 260
00109 #define DASHMATCH 261
00110 #define BEGINSWITH 262
00111 #define ENDSWITH 263
00112 #define CONTAINS 264
00113 #define STRING 265
00114 #define IDENT 266
00115 #define HASH 267
00116 #define IMPORT_SYM 268
00117 #define PAGE_SYM 269
00118 #define MEDIA_SYM 270
00119 #define FONT_FACE_SYM 271
00120 #define CHARSET_SYM 272
00121 #define NAMESPACE_SYM 273
00122 #define KHTML_RULE_SYM 274
00123 #define KHTML_DECLS_SYM 275
00124 #define KHTML_VALUE_SYM 276
00125 #define IMPORTANT_SYM 277
00126 #define QEMS 278
00127 #define EMS 279
00128 #define EXS 280
00129 #define PXS 281
00130 #define CMS 282
00131 #define MMS 283
00132 #define INS 284
00133 #define PTS 285
00134 #define PCS 286
00135 #define DEGS 287
00136 #define RADS 288
00137 #define GRADS 289
00138 #define MSECS 290
00139 #define SECS 291
00140 #define HERZ 292
00141 #define KHERZ 293
00142 #define DIMEN 294
00143 #define PERCENTAGE 295
00144 #define NUMBER 296
00145 #define URI 297
00146 #define FUNCTION 298
00147 #define UNICODERANGE 299
00148
00149
00150
00151
00152
00153 #line 1 "parser.y"
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178 #ifdef HAVE_CONFIG_H
00179 #include <config.h>
00180 #endif
00181 #include <string.h>
00182 #include <stdlib.h>
00183
00184 #include <dom/dom_string.h>
00185 #include <xml/dom_docimpl.h>
00186 #include <css/css_ruleimpl.h>
00187 #include <css/css_stylesheetimpl.h>
00188 #include <css/css_valueimpl.h>
00189 #include <misc/htmlhashes.h>
00190 #include "cssparser.h"
00191
00192 #include <assert.h>
00193 #include <kdebug.h>
00194
00195
00196 using namespace DOM;
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206 #undef __inline
00207 #define __inline
00208 #include "cssproperties.c"
00209 #include "cssvalues.c"
00210 #undef __inline
00211
00212 int DOM::getPropertyID(const char *tagStr, int len)
00213 {
00214 const struct props *propsPtr = findProp(tagStr, len);
00215 if (!propsPtr)
00216 return 0;
00217
00218 return propsPtr->id;
00219 }
00220
00221 static inline int getValueID(const char *tagStr, int len)
00222 {
00223 const struct css_value *val = findValue(tagStr, len);
00224 if (!val)
00225 return 0;
00226
00227 return val->id;
00228 }
00229
00230
00231 #define YYDEBUG 0
00232 #define YYMAXDEPTH 0
00233 #define YYPARSE_PARAM parser
00234
00235
00236
00237 #ifndef YYDEBUG
00238 # define YYDEBUG 0
00239 #endif
00240
00241
00242 #ifdef YYERROR_VERBOSE
00243 # undef YYERROR_VERBOSE
00244 # define YYERROR_VERBOSE 1
00245 #else
00246 # define YYERROR_VERBOSE 0
00247 #endif
00248
00249 #ifndef YYSTYPE
00250 #line 85 "parser.y"
00251 typedef union {
00252 CSSRuleImpl *rule;
00253 CSSSelector *selector;
00254 QPtrList<CSSSelector> *selectorList;
00255 bool ok;
00256 MediaListImpl *mediaList;
00257 CSSMediaRuleImpl *mediaRule;
00258 CSSRuleListImpl *ruleList;
00259 ParseString string;
00260 float val;
00261 int prop_id;
00262 unsigned int attribute;
00263 unsigned int element;
00264 unsigned int ns;
00265 CSSSelector::Relation relation;
00266 bool b;
00267 char tok;
00268 Value value;
00269 ValueList *valueList;
00270 } yystype;
00271
00272 #line 273 "parser.tab.c"
00273 # define YYSTYPE yystype
00274 # define YYSTYPE_IS_TRIVIAL 1
00275 #endif
00276
00277 #ifndef YYLTYPE
00278 typedef struct yyltype
00279 {
00280 int first_line;
00281 int first_column;
00282 int last_line;
00283 int last_column;
00284 } yyltype;
00285 # define YYLTYPE yyltype
00286 # define YYLTYPE_IS_TRIVIAL 1
00287 #endif
00288
00289
00290 #line 106 "parser.y"
00291
00292
00293 static inline int cssyyerror(const char *x ) {
00294 #ifdef CSS_DEBUG
00295 qDebug( "%s", x );
00296 #else
00297 Q_UNUSED( x );
00298 #endif
00299 return 1;
00300 }
00301
00302 static int cssyylex( YYSTYPE *yylval ) {
00303 return CSSParser::current()->lex( yylval );
00304 }
00305
00306
00307
00308
00309
00310 #line 311 "parser.tab.c"
00311
00312 #if ! defined (yyoverflow) || YYERROR_VERBOSE
00313
00314
00315
00316 # if YYSTACK_USE_ALLOCA
00317 # define YYSTACK_ALLOC alloca
00318 # else
00319 # ifndef YYSTACK_USE_ALLOCA
00320 # if defined (alloca) || defined (_ALLOCA_H)
00321 # define YYSTACK_ALLOC alloca
00322 # else
00323 # ifdef __GNUC__
00324 # define YYSTACK_ALLOC __builtin_alloca
00325 # endif
00326 # endif
00327 # endif
00328 # endif
00329
00330 # ifdef YYSTACK_ALLOC
00331
00332 # define YYSTACK_FREE(Ptr) do { ; } while (0)
00333 # else
00334 # if defined (__STDC__) || defined (__cplusplus)
00335 # include <stdlib.h>
00336 # define YYSIZE_T size_t
00337 # endif
00338 # define YYSTACK_ALLOC malloc
00339 # define YYSTACK_FREE free
00340 # endif
00341 #endif
00342
00343
00344 #if (! defined (yyoverflow) \
00345 && (! defined (__cplusplus) \
00346 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
00347
00348
00349 union yyalloc
00350 {
00351 short yyss;
00352 YYSTYPE yyvs;
00353 };
00354
00355
00356 # define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
00357
00358
00359
00360 # define YYSTACK_BYTES(N) \
00361 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
00362 + YYSTACK_GAP_MAX)
00363
00364
00365
00366 # ifndef YYCOPY
00367 # if 1 < __GNUC__
00368 # define YYCOPY(To, From, Count) \
00369 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
00370 # else
00371 # define YYCOPY(To, From, Count) \
00372 do \
00373 { \
00374 register YYSIZE_T yyi; \
00375 for (yyi = 0; yyi < (Count); yyi++) \
00376 (To)[yyi] = (From)[yyi]; \
00377 } \
00378 while (0)
00379 # endif
00380 # endif
00381
00382
00383
00384
00385
00386
00387 # define YYSTACK_RELOCATE(Stack) \
00388 do \
00389 { \
00390 YYSIZE_T yynewbytes; \
00391 YYCOPY (&yyptr->Stack, Stack, yysize); \
00392 Stack = &yyptr->Stack; \
00393 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
00394 yyptr += yynewbytes / sizeof (*yyptr); \
00395 } \
00396 while (0)
00397
00398 #endif
00399
00400 #if defined (__STDC__) || defined (__cplusplus)
00401 typedef signed char yysigned_char;
00402 #else
00403 typedef short yysigned_char;
00404 #endif
00405
00406
00407 #define YYFINAL 15
00408 #define YYLAST 579
00409
00410
00411 #define YYNTOKENS 62
00412
00413 #define YYNNTS 57
00414
00415 #define YYNRULES 155
00416
00417 #define YYNSTATES 286
00418
00419
00420 #define YYUNDEFTOK 2
00421 #define YYMAXUTOK 299
00422
00423 #define YYTRANSLATE(X) \
00424 ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
00425
00426
00427 static const unsigned char yytranslate[] =
00428 {
00429 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00430 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00431 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00432 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00433 2, 59, 17, 54, 53, 56, 14, 60, 2, 2,
00434 2, 2, 2, 2, 2, 2, 2, 2, 13, 52,
00435 2, 58, 55, 2, 61, 2, 2, 2, 2, 2,
00436 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00437 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00438 2, 15, 2, 57, 2, 2, 2, 2, 2, 2,
00439 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00440 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00441 2, 2, 2, 50, 16, 51, 2, 2, 2, 2,
00442 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00443 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00444 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00445 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00446 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00447 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00448 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00449 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00450 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00451 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00452 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00453 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00454 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
00455 5, 6, 7, 8, 9, 10, 11, 12, 18, 19,
00456 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
00457 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
00458 40, 41, 42, 43, 44, 45, 46, 47, 48, 49
00459 };
00460
00461 #if YYDEBUG
00462
00463
00464 static const unsigned short yyprhs[] =
00465 {
00466 0, 0, 3, 9, 12, 15, 18, 25, 31, 37,
00467 38, 41, 42, 45, 48, 49, 55, 59, 63, 64,
00468 68, 75, 79, 83, 84, 87, 94, 96, 97, 100,
00469 101, 105, 107, 109, 111, 113, 115, 117, 119, 121,
00470 122, 124, 126, 131, 134, 142, 143, 147, 150, 154,
00471 158, 162, 166, 169, 172, 173, 175, 177, 183, 185,
00472 190, 193, 195, 199, 202, 205, 209, 212, 215, 217,
00473 219, 222, 225, 227, 229, 231, 234, 237, 239, 241,
00474 243, 245, 248, 251, 253, 256, 261, 270, 272, 274,
00475 276, 278, 280, 282, 284, 286, 289, 293, 299, 301,
00476 304, 306, 310, 312, 316, 320, 326, 331, 336, 343,
00477 349, 352, 355, 356, 358, 362, 365, 368, 371, 372,
00478 374, 377, 380, 383, 386, 389, 391, 393, 396, 399,
00479 402, 405, 408, 411, 414, 417, 420, 423, 426, 429,
00480 432, 435, 438, 441, 444, 447, 450, 456, 460, 463,
00481 467, 471, 474, 480, 484, 486
00482 };
00483
00484
00485 static const yysigned_char yyrhs[] =
00486 {
00487 63, 0, -1, 69, 68, 70, 72, 76, -1, 64,
00488 67, -1, 65, 67, -1, 66, 67, -1, 24, 50,
00489 67, 88, 67, 51, -1, 25, 50, 67, 104, 51,
00490 -1, 26, 50, 67, 109, 51, -1, -1, 67, 3,
00491 -1, -1, 68, 4, -1, 68, 3, -1, -1, 22,
00492 67, 10, 67, 52, -1, 22, 1, 117, -1, 22,
00493 1, 52, -1, -1, 70, 71, 68, -1, 18, 67,
00494 78, 67, 79, 52, -1, 18, 1, 117, -1, 18,
00495 1, 52, -1, -1, 73, 68, -1, 23, 67, 75,
00496 78, 67, 52, -1, 11, -1, -1, 74, 67, -1,
00497 -1, 76, 77, 68, -1, 88, -1, 81, -1, 84,
00498 -1, 85, -1, 116, -1, 115, -1, 10, -1, 47,
00499 -1, -1, 80, -1, 83, -1, 80, 53, 67, 83,
00500 -1, 80, 1, -1, 20, 67, 80, 50, 67, 82,
00501 51, -1, -1, 82, 88, 67, -1, 11, 67, -1,
00502 19, 1, 117, -1, 19, 1, 52, -1, 21, 1,
00503 117, -1, 21, 1, 52, -1, 54, 67, -1, 55,
00504 67, -1, -1, 56, -1, 54, -1, 89, 50, 67,
00505 104, 51, -1, 90, -1, 89, 53, 67, 90, -1,
00506 89, 1, -1, 91, -1, 90, 86, 91, -1, 90,
00507 1, -1, 92, 67, -1, 92, 95, 67, -1, 95,
00508 67, -1, 93, 94, -1, 94, -1, 16, -1, 11,
00509 16, -1, 17, 16, -1, 11, -1, 17, -1, 96,
00510 -1, 95, 96, -1, 95, 1, -1, 12, -1, 97,
00511 -1, 100, -1, 103, -1, 14, 11, -1, 93, 99,
00512 -1, 99, -1, 11, 67, -1, 15, 67, 98, 57,
00513 -1, 15, 67, 98, 101, 67, 102, 67, 57, -1,
00514 58, -1, 5, -1, 6, -1, 7, -1, 8, -1,
00515 9, -1, 11, -1, 10, -1, 13, 11, -1, 13,
00516 13, 11, -1, 13, 48, 67, 91, 59, -1, 106,
00517 -1, 105, 106, -1, 105, -1, 1, 118, 1, -1,
00518 1, -1, 106, 52, 67, -1, 1, 52, 67, -1,
00519 1, 118, 1, 52, 67, -1, 105, 106, 52, 67,
00520 -1, 105, 1, 52, 67, -1, 105, 1, 118, 1,
00521 52, 67, -1, 107, 13, 67, 109, 108, -1, 11,
00522 67, -1, 27, 67, -1, -1, 111, -1, 109, 110,
00523 111, -1, 109, 1, -1, 60, 67, -1, 53, 67,
00524 -1, -1, 112, -1, 87, 112, -1, 10, 67, -1,
00525 11, 67, -1, 47, 67, -1, 49, 67, -1, 114,
00526 -1, 113, -1, 46, 67, -1, 45, 67, -1, 31,
00527 67, -1, 32, 67, -1, 33, 67, -1, 34, 67,
00528 -1, 35, 67, -1, 36, 67, -1, 37, 67, -1,
00529 38, 67, -1, 39, 67, -1, 40, 67, -1, 41,
00530 67, -1, 42, 67, -1, 43, 67, -1, 29, 67,
00531 -1, 28, 67, -1, 30, 67, -1, 44, 67, -1,
00532 48, 67, 109, 59, 67, -1, 48, 67, 1, -1,
00533 12, 67, -1, 61, 1, 117, -1, 61, 1, 52,
00534 -1, 1, 117, -1, 50, 1, 118, 1, 51, -1,
00535 50, 1, 51, -1, 117, -1, 118, 1, 117, -1
00536 };
00537
00538
00539 static const unsigned short yyrline[] =
00540 {
00541 0, 240, 240, 242, 243, 244, 247, 254, 260, 285,
00542 287, 290, 292, 293, 296, 298, 303, 304, 307, 309,
00543 319, 330, 333, 339, 340, 344, 348, 351, 353, 356,
00544 358, 368, 370, 371, 372, 373, 374, 377, 379, 382,
00545 386, 390, 395, 400, 406, 420, 422, 431, 439, 443,
00546 448, 452, 457, 459, 460, 463, 465, 468, 488, 502,
00547 516, 522, 526, 547, 553, 558, 563, 570, 572, 580,
00548 582, 583, 587, 608, 611, 616, 626, 632, 639, 640,
00549 641, 644, 653, 655, 661, 685, 691, 699, 703, 706,
00550 709, 712, 715, 720, 722, 725, 731, 737, 745, 749,
00551 754, 757, 763, 771, 775, 781, 787, 792, 798, 806,
00552 831, 838, 840, 843, 848, 861, 867, 871, 874, 879,
00553 881, 882, 883, 889, 890, 891, 893, 898, 900, 901,
00554 902, 903, 904, 905, 906, 907, 908, 909, 910, 911,
00555 912, 913, 914, 915, 916, 917, 921, 930, 941, 948,
00556 955, 963, 973, 975, 978, 980
00557 };
00558 #endif
00559
00560 #if YYDEBUG || YYERROR_VERBOSE
00561
00562
00563 static const char *const yytname[] =
00564 {
00565 "$end", "error", "$undefined", "S", "SGML_CD", "INCLUDES", "DASHMATCH",
00566 "BEGINSWITH", "ENDSWITH", "CONTAINS", "STRING", "IDENT", "HASH", "':'",
00567 "'.'", "'['", "'|'", "'*'", "IMPORT_SYM", "PAGE_SYM", "MEDIA_SYM",
00568 "FONT_FACE_SYM", "CHARSET_SYM", "NAMESPACE_SYM", "KHTML_RULE_SYM",
00569 "KHTML_DECLS_SYM", "KHTML_VALUE_SYM", "IMPORTANT_SYM", "QEMS", "EMS",
00570 "EXS", "PXS", "CMS", "MMS", "INS", "PTS", "PCS", "DEGS", "RADS",
00571 "GRADS", "MSECS", "SECS", "HERZ", "KHERZ", "DIMEN", "PERCENTAGE",
00572 "NUMBER", "URI", "FUNCTION", "UNICODERANGE", "'{'", "'}'", "';'", "','",
00573 "'+'", "'>'", "'-'", "']'", "'='", "')'", "'/'", "'@'", "$accept",
00574 "stylesheet", "khtml_rule", "khtml_decls", "khtml_value", "maybe_space",
00575 "maybe_sgml", "maybe_charset", "import_list", "import",
00576 "maybe_namespace", "namespace", "ns_prefix", "maybe_ns_prefix",
00577 "rule_list", "rule", "string_or_uri", "maybe_media_list", "media_list",
00578 "media", "ruleset_list", "medium", "page", "font_face", "combinator",
00579 "unary_operator", "ruleset", "selector_list", "selector",
00580 "simple_selector", "ns_element", "ns_selector", "element_name",
00581 "specifier_list", "specifier", "class", "ns_attrib_id", "attrib_id",
00582 "attrib", "match", "ident_or_string", "pseudo", "declaration_list",
00583 "decl_list", "declaration", "property", "prio", "expr", "operator",
00584 "term", "unary_term", "function", "hexcolor", "invalid_at",
00585 "invalid_rule", "invalid_block", "invalid_block_list", 0
00586 };
00587 #endif
00588
00589 # ifdef YYPRINT
00590
00591
00592 static const unsigned short yytoknum[] =
00593 {
00594 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
00595 265, 266, 267, 58, 46, 91, 124, 42, 268, 269,
00596 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
00597 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
00598 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
00599 123, 125, 59, 44, 43, 62, 45, 93, 61, 41,
00600 47, 64
00601 };
00602 # endif
00603
00604
00605 static const unsigned char yyr1[] =
00606 {
00607 0, 62, 63, 63, 63, 63, 64, 65, 66, 67,
00608 67, 68, 68, 68, 69, 69, 69, 69, 70, 70,
00609 71, 71, 71, 72, 72, 73, 74, 75, 75, 76,
00610 76, 77, 77, 77, 77, 77, 77, 78, 78, 79,
00611 79, 80, 80, 80, 81, 82, 82, 83, 84, 84,
00612 85, 85, 86, 86, 86, 87, 87, 88, 89, 89,
00613 89, 90, 90, 90, 91, 91, 91, 92, 92, 93,
00614 93, 93, 94, 94, 95, 95, 95, 96, 96, 96,
00615 96, 97, 98, 98, 99, 100, 100, 101, 101, 101,
00616 101, 101, 101, 102, 102, 103, 103, 103, 104, 104,
00617 104, 104, 104, 105, 105, 105, 105, 105, 105, 106,
00618 107, 108, 108, 109, 109, 109, 110, 110, 110, 111,
00619 111, 111, 111, 111, 111, 111, 111, 112, 112, 112,
00620 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
00621 112, 112, 112, 112, 112, 112, 113, 113, 114, 115,
00622 115, 116, 117, 117, 118, 118
00623 };
00624
00625
00626 static const unsigned char yyr2[] =
00627 {
00628 0, 2, 5, 2, 2, 2, 6, 5, 5, 0,
00629 2, 0, 2, 2, 0, 5, 3, 3, 0, 3,
00630 6, 3, 3, 0, 2, 6, 1, 0, 2, 0,
00631 3, 1, 1, 1, 1, 1, 1, 1, 1, 0,
00632 1, 1, 4, 2, 7, 0, 3, 2, 3, 3,
00633 3, 3, 2, 2, 0, 1, 1, 5, 1, 4,
00634 2, 1, 3, 2, 2, 3, 2, 2, 1, 1,
00635 2, 2, 1, 1, 1, 2, 2, 1, 1, 1,
00636 1, 2, 2, 1, 2, 4, 8, 1, 1, 1,
00637 1, 1, 1, 1, 1, 2, 3, 5, 1, 2,
00638 1, 3, 1, 3, 3, 5, 4, 4, 6, 5,
00639 2, 2, 0, 1, 3, 2, 2, 2, 0, 1,
00640 2, 2, 2, 2, 2, 1, 1, 2, 2, 2,
00641 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00642 2, 2, 2, 2, 2, 2, 5, 3, 2, 3,
00643 3, 2, 5, 3, 1, 3
00644 };
00645
00646
00647
00648
00649 static const unsigned char yydefact[] =
00650 {
00651 14, 0, 0, 0, 0, 0, 9, 9, 9, 11,
00652 0, 0, 9, 9, 9, 1, 3, 4, 5, 18,
00653 0, 17, 16, 10, 9, 0, 0, 0, 13, 12,
00654 23, 0, 0, 72, 77, 0, 0, 9, 69, 73,
00655 9, 0, 0, 61, 9, 0, 68, 0, 74, 78,
00656 79, 80, 102, 9, 0, 0, 98, 0, 9, 9,
00657 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
00658 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
00659 9, 9, 9, 56, 55, 0, 0, 113, 119, 126,
00660 125, 0, 9, 11, 29, 11, 153, 154, 0, 15,
00661 70, 95, 0, 9, 81, 0, 71, 0, 60, 9,
00662 9, 63, 9, 9, 0, 64, 0, 72, 73, 67,
00663 76, 66, 75, 9, 0, 110, 7, 0, 99, 9,
00664 9, 121, 122, 148, 143, 142, 144, 129, 130, 131,
00665 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
00666 145, 128, 127, 123, 0, 124, 120, 115, 8, 9,
00667 9, 0, 0, 0, 27, 19, 0, 24, 0, 96,
00668 0, 9, 0, 0, 0, 83, 6, 0, 0, 52,
00669 53, 62, 65, 104, 101, 9, 0, 9, 103, 0,
00670 147, 0, 117, 116, 114, 22, 21, 37, 38, 9,
00671 26, 9, 0, 0, 0, 9, 0, 0, 11, 32,
00672 33, 34, 31, 36, 35, 152, 155, 0, 84, 9,
00673 82, 88, 89, 90, 91, 92, 85, 87, 9, 0,
00674 0, 9, 107, 0, 106, 0, 9, 39, 28, 9,
00675 151, 0, 0, 0, 0, 30, 97, 0, 57, 105,
00676 9, 9, 109, 146, 9, 0, 0, 41, 0, 49,
00677 48, 0, 51, 50, 150, 149, 94, 93, 9, 108,
00678 111, 47, 20, 43, 9, 25, 9, 0, 0, 45,
00679 86, 42, 0, 44, 9, 46
00680 };
00681
00682
00683 static const short yydefgoto[] =
00684 {
00685 -1, 5, 6, 7, 8, 218, 19, 9, 30, 93,
00686 94, 95, 201, 202, 166, 208, 199, 255, 256, 209,
00687 282, 257, 210, 211, 114, 85, 40, 41, 42, 43,
00688 44, 45, 46, 47, 48, 49, 174, 175, 50, 228,
00689 268, 51, 54, 55, 56, 57, 252, 86, 161, 87,
00690 88, 89, 90, 213, 214, 97, 98
00691 };
00692
00693
00694
00695 #define YYPACT_NINF -166
00696 static const short yypact[] =
00697 {
00698 149, 17, -31, -28, -17, 101, -166, -166, -166, -166,
00699 45, 18, -166, -166, -166, -166, 104, 104, 104, 142,
00700 44, -166, -166, -166, -166, 314, 14, 464, -166, -166,
00701 126, 102, 52, 108, -166, 103, 146, -166, -166, 144,
00702 -166, 3, 178, -166, 201, 21, -166, 153, -166, -166,
00703 -166, -166, 75, -166, 121, 43, 124, 165, -166, -166,
00704 -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
00705 -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
00706 -166, -166, -166, -166, -166, 533, 312, -166, -166, -166,
00707 -166, 95, -166, -166, -166, -166, -166, -166, 181, -166,
00708 -166, -166, 177, -166, -166, 13, -166, 90, -166, -166,
00709 -166, -166, -166, -166, 321, 104, 153, -166, -166, -166,
00710 -166, 104, -166, -166, 200, 104, -166, 98, 150, -166,
00711 -166, 104, 104, 104, 104, 104, 104, 104, 104, 104,
00712 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
00713 104, 104, 104, 104, 417, 104, -166, -166, -166, -166,
00714 -166, 504, 131, 100, 110, 142, 119, 142, 112, -166,
00715 314, 108, 144, 194, 42, -166, -166, 14, 314, 104,
00716 104, -166, 104, 104, 135, -166, 209, -166, 104, 464,
00717 -166, 363, 104, 104, -166, -166, -166, -166, -166, -166,
00718 -166, -166, 96, 161, 216, -166, 217, 246, -166, -166,
00719 -166, -166, -166, -166, -166, -166, -166, 170, 104, -166,
00720 -166, -166, -166, -166, -166, -166, -166, -166, -166, 213,
00721 208, -166, 104, 147, 104, 258, -166, 115, 104, -166,
00722 -166, 196, 115, 202, 205, 142, -166, 31, -166, 104,
00723 -166, -166, -166, 104, -166, 199, 34, -166, 85, -166,
00724 -166, 39, -166, -166, -166, -166, -166, -166, -166, 104,
00725 104, 104, -166, -166, -166, -166, -166, 28, 115, 104,
00726 -166, -166, 228, -166, -166, 104
00727 };
00728
00729
00730 static const short yypgoto[] =
00731 {
00732 -166, -166, -166, -166, -166, -1, -85, -166, -166, -166,
00733 -166, -166, -166, -166, -166, -166, 54, -166, 23, -166,
00734 -166, -18, -166, -166, -166, -166, -165, -166, 88, -88,
00735 -166, 166, 227, 230, -33, -166, -166, 105, -166, -166,
00736 -166, -166, 99, -166, 222, -166, -166, -152, -166, 120,
00737 195, -166, -166, -166, -166, -7, -43
00738 };
00739
00740
00741
00742
00743
00744 #define YYTABLE_NINF -119
00745 static const short yytable[] =
00746 {
00747 11, 212, 191, 22, 108, 16, 17, 18, 165, 124,
00748 167, 25, 26, 27, 122, 52, 23, 23, 10, 12,
00749 -9, 23, 13, 32, 171, 53, 181, -9, 24, 38,
00750 172, 23, 117, 14, 23, 273, 105, 235, 118, 107,
00751 273, 266, 267, 115, 127, 31, 121, 221, 222, 223,
00752 224, 225, 125, 109, 53, 23, 110, 131, 132, 133,
00753 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
00754 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
00755 154, 155, 217, 122, 186, 280, -40, 274, 23, 276,
00756 163, 164, 274, 23, -100, 20, 162, 21, -9, 226,
00757 227, 15, 170, 23, 99, -9, 197, 23, 177, 178,
00758 197, 179, 180, 23, 101, 182, 102, 284, 23, -2,
00759 203, 200, 183, 245, 100, 20, 254, 123, 188, 189,
00760 33, 34, 35, 36, 37, 38, 39, 275, 204, 205,
00761 206, 176, -9, 198, 91, 28, 29, 198, 20, 92,
00762 185, 103, 20, 96, 120, 196, -9, 104, 192, 193,
00763 106, 216, 20, 215, -9, 34, 35, 36, 37, -9,
00764 -9, 1, 126, 2, 3, 4, 129, 216, 130, 111,
00765 207, 20, 168, 195, 232, 20, 234, 231, 169, -54,
00766 -54, -54, -54, -54, -54, -54, 240, 20, 237, 250,
00767 238, 184, 187, -9, 242, 219, -9, -9, -9, 111,
00768 233, 20, -9, 34, 35, 36, 37, 241, 243, -54,
00769 -54, -54, -54, -54, -54, -54, 216, 247, -58, 246,
00770 249, -58, 112, 113, 260, 253, 263, 265, 258, 33,
00771 34, 35, 36, 37, 38, 39, 20, 244, 259, 269,
00772 270, 272, 20, 271, 262, 20, 239, 264, -59, 157,
00773 281, -59, 112, 113, 248, 261, 230, 277, -118, -118,
00774 -118, 173, 119, 278, 116, 279, 229, 128, 220, 283,
00775 156, 194, 0, 285, 0, 251, -118, -118, -118, -118,
00776 -118, -118, -118, -118, -118, -118, -118, -118, -118, -118,
00777 -118, -118, -118, -118, -118, -118, -118, -118, 0, -112,
00778 -112, 159, -118, 157, -118, 0, 0, 23, 160, 0,
00779 0, 0, -118, -118, -118, 33, 34, 35, 36, 37,
00780 38, 39, 33, 34, 35, 36, 37, 38, 39, 0,
00781 -118, -118, -118, -118, -118, -118, -118, -118, -118, -118,
00782 -118, -118, -118, -118, -118, -118, -118, -118, -118, -118,
00783 -118, -118, 0, 158, 157, 159, -118, 0, -118, 0,
00784 0, 0, 160, -118, -118, -118, 0, 0, 0, 0,
00785 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00786 0, -118, -118, -118, -118, -118, -118, -118, -118, -118,
00787 -118, -118, -118, -118, -118, -118, -118, -118, -118, -118,
00788 -118, -118, -118, 0, 0, 0, 159, -118, 190, -118,
00789 23, 0, 236, 160, 0, 0, 0, 58, 59, 60,
00790 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00791 0, 0, 0, 0, 0, 61, 62, 63, 64, 65,
00792 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
00793 76, 77, 78, 79, 80, 81, 82, 23, 0, 0,
00794 0, 83, 0, 84, 58, 59, 60, 0, 0, 0,
00795 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00796 0, 0, 61, 62, 63, 64, 65, 66, 67, 68,
00797 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
00798 79, 80, 81, 82, 58, 59, 60, 0, 83, 0,
00799 84, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00800 0, 0, 61, 62, 63, 64, 65, 66, 67, 68,
00801 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
00802 79, 80, 81, 82, 0, 0, 0, 0, 83, 0,
00803 84, 61, 62, 63, 64, 65, 66, 67, 68, 69,
00804 70, 71, 72, 73, 74, 75, 76, 77, 78, 79
00805 };
00806
00807 static const short yycheck[] =
00808 {
00809 1, 166, 154, 10, 1, 6, 7, 8, 93, 52,
00810 95, 12, 13, 14, 47, 1, 3, 3, 1, 50,
00811 3, 3, 50, 24, 11, 11, 114, 10, 10, 16,
00812 17, 3, 11, 50, 3, 1, 37, 189, 17, 40,
00813 1, 10, 11, 44, 1, 1, 47, 5, 6, 7,
00814 8, 9, 53, 50, 11, 3, 53, 58, 59, 60,
00815 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
00816 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
00817 81, 82, 170, 116, 127, 57, 52, 53, 3, 50,
00818 91, 92, 53, 3, 51, 50, 1, 52, 3, 57,
00819 58, 0, 103, 3, 52, 10, 10, 3, 109, 110,
00820 10, 112, 113, 3, 11, 116, 13, 282, 3, 0,
00821 1, 11, 123, 208, 16, 50, 11, 52, 129, 130,
00822 11, 12, 13, 14, 15, 16, 17, 52, 19, 20,
00823 21, 51, 47, 47, 18, 3, 4, 47, 50, 23,
00824 52, 48, 50, 51, 1, 162, 3, 11, 159, 160,
00825 16, 168, 50, 51, 11, 12, 13, 14, 15, 16,
00826 17, 22, 51, 24, 25, 26, 52, 184, 13, 1,
00827 61, 50, 1, 52, 185, 50, 187, 52, 11, 11,
00828 12, 13, 14, 15, 16, 17, 203, 50, 199, 52,
00829 201, 1, 52, 50, 205, 11, 53, 54, 55, 1,
00830 1, 50, 59, 12, 13, 14, 15, 1, 1, 11,
00831 12, 13, 14, 15, 16, 17, 233, 228, 50, 59,
00832 231, 53, 54, 55, 241, 236, 243, 244, 239, 11,
00833 12, 13, 14, 15, 16, 17, 50, 1, 52, 250,
00834 251, 52, 50, 254, 52, 50, 202, 52, 50, 1,
00835 278, 53, 54, 55, 51, 242, 178, 268, 10, 11,
00836 12, 105, 45, 274, 44, 276, 177, 55, 173, 51,
00837 85, 161, -1, 284, -1, 27, 28, 29, 30, 31,
00838 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
00839 42, 43, 44, 45, 46, 47, 48, 49, -1, 51,
00840 52, 53, 54, 1, 56, -1, -1, 3, 60, -1,
00841 -1, -1, 10, 11, 12, 11, 12, 13, 14, 15,
00842 16, 17, 11, 12, 13, 14, 15, 16, 17, -1,
00843 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
00844 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
00845 48, 49, -1, 51, 1, 53, 54, -1, 56, -1,
00846 -1, -1, 60, 10, 11, 12, -1, -1, -1, -1,
00847 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
00848 -1, 28, 29, 30, 31, 32, 33, 34, 35, 36,
00849 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
00850 47, 48, 49, -1, -1, -1, 53, 54, 1, 56,
00851 3, -1, 59, 60, -1, -1, -1, 10, 11, 12,
00852 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
00853 -1, -1, -1, -1, -1, 28, 29, 30, 31, 32,
00854 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
00855 43, 44, 45, 46, 47, 48, 49, 3, -1, -1,
00856 -1, 54, -1, 56, 10, 11, 12, -1, -1, -1,
00857 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
00858 -1, -1, 28, 29, 30, 31, 32, 33, 34, 35,
00859 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
00860 46, 47, 48, 49, 10, 11, 12, -1, 54, -1,
00861 56, -1, -1, -1, -1, -1, -1, -1, -1, -1,
00862 -1, -1, 28, 29, 30, 31, 32, 33, 34, 35,
00863 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
00864 46, 47, 48, 49, -1, -1, -1, -1, 54, -1,
00865 56, 28, 29, 30, 31, 32, 33, 34, 35, 36,
00866 37, 38, 39, 40, 41, 42, 43, 44, 45, 46
00867 };
00868
00869
00870
00871 static const unsigned char yystos[] =
00872 {
00873 0, 22, 24, 25, 26, 63, 64, 65, 66, 69,
00874 1, 67, 50, 50, 50, 0, 67, 67, 67, 68,
00875 50, 52, 117, 3, 10, 67, 67, 67, 3, 4,
00876 70, 1, 67, 11, 12, 13, 14, 15, 16, 17,
00877 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
00878 100, 103, 1, 11, 104, 105, 106, 107, 10, 11,
00879 12, 28, 29, 30, 31, 32, 33, 34, 35, 36,
00880 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
00881 47, 48, 49, 54, 56, 87, 109, 111, 112, 113,
00882 114, 18, 23, 71, 72, 73, 51, 117, 118, 52,
00883 16, 11, 13, 48, 11, 67, 16, 67, 1, 50,
00884 53, 1, 54, 55, 86, 67, 95, 11, 17, 94,
00885 1, 67, 96, 52, 118, 67, 51, 1, 106, 52,
00886 13, 67, 67, 67, 67, 67, 67, 67, 67, 67,
00887 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
00888 67, 67, 67, 67, 67, 67, 112, 1, 51, 53,
00889 60, 110, 1, 67, 67, 68, 76, 68, 1, 11,
00890 67, 11, 17, 93, 98, 99, 51, 67, 67, 67,
00891 67, 91, 67, 67, 1, 52, 118, 52, 67, 67,
00892 1, 109, 67, 67, 111, 52, 117, 10, 47, 78,
00893 11, 74, 75, 1, 19, 20, 21, 61, 77, 81,
00894 84, 85, 88, 115, 116, 51, 117, 91, 67, 11,
00895 99, 5, 6, 7, 8, 9, 57, 58, 101, 104,
00896 90, 52, 67, 1, 67, 109, 59, 67, 67, 78,
00897 117, 1, 67, 1, 1, 68, 59, 67, 51, 67,
00898 52, 27, 108, 67, 11, 79, 80, 83, 67, 52,
00899 117, 80, 52, 117, 52, 117, 10, 11, 102, 67,
00900 67, 67, 52, 1, 53, 52, 50, 67, 67, 67,
00901 57, 83, 82, 51, 88, 67
00902 };
00903
00904 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
00905 # define YYSIZE_T __SIZE_TYPE__
00906 #endif
00907 #if ! defined (YYSIZE_T) && defined (size_t)
00908 # define YYSIZE_T size_t
00909 #endif
00910 #if ! defined (YYSIZE_T)
00911 # if defined (__STDC__) || defined (__cplusplus)
00912 # include <stddef.h>
00913 # define YYSIZE_T size_t
00914 # endif
00915 #endif
00916 #if ! defined (YYSIZE_T)
00917 # define YYSIZE_T unsigned int
00918 #endif
00919
00920 #define yyerrok (yyerrstatus = 0)
00921 #define yyclearin (yychar = YYEMPTY)
00922 #define YYEMPTY -2
00923 #define YYEOF 0
00924
00925 #define YYACCEPT goto yyacceptlab
00926 #define YYABORT goto yyabortlab
00927 #define YYERROR goto yyerrlab1
00928
00929
00930
00931
00932
00933 #define YYFAIL goto yyerrlab
00934
00935 #define YYRECOVERING() (!!yyerrstatus)
00936
00937 #define YYBACKUP(Token, Value) \
00938 do \
00939 if (yychar == YYEMPTY && yylen == 1) \
00940 { \
00941 yychar = (Token); \
00942 yylval = (Value); \
00943 yychar1 = YYTRANSLATE (yychar); \
00944 YYPOPSTACK; \
00945 goto yybackup; \
00946 } \
00947 else \
00948 { \
00949 yyerror ("syntax error: cannot back up"); \
00950 YYERROR; \
00951 } \
00952 while (0)
00953
00954 #define YYTERROR 1
00955 #define YYERRCODE 256
00956
00957
00958
00959
00960 #ifndef YYLLOC_DEFAULT
00961 # define YYLLOC_DEFAULT(Current, Rhs, N) \
00962 Current.first_line = Rhs[1].first_line; \
00963 Current.first_column = Rhs[1].first_column; \
00964 Current.last_line = Rhs[N].last_line; \
00965 Current.last_column = Rhs[N].last_column;
00966 #endif
00967
00968
00969
00970 #ifdef YYLEX_PARAM
00971 # define YYLEX yylex (&yylval, YYLEX_PARAM)
00972 #else
00973 # define YYLEX yylex (&yylval)
00974 #endif
00975
00976
00977 #if YYDEBUG
00978
00979 # ifndef YYFPRINTF
00980 # include <stdio.h>
00981 # define YYFPRINTF fprintf
00982 # endif
00983
00984 # define YYDPRINTF(Args) \
00985 do { \
00986 if (yydebug) \
00987 YYFPRINTF Args; \
00988 } while (0)
00989 # define YYDSYMPRINT(Args) \
00990 do { \
00991 if (yydebug) \
00992 yysymprint Args; \
00993 } while (0)
00994
00995
00996 int yydebug;
00997 #else
00998 # define YYDPRINTF(Args)
00999 # define YYDSYMPRINT(Args)
01000 #endif
01001
01002
01003 #ifndef YYINITDEPTH
01004 # define YYINITDEPTH 200
01005 #endif
01006
01007
01008
01009
01010
01011
01012
01013
01014 #if YYMAXDEPTH == 0
01015 # undef YYMAXDEPTH
01016 #endif
01017
01018 #ifndef YYMAXDEPTH
01019 # define YYMAXDEPTH 10000
01020 #endif
01021
01022
01023
01024 #if YYERROR_VERBOSE
01025
01026 # ifndef yystrlen
01027 # if defined (__GLIBC__) && defined (_STRING_H)
01028 # define yystrlen strlen
01029 # else
01030
01031 static YYSIZE_T
01032 # if defined (__STDC__) || defined (__cplusplus)
01033 yystrlen (const char *yystr)
01034 # else
01035 yystrlen (yystr)
01036 const char *yystr;
01037 # endif
01038 {
01039 register const char *yys = yystr;
01040
01041 while (*yys++ != '\0')
01042 continue;
01043
01044 return yys - yystr - 1;
01045 }
01046 # endif
01047 # endif
01048
01049 # ifndef yystpcpy
01050 # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
01051 # define yystpcpy stpcpy
01052 # else
01053
01054
01055 static char *
01056 # if defined (__STDC__) || defined (__cplusplus)
01057 yystpcpy (char *yydest, const char *yysrc)
01058 # else
01059 yystpcpy (yydest, yysrc)
01060 char *yydest;
01061 const char *yysrc;
01062 # endif
01063 {
01064 register char *yyd = yydest;
01065 register const char *yys = yysrc;
01066
01067 while ((*yyd++ = *yys++) != '\0')
01068 continue;
01069
01070 return yyd - 1;
01071 }
01072 # endif
01073 # endif
01074
01075 #endif
01076
01077
01078
01079 #if YYDEBUG
01080
01081
01082
01083
01084 static void
01085 #if defined (__STDC__) || defined (__cplusplus)
01086 yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue)
01087 #else
01088 yysymprint (yyout, yytype, yyvalue)
01089 FILE* yyout;
01090 int yytype;
01091 YYSTYPE yyvalue;
01092 #endif
01093 {
01094
01095 (void) yyvalue;
01096
01097 if (yytype < YYNTOKENS)
01098 {
01099 YYFPRINTF (yyout, "token %s (", yytname[yytype]);
01100 # ifdef YYPRINT
01101 YYPRINT (yyout, yytoknum[yytype], yyvalue);
01102 # endif
01103 }
01104 else
01105 YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
01106
01107 switch (yytype)
01108 {
01109 default:
01110 break;
01111 }
01112 YYFPRINTF (yyout, ")");
01113 }
01114 #endif
01115
01116
01117
01118
01119
01120
01121 static void
01122 #if defined (__STDC__) || defined (__cplusplus)
01123 yydestruct (int yytype, YYSTYPE yyvalue)
01124 #else
01125 yydestruct (yytype, yyvalue)
01126 int yytype;
01127 YYSTYPE yyvalue;
01128 #endif
01129 {
01130
01131 (void) yyvalue;
01132
01133 switch (yytype)
01134 {
01135 default:
01136 break;
01137 }
01138 }
01139
01140
01141
01142
01143
01144
01145
01146
01147
01148 #ifdef YYPARSE_PARAM
01149 # if defined (__STDC__) || defined (__cplusplus)
01150 # define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
01151 # define YYPARSE_PARAM_DECL
01152 # else
01153 # define YYPARSE_PARAM_ARG YYPARSE_PARAM
01154 # define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
01155 # endif
01156 #else
01157 # define YYPARSE_PARAM_ARG
01158 # define YYPARSE_PARAM_DECL
01159 #endif
01160
01161
01162 #ifdef __GNUC__
01163 # ifdef YYPARSE_PARAM
01164 int yyparse (void *);
01165 # else
01166 int yyparse (void);
01167 # endif
01168 #endif
01169
01170
01171
01172
01173 int
01174 yyparse (YYPARSE_PARAM_ARG)
01175 YYPARSE_PARAM_DECL
01176 {
01177
01178 int yychar;
01179
01180
01181 YYSTYPE yylval;
01182
01183
01184 int yynerrs;
01185
01186 register int yystate;
01187 register int yyn;
01188 int yyresult;
01189
01190 int yyerrstatus;
01191
01192 int yychar1 = 0;
01193
01194
01195
01196
01197
01198
01199
01200
01201
01202
01203 short yyssa[YYINITDEPTH];
01204 short *yyss = yyssa;
01205 register short *yyssp;
01206
01207
01208 YYSTYPE yyvsa[YYINITDEPTH];
01209 YYSTYPE *yyvs = yyvsa;
01210 register YYSTYPE *yyvsp;
01211
01212
01213
01214 #define YYPOPSTACK (yyvsp--, yyssp--)
01215
01216 YYSIZE_T yystacksize = YYINITDEPTH;
01217
01218
01219
01220 YYSTYPE yyval;
01221
01222
01223
01224
01225 int yylen;
01226
01227 YYDPRINTF ((stderr, "Starting parse\n"));
01228
01229 yystate = 0;
01230 yyerrstatus = 0;
01231 yynerrs = 0;
01232 yychar = YYEMPTY;
01233
01234
01235
01236
01237
01238
01239 yyssp = yyss;
01240 yyvsp = yyvs;
01241
01242 goto yysetstate;
01243
01244
01245
01246
01247 yynewstate:
01248
01249
01250
01251 yyssp++;
01252
01253 yysetstate:
01254 *yyssp = yystate;
01255
01256 if (yyssp >= yyss + yystacksize - 1)
01257 {
01258
01259 YYSIZE_T yysize = yyssp - yyss + 1;
01260
01261 #ifdef yyoverflow
01262 {
01263
01264
01265
01266 YYSTYPE *yyvs1 = yyvs;
01267 short *yyss1 = yyss;
01268
01269
01270
01271
01272
01273
01274 yyoverflow ("parser stack overflow",
01275 &yyss1, yysize * sizeof (*yyssp),
01276 &yyvs1, yysize * sizeof (*yyvsp),
01277
01278 &yystacksize);
01279
01280 yyss = yyss1;
01281 yyvs = yyvs1;
01282 }
01283 #else
01284 # ifndef YYSTACK_RELOCATE
01285 goto yyoverflowlab;
01286 # else
01287
01288 if (yystacksize >= YYMAXDEPTH)
01289 goto yyoverflowlab;
01290 yystacksize *= 2;
01291 if (yystacksize > YYMAXDEPTH)
01292 yystacksize = YYMAXDEPTH;
01293
01294 {
01295 short *yyss1 = yyss;
01296 union yyalloc *yyptr =
01297 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
01298 if (! yyptr)
01299 goto yyoverflowlab;
01300 YYSTACK_RELOCATE (yyss);
01301 YYSTACK_RELOCATE (yyvs);
01302
01303 # undef YYSTACK_RELOCATE
01304 if (yyss1 != yyssa)
01305 YYSTACK_FREE (yyss1);
01306 }
01307 # endif
01308 #endif
01309
01310 yyssp = yyss + yysize - 1;
01311 yyvsp = yyvs + yysize - 1;
01312
01313
01314 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
01315 (unsigned long int) yystacksize));
01316
01317 if (yyssp >= yyss + yystacksize - 1)
01318 YYABORT;
01319 }
01320
01321 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
01322
01323 goto yybackup;
01324
01325
01326
01327
01328 yybackup:
01329
01330
01331
01332
01333
01334
01335
01336 yyn = yypact[yystate];
01337 if (yyn == YYPACT_NINF)
01338 goto yydefault;
01339
01340
01341
01342
01343
01344
01345 if (yychar == YYEMPTY)
01346 {
01347 YYDPRINTF ((stderr, "Reading a token: "));
01348 yychar = YYLEX;
01349 }
01350
01351
01352
01353 if (yychar <= 0)
01354 {
01355 yychar1 = 0;
01356 yychar = YYEOF;
01357
01358 YYDPRINTF ((stderr, "Now at end of input.\n"));
01359 }
01360 else
01361 {
01362 yychar1 = YYTRANSLATE (yychar);
01363
01364
01365
01366 YYDPRINTF ((stderr, "Next token is "));
01367 YYDSYMPRINT ((stderr, yychar1, yylval));
01368 YYDPRINTF ((stderr, "\n"));
01369 }
01370
01371
01372
01373 yyn += yychar1;
01374 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
01375 goto yydefault;
01376 yyn = yytable[yyn];
01377 if (yyn <= 0)
01378 {
01379 if (yyn == 0 || yyn == YYTABLE_NINF)
01380 goto yyerrlab;
01381 yyn = -yyn;
01382 goto yyreduce;
01383 }
01384
01385 if (yyn == YYFINAL)
01386 YYACCEPT;
01387
01388
01389 YYDPRINTF ((stderr, "Shifting token %d (%s), ",
01390 yychar, yytname[yychar1]));
01391
01392
01393 if (yychar != YYEOF)
01394 yychar = YYEMPTY;
01395
01396 *++yyvsp = yylval;
01397
01398
01399
01400
01401 if (yyerrstatus)
01402 yyerrstatus--;
01403
01404 yystate = yyn;
01405 goto yynewstate;
01406
01407
01408
01409
01410
01411 yydefault:
01412 yyn = yydefact[yystate];
01413 if (yyn == 0)
01414 goto yyerrlab;
01415 goto yyreduce;
01416
01417
01418
01419
01420
01421 yyreduce:
01422
01423 yylen = yyr2[yyn];
01424
01425
01426
01427
01428
01429
01430
01431
01432
01433 yyval = yyvsp[1-yylen];
01434
01435
01436
01437 #if YYDEBUG
01438
01439
01440 if (yydebug)
01441 {
01442 int yyi;
01443
01444 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
01445 yyn - 1, yyrline[yyn]);
01446
01447
01448 for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
01449 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
01450 YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
01451 }
01452 #endif
01453 switch (yyn)
01454 {
01455 case 6:
01456 #line 248 "parser.y"
01457 {
01458 CSSParser *p = static_cast<CSSParser *>(parser);
01459 p->rule = yyvsp[-2].rule;
01460 }
01461 break;
01462
01463 case 7:
01464 #line 255 "parser.y"
01465 {
01466
01467 }
01468 break;
01469
01470 case 8:
01471 #line 261 "parser.y"
01472 {
01473 CSSParser *p = static_cast<CSSParser *>(parser);
01474 if ( yyvsp[-1].valueList ) {
01475 p->valueList = yyvsp[-1].valueList;
01476 #ifdef CSS_DEBUG
01477 kdDebug( 6080 ) << " got property for " << p->id <<
01478 (p->important?" important":"")<< endl;
01479 bool ok =
01480 #endif
01481 p->parseValue( p->id, p->important );
01482 #ifdef CSS_DEBUG
01483 if ( !ok )
01484 kdDebug( 6080 ) << " couldn't parse value!" << endl;
01485 #endif
01486 }
01487 #ifdef CSS_DEBUG
01488 else
01489 kdDebug( 6080 ) << " no value found!" << endl;
01490 #endif
01491 delete p->valueList;
01492 p->valueList = 0;
01493 }
01494 break;
01495
01496 case 15:
01497 #line 298 "parser.y"
01498 {
01499 #ifdef CSS_DEBUG
01500 kdDebug( 6080 ) << "charset rule: " << qString(yyvsp[-2].string) << endl;
01501 #endif
01502 }
01503 break;
01504
01505 case 19:
01506 #line 309 "parser.y"
01507 {
01508 CSSParser *p = static_cast<CSSParser *>(parser);
01509 if ( yyvsp[-1].rule && p->styleElement && p->styleElement->isCSSStyleSheet() ) {
01510 p->styleElement->append( yyvsp[-1].rule );
01511 } else {
01512 delete yyvsp[-1].rule;
01513 }
01514 }
01515 break;
01516
01517 case 20:
01518 #line 320 "parser.y"
01519 {
01520 #ifdef CSS_DEBUG
01521 kdDebug( 6080 ) << "@import: " << qString(yyvsp[-3].string) << endl;
01522 #endif
01523 CSSParser *p = static_cast<CSSParser *>(parser);
01524 if ( yyvsp[-1].mediaList && p->styleElement && p->styleElement->isCSSStyleSheet() )
01525 yyval.rule = new CSSImportRuleImpl( p->styleElement, domString(yyvsp[-3].string), yyvsp[-1].mediaList );
01526 else
01527 yyval.rule = 0;
01528 }
01529 break;
01530
01531 case 21:
01532 #line 330 "parser.y"
01533 {
01534 yyval.rule = 0;
01535 }
01536 break;
01537
01538 case 22:
01539 #line 333 "parser.y"
01540 {
01541 yyval.rule = 0;
01542 }
01543 break;
01544
01545 case 27:
01546 #line 352 "parser.y"
01547 { yyval.string.string = 0; yyval.string.length = 0; }
01548 break;
01549
01550 case 30:
01551 #line 358 "parser.y"
01552 {
01553 CSSParser *p = static_cast<CSSParser *>(parser);
01554 if ( yyvsp[-1].rule && p->styleElement && p->styleElement->isCSSStyleSheet() ) {
01555 p->styleElement->append( yyvsp[-1].rule );
01556 } else {
01557 delete yyvsp[-1].rule;
01558 }
01559 }
01560 break;
01561
01562 case 39:
01563 #line 383 "parser.y"
01564 {
01565 yyval.mediaList = new MediaListImpl();
01566 }
01567 break;
01568
01569 case 41:
01570 #line 391 "parser.y"
01571 {
01572 yyval.mediaList = new MediaListImpl();
01573 yyval.mediaList->appendMedium( domString(yyvsp[0].string).lower() );
01574 }
01575 break;
01576
01577 case 42:
01578 #line 395 "parser.y"
01579 {
01580 yyval.mediaList = yyvsp[-3].mediaList;
01581 if (yyval.mediaList)
01582 yyval.mediaList->appendMedium( domString(yyvsp[0].string).lower() );
01583 }
01584 break;
01585
01586 case 43:
01587 #line 400 "parser.y"
01588 {
01589 delete yyvsp[-1].mediaList;
01590 yyval.mediaList = 0;
01591 }
01592 break;
01593
01594 case 44:
01595 #line 407 "parser.y"
01596 {
01597 CSSParser *p = static_cast<CSSParser *>(parser);
01598 if ( yyvsp[-4].mediaList && yyvsp[-1].ruleList &&
01599 p->styleElement && p->styleElement->isCSSStyleSheet() ) {
01600 yyval.rule = new CSSMediaRuleImpl( static_cast<CSSStyleSheetImpl*>(p->styleElement), yyvsp[-4].mediaList, yyvsp[-1].ruleList );
01601 } else {
01602 yyval.rule = 0;
01603 delete yyvsp[-4].mediaList;
01604 delete yyvsp[-1].ruleList;
01605 }
01606 }
01607 break;
01608
01609 case 45:
01610 #line 421 "parser.y"
01611 { yyval.ruleList = 0; }
01612 break;
01613
01614 case 46:
01615 #line 422 "parser.y"
01616 {
01617 yyval.ruleList = yyvsp[-2].ruleList;
01618 if ( yyvsp[-1].rule ) {
01619 if ( !yyval.ruleList ) yyval.ruleList = new CSSRuleListImpl();
01620 yyval.ruleList->append( yyvsp[-1].rule );
01621 }
01622 }
01623 break;
01624
01625 case 47:
01626 #line 432 "parser.y"
01627 {
01628 yyval.string = yyvsp[-1].string;
01629 }
01630 break;
01631
01632 case 48:
01633 #line 440 "parser.y"
01634 {
01635 yyval.rule = 0;
01636 }
01637 break;
01638
01639 case 49:
01640 #line 443 "parser.y"
01641 {
01642 yyval.rule = 0;
01643 }
01644 break;
01645
01646 case 50:
01647 #line 449 "parser.y"
01648 {
01649 yyval.rule = 0;
01650 }
01651 break;
01652
01653 case 51:
01654 #line 452 "parser.y"
01655 {
01656 yyval.rule = 0;
01657 }
01658 break;
01659
01660 case 52:
01661 #line 458 "parser.y"
01662 { yyval.relation = CSSSelector::Sibling; }
01663 break;
01664
01665 case 53:
01666 #line 459 "parser.y"
01667 { yyval.relation = CSSSelector::Child; }
01668 break;
01669
01670 case 54:
01671 #line 460 "parser.y"
01672 { yyval.relation = CSSSelector::Descendant; }
01673 break;
01674
01675 case 55:
01676 #line 464 "parser.y"
01677 { yyval.val = -1; }
01678 break;
01679
01680 case 56:
01681 #line 465 "parser.y"
01682 { yyval.val = 1; }
01683 break;
01684
01685 case 57:
01686 #line 469 "parser.y"
01687 {
01688 #ifdef CSS_DEBUG
01689 kdDebug( 6080 ) << "got ruleset" << endl << " selector:" << endl;
01690 #endif
01691 CSSParser *p = static_cast<CSSParser *>(parser);
01692 if ( yyvsp[-4].selectorList && yyvsp[-1].ok && p->numParsedProperties ) {
01693 CSSStyleRuleImpl *rule = new CSSStyleRuleImpl( p->styleElement );
01694 CSSStyleDeclarationImpl *decl = p->createStyleDeclaration( rule );
01695 rule->setSelector( yyvsp[-4].selectorList );
01696 rule->setDeclaration(decl);
01697 yyval.rule = rule;
01698 } else {
01699 yyval.rule = 0;
01700 delete yyvsp[-4].selectorList;
01701 p->clearProperties();
01702 }
01703 }
01704 break;
01705
01706 case 58:
01707 #line 489 "parser.y"
01708 {
01709 if ( yyvsp[0].selector ) {
01710 yyval.selectorList = new QPtrList<CSSSelector>;
01711 yyval.selectorList->setAutoDelete( true );
01712 #ifdef CSS_DEBUG
01713 kdDebug( 6080 ) << " got simple selector:" << endl;
01714 yyvsp[0].selector->print();
01715 #endif
01716 yyval.selectorList->append( yyvsp[0].selector );
01717 } else {
01718 yyval.selectorList = 0;
01719 }
01720 }
01721 break;
01722
01723 case 59:
01724 #line 502 "parser.y"
01725 {
01726 if ( yyvsp[-3].selectorList && yyvsp[0].selector ) {
01727 yyval.selectorList = yyvsp[-3].selectorList;
01728 yyval.selectorList->append( yyvsp[0].selector );
01729 #ifdef CSS_DEBUG
01730 kdDebug( 6080 ) << " got simple selector:" << endl;
01731 yyvsp[0].selector->print();
01732 #endif
01733 } else {
01734 delete yyvsp[-3].selectorList;
01735 delete yyvsp[0].selector;
01736 yyval.selectorList = 0;
01737 }
01738 }
01739 break;
01740
01741 case 60:
01742 #line 516 "parser.y"
01743 {
01744 delete yyvsp[-1].selectorList;
01745 yyval.selectorList = 0;
01746 }
01747 break;
01748
01749 case 61:
01750 #line 523 "parser.y"
01751 {
01752 yyval.selector = yyvsp[0].selector;
01753 }
01754 break;
01755
01756 case 62:
01757 #line 526 "parser.y"
01758 {
01759 if ( !yyvsp[-2].selector || !yyvsp[0].selector ) {
01760 delete yyvsp[-2].selector;
01761 delete yyvsp[0].selector;
01762 yyval.selector = 0;
01763 } else {
01764 yyval.selector = yyvsp[0].selector;
01765 CSSSelector *end = yyvsp[0].selector;
01766 while( end->tagHistory )
01767 end = end->tagHistory;
01768 end->relation = yyvsp[-1].relation;
01769 end->tagHistory = yyvsp[-2].selector;
01770 if ( yyvsp[-1].relation == CSSSelector::Descendant ||
01771 yyvsp[-1].relation == CSSSelector::Child ) {
01772 CSSParser *p = static_cast<CSSParser *>(parser);
01773 DOM::DocumentImpl *doc = p->document();
01774 if ( doc )
01775 doc->setUsesDescendantRules(true);
01776 }
01777 }
01778 }
01779 break;
01780
01781 case 63:
01782 #line 547 "parser.y"
01783 {
01784 delete yyvsp[-1].selector;
01785 yyval.selector = 0;
01786 }
01787 break;
01788
01789 case 64:
01790 #line 554 "parser.y"
01791 {
01792 yyval.selector = new CSSSelector();
01793 yyval.selector->tag = yyvsp[-1].element;
01794 }
01795 break;
01796
01797 case 65:
01798 #line 558 "parser.y"
01799 {
01800 yyval.selector = yyvsp[-1].selector;
01801 if ( yyval.selector )
01802 yyval.selector->tag = yyvsp[-2].element;
01803 }
01804 break;
01805
01806 case 66:
01807 #line 563 "parser.y"
01808 {
01809 yyval.selector = yyvsp[-1].selector;
01810 if ( yyval.selector )
01811 yyval.selector->tag = 0xffffffff;
01812 }
01813 break;
01814
01815 case 67:
01816 #line 571 "parser.y"
01817 { yyval.element = (yyvsp[-1].ns<<16) | yyvsp[0].element; }
01818 break;
01819
01820 case 68:
01821 #line 572 "parser.y"
01822 {
01823
01824
01825 CSSParser *p = static_cast<CSSParser *>(parser);
01826 yyval.element = (p->defaultNamespace<<16) | yyvsp[0].element;
01827 }
01828 break;
01829
01830 case 69:
01831 #line 581 "parser.y"
01832 { yyval.ns = 0; }
01833 break;
01834
01835 case 70:
01836 #line 582 "parser.y"
01837 { yyval.ns = 1; }
01838 break;
01839
01840 case 71:
01841 #line 583 "parser.y"
01842 { yyval.ns = 0xffff; }
01843 break;
01844
01845 case 72:
01846 #line 588 "parser.y"
01847 {
01848 CSSParser *p = static_cast<CSSParser *>(parser);
01849 DOM::DocumentImpl *doc = p->document();
01850 QString tag = qString(yyvsp[0].string);
01851 if ( doc ) {
01852 if (doc->isHTMLDocument())
01853 tag = tag.lower();
01854 const DOMString dtag(tag);
01855 #ifdef APPLE_CHANGES
01856 yyval.element = doc->tagId(0, dtag.implementation(), false);
01857 #else
01858 yyval.element = doc->getId(NodeImpl::ElementId, dtag.implementation(), false, true);
01859 #endif
01860 } else {
01861 yyval.element = khtml::getTagID(tag.lower().ascii(), tag.length());
01862
01863
01864
01865 }
01866 }
01867 break;
01868
01869 case 73:
01870 #line 608 "parser.y"
01871 { yyval.element = 0xffff; }
01872 break;
01873
01874 case 74:
01875 #line 612 "parser.y"
01876 {
01877 yyval.selector = yyvsp[0].selector;
01878 yyval.selector->nonCSSHint = static_cast<CSSParser *>(parser)->nonCSSHint;
01879 }
01880 break;
01881
01882 case 75:
01883 #line 616 "parser.y"
01884 {
01885 yyval.selector = yyvsp[-1].selector;
01886 if ( yyval.selector ) {
01887 CSSSelector *end = yyvsp[-1].selector;
01888 while( end->tagHistory )
01889 end = end->tagHistory;
01890 end->relation = CSSSelector::SubSelector;
01891 end->tagHistory = yyvsp[0].selector;
01892 }
01893 }
01894 break;
01895
01896 case 76:
01897 #line 626 "parser.y"
01898 {
01899 delete yyvsp[-1].selector;
01900 yyval.selector = 0;
01901 }
01902 break;
01903
01904 case 77:
01905 #line 633 "parser.y"
01906 {
01907 yyval.selector = new CSSSelector();
01908 yyval.selector->match = CSSSelector::Id;
01909 yyval.selector->attr = ATTR_ID;
01910 yyval.selector->value = domString(yyvsp[0].string);
01911 }
01912 break;
01913
01914 case 81:
01915 #line 645 "parser.y"
01916 {
01917 yyval.selector = new CSSSelector();
01918 yyval.selector->match = CSSSelector::List;
01919 yyval.selector->attr = ATTR_CLASS;
01920 yyval.selector->value = domString(yyvsp[0].string);
01921 }
01922 break;
01923
01924 case 82:
01925 #line 654 "parser.y"
01926 { yyval.attribute = (yyvsp[-1].ns<<16) | yyvsp[0].attribute; }
01927 break;
01928
01929 case 83:
01930 #line 655 "parser.y"
01931 {
01932
01933 yyval.attribute = yyvsp[0].attribute;
01934 }
01935 break;
01936
01937 case 84:
01938 #line 662 "parser.y"
01939 {
01940 CSSParser *p = static_cast<CSSParser *>(parser);
01941 DOM::DocumentImpl *doc = p->document();
01942
01943 QString attr = qString(yyvsp[-1].string);
01944 if ( doc ) {
01945 if (doc->isHTMLDocument())
01946 attr = attr.lower();
01947 const DOMString dattr(attr);
01948 #ifdef APPLE_CHANGES
01949 yyval.attribute = doc->attrId(0, dattr.implementation(), false);
01950 #else
01951 yyval.attribute = doc->getId(NodeImpl::AttributeId, dattr.implementation(), false, true);
01952 #endif
01953 } else {
01954 yyval.attribute = khtml::getAttrID(attr.lower().ascii(), attr.length());
01955
01956
01957 assert(yyval.attribute != 0);
01958 }
01959 }
01960 break;
01961
01962 case 85:
01963 #line 686 "parser.y"
01964 {
01965 yyval.selector = new CSSSelector();
01966 yyval.selector->attr = yyvsp[-1].attribute;
01967 yyval.selector->match = CSSSelector::Set;
01968 }
01969 break;
01970
01971 case 86:
01972 #line 691 "parser.y"
01973 {
01974 yyval.selector = new CSSSelector();
01975 yyval.selector->attr = yyvsp[-5].attribute;
01976 yyval.selector->match = (CSSSelector::Match)yyvsp[-4].val;
01977 yyval.selector->value = domString(yyvsp[-2].string);
01978 }
01979 break;
01980
01981 case 87:
01982 #line 700 "parser.y"
01983 {
01984 yyval.val = CSSSelector::Exact;
01985 }
01986 break;
01987
01988 case 88:
01989 #line 703 "parser.y"
01990 {
01991 yyval.val = CSSSelector::List;
01992 }
01993 break;
01994
01995 case 89:
01996 #line 706 "parser.y"
01997 {
01998 yyval.val = CSSSelector::Hyphen;
01999 }
02000 break;
02001
02002 case 90:
02003 #line 709 "parser.y"
02004 {
02005 yyval.val = CSSSelector::Begin;
02006 }
02007 break;
02008
02009 case 91:
02010 #line 712 "parser.y"
02011 {
02012 yyval.val = CSSSelector::End;
02013 }
02014 break;
02015
02016 case 92:
02017 #line 715 "parser.y"
02018 {
02019 yyval.val = CSSSelector::Contain;
02020 }
02021 break;
02022
02023 case 95:
02024 #line 726 "parser.y"
02025 {
02026 yyval.selector = new CSSSelector();
02027 yyval.selector->match = CSSSelector::Pseudo;
02028 yyval.selector->value = domString(yyvsp[0].string);
02029 }
02030 break;
02031
02032 case 96:
02033 #line 732 "parser.y"
02034 {
02035 yyval.selector = new CSSSelector();
02036 yyval.selector->match = CSSSelector::Pseudo;
02037 yyval.selector->value = domString(yyvsp[0].string);
02038 }
02039 break;
02040
02041 case 97:
02042 #line 737 "parser.y"
02043 {
02044 yyval.selector = new CSSSelector();
02045 yyval.selector->match = CSSSelector::Pseudo;
02046 yyval.selector->simpleSelector = yyvsp[-1].selector;
02047 yyval.selector->value = domString(yyvsp[-3].string);
02048 }
02049 break;
02050
02051 case 98:
02052 #line 746 "parser.y"
02053 {
02054 yyval.ok = yyvsp[0].ok;
02055 }
02056 break;
02057
02058 case 99:
02059 #line 749 "parser.y"
02060 {
02061 yyval.ok = yyvsp[-1].ok;
02062 if ( yyvsp[0].ok )
02063 yyval.ok = yyvsp[0].ok;
02064 }
02065 break;
02066
02067 case 100:
02068 #line 754 "parser.y"
02069 {
02070 yyval.ok = yyvsp[0].ok;
02071 }
02072 break;
02073
02074 case 101:
02075 #line 757 "parser.y"
02076 {
02077 yyval.ok = false;
02078 #ifdef CSS_DEBUG
02079 kdDebug( 6080 ) << "skipping bogus declaration" << endl;
02080 #endif
02081 }
02082 break;
02083
02084 case 102:
02085 #line 763 "parser.y"
02086 {
02087 yyval.ok = false;
02088 #ifdef CSS_DEBUG
02089 kdDebug( 6080 ) << "skipping all declarations" << endl;
02090 #endif
02091 }
02092 break;
02093
02094 case 103:
02095 #line 772 "parser.y"
02096 {
02097 yyval.ok = yyvsp[-2].ok;
02098 }
02099 break;
02100
02101 case 104:
02102 #line 775 "parser.y"
02103 {
02104 yyval.ok = false;
02105 #ifdef CSS_DEBUG
02106 kdDebug( 6080 ) << "skipping bogus declaration" << endl;
02107 #endif
02108 }
02109 break;
02110
02111 case 105:
02112 #line 781 "parser.y"
02113 {
02114 yyval.ok = false;
02115 #ifdef CSS_DEBUG
02116 kdDebug( 6080 ) << "skipping bogus declaration" << endl;
02117 #endif
02118 }
02119 break;
02120
02121 case 106:
02122 #line 787 "parser.y"
02123 {
02124 yyval.ok = yyvsp[-3].ok;
02125 if ( yyvsp[-2].ok )
02126 yyval.ok = yyvsp[-2].ok;
02127 }
02128 break;
02129
02130 case 107:
02131 #line 792 "parser.y"
02132 {
02133 yyval.ok = yyvsp[-3].ok;
02134 #ifdef CSS_DEBUG
02135 kdDebug( 6080 ) << "skipping bogus declaration" << endl;
02136 #endif
02137 }
02138 break;
02139
02140 case 108:
02141 #line 798 "parser.y"
02142 {
02143 yyval.ok = yyvsp[-5].ok;
02144 #ifdef CSS_DEBUG
02145 kdDebug( 6080 ) << "skipping bogus declaration" << endl;
02146 #endif
02147 }
02148 break;
02149
02150 case 109:
02151 #line 807 "parser.y"
02152 {
02153 yyval.ok = false;
02154 CSSParser *p = static_cast<CSSParser *>(parser);
02155 if ( yyvsp[-4].prop_id && yyvsp[-1].valueList ) {
02156 p->valueList = yyvsp[-1].valueList;
02157 #ifdef CSS_DEBUG
02158 kdDebug( 6080 ) << " got property: " << yyvsp[-4].prop_id <<
02159 (yyvsp[0].b?" important":"")<< endl;
02160 #endif
02161 bool ok = p->parseValue( yyvsp[-4].prop_id, yyvsp[0].b );
02162 if ( ok )
02163 yyval.ok = ok;
02164 #ifdef CSS_DEBUG
02165 else
02166 kdDebug( 6080 ) << " couldn't parse value!" << endl;
02167 #endif
02168 } else {
02169 delete yyvsp[-1].valueList;
02170 }
02171 delete p->valueList;
02172 p->valueList = 0;
02173 }
02174 break;
02175
02176 case 110:
02177 #line 832 "parser.y"
02178 {
02179 QString str = qString(yyvsp[-1].string);
02180 yyval.prop_id = getPropertyID( str.lower().latin1(), str.length() );
02181 }
02182 break;
02183
02184 case 111:
02185 #line 839 "parser.y"
02186 { yyval.b = true; }
02187 break;
02188
02189 case 112:
02190 #line 840 "parser.y"
02191 { yyval.b = false; }
02192 break;
02193
02194 case 113:
02195 #line 844 "parser.y"
02196 {
02197 yyval.valueList = new ValueList;
02198 yyval.valueList->addValue( yyvsp[0].value );
02199 }
02200 break;
02201
02202 case 114:
02203 #line 848 "parser.y"
02204 {
02205 yyval.valueList = yyvsp[-2].valueList;
02206 if ( yyval.valueList ) {
02207 if ( yyvsp[-1].tok ) {
02208 Value v;
02209 v.id = 0;
02210 v.unit = Value::Operator;
02211 v.iValue = yyvsp[-1].tok;
02212 yyval.valueList->addValue( v );
02213 }
02214 yyval.valueList->addValue( yyvsp[0].value );
02215 }
02216 }
02217 break;
02218
02219 case 115:
02220 #line 861 "parser.y"
02221 {
02222 delete yyvsp[-1].valueList;
02223 yyval.valueList = 0;
02224 }
02225 break;
02226
02227 case 116:
02228 #line 868 "parser.y"
02229 {
02230 yyval.tok = '/';
02231 }
02232 break;
02233
02234 case 117:
02235 #line 871 "parser.y"
02236 {
02237 yyval.tok = ',';
02238 }
02239 break;
02240
02241 case 118:
02242 #line 874 "parser.y"
02243 {
02244 yyval.tok = 0;
02245 }
02246 break;
02247
02248 case 119:
02249 #line 880 "parser.y"
02250 { yyval.value = yyvsp[0].value; }
02251 break;
02252
02253 case 120:
02254 #line 881 "parser.y"
02255 { yyval.value = yyvsp[0].value; yyval.value.fValue *= yyvsp[-1].val; }
02256 break;
02257
02258 case 121:
02259 #line 882 "parser.y"
02260 { yyval.value.id = 0; yyval.value.string = yyvsp[-1].string; yyval.value.unit = CSSPrimitiveValue::CSS_STRING; }
02261 break;
02262
02263 case 122:
02264 #line 883 "parser.y"
02265 {
02266 QString str = qString( yyvsp[-1].string );
02267 yyval.value.id = getValueID( str.lower().latin1(), str.length() );
02268 yyval.value.unit = CSSPrimitiveValue::CSS_IDENT;
02269 yyval.value.string = yyvsp[-1].string;
02270 }
02271 break;
02272
02273 case 123:
02274 #line 889 "parser.y"
02275 { yyval.value.id = 0; yyval.value.string = yyvsp[-1].string; yyval.value.unit = CSSPrimitiveValue::CSS_URI; }
02276 break;
02277
02278 case 124:
02279 #line 890 "parser.y"
02280 { yyval.value.id = 0; yyval.value.iValue = 0; yyval.value.unit = CSSPrimitiveValue::CSS_UNKNOWN; }
02281 break;
02282
02283 case 125:
02284 #line 891 "parser.y"
02285 { yyval.value.id = 0; yyval.value.string = yyvsp[0].string; yyval.value.unit = CSSPrimitiveValue::CSS_RGBCOLOR; }
02286 break;
02287
02288 case 126:
02289 #line 893 "parser.y"
02290 {
02291 yyval.value = yyvsp[0].value;
02292 }
02293 break;
02294
02295 case 127:
02296 #line 899 "parser.y"
02297 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_NUMBER; }
02298 break;
02299
02300 case 128:
02301 #line 900 "parser.y"
02302 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_PERCENTAGE; }
02303 break;
02304
02305 case 129:
02306 #line 901 "parser.y"
02307 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_PX; }
02308 break;
02309
02310 case 130:
02311 #line 902 "parser.y"
02312 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_CM; }
02313 break;
02314
02315 case 131:
02316 #line 903 "parser.y"
02317 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_MM; }
02318 break;
02319
02320 case 132:
02321 #line 904 "parser.y"
02322 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_IN; }
02323 break;
02324
02325 case 133:
02326 #line 905 "parser.y"
02327 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_PT; }
02328 break;
02329
02330 case 134:
02331 #line 906 "parser.y"
02332 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_PC; }
02333 break;
02334
02335 case 135:
02336 #line 907 "parser.y"
02337 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_DEG; }
02338 break;
02339
02340 case 136:
02341 #line 908 "parser.y"
02342 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_RAD; }
02343 break;
02344
02345 case 137:
02346 #line 909 "parser.y"
02347 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_GRAD; }
02348 break;
02349
02350 case 138:
02351 #line 910 "parser.y"
02352 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_MS; }
02353 break;
02354
02355 case 139:
02356 #line 911 "parser.y"
02357 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_S; }
02358 break;
02359
02360 case 140:
02361 #line 912 "parser.y"
02362 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_HZ; }
02363 break;
02364
02365 case 141:
02366 #line 913 "parser.y"
02367 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_KHZ; }
02368 break;
02369
02370 case 142:
02371 #line 914 "parser.y"
02372 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_EMS; }
02373 break;
02374
02375 case 143:
02376 #line 915 "parser.y"
02377 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = Value::Q_EMS; }
02378 break;
02379
02380 case 144:
02381 #line 916 "parser.y"
02382 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_EXS; }
02383 break;
02384
02385 case 145:
02386 #line 917 "parser.y"
02387 { yyval.value.id = 0; yyval.value.string = yyvsp[-1].string; yyval.value.unit = CSSPrimitiveValue::CSS_DIMENSION; }
02388 break;
02389
02390 case 146:
02391 #line 922 "parser.y"
02392 {
02393 Function *f = new Function;
02394 f->name = yyvsp[-4].string;
02395 f->args = yyvsp[-2].valueList;
02396 yyval.value.id = 0;
02397 yyval.value.unit = Value::Function;
02398 yyval.value.function = f;
02399 }
02400 break;
02401
02402 case 147:
02403 #line 930 "parser.y"
02404 {
02405 Function *f = new Function;
02406 f->name = yyvsp[-2].string;
02407 f->args = 0;
02408 yyval.value.id = 0;
02409 yyval.value.unit = Value::Function;
02410 yyval.value.function = f;
02411 }
02412 break;
02413
02414 case 148:
02415 #line 942 "parser.y"
02416 { yyval.string = yyvsp[-1].string; }
02417 break;
02418
02419 case 149:
02420 #line 949 "parser.y"
02421 {
02422 yyval.rule = 0;
02423 #ifdef CSS_DEBUG
02424 kdDebug( 6080 ) << "skipped invalid @-rule" << endl;
02425 #endif
02426 }
02427 break;
02428
02429 case 150:
02430 #line 955 "parser.y"
02431 {
02432 yyval.rule = 0;
02433 #ifdef CSS_DEBUG
02434 kdDebug( 6080 ) << "skipped invalid @-rule" << endl;
02435 #endif
02436 }
02437 break;
02438
02439 case 151:
02440 #line 964 "parser.y"
02441 {
02442 yyval.rule = 0;
02443 #ifdef CSS_DEBUG
02444 kdDebug( 6080 ) << "skipped invalid rule" << endl;
02445 #endif
02446 }
02447 break;
02448
02449
02450 }
02451
02452
02453 #line 2454 "parser.tab.c"
02454
02455 yyvsp -= yylen;
02456 yyssp -= yylen;
02457
02458
02459 #if YYDEBUG
02460 if (yydebug)
02461 {
02462 short *yyssp1 = yyss - 1;
02463 YYFPRINTF (stderr, "state stack now");
02464 while (yyssp1 != yyssp)
02465 YYFPRINTF (stderr, " %d", *++yyssp1);
02466 YYFPRINTF (stderr, "\n");
02467 }
02468 #endif
02469
02470 *++yyvsp = yyval;
02471
02472
02473
02474
02475
02476
02477 yyn = yyr1[yyn];
02478
02479 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
02480 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
02481 yystate = yytable[yystate];
02482 else
02483 yystate = yydefgoto[yyn - YYNTOKENS];
02484
02485 goto yynewstate;
02486
02487
02488
02489
02490
02491 yyerrlab:
02492
02493 if (!yyerrstatus)
02494 {
02495 ++yynerrs;
02496 #if YYERROR_VERBOSE
02497 yyn = yypact[yystate];
02498
02499 if (YYPACT_NINF < yyn && yyn < YYLAST)
02500 {
02501 YYSIZE_T yysize = 0;
02502 int yytype = YYTRANSLATE (yychar);
02503 char *yymsg;
02504 int yyx, yycount;
02505
02506 yycount = 0;
02507
02508
02509 for (yyx = yyn < 0 ? -yyn : 0;
02510 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
02511 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
02512 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
02513 yysize += yystrlen ("parse error, unexpected ") + 1;
02514 yysize += yystrlen (yytname[yytype]);
02515 yymsg = (char *) YYSTACK_ALLOC (yysize);
02516 if (yymsg != 0)
02517 {
02518 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
02519 yyp = yystpcpy (yyp, yytname[yytype]);
02520
02521 if (yycount < 5)
02522 {
02523 yycount = 0;
02524 for (yyx = yyn < 0 ? -yyn : 0;
02525 yyx < (int) (sizeof (yytname) / sizeof (char *));
02526 yyx++)
02527 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
02528 {
02529 const char *yyq = ! yycount ? ", expecting " : " or ";
02530 yyp = yystpcpy (yyp, yyq);
02531 yyp = yystpcpy (yyp, yytname[yyx]);
02532 yycount++;
02533 }
02534 }
02535 yyerror (yymsg);
02536 YYSTACK_FREE (yymsg);
02537 }
02538 else
02539 yyerror ("parse error; also virtual memory exhausted");
02540 }
02541 else
02542 #endif
02543 yyerror ("parse error");
02544 }
02545 goto yyerrlab1;
02546
02547
02548
02549
02550
02551 yyerrlab1:
02552 if (yyerrstatus == 3)
02553 {
02554
02555
02556
02557
02558 if (yychar == YYEOF)
02559 {
02560
02561 YYPOPSTACK;
02562
02563 while (yyssp > yyss)
02564 {
02565 YYDPRINTF ((stderr, "Error: popping "));
02566 YYDSYMPRINT ((stderr,
02567 yystos[*yyssp],
02568 *yyvsp));
02569 YYDPRINTF ((stderr, "\n"));
02570 yydestruct (yystos[*yyssp], *yyvsp);
02571 YYPOPSTACK;
02572 }
02573 YYABORT;
02574 }
02575
02576 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
02577 yychar, yytname[yychar1]));
02578 yydestruct (yychar1, yylval);
02579 yychar = YYEMPTY;
02580 }
02581
02582
02583
02584
02585 yyerrstatus = 3;
02586
02587 for (;;)
02588 {
02589 yyn = yypact[yystate];
02590 if (yyn != YYPACT_NINF)
02591 {
02592 yyn += YYTERROR;
02593 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
02594 {
02595 yyn = yytable[yyn];
02596 if (0 < yyn)
02597 break;
02598 }
02599 }
02600
02601
02602 if (yyssp == yyss)
02603 YYABORT;
02604
02605 YYDPRINTF ((stderr, "Error: popping "));
02606 YYDSYMPRINT ((stderr,
02607 yystos[*yyssp], *yyvsp));
02608 YYDPRINTF ((stderr, "\n"));
02609
02610 yydestruct (yystos[yystate], *yyvsp);
02611 yyvsp--;
02612 yystate = *--yyssp;
02613
02614
02615 #if YYDEBUG
02616 if (yydebug)
02617 {
02618 short *yyssp1 = yyss - 1;
02619 YYFPRINTF (stderr, "Error: state stack now");
02620 while (yyssp1 != yyssp)
02621 YYFPRINTF (stderr, " %d", *++yyssp1);
02622 YYFPRINTF (stderr, "\n");
02623 }
02624 #endif
02625 }
02626
02627 if (yyn == YYFINAL)
02628 YYACCEPT;
02629
02630 YYDPRINTF ((stderr, "Shifting error token, "));
02631
02632 *++yyvsp = yylval;
02633
02634
02635 yystate = yyn;
02636 goto yynewstate;
02637
02638
02639
02640
02641
02642 yyacceptlab:
02643 yyresult = 0;
02644 goto yyreturn;
02645
02646
02647
02648
02649 yyabortlab:
02650 yyresult = 1;
02651 goto yyreturn;
02652
02653 #ifndef yyoverflow
02654
02655
02656
02657 yyoverflowlab:
02658 yyerror ("parser stack overflow");
02659 yyresult = 2;
02660
02661 #endif
02662
02663 yyreturn:
02664 #ifndef yyoverflow
02665 if (yyss != yyssa)
02666 YYSTACK_FREE (yyss);
02667 #endif
02668 return yyresult;
02669 }
02670
02671
02672 #line 983 "parser.y"
02673
02674
02675