コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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.");
                }
            }
        }
コード例 #3
0
ファイル: XslDecimalFormat.cs プロジェクト: pmq20/mono_forked
        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.");
                }
            }
        }
コード例 #4
0
        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;
            }
        }
コード例 #5
0
 public void CheckSameAs(XslDecimalFormat other)
 {
     if (!this.javaFormat.Equals(other.javaFormat))
     {
         throw new XsltCompileException(null, other.baseUri, other.lineNumber, other.linePosition);
     }
 }
コード例 #6
0
 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);
     }
 }
コード例 #7
0
ファイル: XslDecimalFormat.cs プロジェクト: pmq20/mono_forked
        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);
        }
コード例 #8
0
        public XslDecimalFormat LookupDecimalFormat(XmlQualifiedName name)
        {
            XslDecimalFormat xslDecimalFormat = this.decimalFormats[name] as XslDecimalFormat;

            if (xslDecimalFormat == null && name == XmlQualifiedName.Empty)
            {
                return(XslDecimalFormat.Default);
            }
            return(xslDecimalFormat);
        }
コード例 #9
0
        public XslDecimalFormat LookupDecimalFormat(QName name)
        {
            XslDecimalFormat ret = decimalFormats [name] as XslDecimalFormat;

            if (ret == null && name == QName.Empty)
            {
                return(XslDecimalFormat.Default);
            }
            return(ret);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
		public void CheckSameAs (XslDecimalFormat other)
		{
			if (! this.javaFormat.Equals (other.javaFormat))
				throw new XsltCompileException (null, other.baseUri, other.lineNumber, other.linePosition);
		}
コード例 #12
0
        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);
        }
コード例 #13
0
ファイル: Compiler.cs プロジェクト: GirlD/mono
		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;
		}
コード例 #14
0
ファイル: XslDecimalFormat.cs プロジェクト: nobled/mono
//		XslDecimalFormat decimalFormat;

		public DecimalFormatPatternSet (string pattern, XslDecimalFormat decimalFormat)
		{
			Parse (pattern, decimalFormat);
		}
コード例 #15
0
ファイル: XslDecimalFormat.cs プロジェクト: pmq20/mono_forked
//		XslDecimalFormat decimalFormat;

        public DecimalFormatPatternSet(string pattern, XslDecimalFormat decimalFormat)
        {
            Parse(pattern, decimalFormat);
        }
コード例 #16
0
ファイル: XslDecimalFormat.cs プロジェクト: nobled/mono
		// 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;
		}
コード例 #17
0
ファイル: XslDecimalFormat.cs プロジェクト: nobled/mono
		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;
		}
コード例 #18
0
ファイル: XslDecimalFormat.cs プロジェクト: nobled/mono
		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.");
			}
		}
コード例 #19
0
ファイル: XslDecimalFormat.cs プロジェクト: pmq20/mono_forked
        // 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);
        }
コード例 #20
0
ファイル: XslDecimalFormat.cs プロジェクト: nobled/mono
		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);
		}