Implemented string parser

This commit is contained in:
Akash Yadav
2022-11-05 19:20:10 +05:30
parent cafdc3fa55
commit 4ebe8fa5d4
5 changed files with 45 additions and 7 deletions
Binary file not shown.
@@ -20,4 +20,9 @@
<integer name="test_integer_0">0</integer>
<integer name="test_integer_1_ref">@integer/test_integer_1</integer>
<integer name="test_integer_0_ref">@integer/test_integer_0</integer>
<string name="test_string">I love Android!</string>
<string name="test_string_ref">@string/test_string</string>
<string name="test_string_styled">I <b>love</b> Android!</string>
<string name="test_string_styled_ref">@string/test_string_styled</string>
</resources>
@@ -30,19 +30,22 @@ import com.android.aaptcompiler.AaptResourceType.ATTR
import com.android.aaptcompiler.AaptResourceType.BOOL
import com.android.aaptcompiler.AaptResourceType.DIMEN
import com.android.aaptcompiler.AaptResourceType.INTEGER
import com.android.aaptcompiler.AaptResourceType.STRING
import com.android.aaptcompiler.AttributeResource
import com.android.aaptcompiler.BasicString
import com.android.aaptcompiler.BinaryPrimitive
import com.android.aaptcompiler.ConfigDescription
import com.android.aaptcompiler.RawString
import com.android.aaptcompiler.Reference
import com.android.aaptcompiler.ResourceEntry
import com.android.aaptcompiler.ResourceName
import com.android.aaptcompiler.ResourceTable
import com.android.aaptcompiler.ResourceTablePackage
import com.android.aaptcompiler.StyledString
import com.android.aaptcompiler.Value
import com.android.aaptcompiler.android.ResValue.DataType.DIMENSION
import com.android.aaptcompiler.android.stringToFloat
import com.android.aaptcompiler.tryParseBool
import com.android.aaptcompiler.tryParseColor
import com.android.aaptcompiler.tryParseFlagSymbol
import com.android.aaptcompiler.tryParseInt
import com.android.aaptcompiler.tryParseReference
@@ -66,6 +69,21 @@ fun endParse() {
currentModule = null
}
fun parseString(value: String) : String {
if (value[0] == '@') {
val resolver: (Value?) -> String? = fun(it): String? {
return when (it) {
is BasicString -> it.ref.value()
is RawString -> it.value.value()
is StyledString -> it.ref.value()
else -> null
}
}
return parseReference(value = value, expectedType = STRING, def = value, resolver = resolver)
}
return value
}
@JvmOverloads
fun parseInteger(value: String, def: Int = 0): Int {
if (value.isDigitsOnly()) {
@@ -124,8 +142,7 @@ fun parseDrawable(context: Context, value: String, def: Drawable = unknownDrawab
@JvmOverloads
fun parseColorDrawable(context: Context, value: String, def: Int = Color.TRANSPARENT): Drawable {
val color =
parseColor(context, value, def)
val color = parseColor(context, value, def)
return newColorDrawable(color)
}
@@ -138,9 +155,9 @@ fun parseColor(context: Context, value: String, def: Int = Color.TRANSPARENT): I
log.warn("Unable to parse color code", value)
def
}
// TODO Parse other types of colors
// TODO Parse other types of colors
return color
}
@@ -10,7 +10,7 @@ import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;
import com.itsaky.inflater.R;
import com.itsaky.androidide.inflater.R;
import com.sdsmdg.harjot.vectormaster.models.ClipPathModel;
import com.sdsmdg.harjot.vectormaster.models.GroupModel;
import com.sdsmdg.harjot.vectormaster.models.PathModel;
@@ -27,6 +27,7 @@ import com.itsaky.androidide.inflater.internal.utils.parseBoolean
import com.itsaky.androidide.inflater.internal.utils.parseDimension
import com.itsaky.androidide.inflater.internal.utils.parseDrawable
import com.itsaky.androidide.inflater.internal.utils.parseInteger
import com.itsaky.androidide.inflater.internal.utils.parseString
import com.itsaky.androidide.inflater.internal.utils.startParse
import org.junit.Test
import org.junit.runner.RunWith
@@ -135,4 +136,19 @@ class ValueParsersTest {
}
}
}
@Test
fun `string parser test`() {
inflaterTest {
startParse(it)
assertThat(parseString("Hello World!")).isEqualTo("Hello World!")
assertThat(parseString("@android:string/ok")).isEqualTo("OK")
assertThat(parseString("@android:string/cancel")).isEqualTo("Cancel")
assertThat(parseString("@string/test_string")).isEqualTo("I love Android!")
assertThat(parseString("@string/test_string_ref")).isEqualTo("I love Android!")
assertThat(parseString("@string/test_string_styled")).isEqualTo("I love Android!")
assertThat(parseString("@string/test_string_styled_ref")).isEqualTo("I love Android!")
endParse()
}
}
}