kopia lustrzana https://github.com/TeamNewPipe/NewPipeExtractor
commit
67f3301d9f
|
@ -15,7 +15,6 @@ If you're using Gradle, you could add NewPipe Extractor as a dependency with the
|
|||
3. If you are using tools to minimize your project, make sure to keep the files below, by e.g. adding the following lines to your proguard file:
|
||||
```
|
||||
## Rules for NewPipeExtractor
|
||||
-keep class org.schabi.newpipe.extractor.timeago.patterns.** { *; }
|
||||
-keep class org.mozilla.javascript.** { *; }
|
||||
-keep class org.mozilla.classfile.ClassFileWriter
|
||||
-dontwarn org.mozilla.javascript.tools.**
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
include 'extractor', 'timeago-parser'
|
||||
include 'extractor', 'timeago-parser', 'timeago-generator'
|
||||
rootProject.name = 'NewPipeExtractor'
|
|
@ -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 org.schabi.newpipe.timeago_generator;
|
||||
|
||||
import com.grack.nanojson.JsonObject;
|
||||
import com.grack.nanojson.JsonParser;
|
||||
|
|
@ -1,3 +1,5 @@
|
|||
package org.schabi.newpipe.timeago_generator;
|
||||
|
||||
import com.grack.nanojson.JsonAppendableWriter;
|
||||
import com.grack.nanojson.JsonObject;
|
||||
import com.grack.nanojson.JsonParser;
|
|
@ -1,12 +1,20 @@
|
|||
package org.schabi.newpipe.timeago_generator;
|
||||
|
||||
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.JsonObject;
|
||||
import com.grack.nanojson.JsonParser;
|
||||
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 static void main(String[] args) throws FileNotFoundException, JsonParserException {
|
||||
|
@ -16,6 +24,8 @@ public class GeneratePatternClasses {
|
|||
final JsonObject from = JsonParser.object().from(resourceAsStream);
|
||||
final TreeMap<String, Object> map = new TreeMap<>(from);
|
||||
|
||||
final StringBuilder patternMapEntries = new StringBuilder();
|
||||
|
||||
for (Map.Entry<String, Object> entry : map.entrySet()) {
|
||||
final String languageCode = entry.getKey().replace('-', '_');
|
||||
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 StringBuilder specialCasesString = new StringBuilder();
|
||||
specialCasesConstruct(TimeAgoUnit.SECONDS, seconds, specialCasesString);
|
||||
specialCasesConstruct(TimeAgoUnit.MINUTES, minutes, specialCasesString);
|
||||
specialCasesConstruct(TimeAgoUnit.HOURS, hours, specialCasesString);
|
||||
specialCasesConstruct(TimeAgoUnit.DAYS, days, specialCasesString);
|
||||
specialCasesConstruct(TimeAgoUnit.WEEKS, weeks, specialCasesString);
|
||||
specialCasesConstruct(TimeAgoUnit.MONTHS, months, specialCasesString);
|
||||
specialCasesConstruct(TimeAgoUnit.YEARS, years, specialCasesString);
|
||||
specialCasesConstruct(ChronoUnit.SECONDS, seconds, specialCasesString);
|
||||
specialCasesConstruct(ChronoUnit.MINUTES, minutes, specialCasesString);
|
||||
specialCasesConstruct(ChronoUnit.HOURS, hours, specialCasesString);
|
||||
specialCasesConstruct(ChronoUnit.DAYS, days, specialCasesString);
|
||||
specialCasesConstruct(ChronoUnit.WEEKS, weeks, specialCasesString);
|
||||
specialCasesConstruct(ChronoUnit.MONTHS, months, specialCasesString);
|
||||
specialCasesConstruct(ChronoUnit.YEARS, years, specialCasesString);
|
||||
|
||||
System.out.println("Generating \"" + languageCode + "\" pattern class...");
|
||||
|
||||
|
||||
try (final FileWriter fileOut = new FileWriter(
|
||||
"timeago-parser/src/main/java/org/schabi/newpipe/extractor/timeago/patterns/" +
|
||||
languageCode + ".java")) {
|
||||
|
@ -48,7 +59,7 @@ public class GeneratePatternClasses {
|
|||
"\n" +
|
||||
"package org.schabi.newpipe.extractor.timeago.patterns;\n\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" +
|
||||
"public class " + languageCode + " extends PatternsHolder {\n" +
|
||||
" private static final String WORD_SEPARATOR = \"" + wordSeparator + "\";\n" +
|
||||
|
@ -76,10 +87,38 @@ public class GeneratePatternClasses {
|
|||
} catch (IOException e) {
|
||||
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(final 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();
|
||||
while (iterator.hasNext()) {
|
||||
final Object o = iterator.next();
|
||||
|
@ -91,7 +130,7 @@ public class GeneratePatternClasses {
|
|||
iterator.remove();
|
||||
|
||||
stringBuilder.append(" ")
|
||||
.append("putSpecialCase(TimeAgoUnit.").append(unit.name())
|
||||
.append("putSpecialCase(ChronoUnit.").append(unit.name())
|
||||
.append(", \"").append(caseText).append("\"")
|
||||
.append(", ").append(caseAmount).append(");").append("\n");
|
||||
}
|
||||
|
@ -113,4 +152,4 @@ public class GeneratePatternClasses {
|
|||
|
||||
return toReturn.toString();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,3 +1,5 @@
|
|||
package org.schabi.newpipe.timeago_generator;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class Utils {
|
|
@ -1,4 +1,3 @@
|
|||
dependencies {
|
||||
implementation "com.github.TeamNewPipe:nanojson:$nanojsonVersion"
|
||||
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(final String languageCode) {
|
||||
return patternMap.get(languageCode);
|
||||
}
|
||||
}
|
|
@ -2,7 +2,6 @@ package org.schabi.newpipe.extractor.timeago;
|
|||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
public class PatternsManager {
|
||||
/**
|
||||
|
@ -14,18 +13,6 @@ public class PatternsManager {
|
|||
public static PatternsHolder getPatterns(@Nonnull String languageCode, @Nullable String countryCode) {
|
||||
final String targetLocalizationClassName = languageCode +
|
||||
(countryCode == null || countryCode.isEmpty() ? "" : "_" + countryCode);
|
||||
|
||||
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;
|
||||
return PatternMap.getPattern(targetLocalizationClassName);
|
||||
}
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue