Skip to content

语法高亮

库没有内置词法器。先注册样式,再按行、按层写入 StyleSpan

kotlin
controller.whenReady {
    controller.registerTextStyle(
        styleId = 1,
        color = 0xFFC586C0.toInt(),
        fontStyle = EditorFontStyle.BOLD,
    )
    controller.setLineSpans(
        line = 0,
        layer = EditorSpanLayer.SYNTAX,
        spans = listOf(StyleSpan(column = 0, length = 3, styleId = 1)),
    )
}

常见用途
SYNTAX关键字、字符串、注释
SEMANTICLSP 风格语义 token
OVERLAY临时强调

层会叠加。清一层不会清其它层:

kotlin
controller.clearHighlights(EditorSpanLayer.OVERLAY)

无参 clearHighlights() 会清掉所有 span 层。

批量

多行变更请用批量 API:

kotlin
controller.registerBatchTextStyles(
    mapOf(
        1 to EditorTextStyle(color = 0xFF569CD6.toInt()),
        2 to EditorTextStyle(color = 0xFF6A9955.toInt()),
    ),
)
controller.setBatchLineSpans(
    EditorSpanLayer.SYNTAX,
    mapOf(
        0 to listOf(StyleSpan(0, 3, 1)),
        1 to listOf(StyleSpan(0, 2, 2)),
    ),
)

行列从 0 起。StyleSpan.length 是该行的码元长度。

视口驱动更新请用 DecorationProvider,不要每个按键都全量 setLineSpans

另见 Span API