All pastes #259425 Raw Edit

Something

public text v1 · immutable
#259425 ·published 2006-11-27 13:57 UTC
rendered paste body
  const kStateDefault = 0
  const kStateLookingForType = 1
  const kStateLookingForArrayDimensions = 4
  const kStateDefaultValue = 3
  const kStateDefaultValueInQuotes = 5
  const kStateReset = 9
  
  
  dim chars() as string = meth.parameters.split( "" )
  dim buffer as string
  dim results() as ParameterDefinition
  dim item as new ParameterDefinition()
  dim state as integer
  dim inQuotes as boolean
  
  for i as integer = 0 to ubound( chars )
    dim char as string = chars( i )
    
    select case state
    case kStateReset
      // reset for the next param
      results.append( item )
      item = new ParameterDefinition()
      state = kStateDefault
      
      buffer = ""
      inQuotes = False
      
      i = i - 1
      continue for i
      
      
      
    case kStateDefault
      if char = " " or char = "(" then
        if buffer = "as" then
          state = kStateLookingForType
          
        elseif buffer = "optional" then
          item.isOptional = True
          
        elseif buffer = "byref" then
          item.isByref = True
          
        else
          item.name = buffer
          
        end if
        
        buffer = ""
        
        if char = "(" then _
        state = kStateLookingForArrayDimensions
        
        continue for i
      end if
      
      buffer = buffer + char
      
      
      
    case kStateLookingForArrayDimensions
      // valid chars for state: " ", ")", ","
      if char = ")" then _
      state = kStateDefault
      
      if char = "," then _
      item.dimensions = item.dimensions + 1
      
      
      
    case kStateLookingForType
      if char = " " and buffer = "" then _
      continue for i
      
      if char = " " or char = "," or char = "=" then _
      item.type = buffer
      
      if char = "," then
        state = kStateReset
        continue for i
      end if
      
      if char = "=" then _
      state = kStateDefaultValue
      
      
      
    case kStateDefaultValue
      if char = " " then _
      continue for i
      
      if char = "," and not inQuotes then
        item.defaultValue = buffer
        
        state = kStateReset
        
        continue for i
      end if
      
      if char = """" then
        inQuotes = not inQuotes
        
        continue for i
      end if
      
      buffer = buffer + char
      
    end select
  next
  
  results.append( item )
  
  return results