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