build.sc
changeset 43 1152fc8faf63
parent 42 e6e070b3a80f
child 44 ad85035e4d90
equal deleted inserted replaced
42:e6e070b3a80f 43:1152fc8faf63
   101   type IcoDef = (String, Set[String])
   101   type IcoDef = (String, Set[String])
   102   def parseIcons: Target[List[IcoDef]] = T{
   102   def parseIcons: Target[List[IcoDef]] = T{
   103     ujson.read(os.read! pwd / "icons.json").obj.map(e => (e._1, e._2.obj("styles").arr.map(_.str).toSet)).toList
   103     ujson.read(os.read! pwd / "icons.json").obj.map(e => (e._1, e._2.obj("styles").arr.map(_.str).toSet)).toList
   104   }
   104   }
   105 
   105 
   106   private def tpl(d: IcoDef): String = {
   106   private def tpl(d: IcoDef): Set[String] = {
   107     val sym = d._1
   107     val sym = d._1
   108     d._2.map {
   108     d._2.map {
   109       case "brands" =>  s"""      val ${camelCase(s"fab-$sym")}: T = fab("$sym")\n"""
   109       case "brands" =>  s"""  def ${camelCase(s"fab-$sym")}: FA = fab("$sym")"""
   110       case "solid" =>   s"""      val ${camelCase(s"fas-$sym")}: T = fas("$sym")\n"""
   110       case "solid" =>   s"""  def ${camelCase(s"fas-$sym")}: FA = fas("$sym")"""
   111       case "regular" => s"""      val ${camelCase(s"far-$sym")}: T = far("$sym")\n"""
   111       case "regular" => s"""  def ${camelCase(s"far-$sym")}: FA = far("$sym")"""
   112     }.mkString
   112     }
   113   }
   113   }
   114 
   114 
   115   override def generatedSources: Sources = T.sources{
   115   override def generatedSources: Sources = T.sources{
   116     val d = T.ctx().dest
   116     val d = T.ctx().dest
   117     val icons = parseIcons()
   117     val icons = parseIcons()
   118     write(d / "generated.scala",
   118     write(d / "generated.scala",
   119       s"""
   119       s"""
   120         | package fontawesome.generic
   120         |package fontawesome.generic
   121         | import scalatags.generic._
   121         |import scalatags.generic._
   122         | class GenericFA[Builder, Output <: FragT, FragT](
   122         |class GenericFA[Builder, Output <: FragT, FragT](
   123         |   val bun: Bundle[Builder, Output, FragT]) {
   123         |  val bun: Bundle[Builder, Output, FragT]) {
   124         |
   124         |
   125         |   import bun.all._
   125         |  import bun.all._
   126         |
   126         |
   127         |   type T = FA[Builder, Output, FragT]
   127         |  val faStack: Modifier = cls := "fa-stack fa-lg"
   128         |
   128         |
   129         |   val faStack: Modifier = cls := "fa-stack fa-lg"
   129         |  implicit val bundle: Bundle[Builder, Output, FragT] = bun
   130         |
   130         |  //implicit def fa2tag(x: FA): TypedTag[Builder, Output, FragT] = x()
   131         |   implicit val bundle: Bundle[Builder, Output, FragT] = bun
   131         |  implicit def fa2mod(x: FA): Modifier = x()
   132         |   implicit def fa2tag(x: T): TypedTag[Builder, Output, FragT] = x()
   132         |
   133         |
   133         |  private def fab(w: String): FA = FA(FaStyle.Brands, w)
   134         |   private def fab(w: String): T = FA(FaStyle.Brands, w)
   134         |  private def far(w: String): FA = FA(FaStyle.Regular, w)
   135         |   private def far(w: String): T = FA(FaStyle.Regular, w)
   135         |  private def fas(w: String): FA = FA(FaStyle.Solid, w)
   136         |   private def fas(w: String): T = FA(FaStyle.Solid, w)
   136         |
   137         |
   137         |${icons flatMap tpl mkString "\n"}
   138         |   ${icons map tpl mkString}
   138         |
   139         |
   139         |}
   140         | }
       
   141       """.stripMargin)
   140       """.stripMargin)
   142     d
   141     d
   143   }
   142   }
   144 }
   143 }
   145 
   144