internal String FormatItem(object value) {
double dblVal;
if (value is int) {
dblVal = (int)value;
} else {
dblVal = XmlConvert.ToXPathDouble(value);
if (0.5 <= dblVal && !double.IsPositiveInfinity(dblVal)) {
dblVal = XmlConvert.XPathRound(dblVal);
} else {
// It is an error if the number is NaN, infinite or less than 0.5; an XSLT processor may signal the error;
// if it does not signal the error, it must recover by converting the number to a string as if by a call
// to the string function and inserting the resulting string into the result tree.
return XmlConvert.ToXPathString(value);
}
}
Debug.Assert(dblVal >= 1);
switch (seq) {
case NumberingSequence.Arabic :
break;
case NumberingSequence.UCLetter :
case NumberingSequence.LCLetter :
if (dblVal <= MaxAlphabeticValue) {
StringBuilder sb = new StringBuilder();
ConvertToAlphabetic(sb, dblVal, seq == NumberingSequence.UCLetter ? 'A' : 'a', 26);
return sb.ToString();
}
break;
case NumberingSequence.UCRoman :
case NumberingSequence.LCRoman:
if (dblVal <= MaxRomanValue) {
StringBuilder sb = new StringBuilder();
ConvertToRoman(sb, dblVal, seq == NumberingSequence.UCRoman);
return sb.ToString();
}
break;
}
return ConvertToArabic(dblVal, cMinLen, sizeGroup, separator);
}