Здравствуйте, Sinclair, Вы писали:
S>>Ну, то есть подменять текст. Я это назвал «через редактирование самой строки». Нет ли иных способов?
S>Отказаться от редактирования строки, научиться мыслить в терминах "преобразование числа в строку в соответствии с определёнными культурными предпочтениями и техническими особенностями".
S>Когда число уже преобразовано в строку, оборудовать его культурой поздно.
Очень глубокий ответ, очень. Но я его не понял.
Вот у нас поле ввода.
Вот юзер хочет ввести число: 1 000 000 001 (или 1 000 000 002). Он жмакает по цифровой клавиатуре и видит: 10000000001.
Вот юзер, конечно, думает: а не нажал ли я лишнего? И начинает считать нули, выделяя текст/расставляя группы пробелами, которые потом стирает/водя грязным ногтём по экрану/иным способом в рамках фантазии.
Это проблема. Юзер должен сразу видеть, что он вводит.
Как выглядит решение «в терминах "преобразование числа в строку в соответствии с определёнными культурными предпочтениями и техническими особенностями"»?
А чтобы стало веселее,
я пошёл домой за ружьём представим себе, что это поле ввода калькулятора, куда вводятся выражения:
1 000 000 001 + 1
1 000 000 001 / pi
sin(1 000 000 001)
Как видите, в этом юз-кейсе:
1. Проблема стоит особенно остро (в львиной доле случаев вводятся числа, иногда большие);
2. Мы не можем ограничиться вводом символов, составляющих число и не можем просто взять специальный контрол «поле ввода числа»;
3. Вставка пробелов и прочих разделителей чревата конфликтами с грамматикой языка.
Что касается «культурных предпочтений». Идеально было бы брать «разделитель групп» из настроек операционной системы. Но, например, браузер вам этого не даст (ибо отпечатки). Браузер даст только: а) название култур-мултур, б) интерфейс, который отформатирует число в соответствии с этой культурой. То есть, как ни настраивай юзер операционную систему, браузер всё равно сведёт всё к наибольшему общему делителю данной культуры (что сильно обесценивает саму идею).
Вывод напрашивается такой: ну и к чёрту эти культурные особенности, это тот случай, когда должна работать глобализация. То есть, пусть у нас всегда группы разделяются расстоянием, ну, максимум, с учётом LTR/RTL.
Если я не прав, то как надо? Это первый вопрос.
Второй: ну, допустим, я прав. Как это реализовать? Естественно, в голову приходят лигатуры, как образец готового решения. Логику можно упихать в шрифт, типа «цифра до и три цифры после — увеличиваем кернинг». Решение хорошо тем, что будет работать везде, и в HTML, и в Qt, и в Скайтере. Но это же надо как-то шрифт на лету подменять.