37 lines
1.2 KiB
JavaScript
37 lines
1.2 KiB
JavaScript
const LINE_NUMBERS_REGEXP = /:line-numbers\b/;
|
|
const NO_LINE_NUMBERS_REGEXP = /:no-line-numbers\b/;
|
|
const LINE_NUMBERS_START_REGEXP = /:line-numbers=(\d+)\b/;
|
|
/**
|
|
* Resolve the `:line-numbers` `:line-numbers=num` / `:no-line-numbers` mark from token info
|
|
*
|
|
* 从 token 信息中解析 `:line-numbers` `:line-numbers=num` / `:no-line-numbers` 标记
|
|
*
|
|
* @param info - Code block info string / 代码块信息字符串
|
|
* @returns Line numbers configuration / 行号配置
|
|
* - `number` - Start line number / 起始行号
|
|
* - `true` - Enable line numbers / 启用行号
|
|
* - `false` - Disable line numbers / 禁用行号
|
|
* - `null` - No configuration found / 未找到配置
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* resolveLineNumbers('js :line-numbers') // true
|
|
* resolveLineNumbers('js :line-numbers=10') // 10
|
|
* resolveLineNumbers('js :no-line-numbers') // false
|
|
* resolveLineNumbers('js') // null
|
|
* ```
|
|
*/
|
|
export const resolveLineNumbers = (info) => {
|
|
const lineNumber = LINE_NUMBERS_START_REGEXP.exec(info)?.[1];
|
|
if (lineNumber) {
|
|
return Number(lineNumber);
|
|
}
|
|
if (LINE_NUMBERS_REGEXP.test(info)) {
|
|
return true;
|
|
}
|
|
if (NO_LINE_NUMBERS_REGEXP.test(info)) {
|
|
return false;
|
|
}
|
|
return null;
|
|
};
|