123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- // Copyright (c) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
- 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";
- }
- }
- }
|