From b46aa58527ae887a814a109b052949dede33015a Mon Sep 17 00:00:00 2001 From: Yahor Urbanovich Date: Fri, 5 Jul 2024 13:15:48 +0300 Subject: [PATCH] split processing logic into separate modules --- components/generator/common/build.gradle.kts | 13 ++++++ .../valkyrie/generator}/ext/Formatter.kt | 2 +- .../valkyrie/generator}/ext/Spec.kt | 2 +- .../valkyrie/generator}/ext/TypeName.kt | 2 +- .../valkyrie/generator/ext}/FormatterTest.kt | 5 +-- .../generator/iconpack/build.gradle.kts | 15 +++++++ .../generator/iconpack/IconPackFileSpec.kt | 28 +++++++++++++ .../generator/iconpack/IconPackGenerator.kt | 17 ++++++++ .../iconpack}/IconPackGeneratorTest.kt | 12 +++--- .../generator/imagevector/build.gradle.kts | 18 +++++++++ .../imagevector/ImageVectorFileSpec.kt | 40 +++++++------------ .../imagevector/ImageVectorGenerator.kt | 23 ++++++++--- .../imagevector/util/BackingPropertySpec.kt | 17 ++++++++ .../util/ImageVectorBuilderSpec.kt | 8 ++-- .../generator/imagevector/util/PathBuilder.kt | 38 +++++++++--------- .../generator/imagevector/util/PreviewSpec.kt | 8 ++-- .../valkyrie/generator/imagevector}/Common.kt | 3 +- .../imagevector}/PreviewGenerationTest.kt | 15 +++---- .../imagevector}/XmlIconParserTest.kt | 27 ++++++++----- .../src/test/resources/ic_all_path_params.xml | 0 .../test/resources/ic_fill_color_stroke.xml | 0 .../src/test/resources/ic_only_path.xml | 0 .../src/test/resources/ic_several_path.xml | 0 .../src/test/resources/ic_without_path.xml | 0 .../google}/build.gradle.kts | 0 .../material/icons/generator/GraphicUnit.kt | 0 .../compose/material/icons/generator/Icon.kt | 0 .../material/icons/generator/IconParser.kt | 0 .../compose/material/icons/generator/Names.kt | 25 +++++++----- .../icons/generator/vector/FillType.kt | 0 .../icons/generator/vector/PathNode.kt | 0 .../icons/generator/vector/PathParser.kt | 0 .../icons/generator/vector/StrokeCap.kt | 0 .../icons/generator/vector/StrokeJoin.kt | 0 .../material/icons/generator/vector/Vector.kt | 0 components/parser/build.gradle.kts | 15 +++++++ .../valkyrie}/parser/IconParser.kt | 20 ++++++---- .../valkyrie}/parser/IconTypeParser.kt | 6 +-- .../valkyrie}/parser/SvgToXmlParser.kt | 2 +- gradle/libs.versions.toml | 2 + plugin/build.gradle.kts | 7 ++-- .../generator/iconpack/IconPackGenerator.kt | 39 ------------------ .../imagevector/util/BackingPropertySpec.kt | 17 -------- .../conversion/IconPackConversionViewModel.kt | 17 ++++---- .../iconpack/conversion/util/FileToPainter.kt | 2 +- .../creation/IconPackCreationViewModel.kt | 12 +++--- .../conversion/SimpleConversionViewModel.kt | 9 +++-- settings.gradle.kts | 7 +++- 48 files changed, 279 insertions(+), 194 deletions(-) create mode 100644 components/generator/common/build.gradle.kts rename {plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector => components/generator/common/src/main/kotlin/io/github/composegears/valkyrie/generator}/ext/Formatter.kt (79%) rename {plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector => components/generator/common/src/main/kotlin/io/github/composegears/valkyrie/generator}/ext/Spec.kt (94%) rename {plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector => components/generator/common/src/main/kotlin/io/github/composegears/valkyrie/generator}/ext/TypeName.kt (53%) rename {plugin/src/test/kotlin/io/github/composegears/valkyrie => components/generator/common/src/test/kotlin/io/github/composegears/valkyrie/generator/ext}/FormatterTest.kt (62%) create mode 100644 components/generator/iconpack/build.gradle.kts create mode 100644 components/generator/iconpack/src/main/kotlin/io/github/composegears/valkyrie/generator/iconpack/IconPackFileSpec.kt create mode 100644 components/generator/iconpack/src/main/kotlin/io/github/composegears/valkyrie/generator/iconpack/IconPackGenerator.kt rename {plugin/src/test/kotlin/io/github/composegears/valkyrie => components/generator/iconpack/src/test/kotlin/io/github/composegears/valkyrie/generator/iconpack}/IconPackGeneratorTest.kt (78%) create mode 100644 components/generator/imagevector/build.gradle.kts rename {plugin/src/main/kotlin/io/github/composegears/valkyrie/processing => components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie}/generator/imagevector/ImageVectorFileSpec.kt (77%) rename {plugin/src/main/kotlin/io/github/composegears/valkyrie/processing => components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie}/generator/imagevector/ImageVectorGenerator.kt (54%) create mode 100644 components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/util/BackingPropertySpec.kt rename {plugin/src/main/kotlin/io/github/composegears/valkyrie/processing => components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie}/generator/imagevector/util/ImageVectorBuilderSpec.kt (77%) rename {plugin/src/main/kotlin/io/github/composegears/valkyrie/processing => components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie}/generator/imagevector/util/PathBuilder.kt (80%) rename {plugin/src/main/kotlin/io/github/composegears/valkyrie/processing => components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie}/generator/imagevector/util/PreviewSpec.kt (90%) rename {plugin/src/test/kotlin/io/github/composegears/valkyrie => components/generator/imagevector/src/test/kotlin/io/github/composegears/valkyrie/generator/imagevector}/Common.kt (66%) rename {plugin/src/test/kotlin/io/github/composegears/valkyrie => components/generator/imagevector/src/test/kotlin/io/github/composegears/valkyrie/generator/imagevector}/PreviewGenerationTest.kt (93%) rename {plugin/src/test/kotlin/io/github/composegears/valkyrie => components/generator/imagevector/src/test/kotlin/io/github/composegears/valkyrie/generator/imagevector}/XmlIconParserTest.kt (94%) rename {plugin => components/generator/imagevector}/src/test/resources/ic_all_path_params.xml (100%) rename {plugin => components/generator/imagevector}/src/test/resources/ic_fill_color_stroke.xml (100%) rename {plugin => components/generator/imagevector}/src/test/resources/ic_only_path.xml (100%) rename {plugin => components/generator/imagevector}/src/test/resources/ic_several_path.xml (100%) rename {plugin => components/generator/imagevector}/src/test/resources/ic_without_path.xml (100%) rename {google => components/google}/build.gradle.kts (100%) rename {google => components/google}/src/main/kotlin/androidx/compose/material/icons/generator/GraphicUnit.kt (100%) rename {google => components/google}/src/main/kotlin/androidx/compose/material/icons/generator/Icon.kt (100%) rename {google => components/google}/src/main/kotlin/androidx/compose/material/icons/generator/IconParser.kt (100%) rename {google => components/google}/src/main/kotlin/androidx/compose/material/icons/generator/Names.kt (75%) rename {google => components/google}/src/main/kotlin/androidx/compose/material/icons/generator/vector/FillType.kt (100%) rename {google => components/google}/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathNode.kt (100%) rename {google => components/google}/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathParser.kt (100%) rename {google => components/google}/src/main/kotlin/androidx/compose/material/icons/generator/vector/StrokeCap.kt (100%) rename {google => components/google}/src/main/kotlin/androidx/compose/material/icons/generator/vector/StrokeJoin.kt (100%) rename {google => components/google}/src/main/kotlin/androidx/compose/material/icons/generator/vector/Vector.kt (100%) create mode 100644 components/parser/build.gradle.kts rename {plugin/src/main/kotlin/io/github/composegears/valkyrie/processing => components/parser/src/main/kotlin/io/github/composegears/valkyrie}/parser/IconParser.kt (76%) rename {plugin/src/main/kotlin/io/github/composegears/valkyrie/processing => components/parser/src/main/kotlin/io/github/composegears/valkyrie}/parser/IconTypeParser.kt (69%) rename {plugin/src/main/kotlin/io/github/composegears/valkyrie/processing => components/parser/src/main/kotlin/io/github/composegears/valkyrie}/parser/SvgToXmlParser.kt (83%) delete mode 100644 plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/iconpack/IconPackGenerator.kt delete mode 100644 plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/util/BackingPropertySpec.kt diff --git a/components/generator/common/build.gradle.kts b/components/generator/common/build.gradle.kts new file mode 100644 index 00000000..66b55dcc --- /dev/null +++ b/components/generator/common/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + alias(libs.plugins.kotlin.jvm) +} + +repositories { + mavenCentral() +} + +dependencies { + implementation(libs.kotlinpoet) + + testImplementation(libs.kotlin.test) +} \ No newline at end of file diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/ext/Formatter.kt b/components/generator/common/src/main/kotlin/io/github/composegears/valkyrie/generator/ext/Formatter.kt similarity index 79% rename from plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/ext/Formatter.kt rename to components/generator/common/src/main/kotlin/io/github/composegears/valkyrie/generator/ext/Formatter.kt index 0e885f83..be838849 100644 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/ext/Formatter.kt +++ b/components/generator/common/src/main/kotlin/io/github/composegears/valkyrie/generator/ext/Formatter.kt @@ -1,4 +1,4 @@ -package io.github.composegears.valkyrie.processing.generator.imagevector.ext +package io.github.composegears.valkyrie.generator.ext fun Float.trimTrailingZero(): String { val value = this.toString() diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/ext/Spec.kt b/components/generator/common/src/main/kotlin/io/github/composegears/valkyrie/generator/ext/Spec.kt similarity index 94% rename from plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/ext/Spec.kt rename to components/generator/common/src/main/kotlin/io/github/composegears/valkyrie/generator/ext/Spec.kt index 77428581..943235d0 100644 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/ext/Spec.kt +++ b/components/generator/common/src/main/kotlin/io/github/composegears/valkyrie/generator/ext/Spec.kt @@ -1,4 +1,4 @@ -package io.github.composegears.valkyrie.processing.generator.imagevector.ext +package io.github.composegears.valkyrie.generator.ext import com.squareup.kotlinpoet.FileSpec import com.squareup.kotlinpoet.FunSpec diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/ext/TypeName.kt b/components/generator/common/src/main/kotlin/io/github/composegears/valkyrie/generator/ext/TypeName.kt similarity index 53% rename from plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/ext/TypeName.kt rename to components/generator/common/src/main/kotlin/io/github/composegears/valkyrie/generator/ext/TypeName.kt index f44e34d8..c92de8d1 100644 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/ext/TypeName.kt +++ b/components/generator/common/src/main/kotlin/io/github/composegears/valkyrie/generator/ext/TypeName.kt @@ -1,4 +1,4 @@ -package io.github.composegears.valkyrie.processing.generator.imagevector.ext +package io.github.composegears.valkyrie.generator.ext import com.squareup.kotlinpoet.TypeName diff --git a/plugin/src/test/kotlin/io/github/composegears/valkyrie/FormatterTest.kt b/components/generator/common/src/test/kotlin/io/github/composegears/valkyrie/generator/ext/FormatterTest.kt similarity index 62% rename from plugin/src/test/kotlin/io/github/composegears/valkyrie/FormatterTest.kt rename to components/generator/common/src/test/kotlin/io/github/composegears/valkyrie/generator/ext/FormatterTest.kt index 94d69c6c..9109a01a 100644 --- a/plugin/src/test/kotlin/io/github/composegears/valkyrie/FormatterTest.kt +++ b/components/generator/common/src/test/kotlin/io/github/composegears/valkyrie/generator/ext/FormatterTest.kt @@ -1,8 +1,5 @@ -package io.github.composegears.valkyrie +package io.github.composegears.valkyrie.generator.ext -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.formatFloat -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.toColorHex -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.trimTrailingZero import org.junit.Test import kotlin.test.assertEquals diff --git a/components/generator/iconpack/build.gradle.kts b/components/generator/iconpack/build.gradle.kts new file mode 100644 index 00000000..4de0e466 --- /dev/null +++ b/components/generator/iconpack/build.gradle.kts @@ -0,0 +1,15 @@ +plugins { + alias(libs.plugins.kotlin.jvm) +} + +repositories { + mavenCentral() +} + +dependencies { + implementation(projects.components.generator.common) + + implementation(libs.kotlinpoet) + + testImplementation(libs.kotlin.test) +} \ No newline at end of file diff --git a/components/generator/iconpack/src/main/kotlin/io/github/composegears/valkyrie/generator/iconpack/IconPackFileSpec.kt b/components/generator/iconpack/src/main/kotlin/io/github/composegears/valkyrie/generator/iconpack/IconPackFileSpec.kt new file mode 100644 index 00000000..74734f5a --- /dev/null +++ b/components/generator/iconpack/src/main/kotlin/io/github/composegears/valkyrie/generator/iconpack/IconPackFileSpec.kt @@ -0,0 +1,28 @@ +package io.github.composegears.valkyrie.generator.iconpack + +import io.github.composegears.valkyrie.generator.ext.fileSpecBuilder +import io.github.composegears.valkyrie.generator.ext.objectBuilder +import io.github.composegears.valkyrie.generator.ext.removeDeadCode +import io.github.composegears.valkyrie.generator.ext.setIndent + +internal class IconPackFileSpec(private val config: IconPackGeneratorConfig) { + + fun createSpec(): IconPackSpecOutput { + val iconPackSpec = objectBuilder(name = config.iconPackName) { + config.subPacks.forEach { icon -> + addType(objectBuilder(name = icon)) + } + } + val fileSpec = fileSpecBuilder( + packageName = config.packageName, + fileName = config.iconPackName + ) { + addType(iconPackSpec) + setIndent() + } + return IconPackSpecOutput( + content = fileSpec.removeDeadCode(), + name = fileSpec.name + ) + } +} \ No newline at end of file diff --git a/components/generator/iconpack/src/main/kotlin/io/github/composegears/valkyrie/generator/iconpack/IconPackGenerator.kt b/components/generator/iconpack/src/main/kotlin/io/github/composegears/valkyrie/generator/iconpack/IconPackGenerator.kt new file mode 100644 index 00000000..c2822693 --- /dev/null +++ b/components/generator/iconpack/src/main/kotlin/io/github/composegears/valkyrie/generator/iconpack/IconPackGenerator.kt @@ -0,0 +1,17 @@ +package io.github.composegears.valkyrie.generator.iconpack + +data class IconPackGeneratorConfig( + val packageName: String, + val iconPackName: String, + val subPacks: List +) + +data class IconPackSpecOutput( + val content: String, + val name: String +) + +object IconPackGenerator { + + fun create(config: IconPackGeneratorConfig) = IconPackFileSpec(config).createSpec() +} \ No newline at end of file diff --git a/plugin/src/test/kotlin/io/github/composegears/valkyrie/IconPackGeneratorTest.kt b/components/generator/iconpack/src/test/kotlin/io/github/composegears/valkyrie/generator/iconpack/IconPackGeneratorTest.kt similarity index 78% rename from plugin/src/test/kotlin/io/github/composegears/valkyrie/IconPackGeneratorTest.kt rename to components/generator/iconpack/src/test/kotlin/io/github/composegears/valkyrie/generator/iconpack/IconPackGeneratorTest.kt index 69743e12..5a2108c5 100644 --- a/plugin/src/test/kotlin/io/github/composegears/valkyrie/IconPackGeneratorTest.kt +++ b/components/generator/iconpack/src/test/kotlin/io/github/composegears/valkyrie/generator/iconpack/IconPackGeneratorTest.kt @@ -1,7 +1,5 @@ -package io.github.composegears.valkyrie +package io.github.composegears.valkyrie.generator.iconpack -import io.github.composegears.valkyrie.processing.generator.iconpack.IconPackGenerator -import io.github.composegears.valkyrie.processing.generator.iconpack.IconPackGeneratorConfig import org.junit.Test import kotlin.test.assertEquals @@ -9,13 +7,13 @@ class IconPackGeneratorTest { @Test fun `generate icon pack`() { - val result = IconPackGenerator( + val result = IconPackGenerator.create( config = IconPackGeneratorConfig( packageName = "io.github.composegears.valkyrie.icons", iconPackName = "ValkyrieIcons", subPacks = emptyList() ) - ).generate() + ) val expectedContent = """ package io.github.composegears.valkyrie.icons @@ -30,13 +28,13 @@ class IconPackGeneratorTest { @Test fun `generate nested packs`() { - val result = IconPackGenerator( + val result = IconPackGenerator.create( config = IconPackGeneratorConfig( packageName = "io.github.composegears.valkyrie.icons", iconPackName = "ValkyrieIcons", subPacks = listOf("Filled", "Colored") ) - ).generate() + ) val expectedContent = """ package io.github.composegears.valkyrie.icons diff --git a/components/generator/imagevector/build.gradle.kts b/components/generator/imagevector/build.gradle.kts new file mode 100644 index 00000000..50338929 --- /dev/null +++ b/components/generator/imagevector/build.gradle.kts @@ -0,0 +1,18 @@ +plugins { + alias(libs.plugins.kotlin.jvm) +} + +repositories { + google() + mavenCentral() +} + +dependencies { + implementation(projects.components.generator.common) + implementation(projects.components.google) + + implementation(libs.kotlinpoet) + + testImplementation(projects.components.parser) + testImplementation(libs.kotlin.test) +} \ No newline at end of file diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/ImageVectorFileSpec.kt b/components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/ImageVectorFileSpec.kt similarity index 77% rename from plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/ImageVectorFileSpec.kt rename to components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/ImageVectorFileSpec.kt index 33205b18..f5598979 100644 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/ImageVectorFileSpec.kt +++ b/components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/ImageVectorFileSpec.kt @@ -1,4 +1,4 @@ -package io.github.composegears.valkyrie.processing.generator.imagevector +package io.github.composegears.valkyrie.generator.imagevector import androidx.compose.material.icons.generator.ClassNames import androidx.compose.material.icons.generator.MemberNames @@ -9,19 +9,19 @@ import com.squareup.kotlinpoet.CodeBlock import com.squareup.kotlinpoet.FunSpec import com.squareup.kotlinpoet.PropertySpec import com.squareup.kotlinpoet.buildCodeBlock -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.fileSpecBuilder -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.getterFunSpecBuilder -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.propertySpecBuilder -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.removeDeadCode -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.setIndent -import io.github.composegears.valkyrie.processing.generator.imagevector.util.addPath -import io.github.composegears.valkyrie.processing.generator.imagevector.util.backingPropertyName -import io.github.composegears.valkyrie.processing.generator.imagevector.util.backingPropertySpec -import io.github.composegears.valkyrie.processing.generator.imagevector.util.iconPreviewSpec -import io.github.composegears.valkyrie.processing.generator.imagevector.util.iconPreviewSpecForNestedPack -import io.github.composegears.valkyrie.processing.generator.imagevector.util.imageVectorBuilderSpecs +import io.github.composegears.valkyrie.generator.ext.fileSpecBuilder +import io.github.composegears.valkyrie.generator.ext.getterFunSpecBuilder +import io.github.composegears.valkyrie.generator.ext.propertySpecBuilder +import io.github.composegears.valkyrie.generator.ext.removeDeadCode +import io.github.composegears.valkyrie.generator.ext.setIndent +import io.github.composegears.valkyrie.generator.imagevector.util.addPath +import io.github.composegears.valkyrie.generator.imagevector.util.backingPropertyName +import io.github.composegears.valkyrie.generator.imagevector.util.backingPropertySpec +import io.github.composegears.valkyrie.generator.imagevector.util.iconPreviewSpec +import io.github.composegears.valkyrie.generator.imagevector.util.iconPreviewSpecForNestedPack +import io.github.composegears.valkyrie.generator.imagevector.util.imageVectorBuilderSpecs -data class ImageVectorSpecConfig( +internal data class ImageVectorSpecConfig( val iconName: String, val iconPack: String, val iconNestedPack: String, @@ -29,19 +29,7 @@ data class ImageVectorSpecConfig( val generatePreview: Boolean, ) -data class ImageVectorSpecOutput( - val content: String, - val name: String -) { - companion object { - val empty = ImageVectorSpecOutput( - content = "", - name = "" - ) - } -} - -class ImageVectorFileSpec(private val config: ImageVectorSpecConfig) { +internal class ImageVectorFileSpec(private val config: ImageVectorSpecConfig) { fun createFileFor(vector: Vector): ImageVectorSpecOutput { val backingProperty = backingPropertySpec( diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/ImageVectorGenerator.kt b/components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/ImageVectorGenerator.kt similarity index 54% rename from plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/ImageVectorGenerator.kt rename to components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/ImageVectorGenerator.kt index 1569df14..dac75c99 100644 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/ImageVectorGenerator.kt +++ b/components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/ImageVectorGenerator.kt @@ -1,6 +1,6 @@ -package io.github.composegears.valkyrie.processing.generator.imagevector +package io.github.composegears.valkyrie.generator.imagevector -import io.github.composegears.valkyrie.processing.parser.IconParserOutput +import androidx.compose.material.icons.generator.vector.Vector data class ImageVectorGeneratorConfig( val packageName: String, @@ -9,18 +9,31 @@ data class ImageVectorGeneratorConfig( val generatePreview: Boolean ) +data class ImageVectorSpecOutput( + val content: String, + val name: String +) { + companion object { + val empty = ImageVectorSpecOutput( + content = "", + name = "" + ) + } +} + object ImageVectorGenerator { fun convert( - parserOutput: IconParserOutput, + vector: Vector, + kotlinName: String, config: ImageVectorGeneratorConfig ): ImageVectorSpecOutput = ImageVectorFileSpec( config = ImageVectorSpecConfig( iconPackage = config.packageName, iconPack = config.packName, - iconName = parserOutput.kotlinName, + iconName = kotlinName, iconNestedPack = config.nestedPackName, generatePreview = config.generatePreview ) - ).createFileFor(parserOutput.vector) + ).createFileFor(vector) } \ No newline at end of file diff --git a/components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/util/BackingPropertySpec.kt b/components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/util/BackingPropertySpec.kt new file mode 100644 index 00000000..e68a32f7 --- /dev/null +++ b/components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/util/BackingPropertySpec.kt @@ -0,0 +1,17 @@ +package io.github.composegears.valkyrie.generator.imagevector.util + +import com.squareup.kotlinpoet.KModifier +import com.squareup.kotlinpoet.TypeName +import io.github.composegears.valkyrie.generator.ext.nullable +import io.github.composegears.valkyrie.generator.ext.propertySpecBuilder + +internal fun String.backingPropertyName() = "_$this" + +internal fun backingPropertySpec( + name: String, + type: TypeName +) = propertySpecBuilder(name = name, type = type.nullable()) { + mutable() + addModifiers(KModifier.PRIVATE) + initializer("null") +} \ No newline at end of file diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/util/ImageVectorBuilderSpec.kt b/components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/util/ImageVectorBuilderSpec.kt similarity index 77% rename from plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/util/ImageVectorBuilderSpec.kt rename to components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/util/ImageVectorBuilderSpec.kt index b9705d62..fb438553 100644 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/util/ImageVectorBuilderSpec.kt +++ b/components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/util/ImageVectorBuilderSpec.kt @@ -1,14 +1,14 @@ -package io.github.composegears.valkyrie.processing.generator.imagevector.util +package io.github.composegears.valkyrie.generator.imagevector.util import androidx.compose.material.icons.generator.ClassNames import androidx.compose.material.icons.generator.MemberNames import androidx.compose.material.icons.generator.vector.Vector import com.squareup.kotlinpoet.CodeBlock import com.squareup.kotlinpoet.buildCodeBlock -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.formatFloat -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.trimTrailingZero +import io.github.composegears.valkyrie.generator.ext.formatFloat +import io.github.composegears.valkyrie.generator.ext.trimTrailingZero -fun imageVectorBuilderSpecs( +internal fun imageVectorBuilderSpecs( iconName: String, vector: Vector, path: CodeBlock.Builder.() -> Unit, diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/util/PathBuilder.kt b/components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/util/PathBuilder.kt similarity index 80% rename from plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/util/PathBuilder.kt rename to components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/util/PathBuilder.kt index 1e33fbe6..289e770c 100644 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/util/PathBuilder.kt +++ b/components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/util/PathBuilder.kt @@ -1,27 +1,27 @@ -package io.github.composegears.valkyrie.processing.generator.imagevector.util +package io.github.composegears.valkyrie.generator.imagevector.util +import androidx.compose.material.icons.generator.ClassNames import androidx.compose.material.icons.generator.MemberNames import androidx.compose.material.icons.generator.vector.Fill import androidx.compose.material.icons.generator.vector.FillType import androidx.compose.material.icons.generator.vector.StrokeCap import androidx.compose.material.icons.generator.vector.StrokeJoin import androidx.compose.material.icons.generator.vector.VectorNode -import androidx.compose.ui.graphics.PathFillType import com.squareup.kotlinpoet.CodeBlock import com.squareup.kotlinpoet.buildCodeBlock -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.formatFloat -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.toColorHex -import io.github.composegears.valkyrie.processing.generator.imagevector.util.PathParams.FillAlphaParam -import io.github.composegears.valkyrie.processing.generator.imagevector.util.PathParams.FillParam -import io.github.composegears.valkyrie.processing.generator.imagevector.util.PathParams.FillTypeParam -import io.github.composegears.valkyrie.processing.generator.imagevector.util.PathParams.StrokeAlphaParam -import io.github.composegears.valkyrie.processing.generator.imagevector.util.PathParams.StrokeColorHexParam -import io.github.composegears.valkyrie.processing.generator.imagevector.util.PathParams.StrokeLineCapParam -import io.github.composegears.valkyrie.processing.generator.imagevector.util.PathParams.StrokeLineJoinParam -import io.github.composegears.valkyrie.processing.generator.imagevector.util.PathParams.StrokeLineMiterParam -import io.github.composegears.valkyrie.processing.generator.imagevector.util.PathParams.StrokeLineWidthParam - -fun CodeBlock.Builder.addPath( +import io.github.composegears.valkyrie.generator.ext.formatFloat +import io.github.composegears.valkyrie.generator.ext.toColorHex +import io.github.composegears.valkyrie.generator.imagevector.util.PathParams.FillAlphaParam +import io.github.composegears.valkyrie.generator.imagevector.util.PathParams.FillParam +import io.github.composegears.valkyrie.generator.imagevector.util.PathParams.FillTypeParam +import io.github.composegears.valkyrie.generator.imagevector.util.PathParams.StrokeAlphaParam +import io.github.composegears.valkyrie.generator.imagevector.util.PathParams.StrokeColorHexParam +import io.github.composegears.valkyrie.generator.imagevector.util.PathParams.StrokeLineCapParam +import io.github.composegears.valkyrie.generator.imagevector.util.PathParams.StrokeLineJoinParam +import io.github.composegears.valkyrie.generator.imagevector.util.PathParams.StrokeLineMiterParam +import io.github.composegears.valkyrie.generator.imagevector.util.PathParams.StrokeLineWidthParam + +internal fun CodeBlock.Builder.addPath( path: VectorNode.Path, pathBody: CodeBlock.Builder.() -> Unit ) { @@ -146,11 +146,11 @@ private fun CodeBlock.Builder.strokeLineWidthArg(param: StrokeLineWidthParam) { } private fun CodeBlock.Builder.strokeLineCapArg(param: StrokeLineCapParam) { - add("strokeLineCap = %T.%L", androidx.compose.ui.graphics.StrokeCap::class, param.strokeLineCap.name) + add("strokeLineCap = %T.%L", ClassNames.StrokeCap, param.strokeLineCap.name) } private fun CodeBlock.Builder.strokeLineJoinArg(param: StrokeLineJoinParam) { - add("strokeLineJoin = %T.%L", androidx.compose.ui.graphics.StrokeJoin::class, param.strokeLineJoin.name) + add("strokeLineJoin = %T.%L", ClassNames.StrokeJoin, param.strokeLineJoin.name) } private fun CodeBlock.Builder.strokeLineMiterArg(param: StrokeLineMiterParam) { @@ -158,7 +158,7 @@ private fun CodeBlock.Builder.strokeLineMiterArg(param: StrokeLineMiterParam) { } private fun CodeBlock.Builder.pathFillTypeArg(param: FillTypeParam) { - add("pathFillType = %T.%L", PathFillType::class, param.fillType.name) + add("pathFillType = %T.%L", ClassNames.PathFillType, param.fillType.name) } private fun VectorNode.Path.buildPathParams() = buildList { @@ -191,7 +191,7 @@ private fun VectorNode.Path.buildPathParams() = buildList { } } -sealed interface PathParams { +internal sealed interface PathParams { data class FillParam(val fill: Fill) : PathParams data class FillAlphaParam(val fillAlpha: Float) : PathParams data class StrokeColorHexParam(val strokeColorHex: String) : PathParams diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/util/PreviewSpec.kt b/components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/util/PreviewSpec.kt similarity index 90% rename from plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/util/PreviewSpec.kt rename to components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/util/PreviewSpec.kt index f49c277e..3f45fa3a 100644 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/util/PreviewSpec.kt +++ b/components/generator/imagevector/src/main/kotlin/io/github/composegears/valkyrie/generator/imagevector/util/PreviewSpec.kt @@ -1,4 +1,4 @@ -package io.github.composegears.valkyrie.processing.generator.imagevector.util +package io.github.composegears.valkyrie.generator.imagevector.util import androidx.compose.material.icons.generator.ClassNames import androidx.compose.material.icons.generator.MemberNames @@ -8,9 +8,9 @@ import com.squareup.kotlinpoet.FunSpec import com.squareup.kotlinpoet.KModifier import com.squareup.kotlinpoet.MemberName import com.squareup.kotlinpoet.buildCodeBlock -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.funSpecBuilder +import io.github.composegears.valkyrie.generator.ext.funSpecBuilder -fun iconPreviewSpecForNestedPack( +internal fun iconPreviewSpecForNestedPack( iconName: String, iconPackClassName: ClassName ): FunSpec = funSpecBuilder("${iconName}Preview") { @@ -36,7 +36,7 @@ fun iconPreviewSpecForNestedPack( ) } -fun iconPreviewSpec( +internal fun iconPreviewSpec( iconPackage: String, iconName: String, ): FunSpec = funSpecBuilder("${iconName}Preview") { diff --git a/plugin/src/test/kotlin/io/github/composegears/valkyrie/Common.kt b/components/generator/imagevector/src/test/kotlin/io/github/composegears/valkyrie/generator/imagevector/Common.kt similarity index 66% rename from plugin/src/test/kotlin/io/github/composegears/valkyrie/Common.kt rename to components/generator/imagevector/src/test/kotlin/io/github/composegears/valkyrie/generator/imagevector/Common.kt index eced5bf7..f19680bb 100644 --- a/plugin/src/test/kotlin/io/github/composegears/valkyrie/Common.kt +++ b/components/generator/imagevector/src/test/kotlin/io/github/composegears/valkyrie/generator/imagevector/Common.kt @@ -1,6 +1,5 @@ -package io.github.composegears.valkyrie +package io.github.composegears.valkyrie.generator.imagevector -import io.github.composegears.valkyrie.processing.generator.imagevector.ImageVectorGeneratorConfig import java.io.File val DEFAULT_CONFIG = ImageVectorGeneratorConfig( diff --git a/plugin/src/test/kotlin/io/github/composegears/valkyrie/PreviewGenerationTest.kt b/components/generator/imagevector/src/test/kotlin/io/github/composegears/valkyrie/generator/imagevector/PreviewGenerationTest.kt similarity index 93% rename from plugin/src/test/kotlin/io/github/composegears/valkyrie/PreviewGenerationTest.kt rename to components/generator/imagevector/src/test/kotlin/io/github/composegears/valkyrie/generator/imagevector/PreviewGenerationTest.kt index a20c6143..393fa351 100644 --- a/plugin/src/test/kotlin/io/github/composegears/valkyrie/PreviewGenerationTest.kt +++ b/components/generator/imagevector/src/test/kotlin/io/github/composegears/valkyrie/generator/imagevector/PreviewGenerationTest.kt @@ -1,8 +1,6 @@ -package io.github.composegears.valkyrie +package io.github.composegears.valkyrie.generator.imagevector -import io.github.composegears.valkyrie.processing.generator.imagevector.ImageVectorGenerator -import io.github.composegears.valkyrie.processing.generator.imagevector.ImageVectorGeneratorConfig -import io.github.composegears.valkyrie.processing.parser.IconParser +import io.github.composegears.valkyrie.parser.IconParser import org.junit.Assert.assertEquals import org.junit.Test @@ -13,7 +11,8 @@ class PreviewGenerationTest { val icon = loadIcon("ic_without_path.xml") val parserOutput = IconParser.toVector(icon) val output = ImageVectorGenerator.convert( - parserOutput = parserOutput, + vector = parserOutput.vector, + kotlinName = parserOutput.kotlinName, config = ImageVectorGeneratorConfig( packageName = "io.github.composegears.valkyrie.icons", packName = "", @@ -69,7 +68,8 @@ class PreviewGenerationTest { val icon = loadIcon("ic_without_path.xml") val parserOutput = IconParser.toVector(icon) val output = ImageVectorGenerator.convert( - parserOutput = parserOutput, + vector = parserOutput.vector, + kotlinName = parserOutput.kotlinName, config = ImageVectorGeneratorConfig( packageName = "io.github.composegears.valkyrie.icons", packName = "ValkyrieIcons", @@ -125,7 +125,8 @@ class PreviewGenerationTest { val icon = loadIcon("ic_without_path.xml") val parserOutput = IconParser.toVector(icon) val output = ImageVectorGenerator.convert( - parserOutput = parserOutput, + vector = parserOutput.vector, + kotlinName = parserOutput.kotlinName, config = ImageVectorGeneratorConfig( packageName = "io.github.composegears.valkyrie.icons", packName = "ValkyrieIcons", diff --git a/plugin/src/test/kotlin/io/github/composegears/valkyrie/XmlIconParserTest.kt b/components/generator/imagevector/src/test/kotlin/io/github/composegears/valkyrie/generator/imagevector/XmlIconParserTest.kt similarity index 94% rename from plugin/src/test/kotlin/io/github/composegears/valkyrie/XmlIconParserTest.kt rename to components/generator/imagevector/src/test/kotlin/io/github/composegears/valkyrie/generator/imagevector/XmlIconParserTest.kt index 02375c9c..a06c61fa 100644 --- a/plugin/src/test/kotlin/io/github/composegears/valkyrie/XmlIconParserTest.kt +++ b/components/generator/imagevector/src/test/kotlin/io/github/composegears/valkyrie/generator/imagevector/XmlIconParserTest.kt @@ -1,8 +1,6 @@ -package io.github.composegears.valkyrie +package io.github.composegears.valkyrie.generator.imagevector -import io.github.composegears.valkyrie.processing.generator.imagevector.ImageVectorGenerator -import io.github.composegears.valkyrie.processing.generator.imagevector.ImageVectorGeneratorConfig -import io.github.composegears.valkyrie.processing.parser.IconParser +import io.github.composegears.valkyrie.parser.IconParser import org.junit.Assert.assertEquals import org.junit.Test @@ -13,7 +11,8 @@ class XmlIconParserTest { val icon = loadIcon("ic_without_path.xml") val parserOutput = IconParser.toVector(icon) val output = ImageVectorGenerator.convert( - parserOutput = parserOutput, + vector = parserOutput.vector, + kotlinName = parserOutput.kotlinName, config = ImageVectorGeneratorConfig( packageName = "io.github.composegears.valkyrie.icons", packName = "", @@ -55,7 +54,8 @@ class XmlIconParserTest { val icon = loadIcon("ic_without_path.xml") val parserOutput = IconParser.toVector(icon) val output = ImageVectorGenerator.convert( - parserOutput = parserOutput, + vector = parserOutput.vector, + kotlinName = parserOutput.kotlinName, config = ImageVectorGeneratorConfig( packageName = "io.github.composegears.valkyrie.icons", packName = "ValkyrieIcons", @@ -98,7 +98,8 @@ class XmlIconParserTest { val icon = loadIcon("ic_without_path.xml") val parserOutput = IconParser.toVector(icon) val output = ImageVectorGenerator.convert( - parserOutput = parserOutput, + vector = parserOutput.vector, + kotlinName = parserOutput.kotlinName, config = DEFAULT_CONFIG ).content @@ -135,7 +136,8 @@ class XmlIconParserTest { val icon = loadIcon("ic_only_path.xml") val parserOutput = IconParser.toVector(icon) val output = ImageVectorGenerator.convert( - parserOutput = parserOutput, + vector = parserOutput.vector, + kotlinName = parserOutput.kotlinName, config = DEFAULT_CONFIG ).content @@ -184,7 +186,8 @@ class XmlIconParserTest { val icon = loadIcon("ic_fill_color_stroke.xml") val parserOutput = IconParser.toVector(icon) val output = ImageVectorGenerator.convert( - parserOutput = parserOutput, + vector = parserOutput.vector, + kotlinName = parserOutput.kotlinName, config = DEFAULT_CONFIG ).content @@ -238,7 +241,8 @@ class XmlIconParserTest { val icon = loadIcon("ic_all_path_params.xml") val parserOutput = IconParser.toVector(icon) val output = ImageVectorGenerator.convert( - parserOutput = parserOutput, + vector = parserOutput.vector, + kotlinName = parserOutput.kotlinName, config = DEFAULT_CONFIG ).content @@ -302,7 +306,8 @@ class XmlIconParserTest { val icon = loadIcon("ic_several_path.xml") val parserOutput = IconParser.toVector(icon) val output = ImageVectorGenerator.convert( - parserOutput = parserOutput, + vector = parserOutput.vector, + kotlinName = parserOutput.kotlinName, config = DEFAULT_CONFIG ).content diff --git a/plugin/src/test/resources/ic_all_path_params.xml b/components/generator/imagevector/src/test/resources/ic_all_path_params.xml similarity index 100% rename from plugin/src/test/resources/ic_all_path_params.xml rename to components/generator/imagevector/src/test/resources/ic_all_path_params.xml diff --git a/plugin/src/test/resources/ic_fill_color_stroke.xml b/components/generator/imagevector/src/test/resources/ic_fill_color_stroke.xml similarity index 100% rename from plugin/src/test/resources/ic_fill_color_stroke.xml rename to components/generator/imagevector/src/test/resources/ic_fill_color_stroke.xml diff --git a/plugin/src/test/resources/ic_only_path.xml b/components/generator/imagevector/src/test/resources/ic_only_path.xml similarity index 100% rename from plugin/src/test/resources/ic_only_path.xml rename to components/generator/imagevector/src/test/resources/ic_only_path.xml diff --git a/plugin/src/test/resources/ic_several_path.xml b/components/generator/imagevector/src/test/resources/ic_several_path.xml similarity index 100% rename from plugin/src/test/resources/ic_several_path.xml rename to components/generator/imagevector/src/test/resources/ic_several_path.xml diff --git a/plugin/src/test/resources/ic_without_path.xml b/components/generator/imagevector/src/test/resources/ic_without_path.xml similarity index 100% rename from plugin/src/test/resources/ic_without_path.xml rename to components/generator/imagevector/src/test/resources/ic_without_path.xml diff --git a/google/build.gradle.kts b/components/google/build.gradle.kts similarity index 100% rename from google/build.gradle.kts rename to components/google/build.gradle.kts diff --git a/google/src/main/kotlin/androidx/compose/material/icons/generator/GraphicUnit.kt b/components/google/src/main/kotlin/androidx/compose/material/icons/generator/GraphicUnit.kt similarity index 100% rename from google/src/main/kotlin/androidx/compose/material/icons/generator/GraphicUnit.kt rename to components/google/src/main/kotlin/androidx/compose/material/icons/generator/GraphicUnit.kt diff --git a/google/src/main/kotlin/androidx/compose/material/icons/generator/Icon.kt b/components/google/src/main/kotlin/androidx/compose/material/icons/generator/Icon.kt similarity index 100% rename from google/src/main/kotlin/androidx/compose/material/icons/generator/Icon.kt rename to components/google/src/main/kotlin/androidx/compose/material/icons/generator/Icon.kt diff --git a/google/src/main/kotlin/androidx/compose/material/icons/generator/IconParser.kt b/components/google/src/main/kotlin/androidx/compose/material/icons/generator/IconParser.kt similarity index 100% rename from google/src/main/kotlin/androidx/compose/material/icons/generator/IconParser.kt rename to components/google/src/main/kotlin/androidx/compose/material/icons/generator/IconParser.kt diff --git a/google/src/main/kotlin/androidx/compose/material/icons/generator/Names.kt b/components/google/src/main/kotlin/androidx/compose/material/icons/generator/Names.kt similarity index 75% rename from google/src/main/kotlin/androidx/compose/material/icons/generator/Names.kt rename to components/google/src/main/kotlin/androidx/compose/material/icons/generator/Names.kt index df69b80b..ef55b78a 100644 --- a/google/src/main/kotlin/androidx/compose/material/icons/generator/Names.kt +++ b/components/google/src/main/kotlin/androidx/compose/material/icons/generator/Names.kt @@ -39,9 +39,12 @@ enum class PackageNames(val packageName: String) { */ object ClassNames { val ImageVector = PackageNames.VectorPackage.className("ImageVector") - val PathFillType = PackageNames.GraphicsPackage.className("PathFillType", CompanionImportName) - val StrokeCap = PackageNames.GraphicsPackage.className("StrokeCap", CompanionImportName) - val StrokeJoin = PackageNames.GraphicsPackage.className("StrokeJoin", CompanionImportName) + val PathFillTypeWithCompanion = PackageNames.GraphicsPackage.className("PathFillType", CompanionImportName) + val PathFillType = PackageNames.GraphicsPackage.className("PathFillType") + val StrokeCapWithCompanion = PackageNames.GraphicsPackage.className("StrokeCap", CompanionImportName) + val StrokeCap = PackageNames.GraphicsPackage.className("StrokeCap") + val StrokeJoinWithCompanion = PackageNames.GraphicsPackage.className("StrokeJoin", CompanionImportName) + val StrokeJoin = PackageNames.GraphicsPackage.className("StrokeJoin") val Brush = PackageNames.GraphicsPackage.className("Brush", CompanionImportName) val Preview = PackageNames.PreviewPackage.className("Preview") val Composable = PackageNames.RuntimePackage.className("Composable") @@ -53,18 +56,18 @@ object ClassNames { object MemberNames { val Path = MemberName(PackageNames.VectorPackage.packageName, "path") - val EvenOdd = MemberName(ClassNames.PathFillType, "EvenOdd") - val NonZero = MemberName(ClassNames.PathFillType, "NonZero") + val EvenOdd = MemberName(ClassNames.PathFillTypeWithCompanion, "EvenOdd") + val NonZero = MemberName(ClassNames.PathFillTypeWithCompanion, "NonZero") val Group = MemberName(PackageNames.VectorPackage.packageName, "group") - val StrokeCapButt = MemberName(ClassNames.StrokeCap, "Butt") - val StrokeCapRound = MemberName(ClassNames.StrokeCap, "Round") - val StrokeCapSquare = MemberName(ClassNames.StrokeCap, "Square") + val StrokeCapButt = MemberName(ClassNames.StrokeCapWithCompanion, "Butt") + val StrokeCapRound = MemberName(ClassNames.StrokeCapWithCompanion, "Round") + val StrokeCapSquare = MemberName(ClassNames.StrokeCapWithCompanion, "Square") - val StrokeJoinMiter = MemberName(ClassNames.StrokeJoin, "Miter") - val StrokeJoinRound = MemberName(ClassNames.StrokeJoin, "Round") - val StrokeJoinBevel = MemberName(ClassNames.StrokeJoin, "Bevel") + val StrokeJoinMiter = MemberName(ClassNames.StrokeJoinWithCompanion, "Miter") + val StrokeJoinRound = MemberName(ClassNames.StrokeJoinWithCompanion, "Round") + val StrokeJoinBevel = MemberName(ClassNames.StrokeJoinWithCompanion, "Bevel") val Dp = MemberName(PackageNames.Unit.packageName, "dp") val Modifier = MemberName(PackageNames.UiPackage.packageName, "Modifier") diff --git a/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/FillType.kt b/components/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/FillType.kt similarity index 100% rename from google/src/main/kotlin/androidx/compose/material/icons/generator/vector/FillType.kt rename to components/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/FillType.kt diff --git a/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathNode.kt b/components/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathNode.kt similarity index 100% rename from google/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathNode.kt rename to components/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathNode.kt diff --git a/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathParser.kt b/components/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathParser.kt similarity index 100% rename from google/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathParser.kt rename to components/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathParser.kt diff --git a/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/StrokeCap.kt b/components/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/StrokeCap.kt similarity index 100% rename from google/src/main/kotlin/androidx/compose/material/icons/generator/vector/StrokeCap.kt rename to components/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/StrokeCap.kt diff --git a/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/StrokeJoin.kt b/components/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/StrokeJoin.kt similarity index 100% rename from google/src/main/kotlin/androidx/compose/material/icons/generator/vector/StrokeJoin.kt rename to components/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/StrokeJoin.kt diff --git a/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/Vector.kt b/components/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/Vector.kt similarity index 100% rename from google/src/main/kotlin/androidx/compose/material/icons/generator/vector/Vector.kt rename to components/google/src/main/kotlin/androidx/compose/material/icons/generator/vector/Vector.kt diff --git a/components/parser/build.gradle.kts b/components/parser/build.gradle.kts new file mode 100644 index 00000000..755be242 --- /dev/null +++ b/components/parser/build.gradle.kts @@ -0,0 +1,15 @@ +plugins { + alias(libs.plugins.kotlin.jvm) +} + +repositories { + google() + mavenCentral() +} + +dependencies { + api(projects.components.google) + + implementation(libs.android.build.tools) + implementation(libs.kotlin.io) +} \ No newline at end of file diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/parser/IconParser.kt b/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconParser.kt similarity index 76% rename from plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/parser/IconParser.kt rename to components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconParser.kt index fbb0a5d6..957a3705 100644 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/parser/IconParser.kt +++ b/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconParser.kt @@ -1,13 +1,12 @@ -package io.github.composegears.valkyrie.processing.parser +package io.github.composegears.valkyrie.parser -import ai.grazie.utils.capitalize -import ai.grazie.utils.dropPostfix import androidx.compose.material.icons.generator.Icon import androidx.compose.material.icons.generator.IconParser import androidx.compose.material.icons.generator.vector.Vector -import io.github.composegears.valkyrie.processing.parser.IconType.SVG -import io.github.composegears.valkyrie.processing.parser.IconType.XML +import io.github.composegears.valkyrie.parser.IconType.SVG +import io.github.composegears.valkyrie.parser.IconType.XML import java.io.File +import java.util.* import kotlin.io.path.createTempFile import kotlin.io.path.readText @@ -49,15 +48,20 @@ object IconParser { } private fun getFileName(file: File, iconType: IconType): String { + var name = file.name - .dropPostfix(".${iconType.extension}") + .removeSuffix(".${iconType.extension}") .split("_") - .joinToString("") { it.capitalize() } + .joinToString("") { it.capitalized() } .replace("\\d".toRegex(), "") if (name.startsWith("ic", ignoreCase = true)) { - name = name.drop(2).capitalize() + name = name.drop(2).capitalized() } return name } +} + +private fun String.capitalized(): String = replaceFirstChar { + if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } \ No newline at end of file diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/parser/IconTypeParser.kt b/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconTypeParser.kt similarity index 69% rename from plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/parser/IconTypeParser.kt rename to components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconTypeParser.kt index 48bbb90f..88e484b3 100644 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/parser/IconTypeParser.kt +++ b/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconTypeParser.kt @@ -1,6 +1,6 @@ -package io.github.composegears.valkyrie.processing.parser +package io.github.composegears.valkyrie.parser -object IconTypeParser { +internal object IconTypeParser { fun getIconType(fileExtension: String): IconType? = when { IconType.SVG.extension.equals(fileExtension, ignoreCase = true) -> IconType.SVG @@ -9,7 +9,7 @@ object IconTypeParser { } } -enum class IconType(val extension: String) { +internal enum class IconType(val extension: String) { SVG("svg"), XML("xml"), } \ No newline at end of file diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/parser/SvgToXmlParser.kt b/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/SvgToXmlParser.kt similarity index 83% rename from plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/parser/SvgToXmlParser.kt rename to components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/SvgToXmlParser.kt index ae71577e..ce3b53c5 100644 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/parser/SvgToXmlParser.kt +++ b/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/SvgToXmlParser.kt @@ -1,4 +1,4 @@ -package io.github.composegears.valkyrie.processing.parser +package io.github.composegears.valkyrie.parser import com.android.ide.common.vectordrawable.Svg2Vector import java.io.File diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index aa550f53..b105e362 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,6 +6,8 @@ android-build-tools = "com.android.tools:sdk-common:31.5.0" koin-compose = "io.insert-koin:koin-compose:1.1.5" +kotlin-io = "org.jetbrains.kotlinx:kotlinx-io-core:0.4.0" + kotlinpoet = "com.squareup:kotlinpoet:1.17.0" kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" } diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts index b786b755..da524de6 100644 --- a/plugin/build.gradle.kts +++ b/plugin/build.gradle.kts @@ -23,7 +23,9 @@ repositories { } dependencies { - implementation(projects.google) + implementation(projects.components.generator.iconpack) + implementation(projects.components.generator.imagevector) + implementation(projects.components.parser) compileOnly(compose.desktop.currentOs) implementation(compose.desktop.macos_arm64) @@ -34,12 +36,9 @@ dependencies { implementation(libs.android.build.tools) implementation(libs.koin.compose) - implementation(libs.kotlinpoet) implementation(libs.multiplatform.filepicker) implementation(libs.tiamat) implementation(libs.tiamat.koin) - - testImplementation(libs.kotlin.test) } compose.resources { diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/iconpack/IconPackGenerator.kt b/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/iconpack/IconPackGenerator.kt deleted file mode 100644 index ebe5ea78..00000000 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/iconpack/IconPackGenerator.kt +++ /dev/null @@ -1,39 +0,0 @@ -package io.github.composegears.valkyrie.processing.generator.iconpack - -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.fileSpecBuilder -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.objectBuilder -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.removeDeadCode -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.setIndent - -data class IconPackGeneratorConfig( - val packageName: String, - val iconPackName: String, - val subPacks: List -) - -data class IconPackGeneratorResult( - val content: String, - val name: String -) - -class IconPackGenerator(private val config: IconPackGeneratorConfig) { - - fun generate(): IconPackGeneratorResult { - val iconPackSpec = objectBuilder(name = config.iconPackName) { - config.subPacks.forEach { icon -> - addType(objectBuilder(name = icon)) - } - } - val fileSpec = fileSpecBuilder( - packageName = config.packageName, - fileName = config.iconPackName - ) { - addType(iconPackSpec) - setIndent() - } - return IconPackGeneratorResult( - content = fileSpec.removeDeadCode(), - name = fileSpec.name - ) - } -} \ No newline at end of file diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/util/BackingPropertySpec.kt b/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/util/BackingPropertySpec.kt deleted file mode 100644 index 620fe1ca..00000000 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/processing/generator/imagevector/util/BackingPropertySpec.kt +++ /dev/null @@ -1,17 +0,0 @@ -package io.github.composegears.valkyrie.processing.generator.imagevector.util - -import com.squareup.kotlinpoet.KModifier -import com.squareup.kotlinpoet.TypeName -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.nullable -import io.github.composegears.valkyrie.processing.generator.imagevector.ext.propertySpecBuilder - -fun String.backingPropertyName() = "_$this" - -internal fun backingPropertySpec( - name: String, - type: TypeName -) = propertySpecBuilder(name = name, type = type.nullable()) { - mutable() - addModifiers(KModifier.PRIVATE) - initializer("null") -} \ No newline at end of file diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/IconPackConversionViewModel.kt b/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/IconPackConversionViewModel.kt index 9e7c32c5..e55735af 100644 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/IconPackConversionViewModel.kt +++ b/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/IconPackConversionViewModel.kt @@ -1,10 +1,10 @@ package io.github.composegears.valkyrie.ui.screen.mode.iconpack.conversion import com.composegears.tiamat.TiamatViewModel -import io.github.composegears.valkyrie.processing.generator.imagevector.ImageVectorGenerator -import io.github.composegears.valkyrie.processing.generator.imagevector.ImageVectorGeneratorConfig -import io.github.composegears.valkyrie.processing.generator.imagevector.ImageVectorSpecOutput -import io.github.composegears.valkyrie.processing.parser.IconParser +import io.github.composegears.valkyrie.generator.imagevector.ImageVectorGenerator +import io.github.composegears.valkyrie.generator.imagevector.ImageVectorGeneratorConfig +import io.github.composegears.valkyrie.generator.imagevector.ImageVectorSpecOutput +import io.github.composegears.valkyrie.parser.IconParser import io.github.composegears.valkyrie.processing.writter.FileWriter import io.github.composegears.valkyrie.settings.InMemorySettings import io.github.composegears.valkyrie.settings.ValkyriesSettings @@ -88,7 +88,8 @@ class IconPackConversionViewModel( val parserOutput = IconParser.toVector(icon.file) ImageVectorGenerator.convert( - parserOutput = parserOutput, + vector = parserOutput.vector, + kotlinName = parserOutput.kotlinName, config = ImageVectorGeneratorConfig( packageName = icon.iconPack.iconPackage, packName = valkyriesSettings.value.iconPackName, @@ -114,7 +115,8 @@ class IconPackConversionViewModel( is IconPack.Nested -> { val parserOutput = IconParser.toVector(icon.file) val vectorSpecOutput = ImageVectorGenerator.convert( - parserOutput = parserOutput, + vector = parserOutput.vector, + kotlinName = parserOutput.kotlinName, config = ImageVectorGeneratorConfig( packageName = icon.iconPack.iconPackage, packName = valkyriesSettings.value.iconPackName, @@ -132,7 +134,8 @@ class IconPackConversionViewModel( is IconPack.Single -> { val parserOutput = IconParser.toVector(icon.file) val vectorSpecOutput = ImageVectorGenerator.convert( - parserOutput = parserOutput, + vector = parserOutput.vector, + kotlinName = parserOutput.kotlinName, config = ImageVectorGeneratorConfig( packageName = icon.iconPack.iconPackage, packName = valkyriesSettings.value.iconPackName, diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/util/FileToPainter.kt b/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/util/FileToPainter.kt index f0f6311c..00ea012a 100644 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/util/FileToPainter.kt +++ b/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/util/FileToPainter.kt @@ -3,7 +3,7 @@ package io.github.composegears.valkyrie.ui.screen.mode.iconpack.conversion.util import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.toPainter import com.android.ide.common.vectordrawable.VdPreview -import io.github.composegears.valkyrie.processing.parser.SvgToXmlParser +import io.github.composegears.valkyrie.parser.SvgToXmlParser import java.io.File import kotlin.io.path.createTempFile import kotlin.io.path.readText diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/creation/IconPackCreationViewModel.kt b/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/creation/IconPackCreationViewModel.kt index 4f053c00..7a677dd5 100644 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/creation/IconPackCreationViewModel.kt +++ b/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/creation/IconPackCreationViewModel.kt @@ -3,8 +3,8 @@ package io.github.composegears.valkyrie.ui.screen.mode.iconpack.creation import com.composegears.tiamat.TiamatViewModel import com.intellij.openapi.application.writeAction import com.intellij.openapi.vfs.VirtualFileManager -import io.github.composegears.valkyrie.processing.generator.iconpack.IconPackGenerator -import io.github.composegears.valkyrie.processing.generator.iconpack.IconPackGeneratorConfig +import io.github.composegears.valkyrie.generator.iconpack.IconPackGenerator +import io.github.composegears.valkyrie.generator.iconpack.IconPackGeneratorConfig import io.github.composegears.valkyrie.processing.writter.FileWriter import io.github.composegears.valkyrie.settings.InMemorySettings import io.github.composegears.valkyrie.settings.ValkyriesSettings @@ -43,13 +43,13 @@ class IconPackCreationViewModel( nestedPacks = inputFieldState.nestedPacks, nextAvailable = inputFieldState.noErrors(), packPreview = if (inputFieldState.noErrors()) { - IconPackGenerator( + IconPackGenerator.create( config = IconPackGeneratorConfig( packageName = inputFieldState.packageName.text, iconPackName = inputFieldState.iconPackName.text, subPacks = inputFieldState.nestedPacks.map { it.inputFieldState.text } ) - ).generate().content + ).content } else { "" } @@ -74,13 +74,13 @@ class IconPackCreationViewModel( inMemorySettings.updateNestedPack(fieldState.nestedPacks.map { it.inputFieldState.text }) inMemorySettings.updateMode(Mode.IconPack) - val iconPack = IconPackGenerator( + val iconPack = IconPackGenerator.create( config = IconPackGeneratorConfig( packageName = inMemorySettings.current.packageName, iconPackName = inMemorySettings.current.iconPackName, subPacks = inMemorySettings.current.nestedPacks ) - ).generate() + ) FileWriter.writeToFile( content = iconPack.content, diff --git a/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/simple/conversion/SimpleConversionViewModel.kt b/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/simple/conversion/SimpleConversionViewModel.kt index 939cdb38..db42c7d9 100644 --- a/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/simple/conversion/SimpleConversionViewModel.kt +++ b/plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/simple/conversion/SimpleConversionViewModel.kt @@ -1,9 +1,9 @@ package io.github.composegears.valkyrie.ui.screen.mode.simple.conversion import com.composegears.tiamat.TiamatViewModel -import io.github.composegears.valkyrie.processing.generator.imagevector.ImageVectorGenerator -import io.github.composegears.valkyrie.processing.generator.imagevector.ImageVectorGeneratorConfig -import io.github.composegears.valkyrie.processing.parser.IconParser +import io.github.composegears.valkyrie.generator.imagevector.ImageVectorGenerator +import io.github.composegears.valkyrie.generator.imagevector.ImageVectorGeneratorConfig +import io.github.composegears.valkyrie.parser.IconParser import io.github.composegears.valkyrie.settings.InMemorySettings import io.github.composegears.valkyrie.settings.ValkyriesSettings import io.github.composegears.valkyrie.ui.extension.updateState @@ -36,7 +36,8 @@ class SimpleConversionViewModel( val output = runCatching { val parserOutput = IconParser.toVector(file) ImageVectorGenerator.convert( - parserOutput = parserOutput, + vector = parserOutput.vector, + kotlinName = parserOutput.kotlinName, config = ImageVectorGeneratorConfig( packageName = valkyriesSettings.packageName, packName = "", diff --git a/settings.gradle.kts b/settings.gradle.kts index f0083c96..de219108 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -10,4 +10,9 @@ pluginManagement { rootProject.name = "valkyrie" include("plugin") -include("google") \ No newline at end of file + +include("components:google") +include("components:generator:common") +include("components:generator:iconpack") +include("components:generator:imagevector") +include("components:parser") \ No newline at end of file