Новая строка


Новая строка

Новая строка

Новая строка или перевод строки или перенос строки или разделитель строк или символ конца строки (EOL) в информатике — специальный управляющий символ (или их последовательность), служащий для завершения или разделения строк в текстовых данных.

Содержание

Общие сведения

Название закрепилось из-за того, что следующий символ после разделителя печатается уже на новой строке, то есть на следующей строке, расположенной ниже текущего текста, сразу следующей за разделителем. В виде символов представляют «новую строку» по-разному, в зависимости от аппаратной платформы и операционной системы, что может стать потенциально проблемой при обмене данными между системами с различными представлениями форматирования текста.

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

В текстах, предназначенных для чтения людьми при помощи программ, использующих переносы слов, символ «новой строки» обычно необходим, только если перенос строки должен быть независим от положения следующего слова на этой же строке, как, например, между параграфами и вертикальными списками (см. жёсткий возврат и мягкий возврат)

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

Но́вая строка́ (калька с англ. new line, зд. «с новой строки») — понятие логического форматирования текста в текстовом процессоре, браузере и т.д. Как правило (хотя и не обязательно), новая строка начинает запись текста с нового абзаца (англ. hard return). Новая строка подразумевает обязательный перевод строки в соответственном месте текста, хотя «переводы строки» вообще имеются и внутри абзаца.

Возвра́т каре́тки (англ. Carriage Return, CR) — управляющий символ ASCII 0x0D, при выводе которого курсор перемещается к левому краю поля, не меняя высоту. Этот управляющий символ вводится клавишей «Enter». Будучи записан в файле, в отдельности рассматривается как перевод строки только в системах Macintosh.

Пода́ча строки́ (от англ. Line Feed, LF «подача [бумаги] на строку») — управляющий символ ASCII 0x0A, при выводе которого «курсор» перемещается на следующую строку.

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

Возвращается ли при этом курсор к левому краю или нет, зависит от реализации.

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

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

Представления и реализации

Программные приложения и операционые системы обычно представляют "новую строку" в виде одного или двух управляющих символов.

Краткие сведения

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

Основные цифровые реализации

  • CR + LF (ASCII 0x0D 0x0A) — используется в DEC RT-11 и большинстве остальных доюниксовых систем, несовместимых с IBM OS, а также в CP/M, MP/M, DOS, OS/2, Microsoft Windows, Symbian OS, протоколах internet.

Перевод строки в Unicode

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

  • LF: подача строки, U+000A
  • CR: возврат каретки, U+000D
  • NEL: новая строка, U+0085
  • FF: новая страница, U+000C
  • LS: разделитель строк, U+2028
  • PS: разделитель абзацев, U+2029

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

Трудности

  • Нет общепринятых сокращений русских терминов. ВК (Возврат Каретки) опасно совпадает по написанию с сокращением от англ. BreaK («разрыв [строки]», то же, что Перевод строки), а ПС не различает Подачу Строки и Перевод Строки.
  • Юникод старается примирить разницу представлений перевода строки, уравнивая CR, LF и CR LF, однако вступает в противоречие с наследуемым ASCII при трактовке LF CR, не предварённых CR: согласно ASCII это один перевод строки, а согласно Юникоду — два. Вероятно, Юникод сделал ставку на не существовавшие в ASCII разделители строк и абзацев, но они не прижились.
  • В зависимости от того, считать ли перевод строки её частью (завершителем) или не считать (считая их разделителем), после последней строки его ставят или нет. При пренебрежении одной из этих возможностей во время декодирования конец текста может стать неожиданным или появится лишняя пустая строка. Для сравнения, точка с запятой в Си команды завершает, а в Паскале разделяет.

История

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

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

Некоторые исторические цифровые системы записи текста (например, при помощи перфокарт) вообще не использовали символ перевода строки.

Примечания

  1. Non-tailorable Line Breaking Rules в стандарте Юникода

Дополнительные источники


Wikimedia Foundation. 2010.