mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-04-30 22:34:24 +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()){
|
if(!stringItem.hasStyle()){
|
||||||
element.setTextContent(stringItem.get());
|
element.setTextContent(stringItem.get());
|
||||||
}else {
|
}else {
|
||||||
element.setSpannableText(stringItem.getHtml());
|
element.setSpannableText(stringItem.getXml());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,21 @@ public class StringItem extends BlockItem implements JSONConvert<JSONObject> {
|
|||||||
if(styleItem==null){
|
if(styleItem==null){
|
||||||
return str;
|
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(){
|
public String get(){
|
||||||
return mCache;
|
return mCache;
|
||||||
|
@ -171,10 +171,14 @@ public class StyleItem extends IntegerArray implements JSONConvert<JSONObject> {
|
|||||||
if(ref<=0){
|
if(ref<=0){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return new StyleSpanInfo(
|
StyleSpanInfo spanInfo = new StyleSpanInfo(
|
||||||
getStringFromPool(ref),
|
getStringFromPool(ref),
|
||||||
getFirstChar(i),
|
getFirstChar(i),
|
||||||
getLastChar(i));
|
getLastChar(i));
|
||||||
|
if(!spanInfo.isValid()){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return spanInfo;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public int size() {
|
public int size() {
|
||||||
@ -205,7 +209,7 @@ public class StyleItem extends IntegerArray implements JSONConvert<JSONObject> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String applyHtml(String str){
|
public String applyHtml(String str, boolean xml){
|
||||||
if(str==null){
|
if(str==null){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -232,16 +236,47 @@ public class StyleItem extends IntegerArray implements JSONConvert<JSONObject> {
|
|||||||
if(isLast){
|
if(isLast){
|
||||||
builder.append(info.getEndTag());
|
builder.append(info.getEndTag());
|
||||||
}else {
|
}else {
|
||||||
builder.append(info.getStartTag());
|
builder.append(info.getStartTag(xml));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!lastAppend){
|
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);
|
builder.append(ch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return builder.toString();
|
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){
|
private boolean isEmpty(List<StyleSpanInfo> spanInfoList){
|
||||||
if(spanInfoList.size()==0){
|
if(spanInfoList.size()==0){
|
||||||
return true;
|
return true;
|
||||||
|
@ -27,6 +27,9 @@ public class StyleSpanInfo implements JSONConvert<JSONObject> {
|
|||||||
this.mFirst = first;
|
this.mFirst = first;
|
||||||
this.mLast = last;
|
this.mLast = last;
|
||||||
}
|
}
|
||||||
|
public boolean isValid(){
|
||||||
|
return mFirst < mLast;
|
||||||
|
}
|
||||||
public int getFirst() {
|
public int getFirst() {
|
||||||
return mFirst;
|
return mFirst;
|
||||||
}
|
}
|
||||||
@ -46,7 +49,7 @@ public class StyleSpanInfo implements JSONConvert<JSONObject> {
|
|||||||
this.mTag = tag;
|
this.mTag = tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getStartTag(){
|
public String getStartTag(boolean xml){
|
||||||
int i= mTag.indexOf(';');
|
int i= mTag.indexOf(';');
|
||||||
StringBuilder builder=new StringBuilder();
|
StringBuilder builder=new StringBuilder();
|
||||||
builder.append('<');
|
builder.append('<');
|
||||||
@ -55,11 +58,30 @@ public class StyleSpanInfo implements JSONConvert<JSONObject> {
|
|||||||
}else {
|
}else {
|
||||||
builder.append(mTag, 0, i);
|
builder.append(mTag, 0, i);
|
||||||
builder.append(' ');
|
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('>');
|
builder.append('>');
|
||||||
return builder.toString();
|
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(){
|
public String getEndTag(){
|
||||||
int i= mTag.indexOf(';');
|
int i= mTag.indexOf(';');
|
||||||
|
@ -54,7 +54,7 @@ public abstract class XMLNode {
|
|||||||
|
|
||||||
}
|
}
|
||||||
boolean canAdd(XMLNode xmlNode){
|
boolean canAdd(XMLNode xmlNode){
|
||||||
return !mChildNodes.contains(xmlNode);
|
return xmlNode!=null;
|
||||||
}
|
}
|
||||||
boolean contains(XMLNode xmlNode){
|
boolean contains(XMLNode xmlNode){
|
||||||
return mChildNodes.contains(xmlNode);
|
return mChildNodes.contains(xmlNode);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user