Browse Source

move EncodedStringCode enum into EncodedString class

pull/1935/head
Ildar Khayrutdinov 5 years ago
parent
commit
f954a84a90
  1. 31
      src/ImageSharp/Metadata/Profiles/Exif/ExifConstants.cs
  2. 2
      src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs
  3. 40
      src/ImageSharp/Metadata/Profiles/Exif/Values/EncodedString.cs
  4. 31
      src/ImageSharp/Metadata/Profiles/Exif/Values/EncodedStringCode.cs
  5. 2
      tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs
  6. 2
      tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs

31
src/ImageSharp/Metadata/Profiles/Exif/ExifConstants.cs

@ -4,6 +4,7 @@
using System;
using System.Buffers.Binary;
using System.Text;
using static SixLabors.ImageSharp.Metadata.Profiles.Exif.EncodedString;
namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
{
@ -45,7 +46,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
private static ReadOnlySpan<byte> UndefinedCodeBytes => new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 };
public static bool TryDetect(ReadOnlySpan<byte> buffer, out EncodedStringCode code)
public static bool TryDetect(ReadOnlySpan<byte> buffer, out CharacterCode code)
{
if (buffer.Length >= CharacterCodeBytesLength)
{
@ -53,16 +54,16 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
switch (test)
{
case AsciiCode:
code = EncodedStringCode.ASCII;
code = CharacterCode.ASCII;
return true;
case JISCode:
code = EncodedStringCode.JIS;
code = CharacterCode.JIS;
return true;
case UnicodeCode:
code = EncodedStringCode.Unicode;
code = CharacterCode.Unicode;
return true;
case UndefinedCode:
code = EncodedStringCode.Undefined;
code = CharacterCode.Undefined;
return true;
default:
break;
@ -73,21 +74,21 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
return false;
}
public static ReadOnlySpan<byte> GetCodeBytes(EncodedStringCode code) => code switch
public static ReadOnlySpan<byte> GetCodeBytes(CharacterCode code) => code switch
{
EncodedStringCode.ASCII => AsciiCodeBytes,
EncodedStringCode.JIS => JISCodeBytes,
EncodedStringCode.Unicode => UnicodeCodeBytes,
EncodedStringCode.Undefined => UndefinedCodeBytes,
CharacterCode.ASCII => AsciiCodeBytes,
CharacterCode.JIS => JISCodeBytes,
CharacterCode.Unicode => UnicodeCodeBytes,
CharacterCode.Undefined => UndefinedCodeBytes,
_ => UndefinedCodeBytes
};
public static Encoding GetEncoding(EncodedStringCode code) => code switch
public static Encoding GetEncoding(CharacterCode code) => code switch
{
EncodedStringCode.ASCII => Encoding.ASCII,
EncodedStringCode.JIS => JIS0208Encoding,
EncodedStringCode.Unicode => Encoding.Unicode,
EncodedStringCode.Undefined => Encoding.UTF8,
CharacterCode.ASCII => Encoding.ASCII,
CharacterCode.JIS => JIS0208Encoding,
CharacterCode.Unicode => Encoding.Unicode,
CharacterCode.Undefined => Encoding.UTF8,
_ => Encoding.UTF8
};
}

2
src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs

@ -361,7 +361,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
}
// ext processing
if (ExifConstants.TryDetect(buffer, out EncodedStringCode code))
if (ExifConstants.TryDetect(buffer, out EncodedString.CharacterCode code))
{
string text = ExifConstants.GetEncoding(code).GetString(buffer.Slice(ExifConstants.CharacterCodeBytesLength));
return new EncodedString(code, text);

40
src/ImageSharp/Metadata/Profiles/Exif/Values/EncodedString.cs

@ -15,7 +15,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
/// </summary>
/// <param name="text">The text value.</param>
public EncodedString(string text)
: this(EncodedStringCode.Unicode, text)
: this(CharacterCode.Unicode, text)
{
}
@ -24,16 +24,42 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
/// </summary>
/// <param name="code">The character code.</param>
/// <param name="text">The text value.</param>
public EncodedString(EncodedStringCode code, string text)
public EncodedString(CharacterCode code, string text)
{
this.Text = text;
this.Code = code;
}
/// <summary>
/// The 8-byte character code enum.
/// </summary>
public enum CharacterCode
{
/// <summary>
/// The ASCII (ITU-T T.50 IA5) character code.
/// </summary>
ASCII,
/// <summary>
/// The JIS (X208-1990) character code.
/// </summary>
JIS,
/// <summary>
/// The Unicode character code.
/// </summary>
Unicode,
/// <summary>
/// The undefined character code.
/// </summary>
Undefined
}
/// <summary>
/// Gets the character ode.
/// </summary>
public EncodedStringCode Code { get; }
public CharacterCode Code { get; }
/// <summary>
/// Gets the text.
@ -44,14 +70,10 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
public override bool Equals(object obj) => obj is EncodedString other && this.Equals(other);
/// <inheritdoc/>
public bool Equals(EncodedString other)
{
return this.Text == other.Text && this.Code == other.Code;
}
public bool Equals(EncodedString other) => this.Text == other.Text && this.Code == other.Code;
/// <inheritdoc/>
public override int GetHashCode() =>
HashCode.Combine(this.Text, this.Code);
public override int GetHashCode() => HashCode.Combine(this.Text, this.Code);
/// <inheritdoc/>
public override string ToString() => this.Text;

31
src/ImageSharp/Metadata/Profiles/Exif/Values/EncodedStringCode.cs

@ -1,31 +0,0 @@
// Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0.
namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
{
/// <summary>
/// The 8-byte character code enum.
/// </summary>
public enum EncodedStringCode
{
/// <summary>
/// The ASCII (ITU-T T.50 IA5) character code.
/// </summary>
ASCII,
/// <summary>
/// The JIS (X208-1990) character code.
/// </summary>
JIS,
/// <summary>
/// The Unicode character code.
/// </summary>
Unicode,
/// <summary>
/// The undefined character code.
/// </summary>
Undefined
}
}

2
tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs

@ -301,7 +301,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
exif.SetValue(ExifTag.XPAuthor, Encoding.GetEncoding("UCS-2").GetBytes("Dan Petitt"));
exif.SetValue(ExifTag.XPTitle, Encoding.GetEncoding("UCS-2").GetBytes("A bit of test metadata for image title"));
exif.SetValue(ExifTag.UserComment, new EncodedString(EncodedStringCode.ASCII, "A bit of normal comment text"));
exif.SetValue(ExifTag.UserComment, new EncodedString(EncodedString.CharacterCode.ASCII, "A bit of normal comment text"));
exif.SetValue(ExifTag.GPSDateStamp, "2022-01-06");
exif.SetValue(ExifTag.XPKeywords, new byte[] { 0x41, 0x53, 0x43, 0x49, 0x49, 00, 00, 00, 0x41, 0x41, 0x41 });

2
tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs

@ -602,7 +602,7 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Exif.Values
[MemberData(nameof(EncodedStringTags))]
public void ExifEncodedStringTests(ExifTag tag)
{
var expected = new EncodedString(EncodedStringCode.JIS, "test string");
var expected = new EncodedString(EncodedString.CharacterCode.JIS, "test string");
ExifValue value = ExifValues.Create(tag);
Assert.False(value.TrySetValue(123));

Loading…
Cancel
Save