❗ Вебсайт в стадии бета-тестирования. Возможны ошибки.

Разделители

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

Глифы разделителей играют чрезвычайно важную роль в типографике. Начнём с того, что пробелы — половина текста! Глифы разделителей присутствуют во всех шрифтах без исключения, вне зависимости от наличия или отсутствия засечек.

Разделители классифицируют на:

  • форматные разделители;
  • пробельные разделители.

Форматные разделители

К форматным разделителям относят:

  • символ перевода строки;
  • символ разделения абзацев.

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

Пробельные разделители

К пробельным разделителям относят:

  • пробел em ( );
  • пробел en, половина em ( );
  • пунктуационный пробел ( );
  • пробел;
  • цифровой пробел ( );
  • математический пробел ( );
  • неразрывный пробел ( );
  • третья часть, треть em ( );
  • четвёртая часть, четверть em ( );
  • тонкий пробел, пятая часть em ( );
  • узкий неразрывный пробел, пятая часть em ( );
  • шестая часть em ( );
  • очень тонкий пробел, волосяной пробел ( ).
Сравнение ширины пробелов

Сравнение ширины пробелов

Происхождение термина «пробел» связано с письмом на белой бумаге. Мы не пишем какой-либо знак, мы оставляем пустое, белое пространство.

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

В моноширинном шрифте обычный пробел равен ширине глифа. В пропорциональном шрифте ширина пробела зависит от как от глифа, так и особенностей шрифта. Вариации типичных значений ширины пробела от ⅕ em до ⅓ em. Где em — номинальный размер шрифта. Например, для шрифта размером 10pt (пунктов) ширина пробела составит от 2 до 3 пунктов. В сложных шрифтах присутствуют пробелы разной ширины. Отдельно для регулярного, курсивного, полужирного, капительного начертаний. И это не считая присутствия других пробельных разделителей. В общей сложности набегает до 54 глифов пробела совместно с форматными разделителями! Пробелов больше, чем букв в русском алфавите.

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

Пробелы в программировании

В синтаксисе большинства языков программирования пробелы играют значащую роль:

  • разделяют токены;
  • образуют синтаксические конструкции, как в языке Python;
  • служат для разметки элементов гипертекста, как в языке Markdown.

При этом языки программирования запрещают большинство из пробельных разделителей Юникода. Разрешены только символы с кодом ASCII.

Табуляция работает по разному. В обычных условиях редактор добавляет в текст код табуляции. В программировании редактор заменяет табуляцию на череду пробелов, как правило, четырёх.

Сетевой протокол HTTP также ограничен в пробельных разделителях. Только код обычного пробела в строке состояния, форматный разделитель CRLF (перевод строки) в конце строки.

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

Пробелы в разметке

Некоторые языки разметки сохраняют пробелы в том виде, в котором они записаны. Например, так поступает SGML.

Языки HTML и XML обрабатывают пробелы особым образом. Процессор обработки языка считывает строку и сворачивает один или несколько пробелов в 0 или 1 в зависимости от семантического контекста. Например, два и более пробела в тексте процессор сворачивает в один пробел. А пробелы по обе стороны глифа «=», разделяющего наименование атрибута от его значения, удаляет или игнорирует поскольку они не влияют на интерпретацию выражения. Аналогично — могут содержать пробелы концевые теги HTML и XML перед последовательностью «/>».

При чтении парсером XML последовательности пробелов в значениях атрибутов будут интерпретированы как один пробел. Парсер XML не изменяет содержимое XML элемента и не удаляет лишние пробелы. Однако приложение, которое получит XML файл, может применить аналогичные правила к содержимому и удалить лишние по его мнению пробелы. Для того, чтобы запретить удаление пробелов в содержимом XML документа, автору следует установить значение атрибута xml:space="preserve" для соответствующего элемента.

Парсер HTML в большинстве элементов обрабатывает последовательность пробелов как один разделитель между словами (inter-word separator). В результате браузер отображает один пробел между словами. Конформный рендерер HTML задаёт литеральное поведение пробелов к определённым элементам. Например, к элементам внутри тегов <pre>…</pre> для которых свойство CSS:

white-space: pre;
    /* или */
white-space: pre-wrap;

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

Парсеры разметки XML и HTML не воспринимают неразрывные пробелы и другие «нестандартные» пробельные разделители как сворачиваемые пробелы.