fuc-new/doc/node_modules/@vuepress/highlighter-helper/lib/node/collapsedLines/resolveCollapsedLine.js
hellcat 6adbc04d4b 1
2025-10-03 17:17:08 +08:00

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;
}