aboutsummaryrefslogtreecommitdiffstats
path: root/includes/libs/CSSJanus.php
diff options
context:
space:
mode:
authorRoan Kattouw <catrope@users.mediawiki.org>2010-09-10 13:08:54 +0000
committerRoan Kattouw <catrope@users.mediawiki.org>2010-09-10 13:08:54 +0000
commitba57fb3810fec24f7cebff60ce9fc75fd1b6aa21 (patch)
treed7c99d7342cfe4d9369f21d483ba53cacd244b74 /includes/libs/CSSJanus.php
parente5c497f8a692402b92d6355287d13db3d7fb9b18 (diff)
downloadmediawikicore-ba57fb3810fec24f7cebff60ce9fc75fd1b6aa21.tar.gz
mediawikicore-ba57fb3810fec24f7cebff60ce9fc75fd1b6aa21.zip
(bug 25042) CSSJanus does not flip direction: rules outside of body { } selectors
Notes
Notes: http://mediawiki.org/wiki/Special:Code/MediaWiki/72717
Diffstat (limited to 'includes/libs/CSSJanus.php')
-rw-r--r--includes/libs/CSSJanus.php28
1 files changed, 15 insertions, 13 deletions
diff --git a/includes/libs/CSSJanus.php b/includes/libs/CSSJanus.php
index 08e8e0963d78..fc934d39ebdc 100644
--- a/includes/libs/CSSJanus.php
+++ b/includes/libs/CSSJanus.php
@@ -58,8 +58,8 @@ class CSSJanus {
'noflip_single' => null,
'noflip_class' => null,
'comment' => '/\/\*[^*]*\*+([^\/*][^*]*\*+)*\//',
- 'body_direction_ltr' => null,
- 'body_direction_rtl' => null,
+ 'direction_ltr' => null,
+ 'direction_rtl' => null,
'left' => null,
'right' => null,
'left_in_url' => null,
@@ -97,8 +97,8 @@ class CSSJanus {
$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";
$patterns['noflip_class'] = "/({$patterns['noflip_annotation']}{$patterns['chars_within_selector']}})/i";
- $patterns['body_direction_ltr'] = "/({$patterns['body_selector']}{$patterns['chars_within_selector']}{$patterns['direction']})ltr/i";
- $patterns['body_direction_rtl'] = "/({$patterns['body_selector']}{$patterns['chars_within_selector']}{$patterns['direction']})rtl/i";
+ $patterns['direction_ltr'] = "/({$patterns['direction']})ltr/i";
+ $patterns['direction_rtl'] = "/({$patterns['direction']})rtl/i";
$patterns['left'] = "/{$patterns['lookbehind_not_letter']}(left){$patterns['lookahead_not_closing_paren']}{$patterns['lookahead_not_open_brace']}/i";
$patterns['right'] = "/{$patterns['lookbehind_not_letter']}(right){$patterns['lookahead_not_closing_paren']}{$patterns['lookahead_not_open_brace']}/i";
$patterns['left_in_url'] = "/{$patterns['lookbehind_not_letter']}(left){$patterns['lookahead_for_closing_paren']}/i";
@@ -143,7 +143,7 @@ class CSSJanus {
$css = $comments->tokenize( $css );
// LTR->RTL fixes start here
- $css = self::fixBodyDirection( $css );
+ $css = self::fixDirection( $css );
if ( $swapLtrRtlInURL ) {
$css = self::fixLtrRtlInURL( $css );
}
@@ -165,17 +165,19 @@ class CSSJanus {
}
/**
- * Replace direction: ltr; with direction: rtl; and vice versa, but *only*
- * those inside a body { .. } selector.
+ * Replace direction: ltr; with direction: rtl; and vice versa.
*
- * Unlike the original implementation, this function doesn't suffer from
- * the bug causing "body\n{\ndirection: ltr;\n}" to be missed.
- * See http://code.google.com/p/cssjanus/issues/detail?id=15
+ * The original implementation only does this inside body selectors
+ * and misses "body\n{\ndirection:ltr;\n}". This function does not have
+ * these problems.
+ *
+ * See http://code.google.com/p/cssjanus/issues/detail?id=15 and
+ * TODO: URL
*/
- private static function fixBodyDirection( $css ) {
- $css = preg_replace( self::$patterns['body_direction_ltr'],
+ private static function fixDirection( $css ) {
+ $css = preg_replace( self::$patterns['direction_ltr'],
'$1' . self::$patterns['tmpToken'], $css );
- $css = preg_replace( self::$patterns['body_direction_rtl'], '$1ltr', $css );
+ $css = preg_replace( self::$patterns['direction_rtl'], '$1ltr', $css );
$css = str_replace( self::$patterns['tmpToken'], 'rtl', $css );
return $css;