private QilNode CompileNumber(Number num)
{
QilNode value;
if (num.Value != null)
{
// REVIEW: We may want to report a warning if any of 'level', 'count' and 'from' attributes
// specified together with 'value'. It is ERR XT0975 in XSLT 2.0.
value = _f.ConvertToNumber(CompileXPathExpression(num.Value));
}
else
{
QilNode countPattern = (num.Count != null) ? CompileNumberPattern(num.Count) : null;
QilNode fromPattern = (num.From != null) ? CompileNumberPattern(num.From) : null;
switch (num.Level)
{
case NumberLevel.Single: value = PlaceMarker(countPattern, fromPattern, false); break;
case NumberLevel.Multiple: value = PlaceMarker(countPattern, fromPattern, true); break;
default:
Debug.Assert(num.Level == NumberLevel.Any);
value = PlaceMarkerAny(countPattern, fromPattern);
break;
}
}
bool fwdCompat = num.ForwardsCompatible;
return _f.TextCtor(_f.InvokeNumberFormat(
value, CompileStringAvt(num.Format),
CompileLangAttributeToLcid(num.Lang, fwdCompat),
CompileLetterValueAttribute(num.LetterValue, fwdCompat),
CompileGroupingSeparatorAttribute(num.GroupingSeparator, fwdCompat),
CompileGroupingSizeAttribute(num.GroupingSize, fwdCompat)
));
}