GetListItemText_zh_CN.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. // Copyright (c) Microsoft. All rights reserved.
  2. // Licensed under the MIT license. See LICENSE file in the project root for full license information.
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. namespace OpenXmlPowerTools
  8. {
  9. public class ListItemTextGetter_zh_CN
  10. {
  11. public static string GetListItemText(string languageCultureName, int levelNumber, string numFmt)
  12. {
  13. string[] ccTDigitCharacters = new[] {
  14. "",
  15. "一",
  16. "二",
  17. "三",
  18. "四",
  19. "五",
  20. "六",
  21. "七",
  22. "八",
  23. "九",
  24. };
  25. string tenCharacter = "十";
  26. string hundredCharacter = "百";
  27. string thousandCharacter = "千";
  28. string andCharacter = "〇";
  29. string[] ccDigitCharacters = new[] {
  30. "○",
  31. "一",
  32. "二",
  33. "三",
  34. "四",
  35. "五",
  36. "六",
  37. "七",
  38. "八",
  39. "九",
  40. };
  41. int thousandsRemainder = levelNumber % 1000;
  42. int hundredsRemainder = levelNumber % 100;
  43. int thousands = levelNumber / 1000;
  44. int hundreds = (levelNumber % 1000) / 100;
  45. int tens = (levelNumber % 100) / 10;
  46. int ones = levelNumber % 10;
  47. if (numFmt == "chineseCounting")
  48. {
  49. if (levelNumber >= 1 && levelNumber <= 9)
  50. return ccDigitCharacters[levelNumber];
  51. if (levelNumber >= 10 && levelNumber <= 19)
  52. {
  53. if (levelNumber == 10)
  54. return tenCharacter;
  55. return tenCharacter + ccDigitCharacters[ones];
  56. }
  57. if (levelNumber >= 11 && levelNumber <= 99)
  58. {
  59. if (ones == 0)
  60. return ccDigitCharacters[tens] + tenCharacter;
  61. return ccDigitCharacters[tens] + tenCharacter + ccDigitCharacters[ones];
  62. }
  63. if (levelNumber >= 100 && levelNumber <= 999)
  64. return ccDigitCharacters[hundreds] + ccDigitCharacters[tens] + ccDigitCharacters[ones];
  65. if (levelNumber >= 1000 && levelNumber <= 9999)
  66. return ccDigitCharacters[thousands] + ccDigitCharacters[hundreds] + ccDigitCharacters[tens] + ccDigitCharacters[ones];
  67. return levelNumber.ToString();
  68. }
  69. if (numFmt == "chineseCountingThousand")
  70. {
  71. if (levelNumber >= 1 && levelNumber <= 9)
  72. return ccTDigitCharacters[levelNumber];
  73. if (levelNumber >= 10 && levelNumber <= 19)
  74. return tenCharacter + ccTDigitCharacters[ones];
  75. if (levelNumber >= 20 && levelNumber <= 99)
  76. return ccTDigitCharacters[tens] + tenCharacter + ccTDigitCharacters[ones];
  77. if (levelNumber >= 100 && levelNumber <= 999)
  78. {
  79. if (hundredsRemainder == 0)
  80. return ccTDigitCharacters[hundreds] + hundredCharacter;
  81. if (hundredsRemainder >= 1 && hundredsRemainder <= 9)
  82. return ccTDigitCharacters[hundreds] + hundredCharacter + andCharacter + ccTDigitCharacters[levelNumber % 10];
  83. if (ones == 0)
  84. return ccTDigitCharacters[hundreds] + hundredCharacter + ccTDigitCharacters[tens] + tenCharacter;
  85. return ccTDigitCharacters[hundreds] + hundredCharacter + ccTDigitCharacters[tens] + tenCharacter + ccTDigitCharacters[ones];
  86. }
  87. if (levelNumber >= 1000 && levelNumber <= 9999)
  88. {
  89. if (thousandsRemainder == 0)
  90. return ccTDigitCharacters[thousands] + thousandCharacter;
  91. if (thousandsRemainder >= 1 && thousandsRemainder <= 9)
  92. return ccTDigitCharacters[thousands] + thousandCharacter + andCharacter + GetListItemText("zh_CN", thousandsRemainder, numFmt);
  93. if (thousandsRemainder >= 10 && thousandsRemainder <= 99)
  94. return ccTDigitCharacters[thousands] + thousandCharacter + andCharacter + ccTDigitCharacters[tens] + tenCharacter + ccTDigitCharacters[ones];
  95. if (hundredsRemainder == 0)
  96. return ccTDigitCharacters[thousands] + thousandCharacter + ccTDigitCharacters[hundreds] + hundredCharacter;
  97. if (hundredsRemainder >= 1 && hundredsRemainder <= 9)
  98. return ccTDigitCharacters[thousands] + thousandCharacter + ccTDigitCharacters[hundreds] + hundredCharacter + andCharacter + ccTDigitCharacters[ones];
  99. return ccTDigitCharacters[thousands] + thousandCharacter + ccTDigitCharacters[hundreds] + hundredCharacter + ccTDigitCharacters[tens] + tenCharacter + ccTDigitCharacters[ones];
  100. }
  101. return levelNumber.ToString();
  102. }
  103. if (numFmt == "ideographTraditional")
  104. {
  105. string[] iDigitCharacters = new[] {
  106. " ",
  107. "甲",
  108. "乙",
  109. "丙",
  110. "丁",
  111. "戊",
  112. "己",
  113. "庚",
  114. "辛",
  115. "壬",
  116. "癸",
  117. };
  118. if (levelNumber >= 1 && levelNumber <= 10)
  119. return iDigitCharacters[levelNumber];
  120. return levelNumber.ToString();
  121. }
  122. return null;
  123. }
  124. }
  125. }