'---Script created on 08-28-2023 13:17:25 by 
'---Script created on 08-27-2023 11:59:24 by 
uses "VBREGEXP"
Uses "Console" 
uses "File"






'FindAllComments_InSourceCode()  
'FindFunctions()
'Find_Dims_InSourceCode()
Find_Quotes_InSourceCode()




function Find_Quotes_InSourceCode()
   dim TheFile as string
  dim FileData as string
  dim mask as string
  dim startvar as long
  dim posVar as long
  dim lenvar as long
  dim retFromReg as string
  TheFile = "C:\thinBasic\SampleScripts\regularExpression.tbasic"
  FileData = File2Text(TheFile) 
  dim comments as string




  mask = CHR$(34) + "(.*)" + CHR$(34) + "|[\q](.*)[\q]"
  
  vbregex(mask, fileData)
  Console_WaitKey
end function




function Find_Dims_InSourceCode()
   dim TheFile as string
  dim FileData as string
  dim mask as string
  dim startvar as long
  dim posVar as long
  dim lenvar as long
  dim retFromReg as string
  TheFile = "C:\thinBasic\SampleScripts\regularExpression.tbasic"
  FileData = File2Text(TheFile) 
  dim comments as string
  Mask = "Dim[ ][a-z0-9]+[ ]+[as]+[ ]+[a-z0-9]+([ ]*[,]*[ ]*[a-z0-9_]*[ ]*[as]*[ ]*[a-z0-9]*)*"
  
  
  vbregex(mask, fileData)
  Console_WaitKey
end function






function FindAllComments_InSourceCode()
   dim TheFile as string
  dim FileData as string
  dim mask as string
  dim startvar as long
  dim posVar as long
  dim lenvar as long
  dim retFromReg as string
  TheFile = "C:\thinBasic\SampleScripts\regularExpression.tbasic"
  FileData = File2Text(TheFile) 
  dim comments as string
  Mask = "'[\x20]*[A-Za-z0-9 ]*"
  
  
  vbregex(mask, fileData)
  Console_WaitKey
end function


function FindFunctions()
   dim TheFile as string
  dim FileData as string
  dim mask as string
  dim startvar as long
  dim posVar as long
  dim lenvar as long
  dim retFromReg as string
  TheFile = "C:\thinBasic\SampleScripts\regularExpression.tbasic"
  FileData = File2Text(TheFile) 
  dim comments as string
  Mask = "[\x20]*FUNCTION[\x20]+[a-z-0-9]+[\x20]*\([\x20]*[a-z-0-9_]*[\x20]*[as]*[\x20]*[a-z-0-9_]*[ ]*([,][ ]*[a-z0-9_]*[ ]*[as]*[ ]*[a-z0-9_]*)*[ ]*\)[ ]*[as]*[ ]*[a-z0-9]*"
  
  
  vbregex(mask, fileData)
  Console_WaitKey
end function








function vbregReplace(pattern as string,txt as string,replaceTxt as string )


dim lpRegExp  as dword
  'dim txt   as string value "The quick brown fox jumped over the lazy dog."
  dim strRetVal as string


  '---Allocate a new regular expression instance
  lpRegExp = VBREGEXP_New


  '---Check if it was possible to allocate and if not stop the script
  if isfalse lpRegExp then
    print "Unable to create an instance of the RegExp object." & $crlf & "Script terminated"
    stop
  end if


  '---Set case insensitivity
  VBREGEXP_SetIgnoreCase lpRegExp, -1
  '---Set global applicability
  VBREGEXP_SetGlobal lpRegExp, -1


  
  '---Replace example 1
  '---Replace 'fox' with 'cat'.
  VBREGEXP_SetPattern lpRegExp, pattern
  strRetVal = VbRegExp_Replace(lpRegExp, txt, replaceTxt )
  
  print strRetVal+$crlf


  
  '---Replace example 2
  '---In addition, the Replace method can replace subexpressions in the pattern.
  '---The following swaps the first pair of words in the original string:
  'VBREGEXP_SetPattern lpRegExp, "(\S+)(\s+)(\S+)"
  'strRetVal = VbRegExp_Replace(lpRegExp, txt, "$3$2$1")
  
  'print strRetVal+$crlf


  '---Deallocate regular expression resource
  IF istrue lpRegExp   THEN VBREGEXP_Release(lpRegExp)


end function






Function File2Text(sfn As String) As String


    Dim st  As String
    Dim n   As Long
     Dim FileHandle As DWORD,s as string
    FileHandle= FILE_OPEN(sfn, "INPUT")  
    while not FILE_EOF(FileHandle)
       s=FILE_LineInput(FileHandle)
       st=st+s+$crlf 
    wend
    
    s = FILE_Close(FileHandle)
    Function=st
End Function






function vbregex(pattern as string, txt as string)




  
  dim lpRegExp  as dword
  dim lpMatches as dword
  dim lpMatch   as dword
  dim strValue  as string




  '---Allocate a new regular expression instance
  lpRegExp = VBREGEXP_New


  '---Check if it was possible to allocate and if not stop the script
  if isfalse lpRegExp then
    Print "Unable to create an instance of the RegExp object." & $crlf & "Script terminated" + $crlf
    stop
  end if
  
  '---Set pattern
  VBREGEXP_SetPattern lpRegExp, pattern  '"[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}"
  
  '---Set case insensitivity
  VBREGEXP_SetIgnoreCase lpRegExp, -1
  '---Set global applicability
  VBREGEXP_SetGlobal lpRegExp, -1


  '---Execute search '"Please send a mail to eros.olmi@thinbasic.com or to <support@thinbasic.com>. Thanks!"
  lpMatches = VBREGEXP_Execute(lpRegExp, txt)
  IF ISFALSE lpMatches THEN
    Print "1. No match found"
  else
    
    dim nCount as long value VBMatchCollection_GetCount(lpMatches)
    IF nCount = 0 THEN
      Print "2. No match found" + $crlf
    else


      '---Iterate the Matches collection
      dim I as long


      strValue += "Total matches found:  " & nCount & $CRLF & string$(50, "-") & $crlf
      FOR i = 1 TO nCount


        lpMatch = VBMatchCollection_GetItem(lpMatches, i)


        IF ISFALSE lpMatch THEN EXIT FOR
        
        strValue += "Match number " & i & " found at position: " & VBMatch_GetFirstIndex(lpMatch) & " length: " & VBMatch_Getlength(lpMatch) & $CRLF
        strValue += "Value is: " & VBMatch_GetValue(lpMatch) & $CRLF
        strValue += "--------------" & $CRLF
        
        VBREGEXP_Release lpMatch
        
      NEXT
      
      Print strValue  + $crlf


    END IF
    
  END IF
  
  IF istrue lpMatches  THEN VBREGEXP_Release(lpMatches)
  IF istrue lpRegExp   THEN VBREGEXP_Release(lpRegExp)
 


end function