解决一个擦除的bug

This commit is contained in:
2026-07-21 20:18:28 +08:00
parent f50b9c9e66
commit 66a1e8fd6a
25 changed files with 2005 additions and 61 deletions

139
fix_chinese_generic.py Normal file
View File

@@ -0,0 +1,139 @@
import sys, os, re
sys.stdout.reconfigure(encoding='utf-8', errors='replace')
rep = chr(0xfffd)
base = 'D:\\Code\\DTU 程序\\STM32F4-Base\\'
files = [
'Drivers\\BSP\\CH395F\\ch395f.c',
'Drivers\\BSP\\CH395F\\ch395f_test.c',
'Drivers\\BSP\\GD5F2GQ5UE\\gd5f2gq5ue.c',
'Drivers\\BSP\\SD2506\\sd2506.c',
'Drivers\\BSP\\TPAFE5160\\tpafe5160.c',
]
# Generic patterns - these work across comment blocks
generic_fixes = []
# 1. [?] followed by */ -> ) */
generic_fixes.append((rep + r'\? \*/', u' */'))
# 2. [?] followed by * and 入口参数/函数说明/etc -> * xxx
comment_keywords = [
u'入口参数', u'函数功能', u'函数说明', u'限定条件', u'返回值',
u'适用平台', u'作者', u'创建日期', u'修改记录', u'模块名称',
u'模块功能', u'函数说明', u'头文件', u'私有宏', u'私有变量',
u'私有函数', u'外部变量', u'作者',
]
for kw in comment_keywords:
# [?] * X -> * X
generic_fixes.append((rep + r'\? \* ' + kw, u' * ' + kw))
# 3. Various suffix patterns
generic_fixes.append((rep + r'\?\)', u''))
generic_fixes.append((u'' + rep + r'\?', u''))
# 4. [?]\n at end of line (before comment continuation)
# This is hard to do with simple string matching, use regex
# 5. Specific contexts that appear across files
generic_fixes.append((rep + r'\?', u''))
generic_fixes.append((rep + r'\?。', u')。'))
# 6. Numbers or units followed by [?]
# e.g. "范围[?] * 函数" -> "范围)* 函数"
# e.g. "128KB[?] * 入口" -> "128KB* 入口"
total_fixed = 0
for fname in files:
path = base + fname
with open(path, 'rb') as f:
raw = f.read()
text = raw.decode('utf-8', errors='replace')
before = text.count(rep)
if before == 0:
print('{}: clean'.format(fname))
continue
# Apply generic pattern fixes
for pattern, replacement in generic_fixes:
text = re.sub(pattern, replacement, text)
# Manual patterns for each file
if 'ch395f.c' in fname:
text = text.replace(rep + '?' + u'DMA 接收缓冲区偏移', u'从 DMA 接收缓冲区偏移')
text = text.replace(u'创建日期' + rep + '?', u'创建日期:')
text = text.replace(u'' + rep + '? */', u'要求 */')
text = text.replace(u'rx_buf[' + rep + '?', u'rx_buf]')
text = text.replace(u'取反' + rep + '?', u'取反为')
text = text.replace(u'在前' + rep + '? */', u'在前)*/')
text = text.replace(u'_ABORT' + rep + '? *', u'_ABORT*')
text = text.replace(u'' + rep + '?SPI', u'一次 SPI')
text = text.replace(u'缓冲' + rep + '?*/', u'缓冲区)*/')
text = text.replace(u'~7 + DHCPv6' + rep + '? *', u'~7 + DHCPv6*')
text = text.replace(u'100ms)=默认' + rep + '?', u'100ms)=默认值')
text = text.replace(u'次数据=默认' + rep + '?', u'次数=默认值')
text = text.replace(u'' + rep + '?128', u'最大 128')
if 'ch395f_test.c' in fname:
text = text.replace(u':8081' + rep + '? *', u':8081*')
text = text.replace(u':8082' + rep + '? *', u':8082*')
text = text.replace(u'创建' + rep + '?UDP', u'创建 UDP')
text = text.replace(u'IP ' + rep + '?打印', u'IP打印')
text = text.replace(u'(1-byte version) ' + rep + '?read-clear', u'(1-byte version)read-clear')
if 'gd5f2gq5ue.c' in fname:
text = text.replace(u'对齐' + rep + '? *', u'对齐)*')
if 'sd2506.c' in fname:
text = text.replace(u'范围' + rep + '? *', u'范围)*')
text = text.replace(u'始终' + rep + '?])', u'始终为0])')
text = text.replace(u'(周期' + rep + '? */', u'(周期中断) */')
if 'tpafe5160.c' in fname:
text = text.replace(u'16位数据总线' + rep + '?GPIOG', u'16位数据总线GPIOG')
text = text.replace(u'驱动' + rep + '?TPAFE5160', u'驱动适配 TPAFE5160')
text = text.replace(u'滞后' + rep + '?18-24ns', u'滞后约 18-24ns')
text = text.replace(u'说明' + rep + '?.', u'说明:')
text = text.replace(u'枚举' + rep + '? tpafe5160_os_t', u'枚举值 tpafe5160_os_t')
text = text.replace(u'锁存生' + rep + '? */', u'锁存生效 */')
text = text.replace(u'转换' + rep + '? - 空闲', u'转换中 - 空闲')
text = text.replace(u'原始化 int16_t', u'原始值 int16_t')
text = text.replace(u'有符号补' + rep + '? *', u'有符号补码 *')
text = text.replace(u'65536 ' + rep + '?152.59', u'65536 ≈ 152.59')
text = text.replace(u'65536 ' + rep + '?305.18', u'65536 ≈ 305.18')
text = text.replace(u'' + rep + '?±5V', u'默认 ±5V')
text = text.replace(u'CS ' + rep + '?RD', u'CS 和 RD')
text = text.replace(u'写操' + rep + '?~6ns', u'写操作 ~6ns')
text = text.replace(u'主循环' + rep + '?s_buf_a', u'主循环读 s_buf_a')
text = text.replace(u'GPIO ' + rep + '?NVIC', u'GPIO 和 NVIC')
text = text.replace(u'调用' + rep + '? * 入口参数', u'调用)* 入口参数')
after = text.count(rep)
fixed = before - after
total_fixed += fixed
with open(path, 'wb') as f:
f.write(text.encode('utf-8'))
print('{}: fixed {} ({} -> {})'.format(fname, fixed, before, after))
print('\nTotal fixed: {}'.format(total_fixed))
# Show remaining
print('\n=== REMAINING ===')
for fname in files:
path = base + fname
with open(path, 'rb') as f:
text = f.read().decode('utf-8', errors='replace')
remaining = text.count(rep)
if remaining > 0:
print('\n--- {} remaining in {} ---'.format(remaining, fname))
for i, line in enumerate(text.split(chr(10)), 1):
if rep in line:
idx = line.index(rep)
left = line[max(0,idx-35):idx]
right = line[idx+2:idx+35]
ctx_u = left.encode('unicode-escape').decode()
ctx_v = right.encode('unicode-escape').decode()
print('L{}: ...{}[?]{}...'.format(i, left, right))
print(' ...{} [?] {}...'.format(ctx_u, ctx_v))