| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- // Licensed to the .NET Foundation under one or more agreements.
- // The .NET Foundation licenses this file to you under the MIT license.
- // See the LICENSE file in the project root for more information.
- using System;
- using System.Runtime.Serialization;
- namespace System.Text
- {
- public sealed class EncoderExceptionFallback : EncoderFallback
- {
- // Construction
- public EncoderExceptionFallback()
- {
- }
- public override EncoderFallbackBuffer CreateFallbackBuffer()
- {
- return new EncoderExceptionFallbackBuffer();
- }
- // Maximum number of characters that this instance of this fallback could return
- public override int MaxCharCount
- {
- get
- {
- return 0;
- }
- }
- public override bool Equals(object value)
- {
- if (value is EncoderExceptionFallback that)
- {
- return (true);
- }
- return (false);
- }
- public override int GetHashCode()
- {
- return 654;
- }
- }
- public sealed class EncoderExceptionFallbackBuffer : EncoderFallbackBuffer
- {
- public EncoderExceptionFallbackBuffer() { }
- public override bool Fallback(char charUnknown, int index)
- {
- // Fall back our char
- throw new EncoderFallbackException(
- SR.Format(SR.Argument_InvalidCodePageConversionIndex, (int)charUnknown, index), charUnknown, index);
- }
- public override bool Fallback(char charUnknownHigh, char charUnknownLow, int index)
- {
- if (!char.IsHighSurrogate(charUnknownHigh))
- {
- throw new ArgumentOutOfRangeException(nameof(charUnknownHigh),
- SR.Format(SR.ArgumentOutOfRange_Range, 0xD800, 0xDBFF));
- }
- if (!char.IsLowSurrogate(charUnknownLow))
- {
- throw new ArgumentOutOfRangeException(nameof(charUnknownLow),
- SR.Format(SR.ArgumentOutOfRange_Range, 0xDC00, 0xDFFF));
- }
- int iTemp = char.ConvertToUtf32(charUnknownHigh, charUnknownLow);
- // Fall back our char
- throw new EncoderFallbackException(
- SR.Format(SR.Argument_InvalidCodePageConversionIndex, iTemp, index), charUnknownHigh, charUnknownLow, index);
- }
- public override char GetNextChar()
- {
- return (char)0;
- }
- public override bool MovePrevious()
- {
- // Exception fallback doesn't have anywhere to back up to.
- return false;
- }
- // Exceptions are always empty
- public override int Remaining
- {
- get
- {
- return 0;
- }
- }
- }
- [Serializable]
- [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
- public sealed class EncoderFallbackException : ArgumentException
- {
- private char _charUnknown;
- private char _charUnknownHigh;
- private char _charUnknownLow;
- private int _index;
- public EncoderFallbackException()
- : base(SR.Arg_ArgumentException)
- {
- HResult = HResults.COR_E_ARGUMENT;
- }
- public EncoderFallbackException(string message)
- : base(message)
- {
- HResult = HResults.COR_E_ARGUMENT;
- }
- public EncoderFallbackException(string message, Exception innerException)
- : base(message, innerException)
- {
- HResult = HResults.COR_E_ARGUMENT;
- }
- internal EncoderFallbackException(
- string message, char charUnknown, int index) : base(message)
- {
- _charUnknown = charUnknown;
- _index = index;
- }
- internal EncoderFallbackException(
- string message, char charUnknownHigh, char charUnknownLow, int index) : base(message)
- {
- if (!char.IsHighSurrogate(charUnknownHigh))
- {
- throw new ArgumentOutOfRangeException(nameof(charUnknownHigh),
- SR.Format(SR.ArgumentOutOfRange_Range, 0xD800, 0xDBFF));
- }
- if (!char.IsLowSurrogate(charUnknownLow))
- {
- throw new ArgumentOutOfRangeException(nameof(CharUnknownLow),
- SR.Format(SR.ArgumentOutOfRange_Range, 0xDC00, 0xDFFF));
- }
- _charUnknownHigh = charUnknownHigh;
- _charUnknownLow = charUnknownLow;
- _index = index;
- }
- private EncoderFallbackException(SerializationInfo serializationInfo, StreamingContext streamingContext)
- : base(serializationInfo, streamingContext)
- {
- }
- public char CharUnknown
- {
- get
- {
- return (_charUnknown);
- }
- }
- public char CharUnknownHigh
- {
- get
- {
- return (_charUnknownHigh);
- }
- }
- public char CharUnknownLow
- {
- get
- {
- return (_charUnknownLow);
- }
- }
- public int Index
- {
- get
- {
- return _index;
- }
- }
- // Return true if the unknown character is a surrogate pair.
- public bool IsUnknownSurrogate()
- {
- return (_charUnknownHigh != '\0');
- }
- }
- }
|