Fix language detection bit swap in T42 header parsing
Correctly map C12 and C13 control bits to fix misidentification of Swedish/Finnish (010) and German (001). Also ensures Page model, Renderer, and UI properly propagate and display the detected language.
This commit is contained in:
@@ -43,10 +43,10 @@ def load_t42(file_path: str, progress_callback: Optional[Callable[[int, int], No
|
||||
# or find the existing one if we want to support updates (but T42 usually is a stream capture).
|
||||
# If it's an editor file, it's likely sequential.
|
||||
|
||||
p_num, sub_code = parse_header(packet.data)
|
||||
p_num, sub_code, language = parse_header(packet.data)
|
||||
|
||||
# Create new page
|
||||
new_page = Page(magazine=packet.magazine, page_number=p_num, sub_code=sub_code)
|
||||
new_page = Page(magazine=packet.magazine, page_number=p_num, sub_code=sub_code, language=language)
|
||||
new_page.packets.append(packet)
|
||||
service.pages.append(new_page)
|
||||
else:
|
||||
@@ -209,4 +209,16 @@ def parse_header(data: bytearray):
|
||||
|
||||
sub_code = s1 | (s2 << 4) | (s3 << 8) | (s4 << 12)
|
||||
|
||||
return page_num, sub_code
|
||||
# Control bits C12, C13, C14 are in Byte 8 (index 8)
|
||||
# They determine the National Option (Language)
|
||||
c_bits_2 = decode_hamming_8_4(data[8])
|
||||
|
||||
# Fix for Language Detection:
|
||||
# It seems C12 and C13 are swapped in the Hamming decoding or file format relative to expected values.
|
||||
# C12 is bit 0, C13 is bit 1.
|
||||
# We swap them so D1 maps to C13 (Swedish bit) and D2 maps to C12 (German bit).
|
||||
# Original: language = c_bits_2 & 0b111
|
||||
|
||||
language = ((c_bits_2 & 1) << 1) | ((c_bits_2 & 2) >> 1) | (c_bits_2 & 4)
|
||||
|
||||
return page_num, sub_code, language
|
||||
|
||||
Reference in New Issue
Block a user