summaryrefslogtreecommitdiff
path: root/resources/src/mediawiki.language/languages/os.js
blob: 3e0f279deff81b9a3c6aa25c2a0bede267997831 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*!
 * Ossetian (Ирон) language functions
 * @author Santhosh Thottingal
 */

mediaWiki.language.convertGrammar = function ( word, form ) {
	var grammarForms = mediaWiki.language.getData( 'os', 'grammarForms' ),
		// Ending for allative case
		endAllative = 'мæ',
		// Variable for 'j' beetwen vowels
		jot = '',
		// Variable for "-" for not Ossetic words
		hyphen = '',
		// Variable for ending
		ending = '';

	if ( grammarForms && grammarForms[ form ] ) {
		return grammarForms[ form ][ word ];
	}
	// Checking if the $word is in plural form
	if ( word.match( /тæ$/i ) ) {
		word = word.slice( 0, -1 );
		endAllative = 'æм';
	} else if ( word.match( /[аæеёиоыэюя]$/i ) ) {
		// Works if word is in singular form.
		// Checking if word ends on one of the vowels: е, ё, и, о, ы, э, ю, я.
		jot = 'й';
	} else if ( word.match( /у$/i ) ) {
		// Checking if word ends on 'у'. 'У' can be either consonant 'W' or vowel 'U' in cyrillic Ossetic.
		// Examples: {{grammar:genitive|аунеу}} = аунеуы, {{grammar:genitive|лæппу}} = лæппуйы.

		if ( !word.slice( -2, -1 ).match( /[аæеёиоыэюя]$/i ) ) {
			jot = 'й';
		}
	} else if ( !word.match( /[бвгджзйклмнопрстфхцчшщьъ]$/i ) ) {
		hyphen = '-';
	}

	switch ( form ) {
		case 'genitive':
			ending = hyphen + jot + 'ы';
			break;
		case 'dative':
			ending = hyphen + jot + 'æн';
			break;
		case 'allative':
			ending = hyphen + endAllative;
			break;
		case 'ablative':
			if ( jot === 'й' ) {
				ending = hyphen + jot + 'æ';
			} else {
				ending = hyphen + jot + 'æй';
			}
			break;
		case 'superessive':
			ending = hyphen + jot + 'ыл';
			break;
		case 'equative':
			ending = hyphen + jot + 'ау';
			break;
		case 'comitative':
			ending = hyphen + 'имæ';
			break;
	}
	return word + ending;
};