108 lines
4.2 KiB
Python
108 lines
4.2 KiB
Python
import sys, os
|
||
sys.stdout.reconfigure(encoding='utf-8', errors='replace')
|
||
rep = chr(0xfffd)
|
||
base = 'D:\\Code\\DTU 程序\\STM32F4-Base\\'
|
||
|
||
all_fixes = [
|
||
# (filename, pattern_to_match, replacement_full_line_fragment)
|
||
|
||
# ch395f.c
|
||
('ch395f.c', 'rx_buf[' + rep + '? * 阻塞', 'rx_buf] * 阻塞'),
|
||
('ch395f.c', '默认值10' + rep + '?秒)', '默认值10 秒)'),
|
||
('ch395f.c', '默认值3' + rep + '? uint8_t', '默认值3 uint8_t'),
|
||
|
||
# ch395f_test.c
|
||
('ch395f_test.c', '回显' + rep + '? \ufffd?PING', '回显,PING'),
|
||
('ch395f_test.c', '创建' + rep + '? UDP', '创建 UDP'),
|
||
('ch395f_test.c', 'IP,打印结果 ' + rep + '?广播', 'IP,打印结果,广播'),
|
||
|
||
# gd5f2gq5ue.c
|
||
('gd5f2gq5ue.c', '块对' + rep + '? * size', '块对齐 * size'),
|
||
|
||
# sd2506.c
|
||
('sd2506.c', '个位存入' + rep + '4 )', '个位存入低 4 )'),
|
||
|
||
# tpafe5160.c
|
||
('tpafe5160.c', '6位数据总线' + rep + '?GPIOG', '16位数据总线(GPIOG'),
|
||
('tpafe5160.c', '滞后约 18-24ns' + rep + '? *', '滞后约 18-24ns,*'),
|
||
('tpafe5160.c', '电压' + rep + '? float', '电压值 float'),
|
||
('tpafe5160.c', 'IDR ' + rep + '?6位', 'IDR 16位'),
|
||
('tpafe5160.c', '~18ns ' + rep + '?RD 引脚', '~18ns,RD 引脚'),
|
||
]
|
||
|
||
# Additional generic cleanups for things our fixes missed
|
||
# These handle cases where ? should be a specific Chinese character or punctuation
|
||
more_fixes = [
|
||
# Closing paren patterns
|
||
('ch395f.c', rep + '?\ufffd?' + u'10\ufffd?' + u'\u79d2', ' '),
|
||
('tpafe5160.c', u'\ufffd?' + u'HELLO', ''),
|
||
]
|
||
|
||
# Remaining problematic patterns from output
|
||
specific = [
|
||
# ch395f_test.c - the ?HELLO issue
|
||
('Drivers\\BSP\\CH395F\\ch395f_test.c', u'结果 ' + rep + '?' + u'广播', u'结果,广播'),
|
||
# tpafe5160 line with multiple corruptions
|
||
('Drivers\\BSP\\TPAFE5160\\tpafe5160.c', u'总线' + rep + '?GPIOG', u'总线(GPIOG'),
|
||
]
|
||
|
||
total_fixed = 0
|
||
for fname, needle, replacement in all_fixes:
|
||
path = None
|
||
for f in ['Drivers\\BSP\\CH395F\\ch395f.c', 'Drivers\\BSP\\CH395F\\ch395f_test.c',
|
||
'Drivers\\BSP\\GD5F2GQ5UE\\gd5f2gq5ue.c', 'Drivers\\BSP\\NET\\net_select.c',
|
||
'Drivers\\BSP\\SD2506\\sd2506.c', 'Drivers\\BSP\\TPAFE5160\\tpafe5160.c']:
|
||
if fname in f:
|
||
path = base + f
|
||
break
|
||
if path is None:
|
||
continue
|
||
with open(path, 'rb') as f:
|
||
raw = f.read()
|
||
text = raw.decode('utf-8', errors='replace')
|
||
before = text.count(rep)
|
||
|
||
if needle in text:
|
||
text = text.replace(needle, replacement)
|
||
after = text.count(rep)
|
||
fixed = before - after
|
||
total_fixed += fixed
|
||
print('{}: fixed ({} -> {})'.format(fname, before, after))
|
||
else:
|
||
# Check what's actually in the file
|
||
lines = text.split(chr(10))
|
||
found = False
|
||
search_prefix = needle[:10]
|
||
for i, line in enumerate(lines, 1):
|
||
if rep in line and search_prefix in line:
|
||
idx = line.index(rep)
|
||
ctx = line[max(0,idx-20):idx+20]
|
||
print('{}: pattern not matched, closest at L{}: ...{}...'.format(fname, i, ctx))
|
||
found = True
|
||
break
|
||
if not found:
|
||
print('{}: pattern not found at all'.format(fname))
|
||
|
||
with open(path, 'wb') as f:
|
||
f.write(text.encode('utf-8'))
|
||
|
||
print('\nTotal fixed this pass: {}'.format(total_fixed))
|
||
|
||
# Show remaining
|
||
print('\n=== REMAINING ===')
|
||
for fname in ['Drivers\\BSP\\CH395F\\ch395f.c', 'Drivers\\BSP\\CH395F\\ch395f_test.c',
|
||
'Drivers\\BSP\\GD5F2GQ5UE\\gd5f2gq5ue.c', 'Drivers\\BSP\\NET\\net_select.c',
|
||
'Drivers\\BSP\\SD2506\\sd2506.c', 'Drivers\\BSP\\TPAFE5160\\tpafe5160.c']:
|
||
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-40):idx]
|
||
right = line[idx+2:idx+40]
|
||
print('L{}: ...{}[?]{}...'.format(i, left, right))
|