import { useMemo } from 'react' export interface DocStats { /** 单词数(按空白字符分割) */ words: number /** 总字符数(含空白字符) */ chars: number /** 字符数(不含空白字符) */ charsNoSpace: number /** 行数 */ lines: number } /** * 计算文档统计信息:单词数、字符数(含/不含空格)、行数。 * 对空文档或 undefined 返回全零值。 */ export function computeDocStats(content: string | undefined | null): DocStats { if (!content) { return { words: 0, chars: 0, charsNoSpace: 0, lines: 0 } } const chars = content.length const charsNoSpace = content.replace(/\s/g, '').length const words = content.trim() ? content.trim().split(/\s+/).length : 0 const lines = content === '' ? 0 : content.split(/\r?\n/).length return { words, chars, charsNoSpace, lines } } /** * Hook:根据文档内容实时计算统计信息。 * 使用 useMemo 避免不必要的重新计算。 */ export function useDocStats(content: string | undefined | null): DocStats { return useMemo(() => computeDocStats(content), [content]) }