какието проблемы при выводе в списке файлов какого-то символа

Здесь можно сообщить о найденных багах в Far.
2useven10
Posts: 3454
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 3 times
Been thanked: 121 times

какието проблемы при выводе в списке файлов какого-то символа

Post by 2useven10 » Wed 25 Oct, 2017 11:14

Latest post of the previous page:

API консоли для такой экзотики не приспособлено никак.
Приблизительно как программа считающая, что все символы однобайтные для работы с UTF8.
Именно поэтому отображение таких символов для консоли правильное поведение.

User avatar
John Doe
Бюрократ
Posts: 11789
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 126 times

какието проблемы при выводе в списке файлов какого-то символа

Post by John Doe » Wed 25 Oct, 2017 11:33

zg, очевидно, что тут не определено поведение для символов с "нулевой шириной".
Собственно это по сути и не символы, а модификаторы.
(Чтобы умничать дальше, придётся восстановить в памяти терминологию unicode, поэтому прошу не придираться к словам).

Что касается фара, то можно улучшить ситуацию. Потенциально вижу два пути:
1. Нормализовать строки композицией в NFC (NFKD, NFKC).
2. Выводить каждую колонку отдельно, честно задавая координаты её начала.

mxn
Posts: 7
Joined: Wed 25 Oct, 2017 07:21

какието проблемы при выводе в списке файлов какого-то символа

Post by mxn » Wed 25 Oct, 2017 11:46

zg wrote:
Wed 25 Oct, 2017 10:48
mxn wrote:
Wed 25 Oct, 2017 09:52
вопрос не в исправлении имени файла, а в некорреткной работы программы.
некорректно работающая программа — консоль windows, почему вы нам-то пишете?
я любого ответа ожидал, но не такого бредового)
в переводе на русский:
- Ваше программа, рассчитанная на мою ОС, не работает под ней
- Мы не виноваты, виновата ОС
))

Но я понял. проблема решена. т.е. это даже не проблема была, а попытка помочь обнаружить ошибку.
ошибку в проге, которую я уже 20 лет использую и отказаться не могу.

Спасибо и Удачи!

2useven10
Posts: 3454
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 3 times
Been thanked: 121 times

какието проблемы при выводе в списке файлов какого-то символа

Post by 2useven10 » Wed 25 Oct, 2017 11:50

mxn, похоже за 20 лет вы так и не прочли правила форума.

mxn
Posts: 7
Joined: Wed 25 Oct, 2017 07:21

какието проблемы при выводе в списке файлов какого-то символа

Post by mxn » Wed 25 Oct, 2017 11:57

2useven10 wrote:
Wed 25 Oct, 2017 11:50
mxn, похоже за 20 лет вы так и не прочли правила форума.
только что прочёл, никаких нарушений, оскорблений и т.п.)

но согласитесь, ответ был бредовый.
вопрос закрыт. еще раз спасибо

User avatar
DrKnS
Posts: 4842
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 146 times

какието проблемы при выводе в списке файлов какого-то символа

Post by DrKnS » Wed 25 Oct, 2017 12:15

John Doe wrote:
Wed 25 Oct, 2017 11:33
Потенциально вижу два пути:
1. Нормализовать строки композицией в NFC (NFKD, NFKC).
2. Выводить каждую колонку отдельно, честно задавая координаты её начала.
1. Никак не поможет одиночным символам меньшей или большей ширины.
2. Это, увы, будет чудовищно тормозить.

User avatar
John Doe
Бюрократ
Posts: 11789
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 126 times

какието проблемы при выводе в списке файлов какого-то символа

Post by John Doe » Wed 25 Oct, 2017 12:27

DrKnS wrote:
Wed 25 Oct, 2017 12:15
1. Никак не поможет одиночным символам меньшей или большей ширины.
Если символы выводятся не моноширинные, то приходится признать, что это всё-таки баг консоли.
Плюс, вижу что у 2useven10 и mxn поведение отличается. Если текст действительно один и тот же (не факт), то это тем более не фар виноват.
2. Это, увы, будет чудовищно тормозить.
Так ли чудовищно? (вопрос чисто для общего развития)

User avatar
zg
zero-gravity
Posts: 5449
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 63 times
Contact:

какието проблемы при выводе в списке файлов какого-то символа

Post by zg » Wed 25 Oct, 2017 12:55

John Doe wrote:
Wed 25 Oct, 2017 12:27
Если символы выводятся не моноширинные, то приходится признать, что это всё-таки баг консоли.
серьёзно? вы раздел про консоль в мсдн вообще читали? там пикселей нет совсем. есть символы. ВСЕ ОДИНАКОВОГО РАЗМЕРА. даже размер одного символа в реальных пикселях нормального способа узнать нет.
про скорость, я разницу между [x] ClearType friendly redraw (can be slow) и [ ] ClearType friendly redraw (can be slow) вижу на больших размерах консоли. это при том, что количества системных вызовов не меняется.

User avatar
John Doe
Бюрократ
Posts: 11789
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 126 times

какието проблемы при выводе в списке файлов какого-то символа

Post by John Doe » Wed 25 Oct, 2017 13:00

zg wrote:
Wed 25 Oct, 2017 12:55
серьёзно? вы раздел про консоль в мсдн вообще читали? там пикселей нет совсем. есть символы. ВСЕ ОДИНАКОВОГО РАЗМЕРА.
Вроде бы об этом я и пытался сказать.
Поскольку никакой "ширины" не предусмотрены, выводиться они должны в одном размере.

User avatar
zg
zero-gravity
Posts: 5449
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 63 times
Contact:

какието проблемы при выводе в списке файлов какого-то символа

Post by zg » Wed 25 Oct, 2017 13:07

John Doe wrote:
Wed 25 Oct, 2017 13:00
Поскольку никакой "ширины" не предусмотрены, выводиться они должны в одном размере.
вы уж как-то определитесь:
John Doe wrote:
Wed 25 Oct, 2017 11:02
Консоли не известно как вы там колонки хотите сформировать в этом вашем фаре.

User avatar
John Doe
Бюрократ
Posts: 11789
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 126 times

какието проблемы при выводе в списке файлов какого-то символа

Post by John Doe » Wed 25 Oct, 2017 13:17

Я вполне определён.
А вот юникод не настолько, и несколько элементов могут объединяться, образуя один символ.
Могу предположить, что функции форматирования строк, используемые фаром, этого не учитывают (не факт, что должны, я только лишь говорю, что вопрос неоднозначный)

User avatar
zg
zero-gravity
Posts: 5449
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 63 times
Contact:

какието проблемы при выводе в списке файлов какого-то символа

Post by zg » Wed 25 Oct, 2017 13:24

John Doe wrote:
Wed 25 Oct, 2017 13:17
я только лишь говорю, что вопрос неоднозначный
фигню вы говорите. вопрос однозначный. в апи ширины в пикселях нет. да можно использовать полулегальные методы, но консоль обновилась или появились масштабы отличные от 100% или просто другие настройки по подстановке отсутствующих глифов или ещё что — работать уже не будет.

User avatar
John Doe
Бюрократ
Posts: 11789
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 126 times

какието проблемы при выводе в списке файлов какого-то символа

Post by John Doe » Wed 25 Oct, 2017 13:34

zg wrote:
Wed 25 Oct, 2017 13:24
в апи ширины в пикселях нет
Про пиксели я ничего вроде там не говорил, как и про ширину, а лишь о том, что есть проблема композиции.
"Проблема" в том смысле, что поведение не закреплено ни в какой документации по консоли.

Если считать, что консоль не должна заниматься композицией, тогда вопрос однозначный.

User avatar
zg
zero-gravity
Posts: 5449
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 63 times
Contact:

какието проблемы при выводе в списке файлов какого-то символа

Post by zg » Wed 25 Oct, 2017 13:53

John Doe wrote:
Wed 25 Oct, 2017 13:34
Если считать, что консоль не должна заниматься композицией, тогда вопрос однозначный.
WriteConsoleOutput treats the source buffer and the destination screen buffer as two-dimensional arrays (columns and rows of character cells). The rectangle pointed to by the lpWriteRegion parameter specifies the size and location of the block to be written to in the console screen buffer. A rectangle of the same size is located with its upper-left cell at the coordinates of the dwBufferCoord parameter in the lpBuffer array. Data from the cells that are in the intersection of this rectangle and the source buffer rectangle (whose dimensions are specified by the dwBufferSize parameter) is written to the destination rectangle.
и в целом там очень сложно представить схему, отличную от один CHAR_INFO — один символ на экране.

User avatar
zg
zero-gravity
Posts: 5449
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 63 times
Contact:

какието проблемы при выводе в списке файлов какого-то символа

Post by zg » Wed 25 Oct, 2017 15:12

и чтобы закрыть тему окончательно:

Code: Select all

#include <stdio.h>
#include <windows.h>

int main(int argc,char *argv[])
{
  CHAR_INFO buffer[2]={{0x200e,0x17},{0x2013,0x17}};
  SMALL_RECT result={0,10,1,10};
  WriteConsoleOutputW(GetStdHandle(STD_OUTPUT_HANDLE),buffer,{2,1},{0,0},&result);
  printf("%d %d %d %d\n",result.Left,result.Top,result.Right,result.Bottom);
  return 0;
}
закрашивается два знакоместа. текст затирается тоже под два знакоместа. возвращается информация о выводе прямоугольника 2x1 знакомест. реально на экране текст в одно знакоместо.
теперь меняем атрибут второго символа на любой другой. всё остаётся по прежнему, кроме того, символы попадают в разные знакоместа. это, кстати, возможная причина, почему у 2useven10 ничего не съезжает. режим, где разделитель другого цвета.

выводы:
1. всё консольное апи заточено под то, что один CHAR_INFO занимает одно знакоместо на экране. т.е. исторически один ucs-2 символ на одно знакоместо. даже не utf-16. то что в msdn сделали глобальную замену ucs-2 на utf-16 — по факту для консоли ничего не поменяло.
2. для оптимизации скорости последовательность символов с одинаковыми отрибутами выводится за раз одним PolyTextOutW со всеми вытекающими отсюда проблемами.
3. майкрософт об этом в курсе, но творят какую-то странную фигню. вместо того, чтобы оставить старое апи для совместимости и добавить новых функций, городят всевозможную эвристику.
Attachments
console.png
console.png (620 Bytes) Viewed 7087 times
Last edited by zg on Wed 25 Oct, 2017 15:12, edited 1 time in total.

2useven10
Posts: 3454
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 3 times
Been thanked: 121 times

какието проблемы при выводе в списке файлов какого-то символа

Post by 2useven10 » Wed 25 Oct, 2017 15:28

zg wrote:
Wed 25 Oct, 2017 15:12
возможная причина, почему у 2useven10 ничего не съезжает.
Нет цвет там одинаковый.
Причина скорее в том, что улучшили эвристику, потому что с [x] Legacy console - съезжает (у меня Win10 FCU).
Last edited by 2useven10 on Wed 25 Oct, 2017 15:29, edited 1 time in total.

User avatar
zg
zero-gravity
Posts: 5449
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 63 times
Contact:

какието проблемы при выводе в списке файлов какого-то символа

Post by zg » Wed 25 Oct, 2017 16:54

John Doe wrote:
Wed 25 Oct, 2017 11:33
2. Выводить каждую колонку отдельно, честно задавая координаты её начала.
а в редакторе что делать?

Post Reply

Return to “Глюки и баги”