Files
STM32F4-Base/fix_chinese_generic.py
2026-07-21 20:18:28 +08:00

140 lines
6.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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))