Browse Source

【DesignToken】Alias token Border Radius 解析

liuxiaolong 2 years ago
parent
commit
eafac1152a

+ 10 - 0
app/src/main/res/values/alias_border_radius.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <dimen name="radius_fullround_btn_xs">@dimen/border_radius_10</dimen>
+    <dimen name="radius_fullround_btn_s">@dimen/border_radius_12</dimen>
+    <dimen name="radius_fullround_btn_m">@dimen/border_radius_16</dimen>
+    <dimen name="radius_base_s">@dimen/border_radius_2</dimen>
+    <dimen name="radius_fullround_btn_l">@dimen/border_radius_20</dimen>
+    <dimen name="radius_base_m">@dimen/border_radius_4</dimen>
+    <dimen name="radius_base_l">@dimen/border_radius_8</dimen>
+</resources>

+ 11 - 0
app/src/main/res/values/global_border_radius.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <dimen name="border_radius_2">2dp</dimen>
+    <dimen name="border_radius_4">4dp</dimen>
+    <dimen name="border_radius_6">6dp</dimen>
+    <dimen name="border_radius_8">8dp</dimen>
+    <dimen name="border_radius_10">10dp</dimen>
+    <dimen name="border_radius_12">12dp</dimen>
+    <dimen name="border_radius_16">16dp</dimen>
+    <dimen name="border_radius_20">20dp</dimen>
+</resources>

+ 1 - 1
lib_material_tokens/src/main/java/com/kdanmobile/android/lib/material/tokens/TokenCategory.kt

@@ -24,7 +24,7 @@ enum class TokenCategory(var typeName : String) {
 
     Alias_Color("color"),
 
-    Alias_BorderRadius("border_radius"),
+    Alias_BorderRadius("radius"),
 
     Alias_BoxShadow("boxShadow")
 

+ 2 - 2
lib_material_tokens/src/main/java/com/kdanmobile/android/lib/material/tokens/category/ParseTokenFactory.kt

@@ -2,6 +2,7 @@ package com.kdanmobile.android.lib.material.tokens.category
 
 import com.kdanmobile.android.lib.material.tokens.TokenCategory
 import com.kdanmobile.android.lib.material.tokens.TokenJsonType
+import com.kdanmobile.android.lib.material.tokens.category.borderradius.AliasBorderRadiusParse
 import com.kdanmobile.android.lib.material.tokens.category.borderradius.BorderRadiusParse
 import com.kdanmobile.android.lib.material.tokens.category.borderwidth.BorderWidthParse
 import com.kdanmobile.android.lib.material.tokens.category.color.AliasColorParse
@@ -52,8 +53,7 @@ object ParseTokenFactory {
                     AliasColorParse()
                 }
                 TokenCategory.Alias_BorderRadius.typeName ->{
-//                    BorderRadiusParse()
-                    null
+                    AliasBorderRadiusParse()
                 }
                 TokenCategory.Alias_BoxShadow.typeName ->{
                     null

+ 66 - 0
lib_material_tokens/src/main/java/com/kdanmobile/android/lib/material/tokens/category/borderradius/AliasBorderRadiusParse.kt

@@ -0,0 +1,66 @@
+package com.kdanmobile.android.lib.material.tokens.category.borderradius
+
+import com.kdanmobile.android.lib.material.tokens.base.*
+import com.kdanmobile.android.lib.material.tokens.category.IParseToken
+import com.kdanmobile.android.lib.material.tokens.category.common.CommonXmlParserHandler
+import org.json.JSONObject
+import java.io.File
+
+/**
+ * @classname:
+ * @author: LiuXiaoLong
+ * @date: 2023/2/13
+ * description: 解析Sizing相关token
+ */
+class AliasBorderRadiusParse : IParseToken {
+
+    private var result = hashMapOf<String, String>()
+
+    private var tag = "解析AliasBorderRadius"
+
+
+    override fun parse(rootKey: String, jsonObject: JSONObject) {
+        println("开始解析${rootKey}类型Tokens")
+        for (itemKey in jsonObject.keys()) {
+            val key = itemKey as String
+            val value = jsonObject.get(key)
+            val names = (value as JSONObject).names()
+            if (names.length() == 2 && names.getString(0).equals("type") || names.getString(0).equals("value")) {
+                val borderRadiusValue = value.getString("value").replaceInvalidStr()
+                result["${rootKey}_${key}"] = borderRadiusValue
+            } else {
+                parse("${rootKey}_$key", value)
+            }
+        }
+    }
+
+
+    /**
+     * 生成token文件
+     */
+    override fun generateTokenFile(destFilePath: String?) {
+
+        if (destFilePath.isNullOrEmpty()) {
+            logT(tag, "保存路径为空---return")
+            return
+        }
+        logT(tag, "开始生成Alias BorderRadius Token文件")
+        Log.t(tag, "token文件输出路径:${destFilePath}")
+
+        val file = File(destFilePath)
+        val outputList = FileUtil.parseAndMergeOldData(tag, file, CommonXmlParserHandler(XmlParserDataCategory.dimen), result)
+            .sortedBy {
+                it.second
+            }
+            .map {
+                it.first to "@dimen/${it.second}"
+            }
+        FileUtil.writeTokens(file, XmlParserDataCategory.dimen, outputList)
+
+        logT(tag, "解析生成文件完成-----")
+
+    }
+
+
+}
+