Tweak CSSJanus to support noflip for selectors with parentheses
authorEbrahim Byagowi <ebrahim@gnu.org>
Fri, 19 Jul 2013 23:16:07 +0000 (23:16 +0000)
committerRoan Kattouw <roan.kattouw@gmail.com>
Fri, 19 Jul 2013 18:53:27 +0000 (11:53 -0700)
Also suggested for CSSJanus itself at http://code.google.com/p/cssjanus/issues/detail?id=22

Change-Id: I4e3b21522e9c5a72cd456ed3d6a0be9225e4b70d

includes/libs/CSSJanus.php
tests/phpunit/includes/libs/CSSJanusTest.php

index f70e00a..128d9b9 100644 (file)
@@ -99,7 +99,7 @@ class CSSJanus {
                $patterns['possibly_negative_quantity'] = "((?:-?{$patterns['quantity']})|(?:inherit|auto))";
                $patterns['color'] = "(#?{$patterns['nmchar']}+|(?:rgba?|hsla?)\([ \d.,%-]+\))";
                $patterns['url_chars'] = "(?:{$patterns['url_special_chars']}|{$patterns['nonAscii']}|{$patterns['escape']})*";
-               $patterns['lookahead_not_open_brace'] = "(?!({$patterns['nmchar']}|\r?\n|\s|#|\:|\.|\,|\+|>)*?{)";
+               $patterns['lookahead_not_open_brace'] = "(?!({$patterns['nmchar']}|\r?\n|\s|#|\:|\.|\,|\+|>|\(|\))*?{)";
                $patterns['lookahead_not_closing_paren'] = "(?!{$patterns['url_chars']}?{$patterns['valid_after_uri_chars']}\))";
                $patterns['lookahead_for_closing_paren'] = "(?={$patterns['url_chars']}?{$patterns['valid_after_uri_chars']}\))";
                $patterns['noflip_single'] = "/({$patterns['noflip_annotation']}{$patterns['lookahead_not_open_brace']}[^;}]+;?)/i";
index b51dbdf..d80a571 100644 (file)
@@ -393,6 +393,11 @@ class CSSJanusTest extends MediaWikiTestCase {
                                '/* @noflip */ div { float: left; } .foo { float: left; }',
                                '/* @noflip */ div { float: left; } .foo { float: right; }'
                        ),
+                       array(
+                               // support parentheses in selector
+                               '/* @noflip */ .test:not(:first) { margin-right: -0.25em; margin-left: 0.25em; }',
+                               '/* @noflip */ .test:not(:first) { margin-right: -0.25em; margin-left: 0.25em; }'
+                       ),
                        array(
                                // after multiple rules
                                '.foo { float: left; } /* @noflip */ div { float: left; }',