@ file : Suppress (" Same Parameter Value ", Ġ" unused ") Ċ Ċ package Ġcom . chr yn an . target . plugin Ċ Ċ import Ġcom . chr yn an . target . core . Kotlin Target Container Ċ import Ġcom . chr yn an . target . plugin . util . Color Handler Ċ import Ġcom . chr yn an . target . plugin . util . file Ċ import Ġcom . chr yn an . target . plugin . util . timestamp For Now Ċ import Ġorg . gradle . api . Plugin Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . jetbrains . kotlin . gradle . dsl . Kotlin Multi platform Extension Ċ Ċ class ĠTarget Plugin Ġ: ĠPlugin < Project > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmapper Ġ= ĠKotlin Target Mapper () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠGROUP _ NAME Ġ= Ġ" kotlin Target " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTASK _ NAME Ġ= Ġ" generate Kotlin Target Data " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ JSON _ FILE _ NAME Ġ= Ġ" targets . json " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ SVG _ FILE _ NAME _ PREFIX Ġ= Ġ" target _" ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ SVG _ SUB _ DIRECTORY Ġ= Ġ" svg " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ OUTPUT _ SUB _ DIRECTORY Ġ= Ġ" targets " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġapply ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġproject . extensions . create ( Target Extension . EXTENSION _ NAME , ĠTarget Extension :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġproject . tasks . register ( TASK _ NAME ) Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . group Ġ= ĠGROUP _ NAME ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk mp Extension Ġ= Ġproject . extensions . get ByName (" kotlin ") Ġas ĠKotlin Multi platform Extension ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . do First Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Path Ġ= Ġextension . output Path Ġ?: Ġ"${ project . project Dir . path }/ $ DEFAULT _ OUTPUT _ SUB _ DIRECTORY " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension . generate Json ) Ġgenerate Json ( output Path , Ġk mp Extension ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension . generate Svg ) Ġgenerate Sv gs ( output Path , Ġextension . colors , Ġk mp Extension ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Json ( output Path : ĠString , Ġk mp Extension : ĠKotlin Multi platform Extension ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfile ( directory Path Ġ= Ġoutput Path , ĠfileName Ġ= ĠDEFAULT _ JSON _ FILE _ NAME ) ĊĊĠĠĠĠĠĠĠ Ġfile . parent File . mkdir s () ĊĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) Ġfile . createNew File () ĊĊĠĠĠĠĠĠĠ Ġval Ġtargets Ġ= Ġk mp Extension . targets . map Ġ{ Ġmapper . map ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= ĠKotlin Target Container ( last Updated Ġ= Ġtimestamp For Now (), Ġtargets Ġ= Ġtargets ) ĊĊĠĠĠĠĠĠĠ Ġfile . write Text ( container . toJson String ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Sv gs ( ĊĠĠĠĠĠĠĠ Ġoutput Path : ĠString , ĊĠĠĠĠĠĠĠ Ġcolors : ĠList < Kotlin Target Color > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġk mp Extension : ĠKotlin Multi platform Extension ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtargets Ġ= Ġk mp Extension . targets . map Ġ{ Ġmapper . map ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcolor Handler Ġ= ĠColor Handler ( colors ) ĊĊĠĠĠĠĠĠĠ Ġtargets . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Path Ġ= Ġif Ġ( output Path . endsWith ("/ ")) Ġoutput Path Ġelse Ġ"$ output Path /" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirectory Path Ġ= Ġstart Path Ġ+ ĠDEFAULT _ SVG _ SUB _ DIRECTORY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfileName Ġ= Ġget Svg FileName ( file Prefix Ġ= ĠDEFAULT _ SVG _ FILE _ NAME _ PREFIX , Ġtarget Name Ġ= Ġit . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . parent File . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) Ġfile . createNew File () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġit . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbackgroundColor Ġ= Ġcolor Handler . get BackgroundColor ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextColor Ġ= Ġcolor Handler . getText Color ( text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Text Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| <? xml Ġversion =" 1 . 0 " Ġencoding =" utf - 8 "?> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| <! DOCTYPE Ġsvg ĠPUBLIC Ġ"-// W 3 C // DTD ĠSVG Ġ 1 . 1 // EN " Ġ" http :// www . w 3 . org / Graphics / SVG / 1 . 1 / DTD / svg 1 1 . dtd "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|< svg Ġxmlns =" https :// www . w 3 . org / 2 0 0 0 / svg " Ġxmlns : xlink = Ġ" http :// www . w 3 . org / 1 9 9 9 / xlink " Ġwidth =" 2 0 0 " Ġheight =" 1 0 0 " ĠviewBox =" 0 Ġ 0 Ġ 2 0 0 Ġ 1 0 0 "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ< rect Ġx =" 0 " Ġy =" 0 " Ġwidth =" 2 0 0 " Ġheight =" 1 0 0 " Ġfill ="$ backgroundColor " Ġrx =" 5 0 "/> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ< text Ġx =" 5 0 %" Ġy =" 5 0 %" Ġdom inant - baseline =" middle " Ġtext - anchor =" middle " Ġfill ="$ textColor " Ġfont - size =" 1 . 5 em ">$ text </ text > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| </ svg > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . write Text ( file Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Svg FileName ( target Name : ĠString , Ġfile Prefix : ĠString Ġ= ĠDEFAULT _ SVG _ FILE _ NAME _ PREFIX ): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġ"$ file Prefix $ target Name . svg " Ċ } Ċ