Формат RTF в WinRT

86

Под RTF - «расширенным форматированием текста» — когда-то понимался вывод текста с разными шрифтами, размерами и начертанием, но теперь эти функции поддерживаются повсеместно, и термин теперь скорее обозначает некие нестандартные операции с текстом. Основная часть этой и последующих статей посвящена элементу RichTextBlock и элементу управления RichEditBox, которые (как нетрудно догадаться по именам) представляют собой усовершенствованные версии TextBlock и TextBox. Впрочем, будет также приведена полезная информация, которая поможет вам в выполнении более сложных операций по обработке текста.

Терминология в области работы со шрифтами несколько изменилась за годы электронной верстки. Термином «гарнитура» (typeface) традиционно обозначался конкретный дизайн глифов (например, Times New Roman или Helvetica). Гарнитуры обычно существовали в нескольких начертаниях, самыми распространенными из которых были курсивное и полужирное, поэтому семейство гарнитур могло включать гарнитуры Times New Roman, Times New Roman Italic и Times New Roman Bold.

Шрифт представляет собой физическую реализацию конкретной гарнитуры с конкретным стилем и размером — Helvetica Bold 10 пунктов в традиционной («до­компьютерной») верстке. Каждый символ конкретного шрифта представлял собой уникальную металлическую литеру.

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

Из-за этих новых представлений получил распространение термин «семейство шрифтов». Семейство шрифтов отчасти похоже на традиционную гарнитуру: у него есть имя - например, Times New Roman или Helvetica. Семейство шрифтов реализуется в Windows Runtime классом FontFamily. Свойство FontFamily используется программами Windows 8 в сочетании с другими шрифтовыми свойствами (FontSize, FontStyle, FontWeight и FontStretch) для формирования полной спецификации шрифта.

Однако в используемой технологии применяется более традиционный подход. В Windows шрифты реализуются в виде файлов, обычно с расширением .ttf («TrueType font»). Файлы шрифтов находятся в каталоге /Windows/Fonts. Большинство из них устанавливается с системой Windows, другие шрифты добавляются различными приложениями. Проводник Windows отображает этот каталог по особым правилам, поэтому имена файлов обычно не видны. (Кроме того, в этом каталоге также хранятся растровые шрифты конкретных размеров, но они используются в режиме командной строки.)

Вместо имен файлов в каталоге /Windows/Fonts отображаются имена семейств шрифтов — например, Georgia:

Отображение шрифта в Windows 10

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

Семейство шрифтов в Windows 10

Если теперь щелкнуть правой кнопкой на одном из файлов и вызвать окно свойств, вы увидите, что каждая модификация шрифта хранится в отдельном файле: georgiab.ttf, georgiaz.ttf, georgiai.ttf и georgia.ttf. Каждый файл содержит масштабируемые определения контуров многих символов — не всех символов Юникода, но значительного их подмножества.

Некоторые семейства шрифтов содержат другие варианты, кроме курсива и полужирного. Windows отвечает за подбор подходящего шрифта для заданной конкретной комбинации FontStyle, FontWeight и FontStretch.

Некоторые семейства шрифтов не имеют курсивного и полужирного начертания. Для них эти варианты начертания могут имитироваться наклоном символов или увеличением толщины линий.

Пройди тесты
Лучший чат для C# программистов