@@ -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