build.sc
changeset 21 175e7d7ce5b3
parent 20 529418651908
child 22 35f19c3873e2
equal deleted inserted replaced
20:529418651908 21:175e7d7ce5b3
    64 
    64 
    65   override def sources: Sources = T.sources{
    65   override def sources: Sources = T.sources{
    66     super.sources() :+ PathRef(millSourcePath / 'shared / 'src / 'main / 'scala)
    66     super.sources() :+ PathRef(millSourcePath / 'shared / 'src / 'main / 'scala)
    67   }
    67   }
    68 
    68 
       
    69   // https://github.com/FortAwesome/Font-Awesome/raw/5.6.3/metadata/icons.json
       
    70   type IcoDef = (String, Set[String])
       
    71   def parseIcons: Target[List[IcoDef]] = T{
       
    72     ujson.read(os.read! pwd / "icons.json").obj.map(e => (e._1, e._2.obj("styles").arr.map(_.str).toSet)).toList
       
    73   }
       
    74 
       
    75   private def tpl(d: IcoDef): String = {
       
    76     val sym = d._1 match {
       
    77       //case "clone" => "clone_"
       
    78       case x => x
       
    79     }
       
    80     d._2.map {
       
    81       case "brands" => s"""      val `fab-$sym`: T = fab("${d._1}")\n"""
       
    82       case "solid" => s"""      val `fas-$sym`: T = fas("${d._1}")\n"""
       
    83       case "regular" => s"""      val `far-$sym`: T = far("${d._1}")\n"""
       
    84     }.mkString
       
    85   }
       
    86 
       
    87   override def generatedSources: Sources = T.sources{
       
    88     val d = T.ctx().dest
       
    89     val icons = parseIcons()
       
    90     write(d / "generated.scala",
       
    91       s"""
       
    92         | package fontawesome.generic
       
    93         | import scalatags.generic._
       
    94         | class GenericFA[Builder, Output <: FragT, FragT](
       
    95         |   val bun: Bundle[Builder, Output, FragT]) {
       
    96         |
       
    97         |   import bun.all._
       
    98         |
       
    99         |   type T = FA[Builder, Output, FragT]
       
   100         |
       
   101         |   val faStack: Modifier = cls := "fa-stack fa-lg"
       
   102         |
       
   103         |   implicit val bundle: Bundle[Builder, Output, FragT] = bun
       
   104         |   implicit def fa2tag(x: T): TypedTag[Builder, Output, FragT] = x()
       
   105         |
       
   106         |   private def fab(w: String): T = FA(FaStyle.Brands, w)
       
   107         |   private def far(w: String): T = FA(FaStyle.Regular, w)
       
   108         |   private def fas(w: String): T = FA(FaStyle.Solid, w)
       
   109         |
       
   110         |   ${icons map(tpl) mkString}
       
   111         |
       
   112         |   /*
       
   113         |   object fab {
       
   114         |     private def fa(w: String): T = FA(FaStyle.Brands, w)
       
   115         |     {icons.filter(_._2.contains("brands")).map(tpl).mkString}
       
   116         |   }
       
   117         |
       
   118         |   object fas {
       
   119         |     private def fa(w: String): T = FA(FaStyle.Solid, w)
       
   120         |     {icons.filter(_._2.contains("solid")).map(tpl).mkString}
       
   121         |   }
       
   122         |
       
   123         |   object far {
       
   124         |     private def fa(w: String): T = FA(FaStyle.Regular, w)
       
   125         |     {icons.filter(_._2.contains("regular")).map(tpl).mkString}
       
   126         |   }
       
   127         |   */
       
   128         |
       
   129         | }
       
   130       """.stripMargin)
       
   131     d
       
   132   }
    69 }
   133 }
    70 
   134 
    71 class JvmModule(val crossScalaVersion: String) extends Common
   135 class JvmModule(val crossScalaVersion: String) extends Common
    72 class JsModule(val crossScalaVersion: String) extends ScalaJSModule
   136 class JsModule(val crossScalaVersion: String) extends ScalaJSModule
    73   with Common {
   137   with Common {
    83   jvm(V.scala211).publishLocal()()
   147   jvm(V.scala211).publishLocal()()
    84   js(V.scala211).publishLocal()()
   148   js(V.scala211).publishLocal()()
    85 }
   149 }
    86 
   150 
    87 object example extends ScalaModule with ScalaJSModule {
   151 object example extends ScalaModule with ScalaJSModule {
    88   override def moduleDeps: Seq[PublishModule] = Seq(js(V.scala212))
       
    89   override def scalaVersion: Target[String] = T{V.scala212}
   152   override def scalaVersion: Target[String] = T{V.scala212}
    90   override def scalaJSVersion: Target[String] = V.scalaJs
   153   override def scalaJSVersion: Target[String] = V.scalaJs
       
   154 
       
   155 
       
   156   /* Ugly hack to prevent
       
   157    * "Referring to non-existent method fontawesome.generic.FA... error"
       
   158    */
       
   159   //override def moduleDeps: Seq[PublishModule] = Seq(js(V.scala212))
       
   160   override def ivyDeps: Target[Loose.Agg[Dep]] = Agg(D.scalatags)
       
   161   override def sources: Sources = T.sources{super.sources() ++ js(V.scala212).sources()}
       
   162   override def generatedSources = T{js(V.scala212).generatedSources()}
    91 }
   163 }
    92 
   164 
       
   165 
    93 // vim: et ts=2 sw=2 syn=scala
   166 // vim: et ts=2 sw=2 syn=scala