Skip to content

Commit 6b8a4e6

Browse files
t-regbsegorikftp
authored andcommitted
refactor: update regex name to CODEPOINT_REGEX and replace glyph JSON parsing with CSS parsing
1 parent 6f4587c commit 6b8a4e6

1 file changed

Lines changed: 12 additions & 15 deletions

File tree

  • tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/remix/data

tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/standard/remix/data/RemixRepository.kt

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ class RemixRepository(
2323
private const val CDN_BASE = "https://cdn.jsdelivr.net/npm/remixicon@latest"
2424
private const val PACKAGE_JSON_URL = "$CDN_BASE/package.json"
2525
private const val FONT_URL = "$CDN_BASE/fonts/remixicon.woff2"
26-
private const val GLYPH_URL = "$CDN_BASE/fonts/remixicon.glyph.json"
26+
private const val CSS_URL = "$CDN_BASE/fonts/remixicon.css"
2727
private const val FLAT_INDEX_URL_TEMPLATE = "https://data.jsdelivr.com/v1/package/npm/remixicon@%s/flat"
28-
private val UNICODE_REGEX = Regex("&#x([a-fA-F0-9]+);")
28+
private val CODEPOINT_REGEX = Regex("""\.ri-([a-z0-9-]+)::?before\s*\{\s*content:\s*["']\\([a-fA-F0-9]+)["'];?\s*}""")
2929
}
3030

3131
private val fontMutex = Mutex()
@@ -73,8 +73,8 @@ class RemixRepository(
7373
private suspend fun loadCodepoints(): Map<String, Int> = withContext(Dispatchers.IO) {
7474
codepointMutex.withLock {
7575
codepointsCache ?: run {
76-
val glyphJson = httpClient.get(GLYPH_URL).bodyAsText()
77-
val codepoints = parseCodepoints(glyphJson)
76+
val cssText = httpClient.get(CSS_URL).bodyAsText()
77+
val codepoints = parseCodepoints(cssText)
7878
codepointsCache = codepoints
7979
codepoints
8080
}
@@ -116,18 +116,15 @@ class RemixRepository(
116116
}
117117
}
118118

119-
private fun parseCodepoints(jsonText: String): Map<String, Int> {
120-
val glyphMap = json.parseToJsonElement(jsonText).jsonObject
121-
122-
return glyphMap.entries.mapNotNull { (name, glyphMetaElement) ->
123-
val unicode = glyphMetaElement.jsonObject["unicode"]?.jsonPrimitive?.content
124-
?: return@mapNotNull null
125-
val codepointHex = UNICODE_REGEX.find(unicode)?.groupValues?.getOrNull(1)
126-
?: return@mapNotNull null
119+
private fun parseCodepoints(cssText: String): Map<String, Int> = CODEPOINT_REGEX
120+
.findAll(cssText)
121+
.mapNotNull { match ->
122+
val iconName = match.groupValues[1]
123+
val codepointHex = match.groupValues[2]
127124
val codepoint = codepointHex.toIntOrNull(16) ?: return@mapNotNull null
128-
name to codepoint
129-
}.toMap()
130-
}
125+
iconName to codepoint
126+
}
127+
.toMap()
131128

132129
private fun parseSvgMetadata(jsonText: String): Pair<Map<String, String>, Map<String, String>> {
133130
val root = json.parseToJsonElement(jsonText).jsonObject

0 commit comments

Comments
 (0)