From edaef301795db2541f12d97c12f8e753087fd4ff Mon Sep 17 00:00:00 2001 From: "Codrin.Ogreanu" Date: Sat, 12 Apr 2025 16:12:54 +0000 Subject: [PATCH] IJPL-163132 Add KMP-compatible `codePointAt` and `toCodePoint` implementations to `idea-flex-kotlin.skeleton` Also bumped to KFlex 1.10.13 Merge-request: IJ-MR-160215 Merged-by: Codrin Ogreanu GitOrigin-RevId: 5726f30797c1eb0341a5b0119cd82fdba9b5da2e --- .../intellij/lang/java/lexer/_JavaDocLexer.java | 2 +- .../com/intellij/lang/java/lexer/_JavaLexer.java | 2 +- tools/lexer/idea-flex-kotlin.skeleton | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/java/java-frontback-psi-impl/gen/com/intellij/lang/java/lexer/_JavaDocLexer.java b/java/java-frontback-psi-impl/gen/com/intellij/lang/java/lexer/_JavaDocLexer.java index 7f263b4e43cd..e11e2c19d76c 100644 --- a/java/java-frontback-psi-impl/gen/com/intellij/lang/java/lexer/_JavaDocLexer.java +++ b/java/java-frontback-psi-impl/gen/com/intellij/lang/java/lexer/_JavaDocLexer.java @@ -1,6 +1,6 @@ // Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -// Generated by JFlex 1.10.11 http://jflex.de/ (tweaked for IntelliJ platform) +// Generated by JFlex 1.10.13 http://jflex.de/ (tweaked for IntelliJ platform) // source: _JavaDocLexer.flex /* It's an automatically generated code. Do not modify it. */ diff --git a/java/java-frontback-psi-impl/gen/com/intellij/lang/java/lexer/_JavaLexer.java b/java/java-frontback-psi-impl/gen/com/intellij/lang/java/lexer/_JavaLexer.java index 6e45e820ef13..7da1246d48d0 100644 --- a/java/java-frontback-psi-impl/gen/com/intellij/lang/java/lexer/_JavaLexer.java +++ b/java/java-frontback-psi-impl/gen/com/intellij/lang/java/lexer/_JavaLexer.java @@ -1,6 +1,6 @@ // Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -// Generated by JFlex 1.9.1 http://jflex.de/ (tweaked for IntelliJ platform) +// Generated by JFlex 1.10.13 http://jflex.de/ (tweaked for IntelliJ platform) // source: _JavaLexer.flex package com.intellij.lang.java.lexer; diff --git a/tools/lexer/idea-flex-kotlin.skeleton b/tools/lexer/idea-flex-kotlin.skeleton index 34d8c623a094..7cb46dd3c6df 100644 --- a/tools/lexer/idea-flex-kotlin.skeleton +++ b/tools/lexer/idea-flex-kotlin.skeleton @@ -153,6 +153,21 @@ companion object { return high.code } + /** Returns the character (Unicode code point) at the specified index. */ + internal fun String.codePointAt(index: Int): Int { + val high = this[index] + if (high.isHighSurrogate() && index + 1 < this.length) { + val low = this[index + 1] + if (low.isLowSurrogate()) { + return Char.toCodePoint(high, low) + } + } + return high.code + } + + internal fun Char.Companion.toCodePoint(high: Char, low: Char): Int = + (((high - MIN_HIGH_SURROGATE) shl 10) or (low - MIN_LOW_SURROGATE)) + 0x10000 + private fun charCount(codePoint: Int): Int = if (codePoint < 0x10000) 1 else 2