:: {g:g, o:o, s:s, b:b, qb:b?, d:d, qd:d?, n:n, qn:n?, r8:r8, qr8:r8?, r4:r4, qr4:r4?, i:i, qi:i?, i8:i8, qi8:i8?, i4:i4, qi4:i4?, i2:i2, qi2:i2?, i1:i1, qi1:i1?, u8:u8, qu8:u8?, u4:u4, qu4:u4?, u2:u2, qu2:u2?, u1:u1, qu1:u1?}

// Property forms.
"HeLLo".Len
"HeLLo".len
"HeLLo".Lower
"HeLLo".Upper
"\t HeLLo   ".Trim
"\t HeLLo   ".TrimStart
"\t HeLLo   ".TrimEnd

s.Len
s.Lower
s.Upper
s.Trim
s.TrimStart
s.TrimEnd
s->Text.Len()
s->Text.Lower()
s->Text.Upper()
s->Text.Trim()
s->Text.TrimStart()
s->Text.TrimEnd()
s->Len()
s->Lower()
s->Upper()
s->Trim()
s->TrimStart()
s->TrimEnd()
s->Replace(s, s)

Text.Len("Hello")
text.LEN("Hello")
Text.leN("Hello")

"Hello"->Text.Len()
"Hello"->text.LEN()
"Hello"->Text.leN()

"Hello"->Len()
"Hello"->LEN()
"Hello"->leN()

Text.Len("hello")
Text.Len("")
Text.Len(null)
Text.Len(g)
Text.Len(o)
Text.Len(s)
Text.Len(b)
Text.Len(qb)
Text.Len(i4)
Text.Len(qi4)

Text.Lower("Hello")
Text.Lower("HeLLo")
Text.Lower(null)
Text.Lower(-3)
Text.Lower(true)

Text.Upper("Hello")
Text.Upper("HeLLo")
Text.Upper(null)
Text.Upper(-3)
Text.Upper(true)

Text.Lower(g)
Text.Lower(o)
Text.Lower(s)
Text.Lower(b)
Text.Lower(d)
Text.Lower(n)
Text.Lower(r8)
Text.Lower(r4)
Text.Lower(i)
Text.Lower(i8)
Text.Lower(i4)
Text.Lower(i2)
Text.Lower(i1)
Text.Lower(u8)
Text.Lower(u4)
Text.Lower(u2)
Text.Lower(u1)

Text.Lower(qb)
Text.Lower(qd)
Text.Lower(qn)
Text.Lower(qr8)
Text.Lower(qr4)
Text.Lower(qi)
Text.Lower(qi8)
Text.Lower(qi4)
Text.Lower(qi2)
Text.Lower(qi1)
Text.Lower(qu8)
Text.Lower(qu4)
Text.Lower(qu2)
Text.Lower(qu1)

Text.Upper(g)
Text.Upper(o)
Text.Upper(s)
Text.Upper(b)
Text.Upper(d)
Text.Upper(n)
Text.Upper(r8)
Text.Upper(r4)
Text.Upper(i)
Text.Upper(i8)
Text.Upper(i4)
Text.Upper(i2)
Text.Upper(i1)
Text.Upper(u8)
Text.Upper(u4)
Text.Upper(u2)
Text.Upper(u1)

Text.Upper(qb)
Text.Upper(qd)
Text.Upper(qn)
Text.Upper(qr8)
Text.Upper(qr4)
Text.Upper(qi)
Text.Upper(qi8)
Text.Upper(qi4)
Text.Upper(qi2)
Text.Upper(qi1)
Text.Upper(qu8)
Text.Upper(qu4)
Text.Upper(qu2)
Text.Upper(qu1)

Text.Part("", 0)
Text.Part(null, 3)
Text.Part("hello", 1)
Text.Part(s, -10)
Text.Part("hello", -1)
Text.Part("hello", -100)
Text.Part("hello", 100)
Text.Part("hello", i4)
Text.Part(s, i4)
Text.Part(s, i2)
Text.Part(s, i8)
Text.Part(s, 0x80000000)
Text.Part(s, 0x80000000u)
Text.Part(s, 0x80000000u8)
Text.Part(s, 0x80000000ia)
Text.Part(s, 0x10000u)
Text.Part(s, 0x10000u8)
Text.Part(s, r8)
Text.Part(s, u4)
Text.Part(s, 0)

Text.Part("", 0, 1)
Text.Part("", i4, 0)
Text.Part("", 0, i4)
Text.Part(null, 0, 1)
Text.Part(null, i4, 0)
Text.Part(null, -1, i4)
Text.Part(s, 0, 1)
Text.Part(s, i4, 0)
Text.Part(s, -1, i4)
Text.Part("hello", 0, 1)
Text.Part("hello", i4, 0)
Text.Part("hello", -1, i4)
Text.Part("hello", -100, 3)
Text.Part("hello", 100, 3)
Text.Part("hello", 3, -100)
Text.Part("hello", 100, -100)
Text.Part(s, i8, 1)
Text.Part(s, 0, i8)
Text.Part(s, i8, i8)
Text.Part(s, i2, 1)
Text.Part(s, 0, i2)
Text.Part(s, i2, i2)
Text.Part(s, r8, 1)
Text.Part(s, 0, r8)
Text.Part(s, r8, r8)
Text.Part(s, u2, 1)
Text.Part(s, 0, u2)
Text.Part(s, u2, u2)
Text.Part(s, u4, 1)
Text.Part(s, 0, u4)
Text.Part(s, u4, u4)

Text.Part(g, g, g)
Text.Part(o, o, o)
Text.Part(s, s, s)
Text.Part(b, b, b)
Text.Part(d, d, d)
Text.Part(n, n, n)
Text.Part(r8, r8, r8)
Text.Part(r4, r4, r4)
Text.Part(i, i, i)
Text.Part(i8, i8, i8)
Text.Part(i4, i4, i4)
Text.Part(i2, i2, i2)
Text.Part(i1, i1, i1)
Text.Part(u8, u8, u8)
Text.Part(u4, u4, u4)
Text.Part(u2, u2, u2)
Text.Part(u1, u1, u1)

Text.Trim(g)
Text.Trim(o)
Text.Trim(s)
Text.Trim(b)
Text.Trim(n)

Text.Trim(" h e l l o ")
Text.Trim(null)

Text.TrimStart(g)
Text.TrimStart(o)
Text.TrimStart(s)
Text.TrimStart(b)
Text.TrimStart(n)

Text.TrimStart(" h e l l o ")
Text.TrimStart(null)

Text.TrimEnd(g)
Text.TrimEnd(o)
Text.TrimEnd(s)
Text.TrimEnd(b)
Text.TrimEnd(n)

Text.TrimEnd(" h e l l o ")
Text.TrimEnd(null)

Text.Replace(s, s, s)
Text.Replace(null, s, s)
Text.Replace("", s, s)
Text.Replace(s, null, s)
Text.Replace(s, "", s)
Text.Replace("ABC", "X", s)

Text.Replace("ABC", "B", "X")
Text.Replace("ABACDAE", "A", "!!")

// Lifting.
:: {g:g*, o:o*, s:s*, b:b*, qb:b?*, d:d*, n:n*, qn:n?*, r8:r8*, qr8:r8?*, r4:r4*, qr4:r4?*, i:i*, qi:i?*, i8:i8*, qi8:i8?*, i4:i4*, qi4:i4?*, i2:i2*, qi2:i2?*, i1:i1*, qi1:i1?*, u8:u8*, qu8:u8?*, u4:u4*, qu4:u4?*, u2:u2*, qu2:u2?*, u1:u1*, qu1:u1?*}

s.Len
s.Lower
s.Upper
s.Trim
s.TrimStart
s.TrimEnd
s->Text.Len()
s->Text.Lower()
s->Text.Upper()
s->Text.Trim()
s->Text.TrimStart()
s->Text.TrimEnd()
s->Len()
s->Lower()
s->Upper()
s->Trim()
s->TrimStart()
s->TrimEnd()

Text.Len(g)
Text.Len(o)
Text.Len(s)
Text.Len(b)
Text.Len(qb)
Text.Len(i4)
Text.Len(qi4)

Text.Lower(g)
Text.Lower(o)
Text.Lower(s)
Text.Lower(b)
Text.Lower(qb)
Text.Lower(i4)
Text.Lower(qi4)

Text.Upper(g)
Text.Upper(o)
Text.Upper(s)
Text.Upper(b)
Text.Upper(qb)
Text.Upper(i4)
Text.Upper(qi4)

Text.Part(s, -10)
Text.Part(s, i4)
Text.Part(s, i2)
Text.Part(s, i8)
Text.Part(s, r8)
Text.Part(s, u4)
Text.Part(s, 0)

Text.Part("", i4, 0)
Text.Part("", 0, i4)
Text.Part(s, 0, 1)
Text.Part(s, i4, 0)
Text.Part(s, -1, i4)
Text.Part("hello", i4, 0)
Text.Part("hello", -1, i4)
Text.Part(s, i8, 1)
Text.Part(s, 0, i8)
Text.Part(s, i8, i8)
Text.Part(s, i2, 1)
Text.Part(s, 0, i2)
Text.Part(s, i2, i2)
Text.Part(s, r8, 1)
Text.Part(s, 0, r8)
Text.Part(s, r8, r8)
Text.Part(s, u2, 1)
Text.Part(s, 0, u2)
Text.Part(s, u2, u2)
Text.Part(s, u4, 1)
Text.Part(s, 0, u4)
Text.Part(s, u4, u4)

Text.Part(g, g, g)
Text.Part(o, o, o)
Text.Part(s, s, s)
Text.Part(b, b, b)
Text.Part(d, d, d)
Text.Part(n, n, n)
Text.Part(r8, r8, r8)
Text.Part(r4, r4, r4)
Text.Part(i, i, i)
Text.Part(i8, i8, i8)
Text.Part(i4, i4, i4)
Text.Part(i2, i2, i2)
Text.Part(i1, i1, i1)
Text.Part(u8, u8, u8)
Text.Part(u4, u4, u4)
Text.Part(u2, u2, u2)
Text.Part(u1, u1, u1)

Text.Trim(g)
Text.Trim(o)
Text.Trim(s)
Text.Trim(b)
Text.Trim(n)

Text.TrimStart(g)
Text.TrimStart(o)
Text.TrimStart(s)
Text.TrimStart(b)
Text.TrimStart(n)

Text.TrimEnd(g)
Text.TrimEnd(o)
Text.TrimEnd(s)
Text.TrimEnd(b)
Text.TrimEnd(n)

Text.Replace(s, "B", "X")
Text.Replace("ABC", s, "X")
Text.Replace("ABC", "B", s)
Text.Replace(s, s, "X")
Text.Replace(s, "B", s)
Text.Replace("ABC", s, s)
Text.Replace(s, s, s)

Text.Replace(s, "", s)
