blob: b60c2df93aebe2c3c0f21b9d3cef4e930207a84a [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_fr_FR
{
private static string[] OneThroughNineteen = {
"", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit",
"neuf", "dix", "onze", "douze", "treize", "quatorze",
"quinze", "seize", "dix-sept", "dix-huit", "dix-neuf"
};
private static string[] Tens = {
"", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante-dix",
"quatre-vingt", "quatre-vingt-dix"
};
private static string[] OrdinalOneThroughNineteen = {
"", "unième", "deuxième", "troisième", "quatrième", "cinquième", "sixième",
"septième", "huitième", "neuvième", "dixième", "onzième", "douzième",
"treizième", "quatorzième", "quinzième", "seizième",
"dix-septième", "dix-huitième", "dix-neuvième"
};
private static string[] OrdinalTenths = {
"", "dixième", "vingtième", "trentième", "quarantième", "cinquantième",
"soixantième", "soixante-dixième", "quatre-vingtième", "quatre-vingt-dixième"
};
private static string[] OrdinalTenthsPlus = {
"", "", "vingt", "trente", "quarante", "cinquante",
"soixante", "", "quatre-vingt", ""
};
public static string GetListItemText(string languageCultureName, int levelNumber, string numFmt)
{
if (numFmt == "cardinalText")
{
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));
/* exact thousands */
if (levelNumber == 1000)
return "Mille";
if (levelNumber > 1000 && hundreds == 0 && tens == 0 && ones == 0)
{
result = OneThroughNineteen[thousands] + " mille";
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
/* > 1000 */
if (levelNumber > 1000 && levelNumber < 2000)
result = "mille ";
else if (levelNumber > 2000 && levelNumber < 10000)
result = OneThroughNineteen[thousands] + " mille ";
/* exact hundreds */
if (hundreds > 0 && tens == 0 && ones == 0)
{
if (hundreds == 1)
result += "cent";
else
result += OneThroughNineteen[hundreds] + " cents";
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
/* > 100 */
if (hundreds > 0)
{
if (hundreds == 1)
result += "cent ";
else
result += OneThroughNineteen[hundreds] + " cent ";
}
/* exact tens */
if (tens > 0 && ones == 0)
{
if (tens == 8)
result += "quatre-vingts";
else
result += Tens[tens];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
/* 71-79 */
if (tens == 7)
{
if (ones == 1)
result += Tens[6] + " et " + OneThroughNineteen[ones + 10];
else
result += Tens[6] + "-" + OneThroughNineteen[ones + 10];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
/* 91-99 */
if (tens == 9)
{
result += Tens[8] + "-" + OneThroughNineteen[ones + 10];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
if (tens >= 2)
{
if (ones == 1 && tens != 8 && tens != 9)
result += Tens[tens] + " et un";
else
result += Tens[tens] + "-" + OneThroughNineteen[ones];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
if (levelNumber < 20)
{
result += OneThroughNineteen[tens * 10 + ones];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
result += OneThroughNineteen[tens * 10 + ones];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
if (numFmt == "ordinal")
{
string suffix;
if (levelNumber == 1)
suffix = "er";
else
suffix = "e";
return levelNumber.ToString() + suffix;
}
if (numFmt == "ordinalText")
{
string result = "";
if (levelNumber == 1)
return "Premier";
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 "Millième";
if (levelNumber > 1000 && hundreds == 0 && tens == 0 && ones == 0)
{
result = OneThroughNineteen[thousands] + " millième";
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
/* > 1000 */
if (levelNumber > 1000 && levelNumber < 2000)
result = "mille ";
else if (levelNumber > 2000 && levelNumber < 10000)
result = OneThroughNineteen[thousands] + " mille ";
/* exact hundreds */
if (hundreds > 0 && tens == 0 && ones == 0)
{
if (hundreds == 1)
result += "centième";
else
result += OneThroughNineteen[hundreds] + " centième";
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
/* > 100 */
if (hundreds > 0)
{
if (hundreds == 1)
result += "cent ";
else
result += OneThroughNineteen[hundreds] + " cent ";
}
/* exact tens */
if (tens > 0 && ones == 0)
{
result += OrdinalTenths[tens];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
/* 71-79 */
if (tens == 7)
{
if (ones == 1)
result += OrdinalTenthsPlus[6] + " et " + OrdinalOneThroughNineteen[ones + 10];
else
result += OrdinalTenthsPlus[6] + "-" + OrdinalOneThroughNineteen[ones + 10];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
/* 91-99 */
if (tens == 9)
{
result += OrdinalTenthsPlus[8] + "-" + OrdinalOneThroughNineteen[ones + 10];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
if (tens >= 2)
{
if (ones == 1 && tens != 8 && tens != 9)
result += OrdinalTenthsPlus[tens] + " et unième";
else
result += OrdinalTenthsPlus[tens] + "-" + OrdinalOneThroughNineteen[ones];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
if (levelNumber < 20)
{
result += OrdinalOneThroughNineteen[tens * 10 + ones];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
result += OrdinalOneThroughNineteen[tens * 10 + ones];
return result.Substring(0, 1).ToUpper() + result.Substring(1);
}
return null;
}
}
}