Skip to content

Commit

Permalink
Minor
Browse files Browse the repository at this point in the history
  • Loading branch information
rampaa committed Dec 15, 2023
1 parent af344e2 commit d9527b7
Show file tree
Hide file tree
Showing 3 changed files with 126 additions and 119 deletions.
2 changes: 1 addition & 1 deletion JL.Core/Dicts/EPWING/Yomichan/EpwingYomichanLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public static async Task Load(Dict dict)
reading = reading.GetPooledString();
}

string[]? definitions = EpwingYomichanRecord.GetDefinitions(jsonElements[5]);
string[]? definitions = EpwingYomichanUtils.GetDefinitions(jsonElements[5]);
definitions?.DeduplicateStringsInArray();

if (definitions is null
Expand Down
118 changes: 0 additions & 118 deletions JL.Core/Dicts/EPWING/Yomichan/EpwingYomichanRecord.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using System.Globalization;
using System.Text;
using System.Text.Json;
using JL.Core.Dicts.Options;
using JL.Core.Freqs;
using JL.Core.Utilities;
Expand Down Expand Up @@ -127,123 +126,6 @@ public int GetFrequencyFromDB(Dictionary<string, List<FrequencyRecord>> freqDict
return frequency;
}

public static string[]? GetDefinitions(JsonElement jsonElement)
{
List<string> definitions = new();
foreach (JsonElement definitionElement in jsonElement.EnumerateArray())
{
string? definition = null;
if (definitionElement.ValueKind is JsonValueKind.String)
{
definition = definitionElement.GetString()!.Trim();
}

else if (definitionElement.ValueKind is JsonValueKind.Array)
{
definition = GetDefinitionsFromJsonArray(definitionElement);
}

else if (definitionElement.ValueKind is JsonValueKind.Object)
{
definition = GetDefinitionsFromJsonObject(definitionElement).Content;
}

if (definition is not null)
{
definitions.Add(definition.GetPooledString());
}
}

return definitions.TrimStringListToStringArray();
}

private static string? GetDefinitionsFromJsonArray(JsonElement jsonElement, string? parentTag = null)
{
StringBuilder stringBuilder = new();

bool first = true;
foreach (JsonElement definitionElement in jsonElement.EnumerateArray())
{
if (definitionElement.ValueKind is JsonValueKind.String)
{
_ = stringBuilder.Append(definitionElement.GetString());
}

else if (definitionElement.ValueKind is JsonValueKind.Array)
{
_ = stringBuilder.Append(GetDefinitionsFromJsonArray(definitionElement));
}

else if (definitionElement.ValueKind is JsonValueKind.Object)
{
if (first)
{
first = false;
parentTag = null;
}

YomichanContent contentResult = GetDefinitionsFromJsonObject(definitionElement, parentTag);
if (contentResult.Content is not null)
{
if (contentResult.Tag is null or "span")
{
_ = stringBuilder.Append(contentResult.Content);
}

else if (contentResult.Tag is "ruby" or "rt")
{
_ = stringBuilder.Append(CultureInfo.InvariantCulture, $" ({contentResult.Content}) ");
}

else //if (contentResult.Tag is "div" or "a" or "li" or "ul" or "ol" or "p" or "h1" or "h2" or "h3" or "h4" or "h5" or "h6")
{
_ = stringBuilder.Append(CultureInfo.InvariantCulture, $"\n{contentResult.Content.TrimStart('\n')}");
}
}
}
}

return stringBuilder.Length > 0
? stringBuilder.ToString().Trim()
: null;
}

private static YomichanContent GetDefinitionsFromJsonObject(JsonElement jsonElement, string? parentTag = null)
{
JsonElement currentJsonElement = jsonElement;
string? currentParentTag = parentTag;
while (true)
{
if (currentJsonElement.TryGetProperty("content", out JsonElement contentElement))
{
string? tag = null;
if (currentJsonElement.TryGetProperty("tag", out JsonElement tagElement))
{
tag = tagElement.GetString();
}

if (contentElement.ValueKind is JsonValueKind.String)
{
return new YomichanContent(currentParentTag ?? tag, contentElement.GetString()!.Trim());
}

if (contentElement.ValueKind is JsonValueKind.Array)
{
return new YomichanContent(currentParentTag ?? tag, GetDefinitionsFromJsonArray(contentElement, tag));
}

if (contentElement.ValueKind is JsonValueKind.Object)
{
currentJsonElement = contentElement;
currentParentTag ??= tag;
continue;
}
}

return default;
}
}

public override bool Equals(object? obj)
{
if (obj is null)
Expand Down
125 changes: 125 additions & 0 deletions JL.Core/Dicts/EPWING/Yomichan/EpwingYomichanUtils.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
using System.Globalization;
using System.Text;
using System.Text.Json;
using JL.Core.Utilities;

namespace JL.Core.Dicts.EPWING.Yomichan;
internal static class EpwingYomichanUtils
{
public static string[]? GetDefinitions(JsonElement jsonElement)
{
List<string> definitions = new();
foreach (JsonElement definitionElement in jsonElement.EnumerateArray())
{
string? definition = null;
if (definitionElement.ValueKind is JsonValueKind.String)
{
definition = definitionElement.GetString()!.Trim();
}

else if (definitionElement.ValueKind is JsonValueKind.Array)
{
definition = GetDefinitionsFromJsonArray(definitionElement);
}

else if (definitionElement.ValueKind is JsonValueKind.Object)
{
definition = GetDefinitionsFromJsonObject(definitionElement).Content;
}

if (definition is not null)
{
definitions.Add(definition.GetPooledString());
}
}

return definitions.TrimStringListToStringArray();
}

private static string? GetDefinitionsFromJsonArray(JsonElement jsonElement, string? parentTag = null)
{
StringBuilder stringBuilder = new();

bool first = true;
foreach (JsonElement definitionElement in jsonElement.EnumerateArray())
{
if (definitionElement.ValueKind is JsonValueKind.String)
{
_ = stringBuilder.Append(definitionElement.GetString());
}

else if (definitionElement.ValueKind is JsonValueKind.Array)
{
_ = stringBuilder.Append(GetDefinitionsFromJsonArray(definitionElement));
}

else if (definitionElement.ValueKind is JsonValueKind.Object)
{
if (first)
{
first = false;
parentTag = null;
}

YomichanContent contentResult = GetDefinitionsFromJsonObject(definitionElement, parentTag);
if (contentResult.Content is not null)
{
if (contentResult.Tag is null or "span")
{
_ = stringBuilder.Append(contentResult.Content);
}

else if (contentResult.Tag is "ruby" or "rt")
{
_ = stringBuilder.Append(CultureInfo.InvariantCulture, $" ({contentResult.Content}) ");
}

else //if (contentResult.Tag is "div" or "a" or "li" or "ul" or "ol" or "p" or "h1" or "h2" or "h3" or "h4" or "h5" or "h6")
{
_ = stringBuilder.Append(CultureInfo.InvariantCulture, $"\n{contentResult.Content.TrimStart('\n')}");
}
}
}
}

return stringBuilder.Length > 0
? stringBuilder.ToString().Trim()
: null;
}

private static YomichanContent GetDefinitionsFromJsonObject(JsonElement jsonElement, string? parentTag = null)
{
JsonElement currentJsonElement = jsonElement;
string? currentParentTag = parentTag;
while (true)
{
if (currentJsonElement.TryGetProperty("content", out JsonElement contentElement))
{
string? tag = null;
if (currentJsonElement.TryGetProperty("tag", out JsonElement tagElement))
{
tag = tagElement.GetString();
}

if (contentElement.ValueKind is JsonValueKind.String)
{
return new YomichanContent(currentParentTag ?? tag, contentElement.GetString()!.Trim());
}

if (contentElement.ValueKind is JsonValueKind.Array)
{
return new YomichanContent(currentParentTag ?? tag, GetDefinitionsFromJsonArray(contentElement, tag));
}

if (contentElement.ValueKind is JsonValueKind.Object)
{
currentJsonElement = contentElement;
currentParentTag ??= tag;
continue;
}
}

return default;
}
}
}

0 comments on commit d9527b7

Please sign in to comment.