fix: encode @ empty values

This commit is contained in:
REAndroid 2023-05-01 21:04:19 +02:00
parent 1fe0203e41
commit 3289d33c75
3 changed files with 34 additions and 12 deletions

View File

@ -84,6 +84,10 @@
if(ref!=null){ if(ref!=null){
return ref.value; return ref.value;
} }
ref = ValueDecoder.encodeNullReference(refString);
if(ref!=null){
return ref.value;
}
throw new EncodeException( throw new EncodeException(
"Not proper reference string: '"+refString+"'"); "Not proper reference string: '"+refString+"'");
} }

View File

@ -39,11 +39,14 @@ class XMLValuesEncoderStyle extends XMLValuesEncoderBag{
if(id!=0){ if(id!=0){
item.setName(id); item.setName(id);
String value = child.getTextContent(); String value = child.getTextContent();
if(ValueDecoder.isReference(value)){ ValueDecoder.EncodeResult encodeResult = ValueDecoder.encodeNullReference(value);
if(encodeResult!=null){
item.setTypeAndData(encodeResult.valueType, encodeResult.value);
}else if(ValueDecoder.isReference(value)){
item.setTypeAndData(ValueType.REFERENCE, item.setTypeAndData(ValueType.REFERENCE,
getMaterials().resolveReference(value)); getMaterials().resolveReference(value));
}else { }else {
ValueDecoder.EncodeResult encodeResult = ValueDecoder.encodeGuessAny(value); encodeResult = ValueDecoder.encodeGuessAny(value);
if(encodeResult!=null){ if(encodeResult!=null){
item.setTypeAndData(encodeResult.valueType, encodeResult.value); item.setTypeAndData(encodeResult.valueType, encodeResult.value);
}else { }else {
@ -86,6 +89,11 @@ class XMLValuesEncoderStyle extends XMLValuesEncoderBag{
bagItem.setTypeAndData(encodeEnumFlag.valueType, encodeEnumFlag.value); bagItem.setTypeAndData(encodeEnumFlag.valueType, encodeEnumFlag.value);
return; return;
} }
ValueDecoder.EncodeResult encodeResult = ValueDecoder.encodeNullReference(valueText);
if(encodeResult!=null){
bagItem.setTypeAndData(encodeResult.valueType, encodeResult.value);
return;
}
if(ValueDecoder.isReference(valueText)){ if(ValueDecoder.isReference(valueText)){
if(valueText.startsWith("?")){ if(valueText.startsWith("?")){
bagItem.setValueType(ValueType.ATTRIBUTE); bagItem.setValueType(ValueType.ATTRIBUTE);
@ -99,7 +107,7 @@ class XMLValuesEncoderStyle extends XMLValuesEncoderBag{
}else if(EncodeUtil.isEmpty(valueText)) { }else if(EncodeUtil.isEmpty(valueText)) {
bagItem.setTypeAndData(ValueType.NULL, 0); bagItem.setTypeAndData(ValueType.NULL, 0);
}else{ }else{
ValueDecoder.EncodeResult encodeResult = ValueDecoder.encodeGuessAny(valueText); encodeResult = ValueDecoder.encodeGuessAny(valueText);
if(encodeResult!=null){ if(encodeResult!=null){
bagItem.setTypeAndData(encodeResult.valueType, bagItem.setTypeAndData(encodeResult.valueType,
encodeResult.value); encodeResult.value);

View File

@ -63,16 +63,11 @@ public class ValueDecoder {
if(txt==null){ if(txt==null){
return null; return null;
} }
if("@empty".equals(txt)){ EncodeResult result = encodeNullReference(txt);
return new EncodeResult(ValueType.NULL, 1); if(result != null){
return result;
} }
if("@null".equals(txt)){ result=encodeColor(txt);
return new EncodeResult(ValueType.REFERENCE, 0);
}
if("?null".equals(txt)){
return new EncodeResult(ValueType.ATTRIBUTE, 0);
}
EncodeResult result=encodeColor(txt);
if(result!=null){ if(result!=null){
return result; return result;
} }
@ -99,6 +94,21 @@ public class ValueDecoder {
} }
return null; return null;
} }
public static EncodeResult encodeNullReference(String txt){
if(txt==null){
return null;
}
if("@empty".equals(txt)){
return new EncodeResult(ValueType.NULL, 1);
}
if("@null".equals(txt)){
return new EncodeResult(ValueType.REFERENCE, 0);
}
if("?null".equals(txt)){
return new EncodeResult(ValueType.ATTRIBUTE, 0);
}
return null;
}
public static EncodeResult encodeHexReference(String txt){ public static EncodeResult encodeHexReference(String txt){
if(txt==null){ if(txt==null){
return null; return null;