Skip to content

Code Block 代码块 ​

带行号、行高亮与复制按钮的代码高亮。内置语言:ArkTS / TypeScript、CSS、JSON、Bash、HTML / XML、Python、Diff,也可以注册自己的语法。

基础用法 ​

arkts
SCodeBlock({ code: source, language: 'arkts', title: 'ClickCounter.ets' })

ArkTS ​

arkts
@ComponentV2
export struct ClickCounter {
  @Local count: number = 0; // reactive state

  build() {
    SButton({ text: `Clicked ${this.count} times` })
      .onClick(() => this.count++)
  }
}

CSS 主题 ​

css
:root {
  --radius: 0.625rem;
  --primary: oklch(0.205 0 0);
}
.dark {
  --primary: oklch(0.922 0 0);
}
@size(compact) { --spacing: 0.22rem; }

JSON 主题 ​

json
{
  "root": { "--primary": "#171717", "--radius": "0.5rem" },
  "dark": { "--primary": "#e5e5e5" },
  "sizes": { "compact": { "--spacing": "3.5px" } }
}

命令行 ​

bash
# build and run on a device
devecocli run --module gallery --device 127.0.0.1:5555

行高亮 ​

highlightLines 使用显示出来的行号。

arkts
@ComponentV2
export struct ClickCounter {
  @Local count: number = 0; // reactive state

  build() {
    SButton({ text: `Clicked ${this.count} times` })
      .onClick(() => this.count++)
  }
}

Diff ​

diff
--- a/Index.ets
+++ b/Index.ets
@@ -1,3 +1,3 @@
 SCodeBlock({
-  code: source, language: 'arkts'
+  code: source, language: 'arkts', highlightLines: [3]
 })

自定义语法 ​

按顺序匹配的正则规则 → token 类型。可以按名字注册,也可以直接传入语法对象。

arkts
; gallery settings
[server]
host = "127.0.0.1"
port = 5555
verbose = true
arkts
const INI = CodeHighlighter.register({
  name: 'ini',
  aliases: ['conf'],
  rules: [
    { pattern: /s+/ },
    { token: 'comment', pattern: /[;#][^
]*/ },
    { token: 'type', pattern: /[[^]
]*]/ },
    // capture groups that tile the match get one token each
    { pattern: /([w.-]+)([ 	]*)(=)/, captures: ['property', 'plain', 'punctuation'] },
    { token: 'string', pattern: /"[^"
]*"?/ },
    { token: 'number', pattern: /d+(?:.d+)?/ },
    { token: 'keyword', words: ['true', 'false', 'on', 'off'] },
    { pattern: /[^s"]+/ }
  ]
});

SCodeBlock({ code: source, grammar: INI })   // or language: 'ini' / 'conf'

扩展内置语法 ​

CodeHighlighter.extend(base, { keywords, before, after, exclude })

arkts
const MY_ARKTS = CodeHighlighter.extend('arkts', {
  name: 'arkts+',
  keywords: ['observe', 'emit'],
  exclude: ['type']
});

observe Counter(() => emit('changed'))

API ​

从组件库源码中的 @Param / @Event / @BuilderParam 声明自动提取。

SCodeBlock ​

高亮代码块,可选标题、行号、行高亮以及复制按钮。

  • language:已注册的语言名称 / 别名(参见 CodeHighlighter;无法识别的名称按纯文本渲染)。
  • grammar:一个 SparkGrammar 对象,用于替代 language(例如来自 CodeHighlighter.extend)。
  • codeTheme:令牌到颜色的映射(默认为 SparkCodeTheme.github())。
  • highlightLines:从 1 开始计数的行号(相对于 startLine),以带色调的背景绘制。
属性类型默认值说明
codestring''
languageCodeLanguage'arkts'
grammarSparkGrammar | undefinedundefined覆盖 language 的语法对象。
codeThemeSparkCodeTheme | undefinedundefined
titlestring | undefinedundefined显示在头部的文件名 / 标题;默认为语言名(或语法名)。
showLineNumbersbooleantrue
startLinenumber1首行显示的行号。
highlightLinesnumber[][]需要强调的行号(按显示的行号计,即从 startLine 开始计数)。
copyablebooleantrue
maxHeightnumber0代码块在垂直滚动前的最大高度,单位 vp(0 表示不限)。

MIT Licensed