public void CompileDecimalFormat() { QName nm = ParseQNameAttribute("name"); try { if (nm.Name != String.Empty) { XmlConvert.VerifyNCName(nm.Name); } } catch (XmlException ex) { throw new XsltCompileException("Invalid qualified name", ex, Input); } XslDecimalFormat df = new XslDecimalFormat(this); if (decimalFormats.Contains(nm)) { ((XslDecimalFormat)decimalFormats [nm]).CheckSameAs(df); } else { decimalFormats [nm] = df; } }
private void Parse(string pattern, XslDecimalFormat format) { if (pattern.Length == 0) { throw new ArgumentException("Invalid number format pattern string."); } this.positivePattern = new DecimalFormatPattern(); this.negativePattern = this.positivePattern; int num = this.positivePattern.ParsePattern(0, pattern, format); if (num < pattern.Length) { if (pattern[num] != format.PatternSeparator) { return; } num++; this.negativePattern = new DecimalFormatPattern(); num = this.negativePattern.ParsePattern(num, pattern, format); if (num < pattern.Length) { throw new ArgumentException("Number format pattern string ends with extraneous part."); } } }
private void Parse(string pattern, XslDecimalFormat format) { if (pattern.Length == 0) { throw new ArgumentException("Invalid number format pattern string."); } positivePattern = new DecimalFormatPattern(); negativePattern = positivePattern; int pos = positivePattern.ParsePattern(0, pattern, format); if (pos < pattern.Length) { if (pattern [pos] != format.PatternSeparator) { // Expecting caught and wrapped by caller, // since it cannot provide XPathNavigator. // throw new ArgumentException ("Invalid number format pattern string."); return; } pos++; negativePattern = new DecimalFormatPattern(); pos = negativePattern.ParsePattern(pos, pattern, format); if (pos < pattern.Length) { throw new ArgumentException("Number format pattern string ends with extraneous part."); } } }
public void CompileDecimalFormat() { XmlQualifiedName xmlQualifiedName = this.ParseQNameAttribute("name"); try { if (xmlQualifiedName.Name != string.Empty) { XmlConvert.VerifyNCName(xmlQualifiedName.Name); } } catch (XmlException innerException) { throw new XsltCompileException("Invalid qualified name", innerException, this.Input); } XslDecimalFormat xslDecimalFormat = new XslDecimalFormat(this); if (this.decimalFormats.Contains(xmlQualifiedName)) { ((XslDecimalFormat)this.decimalFormats[xmlQualifiedName]).CheckSameAs(xslDecimalFormat); } else { this.decimalFormats[xmlQualifiedName] = xslDecimalFormat; } }
public void CheckSameAs(XslDecimalFormat other) { if (!this.javaFormat.Equals(other.javaFormat)) { throw new XsltCompileException(null, other.baseUri, other.lineNumber, other.linePosition); } }
public void CheckSameAs(XslDecimalFormat other) { if (this.digit != other.digit || this.patternSeparator != other.patternSeparator || this.zeroDigit != other.zeroDigit || this.info.NumberDecimalSeparator != other.info.NumberDecimalSeparator || this.info.NumberGroupSeparator != other.info.NumberGroupSeparator || this.info.PositiveInfinitySymbol != other.info.PositiveInfinitySymbol || this.info.NegativeSign != other.info.NegativeSign || this.info.NaNSymbol != other.info.NaNSymbol || this.info.PercentSymbol != other.info.PercentSymbol || this.info.PerMilleSymbol != other.info.PerMilleSymbol) { throw new XsltCompileException(null, other.baseUri, other.lineNumber, other.linePosition); } }
internal int ParsePattern(int start, string pattern, XslDecimalFormat format) { if (start == 0) // positive pattern { this.info = format.Info; } else { this.info = format.Info.Clone() as NumberFormatInfo; info.NegativeSign = String.Empty; // should be specified in Prefix } // prefix int pos = start; while (pos < pattern.Length) { if (pattern [pos] == format.ZeroDigit || pattern [pos] == format.Digit || pattern [pos] == format.Info.CurrencySymbol [0]) { break; } else { pos++; } } Prefix = pattern.Substring(start, pos - start); if (pos == pattern.Length) { // Invalid number pattern. // throw new ArgumentException ("Invalid number format pattern."); return(pos); } // number pos = ParseNumber(pos, pattern, format); int suffixStart = pos; // suffix while (pos < pattern.Length) { if (pattern [pos] == format.ZeroDigit || pattern [pos] == format.Digit || pattern [pos] == format.PatternSeparator || pattern [pos] == format.Info.CurrencySymbol [0]) { break; } else { pos++; } } Suffix = pattern.Substring(suffixStart, pos - suffixStart); return(pos); }
public XslDecimalFormat LookupDecimalFormat(XmlQualifiedName name) { XslDecimalFormat xslDecimalFormat = this.decimalFormats[name] as XslDecimalFormat; if (xslDecimalFormat == null && name == XmlQualifiedName.Empty) { return(XslDecimalFormat.Default); } return(xslDecimalFormat); }
public XslDecimalFormat LookupDecimalFormat(QName name) { XslDecimalFormat ret = decimalFormats [name] as XslDecimalFormat; if (ret == null && name == QName.Empty) { return(XslDecimalFormat.Default); } return(ret); }
internal int ParsePattern(int start, string pattern, XslDecimalFormat format) { if (start == 0) { this.info = format.Info; } else { this.info = (format.Info.Clone() as NumberFormatInfo); this.info.NegativeSign = string.Empty; } int i; for (i = start; i < pattern.Length; i++) { if (pattern[i] == format.ZeroDigit || pattern[i] == format.Digit || pattern[i] == format.Info.CurrencySymbol[0]) { break; } } this.Prefix = pattern.Substring(start, i - start); if (i == pattern.Length) { return(i); } i = this.ParseNumber(i, pattern, format); int num = i; while (i < pattern.Length) { if (pattern[i] == format.ZeroDigit || pattern[i] == format.Digit || pattern[i] == format.PatternSeparator || pattern[i] == format.Info.CurrencySymbol[0]) { break; } i++; } this.Suffix = pattern.Substring(num, i - num); return(i); }
public void CheckSameAs (XslDecimalFormat other) { if (! this.javaFormat.Equals (other.javaFormat)) throw new XsltCompileException (null, other.baseUri, other.lineNumber, other.linePosition); }
private int ParseNumber(int start, string pattern, XslDecimalFormat format) { int i; for (i = start; i < pattern.Length; i++) { if (pattern[i] == format.Digit) { this.builder.Append('#'); } else { if (pattern[i] != format.Info.NumberGroupSeparator[0]) { break; } this.builder.Append(','); } } while (i < pattern.Length) { if (pattern[i] == format.ZeroDigit) { this.builder.Append('0'); } else { if (pattern[i] != format.Info.NumberGroupSeparator[0]) { break; } this.builder.Append(','); } i++; } if (i < pattern.Length) { if (pattern[i] == format.Info.NumberDecimalSeparator[0]) { this.builder.Append('.'); i++; } while (i < pattern.Length) { if (pattern[i] != format.ZeroDigit) { break; } i++; this.builder.Append('0'); } while (i < pattern.Length) { if (pattern[i] != format.Digit) { break; } i++; this.builder.Append('#'); } } if (i + 1 < pattern.Length && pattern[i] == 'E' && pattern[i + 1] == format.ZeroDigit) { i += 2; this.builder.Append("E0"); while (i < pattern.Length) { if (pattern[i] != format.ZeroDigit) { break; } i++; this.builder.Append('0'); } } if (i < pattern.Length) { if (pattern[i] == this.info.PercentSymbol[0]) { this.builder.Append('%'); } else if (pattern[i] == this.info.PerMilleSymbol[0]) { this.builder.Append('‰'); } else { if (pattern[i] == this.info.CurrencySymbol[0]) { throw new ArgumentException("Currency symbol is not supported for number format pattern string."); } i--; } i++; } this.NumberPart = this.builder.ToString(); return(i); }
public void CompileDecimalFormat () { QName nm = ParseQNameAttribute ("name"); try { if (nm.Name != String.Empty) XmlConvert.VerifyNCName (nm.Name); } catch (XmlException ex) { throw new XsltCompileException ("Invalid qualified name", ex, Input); } XslDecimalFormat df = new XslDecimalFormat (this); if (decimalFormats.Contains (nm)) ((XslDecimalFormat)decimalFormats [nm]).CheckSameAs (df); else decimalFormats [nm] = df; }
// XslDecimalFormat decimalFormat; public DecimalFormatPatternSet (string pattern, XslDecimalFormat decimalFormat) { Parse (pattern, decimalFormat); }
// XslDecimalFormat decimalFormat; public DecimalFormatPatternSet(string pattern, XslDecimalFormat decimalFormat) { Parse(pattern, decimalFormat); }
// FIXME: Collect grouping digits private int ParseNumber (int start, string pattern, XslDecimalFormat format) { int pos = start; // process non-minint part. for (; pos < pattern.Length; pos++) { if (pattern [pos] == format.Digit) builder.Append ('#'); else if (pattern [pos] == format.Info.NumberGroupSeparator [0]) builder.Append (','); else break; } // minint part. for (; pos < pattern.Length; pos++) { if (pattern [pos] == format.ZeroDigit) builder.Append ('0'); else if (pattern [pos] == format.Info.NumberGroupSeparator [0]) builder.Append (','); else break; } // optional fraction part if (pos < pattern.Length) { if (pattern [pos] == format.Info.NumberDecimalSeparator [0]) { builder.Append ('.'); pos++; } while (pos < pattern.Length) { if (pattern [pos] == format.ZeroDigit) { pos++; builder.Append ('0'); } else break; } while (pos < pattern.Length) { if (pattern [pos] == format.Digit) { pos++; builder.Append ('#'); } else break; } } // optional exponent part if (pos + 1 < pattern.Length && pattern [pos] == 'E' && pattern [pos + 1] == format.ZeroDigit) { pos += 2; builder.Append ("E0"); while (pos < pattern.Length) { if (pattern [pos] == format.ZeroDigit) { pos++; builder.Append ('0'); } else break; } } // misc special characters if (pos < pattern.Length) { if (pattern [pos] == this.info.PercentSymbol [0]) builder.Append ('%'); else if (pattern [pos] == this.info.PerMilleSymbol [0]) builder.Append ('\u2030'); else if (pattern [pos] == this.info.CurrencySymbol [0]) throw new ArgumentException ("Currency symbol is not supported for number format pattern string."); else pos--; pos++; } NumberPart = builder.ToString (); return pos; }
internal int ParsePattern (int start, string pattern, XslDecimalFormat format) { if (start == 0) // positive pattern this.info = format.Info; else { this.info = format.Info.Clone () as NumberFormatInfo; info.NegativeSign = String.Empty; // should be specified in Prefix } // prefix int pos = start; while (pos < pattern.Length) { if (pattern [pos] == format.ZeroDigit || pattern [pos] == format.Digit || pattern [pos] == format.Info.CurrencySymbol [0]) break; else pos++; } Prefix = pattern.Substring (start, pos - start); if (pos == pattern.Length) { // Invalid number pattern. // throw new ArgumentException ("Invalid number format pattern."); return pos; } // number pos = ParseNumber (pos, pattern, format); int suffixStart = pos; // suffix while (pos < pattern.Length) { if (pattern [pos] == format.ZeroDigit || pattern [pos] == format.Digit || pattern [pos] == format.PatternSeparator || pattern [pos] == format.Info.CurrencySymbol [0]) break; else pos++; } Suffix = pattern.Substring (suffixStart, pos - suffixStart); return pos; }
private void Parse (string pattern, XslDecimalFormat format) { if (pattern.Length == 0) throw new ArgumentException ("Invalid number format pattern string."); positivePattern = new DecimalFormatPattern (); negativePattern = positivePattern; int pos = positivePattern.ParsePattern (0, pattern, format); if (pos < pattern.Length) { if (pattern [pos] != format.PatternSeparator) // Expecting caught and wrapped by caller, // since it cannot provide XPathNavigator. // throw new ArgumentException ("Invalid number format pattern string."); return; pos++; negativePattern = new DecimalFormatPattern (); pos = negativePattern.ParsePattern (pos, pattern, format); if (pos < pattern.Length) throw new ArgumentException ("Number format pattern string ends with extraneous part."); } }
// FIXME: Collect grouping digits private int ParseNumber(int start, string pattern, XslDecimalFormat format) { int pos = start; // process non-minint part. for (; pos < pattern.Length; pos++) { if (pattern [pos] == format.Digit) { builder.Append('#'); } else if (pattern [pos] == format.Info.NumberGroupSeparator [0]) { builder.Append(','); } else { break; } } // minint part. for (; pos < pattern.Length; pos++) { if (pattern [pos] == format.ZeroDigit) { builder.Append('0'); } else if (pattern [pos] == format.Info.NumberGroupSeparator [0]) { builder.Append(','); } else { break; } } // optional fraction part if (pos < pattern.Length) { if (pattern [pos] == format.Info.NumberDecimalSeparator [0]) { builder.Append('.'); pos++; } while (pos < pattern.Length) { if (pattern [pos] == format.ZeroDigit) { pos++; builder.Append('0'); } else { break; } } while (pos < pattern.Length) { if (pattern [pos] == format.Digit) { pos++; builder.Append('#'); } else { break; } } } // optional exponent part if (pos + 1 < pattern.Length && pattern [pos] == 'E' && pattern [pos + 1] == format.ZeroDigit) { pos += 2; builder.Append("E0"); while (pos < pattern.Length) { if (pattern [pos] == format.ZeroDigit) { pos++; builder.Append('0'); } else { break; } } } // misc special characters if (pos < pattern.Length) { if (pattern [pos] == this.info.PercentSymbol [0]) { builder.Append('%'); } else if (pattern [pos] == this.info.PerMilleSymbol [0]) { builder.Append('\u2030'); } else if (pattern [pos] == this.info.CurrencySymbol [0]) { throw new ArgumentException("Currency symbol is not supported for number format pattern string."); } else { pos--; } pos++; } NumberPart = builder.ToString(); return(pos); }
public void CheckSameAs (XslDecimalFormat other) { if (this.digit != other.digit || this.patternSeparator != other.patternSeparator || this.zeroDigit != other.zeroDigit || this.info.NumberDecimalSeparator != other.info.NumberDecimalSeparator || this.info.NumberGroupSeparator != other.info.NumberGroupSeparator || this.info.PositiveInfinitySymbol != other.info.PositiveInfinitySymbol || this.info.NegativeSign != other.info.NegativeSign || this.info.NaNSymbol != other.info.NaNSymbol || this.info.PercentSymbol != other.info.PercentSymbol || this.info.PerMilleSymbol != other.info.PerMilleSymbol) throw new XsltCompileException (null, other.baseUri, other.lineNumber, other.linePosition); }