Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add owo-lib rich translations compatibility #2

Merged
merged 5 commits into from
Jun 28, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/main/java/me/fallenbreath/yamlang/ConverterConfiguration.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package me.fallenbreath.yamlang;

public class ConverterConfiguration
{
public final boolean allowLists;
public ConverterConfiguration(boolean allowLists)
{
this.allowLists = allowLists;
}
}
60 changes: 0 additions & 60 deletions src/main/java/me/fallenbreath/yamlang/Yamlang2JsonlangMapper.java

This file was deleted.

66 changes: 66 additions & 0 deletions src/main/java/me/fallenbreath/yamlang/YamlangConvertor.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,21 @@
package me.fallenbreath.yamlang;

import com.google.common.io.CharStreams;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.gradle.api.DefaultTask;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.TaskAction;
import org.yaml.snakeyaml.Yaml;

import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.nio.file.Path;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

public abstract class YamlangConvertor extends DefaultTask
Expand All @@ -13,6 +24,7 @@ public abstract class YamlangConvertor extends DefaultTask
private static final String JSON_PREFIX = ".json";

private SourceSet sourceSet;
private ConverterConfiguration configuration;

void setSourceSet(SourceSet sourceSet)
{
Expand All @@ -36,6 +48,10 @@ private void doConversion()
private void doConversionImpl()
{
YamlangExtension extension = this.getProject().getExtensions().getByType(YamlangExtension.class);
this.configuration = new ConverterConfiguration(
extension.getRichTranslations().getOrElse(false)
);

String inputDir = extension.getInputDir().getOrElse("");
String outputDir = extension.getOutputDir().getOrElse(inputDir);
String targetFilePattern = extension.getTargetFilePattern().getOrElse("*" + YAML_PREFIX);
Expand Down Expand Up @@ -71,4 +87,54 @@ private static String renameYaml2Json(String fileName)
String baseName = fileName.substring(0, fileName.length() - YAML_PREFIX.length());
return baseName + JSON_PREFIX;
}

private String yamlang2Jsonlang(String ymlContent)
{
Map<Object, Object> yamlMap = new Yaml().load(ymlContent);
Map<String, Object> result = new LinkedHashMap<>();
parseMap(result, yamlMap, "");
Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
return gson.toJson(result);
}

@SuppressWarnings("unchecked")
private void parseMap(Map<String, Object> result, Map<Object, Object> yamlMap, String prefix)
{
yamlMap.forEach((keyObj, value) -> {
if (value == null)
{
return;
}
if (!(keyObj instanceof String))
{
throw new IllegalArgumentException(String.format("Bad type %s for key %s at path %s", keyObj.getClass(), keyObj, prefix));
}

String key = (String)keyObj;
String fullKey = prefix.isEmpty() ? key : (!key.equals(".") ? prefix + "." + key : prefix);
if (value instanceof String)
{
result.put(fullKey, value);
}
else if (value instanceof Map)
{
parseMap(result, (Map<Object, Object>)value, fullKey);
}
else if (configuration.allowLists && value instanceof List)
{
result.put(fullKey, value);
}
else
{
throw new IllegalArgumentException(String.format("Bad type %s for value %s on key %s", value.getClass(), value, fullKey));
}
});
}

public class Yamlang2JsonlangMapper extends FilterReader
{
public Yamlang2JsonlangMapper(Reader reader) throws IOException {
super(new StringReader(yamlang2Jsonlang(CharStreams.toString(reader))));
}
}
}
10 changes: 10 additions & 0 deletions src/main/java/me/fallenbreath/yamlang/YamlangExtension.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,14 @@ public interface YamlangExtension
* Default value: "UTF-8"
*/
Property<String> getCharset();

/**
* Enables the rich translation support in yaml files
* <p>
* This option preserves lists added to the language file
* <p>
* Default value: false
* @see <a href="https://docs.wispforest.io/owo/rich-translations/">OWO-LIB Rich Translations</a>
*/
Property<Boolean> getRichTranslations();
}