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 |