eddy_em: (Костерок)
[personal profile] eddy_em
Geany имеет свойство все файлы, содержащие только ASCII, открывать как utf8, что очень сильно печалит меня, когда я пытаюсь сохранить файл, введя туда какие-нибудь строки на кириллице (комментарии для gettext'а, текс для вывода на экран микроконтроллером или еще что-нибудь)! Я поинтересовался на SO, и, о чудо! Добрый человек помог найти решение этой проблемы: комментарий //geany_encoding=koi8-r в начале каждого файла решает эту проблему!
P.S. Проверил: не обязательно именно так, достаточно просто чтобы "geany_encoding=koi8-r" содержалось в самой первой строке файла с текстом.

Date: 2017-01-27 12:28 pm (UTC)
From: [personal profile] ex0_planet
госпади, да закопай ты её уже!

да, и geany тоже

Date: 2017-01-27 12:49 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Покуда китайцы нас не захватили, нет смысла пользоваться в текстах хрюникодом.
А насчет Geany — покажи мне более удобный IDE, и я перейду на него. Из известных мне все какие-то убогие/тормозные.

Date: 2017-01-27 12:57 pm (UTC)
From: [personal profile] ex0_planet
в юникоде много чего интересного: диакритика, индексы, псевдографика...
софт, опять же, от буквы 'ъ' не дуреет...

Date: 2017-01-27 01:00 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Я не говорил, что хрюникод не нужен вообще: он используется в pdf-файлах, которые после компиляции латеховских исходников получаются.
Но в текстовых файлах нет места кодировкам кроме однобайтных!
Псевдографика, кстати, отлично средствами КОИ-8 реализуется. И от буквы 'Ъ' никто не дуреет: это проблема только криворуких погромистов, которые вместо int используют char при считывании из файлов, поэтому у них EOF и 'Ъ' тождественны.

Date: 2017-01-27 01:40 pm (UTC)
From: [personal profile] ex0_planet
> в текстовых файлах нет места кодировкам кроме однобайтных

Давай уж будем до конца последовательны, и скажем, что "нет места... кроме семибитных". Случаи-то разные бывают, и для какого-нибудь русско-китайского переводчика, показывающего презентацию в Лос-Анджелесе будет гораздо логичнее писать в исходниках документа что-то вроде "\lang{Zh}[ni-hao shii-jie] -- \lang{Ru}[Pri-v'et Mir] -- Hello, world !", нежели предпочитать какую-то национальную кодировку.


> проблема только криворуких погромистов

Проблема в том, что заранее неизвестно, криворук ли программист, писавший данную конкретную программу. Рассуждая абстрактно, и utf-8 и koi-8 обе являются хаками, предназначенными для того, чтобы пропихнуть расширенный набор символов в 8 бит, но utf8 имеет то преимущество, что в нем не встречаются "типично проблемные" code point'ы, так что utf-8 текст пропихнется в неизвестную программу без повреждений, либо сломается очевидно и сразу.

Date: 2017-01-27 01:45 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
> нет места... кроме семибитных
Это уже извращение, т.к. все реально используемые архитектуры используют восьмибитные char.

> для какого-нибудь русско-китайского переводчика
Вот в этом случае как раз придется в латеховских исходниках бульбенить хрюникод. И, наверное, вместо нормального латеха какое-нибудь содомитское поделие вроде хетеха использовать.

> utf8 имеет то преимущество, что в нем не встречаются "типично проблемные" code point'ы
Ага, ничего подобного! В кои8 я пишу: "malloc(strlen("Шаломчег!")+1);" и получаю место для этой строки. А в хрюникоде мне сначала надо будет посчитать, сколько ж там байт.

Я уж не говорю о дебилизме сования хрюникода в микроконтроллеры (а некоторые суют): это ж как надо извращаться со шрифтами!

Date: 2017-01-27 02:08 pm (UTC)
From: [personal profile] ex0_planet
> в хрюникоде мне сначала надо будет посчитать, сколько ж там байт

Во-первых, компилер это сделает за тебя, потому что реально в памяти будет строка "\xd0\xa8\xd0\xb0\xd0\xbb\xd0\xbe\xd0\xbc\xd1\x87\xd0\xb5\xd0\xb3\x21\x0" и сколько там байт и так понятно. А во-вторых, знать во сколько оно превращается глифов на экране (и как они расположены) должен знать обычно редакторский пакет или графический тулкит, которые и без этого достаточно тяжелы.

Date: 2017-01-27 02:24 pm (UTC)
From: [identity profile] mbr.livejournal.com
Я сую. Потому, что у меня был проект с выводом на иврите. Ничто кроме юникода там реализовать было невозможно. Особенно вкусно выглядят строки, в которых есть английский и иврит.

Завтра будет арабский, послезавтра китайский. И вот, чтобы каждый раз не ебать мозг, как это все там реализовать, я использую utf8. Всегда.

А чтобы вот из-за таких криворуких текст не выглядел, как полное говно, есть три главных принципа, которые я соблюдаю:

1. Если нет специального требования локализованного интерфейса, сделать его исключительно на английском. Если есть - все в отдельный ресурсный файл.
2. Комментарии в коде - только на английском.
3. Любая сопроводительная документация - в pdf.

А то одни из-за упоротости в koi-8r пишут, другие от безграмотности в 1251. И разгребай потом этот зоопарк.

Date: 2017-01-27 02:38 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
1. Для этого есть gettext
2. Для облегчения перевода (можно тупо скриптом генерировать русский перевод) нужно добавлять русские комментарии перед соответствующими фразами. Их xgettext добавит в po-файлы, и можно будет автоматом заполнить.
А комментарии по существу, естественно, только на английском должны быть. Я уж насмотрелся на китайский говнокод, где вообще непонятно что куда и зачем: код — сплошная лапша, а комментарии на китайском.
3. Ясен пень.

P.S. А насчет хрюникода я еще не парюсь потому, что единственные языки, которые я знаю, со своими буквами прекрасно влезают в однобайтную кодовую таблицу. Да, я — дурень, что сразу не пользовался cp1251, где буквы по алфавиту отсортированы, теперь мучаюсь с КОИ8, значительно увеличивая время для сортировки текстов.

P.P.S. Кстати, ты не встречал вменяемой реализации EXT2 для мелкоконтроллеров, чтобы можно было флешку к STM'ке присобачить? Есть задумка даталоггер сделать, но VFAT пихать категорически не хочу. На крайняк сделаю свою псевдофайловую систему (например, можно вообще в виде tar данные сохранять).
Edited Date: 2017-01-27 02:41 pm (UTC)

Date: 2017-01-27 02:47 pm (UTC)
From: [identity profile] mbr.livejournal.com
Какие к черту русские комментарии? Если разработчик не знает английского технического - он идиот и гнать его в шею.

Какой к черту gettext? Мне Qt генерирует одной кнопкой весь интерфейс. Положил рядом файл с нужным языком - все, локализация готова. Локали сам тащит.

Ты дурень, потому, что слишком категоричен и излишне упорот ;)

FAT16 стандарт де-факто для таких задач. Не еби мозг.

Date: 2017-01-27 02:55 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
> Какие к черту русские комментарии?
Вот тебе пример: комментарий, начинающийся с ///, xgettext занесет в po-файл, в итоге можно будет сгенерить русский перевод довольно-таки шустро.

> Мне Qt генерирует одной кнопкой весь интерфейс.
Не звизди! Тебе прямо культя возьмет, и фразу "Input device not found" на русский переведет и в mo-файл добавит? Угу-угу!

> слишком категоричен и излишне упорот
Могу себе позволить.

> FAT16 стандарт де-факто для таких задач
Только не в моем случае: vfat очень жирная и тупая. Нафиг-нафиг! Проще уж свою ФС сделать, написать для нее линуксовый модуль ядра и работать. В данном случае директории не нужны, как и права доступа → можно вообще кучу сисвызовов заглушками закрыть и будет счастье.

Date: 2017-01-27 03:04 pm (UTC)
From: [identity profile] mbr.livejournal.com
> Вот тебе пример
Ты doxygen что-ли не осилил? Но ты не о том вообще.

> Не звизди! Тебе прямо культя возьмет, и фразу "Input device not found"

Нужные строки в коде оборачиваешь в tr("Input device not found"), добавляешь транслятор. Он автоматом вытягивает из текстового файла перевод на лету. Это вам не в geany писать.

> Проще уж свою ФС сделать

*facepalm*. Не нравится тебе VFAT, ну возьми 8.3 и не парься. Реализация там дубовая и простая. Можешь у меня сырцы дернуть, отключить VFAT.

Date: 2017-01-27 03:20 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
doxygen генерит документацию, а не перевод! А мне хочется в русской локали русский текст видеть, без gettext это решается только велосипедами.

> Нужные строки в код...
Ты сейчас описал gettext.

Date: 2017-01-28 01:19 am (UTC)
From: [identity profile] dimas.livejournal.com
Если у тебя эта строка уже где-то была переведена, то да, Qt сразу предложит этот вариант перевода. Вообще, их транслятор достаточно удобный для работы локализатора, показывает изменившиеся и новые строки, и классовый контекст позволяет меньше заморачиваться "разведением" одинаковых строк.

Ну а про кои и утф мы уже спорили :)

Date: 2017-01-27 10:50 pm (UTC)
From: [personal profile] ex0_planet
И, да, насчет geany. Вместо стандартного способа установить file-local variables в виде "-*- ... -*-" у нас теперь есть вот это. Давайте теперь еще эклипс себе сделает eclipse_encoding=, еще кто-нибудь хуйпизда_encoding=... и вот тут заживем!

Date: 2017-01-28 06:55 am (UTC)
From: [identity profile] eddy-em.livejournal.com
geany можно просто указать encoding=... в первых 512 байтах текста.

Date: 2017-01-27 01:07 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Дык, ясен пень, что костыль. Но что поделать: ковыряться в тоннах текстов на ГовноТыКе, чтобы добавить нужную мне фичу, мне совершенно не хочется!

April 2025

S M T W T F S
  1 23 45
67 89101112
13141516171819
20212223242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2025 08:26 pm
Powered by Dreamwidth Studios