| /*************************************************************************** |
| |
| 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"; |
| } |
| } |
| } |