Поделиться через


Функции шрифта OpenType

В этом разделе представлен обзор некоторых ключевых функций технологии шрифтов OpenType в Windows Presentation Foundation (WPF).

Формат шрифта OpenType

Формат шрифта OpenType — это расширение формата шрифта TrueType®, добавляя поддержку данных шрифта PostScript. Формат шрифта OpenType был разработан корпорацией Майкрософт и корпорацией Adobe Corporation. Шрифты OpenType и службы операционной системы, поддерживающие шрифты OpenType, предоставляют пользователям простой способ установки и использования шрифтов, содержащих контуры TrueType или структуры CFF (PostScript).

Формат шрифта OpenType отвечает следующим задачам разработчика:

  • Более широкая поддержка нескольких платформ.

  • Улучшена поддержка международных наборов символов.

  • Улучшена защита данных шрифта.

  • Меньшие размеры файлов, чтобы повысить эффективность распределения шрифтов.

  • Более широкая поддержка расширенного управления типографикой.

Замечание

Пакет SDK для Windows содержит набор примеров шрифтов OpenType, которые можно использовать с приложениями Windows Presentation Foundation (WPF). Эти шрифты предоставляют большинство функций, показанных в остальной части этого раздела. Дополнительную информацию см. в примере пакета шрифтов OpenType.

Дополнительные сведения о формате шрифта OpenType см. в спецификации OpenType.

Расширенные типографические расширения

Расширенные таблицы типографических таблиц (таблицы макета OpenType) расширяют функциональные возможности шрифтов с помощью контуров TrueType или CFF. Шрифты Макета OpenType содержат дополнительные сведения, расширяющие возможности шрифтов для поддержки высококачественной международной типографии. Большинство шрифтов OpenType предоставляют только подмножество доступных функций OpenType. Шрифты OpenType предоставляют следующие функции.

  • Расширенное сопоставление символов и глифов, поддерживающих лигатуры, позиционные формы, альтернативные варианты и другие подстановки шрифтов.

  • Поддержка двухмерного позиционирования и вложения глифов.

  • Явные сведения о скрипте и языке, содержащиеся в шрифте, поэтому приложение обработки текста может соответствующим образом изменить его поведение.

Таблицы макета OpenType подробно описаны в разделе "Таблицы файлов шрифтов" спецификации OpenType.

Оставшаяся часть этого обзора содержит широкие и гибкие возможности некоторых визуальных функций OpenType, предоставляемых свойствами Typography объекта. Дополнительные сведения об этом объекте см. в разделе "Класс типографии".

Варианты

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

Надстрочные и подстроки

Свойство Variants позволяет задать значения надстрочного и подстрочного индекса для шрифта OpenType.

В следующем тексте отображаются надстрочные знаки шрифта Palatino Linotype.

Текст с использованием надстрочных символов OpenType

В следующем примере разметки показано, как определить надстрочные знаки для шрифта Palatino Linotype, используя свойства Typography объекта.

<Paragraph FontFamily="Palatino Linotype">
  2<Run Typography.Variants="Superscript">3</Run>
  14<Run Typography.Variants="Superscript">th</Run>
</Paragraph>

В следующем тексте отображаются подстроки шрифта Palatino Linotype.

Текст, использующий нижние индексы OpenType

В следующем примере разметки показано, как определить подстроки для шрифта Palatino Linotype с помощью свойств Typography объекта.

<Paragraph FontFamily="Palatino Linotype">
  H<Run Typography.Variants="Subscript">2</Run>O
  Footnote<Run Typography.Variants="Subscript">4</Run>
</Paragraph>

Декоративное использование надстроек и подстрок

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

Текст с использованием верхних и нижних индексов OpenType

В следующем примере разметки показано, как определить надстрочные и подстроки для шрифта с помощью свойств Typography объекта.

<Paragraph FontFamily="Palatino Linotype" Typography.Variants="Superscript">
  Chapter One
</Paragraph>
<Paragraph FontFamily="Palatino Linotype" Typography.Variants="Subscript">
  Chapter One
</Paragraph>

Столиц

Заглавные буквы — это набор типографских форм, обозначающих текст в заглавных глифах. Как правило, когда текст отображается как все буквы заглавные, интервал между буквами может показаться слишком плотным, а вес и пропорции букв слишком тяжелыми. OpenType поддерживает ряд форматов стилей для заглавных букв, включая малые капители, маленькие капители, титульные и капительный интервал. Эти форматы стилизации позволяют контролировать внешний вид заглавных букв.

В следующем тексте отображаются стандартные буквы для шрифта Pescadero, а затем буквы, стилизованные как малые прописные и все малые прописные. В этом случае для всех трех слов используется один и тот же размер шрифта.

Текст с использованием капитальных букв OpenType

В следующем примере разметки показано, как определить заглавные буквы для шрифта Pescadero, используя свойства объекта Typography. Если используется формат SmallCaps, любая буква с заглавной буквой игнорируется.

<Paragraph FontFamily="Pescadero" FontSize="48">
  <Run>CAPITALS</Run>
  <Run Typography.Capitals="SmallCaps">Capitals</Run>
  <Run Typography.Capitals="AllSmallCaps">Capitals</Run>
</Paragraph>

Заглавные буквы для заголовков

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

Текст, использующий прописные заглавные OpenType

В следующем примере разметки показано, как с помощью свойств объекта Typography определить заглавные буквы для шрифта Pescadero.

<Paragraph FontFamily="Pescadero">
  <Run Typography.Capitals="Titling">chapter one</Run>
</Paragraph>

Расстояние между заглавными буквами

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

Текст с использованием интервала для прописных букв OpenType

В следующем примере разметки показано, как задать интервалы для заглавных букв шрифта Pescadero, используя свойства объекта Typography.

<Paragraph FontFamily="Pescadero">
  <Run Typography.CapitalSpacing="True">CHAPTER ONE</Run>
</Paragraph>

Лигатуры

Лигатуры — это два или более глифов, которые формируются в один глиф, чтобы создать более читаемый или привлекательный текст. Шрифты OpenType поддерживают четыре типа лигатур:

  • Стандартные лигатуры. Разработан для повышения удобочитаемости. Стандартные лигатуры включают "fi", "fl" и "ff".

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

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

  • Исторические лигатуры. Предназначен для истории, а не специально предназначен для удобства чтения.

В следующем тексте отображаются стандартные глифы лигатуры для шрифта Pericles.

Текст с помощью стандартных лигатур OpenType

В следующем примере разметки показано, как определить стандартные глифы лигатуры для шрифта Typography Pericles, используя свойства объекта.

<Paragraph FontFamily="Pericles" Typography.StandardLigatures="True">
  <Run Typography.StylisticAlternates="1">FI</Run>
  <Run Typography.StylisticAlternates="1">FL</Run>
  <Run Typography.StylisticAlternates="1">TH</Run>
  <Run Typography.StylisticAlternates="1">TT</Run>
  <Run Typography.StylisticAlternates="1">TV</Run>
  <Run Typography.StylisticAlternates="1">TW</Run>
  <Run Typography.StylisticAlternates="1">TY</Run>
  <Run Typography.StylisticAlternates="1">VT</Run>
  <Run Typography.StylisticAlternates="1">WT</Run>
  <Run Typography.StylisticAlternates="1">YT</Run>
</Paragraph>

В следующем тексте отображаются глифы дискреционных лигатур для шрифта Pericles.

Текст, использующий дискреционные лигатуры OpenType

В следующем примере разметки показано, как определить дискреционные глифы лигатуры для шрифта Typography Pericles с помощью свойств объекта.

<Paragraph FontFamily="Pericles" Typography.DiscretionaryLigatures="True">
  <Run Typography.StylisticAlternates="1">CO</Run>
  <Run Typography.StylisticAlternates="1">LA</Run>
  <Run Typography.StylisticAlternates="1">LE</Run>
  <Run Typography.StylisticAlternates="1">LI</Run>
  <Run Typography.StylisticAlternates="1">LL</Run>
  <Run Typography.StylisticAlternates="1">LO</Run>
  <Run Typography.StylisticAlternates="1">LU</Run>
</Paragraph>

По умолчанию шрифты OpenType в Windows Presentation Foundation (WPF) позволяют включить стандартные лигатуры. Например, если вы используете шрифт Palatino Linotype, стандартные лигатуры "fi", "ff" и "fl" отображаются в виде объединенного глифа символов. Обратите внимание, что пара символов для каждой стандартной лигатуры касаются друг друга.

Текст с помощью стандартных лигатур OpenType с текстом Palatino Linotype

Однако вы можете отключить стандартные функции лигатуры, чтобы стандартная лигатура, например "ff", отображала два отдельных глифа, а не в виде объединенного глифа символов.

Текст, использующий отключенные стандартные лигатуры OpenType

В следующем примере разметки показано, как отключить стандартные глифы лигатуры для шрифта Palatino Linotype, используя свойства Typography объекта.

<!-- Set standard ligatures to false in order to disable feature. -->
<Paragraph Typography.StandardLigatures="False" FontFamily="Palatino Linotype" FontSize="72">
  fi ff fl
</Paragraph>

Росчерки

Шваши — это декоративные глифы, которые используют сложные украшения и часто связаны с каллиграфией. Следующий текст отображает обычные и замашистые глифы для шрифта Pescadero.

Текст с использованием стандарта OpenType и сваш глифов

Swashes часто используются в качестве декоративных элементов в коротких фразах, таких как объявления о событиях. В следующем тексте используются косые знаки, чтобы подчеркнуть заглавные буквы имени события.

Текст, использующий развороты OpenType

В следующем примере разметки показано, как определить вензеля для шрифта, используя свойства объекта Typography.

<Paragraph FontFamily="Pescadero" TextBlock.TextAlignment="Center">
  Wishing you a<LineBreak/>
  <Run Typography.StandardSwashes="1" FontSize="36">Happy New Year!</Run>
</Paragraph>

Контекстные завитки

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

Текст, использующий контекстные декоративные элементы OpenType

В следующем примере разметки показано, как определить контекстную косую черту для шрифта Pescadero с помощью свойств Typography объекта.

<Paragraph FontFamily="Pescadero" Typography.StandardSwashes="1">
  Lyon <Run Typography.ContextualSwashes="1">L</Run>yon
</Paragraph>

Заместители

Альтернативные варианты — это глифы, которые можно заменить на стандартный глиф. Шрифты OpenType, такие как шрифт Pericles, используемый в следующих примерах, могут содержать альтернативные глифы, которые можно использовать для создания различных внешних элементов для текста. В следующем тексте отображаются стандартные глифы для шрифта Pericles.

Текст с помощью стандартных глифов OpenType

Шрифт Pericles OpenType содержит дополнительные глифы, которые предоставляют стилистические альтернативные варианты стандартного набора глифов. В следующем тексте отображаются стилистические альтернативные глифы.

Текст с помощью стилистических альтернативных глифов OpenType

В следующем примере разметки показано, как определить стилистические альтернативные глифы для шрифта Pericles, используя свойства Typography объекта.

<Paragraph FontFamily="Pericles">
  <Run Typography.StylisticAlternates="1">A</Run>NCIENT
  GR<Run Typography.StylisticAlternates="1">EE</Run>K
  MYTH<Run Typography.StylisticAlternates="1">O</Run>LOGY
</Paragraph>

Следующий текст отображает несколько других стилистических альтернативных глифов для шрифта Pericles.

Текст с использованием стилистических альтернативных глифов OpenType для шрифта Pericles

В следующем примере разметки показано, как определить эти другие стилистические альтернативные глифы.

<Paragraph FontFamily="Pericles">
  <Run Typography.StylisticAlternates="1">A</Run>
  <Run Typography.StylisticAlternates="2">A</Run>
  <Run Typography.StylisticAlternates="3">A</Run>
  <Run Typography.StylisticAlternates="1">C</Run>
  <Run Typography.StylisticAlternates="1">E</Run>
  <Run Typography.StylisticAlternates="1">G</Run>
  <Run Typography.StylisticAlternates="1">O</Run>
  <Run Typography.StylisticAlternates="1">Q</Run>
  <Run Typography.StylisticAlternates="1">R</Run>
  <Run Typography.StylisticAlternates="2">R</Run>
  <Run Typography.StylisticAlternates="1">S</Run>
  <Run Typography.StylisticAlternates="1">Y</Run>
</Paragraph>

Случайные контекстные альтернативные варианты

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

Текст с использованием случайных контекстуальных вариантов OpenType

В следующем примере разметки показано, как определить случайные контекстные альтернативные варианты шрифта Lindsey с помощью свойств Typography объекта.

<TextBlock FontFamily="Lindsey">
  <Run Typography.ContextualAlternates="True">
    a banana in a cabana
  </Run>
</TextBlock>

Исторические формы

Исторические формы являются типографическими нормами, которые широко использовались в прошлом. Следующий текст отображает фразу "Бостон, Массачусетс", используя историческую форму глифов для шрифта Palatino Linotype.

Текст с использованием исторических форм OpenType

В следующем примере разметки показано, как определить исторические формы для шрифта Palatino Linotype, используя свойства Typography объекта.

<Paragraph FontFamily="Palatino Linotype">
  <Run Typography.HistoricalForms="True">Boston, Massachusetts</Run>
</Paragraph>

Числовые стили

Шрифты OpenType поддерживают большое количество функций, которые можно использовать с числовыми значениями в тексте.

Фракций

Шрифты OpenType поддерживают стили дробей, включая однострочные и двустрочные.

В следующем тексте отображаются стили дробей для шрифта Palatino Linotype.

Текст с дробями OpenType, разделёнными косой чертой и накопленными

В следующем примере разметки показано, как определить стили дроби для шрифта Palatino Linotype, используя свойства Typography объекта.

<Paragraph FontFamily="Palatino Linotype" Typography.Fraction="Slashed">
  1/8 1/4 3/8 1/2 5/8 3/4 7/8
</Paragraph>
<Paragraph FontFamily="Palatino Linotype" Typography.Fraction="Stacked">
  1/8 1/4 3/8 1/2 5/8 3/4 7/8
</Paragraph>

Цифры старого стиля

Шрифты OpenType поддерживают цифры старого стиля. Этот формат полезен для отображения числовых чисел в стилях, которые больше не являются стандартными. Следующий текст отображает дату 18 века в стандартных и старых числовых форматах шрифта Palatino Linotype.

Текст с использованием старых числовых чисел в стиле OpenType

В следующем тексте отображаются стандартные числовые значения шрифта Palatino Linotype, а затем цифры старого стиля.

Текст, использующий наборы цифр старого стиля OpenType

В следующем примере разметки показано, как определить цифры старого стиля для шрифта Palatino Linotype, используя свойства Typography объекта.

<Paragraph FontFamily="Palatino Linotype">
  <Run Typography.NumeralStyle="Normal">1234567890</Run>
  <Run Typography.NumeralStyle="OldStyle">1234567890</Run>
</Paragraph>

Пропорциональные и табличные цифры

Шрифты OpenType поддерживают пропорциональную и табличную фигуру для управления выравниванием ширины при использовании числовых знаков. Пропорциональные цифры обрабатывают каждое число как имеющие другую ширину— "1" является более узким, чем "5". Табличные цифры рассматриваются как цифры равной ширины, чтобы они выравнивались по вертикали, что повышает читаемость финансовой информации.

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

Текст, использующий пропорциональные и табличные цифры OpenType

В следующем примере разметки показано, как определить пропорциональные и табличные цифры для шрифта Miramonte, используя свойства Typography объекта.

<TextBlock FontFamily="Miramonte">
  <Run Typography.NumeralAlignment="Proportional">114,131</Run>
</TextBlock>
<TextBlock FontFamily="Miramonte">
  <Run Typography.NumeralAlignment="Tabular">114,131</Run>
</TextBlock>

Перечёркнутый ноль

Шрифты OpenType поддерживают формат перечеркнутого нуля, чтобы подчеркнуть разницу между буквой "O" и цифрой "0". Зачеркнутая цифра ноль часто используется для обозначения идентификаторов в финансовой и деловой информации.

В следующем тексте показан пример идентификатора заказа с помощью шрифта Miramonte. Первая строка использует стандартные числовые значения. Вторая строка использовала перечеркнутые нули, чтобы обеспечить лучшую контрастность с заглавной буквой "O".

Текст с использованием OpenType шрифтов с зачеркнутым нулем

В следующем примере разметки показано, как определить косые нулевые цифры для шрифта Miramonte, используя свойства Typography объекта.

<Paragraph FontFamily="Miramonte">
  <Run>Order #0048-OTC-390</Run>
  <LineBreak/>
  <Run Typography.SlashedZero="True">Order #0048-OTC-390</Run>
</Paragraph>

Класс типографики

Объект Typography предоставляет набор функций, поддерживаемых шрифтом OpenType. Задав свойства разметки Typography , вы можете легко создавать документы, которые используют преимущества функций OpenType.

В следующем тексте отображаются стандартные буквы для шрифта Pescadero, а затем буквы, стилизованные как малые прописные и все малые прописные. В этом случае для всех трех слов используется один и тот же размер шрифта.

Текст с использованием капитальных букв OpenType

В следующем примере разметки показано, как определить заглавные буквы для шрифта Pescadero, используя свойства объекта Typography. Если используется формат SmallCaps, любая буква с заглавной буквой игнорируется.

<Paragraph FontFamily="Pescadero" FontSize="48">
  <Run>CAPITALS</Run>
  <Run Typography.Capitals="SmallCaps">Capitals</Run>
  <Run Typography.Capitals="AllSmallCaps">Capitals</Run>
</Paragraph>

В следующем примере кода выполняется та же задача, что и предыдущий пример разметки.

MyParagraph.FontFamily = new FontFamily("Pescadero");
MyParagraph.FontSize = 48;

Run run_1 = new Run("CAPITALS ");
MyParagraph.Inlines.Add(run_1);

Run run_2 = new Run("Capitals ");
run_2.Typography.Capitals = FontCapitals.SmallCaps;
MyParagraph.Inlines.Add(run_2);

Run run_3 = new Run("Capitals");
run_3.Typography.Capitals = FontCapitals.AllSmallCaps;
MyParagraph.Inlines.Add(run_3);

MyParagraph.Inlines.Add(new LineBreak());
MyParagraph.FontFamily = New FontFamily("Pescadero")
MyParagraph.FontSize = 48

Dim run_1 As New Run("CAPITALS ")
MyParagraph.Inlines.Add(run_1)

Dim run_2 As New Run("Capitals ")
run_2.Typography.Capitals = FontCapitals.SmallCaps
MyParagraph.Inlines.Add(run_2)

Dim run_3 As New Run("Capitals")
run_3.Typography.Capitals = FontCapitals.AllSmallCaps
MyParagraph.Inlines.Add(run_3)

MyParagraph.Inlines.Add(New LineBreak())

Свойства класса "Типография"

В следующей таблице перечислены свойства, значения и параметры Typography по умолчанию объекта.

Недвижимость Значения Значение по умолчанию
AnnotationAlternates Числовое значение — байт 0
Capitals AllPetiteCaps | AllSmallCaps | Normal | PetiteCaps | SmallCaps | Titling | Unicase FontCapitals.Normal
CapitalSpacing Boolean false
CaseSensitiveForms Boolean false
ContextualAlternates Boolean true
ContextualLigatures Boolean true
ContextualSwashes Числовое значение — байт 0
DiscretionaryLigatures Boolean false
EastAsianExpertForms Boolean false
EastAsianLanguage HojoKanji | Jis04 | Jis78 | Jis83 | Jis90 | NlcKanji | Normal | Simplified | Traditional | TraditionalNames FontEastAsianLanguage.Normal
EastAsianWidths Full | Half | Normal | Proportional | Quarter | Third FontEastAsianWidths.Normal
Fraction Normal | Slashed | Stacked FontFraction.Normal
HistoricalForms Boolean false
HistoricalLigatures Boolean false
Kerning Boolean true
MathematicalGreek Boolean false
NumeralAlignment Normal | Proportional | Tabular FontNumeralAlignment.Normal
NumeralStyle Boolean FontNumeralStyle.Normal
SlashedZero Boolean false
StandardLigatures Boolean true
StandardSwashes числовое значение — байт 0
StylisticAlternates числовое значение — байт 0
StylisticSet1 Boolean false
StylisticSet2 Boolean false
StylisticSet3 Boolean false
StylisticSet4 Boolean false
StylisticSet5 Boolean false
StylisticSet6 Boolean false
StylisticSet7 Boolean false
StylisticSet8 Boolean false
StylisticSet9 Boolean false
StylisticSet10 Boolean false
StylisticSet11 Boolean false
StylisticSet12 Boolean false
StylisticSet13 Boolean false
StylisticSet14 Boolean false
StylisticSet15 Boolean false
StylisticSet16 Boolean false
StylisticSet17 Boolean false
StylisticSet18 Boolean false
StylisticSet19 Boolean false
StylisticSet20 Boolean false
Variants Inferior | Normal | Ordinal | Ruby | Subscript | Superscript FontVariants.Normal

См. также