Sub Globals
Dim counts As List
Dim output As List
Dim counts2(100) As Int
End Sub
Sub Activity_Create(FirstTime As Boolean)
counts.Initialize
output.Initialize
'Dim st As String = "{Hey|Yo|Good day|Btw|Hiya|Heya|Howdy|Whats up|Hello|Hi|Guess what|Sup|} {Chung|Chen| Melton|Hill|Puckett|Song|Hamilton|Bender} your {funny|witty|strange|fantastic}"
Dim st As String = "{This {article|content} is {spun|spun-out}|Any {article|content} {can|could} be {spun|spun-out}}"
Dim sentences As List = Spintax(st)
For Each sentence As String In sentences
Log(sentence)
Next
End Sub
Sub Spintax(s As String) As List
firstSpintax(s)
perm(s, counts.Size - 1)
output.Sort(True)
For i = output.Size - 1 To 1 Step -1
If output.Get(i) = output.Get(i - 1) Then output.RemoveAt(i)
Next
Return output
End Sub
Sub perm(s As String, count As Int)
If count = -1 Then
output.Add(nextSpintax(0, s))
Return
Else
For j = 0 To counts.Get(count) - 1
counts2(count) = j
perm(s, count - 1)
Next
End If
End Sub
Sub firstSpintax(s As String)
If s.Contains("{") Then
Dim startBrace As Int = s.IndexOf("}")
Do While s.CharAt(startBrace) <> "{"
startBrace = startBrace - 1
Loop
Dim block As String = s.SubString2(startBrace, s.IndexOf("}") + 1)
Dim items() As String
items = Regex.Split("\|", block.SubString2(1, block.Length - 1))
counts.Add(items.Length)
s = s.SubString2(0, s.IndexOf(block)) & items(0) & s.SubString(s.IndexOf(block) + block.Length)
Return firstSpintax(s)
Else
Return s
End If
End Sub
Sub nextSpintax(count As Int, s As String)
If s.Contains("{") Then
Dim startBrace As Int = S.IndexOf("}")
Do While s.CharAt(startBrace) <> "{"
startBrace = startBrace - 1
Loop
Dim block As String = S.SubString2(startBrace, S.IndexOf("}") + 1)
Dim items() As String
items = Regex.Split("\|", block.SubString2(1, block.Length - 1))
s = s.SubString2(0, s.IndexOf(block)) & items(counts2(count)) & s.SubString(s.IndexOf(block) + block.Length)
Return nextSpintax(count + 1, s)
Else
Return s
End If
End Sub