53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
"""
|
||
标书目录号展示:一级为汉字+顿号,子级为数字多级编号(与 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()
|