mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-04-30 14:24:25 +02:00
quote attributes for styled string
This commit is contained in:
parent
9f49664f08
commit
4ffd13c793
@ -27,7 +27,7 @@ public class XmlHelper {
|
||||
if(!stringItem.hasStyle()){
|
||||
element.setTextContent(stringItem.get());
|
||||
}else {
|
||||
element.setSpannableText(stringItem.getHtml());
|
||||
element.setSpannableText(stringItem.getXml());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,21 @@ public class StringItem extends BlockItem implements JSONConvert<JSONObject> {
|
||||
if(styleItem==null){
|
||||
return str;
|
||||
}
|
||||
return styleItem.applyHtml(str);
|
||||
return styleItem.applyHtml(str, false);
|
||||
}
|
||||
public String getXml(){
|
||||
String str=get();
|
||||
if(str==null){
|
||||
return null;
|
||||
}
|
||||
if(str.startsWith("*Plus taxes if applicable")){
|
||||
String junk="";
|
||||
}
|
||||
StyleItem styleItem=getStyle();
|
||||
if(styleItem==null){
|
||||
return str;
|
||||
}
|
||||
return styleItem.applyHtml(str, true);
|
||||
}
|
||||
public String get(){
|
||||
return mCache;
|
||||
|
@ -171,10 +171,14 @@ public class StyleItem extends IntegerArray implements JSONConvert<JSONObject> {
|
||||
if(ref<=0){
|
||||
return null;
|
||||
}
|
||||
return new StyleSpanInfo(
|
||||
StyleSpanInfo spanInfo = new StyleSpanInfo(
|
||||
getStringFromPool(ref),
|
||||
getFirstChar(i),
|
||||
getLastChar(i));
|
||||
if(!spanInfo.isValid()){
|
||||
return null;
|
||||
}
|
||||
return spanInfo;
|
||||
}
|
||||
@Override
|
||||
public int size() {
|
||||
@ -205,7 +209,7 @@ public class StyleItem extends IntegerArray implements JSONConvert<JSONObject> {
|
||||
return null;
|
||||
}
|
||||
|
||||
public String applyHtml(String str){
|
||||
public String applyHtml(String str, boolean xml){
|
||||
if(str==null){
|
||||
return null;
|
||||
}
|
||||
@ -232,16 +236,47 @@ public class StyleItem extends IntegerArray implements JSONConvert<JSONObject> {
|
||||
if(isLast){
|
||||
builder.append(info.getEndTag());
|
||||
}else {
|
||||
builder.append(info.getStartTag());
|
||||
builder.append(info.getStartTag(xml));
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!lastAppend){
|
||||
if(xml){
|
||||
if(isWildXml(ch) && !isEntity(allChars, i)){
|
||||
if(ch=='>'){
|
||||
builder.append(">");
|
||||
}else if(ch=='<'){
|
||||
builder.append("<");
|
||||
}else if(ch=='&'){
|
||||
builder.append("&");
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
builder.append(ch);
|
||||
}
|
||||
}
|
||||
return builder.toString();
|
||||
}
|
||||
private boolean isWildXml(char ch){
|
||||
switch (ch){
|
||||
case '&':
|
||||
case '<':
|
||||
case '>':
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
private boolean isEntity(char[] chars, int offset){
|
||||
if((offset+4)>=chars.length){
|
||||
return false;
|
||||
}
|
||||
return chars[offset]=='a'
|
||||
&& chars[offset+1]=='m'
|
||||
&& chars[offset+2]=='p'
|
||||
&& chars[offset+3]==';';
|
||||
}
|
||||
private boolean isEmpty(List<StyleSpanInfo> spanInfoList){
|
||||
if(spanInfoList.size()==0){
|
||||
return true;
|
||||
|
@ -27,6 +27,9 @@ public class StyleSpanInfo implements JSONConvert<JSONObject> {
|
||||
this.mFirst = first;
|
||||
this.mLast = last;
|
||||
}
|
||||
public boolean isValid(){
|
||||
return mFirst < mLast;
|
||||
}
|
||||
public int getFirst() {
|
||||
return mFirst;
|
||||
}
|
||||
@ -46,7 +49,7 @@ public class StyleSpanInfo implements JSONConvert<JSONObject> {
|
||||
this.mTag = tag;
|
||||
}
|
||||
|
||||
public String getStartTag(){
|
||||
public String getStartTag(boolean xml){
|
||||
int i= mTag.indexOf(';');
|
||||
StringBuilder builder=new StringBuilder();
|
||||
builder.append('<');
|
||||
@ -55,11 +58,30 @@ public class StyleSpanInfo implements JSONConvert<JSONObject> {
|
||||
}else {
|
||||
builder.append(mTag, 0, i);
|
||||
builder.append(' ');
|
||||
builder.append(mTag.substring(i+1));
|
||||
String attrs = mTag.substring(i+1);
|
||||
if(xml){
|
||||
appendXmlAttrs(builder, attrs);
|
||||
}else {
|
||||
builder.append(attrs);
|
||||
}
|
||||
}
|
||||
builder.append('>');
|
||||
return builder.toString();
|
||||
}
|
||||
private void appendXmlAttrs(StringBuilder builder, String rawAttr){
|
||||
String[] split=rawAttr.split("(\\s*;\\s*)");
|
||||
for(int i=0;i<split.length; i++){
|
||||
String attr=split[i];
|
||||
if(i!=0){
|
||||
builder.append(' ');
|
||||
}
|
||||
int index=attr.indexOf('=')+1;
|
||||
builder.append(attr, 0, index);
|
||||
builder.append('"');
|
||||
builder.append(attr.substring(index));
|
||||
builder.append('"');
|
||||
}
|
||||
}
|
||||
|
||||
public String getEndTag(){
|
||||
int i= mTag.indexOf(';');
|
||||
|
@ -54,7 +54,7 @@ public abstract class XMLNode {
|
||||
|
||||
}
|
||||
boolean canAdd(XMLNode xmlNode){
|
||||
return !mChildNodes.contains(xmlNode);
|
||||
return xmlNode!=null;
|
||||
}
|
||||
boolean contains(XMLNode xmlNode){
|
||||
return mChildNodes.contains(xmlNode);
|
||||
|
Loading…
x
Reference in New Issue
Block a user