mirror of
https://github.com/revanced/Apktool.git
synced 2025-01-07 10:35:52 +01:00
ResXmlEncoders: added findNonPositionalSubstitutions(), use it in hasMultipleNonPositionalSubstitutions(), enumerateNonPositionalSubstitutions().
This commit is contained in:
parent
316353f83f
commit
1042a72958
@ -17,6 +17,8 @@
|
|||||||
package brut.androlib.res.xml;
|
package brut.androlib.res.xml;
|
||||||
|
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Ryszard Wiśniewski <brut.alll@gmail.com>
|
* @author Ryszard Wiśniewski <brut.alll@gmail.com>
|
||||||
@ -134,35 +136,43 @@ public final class ResXmlEncoders {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasMultipleNonPositionalSubstitutions(String str) {
|
public static boolean hasMultipleNonPositionalSubstitutions(String str) {
|
||||||
|
return findNonPositionalSubstitutions(str, 2).size() > 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String enumerateNonPositionalSubstitutions(String str) {
|
||||||
|
List<Integer> subs = findNonPositionalSubstitutions(str, -1);
|
||||||
|
if (subs.size() < 2) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder out = new StringBuilder();
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
for (Integer sub : subs) {
|
||||||
|
out.append(str.substring(pos, ++sub)).append(++count).append('$');
|
||||||
|
pos = sub;
|
||||||
|
}
|
||||||
|
out.append(str.substring(pos));
|
||||||
|
|
||||||
|
return out.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<Integer> findNonPositionalSubstitutions(String str,
|
||||||
|
int max) {
|
||||||
|
int pos = 0;
|
||||||
|
int count = 0;
|
||||||
|
List<Integer> ret = new ArrayList<Integer>();
|
||||||
while((pos = str.indexOf('%', pos)) != -1) {
|
while((pos = str.indexOf('%', pos)) != -1) {
|
||||||
if (str.charAt(pos + 1) != '%') {
|
if (str.charAt(pos + 1) != '%') {
|
||||||
if (++count >= 2) {
|
ret.add(pos);
|
||||||
return true;
|
if (max != -1 && ++count >= max) {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pos += 2;
|
pos += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return ret;
|
||||||
}
|
|
||||||
|
|
||||||
public static String enumerateNonPositionalSubstitutions(String str) {
|
|
||||||
StringBuilder out = new StringBuilder(str);
|
|
||||||
int pos = 0;
|
|
||||||
int count = 0;
|
|
||||||
int offset = 0;
|
|
||||||
while((pos = str.indexOf('%', pos)) != -1) {
|
|
||||||
if (str.charAt(pos + 1) != '%') {
|
|
||||||
count++;
|
|
||||||
out.insert(pos + offset + 1, String.valueOf(count) + "$");
|
|
||||||
offset += 2;
|
|
||||||
}
|
|
||||||
pos += 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
return out.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isPrintableChar(char c) {
|
private static boolean isPrintableChar(char c) {
|
||||||
|
Loading…
Reference in New Issue
Block a user