mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
Implemented string parser
This commit is contained in:
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>
|
||||
|
||||
+23
-6
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user