package org.orbeon.saxon.number;
public class Numberer_no extends AbstractNumberer {
private static final long serialVersionUID = 1L;
private static String[] norwegianOrdinalUnits = { "", "første", "andre",
"tredje", "fjerde", "femte", "sjette", "syvende", "åttende",
"niende", "tiende", "ellevte", "tolvte", "trettende", "fjortende",
"femtende", "sekstende", "syttende", "attende", "nittende" };
private static String[] norwegianOrdinalTens = { "", "tiende", "tjuende",
"trettiende", "førtiende", "femtiende", "sekstiende", "syttiende",
"åttiende", "nittiende" };
private static String[] norwegianUnits = { "", "en", "to", "tre", "fire",
"fem", "seks", "syv", "åtte", "ni", "ti", "elleve", "tolv",
"tretten", "fjorten", "femten", "seksten", "sytten", "atten",
"nitten" };
private static String[] norwegianTens = { "", "ti", "tjue", "tredve",
"førti", "femti", "seksti", "sytti", "åtti", "nitti" };
@Override
public String toOrdinalWords(String ordinalParam, long number, int wordCase) {
String s;
if (number == 1000000000) {
s = "milliardte";
} else if (number == 1000000) {
s = "millionte";
} else if (number == 1000) {
s = "tusende";
} else if (number == 100) {
s = "hundrede";
} else if (number >= 1000000000) {
long rem = number % 1000000000;
s = (number / 1000000000 == 1 ? "en" : toWords(number / 1000000000))
+ "milliard"
+ ((number / 1000000000) > 1 ? "er" : "")
+ toOrdinalWords(ordinalParam, rem, wordCase);
} else if (number >= 1000000) {
long rem = number % 1000000;
s = (number / 1000000 == 1 ? "en" : toWords(number / 1000000))
+ "million" + ((number / 1000000) > 1 ? "er" : "")
+ toOrdinalWords(ordinalParam, rem, wordCase);
} else if (number >= 1000) {
long rem = number % 1000;
s = (number / 1000 == 1 ? "et" : toWords(number / 1000)) + "tusen"
+ (rem < 100 ? "og" : "") + toOrdinalWords(ordinalParam, rem, wordCase);
} else if (number >= 100) {
long rem = number % 100;
s = (number / 100 == 1 ? "ett" : toWords(number / 100)) + "hundre"
+ "og" + toOrdinalWords(ordinalParam, rem, wordCase);
} else {
if (number < 20) {
s = norwegianOrdinalUnits[(int) number];
} else {
int rem = (int) (number % 10);
if (rem == 0) {
s = norwegianOrdinalTens[(int) number / 10];
} else {
s = norwegianTens[(int) number / 10]
+ norwegianOrdinalUnits[rem];
}
}
}
if (wordCase == UPPER_CASE) {
return s.toUpperCase();
} else if (wordCase == LOWER_CASE) {
return s.toLowerCase();
} else {
return s;
}
}
@Override
public String toWords(long number) {
if (number >= 1000000000) {
long rem = number % 1000000000;
return (number / 1000000000 == 1 ? "en"
: toWords(number / 1000000000))
+ "milliard"
+ ((number / 1000000000) > 1 ? "er" : "")
+ (rem == 0 ? "" : "") + toWords(rem);
} else if (number >= 1000000) {
long rem = number % 1000000;
return (number / 1000000 == 1 ? "en " : toWords(number / 1000000))
+ "million" + ((number / 1000000) > 1 ? "er" : "")
+ toWords(rem);
} else if (number >= 1000) {
long rem = number % 1000;
return (number / 1000 == 1 ? "et" : toWords(number / 1000))
+ "tusen"
+ (rem == 0 ? "" : (rem < 100 ? "en" : "")
+ (rem < 100 ? "og" : "") + toWords(rem));
} else if (number >= 100) {
long rem = number % 100;
return (number / 100 == 1 ? "ett" : toWords(number / 100))
+ "hundre" + "og" + toWords(rem);
} else {
if (number < 20) {
return norwegianUnits[(int) number];
}
int rem = (int) (number % 10);
return norwegianTens[(int) number / 10] + norwegianUnits[rem];
}
}
@Override
public String toWords(long number, int wordCase) {
String s;
if (number == 0) {
s = "null";
} else {
s = toWords(number);
}
if (wordCase == UPPER_CASE) {
return s.toUpperCase();
} else if (wordCase == LOWER_CASE) {
return s.toLowerCase();
} else {
return s;
}
}
private static String[] norwegianMonths = { "januar", "februar", "mars",
"april", "mai", "juni", "juli", "august", "september", "oktober",
"november", "desember" };
@Override
public String monthName(int month, int minWidth, int maxWidth) {
String name = norwegianMonths[month - 1];
if (maxWidth < 3) {
maxWidth = 3;
}
if (name.length() > maxWidth) {
name = name.substring(0, maxWidth);
}
while (name.length() < minWidth) {
name = name + ' ';
}
return name;
}
@Override
public String dayName(int day, int minWidth, int maxWidth) {
String name = norwegianDays[day - 1];
if (maxWidth < 2) {
maxWidth = 2;
}
if (name.length() > maxWidth) {
name = norwegianDayAbbreviations[day - 1];
if (name.length() > maxWidth) {
name = name.substring(0, maxWidth);
}
}
while (name.length() < minWidth) {
name = name + ' ';
}
if (minWidth == 1 && maxWidth == 2) {
// special case
name = name.substring(0, minUniqueDayLength[day - 1]);
}
return name;
}
private static String[] norwegianDays = { "mandag", "tirsdag", "onsdag",
"torsdag", "fredag", "lørdag", "søndag" };
private static String[] norwegianDayAbbreviations = { "ma", "ti", "on",
"to", "fr", "lø", "sø" };
private static int[] minUniqueDayLength = { 1, 2, 1, 2, 1, 2, 2 };
}