stringtranslate.com

Перенос строк и слов

С переносом слов

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrum ullamco Laboris Nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor в осуждении за сладострастие velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint ocaecat cupidatat not proident, sunt in culpa qui officia deserunt mollit anim id est Laborum.

Без переноса слов

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrum ullamco Laboris Nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor в осуждении за сладострастие velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint ocaecat cupidatat not proident, sunt in culpa qui officia deserunt mollit anim id est Laborum.

Жестко закодированные переводы строк

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut Labore et dolore
magna aliqua. Ut enim ad minim veniam, quis nostrum
ullamco Laboris Nisi ut aliquip ex ea
commodo consequat. Duis aute irure dolor в
осуждении за сладострастие velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint ocaecat cupidatat
not proident, sunt in culpa qui officia deserunt mollit
anim id est Laborum.

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

Мягкие и жесткие возвраты

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

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

В современных графических текстовых процессорах Microsoft Word и Libreoffice Writer пользователи должны вводить возврат каретки ( ) между каждым абзацем. Настройки форматирования, такие как отступ первой строки или интервал между абзацами, вступают в силу там, где возврат каретки отмечает разрыв. Неабзацный разрыв строки, который является мягким возвратом, вставляется с помощью + или через меню и предоставляется для случаев, когда текст должен начинаться с новой строки, но ни один из других побочных эффектов начала нового абзаца нежелателен.EnterShiftEnter

В текстовых языках разметки мягкий возврат обычно предлагается как тег разметки. Например, в HTML есть тег <br>, который имеет то же назначение, что и мягкий возврат в текстовых процессорах, описанный выше.

Юникод

Алгоритм переноса строк Unicode определяет набор позиций, известных как возможности переноса , которые являются подходящими местами для начала новой строки. Фактические позиции переноса строк выбираются среди возможностей переноса программным обеспечением более высокого уровня, которое вызывает алгоритм, а не самим алгоритмом, поскольку только программное обеспечение более высокого уровня знает о ширине дисплея, на котором отображается текст, и ширине глифов, которые составляют отображаемый текст. [1]

Набор символов Unicode содержит символ разделителя строк, а также разделитель абзацев для представления семантики мягкого и жесткого возврата строки.

0x2028 РАЗДЕЛИТЕЛЬ СТРОК
* может использоваться для однозначного представления этой семантики
0x2029 РАЗДЕЛИТЕЛЬ АБЗАЦА
* может использоваться для однозначного представления этой семантики

Границы слов, переносы и твердые пробелы

Мягкие переносы обычно размещаются после концов полных слов или после знаков препинания, следующих за полными словами. Однако перенос слов может также происходить после дефиса внутри слова. Иногда это нежелательно и может быть заблокировано с помощью неразрывного дефиса или жесткого дефиса вместо обычного дефиса.

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

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

Перенос слов в тексте, содержащем китайский, японский и корейский языки

В китайском , японском и корейском языках перенос слов обычно может происходить до и после любого символа хань , но некоторые знаки препинания не могут начинать новую строку. [2] Японская кана обрабатывается так же, как и символы хань ( кандзи ), в расширенном виде, то есть слова могут и, как правило, разрываются без явного указания на то, что слово продолжается на следующей строке.

Однако при определенных обстоятельствах перенос слов нежелателен. Например,

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

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

Алгоритм

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

Минимальное количество строк

Простой способ сделать перенос слов — использовать жадный алгоритм , который помещает как можно больше слов в строку, а затем переходит к следующей строке, чтобы сделать то же самое, пока не останется больше слов для размещения. Этот метод используется многими современными текстовыми процессорами, такими как Libreoffice Writer и Microsoft Word. [ необходима цитата ] Этот алгоритм всегда использует минимально возможное количество строк, но может привести к строкам самой разной длины. Следующий псевдокод реализует этот алгоритм:

ПробелЛиния := ШиринаЛиниидля каждого слова в тексте если (Ширина(Слово) + ШиринаПробела) > ПробелСлева вставить перенос строки перед словом в тексте Пробел слева := Ширина строки - Ширина (слово) еще ПробелЛиния := ПробелЛиния - (Ширина(Слово) + ШиринаПробела)

Где LineWidth— ширина строки, SpaceLeft— оставшаяся ширина пробела в строке для заполнения, SpaceWidth— ширина одного символа пробела, Text— входной текст для итерации, Word— слово в этом тексте.

Минимальная рваность

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

История

Примитивная функция разрыва строки была использована в 1955 году в «контрольном устройстве страничного принтера», разработанном Western Union . Эта система использовала реле, а не программируемые цифровые компьютеры, и поэтому нуждалась в простом алгоритме, который можно было бы реализовать без буферов данных . В системе Western Union каждая строка разрывалась на первом символе пробела, появлявшемся после 58-го символа, или на 70-м символе, если символ пробела не был найден. [3]

Жадный алгоритм разрыва строк появился раньше метода динамического программирования, описанного Дональдом Кнутом в неопубликованной записке 1977 года, описывающей его систему набора текста TeX [4] и позднее более подробно опубликованной Кнутом и Плассом (1981). [5]

Смотрите также

Ссылки

  1. ^ Heninger, Andy, ed. (2013-01-25). "Алгоритм разбиения строк Unicode" (PDF) . Технические отчеты . Приложение № 14 (Предлагаемое обновление стандарта Unicode): 2 . Получено 10 марта 2015 г. . WORD JOINER следует использовать, если намерение состоит только в том, чтобы предотвратить разрыв строки
  2. ^ Лунде, Кен (1999), Обработка информации CJKV: китайская, японская, корейская и вьетнамская вычислительная техника, O'Reilly Media, Inc., стр. 352, ISBN 9781565922242.
  3. Харрис, Роберт У. (январь 1956 г.), «Стандартизация клавиатуры», Western Union Technical Review , 10 (1): 37–42, архивировано из оригинала 2015-08-03 , извлечено 2013-04-07.
  4. ^ Кнут, Дональд (1977), TEXDR.AFT , получено 07.04.2013. Перепечатано в Кнут, Дональд (1999), Цифровая типография , CSLI Lecture Notes, т. 78, Стэнфорд, Калифорния: Центр изучения языка и информации, ISBN 1-57586-010-4.
  5. ^ Кнут, Дональд Эрвин; Пласс, Майкл Ф. (1981), «Разбиение абзацев на строки», Программное обеспечение: практика и опыт , 11 (11): 1119–84, doi :10.1002/spe.4380111102, S2CID  206508107

Внешние ссылки

Алгоритм Кнута

Другие ссылки для переноса слов