SubSuperScript.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 System.Text.RegularExpressions
Imports GrapeCity.Documents.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing

'' This sample shows how to render subscript And superscript text.
Public Class SubSuperScript
    Sub CreatePDF(ByVal stream As Stream)
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        Dim g = page.Graphics

        Dim rc = Util.AddNote(
            "Demo of the TextFormat.Subscript and TextFormat.Superscript properties. " +
            "We draw a random 'lorem ipsum' paragraph, rendering all instances of 'lorem' as subscript, " +
            "and all instances of 'ipsum' as superscript.",
            page)

        '' Get a random 'lorem ipsum' paragraph:
        Dim para = Util.LoremIpsum(1, 18, 20, 20, 20)

        '' Split the paragraph into 'lorem', 'ipsum' and everything else:
        Const subs = "lorem"
        Const super = "ipsum"
        Dim frags = Regex.Split(para, $"({subs})|({super})")

        Dim fnt = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "times.ttf"))

        '' Create text formats for subscript And superscript:
        Dim tfSub = New TextFormat() With {.Font = fnt, .FontSize = 12, .Subscript = True}
        Dim tfSuper = New TextFormat(tfSub) With {.Subscript = False, .Superscript = True}

        '' Add text to a TextLayout using special formats for 'lorem' and 'ipsum':
        Dim tl = g.CreateTextLayout()
        tl.DefaultFormat.Font = fnt
        tl.DefaultFormat.FontSize = 12
        For Each frag In frags
            If (frag = subs) Then
                tl.Append(frag, tfSub)
            ElseIf (frag = super) Then
                tl.Append(frag, tfSuper)
            Else
                tl.Append(frag)
            End If
        Next

        '' Set layout properties And render the text
        tl.MaxWidth = page.Size.Width
        tl.MaxHeight = page.Size.Height - rc.Height
        tl.MarginAll = 72
        tl.MarginTop = rc.Bottom + 36
        tl.PerformLayout(True)
        g.DrawTextLayout(tl, PointF.Empty)

        '' Done
        doc.Save(stream)
    End Sub
End Class