mirror of
https://github.com/revanced/Apktool.git
synced 2024-12-13 06:17:46 +01:00
Fixed some "Multiple substitutions" errors.
ResXmlEncoders::findNonPositionalSubstitutions() method now prefers to define '%' as non-positional arg if it isn't sure. It's much more reliable.
This commit is contained in:
parent
c3db7dcbab
commit
4bd24701bc
@ -156,24 +156,37 @@ public final class ResXmlEncoders {
|
|||||||
return out.toString();
|
return out.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It searches for "%", but not "%%" nor "%(\d)+\$"
|
||||||
|
*/
|
||||||
private static List<Integer> findNonPositionalSubstitutions(String str,
|
private static List<Integer> findNonPositionalSubstitutions(String str,
|
||||||
int max) {
|
int max) {
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
|
int pos2 = 0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
int length = str.length();
|
int length = str.length();
|
||||||
List<Integer> ret = new ArrayList<Integer>();
|
List<Integer> ret = new ArrayList<Integer>();
|
||||||
while((pos = str.indexOf('%', pos)) != -1) {
|
while((pos2 = (pos = str.indexOf('%', pos2)) + 1) != 0) {
|
||||||
if (pos + 1 == length) {
|
if (pos2 == length) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
char c = str.charAt(pos + 1);
|
char c = str.charAt(pos2++);
|
||||||
if (c >= 'a' && c <= 'z') {
|
if (c == '%') {
|
||||||
ret.add(pos);
|
continue;
|
||||||
if (max != -1 && ++count >= max) {
|
}
|
||||||
break;
|
if (c >= '0' && c <= '9' && pos2 < length) {
|
||||||
|
do {
|
||||||
|
c = str.charAt(pos2++);
|
||||||
|
} while (c >= '0' && c <= '9' && pos2 < length);
|
||||||
|
if (c == '$') {
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pos += 2;
|
|
||||||
|
ret.add(pos);
|
||||||
|
if (max != -1 && ++count >= max) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
Reference in New Issue
Block a user