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

108 lines
4.2 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
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 引脚', '~18nsRD 引脚'),
]
# 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))