diff --git a/src/main/java/de/marhali/easyi18n/io/implementation/YamlTranslatorIO.java b/src/main/java/de/marhali/easyi18n/io/implementation/YamlTranslatorIO.java index a6e61dc..4ed8e97 100644 --- a/src/main/java/de/marhali/easyi18n/io/implementation/YamlTranslatorIO.java +++ b/src/main/java/de/marhali/easyi18n/io/implementation/YamlTranslatorIO.java @@ -1,13 +1,16 @@ package de.marhali.easyi18n.io.implementation; -import com.google.gson.*; import com.intellij.openapi.application.*; import com.intellij.openapi.project.*; import com.intellij.openapi.vfs.*; + import de.marhali.easyi18n.io.*; import de.marhali.easyi18n.model.*; import de.marhali.easyi18n.util.*; +import de.marhali.easyi18n.util.array.YamlArrayUtil; + import org.jetbrains.annotations.*; + import thito.nodeflow.config.*; import java.io.*; @@ -68,9 +71,14 @@ public class YamlTranslatorIO implements TranslatorIO { if (map != null) { load(locale, finalChild, map); } else { - String value = section.getString(key).orElse(null); - if (value != null) { - child.getValue().put(locale, value); + + if(section.isList(key) && section.getList(key).isPresent()) { + child.getValue().put(locale, YamlArrayUtil.read(section.getList(key).get())); + } else { + String value = section.getString(key).orElse(null); + if (value != null) { + child.getValue().put(locale, value); + } } } } @@ -81,7 +89,7 @@ public class YamlTranslatorIO implements TranslatorIO { if (node.isLeaf() && !node.getKey().equals(LocalizedNode.ROOT_KEY)) { String value = node.getValue().get(locale); if (value != null) { - section.set(path, value); + section.set(path, YamlArrayUtil.isArray(value) ? YamlArrayUtil.write(value) : value); } } else { for (LocalizedNode child : node.getChildren()) { diff --git a/src/main/java/de/marhali/easyi18n/util/JsonArrayUtil.java b/src/main/java/de/marhali/easyi18n/util/JsonArrayUtil.java deleted file mode 100644 index c1a73e0..0000000 --- a/src/main/java/de/marhali/easyi18n/util/JsonArrayUtil.java +++ /dev/null @@ -1,51 +0,0 @@ -package de.marhali.easyi18n.util; - -import com.google.gson.JsonArray; -import org.apache.commons.lang.StringEscapeUtils; - -import java.util.regex.Pattern; - -/** - * Utility methods to read and write json arrays. - * @author marhali - */ -public class JsonArrayUtil { - - public static String ARRAY_PREFIX = "!arr["; - public static String ARRAY_SUFFIX = "]"; - public static char ARRAY_DELIMITER = ';'; - - public static String read(JsonArray array) { - StringBuilder builder = new StringBuilder(ARRAY_PREFIX); - - for(int i = 0; i < array.size(); i++) { - if(i > 0) { - builder.append(ARRAY_DELIMITER); - } - - String value = array.get(i).getAsString().replace(";", "\\;"); - builder.append(StringUtil.escapeControls(value, true)); - } - - builder.append(ARRAY_SUFFIX); - return builder.toString(); - } - - public static JsonArray write(String concat) { - concat = concat.substring(ARRAY_PREFIX.length(), concat.length() - ARRAY_SUFFIX.length()); - String regex = "(? String read(Iterator elements, Function stringFactory) { + StringBuilder builder = new StringBuilder(PREFIX); + + int i = 0; + while(elements.hasNext()) { + if(i > 0) { + builder.append(DELIMITER); + } + + String value = stringFactory.apply(elements.next()); + + builder.append(StringUtil.escapeControls( + value.replace(String.valueOf(DELIMITER), "\\" + DELIMITER), true)); + + i++; + } + + builder.append(SUFFIX); + return builder.toString(); + } + + static void write(String concat, Consumer writeElement) { + concat = concat.substring(PREFIX.length(), concat.length() - SUFFIX.length()); + + for(String element : concat.split(SPLITERATOR_REGEX)) { + element = element.replace("\\" + DELIMITER, String.valueOf(DELIMITER)); + writeElement.accept(StringEscapeUtils.unescapeJava(element)); + } + } + + public static boolean isArray(String concat) { + return concat != null && concat.startsWith(PREFIX) && concat.endsWith(SUFFIX); + } +} diff --git a/src/main/java/de/marhali/easyi18n/util/array/JsonArrayUtil.java b/src/main/java/de/marhali/easyi18n/util/array/JsonArrayUtil.java new file mode 100644 index 0000000..d61969c --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/util/array/JsonArrayUtil.java @@ -0,0 +1,20 @@ +package de.marhali.easyi18n.util.array; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; + +/** + * Utility methods to read and write json arrays. + * @author marhali + */ +public class JsonArrayUtil extends ArrayUtil { + public static String read(JsonArray array) { + return read(array.iterator(), JsonElement::getAsString); + } + + public static JsonArray write(String concat) { + JsonArray array = new JsonArray(); + write(concat, array::add); + return array; + } +} diff --git a/src/main/java/de/marhali/easyi18n/util/array/YamlArrayUtil.java b/src/main/java/de/marhali/easyi18n/util/array/YamlArrayUtil.java new file mode 100644 index 0000000..86f4db6 --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/util/array/YamlArrayUtil.java @@ -0,0 +1,20 @@ +package de.marhali.easyi18n.util.array; + +import thito.nodeflow.config.ListSection; + +/** + * Utility methods to read and write yaml lists. + * @author marhali + */ +public class YamlArrayUtil extends ArrayUtil { + + public static String read(ListSection list) { + return read(list.iterator(), Object::toString); + } + + public static ListSection write(String concat) { + ListSection list = new ListSection(); + write(concat, list::add); + return list; + } +} \ No newline at end of file diff --git a/src/main/java/thito/nodeflow/config/Section.java b/src/main/java/thito/nodeflow/config/Section.java index 1a9a90f..2d9283e 100644 --- a/src/main/java/thito/nodeflow/config/Section.java +++ b/src/main/java/thito/nodeflow/config/Section.java @@ -197,6 +197,12 @@ public interface Section { return null; }); } + + default boolean isList(String path) { + Optional o = getObject(path); + return o.isPresent() && o.get() instanceof List; + } + default Optional getList(String path) { return getObject(path).map(o -> { if (o instanceof List) {