}
}
+ if( $this->guessVariant( $text, $toVariant ) ) {
+ return $text;
+ }
+
/* we convert everything except:
1. HTML markups (anything between < and >)
2. HTML entities
*/
public function convertTo( $text, $variant ) {
global $wgDisableLangConversion;
- if ( $wgDisableLangConversion ) {
+ if ( $wgDisableLangConversion || $this->guessVariant( $text, $variant ) ) {
return $text;
}
return $this->recursiveConvertTopLevel( $text, $variant );
return '!' . $variant;
}
+ /**
+ * Guess if a text is written in a variant. This should be implemented in subclasses.
+ *
+ * @param string $text the text to be checked
+ * @param string $variant language code of the variant to be checked for
+ * @return bool true if $text appears to be written in $variant, false if not
+ *
+ * @author Nikola Smolenski <smolensk@eunet.rs>
+ * @since 1.18
+ */
+ public function guessVariant($text, $variant) {
+ return false;
+ }
+
/**
* Load default conversion tables.
* This method must be implemented in derived class.
return $ret;
}
+
+ /**
+ * Guess if a text is written in Cyrillic or Latin.
+ *
+ * @author Nikola Smolenski <smolensk@eunet.rs>
+ * @since 1.18
+ */
+ public function guessVariant( $text, $variant ) {
+ $numCyrillic = preg_match_all("/[шђчћжШЂЧЋЖ]/u", $text, $dummy);
+ $numLatin = preg_match_all("/[šđč枊ĐČĆŽ]/u", $text, $dummy);
+
+ if( $variant == 'sr-ec' ) {
+ return $numCyrillic > $numLatin;
+ } else if( $variant == 'sr-el' ) {
+ return $numLatin > $numCyrillic;
+ } else {
+ return false;
+ }
+
+ }
+
}
/**
}
}
}
+
}