From 06d75f369a7631b6ac725d90bcf3797dad5dafb0 Mon Sep 17 00:00:00 2001 From: Karenkov Igor Date: Mon, 1 Apr 2019 09:46:28 +0300 Subject: [PATCH] Experiments --- gradle/stringGenerator.gradle | 94 ------------------------------ gradle/stringGenerator.gradle.kts | 97 +++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 94 deletions(-) delete mode 100644 gradle/stringGenerator.gradle create mode 100644 gradle/stringGenerator.gradle.kts diff --git a/gradle/stringGenerator.gradle b/gradle/stringGenerator.gradle deleted file mode 100644 index 4dbdb18..0000000 --- a/gradle/stringGenerator.gradle +++ /dev/null @@ -1,94 +0,0 @@ -import groovy.json.JsonSlurper -import groovy.xml.MarkupBuilder - -task stringGenerator { - final Map languageMap = android.extensions.findByName("languageMap") - - generate(languageMap) - println("Strings generated!") -} - -private def generate(Map sources) { - if (sources == null || sources.isEmpty()) { - throw new IOException("languageMap can't be null or empty") - } - Map jsonMap = getJsonsMap(sources) - def diffs = calcDiffs(jsonMap) - if (!diffs.isEmpty()) { - printDiffs(diffs) - throw new IllegalStateException("Strings source can't be different") - } - def defaultLang = getDefaultLangKey(sources) - jsonMap.forEach { key, json -> - - def sw = new StringWriter() - def xml = new MarkupBuilder(sw) - - xml.setDoubleQuotes(true) - xml.mkp.xmlDeclaration(version: "1.0", encoding: "utf-8") - xml.resources() { - json.each { - k, v -> - string(name: "${k}", formatted: "false", "${v}".replace('\n', '\\n')) - } - } - - def stringsFile = getFile(key, key == defaultLang) - stringsFile.write(sw.toString(), "UTF-8") - } -} - -private printDiffs(Map diffs) { - def diffLog = new StringBuilder() - diffs.forEach { k, v -> - if (v.size() > 0) { - diffLog.append("For $k was missed string keys: ${v.size()}\n") - v.forEach { - diffLog.append("\tString key: $it\n") - } - } - } - println(diffLog.toString()) -} - -private static def calcDiffs(Map jsonsMap) { - if (jsonsMap.size() == 1) { - return [:] - } - def keys = jsonsMap.collectEntries { - [(it.key): (it.value).keySet() as List] - } - def inclusive = keys.get(keys.keySet().first()) - def diffs = keys.collectEntries { - [(it.key): inclusive - it.value.intersect(inclusive)] - }.findAll { it.value.size() > 0 } - return diffs -} - -private static Map getJsonsMap(Map sources) { - return sources.collectEntries { - [(it.key): new JsonSlurper().parseText(new File(it.value).text)] - } -} - -private static File getFile(String key, boolean defaultLang) { - if (defaultLang) { - return new File("app/src/main/res/values/strings.xml") - } else { - def directory = new File("app/src/main/res/values-$key") - if (!directory.exists()) { - directory.mkdir() - } - return new File("app/src/main/res/values-$key/strings.xml") - } -} - -private static String getDefaultLangKey(Map sources) { - def defaultLanguage = sources.find { it.value.contains("default") } - if (defaultLanguage != null) { - return defaultLanguage.key - } else { - throw new IOException("Can't find default language") - } - -} \ No newline at end of file diff --git a/gradle/stringGenerator.gradle.kts b/gradle/stringGenerator.gradle.kts new file mode 100644 index 0000000..4b8fa23 --- /dev/null +++ b/gradle/stringGenerator.gradle.kts @@ -0,0 +1,97 @@ +import groovy.json.JsonSlurper +import groovy.xml.MarkupBuilder +import org.gradle.api.internal.plugins.DefaultExtraPropertiesExtension + +task("stringGenerator") { +// val languageMap: Map? = android.extensions.findByName("languageMap") + + println(extra.properties) +// println(android.ext) +// generate(languageMap) + println("Strings generated!") +} + +//private def generate(Map sources) { +// if (sources == null || sources.isEmpty()) { +// throw new IOException("languageMap can't be null or empty") +// } +// Map jsonMap = getJsonsMap(sources) +// def diffs = calcDiffs(jsonMap) +// if (!diffs.isEmpty()) { +// printDiffs(diffs) +// throw new IllegalStateException("Strings source can't be different") +// } +// def defaultLang = getDefaultLangKey(sources) +// jsonMap.forEach { key, json -> +// +// def sw = new StringWriter() +// def xml = new MarkupBuilder(sw) +// +// xml.setDoubleQuotes(true) +// xml.mkp.xmlDeclaration(version: "1.0", encoding: "utf-8") +// xml.resources() { +// json.each { +// k, v -> +// string(name: "${k}", formatted: "false", "${v}".replace('\n', '\\n')) +// } +// } +// +// def stringsFile = getFile(key, key == defaultLang) +// stringsFile.write(sw.toString(), "UTF-8") +// } +//} +// +//private printDiffs(Map diffs) { +// def diffLog = new StringBuilder() +// diffs.forEach { k, v -> +// if (v.size() > 0) { +// diffLog.append("For $k was missed string keys: ${v.size()}\n") +// v.forEach { +// diffLog.append("\tString key: $it\n") +// } +// } +// } +// println(diffLog.toString()) +//} +// +//private static def calcDiffs(Map jsonsMap) { +// if (jsonsMap.size() == 1) { +// return [:] +// } +// def keys = jsonsMap.collectEntries { +// [(it.key): (it.value).keySet() as List] +// } +// def inclusive = keys.get(keys.keySet().first()) +// def diffs = keys.collectEntries { +// [(it.key): inclusive - it.value.intersect(inclusive)] +// }.findAll { it.value.size() > 0 } +// return diffs +//} +// +//private static Map getJsonsMap(Map sources) { +// return sources.collectEntries { +// [(it.key): new JsonSlurper().parseText(new File(it.value).text)] +// } +//} +// +//private static File getFile(String key, boolean defaultLang) { +// if (defaultLang) { +// return new File("app/src/main/res/values/strings.xml") +// } else { +// def directory = new File("app/src/main/res/values-$key") +// if (!directory.exists()) { +// directory.mkdir() +// } +// return new File("app/src/main/res/values-$key/strings.xml") +// } +//} +// +//private static String getDefaultLangKey(Map sources) { +// def defaultLanguage = sources.find { it.value.contains("default") } +// if (defaultLanguage != null) { +// return defaultLanguage.key +// } else { +// throw new IOException("Can't find default language") +// } +// +//}