From 5f1a69c3cc00b5dcb875572ef6f99887f4b5696f Mon Sep 17 00:00:00 2001 From: Purodha B Blissenbach Date: Fri, 8 Oct 2010 14:34:56 +0000 Subject: [PATCH] ConvertGrammar() added to LanguageKsh.php --- languages/classes/LanguageKsh.php | 154 ++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) diff --git a/languages/classes/LanguageKsh.php b/languages/classes/LanguageKsh.php index 5bd7e9cd1c..dbe7a416a8 100644 --- a/languages/classes/LanguageKsh.php +++ b/languages/classes/LanguageKsh.php @@ -7,6 +7,160 @@ * @author Purodha Blissenbach */ class LanguageKsh extends Language { + static $familygender = array( + // Do not add male wiki families, since that's the default. + // No need add neuter wikis having names ending in -wiki. + 'wikipedia' => 'f', + 'wikiversity' => 'f', + 'wiktionary' => 'n', + 'wikibooks' => 'n', + 'wikiquote' => 'n', + 'wikisource' => 'n', + 'wikitravel' => 'n', + 'wikia' => 'f', + 'translatewiki.net' => 'n', + ); + /** + * Convert from the nominative form of a noun to other cases. + * Invoked with {{GRAMMAR:case|word}} inside messages. + * + * case is a sequence of words, each of which is case insensitive. + * Between words, there must be at least one space character. + * Only the 1st character of each word is considered. + * Word order is irrelevant. + * + * Possible values specifying the grammatical case are: + * 1, Nominative + * 2, Genitive + * 3, Dative + * 4, Accusative, -omitted- + * + * Possible values specifying the article type are: + * Betoont focussed or stressed article + * -omitted- unstressed or unfocussed article + * + * Possible values for for the type of genitive are: + * Sing, Iehr prepositioned genitive = possessive dative + * Vun, Fon, -omitted- postpositioned genitive + * = preposition "vun" with dative + * + * Values of case overrides & prepositions, in the order of preceedence: + * Sing, Iehr possessive dative = prepositioned genitive + * Vun, Fon preposition "vun" with dative + * = postpositioned genitive + * En, em preposition "en" with dative + * + * Values for object gender specifiers of the possessive dative, or + * prepositioned genitive, evaluated with "Sing, Iehr" of above only: + * Male a singular male object follows + * -omitted- a non-male or plural object follows + * + */ + function convertGrammar( $word, $case ) + { + $lord = strtolower($word); + $gender = 'm'; // Nuutnaarel // default + if ( preg_match ( '/wiki$/', $lord ) ) + { + $gender = 'n'; // Dat xyz-wiki + } + if ( isset( self::$familygender[$lord] ) ) + { + $gender = (self::$familygender[$lord]); + } + $case = (' '.strtolower($case)); + if ( preg_match( '/ [is]/', $case ) ) + { + # däm WikiMaatplaz singe, dä Wikipeedija iere, däm Wikiwööterbooch singe + # dem/em WikiMaatplaz singe, de Wikipeedija iere, dem/em Wikiwööterbooch singe + # däm WikiMaatplaz sing, dä Wikipeedija ier, däm Wikiwööterbooch sing + # dem/em WikiMaatplaz sing, de Wikipeedija ier, dem/em Wikiwööterbooch sing + $word = ( preg_match( '/ b/', $case ) + ? ($gender=='f' + ? 'dä' + : 'däm' + ) + : ($gender=='f' + ? 'de' + : 'dem' + ) + ). + ' '.$word.' '. + ( $gender=='f' + ? 'ier' + : 'sing' + ). + ( preg_match( '/ m/', $case ) + ? 'e' + : '' + ); + } + elseif ( preg_match( '/ e/', $case ) ) + { + # en dämm WikiMaatPlaz, en dä Wikipeedija, en dämm Wikiwööterbooch + # em WikiMaatplaz, en de Wikipeedija, em Wikiwööterbooch + if ( preg_match( '/ b/', $case ) ) + { + $word = ('en '.($gender=='f'?'dä':'däm').' '.$word); + } + else + { + $word = (($gender=='f'?'en de':'em').' '.$word); + } + } + elseif ( preg_match( '/ [fv]/', $case ) || preg_match( '/ [2jg]/', $case ) ) + { + # vun däm WikiMaatplaz, vun dä Wikipeedija, vun däm Wikiwööterbooch + # vum WikiMaatplaz, vun de Wikipeedija, vum Wikiwööterbooch + if ( preg_match( '/ b/', $case ) ) + { + $word = ('vun '.($gender=='f'?'dä':'däm').' '.$word); + } + else + { + $word = (($gender=='f'?'vun de':'vum').' '.$word); + } + } + elseif ( preg_match( '/ [3d]/', $case ) ) + { + # dämm WikiMaatPlaz, dä Wikipeedija, dämm Wikiwööterbooch + # dem/em WikiMaatplaz, de Wikipeedija, dem/em Wikiwööterbooch + if ( preg_match( '/ b/', $case ) ) + { + $word = (($gender=='f'?'dää':'dämm').' '.$word); + } + else + { + $word = (($gender=='f'?'de':'dem').' '.$word); + } + } + else + { + # dä WikiMaatPlaz, di Wikipeedija, dat Wikiwööterbooch + # der WikiMaatplaz, de Wikipeedija, et Wikiwööterbooch + if ( preg_match( '/ b/', $case ) ) + { + switch ( $gender ) + { + case 'm' : $lord = 'dä' ; break ; + case 'f' : $lord = 'di' ; break ; + default : $lord = 'dat' ; break ; + } + } + else + { + switch ( $gender ) + { + case 'm' : $lord = 'der' ; break ; + case 'f' : $lord = 'de' ; break ; + default : $lord = 'et' ; break ; + } + } + $word = ($lord.' '.$word); + } + return($word); + } + /** * Avoid grouping whole numbers between 0 to 9999 */ -- 2.20.1