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){
return ref.value;
}
ref = ValueDecoder.encodeNullReference(refString);
if(ref!=null){
return ref.value;
}
throw new EncodeException(
"Not proper reference string: '"+refString+"'");
}

View File

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

View File

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