Xojo

1 program Added 2025-11-07T13:47:35Z Model: x-ai/grok-4-fastTemp: 0.4 Evidence Report issue View issues
Aliases: REALbasic, REAL Studio
Provenance: commit a9df107507 · authored 2025-11-07T14:47:35+01:00 · model x-ai/grok-4-fast

Sources mentioning this language

7 sources · pl_id: pl/xojo
LLM (this repo) · 1PldbLinguistWikipediaHyperpolyglotRosettacodeWikidata · Q14378091

Wikipedia infobox

Pulled from the wikimedia/structured-wikipedia snapshot — see data/raw/wikipedia_pl_facts.*.jsonl and pl_fact.csv for the long-table provenance.

Designed byXojo · Inc
LicenseFreemium
Homepagehttps://xojo.com/

Extensions claimed by this language

6 claims. Each row is one upstream assertion with its strength. SWH column shows file occurrences with that extension across the entire archive.
ExtensionSourceStrengthSWH
.xojo_codelinguistprimary
.xojo_menulinguistsecondary
.xojo_reportlinguistsecondary
.xojo_scriptlinguistsecondary
.xojo_toolbarlinguistsecondary
.xojo_windowlinguistsecondary

Related languages

REALbasic (0.34)Portugol (0.23)DIV (0.19)XBasic (0.18)GLBasic (0.17)

LLM-contributed programs

JSONItem Utility Module

Provenance: commit a9df107507 · authored 2025-11-07T14:47:35+01:00 · model x-ai/grok-4-fast · Temp 0.4
code.xojo_code · added: 2025-11-07T13:47:35Z
Protected Function Operator_Convert() As String
  Return Me.ToString
End Function

Protected Function Operator_Lookup(key As String) As JSONItem
  If mType = kTypeObject Then
    If mChildren.HasKey(key) Then
      Return mChildren.Value(key)
    End If
  End If
  
  Return Nil
End Function

Protected Function Operator_Lookup(index As Integer) As JSONItem
  If mType = kTypeArray And index >= 0 And index <= UBound(mChildrenArray) Then
    Var child As JSONItem = mChildrenArray(index)
    Return child
  End If
  
  Return Nil
End Function

Sub Append(item As JSONItem)
  If mType <> kTypeArray Then
    Raise New NilObjectException
  End If
  
  mChildrenArray.Add(item)
End Sub

Sub Constructor()
  mChildren = New Dictionary
  mChildrenArray = New JSONItem()
  mType = kTypeNull
End Sub

Sub Constructor(source As String)
  mChildren = New Dictionary
  mChildrenArray = New JSONItem()
  Parse(source)
End Sub

Sub Constructor(value As Variant)
  mChildren = New Dictionary
  mChildrenArray = New JSONItem()
  
  If value IsA String Then
    mType = kTypeString
    mValue = value.StringValue
  ElseIf value IsA Integer Then
    mType = kTypeNumber
    mValue = value.IntegerValue
  ElseIf value IsA Double Then
    mType = kTypeNumber
    mValue = value.DoubleValue
  ElseIf value IsA Boolean Then
    mType = kTypeBoolean
    mValue = value.BooleanValue
  ElseIf value IsA JSONItem Then
    mType = value.Type
    mValue = value.Value
    If mType = kTypeObject Then
      mChildren = value.mChildren
    ElseIf mType = kTypeArray Then
      mChildrenArray = value.mChildrenArray
    End If
  Else
    mType = kTypeNull
  End If
End Sub

Function IndexOf(item As JSONItem) As Integer
  If mType <> kTypeArray Then
    Raise New NilObjectException
  End If
  
  For i As Integer = 0 To mChildrenArray.LastIndex
    If mChildrenArray(i) = item Then
      Return i
    End If
  Next
  
  Return -1
End Function

Function IndentString(level As Integer) As String
  Var s As String
  For i As Integer = 1 To level
    s = s + "  "
  Next
  Return s
End Function

Sub Insert(index As Integer, item As JSONItem)
  If mType <> kTypeArray Then
    Raise New NilObjectException
  End If
  
  If index < 0 Or index > mChildrenArray.LastIndex + 1 Then
    Raise New OutOfBoundsException
  End If
  
  mChildrenArray.Add(index, item)
End Sub

Function IsNull() As Boolean
  Return mType = kTypeNull
End Function

Sub Parse(source As String)
  // Simple JSON parser - this is a basic implementation
  // For production, use a proper parser
  mSource = source.Trim
  mIndex = 0
  SkipWhitespace
  
  If Not mSource.Middle(mIndex, 1) = "{" And Not mSource.Middle(mIndex, 1) = "[" Then
    // Assume it's a primitive value
    ParseValue
  Else
    ParseObjectOrArray
  End If
End Sub

Private Sub ParseObjectOrArray
  If mSource.Middle(mIndex, 1) = "{" Then
    mType = kTypeObject
    mIndex = mIndex + 1
    SkipWhitespace
    While mIndex < mSource.Len And mSource.Middle(mIndex, 1) <> "}"
      Var key As String = ParseString
      SkipWhitespace
      If mSource.Middle(mIndex, 1) <> ":" Then
        // Error
        Return
      End If
      mIndex = mIndex + 1
      SkipWhitespace
      Var value As JSONItem = ParseValue
      mChildren.Value(key) = value
      SkipWhitespace
      If mSource.Middle(mIndex, 1) = "," Then
        mIndex = mIndex + 1
        SkipWhitespace
      End If
    Wend
    If mIndex < mSource.Len Then
      mIndex = mIndex + 1 // Skip }
    End If
  ElseIf mSource.Middle(mIndex, 1) = "[" Then
    mType = kTypeArray
    mIndex = mIndex + 1
    SkipWhitespace
    While mIndex < mSource.Len And mSource.Middle(mIndex, 1) <> "]"
      Var value As JSONItem = ParseValue
      mChildrenArray.Add(value)
      SkipWhitespace
      If mSource.Middle(mIndex, 1) = "," Then
        mIndex = mIndex + 1
        SkipWhitespace
      End If
    Wend
    If mIndex < mSource.Len Then
      mIndex = mIndex + 1 // Skip ]
    End If
  End If
End Sub

Private Function ParseString() As String
  If mSource.Middle(mIndex, 1) <> "\" Then
    // Error
    Return ""
  End If
  mIndex = mIndex + 1
  Var start As Integer = mIndex
  While mIndex < mSource.Len And mSource.Middle(mIndex, 1) <> "\""
    mIndex = mIndex + 1
  Wend
  Var s As String = mSource.Middle(start, mIndex - start)
  mIndex = mIndex + 1 // Skip closing "
  Return s
End Function

Private Function ParseValue() As JSONItem
  SkipWhitespace
  Var c As String = mSource.Middle(mIndex, 1)
  Var item As New JSONItem
  If c = "{"
    item = New JSONItem
    item.mType = kTypeObject
    // Parse object
  ElseIf c = "["
    item = New JSONItem
    item.mType = kTypeArray
    // Parse array
  ElseIf c = "\""
    item = New JSONItem(ParseString)
    item.mType = kTypeString
  ElseIf c = "true"
    item = New JSONItem(True)
    mIndex = mIndex + 4
  ElseIf c = "false"
    item = New JSONItem(False)
    mIndex = mIndex + 5
  ElseIf c = "null"
    item = New JSONItem
    mIndex = mIndex + 4
  Else
    // Number
    Var start As Integer = mIndex
    While mIndex < mSource.Len And IsNumeric(mSource.Middle(mIndex, 1)) Or mSource.Middle(mIndex, 1) = "." Or mSource.Middle(mIndex, 1) = "-" Or mSource.Middle(mIndex, 1) = "e" Or mSource.Middle(mIndex, 1) = "E"
      mIndex = mIndex + 1
    Wend
    Var numStr As String = mSource.Middle(start, mIndex - start)
    If numStr.IndexOf(".") > 0 Or numStr.IndexOf("e") > 0 Or numStr.IndexOf("E") > 0 Then
      item = New JSONItem.CDbl(numStr)
    Else
      item = New JSONItem.CInt(numStr)
    End If
    item.mType = kTypeNumber
  End If
  Return item
End Function

Private Sub SkipWhitespace
  While mIndex < mSource.Len And (mSource.Middle(mIndex, 1) = " " Or mSource.Middle(mIndex, 1) = Chr(9) Or mSource.Middle(mIndex, 1) = Chr(10) Or mSource.Middle(mIndex, 1) = Chr(13))
    mIndex = mIndex + 1
  Wend
End Sub

Function ToString(pretty As Boolean = False, indentLevel As Integer = 0) As String
  Var indent As String = If(pretty, IndentString(indentLevel), "")
  
  Select Case mType
  Case kTypeNull
    Return "null"
  Case kTypeString
    Return "\"" + mValue.StringValue.ReplaceAll("\"", "\\\"") + "\""
  Case kTypeNumber
    Return mValue.StringValue
  Case kTypeBoolean
    Return If(mValue.BooleanValue, "true", "false")
  Case kTypeArray
    Var s As String = "["
    If pretty Then s = s + EndOfLine
    For i As Integer = 0 To mChildrenArray.LastIndex
      Var child As JSONItem = mChildrenArray(i)
      If i > 0 Then s = s + If(pretty, IndentString(indentLevel + 1), "") + "," + If(pretty, EndOfLine, " ")
      s = s + If(pretty, IndentString(indentLevel + 1), "") + child.ToString(pretty, indentLevel + 1)
    Next
    If pretty And mChildrenArray.LastIndex >= 0 Then s = s + EndOfLine
    s = s + indent + "]"
    Return s
  Case kTypeObject
    Var s As String = "{" + If(pretty, EndOfLine, " ")
    Var keys() As Variant = mChildren.Keys
    For i As Integer = 0 To keys.LastIndex
      Var key As String = keys(i)
      Var value As JSONItem = mChildren.Value(key)
      If i > 0 Then s = s + "," + If(pretty, EndOfLine, " ")
      s = s + If(pretty, IndentString(indentLevel + 1), "") + "\"" + key.ReplaceAll("\"", "\\\"") + "\":" + If(pretty, " ", "") + value.ToString(pretty, indentLevel + 1)
    Next
    If pretty And keys.LastIndex >= 0 Then s = s + EndOfLine
    s = s + indent + "}"
    Return s
  End Select
End Function

Property Type As JSONTypes
  Return mType
End Property

Property Value As Variant
  If mType = kTypeNull Then
    Return Nil
  End If
  Return mValue
End Property

Real programs from Software Heritage

No SWH evidence indexed yet for this language. (Either the SWH mining hasn't reached this language's extensions, or no matching files exist in the archive.)

Contribute — propose a file extension

Tell us where to find evidence about Xojo (mapped to pl/xojo). A reference URL is required; at least one of extension or program code must be provided too. A maintainer reviews each submission via a draft PR before anything lands.
Optional: attach a program from that URL
If the reference URL points at a single source file you'd like to add as an example program, paste it below. The workflow will write it under languages/Xojo/programs/<sha>/. Keep under ~200 lines.
(or open the pre-filled issue directly)
← xodio XojoScript →