build.sc
changeset 25 950431e16cb4
parent 24 782f121133c7
child 26 6ba55bf93ab7
--- a/build.sc	Thu Jan 17 18:29:45 2019 +0100
+++ b/build.sc	Tue Jan 29 22:11:06 2019 +0100
@@ -6,6 +6,8 @@
 import mill.scalalib.publish._
 import mill.util.Loose
 
+import scala.language.postfixOps
+
 object V {
   val fatags = "0.5-SNAPSHOT"
   val scalaJs = "0.6.26"
@@ -17,6 +19,16 @@
   val scalatags = ivy"com.lihaoyi::scalatags::0.6.7"
 }
 
+def camelCase(s: String): String = {
+  def inner(l: List[Char]): List[Char] = l match {
+    case '-' :: '-' :: c :: rest => c.toUpper :: inner(rest)
+    case '-' :: c :: rest => c.toUpper :: inner(rest)
+    case c :: rest => c :: inner(rest)
+    case Nil => Nil
+  }
+  inner(s toList) mkString ""
+}
+
 trait Common extends CrossSbtModule with PublishModule {
 
   def publishVersion: Target[String] = V.fatags
@@ -73,14 +85,11 @@
   }
 
   private def tpl(d: IcoDef): String = {
-    val sym = d._1 match {
-      //case "clone" => "clone_"
-      case x => x
-    }
+    val sym = d._1
     d._2.map {
-      case "brands" => s"""      val `fab-$sym`: T = fab("${d._1}")\n"""
-      case "solid" => s"""      val `fas-$sym`: T = fas("${d._1}")\n"""
-      case "regular" => s"""      val `far-$sym`: T = far("${d._1}")\n"""
+      case "brands" =>  s"""      val ${camelCase(s"fab-$sym")}: T = fab("$sym")\n"""
+      case "solid" =>   s"""      val ${camelCase(s"fas-$sym")}: T = fas("$sym")\n"""
+      case "regular" => s"""      val ${camelCase(s"far-$sym")}: T = far("$sym")\n"""
     }.mkString
   }
 
@@ -107,24 +116,7 @@
         |   private def far(w: String): T = FA(FaStyle.Regular, w)
         |   private def fas(w: String): T = FA(FaStyle.Solid, w)
         |
-        |   ${icons map(tpl) mkString}
-        |
-        |   /*
-        |   object fab {
-        |     private def fa(w: String): T = FA(FaStyle.Brands, w)
-        |     {icons.filter(_._2.contains("brands")).map(tpl).mkString}
-        |   }
-        |
-        |   object fas {
-        |     private def fa(w: String): T = FA(FaStyle.Solid, w)
-        |     {icons.filter(_._2.contains("solid")).map(tpl).mkString}
-        |   }
-        |
-        |   object far {
-        |     private def fa(w: String): T = FA(FaStyle.Regular, w)
-        |     {icons.filter(_._2.contains("regular")).map(tpl).mkString}
-        |   }
-        |   */
+        |   ${icons map tpl mkString}
         |
         | }
       """.stripMargin)