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