= Сообщение: 2908 из 3632 ======================================== RU.GOLDED = От : Nil A 2:5015/46 24 Oct 23 03:37:00 Кому : Vitaliy Aksyonov 24 Oct 23 03:37:00 Тема : Широкие терминалы и char buf[сколько не жалко].. StyleCodeHighlight FGHI : area://RU.GOLDED?msgid=2:5015/46+65371724 На : area://RU.GOLDED?msgid=1:104/117+65370da3 = Кодировка сообщения определена как: CP866 ================================== Ответ: area://RU.GOLDED?msgid=1:104/117+6537e7b0 Ответ: area://RU.GOLDED?msgid=2:460/5858+654326e3 ============================================================================== Hello, Vitaliy!
Monday October 23 2023 17:59, from Vitaliy Aksyonov -> Nil A:
NA>>> А фиг там, там разных char buf[200] разбросано по коду NA>>> (Container::StyleCodeHighlight). И наступить на них можно, если NA>>> там в письмах какие-то особо длнные _такие вот_, *или вот такое* NA>>> какие-то выделения, только за пределами этимх 256 байтов обычно.
VA> Понимаешь, самая большая проблема, что их нельзя просто VA> Find/Replace/sed. Во многих местах буферы адекватного размера, так как VA> есть натуральные ограничения данных. Например, имя сисопа в пакете. VA> Плюс эти структуры копируются простым memcpy, а некоторые даже VA> используются! для "сериализации". Так что там переделок намного VA> больше, чем хотелось бы.
Семён Семёныч, если бы там sed'ом можно было бы, то яб уже сделал ;-)
NA>> Короче, вот фикс, чтобы на широком экране, на длинной строчке, NA>> где есть *какие-то выделения* голдед не падал. VA> Создал pull request от твоего имени. :)
Спасиба.
VA> Там дело хуже. Когда URL длиннее строки, то подсвечивается только VA> первая строка. И это не айс. И я не вижу нормального способа это VA> починить. Ведь с новой строки может быть как продолжение ссылки, так и VA> просто текст.
Там в деде есть много каких-то интернетовских делов, которые мне ниразу не понятны кстати. То, якобы емейлы он умеет читать писать, только по smtp/pop3 не ходит, хотя не проверял. То URLы парсит как не в себя, но зачем? Вроде какие-то виндовые голдеды позволяют тыкать мышью в ссылки, и откроется в браузере, но я могу гнать.
VA> Далее. Список схем, которые понимает эхотаг, там жестко зашит.
[GoldED-NSF](https://fido.g0x.ru/golded/index.php) умеет и не только RFC схемы, но и area:// схемы. Кстати, ты глянул на патч, его можно влить в наш меинстрим-голдед?
VA> А теперь добавляем туда юникодные символы, и получаем еще более VA> интересную картину. Какой-нибудь https://пиво.рф или VA> git@исходники.ру:мой/репозиторий.git VA> Кто там хотел юникод? :)
Ага, давай уникод, майм, урл, всё в одну кучу смешаем.
VA> Там ещё другое есть. Это overlap при копировании строк. Когда oldMsg и VA> msg - это тот же объект. :) Вообще весело.
На собеседовании надо спрашивать потому что, чем отличается memcpy от memmove. Хотя в голдеде всё через strcpy, который во всех современных компилятора в buildin превращается по-любому, а не в либси ходит.
NA>> Вот теперь в них падает. Их что теперь, все в CREATEBUFFER(char, NA>> buf, MAXCOL) ? VA> Нет. Нельзя бездумно все. Лучше потихоньку переводить на std::string
-std=c++11 минимум только включите сначала, чтобы lvalue понимали, и move случался где надо, без копирований, и разные RVO и NRVO случались (хотя они и так случаются в современном компиляторе, даже со старыми стандартами, ибо никто не запрещает же). -std=c++17 яб на минималке включил, и общался там не через const std::string& везде, если ты уж будешь заменять, а на std::string_view.
VA> (в котором, кстати, тот же UTF-8 прекрасно хранится, если не надо VA> делать посимвольных операций, конечно), меняя алгоритмы.
В том то и дело, что std::string хранит просто байты, и ему пофиг что там, он такой же std::vector почти. Для нужд редактора нужно знать.. я щас не буду про поддержку еврита справо-налево и потом тут же английский и русский, справа налево, или какие-то азиатские языки, где вниз пишут.. Для нужд редактора нужно знать сколько графем..да блин, опять не смогу объяснить на пальцах.. и как минимум надо нормализовывать эти акценты, а то код сразу с акцентом, или буква А и к ней палочка с боку другим юникод символом, который не занимает знакоместо.
Такшта, не углубляясь в дебри, рекомендую не std::string, а какой-нибудь icu::UnicodeString. Ну окей, icu - это оверкилл, можно договориться, что в std::string мы ложим только utf8. Но тогда к нему надо функции посчитать сколько это символов в строке. Ну и тогда iconv сюда тупо зафигачить, и конвертить всё в utf8, а обратно с флажком //TRANSLIT.
Best Regards, Nil --- GoldED+/LNX 1.1.5 * Origin: Linux 2.6.32-042stab145.3 (2:5015/46) |