vfmt: весь код в формате V master (без изменений логики)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
K1ndWha1eandClaude Opus 5.5 committed 2026-10-11 17:31:02 +03:00
1 parent 4c9184aeb2
commit 6161a7faaa
12 files changed
+405 -287

No files matched your search

+43 -39
View File
@@ -4,23 +4,23 @@ import encoding.iconv
@[heap]
pub struct Frame {
pub mut:
data string
mut:
prev_size u64
cur_size u64
start u64
end u64
encoding_name string
name string
encoding_name_idx u8
addition []u8
encoded_data []u8
apic ?[]u8
encoded_size []u8
modified bool
// Фрейм целиком в том виде, в каком он был прочитан из файла
raw []u8
pub mut:
data string
mut:
prev_size u64
cur_size u64
start u64
end u64
encoding_name string
name string
encoding_name_idx u8
addition []u8
encoded_data []u8
apic ?[]u8
encoded_size []u8
modified bool
// Фрейм целиком в том виде, в каком он был прочитан из файла
raw []u8
}
// Во фрейме первый байт указывает кодировку 0 - ISO-8859-1 (Latin-1), 1 - UTF-16LE
@@ -32,10 +32,10 @@ fn (mut frame Frame) fill(bytes []u8, start_position u64, idv3_version u8) {
frame.name = bytes[frame.start..frame.start + 4].bytestr()
// Размер фрейма
frame.cur_size = if idv3_version == 3 {
get_size_v23(bytes[frame.start + 4..frame.start + 8])
} else {
get_size_v24(bytes[frame.start + 4..frame.start + 8])
frame.cur_size = if idv3_version == 3 {
get_size_v23(bytes[frame.start + 4..frame.start + 8])
} else {
get_size_v24(bytes[frame.start + 4..frame.start + 8])
}
// Конец фрейма
frame.end = frame.start + frame.cur_size + 10
@@ -44,16 +44,16 @@ fn (mut frame Frame) fill(bytes []u8, start_position u64, idv3_version u8) {
frame.modified = false
// Содержимое фрейма
frame.encoding_name = match bytes[frame.start + 10] {
0 { "ISO-8859-1" }
1 { "UTF-16LE" }
2 { "UTF-16BE" }
else { "UTF-8" }
frame.encoding_name = match bytes[frame.start + 10] {
0 { 'ISO-8859-1' }
1 { 'UTF-16LE' }
2 { 'UTF-16BE' }
else { 'UTF-8' }
}
frame.encoding_name_idx = u8(bytes[frame.start + 10])
if frame.name.to_lower() == "apic" {
if frame.name.to_lower() == 'apic' {
// Дополнительные байты с информацией (MIME)
frame.addition = bytes[frame.start + 10..frame.start + 24]
// Фрейм целиком вместе с заголовком, чтобы записать его обратно без изменений
@@ -65,13 +65,13 @@ fn (mut frame Frame) fill(bytes []u8, start_position u64, idv3_version u8) {
// UTF-16 с BOM (01): 2 байта маркера, по ним определяется порядок байт
if frame.encoding_name_idx == 1 && data_start + 2 <= frame.end {
if bytes[data_start] == 0xFE && bytes[data_start + 1] == 0xFF {
frame.encoding_name = "UTF-16BE"
frame.encoding_name = 'UTF-16BE'
}
data_start += 2
}
// Замыкающие нули не относятся к данным
frame.data = (iconv.encoding_to_vstring(bytes[data_start..frame.end], frame.encoding_name) or { "" }).all_before('\x00')
frame.data = (iconv.encoding_to_vstring(bytes[data_start..frame.end], frame.encoding_name) or { '' }).all_before('\x00')
frame.addition = bytes[frame.start..frame.start + 10]
}
@@ -86,10 +86,10 @@ pub fn (mut frame Frame) init(tag_name string, idv3_version u8) {
fn (mut frame Frame) set_unicode_encoding(idv3_version u8) {
// В v2.3 нет UTF-8, там Юникод только UTF-16 с BOM
if idv3_version == 3 {
frame.encoding_name = "UTF-16LE"
frame.encoding_name = 'UTF-16LE'
frame.encoding_name_idx = 1
} else {
frame.encoding_name = "UTF-8"
frame.encoding_name = 'UTF-8'
frame.encoding_name_idx = 3
}
}
@@ -97,10 +97,10 @@ fn (mut frame Frame) set_unicode_encoding(idv3_version u8) {
// Кодируем длину фрейма с нужным сдвигом
@[inline]
pub fn (mut frame Frame) encode_size(idv3_version u8) {
stride := if idv3_version == 3 {
[u64(24), u64(16), u64(8), u64(0xFF)]
} else {
[u64(21), u64(14), u64(7), u64(0x7F)]
stride := if idv3_version == 3 {
[u64(24), u64(16), u64(8), u64(0xFF)]
} else {
[u64(21), u64(14), u64(7), u64(0x7F)]
}
mut encoded_size := []u8{len: 4}
@@ -123,13 +123,17 @@ pub fn (mut frame Frame) encode_frame(idv3_version u8) {
// Не удалось закодировать в исходной кодировке фрейма, переходим на Юникод
frame.set_unicode_encoding(idv3_version)
iconv.vstring_to_encoding(frame.data, frame.encoding_name) or {
panic("не удалось закодировать фрейм ${frame.name}: ${err}")
panic('не удалось закодировать фрейм ${frame.name}: ${err}')
}
}
// Для UTF-16 с BOM (01) перед текстом нужен маркер порядка байт
frame.encoded_data = if frame.encoding_name_idx == 1 {
mut bom := if frame.encoding_name == "UTF-16BE" { [u8(0xFE), 0xFF] } else { [u8(0xFF), 0xFE] }
mut bom := if frame.encoding_name == 'UTF-16BE' {
[u8(0xFE), 0xFF]
} else {
[u8(0xFF), 0xFE]
}
bom << encoded_data
bom
} else {
@@ -174,7 +178,7 @@ pub fn (mut frame Frame) get_encoded_frame_tag(idv3_version u8) []u8 {
pub fn (mut frame Frame) to_bytes(idv3_version u8) []u8 {
// Картинка и нетронутые фреймы пишутся как были прочитаны,
// чтобы не потерять то, что не разбирается (язык в COMM, значение в TXXX, бинарные фреймы)
if frame.raw.len > 0 && (!frame.modified || frame.name == "APIC") {
if frame.raw.len > 0 && (!frame.modified || frame.name == 'APIC') {
return frame.raw
}
@@ -195,4 +199,4 @@ pub fn (mut frame Frame) set_data(data string) {
frame.data = data
frame.modified = true
}
}