123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- // 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
- {
- class ListItemTextGetter_Default
- {
- private static string[] RomanOnes =
- {
- "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"
- };
- private static string[] RomanTens =
- {
- "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"
- };
- private static string[] RomanHundreds =
- {
- "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", "M"
- };
- private static string[] RomanThousands =
- {
- "", "M", "MM", "MMM", "MMMM", "MMMMM", "MMMMMM", "MMMMMMM", "MMMMMMMM",
- "MMMMMMMMM", "MMMMMMMMMM"
- };
- private static string[] OneThroughNineteen = {
- "one", "two", "three", "four", "five", "six", "seven", "eight",
- "nine", "ten", "eleven", "twelve", "thirteen", "fourteen",
- "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"
- };
- private static string[] Tens = {
- "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy",
- "eighty", "ninety"
- };
- private static string[] OrdinalOneThroughNineteen = {
- "first", "second", "third", "fourth", "fifth", "sixth",
- "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth",
- "thirteenth", "fourteenth", "fifteenth", "sixteenth",
- "seventeenth", "eighteenth", "nineteenth"
- };
- private static string[] OrdinalTenths = {
- "tenth", "twentieth", "thirtieth", "fortieth", "fiftieth",
- "sixtieth", "seventieth", "eightieth", "ninetieth"
- };
- public static string GetListItemText(string languageCultureName, int levelNumber, string numFmt)
- {
- if (numFmt == "none")
- {
- return "";
- }
- if (numFmt == "decimal")
- {
- return levelNumber.ToString();
- }
- if (numFmt == "decimalZero")
- {
- if (levelNumber <= 9)
- return "0" + levelNumber.ToString();
- else
- return levelNumber.ToString();
- }
- if (numFmt == "upperRoman")
- {
- int ones = levelNumber % 10;
- int tens = (levelNumber % 100) / 10;
- int hundreds = (levelNumber % 1000) / 100;
- int thousands = levelNumber / 1000;
- return RomanThousands[thousands] + RomanHundreds[hundreds] +
- RomanTens[tens] + RomanOnes[ones];
- }
- if (numFmt == "lowerRoman")
- {
- int ones = levelNumber % 10;
- int tens = (levelNumber % 100) / 10;
- int hundreds = (levelNumber % 1000) / 100;
- int thousands = levelNumber / 1000;
- return (RomanThousands[thousands] + RomanHundreds[hundreds] +
- RomanTens[tens] + RomanOnes[ones]).ToLower();
- }
- if (numFmt == "upperLetter")
- {
- int levelNumber2 = levelNumber % 780;
- if (levelNumber2 == 0)
- levelNumber2 = 780;
- string a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- int c = (levelNumber2 - 1) / 26;
- int n = (levelNumber2 - 1) % 26;
- char x = a[n];
- return "".PadRight(c + 1, x);
- }
- if (numFmt == "lowerLetter")
- {
- int levelNumber3 = levelNumber % 780;
- if (levelNumber3 == 0)
- levelNumber3 = 780;
- string a = "abcdefghijklmnopqrstuvwxyz";
- int c = (levelNumber3 - 1) / 26;
- int n = (levelNumber3 - 1) % 26;
- char x = a[n];
- return "".PadRight(c + 1, x);
- }
- if (numFmt == "ordinal")
- {
- string suffix;
- if (levelNumber % 100 == 11 || levelNumber % 100 == 12 ||
- levelNumber % 100 == 13)
- suffix = "th";
- else if (levelNumber % 10 == 1)
- suffix = "st";
- else if (levelNumber % 10 == 2)
- suffix = "nd";
- else if (levelNumber % 10 == 3)
- suffix = "rd";
- else
- suffix = "th";
- return levelNumber.ToString() + suffix;
- }
- if (numFmt == "cardinalText")
- {
- string result = "";
- int t1 = levelNumber / 1000;
- int t2 = levelNumber % 1000;
- if (t1 >= 1)
- result += OneThroughNineteen[t1 - 1] + " thousand";
- if (t1 >= 1 && t2 == 0)
- return result.Substring(0, 1).ToUpper() +
- result.Substring(1);
- if (t1 >= 1)
- result += " ";
- int h1 = (levelNumber % 1000) / 100;
- int h2 = levelNumber % 100;
- if (h1 >= 1)
- result += OneThroughNineteen[h1 - 1] + " hundred";
- if (h1 >= 1 && h2 == 0)
- return result.Substring(0, 1).ToUpper() +
- result.Substring(1);
- if (h1 >= 1)
- result += " ";
- int z = levelNumber % 100;
- if (z <= 19)
- result += OneThroughNineteen[z - 1];
- else
- {
- int x = z / 10;
- int r = z % 10;
- result += Tens[x - 1];
- if (r >= 1)
- result += "-" + OneThroughNineteen[r - 1];
- }
- return result.Substring(0, 1).ToUpper() +
- result.Substring(1);
- }
- if (numFmt == "ordinalText")
- {
- string result = "";
- int t1 = levelNumber / 1000;
- int t2 = levelNumber % 1000;
- if (t1 >= 1 && t2 != 0)
- result += OneThroughNineteen[t1 - 1] + " thousand";
- if (t1 >= 1 && t2 == 0)
- {
- result += OneThroughNineteen[t1 - 1] + " thousandth";
- return result.Substring(0, 1).ToUpper() +
- result.Substring(1);
- }
- if (t1 >= 1)
- result += " ";
- int h1 = (levelNumber % 1000) / 100;
- int h2 = levelNumber % 100;
- if (h1 >= 1 && h2 != 0)
- result += OneThroughNineteen[h1 - 1] + " hundred";
- if (h1 >= 1 && h2 == 0)
- {
- result += OneThroughNineteen[h1 - 1] + " hundredth";
- return result.Substring(0, 1).ToUpper() +
- result.Substring(1);
- }
- if (h1 >= 1)
- result += " ";
- int z = levelNumber % 100;
- if (z <= 19)
- result += OrdinalOneThroughNineteen[z - 1];
- else
- {
- int x = z / 10;
- int r = z % 10;
- if (r == 0)
- result += OrdinalTenths[x - 1];
- else
- result += Tens[x - 1];
- if (r >= 1)
- result += "-" + OrdinalOneThroughNineteen[r - 1];
- }
- return result.Substring(0, 1).ToUpper() +
- result.Substring(1);
- }
- if (numFmt == "01, 02, 03, ...")
- {
- return string.Format("{0:00}", levelNumber);
- }
- if (numFmt == "001, 002, 003, ...")
- {
- return string.Format("{0:000}", levelNumber);
- }
- if (numFmt == "0001, 0002, 0003, ...")
- {
- return string.Format("{0:0000}", levelNumber);
- }
- if (numFmt == "00001, 00002, 00003, ...")
- {
- return string.Format("{0:00000}", levelNumber);
- }
- if (numFmt == "bullet")
- return "";
- if (numFmt == "decimalEnclosedCircle")
- {
- if (levelNumber >= 1 && levelNumber <= 20)
- {
- // 9311 + levelNumber
- var s = new string(new[] { (char)(9311 + levelNumber) });
- return s;
- }
- return levelNumber.ToString();
- }
- return levelNumber.ToString();
- }
- }
- }
|