//#define COSMOSDEBUG using System.Text; using Cosmos.Debug.Kernel; namespace Cosmos.System.ExtendedASCII { /// /// CosmosEncodingProvider class. Used to provide , by using its name or codepage. See also: . /// public class CosmosEncodingProvider : EncodingProvider { /// /// Encoding provider. /// private static readonly EncodingProvider s_singleton = new CosmosEncodingProvider(); /// /// Debugger inctanse of the "System" ring with the "CosmosEncodingProvider" tag. /// private static Debugger myDebugger = new Debugger("System", "CosmosEncodingProvider"); /// /// Create new inctanse of the class. /// internal CosmosEncodingProvider() { } /// /// Get CosmosEncodingProvider instance. Returns EncodingProvider. /// public static EncodingProvider Instance { get { return s_singleton; } } /// /// Get encoding, using its codepage. /// /// Codepage. /// Encoding value. public override Encoding GetEncoding(int codepage) { myDebugger.SendInternal($"Getting Encoding for codepage {codepage}"); if (codepage < 0 || codepage > 65535) return null; /* Let's check on our EncodingTable, if codepage is not found null is returned */ return EncodingTable.GetEncoding(codepage); } /// /// Get encoding, using its name. /// /// Name. /// Encoding value. public override Encoding GetEncoding(string name) { myDebugger.SendInternal($"Getting Encoding for codepage with name {name}"); int codepage = EncodingTable.GetCodePageFromDesc(name); if (codepage == -1) return null; return GetEncoding(codepage); } } }