@@ -2,76 +2,76 @@ package net.purefunc.generate.util
22
33import java.io.File
44import java.io.FileOutputStream
5- import java.util.*
6-
7- class EmojiFileCreator (private val pageCount : Int ) {
8- // all enum in one .kt is will exceed jvm limit 64K
9- fun writeAsEnumFile (source : List <List <String >>): Unit {
10- val pagingItems = allocatePerPageItem(source)
11-
12- pagingItems.forEachIndexed { fileIdx, item ->
13- val fos = FileOutputStream (File (" src/main/kotlin/net/purefunc/emoji/Emoji$fileIdx .kt" ))
14- fos.generateFileHeader(fileIdx)
15-
16- item.forEachIndexed { idx, element ->
17- val idxListThird = element.mapIndexed { i, e -> if (e == " ;" ) i else - 1 }
18- val splitIdx = idxListThird.first { i -> i != - 1 }
19-
20- val name = element.subList(splitIdx + 1 , element.size).joinToString(" _" ).uppercase(Locale .getDefault())
21- val hexs = element.subList(0 , splitIdx).joinToString(" ," ) { hex -> " 0x$hex " }
22- val emojiIntArr = element.subList(0 , splitIdx).map { hex -> hex.toInt(16 ) }.toIntArray()
23- val emoji = String (emojiIntArr, 0 , emojiIntArr.size)
24-
25- val comment = " // $emoji $emoji $emoji "
26- val enum = " $name (intArrayOf($hexs ))"
27- if (idx == item.size - 1 ) {
28- fos.writeLastLine(comment, enum)
29- } else {
30- fos.writeNextLine(comment, enum)
5+ import java.util.Locale
6+
7+ class EmojiFileCreator {
8+
9+ companion object {
10+ // all enum in one .kt will exceed jvm limit 64K
11+ fun writeAsEnumFile (source : List <List <String >>, pageCount : Int = 1000) {
12+ val pagingItems = allocatePerPageItem(source, pageCount)
13+
14+ pagingItems.forEachIndexed { fileIdx, item ->
15+ val fos = FileOutputStream (File (" src/main/kotlin/net/purefunc/emoji/Emoji$fileIdx .kt" ))
16+ fos.generateFileHeader(fileIdx)
17+
18+ item.forEachIndexed { idx, element ->
19+ val idxListThird = element.mapIndexed { i, e -> if (e == " ;" ) i else - 1 }
20+ val splitIdx = idxListThird.first { i -> i != - 1 }
21+
22+ val name = element.subList(splitIdx + 1 , element.size).joinToString(" _" ).uppercase(Locale .getDefault())
23+ val hexs = element.subList(0 , splitIdx).joinToString(" ," ) { hex -> " 0x$hex " }
24+ val emojiIntArr = element.subList(0 , splitIdx).map { hex -> hex.toInt(16 ) }.toIntArray()
25+ val emoji = String (emojiIntArr, 0 , emojiIntArr.size)
26+
27+ val comment = " // $emoji $emoji $emoji "
28+ val enum = " $name (intArrayOf($hexs ))"
29+ if (idx == item.size - 1 ) {
30+ fos.writeLastLine(comment, enum)
31+ } else {
32+ fos.writeNextLine(comment, enum)
33+ }
3134 }
32- }
3335
34- fos.generateFileFooter()
36+ fos.generateFileFooter()
37+ }
3538 }
36- }
37-
38- private fun allocatePerPageItem (source : List <List <String >>): List <List <List <String >>> {
39- val pageSize = (source.size / pageCount)
40- return (0 .. pageSize).map { page ->
41- val pageList: (Int ) -> List <List <String >> = { source.subList(pageCount * page, it) }
42- if (pageCount * (page + 1 ) > source.size)
43- pageList(source.size)
44- else
45- pageList(pageCount * (page + 1 ))
4639
40+ private fun allocatePerPageItem (source : List <List <String >>, pageCount : Int ): List <List <List <String >>> {
41+ val pageSize = (source.size / pageCount)
42+ return (0 .. pageSize).map { page ->
43+ val pageList: (Int ) -> List <List <String >> = { source.subList(pageCount * page, it) }
44+ if (pageCount * (page + 1 ) > source.size)
45+ pageList(source.size)
46+ else
47+ pageList(pageCount * (page + 1 ))
48+ }
4749 }
48- }
4950
50- private fun FileOutputStream.generateFileHeader (fileIdx : Int ) =
51- write(
52- """
51+ private fun FileOutputStream.generateFileHeader (fileIdx : Int ) =
52+ write(
53+ """
5354 package net.purefunc.emoji
5455
5556 enum class Emoji$fileIdx (
5657 private val intArray: IntArray,
5758 ) {
5859
59-
6060 """ .trimIndent().toByteArray()
61- )
61+ )
6262
63- private fun FileOutputStream.writeNextLine (comment : String , enum : String ) = write(" $comment \n $enum ,\n " .toByteArray())
63+ private fun FileOutputStream.writeNextLine (comment : String , enum : String ) = write(" $comment \n $enum ,\n " .toByteArray())
6464
65- private fun FileOutputStream.writeLastLine (comment : String , enum : String ) = write(" $comment \n $enum ;\n " .toByteArray())
65+ private fun FileOutputStream.writeLastLine (comment : String , enum : String ) = write(" $comment \n $enum ;\n " .toByteArray())
6666
67- private fun FileOutputStream.generateFileFooter () =
68- write(
69- """
67+ private fun FileOutputStream.generateFileFooter () =
68+ write(
69+ """
70+
71+ override fun toString() = String(intArray, 0, intArray.size)
72+ }
7073
71- override fun toString() = String(intArray, 0, intArray.size)
72- }
73-
7474 """ .trimIndent().toByteArray()
75- )
76-
75+ )
76+ }
7777}
0 commit comments