""" 标书目录号展示:一级为汉字+顿号,子级为数字多级编号(与 AI 大纲示例一致)。 """ from __future__ import annotations def int_to_chinese_numeral(n: int) -> str: """将正整数转为中文数字(一、二、…、十、十一、…、九十九、一百)。""" if n <= 0: return str(n) digits = "零一二三四五六七八九" if n < 10: return digits[n] if n == 10: return "十" if n < 20: return "十" + (digits[n % 10] if n % 10 else "") if n < 100: t, o = divmod(n, 10) s = digits[t] + "十" if o: s += digits[o] return s if n < 1000: h, r = divmod(n, 100) s = digits[h] + "百" if r == 0: return s if r < 10: return s + "零" + digits[r] return s + int_to_chinese_numeral(r) # 极少需要百级以上章,保守处理 return str(n) def format_heading_display(level: int, section_number: str, title: str) -> str: """ 生成带目录号的章节展示行(用于大纲文本、Word 标题、目录页)。 - 一级:汉字、顿号 + 标题,如「一、总体方案」 - 二级及以下:「1.1 子标题」 """ title = (title or "").strip() sn = (section_number or "").strip() lv = int(level) if level else 1 if lv <= 1: main = sn.split(".")[0] try: idx = int(main) except ValueError: idx = 1 return f"{int_to_chinese_numeral(idx)}、{title}" return f"{sn} {title}".strip()