Разница между активной позицией данных и активной позицией представления - PullRequest
0 голосов
/ 05 февраля 2019

Какая разница в ключевом выходе между положением активных данных и положением активного представления, определенным отдельно в ECMA-48 в 4.2.5 и 4.2.6?

Я пытался переместить курсор в другую координату вконсоль с Escape-последовательностями, определенными в ECMA-48.

И я столкнулся с двумя реализациями, которые делают одно и то же, но на самом деле говорят что-то другое в определениях.

В соответствии с определениями:

CUP

CUP вызывает перемещение активной позиции презентации в компоненте презентации ...

HVP

HVP вызывает перемещение активной позиции данных вкомпонент данных ...

При тестировании с кодом C:

CUP:

printf("Hello");
printf("\x1b" "[" "%d" ";" "%d" "H", 5, 5);
printf("World");

HVP:

printf("Hello");
printf("\x1b" "[" "%d" ";" "%d" "f", 5, 5);
printf("World");

Онидают те же результаты.

Итак, в чем разница, которую стандарт пытается сделать, определив эти два термина?

РЕДАКТИРОВАТЬ:

Согласно 6.1.5,

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

И на стр. 16 (6.1.5),в первом параграфе:

Из-за возможных различий между последовательностью символов и траекторией символов, как в некоторых двунаправленных средах, координаты активной позиции данных в компоненте данных и активной позиции представления вКомпонент презентации может отличаться.

Объясните позицию активного представления и позицию активных данных в двунаправленной среде на практическом примере.

И какой следуетЯ использую для перемещения по консоли?

[NB: Не упоминайте использовать ncurses в вашей рекомендации.Но любая рекомендация по внедрению ECMA-48 приветствуется]

1 Ответ

0 голосов
/ 06 февраля 2019

Как говорится: для однонаправленного устройства нет никакой разницы.Вам придется исследовать двунаправленное устройство (и включить соответствующие режимы).

Это относится к устройству, где курсор может быть установлен на продвижение после того, как терминал напечатал символ каким-либо иным способом, чем слева направо , с переносом сверху вниз .Примерно так можно увидеть в веб-браузере с графическим интерфейсом пользователя, который посещает страницу на арабском языке: текст идет справа налево, но в него могут быть встроены текстовые компоненты, написанные слева направо.Позиции данных и представления используются, чтобы сохранить эту смесь прямо.(Если смеси нет, это тривиальная проблема, но, соответственно, мало интересная.)

VT100 никогда не делали этого.Последний из терминалов DEC в начале / середине 1990-х годов VT520 этого не сделал (вполне вероятно, что никакие широко используемые терминалы не поддерживали двунаправленное управление).Хотя в ECMA-48 2-е издание (август 1979 г.) было HVP 1019 *, формулировка о направлении была добавлена ​​в 4-е издание (декабрь 1986 г.),Это было несколько пересмотрено для 5-го издания (июнь 1991 г.).

Несколько эмуляторов терминала могут сделать это, но не имеют аппаратного терминала (который продемонстрировал бы функции, которыми обладают членыКомитет, который написал документы имел в виду), есть различия и разногласия по поводу толкования.

...