Ligatures.vb
''
'' This code is part of Document Solutions for PDF demos.
'' Copyright (c) MESCIUS inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing

'' Ligatures (joining two or more letters into a single glyph) are supported by DsPdf,
'' provided the selected font supports them, and the corresponding font feature is on.
'' For the complete list of font features see featurelist.htm.
'' See also FontFeatures.
Public Class Ligatures
    Function CreatePDF(ByVal stream As Stream) As Integer
        '' The list of common Latin ligatures:
        Const latinLigatures = "fi, fj, fl, ff, ffi, ffl."
        '' Set up ligature-related font features:
        '' All ON:
        Dim allOn As FontFeature() = {
                New FontFeature(FeatureTag.clig, True), '' Contextual Ligatures
                New FontFeature(FeatureTag.dlig, True), '' Discretionary Ligatures
                New FontFeature(FeatureTag.hlig, True), '' Historical Ligatures
                New FontFeature(FeatureTag.liga, True), '' Standard Ligatures
                New FontFeature(FeatureTag.rlig, True)  '' Required Ligatures
            }
        '' All OFF:
        Dim allOff As FontFeature() = {
                New FontFeature(FeatureTag.clig, False),
                New FontFeature(FeatureTag.dlig, False),
                New FontFeature(FeatureTag.hlig, False),
                New FontFeature(FeatureTag.liga, False),
                New FontFeature(FeatureTag.rlig, False)
            }
        Dim doc = New GcPdfDocument()
        Dim g = doc.NewPage().Graphics
        '' Text insertion point:
        Dim ip = New PointF(72, 72)
        Dim tf = New TextFormat()
        tf.Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "times.ttf"))
        tf.FontSize = 20
        g.DrawString($"Common Latin ligatures, font {tf.Font.FontFamilyName}", tf, ip)
        ip.Y += 36
        '' Turn all ligature features OFF:
        tf.FontFeatures = allOff
        g.DrawString($"All ligature features OFF: {latinLigatures}", tf, ip)
        ip.Y += 36
        '' Turn all ligature features ON:
        tf.FontFeatures = allOn
        g.DrawString($"All ligature features ON: {latinLigatures}", tf, ip)
        ip.Y += 72
        '' Repeat with a different font:
        tf.Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "Gabriola.ttf"))
        g.DrawString($"Common Latin ligatures, font {tf.Font.FontFamilyName}", tf, ip)
        ip.Y += 36
        '' Turn all ligature features OFF:
        tf.FontFeatures = allOff
        g.DrawString($"All ligature features OFF: {latinLigatures}", tf, ip)
        ip.Y += 36
        '' Turn all ligature features ON:
        tf.FontFeatures = allOn
        g.DrawString($"All ligature features ON: {latinLigatures}", tf, ip)
        ''
        '' Done:
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class