public int RegisterDecimalFormat(XmlQualifiedName name, string infinitySymbol, string nanSymbol, string characters) { if (decimalFormats == null) { decimalFormats = new DecimalFormats(); } DecimalFormatDecl format = new DecimalFormatDecl(name, infinitySymbol, nanSymbol, characters); decimalFormats.Add(format); return(0); // have to return something }
public QilNode InvokeRegisterDecimalFormat(DecimalFormatDecl format) { Debug.Assert(format != null); return XsltInvokeEarlyBound(QName("register-decimal-format"), XsltMethods.RegisterDecimalFormat, T.IntX, new QilNode[] { QName(format.Name.Name, format.Name.Namespace), String(format.InfinitySymbol), String(format.NanSymbol), String(new string(format.Characters)) } ); }
private void LoadDecimalFormat(NsDecl stylesheetNsList) { const int NumCharAttrs = 8, NumSignAttrs = 7; ContextInfo ctxInfo = _input.GetAttributes(_decimalFormatAttributes); ctxInfo.nsList = MergeNamespaces(ctxInfo.nsList, stylesheetNsList); XmlQualifiedName name; if (_input.MoveToXsltAttribute(0, "name")) { _compiler.EnterForwardsCompatible(); name = ResolveQName(/*ignoreDefaultNs:*/true, _input.Value); if (!_compiler.ExitForwardsCompatible(_input.ForwardCompatibility)) { name = new XmlQualifiedName(); } } else { // Use name="" for the default decimal-format name = new XmlQualifiedName(); } string infinity = DecimalFormatDecl.Default.InfinitySymbol; if (_input.MoveToXsltAttribute(1, "infinity")) { infinity = _input.Value; } string nan = DecimalFormatDecl.Default.NanSymbol; if (_input.MoveToXsltAttribute(2, "NaN")) { nan = _input.Value; } char[] DefaultValues = DecimalFormatDecl.Default.Characters; char[] characters = new char[NumCharAttrs]; Debug.Assert(NumCharAttrs == DefaultValues.Length); for (int idx = 0; idx < NumCharAttrs; idx++) { characters[idx] = ParseCharAttribute(3 + idx, _decimalFormatAttributes[3 + idx].name, DefaultValues[idx]); } // Check all NumSignAttrs signs are distinct for (int i = 0; i < NumSignAttrs; i++) { for (int j = i + 1; j < NumSignAttrs; j++) { if (characters[i] == characters[j]) { // Try move to second attribute and if it is missing to first. bool dummy = _input.MoveToXsltAttribute(3 + j, _decimalFormatAttributes[3 + j].name) || _input.MoveToXsltAttribute(3 + i, _decimalFormatAttributes[3 + i].name); Debug.Assert(dummy, "One of the atts should have lineInfo. if both are defualt they can't conflict."); ReportError(/*[XT1300]*/SR.Xslt_DecimalFormatSignsNotDistinct, _decimalFormatAttributes[3 + i].name, _decimalFormatAttributes[3 + j].name); break; } } } if (_compiler.DecimalFormats.Contains(name)) { // Check all attributes have the same values DecimalFormatDecl format = _compiler.DecimalFormats[name]; _input.MoveToXsltAttribute(1, "infinity"); CheckError(infinity != format.InfinitySymbol, /*[XT1290]*/SR.Xslt_DecimalFormatRedefined, "infinity", infinity); _input.MoveToXsltAttribute(2, "NaN"); CheckError(nan != format.NanSymbol, /*[XT1290]*/SR.Xslt_DecimalFormatRedefined, "NaN", nan); for (int idx = 0; idx < NumCharAttrs; idx++) { _input.MoveToXsltAttribute(3 + idx, _decimalFormatAttributes[3 + idx].name); CheckError(characters[idx] != format.Characters[idx], /*[XT1290]*/SR.Xslt_DecimalFormatRedefined, _decimalFormatAttributes[3 + idx].name, char.ToString(characters[idx])); } Debug.Assert(name.Equals(format.Name)); } else { // Add format to the global collection DecimalFormatDecl format = new DecimalFormatDecl(name, infinity, nan, new string(characters)); _compiler.DecimalFormats.Add(format); } CheckNoContent(); }
private void LoadDecimalFormat(NsDecl stylesheetNsList) { const int NumAttrs = 11, NumCharAttrs = 8, NumSignAttrs = 7; string[] attValues = new string[NumAttrs]; string[] attNames = new string[NumAttrs] { input.Atoms.DecimalSeparator , input.Atoms.GroupingSeparator, input.Atoms.Percent , input.Atoms.PerMille , input.Atoms.ZeroDigit , input.Atoms.Digit , input.Atoms.PatternSeparator , input.Atoms.MinusSign , input.Atoms.Infinity , input.Atoms.NaN , input.Atoms.Name , }; ContextInfo ctxInfo = input.GetAttributes(/*required:*/0, NumAttrs, attNames, attValues); ctxInfo.nsList = MergeNamespaces(ctxInfo.nsList, stylesheetNsList); // Apply default values char[] DefaultValues = DecimalFormatDecl.Default.Characters; char[] characters = new char[NumCharAttrs]; Debug.Assert(NumCharAttrs == DefaultValues.Length); int idx; for (idx = 0; idx < NumCharAttrs; idx++) { characters[idx] = ParseCharAttribute(attValues[idx], DefaultValues[idx], attNames[idx]); } string attInfinity = attValues[idx++]; string attNaN = attValues[idx++]; string attName = attValues[idx++]; Debug.Assert(idx == NumAttrs); if (attInfinity == null) { attInfinity = DecimalFormatDecl.Default.InfinitySymbol; } if (attNaN == null) { attNaN = DecimalFormatDecl.Default.NanSymbol; } // Check all NumSignAttrs signs are distinct for (int i = 0; i < NumSignAttrs; i++) { for (int j = i+1; j < NumSignAttrs; j++) { if (characters[i] == characters[j]) { ReportError(/*[XT1300]*/Res.Xslt_DecimalFormatSignsNotDistinct, attNames[i], attNames[j]); break; } } } XmlQualifiedName name; if (attName == null) { // Use name="" for the default decimal-format name = new XmlQualifiedName(); } else { compiler.EnterForwardsCompatible(); name = ResolveQName(/*ignoreDefaultNs:*/true, attName); if (!compiler.ExitForwardsCompatible(input.ForwardCompatibility)) { name = new XmlQualifiedName(); } } if (compiler.DecimalFormats.Contains(name)) { // Check all attributes have the same values DecimalFormatDecl format = compiler.DecimalFormats[name]; for (idx = 0; idx < NumCharAttrs; idx++) { if (characters[idx] != format.Characters[idx]) { ReportError(/*[XT1290]*/Res.Xslt_DecimalFormatRedefined, attNames[idx], char.ToString(characters[idx])); } } if (attInfinity != format.InfinitySymbol) { ReportError(/*[XT1290]*/Res.Xslt_DecimalFormatRedefined, attNames[idx], attInfinity); } idx++; if (attNaN != format.NanSymbol) { ReportError(/*[XT1290]*/Res.Xslt_DecimalFormatRedefined, attNames[idx], attNaN); } idx++; Debug.Assert(name.Equals(format.Name)); idx++; Debug.Assert(idx == NumAttrs); } else { // Add format to the global collection DecimalFormatDecl format = new DecimalFormatDecl(name, attInfinity, attNaN, new string(characters)); compiler.DecimalFormats.Add(format); } CheckNoContent(); }
public int RegisterDecimalFormat(XmlQualifiedName name, string infinitySymbol, string nanSymbol, string characters) { if (decimalFormats == null) { decimalFormats = new DecimalFormats(); } DecimalFormatDecl format = new DecimalFormatDecl(name, infinitySymbol, nanSymbol, characters); decimalFormats.Add(format); return 0; // have to return something }
public QilNode InvokeRegisterDecimalFormatter(QilNode formatPicture, DecimalFormatDecl format) { CheckString(formatPicture); Debug.Assert(format != null); return XsltInvokeEarlyBound(QName("register-decimal-formatter"), XsltMethods.RegisterDecimalFormatter, T.DoubleX, new QilNode[] { formatPicture, String(format.InfinitySymbol), String(format.NanSymbol), String(new string(format.Characters)) } ); }