blob: 9f6d4a06cec056d3ef8ea543209f80b884e5a8d6 [file] [log] [blame]
/***************************************************************************
Copyright (c) Microsoft Corporation 2012-2015.
This code is licensed using the Microsoft Public License (Ms-PL). The text of the license can be found here:
http://www.microsoft.com/resources/sharedsource/licensingbasics/publiclicense.mspx
Published at http://OpenXmlDeveloper.org
Resource Center and Documentation: http://openxmldeveloper.org/wiki/w/wiki/powertools-for-open-xml.aspx
Developer: Eric White
Blog: http://www.ericwhite.com
Twitter: @EricWhiteDev
Email: eric@ericwhite.com
***************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace OpenXmlPowerTools
{
public class ListItemTextGetter_sv_SE
{
private static string[] OneThroughNineteen = {
"", "ett", "två", "tre", "fyra", "fem", "sex", "sju", "åtta",
"nio", "tio", "elva", "tolv", "tretton", "fjorton",
"femton", "sexton", "sjutton", "arton", "nitton"
};
private static string[] Tens = {
"","tio", "tjugo", "trettio", "fyrtio", "femtio", "sextio", "sjuttio", "åttio",
"nittio", "etthundra"
};
private static string[] OrdinalOneThroughNineteen = {
"", "första", "andra", "tredje", "fjärde", "femte", "sjätte", "sjunde",
"åttonde", "nionde", "tionde", "elfte", "tolfte", "trettonde",
"fjortonde", "femtonde", "sextonde", "sjuttonde",
"artonde", "nittonde"
};
public static string GetListItemText(string languageCultureName, int levelNumber, string numFmt)
{
switch (numFmt)
{
case "cardinalText":
return NumberAsCardinalText(languageCultureName, levelNumber, numFmt);
case "ordinalText":
return NumberAsOrdinalText(languageCultureName, levelNumber, numFmt);
case "ordinal":
return NumberAsOrdinal(languageCultureName, levelNumber, numFmt);
default:
return null;
}
}
private static string NumberAsCardinalText(string languageCultureName, int levelNumber, string numFmt)
{
string result = "";
var sLevel = (levelNumber + 10000).ToString();
int thousands = int.Parse(sLevel.Substring(1, 1));
int hundreds = int.Parse(sLevel.Substring(2, 1));
int tens = int.Parse(sLevel.Substring(3, 1));
int ones = int.Parse(sLevel.Substring(4, 1));
//Validation
if (thousands > 19)
throw new ArgumentOutOfRangeException("levelNumber", "Convering a levelNumber to ordinal text that is greater then 19 999 is not supported");
if (levelNumber == 0)
return "Noll";
if (levelNumber < 0)
throw new ArgumentOutOfRangeException("levelNumber", "Converting a negative levelNumber to ordinal text is not supported");
/* exact thousands */
if (levelNumber == 1000)
return "Ettusen";
if (levelNumber > 1000 && hundreds == 0 && tens == 0 && ones == 0)
{
result = OneThroughNineteen[thousands] + "tusen";
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
/* > 1000 */
if (levelNumber > 1000 && levelNumber < 2000)
result = "ettusen";
else if (levelNumber > 2000 && levelNumber < 10000)
result = OneThroughNineteen[thousands] + "tusen";
/* exact hundreds */
if (hundreds > 0 && tens == 0 && ones == 0)
{
if (hundreds == 1)
result += "etthundra";
else
result += OneThroughNineteen[hundreds] + "hundra";
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
/* > 100 */
if (hundreds > 0)
{
if (hundreds == 1)
result += "etthundra";
else
result += OneThroughNineteen[hundreds] + "hundra";
}
/* exact tens */
if (tens > 0 && ones == 0)
{
result += Tens[tens];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
/* > 20 */
if (tens == 1)
{
result += OneThroughNineteen[tens * 10 + ones];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
else if (tens > 1)
{
result += Tens[tens] + OneThroughNineteen[ones]; ;
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
else
{
result += OneThroughNineteen[ones];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
}
private static string NumberAsOrdinalText(string languageCultureName, int levelNumber, string numFmt)
{
string result = "";
if (levelNumber <= 0)
throw new ArgumentOutOfRangeException("levelNumber", "Converting a zero or negative levelNumber to ordinal text is not supported");
if(levelNumber >= 10000)
throw new ArgumentOutOfRangeException("levelNumber", "Convering a levelNumber to ordinal text that is greater then 10000 is not supported");
if (levelNumber == 1)
return "Första";
var sLevel = (levelNumber + 10000).ToString();
int thousands = int.Parse(sLevel.Substring(1, 1));
int hundreds = int.Parse(sLevel.Substring(2, 1));
int tens = int.Parse(sLevel.Substring(3, 1));
int ones = int.Parse(sLevel.Substring(4, 1));
/* exact thousands */
if (levelNumber == 1000)
return "Ettusende";
if (levelNumber > 1000 && hundreds == 0 && tens == 0 && ones == 0)
{
result = OneThroughNineteen[thousands] + "tusende";
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
/* > 1000 */
if (levelNumber > 1000 && levelNumber < 2000)
result = "ettusen";
else if (levelNumber > 2000 && levelNumber < 10000)
result = OneThroughNineteen[thousands] + "tusende";
/* exact hundreds */
if (hundreds > 0 && tens == 0 && ones == 0)
{
if (hundreds == 1)
result += "etthundrade";
else
result += OneThroughNineteen[hundreds] + "hundrade";
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
/* > 100 */
if (hundreds > 0)
{
result += OneThroughNineteen[hundreds] + "hundra";
}
/* exact tens */
if (tens > 0 && ones == 0)
{
result += Tens[tens] + "nde";
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
/* > 20 */
if (tens == 1)
{
result += OrdinalOneThroughNineteen[tens * 10 + ones];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
else if (tens > 1)
{
result += Tens[tens] + OrdinalOneThroughNineteen[ones]; ;
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
else
{
result += OrdinalOneThroughNineteen[ones];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
}
private static string NumberAsOrdinal(string languageCultureName, int levelNumber, string numFmt)
{
string levelAsString = levelNumber.ToString();
if (levelAsString == null)
return "";
if (levelAsString.Trim() == "")
return "";
if(levelAsString.EndsWith("1"))
return levelAsString + ":a";
else if(levelAsString.EndsWith("2"))
return levelAsString + ":a";
else
return levelAsString + ":e";
}
}
}