自定义高亮样式
本文档主要提供自定义高亮样式导入的配置文档。
如果尝试让LLM生成好看的高亮主题,可以使用下面提示词,复制给LLM即可:
markdown
请根据下面文档,为我生成美观、好看的高亮主题
https://open.pendown.cn/open/highlight_theme.html给 LLM 的生成规则
- 只输出 JSON 对象本身,不要输出解释文字、代码围栏或尾随逗号。
- 字段名必须使用本文档中的 camelCase 名称。
- 所有数值使用 JSON number,不要写成字符串。
int字段必须写整数,例如400、700、0;不要写400.0。double字段必须写小数,例如0.0、1.0、-1.0、18.0;不要写0、1、-1、18。- 重要:虽然 JSON 统称 number,但 Dart
jsonDecode会把0解析为int,把0.0解析为double。double字段写成整数可能报type 'int' is not a subtype of type 'double'。 - 颜色优先使用
#RRGGBB;需要透明度时使用#AARRGGBB。 - 生成渐变时确保
colors至少有 2 个颜色;如果提供stops,长度应与colors一致。 - 需要背景效果时优先设置
backgroundColor、padding、borderRadius,否则背景可能紧贴文本。 fontFamily建议省略或设为0,除非明确知道目标用户本地字体 ID。- 不确定字段是否需要时直接省略,让应用使用默认值。
使用入口
- 在自定义高亮样式面板中点击
分享,会复制当前样式的 JSON。 - 点击
导入,粘贴一段完整 JSON,确认后会解析并应用。 - 导入内容必须是一个 JSON 对象,不能包含 Markdown 代码围栏或注释。
- 未填写的字段会使用源码默认值;不需要的效果可以直接省略对应字段。
- 如果导入时报
type 'int' is not a subtype of type 'double',逐项检查本文档标为double的字段是否都写成了小数。
数值类型规则
请严格按下表书写数值。int 字段只能写整数,double 字段只能写带小数点的数字。
| 类型 | 必须写法 | 禁止写法 | 字段 |
|---|---|---|---|
int | 400、700、0 | 400.0、700.0、0.0 | fontWeight、fontFamily |
double | 0.0、1.0、-1.0、18.0 | 0、1、-1、18 | fontSize、letterSpacing、wordSpacing、height、borderRadius |
double | 0.0、8.0 | 0、8 | borderRadiusCustom.tl、borderRadiusCustom.tr、borderRadiusCustom.bl、borderRadiusCustom.br |
double | 4.0、2.0 | 4、2 | padding.top、padding.right、padding.bottom、padding.left |
double | 0.0、0.5、1.0 | 0、1 | gradient.stops[] |
double | -1.0、0.0、1.0 | -1、0、1 | gradient.begin.x、gradient.begin.y、gradient.end.x、gradient.end.y、gradient.center.x、gradient.center.y |
double | 0.8、0.0、6.283185307179586 | 0、6 | gradient.radius、gradient.startAngle、gradient.endAngle |
double | 1.0、6.0、4.0 | 1、6、4 | border.width、border.dashWidth、border.dashGap |
double | 2.0、3.0 | 2、3 | underline.thickness、underline.offset |
double | 0.0、4.0、-2.0 | 0、4、-2 | shadows[].offsetX、shadows[].offsetY、shadows[].blurRadius、backgroundShadows[].offsetX、backgroundShadows[].offsetY、backgroundShadows[].blurRadius、backgroundShadows[].spreadRadius |
字段速查清单
- 必须写
int的字段只有:fontWeight、fontFamily。 - 必须写
double的顶层字段:fontSize、letterSpacing、wordSpacing、height、borderRadius。 - 必须写
double的顶层对象子字段:borderRadiusCustom.tl、borderRadiusCustom.tr、borderRadiusCustom.bl、borderRadiusCustom.br、padding.top、padding.right、padding.bottom、padding.left。 - 必须写
double的渐变字段:stops数组内所有值、begin.x、begin.y、end.x、end.y、center.x、center.y、radius、startAngle、endAngle。 - 必须写
double的边框字段:width、dashWidth、dashGap。 - 必须写
double的下划线字段:thickness、offset。 - 必须写
double的阴影字段:offsetX、offsetY、blurRadius、spreadRadius。
顶层结构
json
{
"fontWeight": 700,
"fontFamily": 0,
"isItalic": false,
"fontSize": 18.0,
"letterSpacing": 1.2,
"wordSpacing": 0.0,
"height": 1.2,
"textColor": { "solidColor": "#1f2937" },
"backgroundColor": { "solidColor": "#fef3c7" },
"border": {
"style": "solid",
"color": { "solidColor": "#f59e0b" },
"width": 2.0
},
"underline": {
"style": "none",
"color": { "solidColor": "#f59e0b" },
"thickness": 2.0,
"offset": 2.0
},
"borderRadius": 8.0,
"borderRadiusCustom": { "tl": 8.0, "tr": 8.0, "bl": 8.0, "br": 8.0 },
"shadows": [
{ "color": "#66000000", "offsetX": 0.0, "offsetY": 1.0, "blurRadius": 2.0 }
],
"backgroundShadows": [
{ "color": "#33000000", "offsetX": 0.0, "offsetY": 4.0, "blurRadius": 8.0, "spreadRadius": 0.0 }
],
"padding": { "top": 4.0, "right": 2.0, "bottom": 4.0, "left": 2.0 }
}顶层字段说明
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
fontWeight | int | 400 | 字重,必须写整数。建议使用 100 到 900;UI 常用 400、600、700。 |
fontFamily | int | 无 | 字体 ID,必须写整数。0 表示默认字体;其他值依赖本地已导入字体。 |
isItalic | boolean | false | 是否斜体。 |
fontSize | double | 无 | 字号,必须写小数,例如 18.0。 |
letterSpacing | double | 无 | 字间距,必须写小数,例如 1.2、0.0。 |
wordSpacing | double | 无 | 词间距,必须写小数,例如 0.0。 |
height | double | 无 | 行高倍率,必须写小数,例如 1.2;对应 Flutter TextStyle.height。 |
textColor | ColorConfig | 无 | 文字颜色。 |
backgroundColor | ColorConfig | 无 | 高亮背景颜色,支持纯色或渐变。 |
border | BorderConfig | 无 | 边框设置。 |
underline | UnderlineConfig | 无 | 下划线设置。 |
borderRadius | double | 0.0 | 统一圆角半径,必须写小数,例如 8.0。 |
borderRadiusCustom | object | 无 | 四角圆角,存在时优先于 borderRadius。键为 tl、tr、bl、br,值都必须写 double。 |
shadows | ShadowConfig[] | 无 | 文字阴影。当前自定义面板主要编辑背景阴影,但模型支持导入文字阴影。 |
backgroundShadows | ShadowConfig[] | 无 | 背景阴影,可多层叠加。 |
padding | object | 无 | 高亮背景相对文本的内边距,键为 top、right、bottom、left,值都必须写 double。 |
颜色配置 ColorConfig
颜色字段使用对象表示,可选纯色或渐变。建议同一个颜色对象只保留一种模式。当前绘制逻辑中,backgroundColor、border.color、underline.color 支持渐变;textColor 建议使用纯色,因为文字样式只会读取 solidColor。
纯色
json
{ "solidColor": "#fef3c7" }颜色字符串支持 #RRGGBB 和 #AARRGGBB。当只写 6 位 RGB 时,源码会按不透明颜色处理;8 位 ARGB 可用于半透明,例如 #66ff0000。
线性渐变
json
{
"gradient": {
"type": "linear",
"colors": ["#fef3c7", "#fde68a"],
"stops": [0.0, 1.0],
"begin": { "x": -1.0, "y": 0.0 },
"end": { "x": 1.0, "y": 0.0 }
}
}径向渐变
json
{
"gradient": {
"type": "radial",
"colors": ["#ffffff", "#a78bfa"],
"stops": [0.0, 1.0],
"center": { "x": 0.0, "y": 0.0 },
"radius": 0.8
}
}扫描渐变
json
{
"gradient": {
"type": "sweep",
"colors": ["#f472b6", "#60a5fa", "#f472b6"],
"stops": [0.0, 0.5, 1.0],
"center": { "x": 0.0, "y": 0.0 },
"startAngle": 0.0,
"endAngle": 6.283185307179586
}
}渐变字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
type | string | 支持 linear、radial、sweep。未知类型会降级为线性渐变。 |
colors | string[] | 必填,颜色列表。 |
stops | double[] | 可选,颜色停止点,值必须写小数,通常从 0.0 到 1.0,数量应与 colors 一致。 |
begin | object | 线性渐变起点,x、y 都必须写 double,常用范围为 -1.0 到 1.0。 |
end | object | 线性渐变终点,x、y 都必须写 double,常用范围为 -1.0 到 1.0。 |
center | object | 径向或扫描渐变中心点,x、y 都必须写 double。 |
radius | double | 径向渐变半径,必须写小数,缺省为 0.5。 |
startAngle | double | 扫描渐变起始角度,单位为弧度,必须写小数。 |
endAngle | double | 扫描渐变结束角度,单位为弧度,必须写小数。 |
边框配置 BorderConfig
json
{
"style": "dashed",
"color": { "solidColor": "#f59e0b" },
"width": 2.0,
"dashWidth": 6.0,
"dashGap": 4.0
}| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
style | string | solid | 支持 none、solid、dashed、dotted。 |
color | ColorConfig | 黑色 | 边框颜色,支持纯色或渐变。 |
width | double | 1.0 | 边框宽度,必须写小数。绘制器内部会按 width * 0.5 设置画笔粗细。 |
dashWidth | double | 样式相关 | 虚线或点线单段长度,必须写小数。dashed 缺省 4.0,dotted 缺省 2.0。 |
dashGap | double | 4.0 | 虚线或点线间隔,必须写小数。 |
下划线配置 UnderlineConfig
json
{
"style": "wavy",
"color": { "solidColor": "#ec4899" },
"thickness": 2.0,
"offset": 3.0
}| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
style | string | none | 支持 none、solid、dashed、dotted、wavy、double。 |
color | ColorConfig | 黑色 | 下划线颜色,支持纯色或渐变。 |
thickness | double | 1.0 | 下划线粗细,必须写小数。 |
offset | double | 0.0 | 下划线相对文字底部的纵向偏移,正数向下,必须写小数。 |
阴影配置 ShadowConfig
shadows 和 backgroundShadows 都使用同类对象数组:
json
[
{ "color": "#33000000", "offsetX": 0.0, "offsetY": 4.0, "blurRadius": 8.0, "spreadRadius": 0.0 }
]| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
color | string | #000000 | 阴影颜色,建议使用 #AARRGGBB 控制透明度。 |
offsetX | double | 0.0 | 水平偏移,正数向右,必须写小数。 |
offsetY | double | 0.0 | 垂直偏移,正数向下,必须写小数。 |
blurRadius | double | 0.0 | 模糊半径,必须写小数。 |
spreadRadius | double | 0.0 | 扩散半径,必须写小数;仅背景阴影实际使用。文字阴影会忽略该字段。 |
可直接导入的示例
示例 1:暖黄色马克笔
json
{
"fontWeight": 700,
"fontSize": 18.0,
"letterSpacing": 1.2,
"textColor": { "solidColor": "#856404" },
"backgroundColor": { "solidColor": "#fff3cd" },
"border": {
"style": "dashed",
"color": { "solidColor": "#ffeaa7" },
"width": 1.0,
"dashWidth": 6.0,
"dashGap": 4.0
},
"borderRadius": 8.0,
"padding": { "top": 4.0, "right": 2.0, "bottom": 4.0, "left": 2.0 }
}示例 2:蓝紫渐变胶囊
json
{
"fontWeight": 700,
"fontSize": 18.0,
"textColor": { "solidColor": "#ffffff" },
"backgroundColor": {
"gradient": {
"type": "linear",
"colors": ["#6366f1", "#a855f7", "#ec4899"],
"stops": [0.0, 0.55, 1.0],
"begin": { "x": -1.0, "y": 0.0 },
"end": { "x": 1.0, "y": 0.0 }
}
},
"borderRadius": 18.0,
"padding": { "top": 5.0, "right": 8.0, "bottom": 5.0, "left": 8.0 },
"backgroundShadows": [
{ "color": "#446366f1", "offsetX": 0.0, "offsetY": 4.0, "blurRadius": 10.0, "spreadRadius": 0.0 }
]
}示例 3:只加彩色波浪线
json
{
"fontWeight": 600,
"textColor": { "solidColor": "#111827" },
"underline": {
"style": "wavy",
"color": {
"gradient": {
"type": "linear",
"colors": ["#22c55e", "#06b6d4"],
"begin": { "x": -1.0, "y": 0.0 },
"end": { "x": 1.0, "y": 0.0 }
}
},
"thickness": 2.0,
"offset": 3.0
}
}示例 4:玻璃拟态浅色标签
json
{
"fontWeight": 600,
"fontSize": 17.0,
"textColor": { "solidColor": "#0f172a" },
"backgroundColor": {
"gradient": {
"type": "linear",
"colors": ["#ccffffff", "#88dbeafe"],
"stops": [0.0, 1.0],
"begin": { "x": -1.0, "y": -1.0 },
"end": { "x": 1.0, "y": 1.0 }
}
},
"border": {
"style": "solid",
"color": { "solidColor": "#99ffffff" },
"width": 1.0
},
"borderRadius": 12.0,
"padding": { "top": 5.0, "right": 6.0, "bottom": 5.0, "left": 6.0 },
"backgroundShadows": [
{ "color": "#220f172a", "offsetX": 0.0, "offsetY": 6.0, "blurRadius": 14.0, "spreadRadius": -2.0 }
]
}