AddOMathStructs.vb
''
'' This code is part of Document Solutions for Word demos.
'' Copyright (c) MESCIUS inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Word

Public Class AddOMathStructs
    Function CreateDocx() As GcWordDocument
        Dim doc = New GcWordDocument()
        doc.Body.AddParagraph("OMath content created in DsWord", doc.Styles(BuiltInStyleId.Title))

        Dim styleOmath = doc.Styles.Add("omath", doc.Styles(BuiltInStyleId.Title))
        styleOmath.ParagraphFormat.Indentation.LeftIndent = 36
        Dim styleText = doc.Styles.Add("text", StyleType.Character)
        styleText.Font.Size = 14
        Dim styleCap1 = doc.Styles.Add("styleCap1", doc.Styles(BuiltInStyleId.Heading1))
        styleCap1.ParagraphFormat.Spacing.SpaceBeforeAuto = False
        styleCap1.ParagraphFormat.Spacing.SpaceBefore = 18
        Dim capA = vbLf & "Example 1:   "
        Dim capB = vbLf & "Example 2:   "

        Dim addA As Func(Of String, OMath) = Function(caption As String)
            doc.Body.AddParagraph(caption, styleCap1)
            Dim p = doc.Body.AddParagraph(styleOmath)
            p.AddRun(capA, styleText)
            Return p.AddOMath()
        End Function
        Dim addB As Func(Of OMath) = Function()
            Dim p = doc.Body.AddParagraph(styleOmath)
            p.AddRun(capB, styleText)
            Return p.AddOMath()
        End Function

        '' OMathAccent
        Dim om = addA("OMathAccent")
        om.AddAccent("a", ChrW(&H20D7))
        om = addB()
        Dim accent = om.AddAccent("", ChrW(&H308))
        accent.Base.AddFraction("2", "5", Nothing)

        '' OMathBar
        om = addA("OMathBar")
        om.AddBar("2x+1=3")
        om = addB()
        Dim bar = om.AddBar()
        bar.Base.AddFunction("cos", "2x")
        bar.Position = OMathVerticalJustification.Top

        '' OMathBorderBox
        om = addA("OMathBorderBox")
        om.AddBorderBox("xyz")
        om = addB()
        Dim bbox = om.AddBorderBox("2+2*")
        bbox.Base.AddFraction("3", "3", Nothing)
        bbox.Base.AddRun(" = 5")
        bbox.HideLeft = True
        bbox.HideTop = True
        bbox.HideRight = True
        bbox.HideBottom = True
        bbox.StrikeBottomLeftToTopRight = True
        bbox.StrikeTopLeftToBottomRight = True

        '' OMathBox
        om = addA("OMathBox")
        om.AddRun("a")
        Dim box = om.AddBox("==")
        om.AddRun("b")
        box.IsOperatorEmulator = True
        om = addB()
        Dim nary = om.AddNary("x", "0", "1", "∭")
        box = nary.Base.AddBox("dx")
        box.IsDifferential = True

        '' OMathDelimiter
        om = addA("OMathDelimiter")
        om.AddDelimiter(New String() {"a", "b", "c"})
        om = addB()
        Dim delimiter = om.AddDelimiter(New String() {"5", "7"}, "[", "]", "\")
        delimiter.Items.Add().AddRadical("n", "7")
        Dim styleNorm = doc.Styles.Add("Norm", StyleType.Character)
        styleNorm.Font.Italic = False
        styleNorm.Font.Color.RGB = Color.Red
        styleNorm.Font.Size = 20

        '' OMathEquationArray
        om = addA("OMathEquationArray")
        om.AddEquationArray(New String() {"a", "b", "c"})
        om = addB()
        Dim ea = om.AddEquationArray()
        ea.Items.Add().AddDelimiter(New String() {"x", "y", "z"})
        ea.Items.Add().AddFraction("π", "2", OMathFractionType.Skewed)

        '' OMathFraction
        om = addA("OMathFraction")
        om.AddFraction("π", "4", Nothing)
        om = addB()
        Dim fr = om.AddFraction()
        Dim func = fr.Numerator.AddFunction("sin", "")
        func.Argument.AddFraction("π", "3", Nothing)
        fr.Denominator.AddRadical("e", "3")

        '' OMathFunction
        om = addA("OMathFunction")
        om.AddFunction("ln", "2e")
        om = addB()
        Dim f = om.AddFunction("cos", "")
        f.Argument.AddFraction("π", "2", Nothing)

        '' OMathGroupCharacter
        om = addA("OMathGroupCharacter")
        om.AddGroupCharacter("mgh", "^")
        om = addB()
        Dim lu = om.AddLimitUpper("", "x")
        Dim gc = lu.Base.AddGroupCharacter("xyz", ChrW(&H23DE))
        gc.Position = OMathVerticalJustification.Top
        gc.VerticalJustification = OMathVerticalJustification.Bottom

        '' OMathLimitLower
        om = addA("OMathLimitLower")
        om.AddLimitLower("abc", "z")
        om = addB()
        Dim ll = om.AddLimitLower()
        ll.Base.AddBorderBox("2x+3")
        ll.Limit.AddFraction("2", "5", Nothing)

        '' OMathLimitUpper
        om = addA("OMathLimitUpper")
        om.AddLimitUpper("abc", "y")
        om = addB()
        lu = om.AddLimitUpper()
        lu.Base.AddRadical("e", "3")
        lu.Limit.AddFunction("cos", "2x")

        '' OMathMatrix
        om = addA("OMathMatrix")
        om.AddMatrix(New Integer?(,) {{1, 2}, {3, 4}})
        om = addB()
        delimiter = om.AddDelimiter()
        Dim item = delimiter.Items.Add()
        Dim matrix = item.AddMatrix(3, 1)
        matrix.Rows(0).Cells(0).AddRun("U")
        matrix.Rows(0).Cells(0).AddDelimiter(New String() {"t"})
        matrix.Rows(1).Cells(0).AddRun("V")
        matrix.Rows(1).Cells(0).AddDelimiter(New String() {"t"})
        matrix.Rows(2).Cells(0).AddRun("W")
        matrix.Rows(2).Cells(0).AddDelimiter(New String() {"t"})

        '' OMathNary
        om = addA("OMathNary")
        om.AddNary("xⅆx", "0", "∞", "∭")
        om = addB()
        nary = om.AddNary("", "", "", "∏")
        nary.Subscript.AddFraction("π", "3", Nothing)
        nary.Superscript.AddFraction("2π", "3", Nothing)
        nary.Base.AddFunction("cos", "x")

        '' OMathPhantom
        om = addA("OMathPhantom")
        Dim del = om.AddDelimiter(Nothing, "<", ">", "")
        Dim ph = del.Items.Add().AddPhantom("argument", False)
        ph.Show = False
        om = addB()
        Dim radical = om.AddRadical()
        radical.HideDegree = True
        ph = radical.Radicand.AddPhantom()
        ph.Show = True
        ph.Argument.AddFraction("x", "y", Nothing)
        ph.Smash = True

        '' OMathPreSubSuperscript
        om = addA("OMathPreSubSuperscript")
        om.AddPreSubSuperscript("Y", "1", "n")
        om = addB()
        Dim pss = om.AddPreSubSuperscript("", "-x", "2x")
        Dim pssRadical = pss.Base.AddRadical("n", "")
        pssRadical.HideDegree = True

        '' OMathRadical
        om = addA("OMathRadical")
        om.AddRadical("x", "3")
        om = addB()
        radical = om.AddRadical()
        radical.Degree.AddFraction("2", "3", OMathFractionType.Skewed)
        radical.Radicand.AddFunction("cos", "2x")

        '' OMathSubscript
        om = addA("OMathSubscript")
        om.AddSubscript("x", "linear")
        om = addB()
        func = om.AddFunction("", "2x+1")
        func.Name.AddSubscript("log", "3")

        '' OMathSubSuperscript
        om = addA("OMathSubSuperscript")
        om.AddSubSuperscript("Y", "1", "n")
        om = addB()
        Dim subs = om.AddSubSuperscript("", "-x", "2x")
        Dim subsRadical = subs.Base.AddRadical("n", "")
        subsRadical.HideDegree = True

        '' OMathSuperscript
        om = addA("OMathSuperscript")
        om.AddSuperscript("x", "2")
        om = addB()
        func = om.AddFunction()
        func.Name.AddSuperscript("cos", "2")
        Dim frac = func.Argument.AddFraction()
        frac.Numerator.AddRun("7x")
        frac.Denominator.AddRun("2π")

        Return doc
    End Function
End Class