mirror of
https://github.com/TeamNewPipe/NewPipeExtractor.git
synced 2025-04-27 15:30:34 +05:30
removed use of reflection in PatternsManager.java. For this the Code to generate the Localization files was extracted into its own submodule.
The generator now also creates a class that Holds a Map of all Localizations for the timeago-parser.
This commit is contained in:
parent
0b99100dbd
commit
18572da79d
@ -1,2 +1,2 @@
|
|||||||
include 'extractor', 'timeago-parser'
|
include 'extractor', 'timeago-parser', 'timeago-generator'
|
||||||
rootProject.name = 'NewPipeExtractor'
|
rootProject.name = 'NewPipeExtractor'
|
5
timeago-generator/build.gradle
Normal file
5
timeago-generator/build.gradle
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
dependencies {
|
||||||
|
implementation "com.github.TeamNewPipe:nanojson:$nanojsonVersion"
|
||||||
|
implementation "com.google.code.findbugs:jsr305:$jsr305Version"
|
||||||
|
implementation project(":timeago-parser")
|
||||||
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
package com.github.TeamNewPipe;
|
||||||
|
|
||||||
import com.grack.nanojson.JsonObject;
|
import com.grack.nanojson.JsonObject;
|
||||||
import com.grack.nanojson.JsonParser;
|
import com.grack.nanojson.JsonParser;
|
||||||
|
|
@ -1,3 +1,5 @@
|
|||||||
|
package com.github.TeamNewPipe;
|
||||||
|
|
||||||
import com.grack.nanojson.JsonAppendableWriter;
|
import com.grack.nanojson.JsonAppendableWriter;
|
||||||
import com.grack.nanojson.JsonObject;
|
import com.grack.nanojson.JsonObject;
|
||||||
import com.grack.nanojson.JsonParser;
|
import com.grack.nanojson.JsonParser;
|
@ -1,12 +1,20 @@
|
|||||||
|
package com.github.TeamNewPipe;
|
||||||
|
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
import com.grack.nanojson.JsonArray;
|
import com.grack.nanojson.JsonArray;
|
||||||
import com.grack.nanojson.JsonObject;
|
import com.grack.nanojson.JsonObject;
|
||||||
import com.grack.nanojson.JsonParser;
|
import com.grack.nanojson.JsonParser;
|
||||||
import com.grack.nanojson.JsonParserException;
|
import com.grack.nanojson.JsonParserException;
|
||||||
import org.schabi.newpipe.extractor.timeago.PatternsHolder;
|
|
||||||
import org.schabi.newpipe.extractor.timeago.TimeAgoUnit;
|
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
public class GeneratePatternClasses {
|
public class GeneratePatternClasses {
|
||||||
public static void main(String[] args) throws FileNotFoundException, JsonParserException {
|
public static void main(String[] args) throws FileNotFoundException, JsonParserException {
|
||||||
@ -16,6 +24,8 @@ public class GeneratePatternClasses {
|
|||||||
final JsonObject from = JsonParser.object().from(resourceAsStream);
|
final JsonObject from = JsonParser.object().from(resourceAsStream);
|
||||||
final TreeMap<String, Object> map = new TreeMap<>(from);
|
final TreeMap<String, Object> map = new TreeMap<>(from);
|
||||||
|
|
||||||
|
final StringBuilder patternMapEntries = new StringBuilder();
|
||||||
|
|
||||||
for (Map.Entry<String, Object> entry : map.entrySet()) {
|
for (Map.Entry<String, Object> entry : map.entrySet()) {
|
||||||
final String languageCode = entry.getKey().replace('-', '_');
|
final String languageCode = entry.getKey().replace('-', '_');
|
||||||
final Map<String, Object> unitsList = (Map<String, Object>) entry.getValue();
|
final Map<String, Object> unitsList = (Map<String, Object>) entry.getValue();
|
||||||
@ -31,16 +41,17 @@ public class GeneratePatternClasses {
|
|||||||
final JsonArray years = (JsonArray) unitsList.get("years");
|
final JsonArray years = (JsonArray) unitsList.get("years");
|
||||||
|
|
||||||
final StringBuilder specialCasesString = new StringBuilder();
|
final StringBuilder specialCasesString = new StringBuilder();
|
||||||
specialCasesConstruct(TimeAgoUnit.SECONDS, seconds, specialCasesString);
|
specialCasesConstruct(ChronoUnit.SECONDS, seconds, specialCasesString);
|
||||||
specialCasesConstruct(TimeAgoUnit.MINUTES, minutes, specialCasesString);
|
specialCasesConstruct(ChronoUnit.MINUTES, minutes, specialCasesString);
|
||||||
specialCasesConstruct(TimeAgoUnit.HOURS, hours, specialCasesString);
|
specialCasesConstruct(ChronoUnit.HOURS, hours, specialCasesString);
|
||||||
specialCasesConstruct(TimeAgoUnit.DAYS, days, specialCasesString);
|
specialCasesConstruct(ChronoUnit.DAYS, days, specialCasesString);
|
||||||
specialCasesConstruct(TimeAgoUnit.WEEKS, weeks, specialCasesString);
|
specialCasesConstruct(ChronoUnit.WEEKS, weeks, specialCasesString);
|
||||||
specialCasesConstruct(TimeAgoUnit.MONTHS, months, specialCasesString);
|
specialCasesConstruct(ChronoUnit.MONTHS, months, specialCasesString);
|
||||||
specialCasesConstruct(TimeAgoUnit.YEARS, years, specialCasesString);
|
specialCasesConstruct(ChronoUnit.YEARS, years, specialCasesString);
|
||||||
|
|
||||||
System.out.println("Generating \"" + languageCode + "\" pattern class...");
|
System.out.println("Generating \"" + languageCode + "\" pattern class...");
|
||||||
|
|
||||||
|
|
||||||
try (final FileWriter fileOut = new FileWriter(
|
try (final FileWriter fileOut = new FileWriter(
|
||||||
"timeago-parser/src/main/java/org/schabi/newpipe/extractor/timeago/patterns/" +
|
"timeago-parser/src/main/java/org/schabi/newpipe/extractor/timeago/patterns/" +
|
||||||
languageCode + ".java")) {
|
languageCode + ".java")) {
|
||||||
@ -48,7 +59,7 @@ public class GeneratePatternClasses {
|
|||||||
"\n" +
|
"\n" +
|
||||||
"package org.schabi.newpipe.extractor.timeago.patterns;\n\n" +
|
"package org.schabi.newpipe.extractor.timeago.patterns;\n\n" +
|
||||||
"import org.schabi.newpipe.extractor.timeago.PatternsHolder;\n" +
|
"import org.schabi.newpipe.extractor.timeago.PatternsHolder;\n" +
|
||||||
(specialCasesString.length() > 0 ? "import org.schabi.newpipe.extractor.timeago.TimeAgoUnit;\n" : "") +
|
(specialCasesString.length() > 0 ? "\nimport java.time.temporal.ChronoUnit;\n" : "") +
|
||||||
"\n" +
|
"\n" +
|
||||||
"public class " + languageCode + " extends PatternsHolder {\n" +
|
"public class " + languageCode + " extends PatternsHolder {\n" +
|
||||||
" private static final String WORD_SEPARATOR = \"" + wordSeparator + "\";\n" +
|
" private static final String WORD_SEPARATOR = \"" + wordSeparator + "\";\n" +
|
||||||
@ -76,10 +87,38 @@ public class GeneratePatternClasses {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
patternMapEntries.append(" patternMap.put(\"")
|
||||||
|
.append(languageCode).append("\", ")
|
||||||
|
.append(languageCode).append(".getInstance());\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
try (final FileWriter fileOut = new FileWriter(
|
||||||
|
"timeago-parser/src/main/java/org/schabi/newpipe/extractor/timeago/PatternMap.java")) {
|
||||||
|
final String patternMapClass = INFO_CLASS_GENERATED + "\n" +
|
||||||
|
"\n" +
|
||||||
|
"package org.schabi.newpipe.extractor.timeago;\n\n" +
|
||||||
|
"import org.schabi.newpipe.extractor.timeago.patterns.*;\n" +
|
||||||
|
"import java.util.HashMap;\n" +
|
||||||
|
"import java.util.Map;\n\n" +
|
||||||
|
"public class PatternMap {\n" +
|
||||||
|
" private static final Map<String, PatternsHolder> patternMap = new HashMap<>();\n" +
|
||||||
|
"\n" +
|
||||||
|
" static {\n" +
|
||||||
|
patternMapEntries +
|
||||||
|
" }\n" +
|
||||||
|
"\n" +
|
||||||
|
" public static PatternsHolder getPattern(String languageCode) {\n" +
|
||||||
|
" return patternMap.get(languageCode);\n" +
|
||||||
|
" }\n" +
|
||||||
|
"}";
|
||||||
|
fileOut.write(patternMapClass);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void specialCasesConstruct(TimeAgoUnit unit, JsonArray array, StringBuilder stringBuilder) {
|
private static void specialCasesConstruct(ChronoUnit unit, JsonArray array, StringBuilder stringBuilder) {
|
||||||
final Iterator<Object> iterator = array.iterator();
|
final Iterator<Object> iterator = array.iterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
final Object o = iterator.next();
|
final Object o = iterator.next();
|
||||||
@ -91,7 +130,7 @@ public class GeneratePatternClasses {
|
|||||||
iterator.remove();
|
iterator.remove();
|
||||||
|
|
||||||
stringBuilder.append(" ")
|
stringBuilder.append(" ")
|
||||||
.append("putSpecialCase(TimeAgoUnit.").append(unit.name())
|
.append("putSpecialCase(ChronoUnit.").append(unit.name())
|
||||||
.append(", \"").append(caseText).append("\"")
|
.append(", \"").append(caseText).append("\"")
|
||||||
.append(", ").append(caseAmount).append(");").append("\n");
|
.append(", ").append(caseAmount).append(");").append("\n");
|
||||||
}
|
}
|
||||||
@ -113,4 +152,4 @@ public class GeneratePatternClasses {
|
|||||||
|
|
||||||
return toReturn.toString();
|
return toReturn.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
package com.github.TeamNewPipe;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class Utils {
|
public class Utils {
|
@ -1,4 +1,3 @@
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation "com.github.TeamNewPipe:nanojson:$nanojsonVersion"
|
|
||||||
implementation "com.google.code.findbugs:jsr305:$jsr305Version"
|
implementation "com.google.code.findbugs:jsr305:$jsr305Version"
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,100 @@
|
|||||||
|
/**/// DO NOT MODIFY THIS FILE MANUALLY
|
||||||
|
/**/// This class was automatically generated by "GeneratePatternClasses.java",
|
||||||
|
/**/// modify the "unique_patterns.json" and re-generate instead.
|
||||||
|
|
||||||
|
package org.schabi.newpipe.extractor.timeago;
|
||||||
|
|
||||||
|
import org.schabi.newpipe.extractor.timeago.patterns.*;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class PatternMap {
|
||||||
|
private static final Map<String, PatternsHolder> patternMap = new HashMap<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
patternMap.put("af", af.getInstance());
|
||||||
|
patternMap.put("am", am.getInstance());
|
||||||
|
patternMap.put("ar", ar.getInstance());
|
||||||
|
patternMap.put("az", az.getInstance());
|
||||||
|
patternMap.put("be", be.getInstance());
|
||||||
|
patternMap.put("bg", bg.getInstance());
|
||||||
|
patternMap.put("bn", bn.getInstance());
|
||||||
|
patternMap.put("bs", bs.getInstance());
|
||||||
|
patternMap.put("ca", ca.getInstance());
|
||||||
|
patternMap.put("cs", cs.getInstance());
|
||||||
|
patternMap.put("da", da.getInstance());
|
||||||
|
patternMap.put("de", de.getInstance());
|
||||||
|
patternMap.put("el", el.getInstance());
|
||||||
|
patternMap.put("en", en.getInstance());
|
||||||
|
patternMap.put("en_GB", en_GB.getInstance());
|
||||||
|
patternMap.put("es", es.getInstance());
|
||||||
|
patternMap.put("es_419", es_419.getInstance());
|
||||||
|
patternMap.put("es_US", es_US.getInstance());
|
||||||
|
patternMap.put("et", et.getInstance());
|
||||||
|
patternMap.put("eu", eu.getInstance());
|
||||||
|
patternMap.put("fa", fa.getInstance());
|
||||||
|
patternMap.put("fi", fi.getInstance());
|
||||||
|
patternMap.put("fil", fil.getInstance());
|
||||||
|
patternMap.put("fr", fr.getInstance());
|
||||||
|
patternMap.put("fr_CA", fr_CA.getInstance());
|
||||||
|
patternMap.put("gl", gl.getInstance());
|
||||||
|
patternMap.put("gu", gu.getInstance());
|
||||||
|
patternMap.put("hi", hi.getInstance());
|
||||||
|
patternMap.put("hr", hr.getInstance());
|
||||||
|
patternMap.put("hu", hu.getInstance());
|
||||||
|
patternMap.put("hy", hy.getInstance());
|
||||||
|
patternMap.put("id", id.getInstance());
|
||||||
|
patternMap.put("is", is.getInstance());
|
||||||
|
patternMap.put("it", it.getInstance());
|
||||||
|
patternMap.put("iw", iw.getInstance());
|
||||||
|
patternMap.put("ja", ja.getInstance());
|
||||||
|
patternMap.put("ka", ka.getInstance());
|
||||||
|
patternMap.put("kk", kk.getInstance());
|
||||||
|
patternMap.put("km", km.getInstance());
|
||||||
|
patternMap.put("kn", kn.getInstance());
|
||||||
|
patternMap.put("ko", ko.getInstance());
|
||||||
|
patternMap.put("ky", ky.getInstance());
|
||||||
|
patternMap.put("lo", lo.getInstance());
|
||||||
|
patternMap.put("lt", lt.getInstance());
|
||||||
|
patternMap.put("lv", lv.getInstance());
|
||||||
|
patternMap.put("mk", mk.getInstance());
|
||||||
|
patternMap.put("ml", ml.getInstance());
|
||||||
|
patternMap.put("mn", mn.getInstance());
|
||||||
|
patternMap.put("mr", mr.getInstance());
|
||||||
|
patternMap.put("ms", ms.getInstance());
|
||||||
|
patternMap.put("my", my.getInstance());
|
||||||
|
patternMap.put("ne", ne.getInstance());
|
||||||
|
patternMap.put("nl", nl.getInstance());
|
||||||
|
patternMap.put("no", no.getInstance());
|
||||||
|
patternMap.put("pa", pa.getInstance());
|
||||||
|
patternMap.put("pl", pl.getInstance());
|
||||||
|
patternMap.put("pt", pt.getInstance());
|
||||||
|
patternMap.put("pt_PT", pt_PT.getInstance());
|
||||||
|
patternMap.put("ro", ro.getInstance());
|
||||||
|
patternMap.put("ru", ru.getInstance());
|
||||||
|
patternMap.put("si", si.getInstance());
|
||||||
|
patternMap.put("sk", sk.getInstance());
|
||||||
|
patternMap.put("sl", sl.getInstance());
|
||||||
|
patternMap.put("sq", sq.getInstance());
|
||||||
|
patternMap.put("sr", sr.getInstance());
|
||||||
|
patternMap.put("sr_Latn", sr_Latn.getInstance());
|
||||||
|
patternMap.put("sv", sv.getInstance());
|
||||||
|
patternMap.put("sw", sw.getInstance());
|
||||||
|
patternMap.put("ta", ta.getInstance());
|
||||||
|
patternMap.put("te", te.getInstance());
|
||||||
|
patternMap.put("th", th.getInstance());
|
||||||
|
patternMap.put("tr", tr.getInstance());
|
||||||
|
patternMap.put("uk", uk.getInstance());
|
||||||
|
patternMap.put("ur", ur.getInstance());
|
||||||
|
patternMap.put("uz", uz.getInstance());
|
||||||
|
patternMap.put("vi", vi.getInstance());
|
||||||
|
patternMap.put("zh_CN", zh_CN.getInstance());
|
||||||
|
patternMap.put("zh_HK", zh_HK.getInstance());
|
||||||
|
patternMap.put("zh_TW", zh_TW.getInstance());
|
||||||
|
patternMap.put("zu", zu.getInstance());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PatternsHolder getPattern(String languageCode) {
|
||||||
|
return patternMap.get(languageCode);
|
||||||
|
}
|
||||||
|
}
|
@ -2,7 +2,6 @@ package org.schabi.newpipe.extractor.timeago;
|
|||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
|
|
||||||
public class PatternsManager {
|
public class PatternsManager {
|
||||||
/**
|
/**
|
||||||
@ -14,18 +13,6 @@ public class PatternsManager {
|
|||||||
public static PatternsHolder getPatterns(@Nonnull String languageCode, @Nullable String countryCode) {
|
public static PatternsHolder getPatterns(@Nonnull String languageCode, @Nullable String countryCode) {
|
||||||
final String targetLocalizationClassName = languageCode +
|
final String targetLocalizationClassName = languageCode +
|
||||||
(countryCode == null || countryCode.isEmpty() ? "" : "_" + countryCode);
|
(countryCode == null || countryCode.isEmpty() ? "" : "_" + countryCode);
|
||||||
|
return PatternMap.getPattern(targetLocalizationClassName);
|
||||||
try {
|
|
||||||
final Class<?> targetClass = Class.forName(
|
|
||||||
"org.schabi.newpipe.extractor.timeago.patterns." + targetLocalizationClassName);
|
|
||||||
|
|
||||||
return (PatternsHolder) targetClass.getDeclaredMethod("getInstance").invoke(null);
|
|
||||||
} catch (ClassNotFoundException ignored) {
|
|
||||||
// Target localization is not supported
|
|
||||||
} catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user