Changeset 176902 in webkit
- Timestamp:
- Dec 5, 2014 9:09:11 PM (9 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r176864 r176902 1 2014-12-05 Dhi Aurrahman <diorahman@rockybars.com> 2 3 Implement parser for :lang pseudo class selector arguments that contain wildcard '*' subtags 4 https://bugs.webkit.org/show_bug.cgi?id=139014 5 6 Reviewed by Benjamin Poulain. 7 8 * fast/css/css-selector-text-expected.txt: Updated for asterisk containing input. 9 * fast/css/css-selector-text.html: Updated for asterisk containing input. 10 * fast/css/parsing-css-lang-expected.txt: Added. 11 * fast/css/parsing-css-lang.html: Added. 12 1 13 2014-12-05 Benjamin Poulain <bpoulain@apple.com> 2 14 -
trunk/LayoutTests/fast/css/css-selector-text-expected.txt
r176545 r176902 47 47 PASS parseThenSerializeRule(':target { }') is ':target { }' 48 48 PASS parseThenSerializeRule(':visited { }') is ':visited { }' 49 50 PASS parseThenSerializeRule(':lang(*-) { }') is ':lang(*-) { }' 51 PASS parseThenSerializeRule(':lang(*--) { }') is ':lang(*--) { }' 52 PASS parseThenSerializeRule(':lang(*---) { }') is ':lang(*---) { }' 53 PASS parseThenSerializeRule(':lang(*----) { }') is ':lang(*----) { }' 54 55 PASS parseThenSerializeRule(':lang(*-ab) { }') is ':lang(*-ab) { }' 56 PASS parseThenSerializeRule(':lang(*-ab-) { }') is ':lang(*-ab-) { }' 57 PASS parseThenSerializeRule(':lang(*-1996) { }') is ':lang(*-1996) { }' 58 PASS parseThenSerializeRule(':lang(*-DE-1996) { }') is ':lang(*-DE-1996) { }' 49 59 50 60 PASS parseThenSerializeRule(':lang(a) { }') is ':lang(a) { }' … … 295 305 PASS parseThenSerializeRule(':lang( en,en,en ) { }') is ':lang(en, en, en) { }' 296 306 307 PASS parseThenSerializeRule(':lang(*-DE, *-CH, *-EN) { }') is ':lang(*-DE, *-CH, *-EN) { }' 308 PASS parseThenSerializeRule(':lang(*-DE,*-CH,*-EN) { }') is ':lang(*-DE, *-CH, *-EN) { }' 309 PASS parseThenSerializeRule(':lang( *-DE , *-CH , *-EN ) { }') is ':lang(*-DE, *-CH, *-EN) { }' 310 311 PASS parseThenSerializeRule(':lang(\\*) { }') is ':lang(*) { }' 312 PASS parseThenSerializeRule(':lang(*-\\*) { }') is ':lang(*-*) { }' 313 PASS parseThenSerializeRule(':lang(*-\\*-\\*) { }') is ':lang(*-*-*) { }' 314 PASS parseThenSerializeRule(':lang(*-\\*-\\*-\\*) { }') is ':lang(*-*-*-*) { }' 315 316 PASS parseThenSerializeRule(':lang(ab-\\*) { }') is ':lang(ab-*) { }' 317 PASS parseThenSerializeRule(':lang(*-ab-\\*) { }') is ':lang(*-ab-*) { }' 318 PASS parseThenSerializeRule(':lang(*-ab-\\*-) { }') is ':lang(*-ab-*-) { }' 319 PASS parseThenSerializeRule(':lang(*-foo-\\3A) { }') is ':lang(*-foo-:) { }' 320 PASS parseThenSerializeRule(':lang(*-foo-\\3A\\`\\)) { }') is ':lang(*-foo-:`)) { }' 321 PASS parseThenSerializeRule(':lang(*-foo-\\*) { }') is ':lang(*-foo-*) { }' 322 PASS parseThenSerializeRule(':lang(*-foo-\\0072 aisin) { }') is ':lang(*-foo-raisin) { }' 323 PASS parseThenSerializeRule(':lang(*-foo-\\0062 \\0061 r) { }') is ':lang(*-foo-bar) { }' 324 PASS parseThenSerializeRule(':lang(*-foo-col\\6Fr) { }') is ':lang(*-foo-color) { }' 325 326 PASS parseThenSerializeRule(':lang(\\* ) { }') is ':lang(*) { }' 327 PASS parseThenSerializeRule(':lang(*- ) { }') is ':lang(*-) { }' 328 PASS parseThenSerializeRule(':lang(*-en ) { }') is ':lang(*-en) { }' 329 PASS parseThenSerializeRule(':lang(*-en-\\* ) { }') is ':lang(*-en-*) { }' 330 PASS parseThenSerializeRule(':lang(*-en-\\*-fr ) { }') is ':lang(*-en-*-fr) { }' 331 PASS parseThenSerializeRule(':lang(*-en-\\*-fr,br ) { }') is ':lang(*-en-*-fr, br) { }' 332 PASS parseThenSerializeRule(':lang(*-en-\\*-fr, br ) { }') is ':lang(*-en-*-fr, br) { }' 333 PASS parseThenSerializeRule(':lang(*-en-\\*-fr, br ) { }') is ':lang(*-en-*-fr, br) { }' 334 PASS parseThenSerializeRule(':lang( *-en-\\*-fr, br ) { }') is ':lang(*-en-*-fr, br) { }' 335 PASS parseThenSerializeRule(':lang( *-en-\\*-fr, br ) { }') is ':lang(*-en-*-fr, br) { }' 336 PASS parseThenSerializeRule(':lang( *-en-\\*-fr , br ) { }') is ':lang(*-en-*-fr, br) { }' 337 PASS parseThenSerializeRule(':lang(*-en-\\*-fr,*-br-zh ) { }') is ':lang(*-en-*-fr, *-br-zh) { }' 338 PASS parseThenSerializeRule(':lang(*-en-\\*-fr, *-br-zh ) { }') is ':lang(*-en-*-fr, *-br-zh) { }' 339 PASS parseThenSerializeRule(':lang(*-en-\\*-fr, *-br-zh ) { }') is ':lang(*-en-*-fr, *-br-zh) { }' 340 PASS parseThenSerializeRule(':lang(*-en-\\*-fr, *-br-zh ) { }') is ':lang(*-en-*-fr, *-br-zh) { }' 341 PASS parseThenSerializeRule(':lang(*-en-\\*-fr, *-br-zh ) { }') is ':lang(*-en-*-fr, *-br-zh) { }' 342 343 PASS parseThenSerializeRule(':lang(*-en-\\*-fr,br-\\*-zh ) { }') is ':lang(*-en-*-fr, br-*-zh) { }' 344 PASS parseThenSerializeRule(':lang(*-en-\\*-fr, br-\\*-zh ) { }') is ':lang(*-en-*-fr, br-*-zh) { }' 345 PASS parseThenSerializeRule(':lang(*-en-\\*-fr, br-\\*-zh ) { }') is ':lang(*-en-*-fr, br-*-zh) { }' 346 PASS parseThenSerializeRule(':lang(*-en-\\*-fr, br-\\*-zh ) { }') is ':lang(*-en-*-fr, br-*-zh) { }' 347 PASS parseThenSerializeRule(':lang( *-en-\\*-fr, br-\\*-zh ) { }') is ':lang(*-en-*-fr, br-*-zh) { }' 348 PASS parseThenSerializeRule(':lang( *-en-\\*-fr , br-\\*-zh ) { }') is ':lang(*-en-*-fr, br-*-zh) { }' 349 PASS parseThenSerializeRule(':lang( *-en-\\*-fr , br-\\*-zh ) { }') is ':lang(*-en-*-fr, br-*-zh) { }' 350 351 PASS parseThenSerializeRule(':lang(\\*) { }') is ':lang(*) { }' 352 PASS parseThenSerializeRule(':lang(\\* ) { }') is ':lang(*) { }' 353 PASS parseThenSerializeRule(':lang(\\* ) { }') is ':lang(*) { }' 354 PASS parseThenSerializeRule(':lang( \\* ) { }') is ':lang(*) { }' 355 PASS parseThenSerializeRule(':lang( \\*) { }') is ':lang(*) { }' 356 PASS parseThenSerializeRule(':lang( \\* ) { }') is ':lang(*) { }' 357 358 PASS parseThenSerializeRule(':lang( \\*,id-\\*-sumatra ) { }') is ':lang(*, id-*-sumatra) { }' 359 PASS parseThenSerializeRule(':lang( \\* ,id-\\*-sumatra) { }') is ':lang(*, id-*-sumatra) { }' 360 PASS parseThenSerializeRule(':lang( \\* , id-\\*-sumatra ) { }') is ':lang(*, id-*-sumatra) { }' 361 PASS parseThenSerializeRule(':lang( \\* , id-\\*-sumatra ) { }') is ':lang(*, id-*-sumatra) { }' 362 363 PASS parseThenSerializeRule(':lang(*-1996) { }') is ':lang(*-1996) { }' 364 PASS parseThenSerializeRule(':lang(*-1996, *-1997) { }') is ':lang(*-1996, *-1997) { }' 365 PASS parseThenSerializeRule(':lang(*-1996, *-1997 ) { }') is ':lang(*-1996, *-1997) { }' 366 PASS parseThenSerializeRule(':lang( *-1996 , *-1997 ) { }') is ':lang(*-1996, *-1997) { }' 367 PASS parseThenSerializeRule(':lang( *-1996 ,*-1997 ) { }') is ':lang(*-1996, *-1997) { }' 368 PASS parseThenSerializeRule(':lang( *-1996,*-1997 ) { }') is ':lang(*-1996, *-1997) { }' 369 370 PASS parseThenSerializeRule(':lang(en-\\*) { }') is ':lang(en-*) { }' 371 PASS parseThenSerializeRule(':lang(en-\\*, fr-\\*) { }') is ':lang(en-*, fr-*) { }' 372 PASS parseThenSerializeRule(':lang(en-\\*, fr-\\* ) { }') is ':lang(en-*, fr-*) { }' 373 PASS parseThenSerializeRule(':lang( en-\\* , fr-\\* ) { }') is ':lang(en-*, fr-*) { }' 374 PASS parseThenSerializeRule(':lang( en-\\* ,fr-\\* ) { }') is ':lang(en-*, fr-*) { }' 375 PASS parseThenSerializeRule(':lang( en-\\*,fr-\\* ) { }') is ':lang(en-*, fr-*) { }' 376 297 377 PASS parseThenSerializeRule(':lang() { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 298 378 PASS parseThenSerializeRule(':lang(12, b, c) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). … … 317 397 PASS parseThenSerializeRule(':lang([]) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 318 398 PASS parseThenSerializeRule(':lang(@media screen {}) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 399 PASS parseThenSerializeRule(':lang(*)') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 400 PASS parseThenSerializeRule(':lang(**)') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 401 PASS parseThenSerializeRule(':lang(-*-)') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 402 PASS parseThenSerializeRule(':lang(*-*) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 403 PASS parseThenSerializeRule(':lang(de-*)') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 404 PASS parseThenSerializeRule(':lang(*-en-*) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 405 PASS parseThenSerializeRule(':lang(*-en-fr-*) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 406 PASS parseThenSerializeRule(':lang(*-en-*fr) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 407 PASS parseThenSerializeRule(':lang(*-*en-fr) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 408 PASS parseThenSerializeRule(':lang(*-1997)') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 409 PASS parseThenSerializeRule(':lang(*-1997-*)') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 410 PASS parseThenSerializeRule(':lang(*a*) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 411 PASS parseThenSerializeRule(':lang(*a) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 412 PASS parseThenSerializeRule(':lang(a*) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 413 PASS parseThenSerializeRule(':lang(*-a, a*) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 414 PASS parseThenSerializeRule(':lang(*-a, a**) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 415 PASS parseThenSerializeRule(':lang(*-a, *a) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 416 PASS parseThenSerializeRule(':lang(*-a, **a) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 417 PASS parseThenSerializeRule(':lang(*- a*) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 418 PASS parseThenSerializeRule(':lang(*-a, br fr) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 419 PASS parseThenSerializeRule(':lang(*-a, br fr en *) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText'). 319 420 320 421 PASS parseThenSerializeRule(':role(a) { }') is ':role(a) { }' -
trunk/LayoutTests/fast/css/css-selector-text.html
r176545 r176902 81 81 debug(''); 82 82 83 testSelectorRoundTrip(":lang(*-)"); 84 testSelectorRoundTrip(":lang(*--)"); 85 testSelectorRoundTrip(":lang(*---)"); 86 testSelectorRoundTrip(":lang(*----)"); 87 88 debug(''); 89 90 testSelectorRoundTrip(":lang(*-ab)"); 91 testSelectorRoundTrip(":lang(*-ab-)"); 92 testSelectorRoundTrip(":lang(*-1996)"); 93 testSelectorRoundTrip(":lang(*-DE-1996)"); 94 95 debug(''); 96 83 97 testSelectorRoundTrip(":lang(a)"); 84 98 testSelectorRoundTrip(":lang(a, b, c)"); … … 89 103 testSelectorRoundTrip(":lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996, de-CH, it-CH, fr-CH, rm-CH)"); 90 104 91 debug('') 105 debug(''); 92 106 93 107 testSelectorRoundTrip(":lang(a, a, a)"); … … 376 390 debug(''); 377 391 392 shouldBe("parseThenSerializeRule(':lang(*-DE, *-CH, *-EN) { }')", "':lang(*-DE, *-CH, *-EN) { }'"); 393 shouldBe("parseThenSerializeRule(':lang(*-DE,*-CH,*-EN) { }')", "':lang(*-DE, *-CH, *-EN) { }'"); 394 shouldBe("parseThenSerializeRule(':lang( *-DE , *-CH , *-EN ) { }')", "':lang(*-DE, *-CH, *-EN) { }'"); 395 396 debug(''); 397 398 shouldBe("parseThenSerializeRule(':lang(\\\\*) { }')", "':lang(*) { }'"); 399 shouldBe("parseThenSerializeRule(':lang(*-\\\\*) { }')", "':lang(*-*) { }'"); 400 shouldBe("parseThenSerializeRule(':lang(*-\\\\*-\\\\*) { }')", "':lang(*-*-*) { }'"); 401 shouldBe("parseThenSerializeRule(':lang(*-\\\\*-\\\\*-\\\\*) { }')", "':lang(*-*-*-*) { }'"); 402 403 debug(''); 404 405 shouldBe("parseThenSerializeRule(':lang(ab-\\\\*) { }')", "':lang(ab-*) { }'"); 406 shouldBe("parseThenSerializeRule(':lang(*-ab-\\\\*) { }')", "':lang(*-ab-*) { }'"); 407 shouldBe("parseThenSerializeRule(':lang(*-ab-\\\\*-) { }')", "':lang(*-ab-*-) { }'"); 408 409 shouldBe("parseThenSerializeRule(':lang(*-foo-\\\\3A) { }')", "':lang(*-foo-:) { }'"); 410 shouldBe("parseThenSerializeRule(':lang(*-foo-\\\\3A\\\\`\\\\)) { }')", "':lang(*-foo-:`)) { }'"); 411 shouldBe("parseThenSerializeRule(':lang(*-foo-\\\\*) { }')", "':lang(*-foo-*) { }'"); 412 413 shouldBe("parseThenSerializeRule(':lang(*-foo-\\\\0072 aisin) { }')", "':lang(*-foo-raisin) { }'"); 414 shouldBe("parseThenSerializeRule(':lang(*-foo-\\\\0062 \\\\0061 r) { }')", "':lang(*-foo-bar) { }'"); 415 shouldBe("parseThenSerializeRule(':lang(*-foo-col\\\\6Fr) { }')", "':lang(*-foo-color) { }'"); 416 417 debug(''); 418 419 shouldBe("parseThenSerializeRule(':lang(\\\\* ) { }')", "':lang(*) { }'"); 420 shouldBe("parseThenSerializeRule(':lang(*- ) { }')", "':lang(*-) { }'"); 421 shouldBe("parseThenSerializeRule(':lang(*-en ) { }')", "':lang(*-en) { }'"); 422 shouldBe("parseThenSerializeRule(':lang(*-en-\\\\* ) { }')", "':lang(*-en-*) { }'"); 423 shouldBe("parseThenSerializeRule(':lang(*-en-\\\\*-fr ) { }')", "':lang(*-en-*-fr) { }'"); 424 shouldBe("parseThenSerializeRule(':lang(*-en-\\\\*-fr,br ) { }')", "':lang(*-en-*-fr, br) { }'"); 425 shouldBe("parseThenSerializeRule(':lang(*-en-\\\\*-fr, br ) { }')", "':lang(*-en-*-fr, br) { }'"); 426 shouldBe("parseThenSerializeRule(':lang(*-en-\\\\*-fr, br ) { }')", "':lang(*-en-*-fr, br) { }'"); 427 shouldBe("parseThenSerializeRule(':lang( *-en-\\\\*-fr, br ) { }')", "':lang(*-en-*-fr, br) { }'"); 428 shouldBe("parseThenSerializeRule(':lang( *-en-\\\\*-fr, br ) { }')", "':lang(*-en-*-fr, br) { }'"); 429 shouldBe("parseThenSerializeRule(':lang( *-en-\\\\*-fr , br ) { }')", "':lang(*-en-*-fr, br) { }'"); 430 shouldBe("parseThenSerializeRule(':lang(*-en-\\\\*-fr,*-br-zh ) { }')", "':lang(*-en-*-fr, *-br-zh) { }'"); 431 shouldBe("parseThenSerializeRule(':lang(*-en-\\\\*-fr, *-br-zh ) { }')", "':lang(*-en-*-fr, *-br-zh) { }'"); 432 shouldBe("parseThenSerializeRule(':lang(*-en-\\\\*-fr, *-br-zh ) { }')", "':lang(*-en-*-fr, *-br-zh) { }'"); 433 shouldBe("parseThenSerializeRule(':lang(*-en-\\\\*-fr, *-br-zh ) { }')", "':lang(*-en-*-fr, *-br-zh) { }'"); 434 shouldBe("parseThenSerializeRule(':lang(*-en-\\\\*-fr, *-br-zh ) { }')", "':lang(*-en-*-fr, *-br-zh) { }'"); 435 436 debug(''); 437 438 shouldBe("parseThenSerializeRule(':lang(*-en-\\\\*-fr,br-\\\\*-zh ) { }')", "':lang(*-en-*-fr, br-*-zh) { }'"); 439 shouldBe("parseThenSerializeRule(':lang(*-en-\\\\*-fr, br-\\\\*-zh ) { }')", "':lang(*-en-*-fr, br-*-zh) { }'"); 440 shouldBe("parseThenSerializeRule(':lang(*-en-\\\\*-fr, br-\\\\*-zh ) { }')", "':lang(*-en-*-fr, br-*-zh) { }'"); 441 shouldBe("parseThenSerializeRule(':lang(*-en-\\\\*-fr, br-\\\\*-zh ) { }')", "':lang(*-en-*-fr, br-*-zh) { }'"); 442 shouldBe("parseThenSerializeRule(':lang( *-en-\\\\*-fr, br-\\\\*-zh ) { }')", "':lang(*-en-*-fr, br-*-zh) { }'"); 443 shouldBe("parseThenSerializeRule(':lang( *-en-\\\\*-fr , br-\\\\*-zh ) { }')", "':lang(*-en-*-fr, br-*-zh) { }'"); 444 shouldBe("parseThenSerializeRule(':lang( *-en-\\\\*-fr , br-\\\\*-zh ) { }')", "':lang(*-en-*-fr, br-*-zh) { }'"); 445 446 debug(''); 447 448 shouldBe("parseThenSerializeRule(':lang(\\\\*) { }')", "':lang(*) { }'"); 449 shouldBe("parseThenSerializeRule(':lang(\\\\* ) { }')", "':lang(*) { }'"); 450 shouldBe("parseThenSerializeRule(':lang(\\\\* ) { }')", "':lang(*) { }'"); 451 shouldBe("parseThenSerializeRule(':lang( \\\\* ) { }')", "':lang(*) { }'"); 452 shouldBe("parseThenSerializeRule(':lang( \\\\*) { }')", "':lang(*) { }'"); 453 shouldBe("parseThenSerializeRule(':lang( \\\\* ) { }')", "':lang(*) { }'"); 454 455 debug(''); 456 457 shouldBe("parseThenSerializeRule(':lang( \\\\*,id-\\\\*-sumatra ) { }')", "':lang(*, id-*-sumatra) { }'"); 458 shouldBe("parseThenSerializeRule(':lang( \\\\* ,id-\\\\*-sumatra) { }')", "':lang(*, id-*-sumatra) { }'"); 459 shouldBe("parseThenSerializeRule(':lang( \\\\* , id-\\\\*-sumatra ) { }')", "':lang(*, id-*-sumatra) { }'"); 460 shouldBe("parseThenSerializeRule(':lang( \\\\* , id-\\\\*-sumatra ) { }')", "':lang(*, id-*-sumatra) { }'"); 461 462 debug(''); 463 464 shouldBe("parseThenSerializeRule(':lang(*-1996) { }')", "':lang(*-1996) { }'"); 465 shouldBe("parseThenSerializeRule(':lang(*-1996, *-1997) { }')", "':lang(*-1996, *-1997) { }'"); 466 shouldBe("parseThenSerializeRule(':lang(*-1996, *-1997 ) { }')", "':lang(*-1996, *-1997) { }'"); 467 shouldBe("parseThenSerializeRule(':lang( *-1996 , *-1997 ) { }')", "':lang(*-1996, *-1997) { }'"); 468 shouldBe("parseThenSerializeRule(':lang( *-1996 ,*-1997 ) { }')", "':lang(*-1996, *-1997) { }'"); 469 shouldBe("parseThenSerializeRule(':lang( *-1996,*-1997 ) { }')", "':lang(*-1996, *-1997) { }'"); 470 471 debug(''); 472 473 shouldBe("parseThenSerializeRule(':lang(en-\\\\*) { }')", "':lang(en-*) { }'"); 474 shouldBe("parseThenSerializeRule(':lang(en-\\\\*, fr-\\\\*) { }')", "':lang(en-*, fr-*) { }'"); 475 shouldBe("parseThenSerializeRule(':lang(en-\\\\*, fr-\\\\* ) { }')", "':lang(en-*, fr-*) { }'"); 476 shouldBe("parseThenSerializeRule(':lang( en-\\\\* , fr-\\\\* ) { }')", "':lang(en-*, fr-*) { }'"); 477 shouldBe("parseThenSerializeRule(':lang( en-\\\\* ,fr-\\\\* ) { }')", "':lang(en-*, fr-*) { }'"); 478 shouldBe("parseThenSerializeRule(':lang( en-\\\\*,fr-\\\\* ) { }')", "':lang(en-*, fr-*) { }'"); 479 480 debug(''); 481 378 482 shouldThrow("parseThenSerializeRule(':lang() { }')"); 379 483 shouldThrow("parseThenSerializeRule(':lang(12, b, c) { }')"); … … 399 503 shouldThrow("parseThenSerializeRule(':lang(@media screen {}) { }')"); 400 504 505 shouldThrow("parseThenSerializeRule(':lang(*)')"); 506 shouldThrow("parseThenSerializeRule(':lang(**)')"); 507 shouldThrow("parseThenSerializeRule(':lang(-*-)')"); 508 shouldThrow("parseThenSerializeRule(':lang(*-*) { }')"); 509 shouldThrow("parseThenSerializeRule(':lang(de-*)')"); 510 shouldThrow("parseThenSerializeRule(':lang(*-en-*) { }')"); 511 shouldThrow("parseThenSerializeRule(':lang(*-en-fr-*) { }')"); 512 shouldThrow("parseThenSerializeRule(':lang(*-en-*fr) { }')"); 513 shouldThrow("parseThenSerializeRule(':lang(*-*en-fr) { }')"); 514 shouldThrow("parseThenSerializeRule(':lang(*-1997)')"); 515 shouldThrow("parseThenSerializeRule(':lang(*-1997-*)')"); 516 shouldThrow("parseThenSerializeRule(':lang(*a*) { }')"); 517 shouldThrow("parseThenSerializeRule(':lang(*a) { }')"); 518 shouldThrow("parseThenSerializeRule(':lang(a*) { }')"); 519 shouldThrow("parseThenSerializeRule(':lang(*-a, a*) { }')"); 520 shouldThrow("parseThenSerializeRule(':lang(*-a, a**) { }')"); 521 shouldThrow("parseThenSerializeRule(':lang(*-a, *a) { }')"); 522 shouldThrow("parseThenSerializeRule(':lang(*-a, **a) { }')"); 523 shouldThrow("parseThenSerializeRule(':lang(*- a*) { }')"); 524 shouldThrow("parseThenSerializeRule(':lang(*-a, br fr) { }')"); 525 shouldThrow("parseThenSerializeRule(':lang(*-a, br fr en *) { }')"); 526 401 527 debug(''); 402 528 -
trunk/Source/WebCore/ChangeLog
r176899 r176902 1 2014-12-05 Dhi Aurrahman <diorahman@rockybars.com> 2 3 Implement parser for :lang pseudo class selector arguments that contain wildcard '*' subtags 4 https://bugs.webkit.org/show_bug.cgi?id=139014 5 6 Reviewed by Benjamin Poulain. 7 8 Consider each language range in :lang() that consists of an asterisk 9 immediately followed by an identifier beginning with an ASCII hyphen 10 as a valid input for the selector as specified in [1]. 11 12 [1] http://dev.w3.org/csswg/selectors4/#the-lang-pseudo 13 14 Test: fast/css/parsing-css-lang.html 15 16 * css/CSSGrammar.y.in: 17 * css/CSSParser.cpp: 18 (WebCore::CSSParser::realLex): 19 1 20 2014-12-05 Simon Fraser <simon.fraser@apple.com> 2 21 -
trunk/Source/WebCore/css/CSSGrammar.y.in
r176545 r176902 235 235 #if ENABLE_CSS_SELECTORS_LEVEL4 236 236 %token <string> DIRFUNCTION 237 %token <string> LANGRANGE 237 238 %token <string> LANGFUNCTION 238 239 %token <string> ROLEFUNCTION … … 336 337 337 338 #if ENABLE_CSS_SELECTORS_LEVEL4 339 %type <string> lang_range 338 340 %union { Vector<CSSParserString>* stringList; } 339 %type <stringList> comma_separated_ identifiers340 %destructor { delete $$; } comma_separated_ identifiers341 %type <stringList> comma_separated_lang_ranges 342 %destructor { delete $$; } comma_separated_lang_ranges 341 343 #endif 342 344 … … 1103 1105 1104 1106 #if ENABLE_CSS_SELECTORS_LEVEL4 1105 comma_separated_identifiers: 1106 IDENT %prec UNIMPORTANT_TOK { 1107 lang_range: LANGRANGE | IDENT 1108 1109 comma_separated_lang_ranges: 1110 lang_range %prec UNIMPORTANT_TOK { 1107 1111 $$ = new Vector<CSSParserString>; 1108 1112 $$->append($1); 1109 1113 } 1110 | comma_separated_ identifiers maybe_space ',' maybe_space IDENT%prec UNIMPORTANT_TOK {1114 | comma_separated_lang_ranges maybe_space ',' maybe_space lang_range %prec UNIMPORTANT_TOK { 1111 1115 $$ = $1; 1112 1116 if ($$) 1113 1117 $1->append($5); 1114 1118 } 1115 | comma_separated_ identifiers error {1119 | comma_separated_lang_ranges error { 1116 1120 $$ = nullptr; 1117 1121 delete $1; … … 1389 1393 } 1390 1394 1391 | ':' LANGFUNCTION maybe_space comma_separated_ identifiers maybe_space ')' {1395 | ':' LANGFUNCTION maybe_space comma_separated_lang_ranges maybe_space ')' { 1392 1396 $$ = nullptr; 1393 1397 if ($4) { -
trunk/Source/WebCore/css/CSSParser.cpp
r176722 r176902 11487 11487 ++currentCharacter<SrcCharacterType>(); 11488 11488 m_token = CONTAINS; 11489 } else if (*currentCharacter<SrcCharacterType>() == '-') { 11490 result = currentCharacter<SrcCharacterType>(); 11491 11492 CSSParserString parsedIdentifier; 11493 parseIdentifier(result, parsedIdentifier, hasEscape); 11494 11495 StringBuilder parsedLangRange; 11496 parsedLangRange.append('*'); 11497 parsedLangRange.append(parsedIdentifier); 11498 11499 m_token = LANGRANGE; 11500 yylval->string.init(parsedLangRange.toString()); 11489 11501 } 11490 11502 break;
Note: See TracChangeset
for help on using the changeset viewer.