Interested Article - Перевод строки

Перевод строки или разрыв строки — продолжение печати текста с новой строки, то есть с левого края на строке ниже. Перевод строки выполняется также перед следующим абзацем или страницей. На компьютерах перевод строки осуществляется нажатием на клавишу ввода Enter .

Разделителем строк , обозначающим место перевода строки, в текстовых данных служит один или два управляющих символа ( \n в Unix и Unix-подобных операционных системах , \r в MacOS , \r\n в Windows ), а в размеченном тексте — определённый тег (например в HTML — тег <br> , от англ. break — «разрыв»).

Терминология

Перевод строки сокращают как NEL (от англ. next line — «со следующей строки, переход на следующую строку», или newline — «с новой строки, переход на новую строку»).

Возврат каретки ( англ. carriage return , CR ) — управляющий символ ASCII ( 0x 0D , 13 10 , '\r'), при выводе которого курсор перемещается к левому краю поля. Этот управляющий символ вводится клавишей «Enter» . Будучи записан в файле , в отдельности рассматривается как перевод строки только в системах Macintosh .

Подача на строку или Перевод на строку (от англ. line feed , LF — «подача [бумаги] на строку») — управляющий символ ASCII ( 0x 0A , 10 в десятичной системе счисления, '\n'), при выводе которого курсор перемещается на следующую строку. В случае принтера это означает сдвиг бумаги вверх, в случае дисплея — сдвиг курсора вниз, если ещё осталось место, и прокрутку текста вверх, если курсор находился на нижней строке. Возвращается ли при этом курсор к левому краю или нет, зависит от реализации.

Таким образом, вывод последовательности CR + LF в семантике терминала гарантирует действие «создание новой строки».

Терминалы (и их эмуляторы ) могут также проводить различные преобразования символов (например, LF CR + LF , CR CR + LF ) при вводе и выводе текста.

Жёсткий возврат , иногда аппаратный возврат — разделитель строк, поставленный пользователем. В машинном представлении текста жёсткий возврат явно выражен, обычно управляющими символами или тегом .

Мягкий возврат — перевод строки, выполненный текстовым процессором в том месте текста, которое им выбрано. Мягкий возврат разделяет строки текста в его визуальном (видимом пользователем) представлении, но может быть никак не выражен в машинном представлении этого текста.

В ASCII

Системы, основанные на ASCII или совместимом наборе символов, используют или LF (перевод строки, 0x 0A ), или CR (возврат каретки, 0x 0D ) по отдельности, или последовательность CR + LF ; см. ниже историческую причину для соглашения CR + LF . Эти названия основаны на командах принтера: перевод строки прокручивает барабан на одну строку, а возврат каретки означает, что каретка печатающего устройства должна вернуться к началу текущей строки.

В Юникоде

По стандарту любое совместимое с Юникодом приложение должно воспринимать как перевод строки каждый из следующих символов:

  • LF ( U+000A ): англ. line feed — подача строки <ПС>;
  • CR ( U+000D ): carriage return — возврат каретки <ВК>;
  • NEL ( U+0085 ): next line — переход на следующую строку;
  • LS ( U+2028 ): line separator — разделитель строк;
  • PS ( U+2029 ): paragraph separator — разделитель абзацев.

Последовательность CR + LF ( U+000D U+000A ) следует воспринимать как один перевод строки, а не два .

Трудности

Нет общепринятых сокращений русских терминов. ВК ( В озврат к аретки) совпадает по написанию с сокращением от англ. BreaK («разрыв [строки]», — то же, что перевод строки), а ПС не различает П одачу с троки и П еревод с троки.

Разница представлений

Отсутствие единого общепринятого представления перевода строки в разных операционных системах осложняет обмен текстовыми данными между ними. Юникод старается примирить эту разницу, уравнивая CR , LF и CR + LF , однако вступает в противоречие с наследуемым им ASCII при трактовке последовательности LF + CR , не предварённой CR : согласно ASCII это один перевод строки, а согласно Юникоду — два.

Перевод строки при вводе с клавиатуры представлен единообразно во всех системах — символом CR , и в системах с другим представлением перевода строки текстовые данные приходится перекодировать в необходимый формат.

История

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

CR + LF

На механических пишущих машинках был рычаг, который возвращал каретку к левому краю страницы и прокручивал вал, подвигая бумагу вверх на строку. На телетайпах и более поздних алфавитно-цифровых печатающих устройствах (АЦПУ) вместо каретки была головка, в лазерных принтерах она перестала быть материальной, но в термине возврат каретки всё это продолжали называть кареткой, чтобы его не менять. На телетайпах возврат каретки и подачу строки разделили, откуда традиция представления перевода строки как CR + LF перешла и к текстовым файлам.

Конец строки

Телетайпы сначала печатали на рулонной бумаге, и сообщения начинали и заканчивали переводом строки, чтобы каждое начиналось с новой строки наверняка. Отсюда пошёл обычай включать разделитель сообщений в состав самого сообщения.

На компьютерах появился диалоговый режим работы, когда поочерёдно печатались вводимые управляющие сообщения пользователя и ответные программные сообщения. Пользователь после сообщения всегда переводил строку, так как одновременно это означало команду к исполнению, а вот программы после своего сообщения строку иногда не переводили, несмотря на предписание. Устройство вывода изначально не было приспособлено к тому, чтобы терминал мог следить за переводами строк, и реализовать это было трудно, поэтому чтобы ввод пользователя начинался с новой строки наверняка, управляющий диалогом терминал после программного сообщения переводил строку тоже. Помещать перевод строки предписывалось и в конце текстового файла.

Забота о разделении сообщений легла на терминал, и думать об этом перестали, а перевод строки в конце текста переосмыслился как конец последней строки, вместе с чем как концы строк переосмыслились и вообще все переводы строк, чему способствовало удобство работы с регулярно завершёнными строками с точки зрения программирования, сродни нуль-терминированным строкам . Так обычай включать разделитель сообщений в состав сообщения перешёл в обычай включать разделитель строк в состав строки.

Лишняя строка в конце файла обычно не представляет хлопот, поэтому перевод строки до сих пор называют концом строки, а разделитель строк — символом конца строки (EOL, англ. end of line ).

Перетекание разделителя в завершитель и обратно бывает не только у перевода строки. Так, точка с запятой в языке Си команды завершает, а в Паскале — их разделяет. В письменной речи после нескольких предложений точку почти всегда ставят, а после одиночного — чаще нет. Это колебание хорошо видно в списках , где одиночные предложения иногда начинают с большой буквы, а иногда — с маленькой.

Абзац

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

Позже в редакторах появился автоматический перенос, выполняемый на лету при отрисовке текста каждый раз заново. Для отличения от ручного его назвали мягким возвратом, а ручной — жёстким (перенос называли и просто возвратом, см. раздел ). Разделитель строк при этом переносил как раньше, но приобрёл смысл ещё и разделителя абзацев — для тех строк, в которых срабатывал автоперенос и которые становились при этом абзацами. Включатель такого режима назвали переносом по словам ( англ. word wrap ). При автопереносе ручной перенос разрывал абзац, межабзацный интервал делался как раньше (в новых терминах — перемежением пустым абзацем), но основное качество абзаца — независимость от разбиения на строки — было достигнуто.

Режим автопереноса включался и выключался пользователем вручную, определить это программно было трудно, то есть, избавившись от ручного переноса, получили другую ручную операцию. Стало понятно, что не обойтись без более автоматизирующего разнесения разделителя строк и разделителя абзацев, то есть для них понадобились два разных символа.

Чтобы не заботиться о совместимости с уже существующим в ASCII разделителем строк/абзацев, разработчики не стали использовать символы ASCII для разделителя строк и разделителя абзацев. В HTML использовали теги <br /> и <p> , в Юникоде — символы U+2028 и U+2029 , соответственно. В Википедии абзацы можно разделять пустыми строками, отображаемыми при этом полноценным интервалом.

См. также

Примечания

  1. от 17 февраля 2009 на Wayback Machine (англ.)

Ссылки

  • Параграф 8 ( Newline Guidelines ) ( Implementation Guidelines ) (англ.)
  • (англ.) — заметка W3C
  • Xavier Noria. (англ.)
  • (англ.)
  • (англ.)
  • (англ.) — свободная программа для преобразования переводов строк в файлах в ASCII-кодировке между форматами MS-DOS/Windows и UNIX
  • (англ.) — расширение Проводника Windows для преобразования переводов строк между форматами MS-DOS/Windows и UNIX; представляет собой GUI-версию для Windows программы
Источник —

Same as Перевод строки