General refactor.

This commit is contained in:
2021-11-09 18:51:47 +00:00
parent 889a8a84e5
commit 3fbe10d460
16 changed files with 67 additions and 77 deletions

View File

@@ -24,7 +24,6 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
namespace Claunia.Encoding.Tests;
[TestFixture]

View File

@@ -14,7 +14,7 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
<PackageReference Include="NUnit" Version="3.13.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4"/>
<PackageReference Include="NUnit" Version="3.13.2"/>
</ItemGroup>
</Project>

View File

@@ -94,8 +94,7 @@ public class LisaRoman
const string MATHEMATICS = "≠∞±≤≥µ∂∑∏π∫Ω¬√ƒ≈∆÷◊";
readonly byte[] _mathematicsBytes =
{
0xAD, 0xB0, 0xB1, 0xB2, 0xB3, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBD, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xD6,
0xD7
0xAD, 0xB0, 0xB1, 0xB2, 0xB3, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBD, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xD6, 0xD7
};
[Test]

View File

@@ -155,20 +155,20 @@ public sealed class Apple2c : SingleByteEncodingWithRunes
new Rune(0x0036), new Rune(0x0037),
// 0xC0
new Rune(0xF8FF), new Rune(0x0000), new Rune(0x1FBB0), new Rune(0x231B), new Rune(0x2713),
new Rune(0x1FBB1), new Rune(0x1FBB2), new Rune(0x1FBB3),
new Rune(0xF8FF), new Rune(0x0000), new Rune(0x1FBB0), new Rune(0x231B), new Rune(0x2713), new Rune(0x1FBB1),
new Rune(0x1FBB2), new Rune(0x1FBB3),
// 0xC8
new Rune(0x2190), new Rune(0x2026), new Rune(0x2193), new Rune(0x2191), new Rune(0x1FB76), new Rune(0x21B5),
new Rune(0x2589), new Rune(0x1FBB5),
// 0xD0
new Rune(0x1FBB6), new Rune(0x1FBB7), new Rune(0x1FBB8), new Rune(0x2500), new Rune(0x1FB7C),
new Rune(0x2192), new Rune(0x2592), new Rune(0x1FB90),
new Rune(0x1FBB6), new Rune(0x1FBB7), new Rune(0x1FBB8), new Rune(0x2500), new Rune(0x1FB7C), new Rune(0x2192),
new Rune(0x2592), new Rune(0x1FB90),
// 0xD8
new Rune(0x1FBB9), new Rune(0x1FBBA), new Rune(0x2595), new Rune(0x25c6), new Rune(0x1FB80),
new Rune(0x1FBBB), new Rune(0x1FBBC), new Rune(0x258F),
new Rune(0x1FBB9), new Rune(0x1FBBA), new Rune(0x2595), new Rune(0x25c6), new Rune(0x1FB80), new Rune(0x1FBBB),
new Rune(0x1FBBC), new Rune(0x258F),
// 0xE0
new Rune(0x0060), new Rune(0x0061), new Rune(0x0062), new Rune(0x0063), new Rune(0x0064), new Rune(0x0065),

View File

@@ -91,20 +91,20 @@ public class Apple2gs : SingleByteEncodingWithRunes
new Rune(0x003E), new Rune(0x003F),
// 0x40
new Rune(0xF8FF), new Rune(0x0000), new Rune(0x1FBB0), new Rune(0x231B), new Rune(0x2713),
new Rune(0x1FBB1), new Rune(0x1FBB4), new Rune(0x1FB81),
new Rune(0xF8FF), new Rune(0x0000), new Rune(0x1FBB0), new Rune(0x231B), new Rune(0x2713), new Rune(0x1FBB1),
new Rune(0x1FBB4), new Rune(0x1FB81),
// 0x48
new Rune(0x2190), new Rune(0x2026), new Rune(0x2193), new Rune(0x2191), new Rune(0x2594), new Rune(0x21B5),
new Rune(0x2589), new Rune(0x1FBB5),
// 0x50
new Rune(0x1FBB6), new Rune(0x1FBB7), new Rune(0x1FBB8), new Rune(0x2500), new Rune(0x1FB7C),
new Rune(0x2192), new Rune(0x2592), new Rune(0x1FB90),
new Rune(0x1FBB6), new Rune(0x1FBB7), new Rune(0x1FBB8), new Rune(0x2500), new Rune(0x1FB7C), new Rune(0x2192),
new Rune(0x2592), new Rune(0x1FB90),
// 0x58
new Rune(0x1FBB9), new Rune(0x1FBBA), new Rune(0x2595), new Rune(0x25C6), new Rune(0x1FB80),
new Rune(0x1FBBB), new Rune(0x1FBBC), new Rune(0x258F),
new Rune(0x1FBB9), new Rune(0x1FBBA), new Rune(0x2595), new Rune(0x25C6), new Rune(0x1FB80), new Rune(0x1FBBB),
new Rune(0x1FBBC), new Rune(0x258F),
// 0x60
new Rune(0x0060), new Rune(0x0061), new Rune(0x0062), new Rune(0x0063), new Rune(0x0064), new Rune(0x0065),

View File

@@ -63,16 +63,16 @@ public class AtariST : SingleByteEncodingWithRunes
new Rune(0x1FBBE), new Rune(0x1FBBF),
// 0x08
new Rune(0x2713), new Rune(0x1F552), new Rune(0x1F514), new Rune(0x266A), new Rune(0x000C),
new Rune(0x000D), new Rune(0xFFFD), new Rune(0xFFFD),
new Rune(0x2713), new Rune(0x1F552), new Rune(0x1F514), new Rune(0x266A), new Rune(0x000C), new Rune(0x000D),
new Rune(0xFFFD), new Rune(0xFFFD),
// 0x10
new Rune(0x1FBF0), new Rune(0x1FBF1), new Rune(0x1FBF2), new Rune(0x1FBF3), new Rune(0x1FBF4),
new Rune(0x1FBF5), new Rune(0x1FBF6), new Rune(0x1FBF7),
// 0x18
new Rune(0x1FBF8), new Rune(0x1FBF9), new Rune(0x0259), new Rune(0x001B), new Rune(0xFFFD),
new Rune(0xFFFD), new Rune(0xFFFD), new Rune(0xFFFD),
new Rune(0x1FBF8), new Rune(0x1FBF9), new Rune(0x0259), new Rune(0x001B), new Rune(0xFFFD), new Rune(0xFFFD),
new Rune(0xFFFD), new Rune(0xFFFD),
// 0x20
new Rune(0x0020), new Rune(0x0021), new Rune(0x0022), new Rune(0x0023), new Rune(0x0024), new Rune(0x0025),

View File

@@ -12,8 +12,7 @@ public sealed class EncodingInfo
readonly Type _thisType;
bool _isSystem;
internal EncodingInfo(int codePage, string name, string displayName, bool system = true,
Type internalType = null)
internal EncodingInfo(int codePage, string name, string displayName, bool system = true, Type internalType = null)
{
CodePage = codePage;
Name = name;
@@ -41,7 +40,7 @@ public sealed class EncodingInfo
/// </returns>
public Encoding GetEncoding() => (Encoding)_thisType.GetConstructor(new Type[]
{}).Invoke(new object[]
{});
{});
/// <summary>Gets a value indicating whether the specified object is equal to the current EncodingInfo object.</summary>
/// <param name="value">An object to compare to the current <see cref="T:Claunia.Encoding.EncodingInfo" /> object.</param>

View File

@@ -63,8 +63,8 @@ public class GEM : SingleByteEncodingWithRunes
new Rune(0x1F5D7), new Rune(0x25C6),
// 0x08
new Rune(0x2713), new Rune(0x1F552), new Rune(0x1F514), new Rune(0x266A), new Rune(0x25B4),
new Rune(0x25BE), new Rune(0x25B8), new Rune(0x25C2),
new Rune(0x2713), new Rune(0x1F552), new Rune(0x1F514), new Rune(0x266A), new Rune(0x25B4), new Rune(0x25BE),
new Rune(0x25B8), new Rune(0x25C2),
// 0x10
new Rune(0x25BA), new Rune(0x25C4), new Rune(0x29D3), new Rune(0x2582), new Rune(0x00B6), new Rune(0x00A7),

View File

@@ -111,20 +111,20 @@ public class PETSCII : SingleByteEncodingWithRunes
new Rune(0x2191), new Rune(0x2190),
// 0x60
new Rune(0x1FB79), new Rune(0x2660), new Rune(0x1FB72), new Rune(0x1FB78), new Rune(0x1FB77),
new Rune(0x1FB76), new Rune(0x1FB7A), new Rune(0x1FB71),
new Rune(0x1FB79), new Rune(0x2660), new Rune(0x1FB72), new Rune(0x1FB78), new Rune(0x1FB77), new Rune(0x1FB76),
new Rune(0x1FB7A), new Rune(0x1FB71),
// 0x68
new Rune(0x1FB74), new Rune(0x256E), new Rune(0x2570), new Rune(0x256F), new Rune(0x1FB7C),
new Rune(0x2572), new Rune(0x2571), new Rune(0x1FB7D),
new Rune(0x1FB74), new Rune(0x256E), new Rune(0x2570), new Rune(0x256F), new Rune(0x1FB7C), new Rune(0x2572),
new Rune(0x2571), new Rune(0x1FB7D),
// 0x70
new Rune(0x1FB7E), new Rune(0x25CF), new Rune(0x1FB7B), new Rune(0x2665), new Rune(0x1FB70),
new Rune(0x256D), new Rune(0x2573), new Rune(0x25CB),
new Rune(0x1FB7E), new Rune(0x25CF), new Rune(0x1FB7B), new Rune(0x2665), new Rune(0x1FB70), new Rune(0x256D),
new Rune(0x2573), new Rune(0x25CB),
// 0x78
new Rune(0x2663), new Rune(0x1FB75), new Rune(0x2666), new Rune(0x253C), new Rune(0x1FB8C),
new Rune(0x2502), new Rune(0x03C0), new Rune(0x25E5),
new Rune(0x2663), new Rune(0x1FB75), new Rune(0x2666), new Rune(0x253C), new Rune(0x1FB8C), new Rune(0x2502),
new Rune(0x03C0), new Rune(0x25E5),
// 0x80
new Rune(0x0000), new Rune(0x0000), new Rune(0x0000), new Rune(0x0000), new Rune(0x0000), new Rune(0x0000),
@@ -147,48 +147,48 @@ public class PETSCII : SingleByteEncodingWithRunes
new Rune(0x2592), new Rune(0x2595),
// 0xA8
new Rune(0x1FB8F), new Rune(0x25E4), new Rune(0x1FB87), new Rune(0x251C), new Rune(0x2597),
new Rune(0x2514), new Rune(0x2510), new Rune(0x2582),
new Rune(0x1FB8F), new Rune(0x25E4), new Rune(0x1FB87), new Rune(0x251C), new Rune(0x2597), new Rune(0x2514),
new Rune(0x2510), new Rune(0x2582),
// 0xB0
new Rune(0x250C), new Rune(0x2534), new Rune(0x252C), new Rune(0x2524), new Rune(0x258E), new Rune(0x258D),
new Rune(0x1FB88), new Rune(0x1FB82),
// 0xB8
new Rune(0x1FB83), new Rune(0x2583), new Rune(0x1FB7F), new Rune(0x2596), new Rune(0x259D),
new Rune(0x2518), new Rune(0x2598), new Rune(0x259A),
new Rune(0x1FB83), new Rune(0x2583), new Rune(0x1FB7F), new Rune(0x2596), new Rune(0x259D), new Rune(0x2518),
new Rune(0x2598), new Rune(0x259A),
// 0xC0 (repeats 0x60 - 0x67)
new Rune(0x1FB79), new Rune(0x2660), new Rune(0x1FB72), new Rune(0x1FB78), new Rune(0x1FB77),
new Rune(0x1FB76), new Rune(0x1FB7A), new Rune(0x1FB71),
new Rune(0x1FB79), new Rune(0x2660), new Rune(0x1FB72), new Rune(0x1FB78), new Rune(0x1FB77), new Rune(0x1FB76),
new Rune(0x1FB7A), new Rune(0x1FB71),
// 0xC8 (repeats 0x68 - 0x6F)
new Rune(0x1FB74), new Rune(0x256E), new Rune(0x2570), new Rune(0x256F), new Rune(0x1FB7C),
new Rune(0x2572), new Rune(0x2571), new Rune(0x1FB7D),
new Rune(0x1FB74), new Rune(0x256E), new Rune(0x2570), new Rune(0x256F), new Rune(0x1FB7C), new Rune(0x2572),
new Rune(0x2571), new Rune(0x1FB7D),
// 0xD0 (repeats 0x70 - 0x77)
new Rune(0x1FB7E), new Rune(0x25CF), new Rune(0x1FB7B), new Rune(0x2665), new Rune(0x1FB70),
new Rune(0x256D), new Rune(0x2573), new Rune(0x25CB),
new Rune(0x1FB7E), new Rune(0x25CF), new Rune(0x1FB7B), new Rune(0x2665), new Rune(0x1FB70), new Rune(0x256D),
new Rune(0x2573), new Rune(0x25CB),
// 0xD8 (repeats 0x78 - 0x7F)
new Rune(0x2663), new Rune(0x1FB75), new Rune(0x2666), new Rune(0x253C), new Rune(0x1FB8C),
new Rune(0x2502), new Rune(0x03C0), new Rune(0x25E5),
new Rune(0x2663), new Rune(0x1FB75), new Rune(0x2666), new Rune(0x253C), new Rune(0x1FB8C), new Rune(0x2502),
new Rune(0x03C0), new Rune(0x25E5),
// 0xE0 (repeats 0xA0 - 0xA7)
new Rune(0x00A0), new Rune(0x258C), new Rune(0x2584), new Rune(0x2594), new Rune(0x2581), new Rune(0x258E),
new Rune(0x2592), new Rune(0x2595),
// 0xE8 (repeats 0xA8 - 0xAF)
new Rune(0x1FB8F), new Rune(0x25E4), new Rune(0x1FB87), new Rune(0x251C), new Rune(0x2597),
new Rune(0x2514), new Rune(0x2510), new Rune(0x2582),
new Rune(0x1FB8F), new Rune(0x25E4), new Rune(0x1FB87), new Rune(0x251C), new Rune(0x2597), new Rune(0x2514),
new Rune(0x2510), new Rune(0x2582),
// 0xF0 (repeats 0xB0 - 0xB7)
new Rune(0x250C), new Rune(0x2534), new Rune(0x252C), new Rune(0x2524), new Rune(0x258E), new Rune(0x258D),
new Rune(0x1FB88), new Rune(0x1FB82),
// 0xF8 (repeats 0xB8 - 0xBF)
new Rune(0x1FB83), new Rune(0x2583), new Rune(0x1FB7F), new Rune(0x2596), new Rune(0x259D),
new Rune(0x2518), new Rune(0x2598), new Rune(0x259A)
new Rune(0x1FB83), new Rune(0x2583), new Rune(0x1FB7F), new Rune(0x2596), new Rune(0x259D), new Rune(0x2518),
new Rune(0x2598), new Rune(0x259A)
};
/// <summary>Converts a Unicode character to an PETSCII character</summary>

View File

@@ -30,15 +30,13 @@ namespace Claunia.Encoding;
public static class Pangrams
{
/// <summary>A pangram that contains all (or most) Arabic characters.</summary>
public const string ARABIC =
"صِف خَلقَ خَودِ كَمِثلِ الشَمسِ إِذ بَزَغَت — يَحظى الضَجيعُ بِها نَجلاءَ مِعطارِ";
public const string ARABIC = "صِف خَلقَ خَودِ كَمِثلِ الشَمسِ إِذ بَزَغَت — يَحظى الضَجيعُ بِها نَجلاءَ مِعطارِ";
/// <summary>A pangram that contains all (or most) Azeri characters.</summary>
public const string AZERI = "Zəfər, jaketini də papağını da götür, bu axşam hava çox soyuq olacaq.";
/// <summary>A pangram that contains all (or most) Basque characters.</summary>
public const string BASQUE = "Vaudeville itxurako filmean, yogi ñaño bat jipoitzen dute Quebec-en, whiski truk";
/// <summary>A pangram that contains all (or most) Breton characters.</summary>
public const string BRETON =
"Yeched mat Jakez ! Skarzhit ar gwerennoù-mañ, kavet e vo gwin betek fin ho puhez.";
public const string BRETON = "Yeched mat Jakez ! Skarzhit ar gwerennoù-mañ, kavet e vo gwin betek fin ho puhez.";
/// <summary>A pangram that contains all (or most) Bulgarian characters.</summary>
public const string BULGARIAN = "Хълцащ змей плюе шофьор стигнал чуждия бивак.";
/// <summary>A pangram that contains all (or most) Catalan characters.</summary>

View File

@@ -2,14 +2,10 @@ using System;
namespace Claunia.Encoding;
/// <summary>
/// Implements a class that converts to/from a single byte codepage and UTF-16 representable strings
/// </summary>
/// <summary>Implements a class that converts to/from a single byte codepage and UTF-16 representable strings</summary>
public abstract class SingleByteEncoding : Encoding
{
/// <summary>
/// Character conversion table
/// </summary>
/// <summary>Character conversion table</summary>
protected abstract char[] CharTable { get; }
/// <summary>Gets a value indicating whether the current encoding can be used by browser clients for displaying content.</summary>

View File

@@ -5,14 +5,12 @@ using System.Linq;
namespace Claunia.Encoding;
/// <summary>
/// Implements a class that converts to/from a single byte codepage and strings that contains elements that need
/// surrogates in UTF-16, using runes.
/// Implements a class that converts to/from a single byte codepage and strings that contains elements that need
/// surrogates in UTF-16, using runes.
/// </summary>
public abstract class SingleByteEncodingWithRunes : Encoding
{
/// <summary>
/// Rune conversion table
/// </summary>
/// <summary>Rune conversion table</summary>
protected abstract Rune[] CharTable { get; }
/// <summary>Gets a value indicating whether the current encoding can be used by browser clients for displaying content.</summary>
@@ -296,8 +294,7 @@ public abstract class SingleByteEncodingWithRunes : Encoding
/// <param name="bytes">The byte array containing the sequence of bytes to decode.</param>
/// <param name="index">The index of the first byte to decode.</param>
/// <param name="count">The number of bytes to decode.</param>
public override char[] GetChars(byte[] bytes, int index, int count) =>
GetString(bytes, index, count).ToCharArray();
public override char[] GetChars(byte[] bytes, int index, int count) => GetString(bytes, index, count).ToCharArray();
/// <summary>Calculates the maximum number of bytes produced by encoding the specified number of characters.</summary>
/// <returns>The maximum number of bytes produced by encoding the specified number of characters.</returns>
@@ -358,7 +355,7 @@ public abstract class SingleByteEncodingWithRunes : Encoding
int outPos = 0;
foreach(var r in runes)
foreach(Rune r in runes)
outPos += r.EncodeToUtf16(new Span<char>(chars, outPos, chars.Length - outPos));
return new string(chars);

View File

@@ -63,8 +63,8 @@ public class ZX80 : SingleByteEncodingWithRunes
new Rune(0x2596), new Rune(0x2597),
// 0x08
new Rune(0x259E), new Rune(0x2592), new Rune(0x1FB8F), new Rune(0x1FB8E), new Rune(0x00A3),
new Rune(0x0024), new Rune(0x003A), new Rune(0x003F),
new Rune(0x259E), new Rune(0x2592), new Rune(0x1FB8F), new Rune(0x1FB8E), new Rune(0x00A3), new Rune(0x0024),
new Rune(0x003A), new Rune(0x003F),
// 0x10
new Rune(0x0028), new Rune(0x0029), new Rune(0x002D), new Rune(0x002B), new Rune(0x002A), new Rune(0x002F),
@@ -127,8 +127,8 @@ public class ZX80 : SingleByteEncodingWithRunes
new Rune(0x259B), new Rune(0x259A),
// 0x88
new Rune(0x2592), new Rune(0x1FB90), new Rune(0x1FB91), new Rune(0x1FB92), new Rune(0xFFFD),
new Rune(0xFFFD), new Rune(0xFFFD), new Rune(0xFFFD),
new Rune(0x2592), new Rune(0x1FB90), new Rune(0x1FB91), new Rune(0x1FB92), new Rune(0xFFFD), new Rune(0xFFFD),
new Rune(0xFFFD), new Rune(0xFFFD),
// 0x90
new Rune(0xFFFD), new Rune(0xFFFD), new Rune(0xFFFD), new Rune(0xFFFD), new Rune(0xFFFD), new Rune(0xFFFD),

View File

@@ -63,8 +63,8 @@ public class ZX81 : SingleByteEncodingWithRunes
new Rune(0x259E), new Rune(0x259B),
// 0x08
new Rune(0x2592), new Rune(0x1FB8F), new Rune(0x1FB8E), new Rune(0x0022), new Rune(0x00A3),
new Rune(0x0024), new Rune(0x003A), new Rune(0x003F),
new Rune(0x2592), new Rune(0x1FB8F), new Rune(0x1FB8E), new Rune(0x0022), new Rune(0x00A3), new Rune(0x0024),
new Rune(0x003A), new Rune(0x003F),
// 0x10
new Rune(0x0028), new Rune(0x0029), new Rune(0x003E), new Rune(0x003C), new Rune(0x003D), new Rune(0x002B),
@@ -127,8 +127,8 @@ public class ZX81 : SingleByteEncodingWithRunes
new Rune(0x259A), new Rune(0x2597),
// 0x88
new Rune(0x1FB90), new Rune(0x1FB91), new Rune(0x1FB92), new Rune(0xFFFD), new Rune(0xFFFD),
new Rune(0xFFFD), new Rune(0xFFFD), new Rune(0xFFFD),
new Rune(0x1FB90), new Rune(0x1FB91), new Rune(0x1FB92), new Rune(0xFFFD), new Rune(0xFFFD), new Rune(0xFFFD),
new Rune(0xFFFD), new Rune(0xFFFD),
// 0x90
new Rune(0xFFFD), new Rune(0xFFFD), new Rune(0xFFFD), new Rune(0xFFFD), new Rune(0xFFFD), new Rune(0xFFFD),

View File

@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="NuGet.Build.Packaging" version="0.2.2" targetFramework="portable40-net40+sl5+win8+wp8" developmentDependency="true" />
<package id="NuGet.Build.Packaging" version="0.2.2" targetFramework="portable40-net40+sl5+win8+wp8"
developmentDependency="true"/>
</packages>

View File

@@ -7,6 +7,7 @@ Copyright © 2016-2021 Natalia Portillo <claunia@claunia.com>
Supported encodings
==============================
* Apple II, IIc, IIe and IIgs
* Apple Lisa
* Atari Standard Code for Information Interchange (ATASCII)