52 lines
1.8 KiB
JavaScript
52 lines
1.8 KiB
JavaScript
/**
|
|
* Regular expression to match `:collapsed-lines` directive in code block info
|
|
*
|
|
* 匹配代码块信息中 `:collapsed-lines` 指令的正则表达式
|
|
*/
|
|
const COLLAPSED_LINES_REGEXP = /:collapsed-lines\b/;
|
|
/**
|
|
* Regular expression to match `:collapsed-lines=num` directive in code block info
|
|
*
|
|
* 匹配代码块信息中 `:collapsed-lines=num` 指令的正则表达式
|
|
*/
|
|
const COLLAPSED_LINES_START_REGEXP = /:collapsed-lines=(\d+)\b/;
|
|
/**
|
|
* Regular expression to match `:no-collapsed-lines` directive in code block info
|
|
*
|
|
* 匹配代码块信息中 `:no-collapsed-lines` 指令的正则表达式
|
|
*/
|
|
const NO_COLLAPSED_LINES_REGEXP = /:no-collapsed-lines\b/;
|
|
/**
|
|
* Resolve the `:collapsed-lines` `:collapsed-lines=num` / `:no-collapsed-lines` mark from token info
|
|
*
|
|
* 从 token 信息中解析 `:collapsed-lines` `:collapsed-lines=num` / `:no-collapsed-lines` 标记
|
|
*
|
|
* @param info - Code block info string / 代码块信息字符串
|
|
* @returns Collapsed lines configuration / 折叠行配置
|
|
* - `number` - Start line number for collapsing / 折叠起始行号
|
|
* - `true` - Enable collapsed lines / 启用折叠行
|
|
* - `false` - Disable collapsed lines / 禁用折叠行
|
|
* - `null` - No configuration found / 未找到配置
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* resolveCollapsedLines('js :collapsed-lines') // true
|
|
* resolveCollapsedLines('js :collapsed-lines=20') // 20
|
|
* resolveCollapsedLines('js :no-collapsed-lines') // false
|
|
* resolveCollapsedLines('js') // null
|
|
* ```
|
|
*/
|
|
export function resolveCollapsedLines(info) {
|
|
const lines = COLLAPSED_LINES_START_REGEXP.exec(info)?.[1];
|
|
if (lines) {
|
|
return Number(lines);
|
|
}
|
|
if (COLLAPSED_LINES_REGEXP.test(info)) {
|
|
return true;
|
|
}
|
|
if (NO_COLLAPSED_LINES_REGEXP.test(info)) {
|
|
return false;
|
|
}
|
|
return null;
|
|
}
|