Page 1 sur 1

Module Scintilla

Publié : ven. 23/juin/2017 9:13
par Micoute
Bonjour à tous,
j'ai complété ce code créé par GPI du forum allemand qu'il avait fait pour LUA et moi pour PB
J'aimerais utiliser ce code avec un EditorGadget, comment pourrais-je faire ?

Code : Tout sélectionner

;D'après un programme créé par GPI

DeclareModule Scintilla
  EnableExplicit
  ;-** Structure
  Structure Color
    fore.i
    back.i
  EndStructure
  Structure FontStyle
    fore.i
    back.i
    FontStyle.i; Formulaire de combinaison #pb_font_bold, #pb_font_italic, #pb_font_underline. #PB_Font_StrikeOut est utilisé pour "eol"
    font.s
    size.i
  EndStructure
  Structure ColorAlpha
    color.i
    alpha.i
  EndStructure
  Structure LexerStyle; Utilisé pour stocker le Style pour le lexer
    None.FontStyle
    String.FontStyle
    SingleString.FontStyle
    StringBlock.FontStyle
    CommentBlock.FontStyle
    Comment.FontStyle
    Number.FontStyle
    AlphaNum.FontStyle
    MotCle.FontStyle
    SpecialMotCle.FontStyle
    LineNumber.FontStyle
    Label.FontStyle
    FolderMark.Color
    RepeatedSelection.ColorAlpha
    Brace.ColorAlpha
    BadBrace.ColorAlpha
    Currentline.ColorAlpha
    Pliage.i
    AutoIndention.i
    TabSize.i
    MinLinenumberSize.i
  EndStructure
  
  Prototype prot_LexerCallback(gadget,*scinotify.SCNotification)
  Prototype prot_LexerInit(gadget,*LexerStyle.LexerStyle)
  Structure LexerInfo; pour le lexer - Commande use()
    callback.prot_LexerCallback
    init.prot_LexerInit
  EndStructure
  
  ;-** Declarations des procédures
  Declare init()
  Declare GetDefault(*Lexer.LexerStyle)
  Declare SetStyle(Gadget,*lexer.LexerStyle)
  Declare Gadget(id,x,y,cx,cy,*lexer=0,*style.lexerstyle=0)
  Declare SetText(gadget,text.s)
  Declare AppendText(gadget,text.s)
  Declare.s GetText(gadget)
  ;pour utiliser dans le Lexer
  Prototype prot_FindWordStart(gadget,endpos)
  Declare _Autocomplete(gadget,FindStart.prot_findwordstart,Map special()) 
  Declare _CallBack(Gadget, *scinotify.SCNotification)
  Declare _fastUTF8(string.s="")
  CompilerIf #PB_Compiler_Debugger
    Declare _SetProperty(gadget,Key,Value) 
  CompilerEndIf
  Declare _GetPropertyFlag(gadget,Key)
  Declare _SetPropertyFlag(gadget,Key,Value)
  Declare _Indention(gadget)
  Declare _MarkBrace(gadget,brace.s)
  
  ;-** Constantes
  ;-{ AutoIndention
  Enumeration 0
    #AutoIndention_none
    #AutoIndention_simple
    #AutoIndention_complex
  EndEnumeration
  ;}
  ;-{ Propriétés
  Enumeration #STYLE_MAX -1
    #Property_flag
    #Property_MinLinenumberSize
    #Property_AutoIndention
  EndEnumeration
  EnumerationBinary
    #PropertyFlag_Fold
    #PropertyFlag_RepeatedSelection
    #PropertyFlag_Brace
  EndEnumeration 
  ; container-lexer Ne prend pas en charge sci_set / getporperty - donc j'ai utilisé un style pour enregistrer certains drapeaux/valeurs en tant que style
  ;}
  ;-{ Style
  Enumeration 1
    ;#Style_Default - mis par PB
    #style_String
    #style_SingleString
    #style_StringBlock
    #style_CommentBlock
    #style_Comment
    #style_Number
    #style_AlphaNum
    #style_MotCle
    #style_SpecialMotCle
    #style_Label
  EndEnumeration
  ;}
  ;-{ Indicateurs
  Enumeration 1
    #indicator_selection
    #indicator_brace
    #indicator_badbrace
  EndEnumeration
  ;}
  ;-{ état de la ligne
  ;            12345678
  #linestate_submask     =$00ff0000
  #linestate_subshift    =16
  #linestate_start      =$01000000
  #linestate_CommentBlock     =$02000000
  #linestate_QuoteBlock      =$04000000
  #linestate_IndentBeforeMask =$0000F000
  #linestate_IndentBeforeShift=4+4+4
  #linestate_IndentAfterMask =$00000F00
  #linestate_IndentAfterShift =4+4
  #linestate_IndentBase   =$7
  #linestate_IndentLevelMask =$000000FF
  ; les flags commentblock et quoteblock sont utilisés pour marquer les lignes. En combinaison avec start, il indique la première ligne du bloc
  ; submask est utilisé pour masquer un sous-compteur - en pb le bloc devis/commentaires ont des "Niveaux" par exemple [[]] [= [] =] 
  ;   le sous-compteur indiquent le niveau du bloc
  ; Le retrait avant et après est identique à celui de l'éditeur purebasic et peut aller de -7 à 7 (IndentBase est ajouté avant le stockage)
  ; IndentLevelMask est utilisé pour stocker l'indentation dans une plage de 0 à 255
  ;}
  ;-{ Marge
  Enumeration 0
    #margin_linenumber
    #margin_fold
  EndEnumeration
  
  ;-** macros globales
  Macro _GetProperty(gadget,Key)
    sci(gadget,#SCI_STYLEGETFORE,key)
  EndMacro
  CompilerIf Not #PB_Compiler_Debugger
    Macro _SetProperty(gadget,key,value)
      sci(gadget,#SCI_STYLESETFORE,key,value)
    EndMacro
  CompilerEndIf 
EndDeclareModule

Module Scintilla
  ;-** Macros 
  Macro SCI(Gadget,Msg,a=0,b=0)
    ScintillaSendMessage(Gadget,Msg,a,b)
  EndMacro  
  Macro __SetStyle(name,vFore=-1,vBack=-1,vFontstyle=-1,vFont="",vSize=0)
    name\fore=vFore
    name\back=vBack
    name\FontStyle=vFontStyle
    name\font=vFont
    name\size=vSize
  EndMacro
  
  ;-** routines internes
  Procedure __SetFontStyle(id,style,*FontStyle.FontStyle)
    If *FontStyle\fore>=0
      sci(id,#SCI_STYLESETFORE,style,*FontStyle\fore)
    EndIf
    If *FontStyle\back>=0
      sci(id,#SCI_STYLESETBACK,style,*FontStyle\back)
    EndIf
    If *FontStyle\FontStyle>=0
      sci(id,#SCI_STYLESETBOLD,style,Bool(*FontStyle\FontStyle & #PB_Font_Bold))
      sci(id,#SCI_STYLESETITALIC,style,Bool(*FontStyle\FontStyle & #PB_Font_Italic))
      sci(id,#SCI_STYLESETUNDERLINE,style,Bool(*FontStyle\FontStyle & #PB_Font_Underline))
      sci(id,#SCI_STYLESETEOLFILLED,style,Bool(*FontStyle\FontStyle & #PB_Font_StrikeOut))
    EndIf
    If *FontStyle\size>0
      sci(id,#SCI_STYLESETSIZE,style,*FontStyle \size)
    EndIf
    If *FontStyle\font<>""
      sci(id,#SCI_STYLESETFONT,style,_fastUTF8(*FontStyle\font))
    EndIf 
  EndProcedure
  Procedure __setLineWidth(gadget)
    Protected maxlines,width,digit,min
    maxlines=sci(gadget,#SCI_GETLINECOUNT)
    min=_GetProperty(gadget,#Property_MinLinenumberSize)
    
    While maxlines>0
      maxlines/10
      digit+1
    Wend
    If digit<min
      digit=min
    EndIf
    
    width=sci(gadget,#SCI_TEXTWIDTH,#STYLE_LINENUMBER, @"9");Parce que j'envoie seulement un caractère, unicode = ascii
    width*(digit+1)
    
    If sci(Gadget,#SCI_GETMARGINWIDTHN,#margin_linenumber)<>width
      sci(gadget,#SCI_SETMARGINWIDTHN,#margin_linenumber,width)
    EndIf
  EndProcedure
  Procedure __RepeatedSelection(gadget)
    Static indicator_set,startPos,endPos
    Protected *buf.ascii,buflength,size,i
    
    size=sci(gadget,#SCI_GETLENGTH)
    sci(gadget,#SCI_SETINDICATORCURRENT,#indicator_selection)
    
    If indicator_set
      sci(gadget, #SCI_INDICATORCLEARRANGE,0,size)
      indicator_set=#False
    EndIf
    
    startPos=sci(gadget,#SCI_GETSELECTIONSTART)
    endpos=sci(gadget,#SCI_GETSELECTIONEND)
    
    If startPos=sci(gadget,#SCI_WORDSTARTPOSITION,startpos,#True) And endpos=sci(gadget,#SCI_WORDENDPOSITION,startPos,#True)
      buflength=sci(gadget,#SCI_GETSELTEXT)
      If buflength>2
        *buf=AllocateMemory(buflength)
        
        If *buf     
          sci(gadget,#SCI_GETSELTEXT,0,*buf)
          
          sci(gadget,#SCI_SETTARGETSTART,0)
          sci(gadget,#SCI_SETTARGETEND, size )
          sci(gadget,#SCI_SETSEARCHFLAGS, #SCFIND_MATCHCASE|#SCFIND_WHOLEWORD)     
          
          Repeat
            i= sci(gadget,#SCI_SEARCHINTARGET,buflength-1,*buf)
            If i<0
              Break
            EndIf
            
            If i<>startPos
              sci(gadget,#SCI_INDICATORFILLRANGE,i,buflength-1)
            EndIf      
            
            sci(gadget,#SCI_SETTARGETSTART,i+buflength-1)
            sci(gadget,#SCI_SETTARGETEND, size )
          ForEver
          
          indicator_set=#True
          
          FreeMemory(*buf)
        EndIf
      EndIf
      
    EndIf      
  EndProcedure
  
  ;-** procédures
  Procedure init()
    ; Avec Debugger - copier Scintilla.dll dans le répertoire principal
    ; Initaliser le gadget scintilla en chargeant le scintilla32/scintilla64 dll ou scintilla.dll/scilexer.dll comme alternative
    CompilerIf #PB_Compiler_OS=#PB_OS_Windows
      CompilerIf #PB_Compiler_Processor=#PB_Processor_x86
        #DLL_Scintilla="Scintilla32.dll"
      CompilerElse
        #DLL_Scintilla="Scintilla64.dll"
      CompilerEndIf
      
      CompilerIf #PB_Compiler_Debugger
        If FileSize(#DLL_Scintilla)<>FileSize(#PB_Compiler_Home+"Compilers\Scintilla.dll")
          CopyFile(#PB_Compiler_Home+"Compilers\Scintilla.dll",#DLL_Scintilla)
        EndIf
      CompilerEndIf
      If InitScintilla(#DLL_Scintilla)=0
        If InitScintilla("Scintilla.dll")=0
          If InitScintilla("SciLexer.dll")=0
            ProcedureReturn #False
          EndIf
        EndIf
      EndIf   
    CompilerEndIf
    ProcedureReturn #True
  EndProcedure
  Procedure SetText(Gadget,text.s)
    ;Méthode rapide (et sale) pour définir un texte long, car SetGadgetText ne fonctionne pas
    sci(Gadget,#SCI_SETTEXT,0,_fastUTF8(text))
    _fastUTF8()
  EndProcedure
  Procedure AppendText(Gadget,text.s)
    ;Ajouter le texte sans le faire défiler jusqu'à la position
    sci(Gadget,#SCI_APPENDTEXT,StringByteLength(text,#PB_UTF8),_fastUTF8(text))
    _fastUTF8()
  EndProcedure
  Procedure.s GetText(Gadget)
    ;GetGadgetText ne fonctionne pas (car il utilise unicode pas ascii)
    Protected *buf,bufsize,ret.s
    bufsize=sci(gadget,#SCI_GETLENGTH)+1
    *buf=AllocateMemory(bufsize)
    If *buf
      sci(Gadget,#SCI_GETTEXT,bufsize,*buf)
      ret=PeekS(*buf,-1,#PB_UTF8)
      FreeMemory(*buf)
    EndIf
    ProcedureReturn ret
  EndProcedure
  Procedure GetDefault(*Lexer.LexerStyle)
    ;Obtenir le style par défaut
    Protected back=$DFFFFF
    Protected backMargin=$dfefef
    Protected backgrey=$DFDFDF
    __SetStyle(*Lexer\None     ,$000000,back,0,"Arial",12)
    __SetStyle(*Lexer\String    ,$ff)
    __SetStyle(*lexer\SingleString ,$ff7f00)
    __SetStyle(*lexer\StringBlock ,$ff7f00,backgrey,#PB_Font_StrikeOut)
    __SetStyle(*Lexer\Comment   ,$AAAA00)
    __SetStyle(*Lexer\CommentBlock ,$AAAA00,backgrey,#PB_Font_StrikeOut)
    __SetStyle(*Lexer\Number    ,$333300)
    __SetStyle(*Lexer\AlphaNum   ,$000000)
    __SetStyle(*Lexer\MotCle   ,$FF0000,back,#PB_Font_Bold)
    __SetStyle(*Lexer\SpecialMotCle,$996900,back,#PB_Font_Italic)
    __SetStyle(*Lexer\LineNumber  ,$666666,backMargin)
    __SetStyle(*Lexer\Label    ,$ff00ff)
    *Lexer\FolderMark\fore=$ffffff
    *Lexer\FolderMark\back=$000000
    *Lexer\RepeatedSelection\color=$006600
    *Lexer\RepeatedSelection\alpha=50
    *Lexer\Brace\color=$006600
    *lexer\brace\alpha=50
    *Lexer\BadBrace\color=$0000ff
    *lexer\BadBrace\alpha=128
    *lexer\Pliage=#True
    *lexer\AutoIndention=#AutoIndention_complex
    *Lexer\TabSize=2
    *Lexer\Currentline\color=$afFFFF
    *Lexer\Currentline\alpha=#SC_ALPHA_NOALPHA
    *lexer\MinLinenumberSize=3
  EndProcedure
  Procedure SetStyle(Gadget,*lexer.LexerStyle)
    ;Définir le style d'un gadget Scintilla
    Protected width
    With *lexer
      __SetFontStyle(Gadget,#STYLE_DEFAULT,\None)
      ScintillaSendMessage(Gadget,#SCI_STYLECLEARALL)
      
      __SetFontStyle(Gadget,#style_String,\string)
      __SetFontStyle(Gadget,#style_SingleString,\SingleString)
      __setFontStyle(Gadget,#style_StringBlock,\StringBlock)
      __SetFontStyle(Gadget,#style_CommentBlock,\CommentBlock)
      __SetFontStyle(Gadget,#style_Comment,\Comment)
      __SetFontStyle(Gadget,#style_Number,\Number)
      __SetFontStyle(Gadget,#style_AlphaNum,\AlphaNum)
      __SetFontStyle(Gadget,#style_MotCle,\MotCle)
      __SetFontStyle(Gadget,#style_SpecialMotCle,\SpecialMotCle)
      __SetFontStyle(Gadget,#STYLE_LINENUMBER,\LineNumber)
      __SetFontStyle(Gadget,#style_Label,\Label)
      sci(Gadget,#SCI_SETFOLDMARGINCOLOUR,#margin_fold,\LineNumber\back)
      sci(Gadget,#SCI_SETFOLDMARGINHICOLOUR,#margin_fold,\LineNumber\back)
      
      sci(Gadget, #SCI_MARKERSETFORE, #SC_MARKNUM_FOLDER,\FolderMark\fore)
      sci(Gadget, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDER, \FolderMark\back)
      sci(Gadget, #SCI_MARKERSETFORE, #SC_MARKNUM_FOLDEROPEN,\FolderMark\fore)
      sci(Gadget, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDEROPEN, \FolderMark\back)
      sci(Gadget, #SCI_MARKERSETFORE, #SC_MARKNUM_FOLDEROPENMID, \FolderMark\fore)
      sci(Gadget, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDEROPENMID, \FolderMark\back)
      sci(Gadget, #SCI_MARKERSETFORE, #SC_MARKNUM_FOLDERSUB, \FolderMark\fore)
      sci(Gadget, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDERSUB, \FolderMark\back)
      sci(Gadget, #SCI_MARKERSETFORE, #SC_MARKNUM_FOLDERTAIL, \FolderMark\fore)
      sci(Gadget, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDERTAIL, \FolderMark\back)
      sci(Gadget, #SCI_MARKERSETFORE, #SC_MARKNUM_FOLDERMIDTAIL,\FolderMark\fore)
      sci(Gadget, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDERMIDTAIL, \FolderMark\back)
      
      sci(gadget,#SCI_INDICSETSTYLE,#indicator_selection,#INDIC_STRAIGHTBOX);fullbox
      sci(gadget,#SCI_INDICSETFORE,#indicator_selection,\RepeatedSelection\color)
      sci(gadget,#SCI_INDICSETALPHA,#indicator_selection,\RepeatedSelection\alpha)
      sci(gadget,#SCI_INDICSETUNDER,#indicator_selection,#True)
      
      sci(gadget,#SCI_INDICSETSTYLE,#indicator_brace,#INDIC_STRAIGHTBOX);fullbox
      sci(gadget,#SCI_INDICSETFORE,#indicator_brace,\Brace\color)
      sci(gadget,#SCI_INDICSETALPHA,#indicator_brace,\Brace\alpha)
      sci(gadget,#SCI_INDICSETUNDER,#indicator_brace,#True)
      
      sci(gadget,#SCI_INDICSETSTYLE,#indicator_badbrace,#INDIC_STRAIGHTBOX);fullbox
      sci(gadget,#SCI_INDICSETFORE,#indicator_badbrace,\badBrace\color)
      sci(gadget,#SCI_INDICSETALPHA,#indicator_badbrace,\badBrace\alpha)
      sci(gadget,#SCI_INDICSETUNDER,#indicator_badbrace,#True)
      
      _SetPropertyFlag(gadget,#PropertyFlag_Fold,\Pliage)
      _SetPropertyFlag(gadget,#PropertyFlag_RepeatedSelection,Bool(\RepeatedSelection\alpha))
      If \Pliage 
        width=sci(gadget,#SCI_TEXTWIDTH,#STYLE_LINENUMBER,@"9")*2
        ScintillaSendMessage(Gadget,#SCI_SETMARGINWIDTHN,#margin_fold, width)
      Else
        ScintillaSendMessage(Gadget,#SCI_SETMARGINWIDTHN,#margin_fold, 0)
      EndIf
      _SetPropertyFlag(gadget,#PropertyFlag_Brace,Bool(\Brace\alpha Or \BadBrace\alpha))
      _SetProperty(gadget,#Property_AutoIndention,\AutoIndention)  
      _SetProperty(gadget,#Property_MinLinenumberSize,\MinLinenumberSize)
      
      sci(gadget,#SCI_SETTABWIDTH,\TabSize)
      
      sci(gadget,#SCI_SETCARETLINEVISIBLE,Bool( \Currentline\alpha))
      sci(gadget,#SCI_SETCARETLINEBACK,\Currentline\color)
      sci(Gadget,#SCI_SETCARETLINEBACKALPHA,\Currentline\alpha)
      
      
    EndWith
  EndProcedure
  Procedure Gadget(id,x,y,cx,cy,*lexer.LexerInfo=0,*style.lexerstyle=0)
    ;Créer un gadget Scintilla. * Lexer-info devrait être lexer.use()-call
    Protected Gadget , MotCle.s
    Protected defaultstyle.lexerstyle,defaultlexer.lexerinfo
    Protected ret
    
    If *style=0
      GetDefault(defaultstyle)
      *style=defaultstyle
    EndIf
    If *lexer=0
      defaultlexer\callback=@_CallBack()
      *lexer\callback=defaultlexer
    EndIf
    
    ret = ScintillaGadget(id,x,y,cx,cy,*lexer\callback)
    
    If id <> #PB_Any
      Gadget = id
    Else
      Gadget = ret
    EndIf
    
    ; Indicateurs d'utilisation pour Brace-Highlight
    sci(gadget,#SCI_BRACEHIGHLIGHTINDICATOR,#True,#indicator_brace)
    sci(gadget,#SCI_BRACEBADLIGHTINDICATOR,#True,#indicator_badbrace)
    
    ; Fixer la barre de défilement horizontale
    sci(gadget,#SCI_SETSCROLLWIDTHTRACKING,#True)
    sci(gadget,#SCI_SETSCROLLWIDTH,100)
    
    ; Faire défiler avant que le Curseur n'atteigne le bord
    sci(gadget,#SCI_SETXCARETPOLICY,#CARET_SLOP|#CARET_EVEN|#CARET_STRICT  ,100)
    sci(gadget,#SCI_SETYCARETPOLICY,#CARET_SLOP|#CARET_EVEN|#CARET_STRICT  ,3)
    
    ; Définir la marge du pliage
    ScintillaSendMessage(Gadget,#SCI_SETMARGINTYPEN, #margin_fold, #SC_MARGIN_SYMBOL )
    ScintillaSendMessage(Gadget,#SCI_SETMARGINMASKN, #margin_fold, #SC_MASK_FOLDERS)
    ScintillaSendMessage(Gadget,#SCI_SETMARGINSENSITIVEN, #margin_fold, #True)
    
    ; Symboles de pliage
    ScintillaSendMessage(Gadget,#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDEROPEN  , #SC_MARK_BOXMINUS)
    ScintillaSendMessage(Gadget,#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDER    , #SC_MARK_BOXPLUS)
    ScintillaSendMessage(Gadget,#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDERSUB   , #SC_MARK_VLINE)
    ScintillaSendMessage(Gadget,#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDERTAIL  , #SC_MARK_LCORNER)
    ScintillaSendMessage(Gadget,#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDEREND   , #SC_MARK_BOXPLUSCONNECTED)
    ScintillaSendMessage(Gadget,#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDEROPENMID , #SC_MARK_BOXMINUSCONNECTED)
    ScintillaSendMessage(Gadget,#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDERMIDTAIL , #SC_MARK_TCORNER)
    
    ; Manipulation automatique des plis
    sci(Gadget,#SCI_SETAUTOMATICFOLD,#SC_AUTOMATICFOLD_SHOW|#SC_AUTOMATICFOLD_CLICK|#SC_AUTOMATICFOLD_CHANGE)
    
    
    If ret And *lexer\init
      *lexer\init(gadget,*style)
    EndIf
    
    ProcedureReturn ret
    
  EndProcedure 
  ;-** Procédures pour le Lexer
  Procedure _fastUTF8(str.s="")
    ; Méthode facile pour convertir en UTF8 sans allocation et libération de mémoire pour chaque appel
    Static *buf,bufsize
    Protected needed
    If str=""
      If *buf
        FreeMemory(*buf)
        *buf=0
      EndIf
      ProcedureReturn 0
    EndIf
    
    needed=StringByteLength(str,#PB_UTF8)+1;null-terminated 
    If *buf=0 Or bufsize<needed
      If *buf
        FreeMemory(*buf)
      EndIf
      
      bufsize=needed:If bufsize<1024:bufsize=1024:EndIf
      *buf=AllocateMemory(bufsize)
    EndIf
    
    If *buf
      PokeS(*buf,str,-1,#PB_UTF8)
    EndIf
    
    ProcedureReturn *buf
  EndProcedure
  ;Fausse propriété, car le conteneur-lexer ne prend pas en charge les propriétés
  CompilerIf #PB_Compiler_Debugger
    Procedure _SetProperty(gadget,key,value)
      ;Variante de procédure pour la macro _SetProperty pour ajouter un contrôle de plage pour la valeur
      If value<0 Or value>$ffffff
        Debug "ATTENTION: SetProperty - la valeur n'est pas dans la fourchette 0-$ffffff ("+Hex(value)+")"
      EndIf
      ProcedureReturn sci(gadget,#SCI_STYLESETFORE,key,value)
    EndProcedure
  CompilerEndIf
  Procedure _GetPropertyFlag(gadget,key)
    ;Obtenir un drapeau dans le "style" #property_flag
    ProcedureReturn Bool(_GetProperty(gadget,#Property_flag)&key)
  EndProcedure
  Procedure _SetPropertyFlag(gadget,key,value)
    ;Définir un drapeau dans le "style" #property_flag
    Protected store=_GetProperty(gadget,#Property_flag)
    If value
      store | key
    Else
      store & ~key
    EndIf
    _SetProperty(gadget,#Property_flag,store)
  EndProcedure
  Procedure _CallBack(Gadget, *scinotify.SCNotification)
    ;Rappel par défaut pour gadget scintilla. Le rappel de Lexer devrait appeler ceci pour faire quelques choses de base comme la sélection 
    ;répétée, le changement de largeur de la colonne de numéro de ligne
    Protected lineNumber,width
    
    Select *scinotify\nmhdr\code
        
      Case #SCN_UPDATEUI
        If *scinotify\updated=#SC_UPDATE_SELECTION
          If _GetPropertyFlag(gadget,#PropertyFlag_RepeatedSelection)
            __RepeatedSelection(gadget)
          EndIf     
        EndIf
        
      Case #SCN_ZOOM
        ;Corriger le numéro de ligne et la marge de repli
        __setLineWidth(gadget)
        If _GetPropertyFlag(gadget,#PropertyFlag_Fold)
          width=sci(gadget,#SCI_TEXTWIDTH,#STYLE_LINENUMBER,@"9")*2
          ScintillaSendMessage(Gadget,#SCI_SETMARGINWIDTHN, #margin_fold, width)
        EndIf
        
      Case #SCN_MODIFIED
        ;Vérifier si la marge du numéro de ligne est assez large
        If (*scinotify\modificationType & (#SC_MOD_INSERTTEXT|#SC_MOD_DELETETEXT)) And *scinotify\linesAdded
          __setLineWidth(gadget)
        EndIf
        
      Case #SCN_MARGINCLICK
        ;Désactivé par le traitement automatique
        ;    Debug "Marginclick:"+*scinotify\margin
        ;    If *scinotify\margin = #margin_fold
        ;     lineNumber = ScintillaSendMessage(Gadget,#SCI_LINEFROMPOSITION,*scinotify\position)
        ;     ScintillaSendMessage(Gadget,#SCI_TOGGLEFOLD, lineNumber, 0)
        ;    EndIf
        
    EndSelect
  EndProcedure
  Procedure _Indention(gadget)
    ;Méthode simple pour ajouter un retrait automatique. Copie simple de l'indentation de la ligne précédente
    ; devrait être appelé après un caractère cr / lf est ajouté au document / rappel
    Protected lineNumber,mode,*buf,bufsize,*buf2.ascii,pos
    
    pos=sci(gadget,#SCI_GETCURRENTPOS)
    lineNumber=sci(gadget,#SCI_LINEFROMPOSITION,pos)
    If lineNumber>0
      bufsize=sci(gadget,#SCI_GETLINE,lineNumber-1,0)+1
      
      *buf=AllocateMemory(bufsize)
      If *buf
        sci(gadget,#SCI_GETLINE,lineNumber-1,*buf)
        *buf2=*buf
        While *buf2\a=32 Or *buf2\a=9 ;barre espace et tab
          *buf2+1
        Wend
        *buf2\a=0
        sci(gadget,#SCI_REPLACESEL,0,*buf)
        FreeMemory (*buf)
      EndIf
    EndIf
    
  EndProcedure
  Procedure _MarkBrace(gadget,brace.s)
    ;Vérifier si sous la position actuelle est une orthèse et le mettre en évidence
    ; une combinaison de "(){}[]<>"
    Protected pos,char,findpos
    Static doRemove
    pos=sci(gadget,#SCI_GETCURRENTPOS)
    If pos=sci(gadget,#SCI_GETANCHOR)
      
      char=sci(gadget,#SCI_GETCHARAT,pos)
      If FindString(brace,Chr(char))
        findpos=sci(gadget,#SCI_BRACEMATCH,pos)
        If findpos>=0
          sci(gadget,#SCI_BRACEHIGHLIGHT,pos,findpos)
        Else
          sci(gadget,#SCI_BRACEBADLIGHT,pos)
        EndIf
        doremove=#True
      ElseIf doremove
        sci(gadget,#SCI_BRACEHIGHLIGHT,-1,-1)
        sci(gadget,#SCI_BRACEBADLIGHT,-1)
        doRemove=#False
      EndIf
    ElseIf doremove
      sci(gadget,#SCI_BRACEHIGHLIGHT,-1,-1)
      sci(gadget,#SCI_BRACEBADLIGHT,-1)
      doRemove=#False
    EndIf
    
  EndProcedure
  Procedure _Autocomplete(gadget,FindStart.prot_findwordstart,Map special())  
    ; Utilisé depuis le lexer pour la boite d'autocompletion
    ; Special est un MAP, la mapkey contient les mots pour la liste.
    ; Une Map est utilisée, car avec cette Map, il est plus facile de détecter, si un mot est un mot spécial pour le style
    Protected startPos,endPos,i,char,range.ScTextRange,word.s
    NewList words.s()
    Protected wordlist.s
    
    If sci(gadget,#SCI_AUTOCACTIVE)=#False
      endPos=sci(gadget,#SCI_GETCURRENTPOS)
      
      startPos=FindStart(gadget,endpos)
      
      If endpos-startPos>1
        
        range\chrg\cpMin=startpos
        range\chrg\cpMax=endPos
        range\lpstrText=AllocateMemory(endpos-startpos+1)
        
        sci(gadget,#SCI_GETTEXTRANGE,0,range)
        word=PeekS(range\lpstrText,-1,#PB_UTF8)
        FreeMemory(range\lpstrText)
        
        ForEach special()
          If Left(MapKey(special()),Len(word))=word
            AddElement(words())
            words()=MapKey(special())
          EndIf
        Next
        
        If ListSize(words())>0 ; And ListSize(words())<30
          SortList(words(),#PB_Sort_Ascending)
          ForEach words()
            wordlist+" "+words()
          Next
          sci(gadget,#SCI_AUTOCSHOW,endpos-startpos,_fastUTF8(Mid(wordlist,2)))
          _fastUTF8()
        EndIf
      EndIf   
      
    EndIf
    
  EndProcedure
EndModule

;-
;- Lexer PB
;-
DeclareModule PB_Lexer
  EnableExplicit
  Declare use()
EndDeclareModule
Module PB_Lexer
  UseModule scintilla
  Declare Highlight(Gadget,startPos,endPos)
  
  Global NewMap MotCle()
  Global NewMap DebutPliage()
  Global NewMap FinPliage()
  Global NewMap special()
  Global NewMap avant()
  Global NewMap apres()
  
  ;-{ Constantes lex
  Enumeration
    #lex_None
    #lex_Alpha
    #lex_Space
    #lex_NewLine
    #lex_Misc
    #lex_Quote
    #lex_Slash
    #lex_Bracket
    #lex_SingleQuote
    #lex_Label
  EndEnumeration
  ;}
  ;-{ Constantes force
  Enumeration
    #force_None
    #force_Comment
    #force_Quote
    #force_SingleQuote
    #force_QuoteBlock
    #force_CommentBlock
  EndEnumeration
  ;}
  ;-{ Constantes Num
  Enumeration
    #num_none
    #num_ok
    #num_point
    #num_exp
  EndEnumeration
  ;}
  
  Macro SCI(Gadget,Msg,a=0,b=0)
    ScintillaSendMessage(Gadget,Msg,a,b)
  EndMacro
  
  Procedure IsPBNumber(*word.character)
    ;Vérifie, si la chaîne (unicode) est un numéro PB valide
    Protected i,point,exp,lastEXP,num
    Protected hex,c
    Protected ok=#num_ok
    
    If *word\c='0'
      *word+SizeOf(character)
      If *word\c='x' Or *word\c='X'
        *word+SizeOf(character)
        hex=#True
      EndIf
    EndIf
    
    While *word\c
      c=*word\c
      
      If (c>='0' And c<='9') Or ( hex=#True And ((c>='a' And c<='f') Or (c>='A' And c<='F')) )
        LastExp=#False
        num=#True
      ElseIf c='.'
        If point
          ok=#num_none
          Break
        EndIf
        point=#True
      ElseIf (c='+' Or c='-') 
        If lastexp=#False
          ok=#num_none
          Break
        EndIf
        lastexp=#False
      ElseIf c='E' Or c='e' Or ( Hex=#True And (c='P' Or c='p')); en hexadécimal pour obtenir ici de toute façon
        If exp Or num=#False
          ok=#num_none
          Break
        EndIf
        exp=#True
        point=#True
        lastEXP=#True
      Else
        ok=#num_none
        Break
      EndIf
      *word+SizeOf(character)
    Wend
    
    If ok
      If lastEXP
        ProcedureReturn #num_exp
      ElseIf Point
        ProcedureReturn #num_point
      EndIf
    EndIf
    
    ProcedureReturn ok
    
  EndProcedure
  Procedure CheckLine(gadget,lineNumber)
    ;Vérifie que l'indentation de la ligne est correcte et la corrige
    Protected mode,pos,currentpos,char
    Protected indentlevel,indentafter,indentbefore,word.s
    Protected linestate
    Protected spaces,tabsize
    
    pos=sci(gadget,#SCI_POSITIONFROMLINE,lineNumber)
    tabsize=sci(gadget,#SCI_GETTABWIDTH)
    
    currentpos=pos
    Repeat
      char=sci(gadget,#SCI_GETCHARAT,currentpos)
      currentpos+1
      If char=32
        spaces+1
      ElseIf char=9
        spaces+(tabsize-(spaces%tabsize))
      Else
        Break
      EndIf
    ForEver 
    linestate= sci(Gadget,#SCI_GETLINESTATE,lineNumber)
    If lineState & (#linestate_QuoteBlock|#linestate_CommentBlock)=0 Or lineState & #linestate_start
      IndentLevel=(linestate&#linestate_IndentLevelMask)
      If spaces<>tabsize*indentlevel
        sci(gadget,#SCI_SETTARGETSTART,pos)      
        sci(gadget,#SCI_SETTARGETEND,currentpos-1)
        word=LSet("",indentlevel,Chr(9))
        sci(gadget,#SCI_REPLACETARGET,StringByteLength(word,#PB_UTF8),_fastUTF8(word))
      EndIf
    EndIf
    
  EndProcedure
  Procedure PBIndention(gadget)
    ; la routine auto indentation "complex" pour pb
    Protected lineNumber,pos
    Protected indentlevel,indentafter,word.s
    Protected linestate
    Protected spaces,tabsize
    
    pos=sci(gadget,#SCI_GETCURRENTPOS)
    Highlight(gadget,pos,pos)
    
    lineNumber=sci(gadget,#SCI_LINEFROMPOSITION,pos)
    CheckLine(gadget,lineNumber-1)
    If lineNumber>0
      linestate= sci(Gadget,#SCI_GETLINESTATE,lineNumber)
      ;Debug Hex(linestate)
      IndentAfter=((lineState&#linestate_IndentAfterMask)>>#linestate_IndentAfterShift) - #linestate_IndentBase
      IndentLevel=(linestate&#linestate_IndentLevelMask) 
      ;Debug Hex(linestate&(#linestate_CommentBlock|#linestate_QuoteBlock))+" "+Hex(linestate&#linestate_end)
      If linestate&(#linestate_CommentBlock|#linestate_QuoteBlock)=0 ; Or linestate&#linestate_end
                                                                     ;indentlevel+indentafter
        word=LSet("",indentlevel,Chr(9))
        sci(gadget,#SCI_REPLACESEL,StringByteLength(word,#PB_UTF8),_fastUTF8(word))
      EndIf
    EndIf
    
  EndProcedure
  Procedure Highlight(Gadget,startPos,endPos)
    ;Formulaire de style de startpos à endpos
    Protected lineNumber,lineNumber2,foldLevel
    Protected thisLevel,nextLevel
    Protected currentPos
    Protected State,oldState
    Protected word.s,char,charnext,stylePos,style
    Protected force
    Protected ignoreNext
    Protected i, achar.s
    Protected forceLabel
    Protected lineStateSubCount,EndMark.s
    Protected lineState
    Protected doFold
    Protected IndentLevel,IndentBefore,IndentAfter
    Protected eolchar
    
    linenumber = SCI(Gadget, #SCI_LINEFROMPOSITION, startpos)
    doFold=_GetPropertyFlag(gadget,#PropertyFlag_Fold)
    
    If sci(gadget,#SCI_GETEOLMODE)=#SC_EOL_CR 
      eolchar=13
    Else
      eolchar=10
    EndIf
    
    If linenumber = 0
      foldlevel = #SC_FOLDLEVELBASE
      lineStateSubCount=0
    Else
      linenumber - 1
      foldlevel = SCI(Gadget, #SCI_GETFOLDLEVEL, linenumber) & #SC_FOLDLEVELNUMBERMASK
      
      linestate= sci(Gadget,#SCI_GETLINESTATE,lineNumber)
      If lineState & (#linestate_start|#linestate_CommentBlock)=#linestate_CommentBlock
        lineStateSubCount=(lineState & #linestate_submask)>>#linestate_subshift
        endmark="--]"+RSet("]",lineStateSubCount,"=")
        force=#force_CommentBlock
      EndIf
      If lineState & (#linestate_start|#linestate_QuoteBlock)=#linestate_QuoteBlock
        lineStateSubCount=(lineState & #linestate_submask)>>#linestate_subshift
        endmark="]"+RSet("]",lineStateSubCount,"=")
        force=#force_QuoteBlock   
      EndIf  
      IndentBefore=((lineState&#linestate_IndentBeforeMask)>>#linestate_IndentBeforeShift) - #linestate_IndentBase
      IndentLevel=(linestate&#linestate_IndentLevelMask) - IndentBefore
      IndentBefore=0
    EndIf
    
    thisLevel=foldLevel
    nextLevel=foldLevel
    linestate=0
    
    currentPos = SCI(Gadget, #SCI_POSITIONFROMLINE, linenumber)
    stylePos=currentPos
    
    SCI(gadget, #SCI_STARTSTYLING, currentpos)
    oldState=#lex_None
    charnext= Sci(Gadget, #SCI_GETCHARAT, currentpos)
    
    While currentpos <= endpos
      char = charnext
      charnext=Sci(Gadget, #SCI_GETCHARAT, currentpos+1)
      Select char 
        Case ':'
          If oldState=#lex_alpha And ((charnext>='a' And charnext<='z') Or (charnext>='A' And charnext<='Z') Or charnext='_')
            state=#lex_Alpha
          Else      
            state=#lex_Label
          EndIf
          
        Case 'a' To 'z','A' To 'Z','0' To '9','_'
          If Left(word,2)="::"
            state=#lex_Label
          Else
            state=#lex_Alpha 
          EndIf
          
        Case '(', ')'
          state=#lex_bracket
        Case '"'
          state=#lex_Quote
        Case 39 ;'
          state=#lex_SingleQuote
        Case '/'
          state=#lex_Slash
          
        Case 0 To 32, 127 ;espaces blancs et caractères eol
          If char=eolchar
            state=#lex_NewLine
          Else
            state=#lex_Space
          EndIf
          
          ;Pour détecter les numéros de poste
        Case '+','-'
          If oldState=#lex_Alpha And IsPBNumber(@word)=#num_exp;doit suivre une exp!
            state=#lex_Alpha
          Else
            state=#lex_misc
          EndIf
        Case '.'
          If oldState=#lex_Alpha And IsPBNumber(@word)=#num_ok ;ne doit avoir ni le point ni exp, juste ok!
            state=#lex_Alpha
          ElseIf oldState=#lex_Alpha And ((charnext>='a' And charnext<='z') Or (charnext>='A' And charnext<='Z') Or charnext='_')
            state=#lex_Alpha
          Else      
            state=#lex_Misc
          EndIf
          
        Default
          state=#lex_Misc
      EndSelect
      
      
      If oldstate=#lex_NewLine Or state<>oldState
        
        Select force
            
          Case #force_CommentBlock;{
            lineState|#linestate_CommentBlock
            style=#style_CommentBlock
            If oldState=#lex_misc And Right(word,Len(EndMark))=EndMark
              force=#force_None
              ;linestate|#linestate_end
            EndIf
            ;}
            
          Case #force_QuoteBlock;{
            linestate|#linestate_QuoteBlock
            style=#style_StringBlock
            If oldState=#lex_misc And Right(word,Len(EndMark))=EndMark
              force=#force_None
              ;linestate|#linestate_end
            EndIf
            ;}
            
          Case #force_Quote;{
            style=#style_String
            Select oldState
              Case #lex_Slash
                ignoreNext=#True
              Case #lex_Quote
                If ignoreNext=#False
                  force=#force_None
                Else
                  ignoreNext=#False
                EndIf
              Case #lex_NewLine
                force=#force_None
              Default
                ignoreNext=#False
            EndSelect
            ;}
            
          Case #force_SingleQuote;{
            style=#style_SingleString
            Select oldState
              Case #lex_Slash
                ignoreNext=#True
              Case #lex_SingleQuote
                If ignoreNext=#False
                  force=#force_None
                Else
                  ignoreNext=#False
                EndIf
              Case #lex_NewLine
                force=#force_None
              Default
                ignoreNext=#False
            EndSelect
            ;}
            
          Case #force_None;{
            Select oldState
              Case #lex_SingleQuote
                ignoreNext=#False
                force=#force_SingleQuote
                style=#style_SingleString
                forceLabel=#False
                
              Case #lex_Quote
                ignoreNext=#False
                force=#force_Quote
                style=#style_String
                forceLabel=#False
                
              Case #lex_bracket
                style=#STYLE_DEFAULT
                forceLabel=#False
                
              Case #lex_Space
                style=#STYLE_DEFAULT
                
              Case #lex_Slash,#lex_NewLine
                style=#STYLE_DEFAULT
                forceLabel=#False
                
              Case #lex_Label
                If Left(word,2)="::" And FindString(Mid(word,3,Len(word)-4),":")=0
                  style=#STYLE_label
                Else
                  style=#STYLE_DEFAULT
                EndIf
                forceLabel=#False
                
              Case #lex_Alpha       
                If FindMapElement(MotCle(),word)
                  style=#style_MotCle
                  If word="Goto"
                    forceLabel=#True
                  Else
                    forceLabel=0
                  EndIf
                ElseIf FindMapElement(special(),word)
                  style=#style_SpecialMotCle
                ElseIf IsPBNumber(@word)
                  style=#style_Number
                  forceLabel=#False       
                ElseIf forceLabel
                  forceLabel=#False
                  style=#style_label
                Else 
                  style=#style_AlphaNum
                EndIf     
                
                ;Folding
                If FindMapElement(DebutPliage(),word)
                  thislevel | #SC_FOLDLEVELHEADERFLAG
                  nextlevel + 1
                EndIf
                If FindMapElement(FinPliage(),word)
                  nextlevel - 1
                  If nextlevel < #SC_FOLDLEVELBASE
                    nextlevel = #SC_FOLDLEVELBASE
                  EndIf 
                EndIf
                
                ;Indention
                If FindMapElement(apres(),word)
                  IndentAfter+apres()
                EndIf
                If FindMapElement(avant(),word)
                  If avant()<0 And IndentAfter=>-avant()
                    IndentAfter+avant()
                  Else          
                    IndentBefore+avant()
                  EndIf 
                EndIf
                
              Case #lex_Misc
                style=#STYLE_DEFAULT
                If Left(word,1)="["
                  lineStateSubCount=1
                  For i=2 To Len(word)
                    achar=Mid(word,i,1)
                    If achar="="
                      lineStateSubCount+1
                    ElseIf achar="["
                      If lineStateSubCount>255
                        lineStateSubCount=255
                      EndIf
                      endmark="]"+RSet("]",lineStateSubCount,"=")
                      lineState|#linestate_start|#linestate_QuoteBlock
                      force=#force_QuoteBlock
                      style=#style_StringBlock
                      Break
                    Else
                      Break
                    EndIf
                  Next
                  If force<>#force_QuoteBlock
                    lineStateSubCount=0
                  EndIf   
                  
                ElseIf Left(word,2)="--"
                  style=#style_Comment
                  force=#force_Comment
                  
                  If Mid(word,3,1)="["
                    lineStateSubCount=1
                    For i=4 To Len(word)
                      achar=Mid(word,i,1)
                      If achar="="
                        lineStateSubCount+1
                      ElseIf achar="["
                        If lineStateSubCount>255
                          lineStateSubCount=255
                        EndIf
                        endmark="--]"+RSet("]",lineStateSubCount,"=")
                        lineState|#linestate_start|#linestate_CommentBlock
                        force=#force_CommentBlock
                        style=#style_CommentBlock
                        Break
                      Else
                        Break
                      EndIf
                    Next
                    If force<>#force_CommentBlock
                      lineStateSubCount=0
                    EndIf         
                    
                  EndIf
                EndIf
                forceLabel=#False
                
              Default
                ; le premier appel n'a pas de style
                style=0
                forceLabel=#False
            EndSelect
            ;}
            
          Case #force_Comment;{
            If oldstate=#lex_NewLine
              force=#force_None
            EndIf 
            style=#style_Comment
            ;}
            
        EndSelect
        
        If style
          SCI(Gadget, #SCI_SETSTYLING, currentpos - stylePos, style)
          stylePos = currentpos
        EndIf   
        word=""
        oldState=state
      EndIf
      
      word+Chr(char)
      
      If state=#lex_NewLine Or currentpos=endPos
        ;Coller des guillemets et commenter
        If linestate &(#linestate_QuoteBlock|#linestate_CommentBlock)=0
          lineStateSubCount=0
        Else
          lineState+ (lineStateSubCount<<#linestate_subshift)
        EndIf 
        
        ;indentaion
        lineState+ ((IndentAfter+#linestate_IndentBase)<<#linestate_IndentAfterShift)&#linestate_IndentAfterMask
        lineState+ ((IndentBefore+#linestate_IndentBase)<<#linestate_IndentbeforeShift)&#linestate_IndentBeforeMask
        
        IndentLevel+IndentBefore:If IndentLevel<0:IndentLevel=0:ElseIf IndentLevel>255:IndentLevel=255:EndIf
        linestate+ IndentLevel&#linestate_IndentLevelMask
        Indentlevel+IndentAfter:If IndentLevel<0:IndentLevel=0:ElseIf IndentLevel>255:IndentLevel=255:EndIf
        
        sci(gadget,#SCI_SETLINESTATE,linenumber,lineState)
        
        linestate=0
        IndentAfter=0
        IndentBefore=0
        
        ;pliage
        If doFold
          Sci(Gadget, #SCI_SETFOLDLEVEL, linenumber, thislevel)
        EndIf     
        thislevel = nextlevel
        
        lineNumber+1
      EndIf
      
      currentpos+1
    Wend
    
    If _GetProperty(Gadget,#Property_AutoIndention)=#AutoIndention_complex
      Protected startline,endline,currentline
      startline=sci(gadget,#SCI_LINEFROMPOSITION,startpos)
      endline=sci(gadget,#SCI_LINEFROMPOSITION,endpos)
      currentpos=sci(gadget,#SCI_GETCURRENTPOS)
      currentline=sci(gadget,#SCI_LINEFROMPOSITION,currentPos)
      For i=startline To endline
        If i<>currentline
          CheckLine(gadget,i)
        EndIf
      Next
    EndIf
  EndProcedure
  Procedure FindWordStart(gadget,endpos)
    ;Utilisé pour trouver le mot courant sous la position (position = dernier caractère dans le mot).
    ;et détecter les mots liés avec . ou :
    Protected startpos,char,i
    startpos=endpos
    Repeat   
      startpos=sci(gadget,#SCI_WORDSTARTPOSITION,startpos,#True)
      char=sci(gadget,#SCI_GETCHARAT,startpos-1)
      If char='.' Or char=':'
        startpos-1
      Else
        Break
      EndIf
    ForEver
    ProcedureReturn startpos
  EndProcedure
  Procedure PBCallback(Gadget, *scinotify.SCNotification)
    ;rappel scintilla pour le lexer
    Protected startPos,lineNumber,mode
    
    Select *scinotify\nmhdr\code
        
      Case #SCN_UPDATEUI
        If *scinotify\updated=#SC_UPDATE_SELECTION
          If _GetPropertyFlag(gadget,#PropertyFlag_Brace)
            _MarkBrace(gadget,"()[]{}")
          EndIf    
        EndIf
        
      Case #SCN_MODIFIED
        If *scinotify\modificationType & (#SC_MOD_DELETETEXT)
          If _GetPropertyFlag(gadget,#PropertyFlag_Brace)
            _MarkBrace(gadget,"()[]{}")
          EndIf
        EndIf
        
        If *scinotify\length=1 And (*scinotify\modificationType&#SC_MOD_DELETETEXT) And *scinotify\position=sci(gadget,#SCI_GETCURRENTPOS) 
          _Autocomplete(gadget,@FindWordStart(),special())
        EndIf
        
      Case #SCN_CHARADDED
        If (*scinotify\ch>='a' And *scinotify\ch<='z') Or (*scinotify\ch>='A' And *scinotify\ch<='Z') Or (*scinotify\ch>='0' And *scinotify\ch<='9') Or *scinotify\ch='_' Or *scinotify\ch='.' Or *scinotify\ch=':'
          _Autocomplete(gadget,@FindWordStart(),special())
        EndIf
        
        If _GetPropertyFlag(gadget,#PropertyFlag_Brace)
          _MarkBrace(gadget,"()[]{}")
        EndIf
        
        If (*scinotify\ch=10 Or *scinotify\ch=13) 
          mode=sci(gadget,#SCI_GETEOLMODE)
          If (mode=#SC_EOL_CR And *scinotify\ch=13) Or (mode<>#SC_EOL_CR And *scinotify\ch=10)
            Select _GetProperty(gadget,#property_AutoIndention)  
              Case #AutoIndention_simple: _indention(gadget)
              Case #AutoIndention_complex: PBIndention(gadget)
            EndSelect
            ;parenthèses, crochets ou accolades corrects
            If _GetPropertyFlag(gadget,#PropertyFlag_Brace)
              _MarkBrace(gadget,"()[]{}")
            EndIf 
          EndIf     
        EndIf
        
      Case #SCN_AUTOCCHARDELETED
        _Autocomplete(gadget,@FindWordStart(),special())
        
      Case #SCN_STYLENEEDED
        startPos =SCI(Gadget,#SCI_GETENDSTYLED)
        ;Le lexer pb a toujours le style de la ligne avant de commencer - donc nous n'avons pas besoin
        ;lineNumber = SCI(Gadget,#SCI_LINEFROMPOSITION,startPos)
        ;startPos = SCI(Gadget,#SCI_POSITIONFROMLINE,lineNumber)
        Highlight(Gadget,startPos, *scinotify\position)
        
    EndSelect
    
    ProcedureReturn _callback(gadget,*scinotify)
  EndProcedure 
  
  Procedure PBinit(gadget,*style.lexerstyle)
    ;Cette routine est appelée à partir du gadget scintilla ::, après la création du gadget
    Protected word.s,i
    ;{ Lire des listes de mots pour le style, le pliage, l'indentation
    If MapSize(special())=0
      Restore special
      Repeat
        Read.s word
        If word<>""
          special(word)=#True
        Else
          Break
        EndIf
      ForEver
    EndIf
    If MapSize(MotCle())=0
      Restore MotCle
      Repeat
        Read.s word
        If word<>""
          MotCle(word)=#True
        Else
          Break
        EndIf
      ForEver
    EndIf
    If MapSize(DebutPliage())=0
      Restore DebutPliage
      Repeat
        Read.s word
        If word<>""
          DebutPliage(word)=#True
        Else
          Break
        EndIf
      ForEver
    EndIf
    If MapSize(FinPliage())=0
      Restore FinPliage
      Repeat
        Read.s word
        If word<>""
          FinPliage(word)=#True
        Else
          Break
        EndIf
      ForEver
    EndIf
    If MapSize(apres())=0
      Restore apres
      Repeat
        Read.s word
        Read.i i
        If word<>""
          apres(word)=i
        Else
          Break
        EndIf
      ForEver
    EndIf
    If MapSize(avant())=0
      Restore avant
      Repeat
        Read.s word
        Read.i i
        If word<>""
          avant(word)=i
        Else
          Break
        EndIf
      ForEver
    EndIf
    ;}
    
    ;Définir le Lexer sur le conteneur
    ScintillaSendMessage(Gadget,#SCI_SETLEXER,#SCLEX_CONTAINER)
    
    ;Caractères pour la détection des mots
    sci(gadget,#SCI_SETWORDCHARS,0, _fastUTF8("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"))
    ;Autocompletion des mots sélectionnés
    sci(gadget,#SCI_AUTOCSETFILLUPS,0,_fastUTF8(~".:[("))  
    
    ;le style
    SetStyle(Gadget,*style)
    
    ProcedureReturn #True
    
   

Module Scintilla suite

Publié : ven. 23/juin/2017 9:15
par Micoute

Code : Tout sélectionner

 ;listes de mots
    DataSection
      special:
      Data.s "AbortFTPFile"
      Data.s "AbortHTTP"
      Data.s "Abs"
      Data.s "ACos"
      Data.s "ACosH"
      Data.s "Add3DArchive"
      Data.s "AddBillboard"
      Data.s "AddCipherBuffer"
      Data.s "AddDate"
      Data.s "AddElement"
      Data.s "AddEntityAnimationTime"
      Data.s "AddFingerprintBuffer"
      Data.s "AddGadgetColumn"
      Data.s "AddGadgetItem"
      Data.s "AddGadgetItem3D"
      Data.s "AddImageFrame"
      Data.s "AddJSONElement"
      Data.s "AddJSONMember"
      Data.s "AddKeyboardShortcut"
      Data.s "AddMailAttachment"
      Data.s "AddMailAttachmentData"
      Data.s "AddMailRecipient"
      Data.s "AddMapElement"
      Data.s "AddMaterialLayer"
      Data.s "AddNodeAnimationTime"
      Data.s "AddPackFile"
      Data.s "AddPackMemory"
      Data.s "AddPathArc"
      Data.s "AddPathBox"
      Data.s "AddPathCircle"
      Data.s "AddPathCurve"
      Data.s "AddPathEllipse"
      Data.s "AddPathLine"
      Data.s "AddPathSegments"
      Data.s "AddPathText"
      Data.s "AddSplinePoint"
      Data.s "AddStaticGeometryEntity"
      Data.s "AddStatusBarField"
      Data.s "AddSubEntity"
      Data.s "AddSubMesh"
      Data.s "AddSysTrayIcon"
      Data.s "AddTerrainTexture"
      Data.s "AddVehicleWheel"
      Data.s "AddVertexPoseReference"
      Data.s "AddWindowTimer"
      Data.s "AESDecoder"
      Data.s "AESEncoder"
      Data.s "AffectedDatabaseRows"
      Data.s "AllocateMemory"
      Data.s "AllocateStructure"
      Data.s "Alpha"
      Data.s "AlphaBlend"
      Data.s "AmbientColor"
      Data.s "AntialiasingMode"
      Data.s "ApplyEntityForce"
      Data.s "ApplyEntityImpulse"
      Data.s "ApplyEntityTorque"
      Data.s "ApplyEntityTorqueImpulse"
      Data.s "ApplyVehicleBrake"
      Data.s "ApplyVehicleForce"
      Data.s "ApplyVehicleSteering"
      Data.s "ArraySize"
      Data.s "Asc"
      Data.s "Ascii"
      Data.s "ASin"
      Data.s "ASinH"
      Data.s "ATan"
      Data.s "ATan2"
      Data.s "ATanH"
      Data.s "AttachEntityObject"
      Data.s "AttachNodeObject"
      Data.s "AttachRibbonEffect"
      Data.s "AudioCDLength"
      Data.s "AudioCDName"
      Data.s "AudioCDStatus"
      Data.s "AudioCDTrackLength"
      Data.s "AudioCDTracks"
      Data.s "AudioCDTrackSeconds"
      Data.s "AvailableProgramOutput"
      Data.s "AvailableSerialPortInput"
      Data.s "AvailableSerialPortOutput"
      Data.s "BackColor"
      Data.s "Base64Decoder"
      Data.s "Base64DecoderBuffer"
      Data.s "Base64Encoder"
      Data.s "Base64EncoderBuffer"
      Data.s "BeginVectorLayer"
      Data.s "BillboardGroupCommonDirection"
      Data.s "BillboardGroupCommonUpVector"
      Data.s "BillboardGroupID"
      Data.s "BillboardGroupMaterial"
      Data.s "BillboardGroupX"
      Data.s "BillboardGroupY"
      Data.s "BillboardGroupZ"
      Data.s "BillboardHeight"
      Data.s "BillboardLocate"
      Data.s "BillboardWidth"
      Data.s "BillboardX"
      Data.s "BillboardY"
      Data.s "BillboardZ"
      Data.s "Bin"
      Data.s "BindEvent"
      Data.s "BindGadgetEvent"
      Data.s "BindMenuEvent"
      Data.s "Blue"
      Data.s "BodyPick"
      Data.s "Box"
      Data.s "BoxedGradient"
      Data.s "BuildMeshShadowVolume"
      Data.s "BuildMeshTangents"
      Data.s "BuildStaticGeometry"
      Data.s "BuildTerrain"
      Data.s "ButtonGadget"
      Data.s "ButtonGadget3D"
      Data.s "ButtonImageGadget"
      Data.s "ButtonImageGadgetNoSkin"
      Data.s "CalendarGadget"
      Data.s "CallCFunction"
      Data.s "CallCFunctionFast"
      Data.s "CallFunction"
      Data.s "CallFunctionFast"
      Data.s "CameraBackColor"
      Data.s "CameraCustomParameter"
      Data.s "CameraDirection"
      Data.s "CameraDirectionX"
      Data.s "CameraDirectionY"
      Data.s "CameraDirectionZ"
      Data.s "CameraFixedYawAxis"
      Data.s "CameraFollow"
      Data.s "CameraFOV"
      Data.s "CameraID"
      Data.s "CameraLookAt"
      Data.s "CameraPitch"
      Data.s "CameraProjectionMode"
      Data.s "CameraProjectionX"
      Data.s "CameraProjectionY"
      Data.s "CameraRange"
      Data.s "CameraRenderMode"
      Data.s "CameraRoll"
      Data.s "CameraViewHeight"
      Data.s "CameraViewWidth"
      Data.s "CameraViewX"
      Data.s "CameraViewY"
      Data.s "CameraX"
      Data.s "CameraY"
      Data.s "CameraYaw"
      Data.s "CameraZ"
      Data.s "CanvasGadget"
      Data.s "CanvasOutput"
      Data.s "CanvasVectorOutput"
      Data.s "CatchImage"
      Data.s "CatchJSON"
      Data.s "CatchMusic"
      Data.s "CatchSound"
      Data.s "CatchSprite"
      Data.s "CatchXML"
      Data.s "CGIBuffer"
      Data.s "CGICookieName"
      Data.s "CGICookieValue"
      Data.s "CGIParameterData"
      Data.s "CGIParameterDataSize"
      Data.s "CGIParameterName"
      Data.s "CGIParameterType"
      Data.s "CGIParameterValue"
      Data.s "CGIVariable"
      Data.s "ChangeCurrentElement"
      Data.s "ChangeGamma"
      Data.s "ChangeSysTrayIcon"
      Data.s "CheckBoxGadget"
      Data.s "CheckBoxGadget3D"
      Data.s "CheckDatabaseNull"
      Data.s "CheckFilename"
      Data.s "CheckFTPConnection"
      Data.s "CheckObjectVisibility"
      Data.s "ChildXMLNode"
      Data.s "Chr"
      Data.s "Circle"
      Data.s "CircularGradient"
      Data.s "ClearBillboards"
      Data.s "ClearClipboard"
      Data.s "ClearConsole"
      Data.s "ClearDebugOutput"
      Data.s "ClearGadgetItems"
      Data.s "ClearGadgetItems3D"
      Data.s "ClearJSONElements"
      Data.s "ClearJSONMembers"
      Data.s "ClearList"
      Data.s "ClearMap"
      Data.s "ClearScreen"
      Data.s "ClearSpline"
      Data.s "ClearStructure"
      Data.s "ClipOutput"
      Data.s "ClipPath"
      Data.s "ClipSprite"
      Data.s "CloseConsole"
      Data.s "CloseCryptRandom"
      Data.s "CloseDatabase"
      Data.s "CloseDebugOutput"
      Data.s "CloseFile"
      Data.s "CloseFTP"
      Data.s "CloseGadgetList"
      Data.s "CloseGadgetList3D"
      Data.s "CloseHelp"
      Data.s "CloseLibrary"
      Data.s "CloseNetworkConnection"
      Data.s "CloseNetworkServer"
      Data.s "ClosePack"
      Data.s "ClosePath"
      Data.s "ClosePreferences"
      Data.s "CloseProgram"
      Data.s "CloseScreen"
      Data.s "CloseSerialPort"
      Data.s "CloseSubMenu"
      Data.s "CloseWindow"
      Data.s "CloseWindow3D"
      Data.s "ColorRequester"
      Data.s "ComboBoxGadget"
      Data.s "ComboBoxGadget3D"
      Data.s "CompareMemory"
      Data.s "CompareMemoryString"
      Data.s "ComposeJSON"
      Data.s "ComposeXML"
      Data.s "CompositorEffectParameter"
      Data.s "CompressMemory"
      Data.s "ComputerName"
      Data.s "ComputeSpline"
      Data.s "ConeTwistJoint"
      Data.s "ConicalGradient"
      Data.s "ConnectionID"
      Data.s "ConsoleColor"
      Data.s "ConsoleCursor"
      Data.s "ConsoleError"
      Data.s "ConsoleLocate"
      Data.s "ConsoleTitle"
      Data.s "ContainerGadget"
      Data.s "ContainerGadget3D"
      Data.s "ConvertCoordinateX"
      Data.s "ConvertCoordinateY"
      Data.s "ConvertLocalToWorldPosition"
      Data.s "ConvertWorldToLocalPosition"
      Data.s "CopyArray"
      Data.s "CopyDebugOutput"
      Data.s "CopyDirectory"
      Data.s "CopyEntity"
      Data.s "CopyFile"
      Data.s "CopyImage"
      Data.s "CopyLight"
      Data.s "CopyList"
      Data.s "CopyMap"
      Data.s "CopyMaterial"
      Data.s "CopyMemory"
      Data.s "CopyMemoryString"
      Data.s "CopyMesh"
      Data.s "CopySprite"
      Data.s "CopyStructure"
      Data.s "CopyTexture"
      Data.s "CopyXMLNode"
      Data.s "Cos"
      Data.s "CosH"
      Data.s "CountBillboards"
      Data.s "CountCGICookies"
      Data.s "CountCGIParameters"
      Data.s "CountCPUs"
      Data.s "CountGadgetItems"
      Data.s "CountGadgetItems3D"
      Data.s "CountLibraryFunctions"
      Data.s "CountMaterialLayers"
      Data.s "CountProgramParameters"
      Data.s "CountRegularExpressionGroups"
      Data.s "CountSplinePoints"
      Data.s "CountString"
      Data.s "CPUName"
      Data.s "CreateBillboardGroup"
      Data.s "CreateCamera"
      Data.s "CreateCapsule"
      Data.s "CreateCompositorEffect"
      Data.s "CreateCone"
      Data.s "CreateCube"
      Data.s "CreateCubeMapTexture"
      Data.s "CreateCylinder"
      Data.s "CreateDialog"
      Data.s "CreateDirectory"
      Data.s "CreateEntity"
      Data.s "CreateEntityBody"
      Data.s "CreateFile"
      Data.s "CreateFTPDirectory"
      Data.s "CreateIcoSphere"
      Data.s "CreateImage"
      Data.s "CreateImageMenu"
      Data.s "CreateJSON"
      Data.s "CreateLensFlareEffect"
      Data.s "CreateLight"
      Data.s "CreateLine3D"
      Data.s "CreateMail"
      Data.s "CreateMaterial"
      Data.s "CreateMenu"
      Data.s "CreateMesh"
      Data.s "CreateMutex"
      Data.s "CreateNetworkServer"
      Data.s "CreateNode"
      Data.s "CreateNodeAnimation"
      Data.s "CreateNodeAnimationKeyFrame"
      Data.s "CreatePack"
      Data.s "CreateParticleEmitter"
      Data.s "CreatePlane"
      Data.s "CreatePopupImageMenu"
      Data.s "CreatePopupMenu"
      Data.s "CreatePreferences"
      Data.s "CreateRegularExpression"
      Data.s "CreateRenderTexture"
      Data.s "CreateRibbonEffect"
      Data.s "CreateSemaphore"
      Data.s "CreateSphere"
      Data.s "CreateSpline"
      Data.s "CreateSprite"
      Data.s "CreateStaticGeometry"
      Data.s "CreateStatusBar"
      Data.s "CreateTerrain"
      Data.s "CreateTerrainBody"
      Data.s "CreateText3D"
      Data.s "CreateTexture"
      Data.s "CreateThread"
      Data.s "CreateToolBar"
      Data.s "CreateTorus"
      Data.s "CreateTube"
      Data.s "CreateVehicle"
      Data.s "CreateVehicleBody"
      Data.s "CreateVertexAnimation"
      Data.s "CreateVertexPoseKeyFrame"
      Data.s "CreateVertexTrack"
      Data.s "CreateWater"
      Data.s "CreateXML"
      Data.s "CreateXMLNode"
      Data.s "CryptRandom"
      Data.s "CryptRandomData"
      Data.s "CustomDashPath"
      Data.s "CustomFilterCallback"
      Data.s "CustomGradient"
      Data.s "DashPath"
      Data.s "DatabaseColumnIndex"
      Data.s "DatabaseColumnName"
      Data.s "DatabaseColumns"
      Data.s "DatabaseColumnSize"
      Data.s "DatabaseColumnType"
      Data.s "DatabaseDriverDescription"
      Data.s "DatabaseDriverName"
      Data.s "DatabaseError"
      Data.s "DatabaseID"
      Data.s "DatabaseQuery"
      Data.s "DatabaseUpdate"
      Data.s "Date"
      Data.s "DateGadget"
      Data.s "Day"
      Data.s "DayOfWeek"
      Data.s "DayOfYear"
      Data.s "DebuggerError"
      Data.s "DebuggerWarning"
      Data.s "DefaultPrinter"
      Data.s "DefineTerrainTile"
      Data.s "Degree"
      Data.s "Delay"
      Data.s "DeleteDirectory"
      Data.s "DeleteElement"
      Data.s "DeleteFile"
      Data.s "DeleteFTPDirectory"
      Data.s "DeleteFTPFile"
      Data.s "DeleteMapElement"
      Data.s "DeleteXMLNode"
      Data.s "DESFingerprint"
      Data.s "DesktopDepth"
      Data.s "DesktopFrequency"
      Data.s "DesktopHeight"
      Data.s "DesktopMouseX"
      Data.s "DesktopMouseY"
      Data.s "DesktopName"
      Data.s "DesktopWidth"
      Data.s "DesktopX"
      Data.s "DesktopY"
      Data.s "DetachEntityObject"
      Data.s "DetachNodeObject"
      Data.s "DetachRibbonEffect"
      Data.s "DialogError"
      Data.s "DialogGadget"
      Data.s "DialogID"
      Data.s "DialogWindow"
      Data.s "DirectoryEntryAttributes"
      Data.s "DirectoryEntryDate"
      Data.s "DirectoryEntryName"
      Data.s "DirectoryEntrySize"
      Data.s "DirectoryEntryType"
      Data.s "DisableEntityBody"
      Data.s "DisableGadget"
      Data.s "DisableGadget3D"
      Data.s "DisableLightShadows"
      Data.s "DisableMaterialLighting"
      Data.s "DisableMenuItem"
      Data.s "DisableParticleEmitter"
      Data.s "DisableToolBarButton"
      Data.s "DisableWindow"
      Data.s "DisableWindow3D"
      Data.s "DisplayPopupMenu"
      Data.s "DisplaySprite"
      Data.s "DisplayTransparentSprite"
      Data.s "DotPath"
      Data.s "DoubleClickTime"
      Data.s "DragFiles"
      Data.s "DragImage"
      Data.s "DragOSFormats"
      Data.s "DragPrivate"
      Data.s "DragText"
      Data.s "DrawAlphaImage"
      Data.s "DrawImage"
      Data.s "DrawingBuffer"
      Data.s "DrawingBufferPitch"
      Data.s "DrawingBufferPixelFormat"
      Data.s "DrawingFont"
      Data.s "DrawingMode"
      Data.s "DrawRotatedText"
      Data.s "DrawText"
      Data.s "DrawVectorImage"
      Data.s "DrawVectorParagraph"
      Data.s "DrawVectorText"
      Data.s "EditorGadget"
      Data.s "EditorGadget3D"
      Data.s "EjectAudioCD"
      Data.s "ElapsedMilliseconds"
      Data.s "Ellipse"
      Data.s "EllipticalGradient"
      Data.s "EnableGadgetDrop"
      Data.s "EnableGraphicalConsole"
      Data.s "EnableHingeJointAngularMotor"
      Data.s "EnableManualEntityBoneControl"
      Data.s "EnableWindowDrop"
      Data.s "EnableWorldCollisions"
      Data.s "EnableWorldPhysics"
      Data.s "EncodeImage"
      Data.s "EndVectorLayer"
      Data.s "Engine3DStatus"
      Data.s "EntityAngularFactor"
      Data.s "EntityAnimationBlendMode"
      Data.s "EntityAnimationStatus"
      Data.s "EntityBonePitch"
      Data.s "EntityBoneRoll"
      Data.s "EntityBoneX"
      Data.s "EntityBoneY"
      Data.s "EntityBoneYaw"
      Data.s "EntityBoneZ"
      Data.s "EntityBoundingBox"
      Data.s "EntityCollide"
      Data.s "EntityCubeMapTexture"
      Data.s "EntityCustomParameter"
      Data.s "EntityFixedYawAxis"
      Data.s "EntityID"
      Data.s "EntityLinearFactor"
      Data.s "EntityLookAt"
      Data.s "EntityMesh"
      Data.s "EntityParentNode"
      Data.s "EntityPitch"
      Data.s "EntityRenderMode"
      Data.s "EntityRoll"
      Data.s "EntityVelocity"
      Data.s "EntityX"
      Data.s "EntityY"
      Data.s "EntityYaw"
      Data.s "EntityZ"
      Data.s "EnvironmentVariableName"
      Data.s "EnvironmentVariableValue"
      Data.s "Eof"
      Data.s "ErrorAddress"
      Data.s "ErrorCode"
      Data.s "ErrorFile"
      Data.s "ErrorLine"
      Data.s "ErrorMessage"
      Data.s "ErrorRegister"
      Data.s "ErrorTargetAddress"
      Data.s "EscapeString"
      Data.s "Event"
      Data.s "EventClient"
      Data.s "EventData"
      Data.s "EventDropAction"
      Data.s "EventDropBuffer"
      Data.s "EventDropFiles"
      Data.s "EventDropImage"
      Data.s "EventDropPrivate"
      Data.s "EventDropSize"
      Data.s "EventDropText"
      Data.s "EventDropType"
      Data.s "EventDropX"
      Data.s "EventDropY"
      Data.s "EventGadget"
      Data.s "EventGadget3D"
      Data.s "EventlParam"
      Data.s "EventMenu"
      Data.s "EventServer"
      Data.s "EventTimer"
      Data.s "EventType"
      Data.s "EventType3D"
      Data.s "EventWindow"
      Data.s "EventWindow3D"
      Data.s "EventwParam"
      Data.s "ExamineAssembly"
      Data.s "ExamineDatabaseDrivers"
      Data.s "ExamineDesktops"
      Data.s "ExamineDirectory"
      Data.s "ExamineEnvironmentVariables"
      Data.s "ExamineFTPDirectory"
      Data.s "ExamineIPAddresses"
      Data.s "ExamineJoystick"
      Data.s "ExamineJSONMembers"
      Data.s "ExamineKeyboard"
      Data.s "ExamineLibraryFunctions"
      Data.s "ExamineMouse"
      Data.s "ExaminePack"
      Data.s "ExaminePreferenceGroups"
      Data.s "ExaminePreferenceKeys"
      Data.s "ExamineRegularExpression"
      Data.s "ExamineScreenModes"
      Data.s "ExamineWorldCollisions"
      Data.s "ExamineXMLAttributes"
      Data.s "Exp"
      Data.s "ExplorerComboGadget"
      Data.s "ExplorerListGadget"
      Data.s "ExplorerTreeGadget"
      Data.s "ExportJSON"
      Data.s "ExportJSONSize"
      Data.s "ExportXML"
      Data.s "ExportXMLSize"
      Data.s "ExtractJSONArray"
      Data.s "ExtractJSONList"
      Data.s "ExtractJSONMap"
      Data.s "ExtractJSONStructure"
      Data.s "ExtractRegularExpression"
      Data.s "ExtractXMLArray"
      Data.s "ExtractXMLList"
      Data.s "ExtractXMLMap"
      Data.s "ExtractXMLStructure"
      Data.s "FetchEntityMaterial"
      Data.s "FetchOrientation"
      Data.s "FileBuffersSize"
      Data.s "FileFingerprint"
      Data.s "FileID"
      Data.s "FileSeek"
      Data.s "FileSize"
      Data.s "FillArea"
      Data.s "FillMemory"
      Data.s "FillPath"
      Data.s "FillVectorOutput"
      Data.s "FindMapElement"
      Data.s "FindString"
      Data.s "Fingerprint"
      Data.s "FinishCipher"
      Data.s "FinishDatabaseQuery"
      Data.s "FinishDirectory"
      Data.s "FinishFastCGIRequest"
      Data.s "FinishFingerprint"
      Data.s "FinishFTPDirectory"
      Data.s "FinishHTTP"
      Data.s "FinishMesh"
      Data.s "FirstDatabaseRow"
      Data.s "FirstElement"
      Data.s "FirstWorldCollisionEntity"
      Data.s "FlipBuffers"
      Data.s "FlipCoordinatesX"
      Data.s "FlipCoordinatesY"
      Data.s "FlushFileBuffers"
      Data.s "FlushPreferenceBuffers"
      Data.s "Fog"
      Data.s "FontID"
      Data.s "FontRequester"
      Data.s "FormatDate"
      Data.s "FormatNumber"
      Data.s "FormatXML"
      Data.s "FrameGadget"
      Data.s "FrameGadget3D"
      Data.s "FreeArray"
      Data.s "FreeBillboardGroup"
      Data.s "FreeCamera"
      Data.s "FreeDialog"
      Data.s "FreeEffect"
      Data.s "FreeEntity"
      Data.s "FreeEntityBody"
      Data.s "FreeEntityJoints"
      Data.s "FreeFont"
      Data.s "FreeGadget"
      Data.s "FreeGadget3D"
      Data.s "FreeImage"
      Data.s "FreeIP"
      Data.s "FreeJoint"
      Data.s "FreeJSON"
      Data.s "FreeLight"
      Data.s "FreeList"
      Data.s "FreeMail"
      Data.s "FreeMap"
      Data.s "FreeMaterial"
      Data.s "FreeMemory"
      Data.s "FreeMenu"
      Data.s "FreeMesh"
      Data.s "FreeMovie"
      Data.s "FreeMusic"
      Data.s "FreeMutex"
      Data.s "FreeNode"
      Data.s "FreeNodeAnimation"
      Data.s "FreeParticleEmitter"
      Data.s "FreeRegularExpression"
      Data.s "FreeSemaphore"
      Data.s "FreeSound"
      Data.s "FreeSound3D"
      Data.s "FreeSpline"
      Data.s "FreeSprite"
      Data.s "FreeStaticGeometry"
      Data.s "FreeStatusBar"
      Data.s "FreeStructure"
      Data.s "FreeTerrain"
      Data.s "FreeTerrainBody"
      Data.s "FreeText3D"
      Data.s "FreeTexture"
      Data.s "FreeToolBar"
      Data.s "FreeWater"
      Data.s "FreeXML"
      Data.s "FrontColor"
      Data.s "FTPDirectoryEntryAttributes"
      Data.s "FTPDirectoryEntryDate"
      Data.s "FTPDirectoryEntryName"
      Data.s "FTPDirectoryEntryRaw"
      Data.s "FTPDirectoryEntrySize"
      Data.s "FTPDirectoryEntryType"
      Data.s "FTPProgress"
      Data.s "GadgetHeight"
      Data.s "GadgetHeight3D"
      Data.s "GadgetID"
      Data.s "GadgetID3D"
      Data.s "GadgetItemID"
      Data.s "GadgetToolTip"
      Data.s "GadgetToolTip3D"
      Data.s "GadgetType"
      Data.s "GadgetType3D"
      Data.s "GadgetWidth"
      Data.s "GadgetWidth3D"
      Data.s "GadgetX"
      Data.s "GadgetX3D"
      Data.s "GadgetY"
      Data.s "GadgetY3D"
      Data.s "GenericJoint"
      Data.s "GetActiveGadget"
      Data.s "GetActiveGadget3D"
      Data.s "GetActiveWindow"
      Data.s "GetActiveWindow3D"
      Data.s "GetClientIP"
      Data.s "GetClientPort"
      Data.s "GetClipboardImage"
      Data.s "GetClipboardText"
      Data.s "GetCurrentDirectory"
      Data.s "GetDatabaseBlob"
      Data.s "GetDatabaseDouble"
      Data.s "GetDatabaseFloat"
      Data.s "GetDatabaseLong"
      Data.s "GetDatabaseQuad"
      Data.s "GetDatabaseString"
      Data.s "GetEntityAnimationLength"
      Data.s "GetEntityAnimationTime"
      Data.s "GetEntityAnimationWeight"
      Data.s "GetEntityAttribute"
      Data.s "GetEntityCollisionGroup"
      Data.s "GetEntityCollisionMask"
      Data.s "GetEnvironmentVariable"
      Data.s "GetExtensionPart"
      Data.s "GetFileAttributes"
      Data.s "GetFileDate"
      Data.s "GetFilePart"
      Data.s "GetFTPDirectory"
      Data.s "GetFunction"
      Data.s "GetFunctionEntry"
      Data.s "GetGadgetAttribute"
      Data.s "GetGadgetAttribute3D"
      Data.s "GetGadgetColor"
      Data.s "GetGadgetData"
      Data.s "GetGadgetData3D"
      Data.s "GetGadgetFont"
      Data.s "GetGadgetItemAttribute"
      Data.s "GetGadgetItemColor"
      Data.s "GetGadgetItemData"
      Data.s "GetGadgetItemData3D"
      Data.s "GetGadgetItemState"
      Data.s "GetGadgetItemState3D"
      Data.s "GetGadgetItemText"
      Data.s "GetGadgetItemText3D"
      Data.s "GetGadgetState"
      Data.s "GetGadgetState3D"
      Data.s "GetGadgetText"
      Data.s "GetGadgetText3D"
      Data.s "GetHomeDirectory"
      Data.s "GetHTTPHeader"
      Data.s "GetImageFrame"
      Data.s "GetImageFrameDelay"
      Data.s "GetJointAttribute"
      Data.s "GetJSONBoolean"
      Data.s "GetJSONDouble"
      Data.s "GetJSONElement"
      Data.s "GetJSONFloat"
      Data.s "GetJSONInteger"
      Data.s "GetJSONMember"
      Data.s "GetJSONQuad"
      Data.s "GetJSONString"
      Data.s "GetLightColor"
      Data.s "GetMailAttribute"
      Data.s "GetMailBody"
      Data.s "GetMaterialAttribute"
      Data.s "GetMaterialColor"
      Data.s "GetMenuItemState"
      Data.s "GetMenuItemText"
      Data.s "GetMenuTitleText"
      Data.s "GetMeshData"
      Data.s "GetMusicPosition"
      Data.s "GetMusicRow"
      Data.s "GetNodeAnimationKeyFramePitch"
      Data.s "GetNodeAnimationKeyFrameRoll"
      Data.s "GetNodeAnimationKeyFrameTime"
      Data.s "GetNodeAnimationKeyFrameX"
      Data.s "GetNodeAnimationKeyFrameY"
      Data.s "GetNodeAnimationKeyFrameYaw"
      Data.s "GetNodeAnimationKeyFrameZ"
      Data.s "GetNodeAnimationLength"
      Data.s "GetNodeAnimationTime"
      Data.s "GetNodeAnimationWeight"
      Data.s "GetOriginX"
      Data.s "GetOriginY"
      Data.s "GetPathPart"
      Data.s "GetRuntimeDouble"
      Data.s "GetRuntimeInteger"
      Data.s "GetRuntimeString"
      Data.s "GetScriptMaterial"
      Data.s "GetScriptParticleEmitter"
      Data.s "GetScriptTexture"
      Data.s "GetSerialPortStatus"
      Data.s "GetSoundFrequency"
      Data.s "GetSoundPosition"
      Data.s "GetTemporaryDirectory"
      Data.s "GetTerrainTileHeightAtPoint"
      Data.s "GetTerrainTileLayerBlend"
      Data.s "GetToolBarButtonState"
      Data.s "GetURLPart"
      Data.s "GetUserDirectory"
      Data.s "GetVehicleAttribute"
      Data.s "GetW"
      Data.s "GetWindowColor"
      Data.s "GetWindowData"
      Data.s "GetWindowState"
      Data.s "GetWindowTitle"
      Data.s "GetWindowTitle3D"
      Data.s "GetX"
      Data.s "GetXMLAttribute"
      Data.s "GetXMLEncoding"
      Data.s "GetXMLNodeName"
      Data.s "GetXMLNodeOffset"
      Data.s "GetXMLNodeText"
      Data.s "GetXMLStandalone"
      Data.s "GetY"
      Data.s "GetZ"
      Data.s "GrabDrawingImage"
      Data.s "GrabImage"
      Data.s "GrabSprite"
      Data.s "GradientColor"
      Data.s "Green"
      Data.s "Hex"
      Data.s "HideBillboardGroup"
      Data.s "HideEffect"
      Data.s "HideEntity"
      Data.s "HideGadget"
      Data.s "HideGadget3D"
      Data.s "HideLight"
      Data.s "HideMenu"
      Data.s "HideParticleEmitter"
      Data.s "HideWindow"
      Data.s "HideWindow3D"
      Data.s "HingeJoint"
      Data.s "HingeJointMotorTarget"
      Data.s "Hostname"
      Data.s "Hour"
      Data.s "HTTPProgress"
      Data.s "HTTPProxy"
      Data.s "HyperLinkGadget"
      Data.s "ImageDepth"
      Data.s "ImageFormat"
      Data.s "ImageFrameCount"
      Data.s "ImageGadget"
      Data.s "ImageGadget3D"
      Data.s "ImageHeight"
      Data.s "ImageID"
      Data.s "ImageOutput"
      Data.s "ImageVectorOutput"
      Data.s "ImageWidth"
      Data.s "Infinity"
      Data.s "InitAudioCD"
      Data.s "InitCGI"
      Data.s "InitEngine3D"
      Data.s "InitFastCGI"
      Data.s "InitializeStructure"
      Data.s "InitJoystick"
      Data.s "InitKeyboard"
      Data.s "InitMouse"
      Data.s "InitMovie"
      Data.s "InitNetwork"
      Data.s "InitScintilla"
      Data.s "InitSound"
      Data.s "InitSprite"
      Data.s "Inkey"
      Data.s "Input"
      Data.s "InputEvent3D"
      Data.s "InputRequester"
      Data.s "InsertElement"
      Data.s "InsertJSONArray"
      Data.s "InsertJSONList"
      Data.s "InsertJSONMap"
      Data.s "InsertJSONStructure"
      Data.s "InsertString"
      Data.s "InsertXMLArray"
      Data.s "InsertXMLList"
      Data.s "InsertXMLMap"
      Data.s "InsertXMLStructure"
      Data.s "InstructionAddress"
      Data.s "InstructionString"
      Data.s "Int"
      Data.s "IntQ"
      Data.s "IPAddressField"
      Data.s "IPAddressGadget"
      Data.s "IPString"
      Data.s "IsBillboardGroup"
      Data.s "IsCamera"
      Data.s "IsCipher"
      Data.s "IsDatabase"
      Data.s "IsDialog"
      Data.s "IsDirectory"
      Data.s "IsEffect"
      Data.s "IsEntity"
      Data.s "IsFile"
      Data.s "IsFingerprint"
      Data.s "IsFont"
      Data.s "IsFTP"
      Data.s "IsGadget"
      Data.s "IsGadget3D"
      Data.s "IsImage"
      Data.s "IsInfinity"
      Data.s "IsInsidePath"
      Data.s "IsInsideStroke"
      Data.s "IsJoint"
      Data.s "IsJSON"
      Data.s "IsLibrary"
      Data.s "IsLight"
      Data.s "IsMail"
      Data.s "IsMaterial"
      Data.s "IsMenu"
      Data.s "IsMesh"
      Data.s "IsMovie"
      Data.s "IsMusic"
      Data.s "IsNAN"
      Data.s "IsNode"
      Data.s "IsParticleEmitter"
      Data.s "IsPathEmpty"
      Data.s "IsProgram"
      Data.s "IsRegularExpression"
      Data.s "IsRuntime"
      Data.s "IsScreenActive"
      Data.s "IsSerialPort"
      Data.s "IsSound"
      Data.s "IsSound3D"
      Data.s "IsSprite"
      Data.s "IsStaticGeometry"
      Data.s "IsStatusBar"
      Data.s "IsSysTrayIcon"
      Data.s "IsText3D"
      Data.s "IsTexture"
      Data.s "IsThread"
      Data.s "IsToolBar"
      Data.s "IsWindow"
      Data.s "IsWindow3D"
      Data.s "IsXML"
      Data.s "JoystickAxisX"
      Data.s "JoystickAxisY"
      Data.s "JoystickAxisZ"
      Data.s "JoystickButton"
      Data.s "JoystickName"
      Data.s "JSONArraySize"
      Data.s "JSONErrorLine"
      Data.s "JSONErrorMessage"
      Data.s "JSONErrorPosition"
      Data.s "JSONMemberKey"
      Data.s "JSONMemberValue"
      Data.s "JSONObjectSize"
      Data.s "JSONType"
      Data.s "JSONValue"
      Data.s "KeyboardInkey"
      Data.s "KeyboardMode"
      Data.s "KeyboardPushed"
      Data.s "KeyboardReleased"
      Data.s "KillProgram"
      Data.s "KillThread"
      Data.s "LastElement"
      Data.s "LCase"
      Data.s "Left"
      Data.s "Len"
      Data.s "LensFlareEffectColor"
      Data.s "LibraryFunctionAddress"
      Data.s "LibraryFunctionName"
      Data.s "LibraryID"
      Data.s "LightAttenuation"
      Data.s "LightDirection"
      Data.s "LightDirectionX"
      Data.s "LightDirectionY"
      Data.s "LightDirectionZ"
      Data.s "LightID"
      Data.s "LightLookAt"
      Data.s "LightPitch"
      Data.s "LightRoll"
      Data.s "LightX"
      Data.s "LightY"
      Data.s "LightYaw"
      Data.s "LightZ"
      Data.s "Line"
      Data.s "LinearGradient"
      Data.s "LineXY"
      Data.s "ListIconGadget"
      Data.s "ListIndex"
      Data.s "ListSize"
      Data.s "ListViewGadget"
      Data.s "ListViewGadget3D"
      Data.s "LoadFont"
      Data.s "LoadImage"
      Data.s "LoadJSON"
      Data.s "LoadMesh"
      Data.s "LoadMovie"
      Data.s "LoadMusic"
      Data.s "LoadSound"
      Data.s "LoadSound3D"
      Data.s "LoadSprite"
      Data.s "LoadTexture"
      Data.s "LoadWorld"
      Data.s "LoadXML"
      Data.s "Loc"
      Data.s "LockMutex"
      Data.s "Lof"
      Data.s "Log"
      Data.s "Log10"
      Data.s "LSet"
      Data.s "LTrim"
      Data.s "MailProgress"
      Data.s "MainXMLNode"
      Data.s "MakeIPAddress"
      Data.s "MapKey"
      Data.s "MapSize"
      Data.s "MatchRegularExpression"
      Data.s "MaterialAnimation"
      Data.s "MaterialBlendingMode"
      Data.s "MaterialCullingMode"
      Data.s "MaterialFilteringMode"
      Data.s "MaterialFog"
      Data.s "MaterialID"
      Data.s "MaterialShadingMode"
      Data.s "MaterialShininess"
      Data.s "MDIGadget"
      Data.s "MemorySize"
      Data.s "MemoryStatus"
      Data.s "MemoryStringLength"
      Data.s "MenuBar"
      Data.s "MenuHeight"
      Data.s "MenuID"
      Data.s "MenuItem"
      Data.s "MenuTitle"
      Data.s "MergeLists"
      Data.s "MeshFace"
      Data.s "MeshID"
      Data.s "MeshIndex"
      Data.s "MeshIndexCount"
      Data.s "MeshPoseCount"
      Data.s "MeshPoseName"
      Data.s "MeshRadius"
      Data.s "MeshVertexColor"
      Data.s "MeshVertexCount"
      Data.s "MeshVertexNormal"
      Data.s "MeshVertexPosition"
      Data.s "MeshVertexTangent"
      Data.s "MeshVertexTextureCoordinate"
      Data.s "MessageRequester"
      Data.s "Mid"
      Data.s "Minute"
      Data.s "Mod"
      Data.s "Month"
      Data.s "MouseButton"
      Data.s "MouseDeltaX"
      Data.s "MouseDeltaY"
      Data.s "MouseLocate"
      Data.s "MousePick"
      Data.s "MouseRayCast"
      Data.s "MouseWheel"
      Data.s "MouseX"
      Data.s "MouseY"
      Data.s "MoveBillboard"
      Data.s "MoveBillboardGroup"
      Data.s "MoveCamera"
      Data.s "MoveElement"
      Data.s "MoveEntity"
      Data.s "MoveEntityBone"
      Data.s "MoveLight"
      Data.s "MoveMemory"
      Data.s "MoveNode"
      Data.s "MoveParticleEmitter"
      Data.s "MovePathCursor"
      Data.s "MoveText3D"
      Data.s "MoveXMLNode"
      Data.s "MovieAudio"
      Data.s "MovieHeight"
      Data.s "MovieInfo"
      Data.s "MovieLength"
      Data.s "MovieSeek"
      Data.s "MovieStatus"
      Data.s "MovieWidth"
      Data.s "MusicVolume"
      Data.s "NaN"
      Data.s "NetworkClientEvent"
      Data.s "NetworkServerEvent"
      Data.s "NewPrinterPage"
      Data.s "NewVectorPage"
      Data.s "NextDatabaseDriver"
      Data.s "NextDatabaseRow"
      Data.s "NextDirectoryEntry"
      Data.s "NextElement"
      Data.s "NextEnvironmentVariable"
      Data.s "NextFTPDirectoryEntry"
      Data.s "NextInstruction"
      Data.s "NextIPAddress"
      Data.s "NextJSONMember"
      Data.s "NextLibraryFunction"
      Data.s "NextMapElement"
      Data.s "NextPackEntry"
      Data.s "NextPreferenceGroup"
      Data.s "NextPreferenceKey"
      Data.s "NextRegularExpressionMatch"
      Data.s "NextScreenMode"
      Data.s "NextSelectedFileName"
      Data.s "NextWorldCollision"
      Data.s "NextXMLAttribute"
      Data.s "NextXMLNode"
      Data.s "NodeAnimationStatus"
      Data.s "NodeFixedYawAxis"
      Data.s "NodeID"
      Data.s "NodeLookAt"
      Data.s "NodePitch"
      Data.s "NodeRoll"
      Data.s "NodeX"
      Data.s "NodeY"
      Data.s "NodeYaw"
      Data.s "NodeZ"
      Data.s "NormalizeMesh"
      Data.s "NormalX"
      Data.s "NormalY"
      Data.s "NormalZ"
      Data.s "OnErrorCall"
      Data.s "OnErrorDefault"
      Data.s "OnErrorExit"
      Data.s "OnErrorGoto"
      Data.s "OpenConsole"
      Data.s "OpenCryptRandom"
      Data.s "OpenDatabase"
      Data.s "OpenDatabaseRequester"
      Data.s "OpenFile"
      Data.s "OpenFileRequester"
      Data.s "OpenFTP"
      Data.s "OpenGadgetList"
      Data.s "OpenGadgetList3D"
      Data.s "OpenGLGadget"
      Data.s "OpenHelp"
      Data.s "OpenLibrary"
     

Module Scintilla fin

Publié : ven. 23/juin/2017 9:15
par Micoute

Code : Tout sélectionner

 Data.s "OpenNetworkConnection"
      Data.s "OpenPack"
      Data.s "OpenPreferences"
      Data.s "OpenScreen"
      Data.s "OpenSerialPort"
      Data.s "OpenSubMenu"
      Data.s "OpenWindow"
      Data.s "OpenWindow3D"
      Data.s "OpenWindowedScreen"
      Data.s "OpenXMLDialog"
      Data.s "OptionGadget"
      Data.s "OptionGadget3D"
      Data.s "OSVersion"
      Data.s "OutputDepth"
      Data.s "OutputHeight"
      Data.s "OutputWidth"
      Data.s "PackEntryName"
      Data.s "PackEntrySize"
      Data.s "PackEntryType"
      Data.s "PanelGadget"
      Data.s "PanelGadget3D"
      Data.s "ParentXMLNode"
      Data.s "Parse3DScripts"
      Data.s "ParseDate"
      Data.s "ParseJSON"
      Data.s "ParseXML"
      Data.s "ParticleAcceleration"
      Data.s "ParticleColorFader"
      Data.s "ParticleColorRange"
      Data.s "ParticleEmissionRate"
      Data.s "ParticleEmitterAngle"
      Data.s "ParticleEmitterDirection"
      Data.s "ParticleEmitterID"
      Data.s "ParticleEmitterX"
      Data.s "ParticleEmitterY"
      Data.s "ParticleEmitterZ"
      Data.s "ParticleMaterial"
      Data.s "ParticleSize"
      Data.s "ParticleSpeedFactor"
      Data.s "ParticleTimeToLive"
      Data.s "ParticleVelocity"
      Data.s "PathBoundsHeight"
      Data.s "PathBoundsWidth"
      Data.s "PathBoundsX"
      Data.s "PathBoundsY"
      Data.s "PathCursorX"
      Data.s "PathCursorY"
      Data.s "PathLength"
      Data.s "PathPointAngle"
      Data.s "PathPointX"
      Data.s "PathPointY"
      Data.s "PathRequester"
      Data.s "PathSegments"
      Data.s "PauseAudioCD"
      Data.s "PauseMovie"
      Data.s "PauseSound"
      Data.s "PauseThread"
      Data.s "PeekA"
      Data.s "PeekB"
      Data.s "PeekC"
      Data.s "PeekD"
      Data.s "PeekF"
      Data.s "PeekI"
      Data.s "PeekL"
      Data.s "PeekQ"
      Data.s "PeekS"
      Data.s "PeekU"
      Data.s "PeekW"
      Data.s "PickX"
      Data.s "PickY"
      Data.s "PickZ"
      Data.s "Pitch"
      Data.s "PlayAudioCD"
      Data.s "PlayMovie"
      Data.s "PlayMusic"
      Data.s "PlaySound"
      Data.s "PlaySound3D"
      Data.s "Plot"
      Data.s "Point"
      Data.s "PointJoint"
      Data.s "PointPick"
      Data.s "PokeA"
      Data.s "PokeB"
      Data.s "PokeC"
      Data.s "PokeD"
      Data.s "PokeF"
      Data.s "PokeI"
      Data.s "PokeL"
      Data.s "PokeQ"
      Data.s "PokeS"
      Data.s "PokeU"
      Data.s "PokeW"
      Data.s "PopListPosition"
      Data.s "PopMapPosition"
      Data.s "PostEvent"
      Data.s "Pow"
      Data.s "PreferenceComment"
      Data.s "PreferenceGroup"
      Data.s "PreferenceGroupName"
      Data.s "PreferenceKeyName"
      Data.s "PreferenceKeyValue"
      Data.s "PreviousDatabaseRow"
      Data.s "PreviousElement"
      Data.s "PreviousXMLNode"
      Data.s "Print"
      Data.s "PrinterOutput"
      Data.s "PrinterPageHeight"
      Data.s "PrinterPageWidth"
      Data.s "PrinterVectorOutput"
      Data.s "PrintN"
      Data.s "PrintRequester"
      Data.s "ProgramExitCode"
      Data.s "ProgramFilename"
      Data.s "ProgramID"
      Data.s "ProgramParameter"
      Data.s "ProgramRunning"
      Data.s "ProgressBarGadget"
      Data.s "ProgressBarGadget3D"
      Data.s "PurifierGranularity"
      Data.s "PushListPosition"
      Data.s "PushMapPosition"
      Data.s "Radian"
      Data.s "RaiseError"
      Data.s "Random"
      Data.s "RandomData"
      Data.s "RandomizeArray"
      Data.s "RandomizeList"
      Data.s "RandomSeed"
      Data.s "RawKey"
      Data.s "RayCast"
      Data.s "RayCollide"
      Data.s "RayPick"
      Data.s "ReadAsciiCharacter"
      Data.s "ReadByte"
      Data.s "ReadCGI"
      Data.s "ReadCharacter"
      Data.s "ReadConsoleData"
      Data.s "ReadData"
      Data.s "ReadDouble"
      Data.s "ReadFile"
      Data.s "ReadFloat"
      Data.s "ReadInteger"
      Data.s "ReadLong"
      Data.s "ReadPreferenceDouble"
      Data.s "ReadPreferenceFloat"
      Data.s "ReadPreferenceInteger"
      Data.s "ReadPreferenceLong"
      Data.s "ReadPreferenceQuad"
      Data.s "ReadPreferenceString"
      Data.s "ReadProgramData"
      Data.s "ReadProgramError"
      Data.s "ReadProgramString"
      Data.s "ReadQuad"
      Data.s "ReadSerialPortData"
      Data.s "ReadString"
      Data.s "ReadStringFormat"
      Data.s "ReadUnicodeCharacter"
      Data.s "ReadWord"
      Data.s "ReAllocateMemory"
      Data.s "ReceiveFTPFile"
      Data.s "ReceiveHTTPFile"
      Data.s "ReceiveHTTPMemory"
      Data.s "ReceiveNetworkData"
      Data.s "Red"
      Data.s "RefreshDialog"
      Data.s "RegisterFontFile"
      Data.s "RegularExpressionError"
      Data.s "RegularExpressionGroup"
      Data.s "RegularExpressionGroupLength"
      Data.s "RegularExpressionGroupPosition"
      Data.s "RegularExpressionMatchLength"
      Data.s "RegularExpressionMatchPosition"
      Data.s "RegularExpressionMatchString"
      Data.s "RegularExpressionNamedGroup"
      Data.s "RegularExpressionNamedGroupLength"
      Data.s "RegularExpressionNamedGroupPosition"
      Data.s "ReleaseMouse"
      Data.s "ReloadMaterial"
      Data.s "RemoveBillboard"
      Data.s "RemoveEnvironmentVariable"
      Data.s "RemoveGadgetColumn"
      Data.s "RemoveGadgetItem"
      Data.s "RemoveGadgetItem3D"
      Data.s "RemoveImageFrame"
      Data.s "RemoveJSONElement"
      Data.s "RemoveJSONMember"
      Data.s "RemoveKeyboardShortcut"
      Data.s "RemoveMailRecipient"
      Data.s "RemoveMaterialLayer"
      Data.s "RemovePreferenceGroup"
      Data.s "RemovePreferenceKey"
      Data.s "RemoveString"
      Data.s "RemoveSysTrayIcon"
      Data.s "RemoveWindowTimer"
      Data.s "RemoveXMLAttribute"
      Data.s "RenameFile"
      Data.s "RenameFTPFile"
      Data.s "RenderWorld"
      Data.s "ReplaceRegularExpression"
      Data.s "ReplaceString"
      Data.s "ResetCoordinates"
      Data.s "ResetGradientColors"
      Data.s "ResetList"
      Data.s "ResetMap"
      Data.s "ResetMaterial"
      Data.s "ResetPath"
      Data.s "ResetProfiler"
      Data.s "ResetStructure"
      Data.s "ResizeBillboard"
      Data.s "ResizeCamera"
      Data.s "ResizeGadget"
      Data.s "ResizeGadget3D"
      Data.s "ResizeImage"
      Data.s "ResizeJSONElements"
      Data.s "ResizeMovie"
      Data.s "ResizeParticleEmitter"
      Data.s "ResizeWindow"
      Data.s "ResizeWindow3D"
      Data.s "ResolveXMLAttributeName"
      Data.s "ResolveXMLNodeName"
      Data.s "RestoreVectorState"
      Data.s "ResumeAudioCD"
      Data.s "ResumeMovie"
      Data.s "ResumeSound"
      Data.s "ResumeThread"
      Data.s "ReverseString"
      Data.s "RGB"
      Data.s "RGBA"
      Data.s "RibbonEffectColor"
      Data.s "RibbonEffectWidth"
      Data.s "Right"
      Data.s "Roll"
      Data.s "RootXMLNode"
      Data.s "RotateBillboardGroup"
      Data.s "RotateCamera"
      Data.s "RotateCoordinates"
      Data.s "RotateEntity"
      Data.s "RotateEntityBone"
      Data.s "RotateLight"
      Data.s "RotateMaterial"
      Data.s "RotateNode"
      Data.s "RotateSprite"
      Data.s "Round"
      Data.s "RoundBox"
      Data.s "RSet"
      Data.s "RTrim"
      Data.s "RunProgram"
      Data.s "SaveDebugOutput"
      Data.s "SaveFileRequester"
      Data.s "SaveImage"
      Data.s "SaveJSON"
      Data.s "SaveMesh"
      Data.s "SaveRenderTexture"
      Data.s "SaveSprite"
      Data.s "SaveTerrain"
      Data.s "SaveVectorState"
      Data.s "SaveXML"
      Data.s "ScaleCoordinates"
      Data.s "ScaleEntity"
      Data.s "ScaleMaterial"
      Data.s "ScaleNode"
      Data.s "ScaleText3D"
      Data.s "ScintillaGadget"
      Data.s "ScintillaSendMessage"
      Data.s "ScreenDepth"
      Data.s "ScreenHeight"
      Data.s "ScreenID"
      Data.s "ScreenModeDepth"
      Data.s "ScreenModeHeight"
      Data.s "ScreenModeRefreshRate"
      Data.s "ScreenModeWidth"
      Data.s "ScreenOutput"
      Data.s "ScreenWidth"
      Data.s "ScrollAreaGadget"
      Data.s "ScrollAreaGadget3D"
      Data.s "ScrollBarGadget"
      Data.s "ScrollBarGadget3D"
      Data.s "ScrollMaterial"
      Data.s "Second"
      Data.s "SecondWorldCollisionEntity"
      Data.s "SelectedFilePattern"
      Data.s "SelectedFontColor"
      Data.s "SelectedFontName"
      Data.s "SelectedFontSize"
      Data.s "SelectedFontStyle"
      Data.s "SelectElement"
      Data.s "SendFTPFile"
      Data.s "SendMail"
      Data.s "SendNetworkData"
      Data.s "SendNetworkString"
      Data.s "SerialPortError"
      Data.s "SerialPortID"
      Data.s "SerialPortTimeouts"
      Data.s "ServerID"
      Data.s "SetActiveGadget"
      Data.s "SetActiveGadget3D"
      Data.s "SetActiveWindow"
      Data.s "SetActiveWindow3D"
      Data.s "SetClipboardImage"
      Data.s "SetClipboardText"
      Data.s "SetCurrentDirectory"
      Data.s "SetDatabaseBlob"
      Data.s "SetDatabaseDouble"
      Data.s "SetDatabaseFloat"
      Data.s "SetDatabaseLong"
      Data.s "SetDatabaseNull"
      Data.s "SetDatabaseQuad"
      Data.s "SetDatabaseString"
      Data.s "SetDragCallback"
      Data.s "SetDropCallback"
      Data.s "SetEntityAnimationLength"
      Data.s "SetEntityAnimationTime"
      Data.s "SetEntityAnimationWeight"
      Data.s "SetEntityAttribute"
      Data.s "SetEntityCollisionFilter"
      Data.s "SetEntityMaterial"
      Data.s "SetEnvironmentVariable"
      Data.s "SetFileAttributes"
      Data.s "SetFileDate"
      Data.s "SetFrameRate"
      Data.s "SetFTPDirectory"
      Data.s "SetGadgetAttribute"
      Data.s "SetGadgetAttribute3D"
      Data.s "SetGadgetColor"
      Data.s "SetGadgetData"
      Data.s "SetGadgetData3D"
      Data.s "SetGadgetFont"
      Data.s "SetGadgetItemAttribute"
      Data.s "SetGadgetItemColor"
      Data.s "SetGadgetItemData"
      Data.s "SetGadgetItemData3D"
      Data.s "SetGadgetItemImage"
      Data.s "SetGadgetItemState"
      Data.s "SetGadgetItemState3D"
      Data.s "SetGadgetItemText"
      Data.s "SetGadgetItemText3D"
      Data.s "SetGadgetState"
      Data.s "SetGadgetState3D"
      Data.s "SetGadgetText"
      Data.s "SetGadgetText3D"
      Data.s "SetGUITheme3D"
      Data.s "SetImageFrame"
      Data.s "SetImageFrameDelay"
      Data.s "SetJointAttribute"
      Data.s "SetJSONArray"
      Data.s "SetJSONBoolean"
      Data.s "SetJSONDouble"
      Data.s "SetJSONFloat"
      Data.s "SetJSONInteger"
      Data.s "SetJSONNull"
      Data.s "SetJSONObject"
      Data.s "SetJSONQuad"
      Data.s "SetJSONString"
      Data.s "SetLightColor"
      Data.s "SetMailAttribute"
      Data.s "SetMailBody"
      Data.s "SetMaterialAttribute"
      Data.s "SetMaterialColor"
      Data.s "SetMenuItemState"
      Data.s "SetMenuItemText"
      Data.s "SetMenuTitleText"
      Data.s "SetMeshData"
      Data.s "SetMeshMaterial"
      Data.s "SetMusicPosition"
      Data.s "SetNodeAnimationKeyFramePosition"
      Data.s "SetNodeAnimationKeyFrameRotation"
      Data.s "SetNodeAnimationKeyFrameScale"
      Data.s "SetNodeAnimationLength"
      Data.s "SetNodeAnimationTime"
      Data.s "SetNodeAnimationWeight"
      Data.s "SetOrientation"
      Data.s "SetOrigin"
      Data.s "SetRenderQueue"
      Data.s "SetRuntimeDouble"
      Data.s "SetRuntimeInteger"
      Data.s "SetRuntimeString"
      Data.s "SetSerialPortStatus"
      Data.s "SetSoundFrequency"
      Data.s "SetSoundPosition"
      Data.s "SetTerrainTileHeightAtPoint"
      Data.s "SetTerrainTileLayerBlend"
      Data.s "SetToolBarButtonState"
      Data.s "SetupTerrains"
      Data.s "SetURLPart"
      Data.s "SetVehicleAttribute"
      Data.s "SetWindowCallback"
      Data.s "SetWindowColor"
      Data.s "SetWindowData"
      Data.s "SetWindowState"
      Data.s "SetWindowTitle"
      Data.s "SetWindowTitle3D"
      Data.s "SetXMLAttribute"
      Data.s "SetXMLEncoding"
      Data.s "SetXMLNodeName"
      Data.s "SetXMLNodeOffset"
      Data.s "SetXMLNodeText"
      Data.s "SetXMLStandalone"
      Data.s "ShortcutGadget"
      Data.s "ShowAssemblyViewer"
      Data.s "ShowCallstack"
      Data.s "ShowDebugOutput"
      Data.s "ShowGUI"
      Data.s "ShowLibraryViewer"
      Data.s "ShowMemoryViewer"
      Data.s "ShowProfiler"
      Data.s "ShowVariableViewer"
      Data.s "ShowWatchlist"
      Data.s "Sign"
      Data.s "SignalSemaphore"
      Data.s "Sin"
      Data.s "SinH"
      Data.s "SkewCoordinates"
      Data.s "SkyBox"
      Data.s "SkyDome"
      Data.s "SliderJoint"
      Data.s "SmartWindowRefresh"
      Data.s "SortArray"
      Data.s "SortList"
      Data.s "SortStructuredArray"
      Data.s "SortStructuredList"
      Data.s "SoundCone3D"
      Data.s "SoundID3D"
      Data.s "SoundLength"
      Data.s "SoundListenerLocate"
      Data.s "SoundPan"
      Data.s "SoundRange3D"
      Data.s "SoundStatus"
      Data.s "SoundVolume"
      Data.s "SoundVolume3D"
      Data.s "Space"
      Data.s "SpinGadget"
      Data.s "SpinGadget3D"
      Data.s "SplinePointX"
      Data.s "SplinePointY"
      Data.s "SplinePointZ"
      Data.s "SplineX"
      Data.s "SplineY"
      Data.s "SplineZ"
      Data.s "SplitList"
      Data.s "SplitterGadget"
      Data.s "SpotLightRange"
      Data.s "SpriteBlendingMode"
      Data.s "SpriteCollision"
      Data.s "SpriteDepth"
      Data.s "SpriteHeight"
      Data.s "SpriteID"
      Data.s "SpriteOutput"
      Data.s "SpritePixelCollision"
      Data.s "SpriteQuality"
      Data.s "SpriteWidth"
      Data.s "Sqr"
      Data.s "StartAESCipher"
      Data.s "StartDrawing"
      Data.s "StartEntityAnimation"
      Data.s "StartFingerprint"
      Data.s "StartNodeAnimation"
      Data.s "StartPrinting"
      Data.s "StartProfiler"
      Data.s "StartVectorDrawing"
      Data.s "StatusBarHeight"
      Data.s "StatusBarID"
      Data.s "StatusBarImage"
      Data.s "StatusBarProgress"
      Data.s "StatusBarText"
      Data.s "StickyWindow"
      Data.s "StopAudioCD"
      Data.s "StopDrawing"
      Data.s "StopEntityAnimation"
      Data.s "StopMovie"
      Data.s "StopMusic"
      Data.s "StopNodeAnimation"
      Data.s "StopPrinting"
      Data.s "StopProfiler"
      Data.s "StopSound"
      Data.s "StopSound3D"
      Data.s "StopVectorDrawing"
      Data.s "Str"
      Data.s "StrD"
      Data.s "StrF"
      Data.s "StringByteLength"
      Data.s "StringField"
      Data.s "StringFingerprint"
      Data.s "StringGadget"
      Data.s "StringGadget3D"
      Data.s "StrokePath"
      Data.s "StrU"
      Data.s "SubMeshCount"
      Data.s "Sun"
      Data.s "SwapElements"
      Data.s "SwitchCamera"
      Data.s "SysTrayIconToolTip"
      Data.s "Tan"
      Data.s "Bool"
      Data.s "Defined"
      Data.s "OffsetOf"
      Data.s "SizeOf"
      Data.s "TanH"
      Data.s "TerrainHeight"
      Data.s "TerrainLocate"
      Data.s "TerrainMousePick"
      Data.s "TerrainRenderMode"
      Data.s "TerrainTileHeightAtPosition"
      Data.s "TerrainTileLayerMapSize"
      Data.s "TerrainTilePointX"
      Data.s "TerrainTilePointY"
      Data.s "TerrainTileSize"
      Data.s "Text3DAlignment"
      Data.s "Text3DCaption"
      Data.s "Text3DColor"
      Data.s "Text3DID"
      Data.s "Text3DX"
      Data.s "Text3DY"
      Data.s "Text3DZ"
      Data.s "TextGadget"
      Data.s "TextGadget3D"
      Data.s "TextHeight"
      Data.s "TextureHeight"
      Data.s "TextureID"
      Data.s "TextureOutput"
      Data.s "TextureWidth"
      Data.s "TextWidth"
      Data.s "ThreadID"
      Data.s "ThreadPriority"
      Data.s "ToolBarButtonText"
      Data.s "ToolBarHeight"
      Data.s "ToolBarID"
      Data.s "ToolBarImageButton"
      Data.s "ToolBarSeparator"
      Data.s "ToolBarStandardButton"
      Data.s "ToolBarToolTip"
      Data.s "TrackBarGadget"
      Data.s "TransformMesh"
      Data.s "TransformSprite"
      Data.s "TranslateCoordinates"
      Data.s "TransparentSpriteColor"
      Data.s "TreeGadget"
      Data.s "TreeGadget3D"
      Data.s "Trim"
      Data.s "TruncateFile"
      Data.s "TryLockMutex"
      Data.s "TrySemaphore"
      Data.s "TypeOf"
      Data.s "Subsystem"
      Data.s "UCase"
      Data.s "UnbindEvent"
      Data.s "UnbindGadgetEvent"
      Data.s "UnbindMenuEvent"
      Data.s "UnclipOutput"
      Data.s "UncompressMemory"
      Data.s "UncompressPackFile"
      Data.s "UncompressPackMemory"
      Data.s "UnescapeString"
      Data.s "UnlockMutex"
      Data.s "UpdateEntityAnimation"
      Data.s "UpdateMesh"
      Data.s "UpdateMeshBoundingBox"
      Data.s "UpdateRenderTexture"
      Data.s "UpdateSplinePoint"
      Data.s "UpdateTerrain"
      Data.s "UpdateTerrainTileLayerBlend"
      Data.s "UpdateVertexPoseReference"
      Data.s "URLDecoder"
      Data.s "URLEncoder"
      Data.s "UseAudioCD"
      Data.s "UseBriefLZPacker"
      Data.s "UseCRC32Fingerprint"
      Data.s "UseFLACSoundDecoder"
      Data.s "UseGadgetList"
      Data.s "UseGIFImageDecoder"
      Data.s "UseJCALG1Packer"
      Data.s "UseJPEG2000ImageDecoder"
      Data.s "UseJPEG2000ImageEncoder"
      Data.s "UseJPEGImageDecoder"
      Data.s "UseJPEGImageEncoder"
      Data.s "UseLZMAPacker"
      Data.s "UseMD5Fingerprint"
      Data.s "UseODBCDatabase"
      Data.s "UseOGGSoundDecoder"
      Data.s "UsePNGImageDecoder"
      Data.s "UsePNGImageEncoder"
      Data.s "UsePostgreSQLDatabase"
      Data.s "UserName"
      Data.s "UseSHA1Fingerprint"
      Data.s "UseSHA2Fingerprint"
      Data.s "UseSHA3Fingerprint"
      Data.s "UseSQLiteDatabase"
      Data.s "UseTARPacker"
      Data.s "UseTGAImageDecoder"
      Data.s "UseTIFFImageDecoder"
      Data.s "UseZipPacker"
      Data.s "UTF8"
      Data.s "Val"
      Data.s "ValD"
      Data.s "ValF"
      Data.s "VectorFont"
      Data.s "VectorOutputHeight"
      Data.s "VectorOutputWidth"
      Data.s "VectorParagraphHeight"
      Data.s "VectorResolutionX"
      Data.s "VectorResolutionY"
      Data.s "VectorSourceCircularGradient"
      Data.s "VectorSourceColor"
      Data.s "VectorSourceGradientColor"
      Data.s "VectorSourceImage"
      Data.s "VectorSourceLinearGradient"
      Data.s "VectorTextHeight"
      Data.s "VectorTextWidth"
      Data.s "VectorUnit"
      Data.s "VertexPoseReferenceCount"
      Data.s "WaitFastCGIRequest"
      Data.s "WaitProgram"
      Data.s "WaitSemaphore"
      Data.s "WaitThread"
      Data.s "WaitWindowEvent"
      Data.s "WaterColor"
      Data.s "WaterHeight"
      Data.s "WebGadget"
      Data.s "WindowBounds"
      Data.s "WindowEvent"
      Data.s "WindowEvent3D"
      Data.s "WindowHeight"
      Data.s "WindowHeight3D"
      Data.s "WindowID"
      Data.s "WindowID3D"
      Data.s "WindowMouseX"
      Data.s "WindowMouseY"
      Data.s "WindowOutput"
      Data.s "WindowVectorOutput"
      Data.s "WindowWidth"
      Data.s "WindowWidth3D"
      Data.s "WindowX"
      Data.s "WindowX3D"
      Data.s "WindowY"
      Data.s "WindowY3D"
      Data.s "WorldCollisionAppliedImpulse"
      Data.s "WorldCollisionContact"
      Data.s "WorldCollisionNormal"
      Data.s "WorldDebug"
      Data.s "WorldGravity"
      Data.s "WorldShadows"
      Data.s "WriteAsciiCharacter"
      Data.s "WriteByte"
      Data.s "WriteCGIData"
      Data.s "WriteCGIFile"
      Data.s "WriteCGIHeader"
      Data.s "WriteCGIString"
      Data.s "WriteCGIStringN"
      Data.s "WriteCharacter"
      Data.s "WriteConsoleData"
      Data.s "WriteData"
      Data.s "WriteDouble"
      Data.s "WriteFloat"
      Data.s "WriteInteger"
      Data.s "WriteLong"
      Data.s "WritePreferenceDouble"
      Data.s "WritePreferenceFloat"
      Data.s "WritePreferenceInteger"
      Data.s "WritePreferenceLong"
      Data.s "WritePreferenceQuad"
      Data.s "WritePreferenceString"
      Data.s "WriteProgramData"
      Data.s "WriteProgramString"
      Data.s "WriteProgramStringN"
      Data.s "WriteQuad"
      Data.s "WriteSerialPortData"
      Data.s "WriteSerialPortString"
      Data.s "WriteString"
      Data.s "WriteStringFormat"
      Data.s "WriteStringN"
      Data.s "WriteUnicodeCharacter"
      Data.s "WriteWord"
      Data.s "XMLAttributeName"
      Data.s "XMLAttributeValue"
      Data.s "XMLChildCount"
      Data.s "XMLError"
      Data.s "XMLErrorLine"
      Data.s "XMLErrorPosition"
      Data.s "XMLNodeFromID"
      Data.s "XMLNodeFromPath"
      Data.s "XMLNodePath"
      Data.s "XMLNodeType"
      Data.s "XMLStatus"
      Data.s "Yaw"
      Data.s "Year"
      Data.s "ZoomSprite"
      MotCle:
      Data.s "And","Break", "CompilerI","DataSection","Debug","Else","ElseIf","End","EndIf","EndMacro", "EndProcedure","For","ForEach",
             "If","Macro","Module","Next","Procedure","Repeat","Select","Structure","To","Until",
             "While",""
      DebutPliage:
      Data.s "Macro","Procedure","If",""
      apres:
      Data.s "Case"
      Data.i 1
      Data.s "CompilerCase"
      Data.i 1
      Data.s "CompilerDefault"
      Data.i 1
      Data.s "CompilerElse"
      Data.i 1
      Data.s "CompilerElseIf"
      Data.i 1
      Data.s "CompilerEndIf"
      Data.i 0
      Data.s "CompilerEndSelect"
      Data.i 0
      Data.s "CompilerIf"
      Data.i 2
      Data.s "DataSection"
      Data.i 1
      Data.s "DeclareModule"
      Data.i 1
      Data.s "Default"
      Data.i 1
      Data.s "Else"
      Data.i 1
      Data.s "ElseIf"
      Data.i 1
      Data.s "EndDataSection"
      Data.i 0
      Data.s "EndDeclareModule"
      Data.i 0
      Data.s "EndEnumeration"
      Data.i 0
      Data.s "Endif"
      Data.i 0
      Data.s "EndImport"
      Data.i 0
      Data.s "EndInterface"
      Data.i 0
      Data.s "EndMacro"
      Data.i 0
      Data.s "EndModule"
      Data.i 0
      Data.s "EndProcedure"
      Data.i 0
      Data.s "EndSelect"
      Data.i 0
      Data.s "EnsTructure"
      Data.i 0
      Data.s "EndStructureUnion"
      Data.i 0
      Data.s "EndWith"
      Data.i 0
      Data.s "Enumeration"
      Data.i 1
      Data.s "EnumerationBinary"
      Data.i 1
      Data.s "For"
      Data.i 1
      Data.s "ForEach"
      Data.i 1
      Data.s "ForEver"
      Data.i 0
      Data.s "If"
      Data.i 1
      Data.s "Import"
      Data.i 1
      Data.s "ImportC"
      Data.i 1
      Data.s "Interface"
      Data.i 1
      Data.s "Macro"
      Data.i 1
      Data.s "Module"
      Data.i 1
      Data.s "Next"
      Data.i 0
      Data.s "Procedure"
      Data.i 1
      Data.s "ProcedureC"
      Data.i 1
      Data.s "ProcedureCDLL"
      Data.i 1
      Data.s "ProcedureDLL"
      Data.i 1
      Data.s "Repeat"
      Data.i 1
      Data.s "Select"
      Data.i 2
      Data.s "Structure"
      Data.i 1
      Data.s "StructureUnion"
      Data.i 1
      Data.s "Until"
      Data.i 0
      Data.s "Wend"
      Data.i 0
      Data.s "While"
      Data.i 1
      Data.s "With"
      Data.i 1
      Data.s ""
      Data.i 0
      
      avant:
      Data.s "Case"
      Data.i -1
      Data.s "CompilerCase"
      Data.i -1
      Data.s "CompilerDefault"
      Data.i -1
      Data.s "CompilerElse"
      Data.i -1
      Data.s "CompilerElseIf"
      Data.i -1
      Data.s "CompilerEndIf"
      Data.i -1
      Data.s "CompilerEndSelect"
      Data.i -2
      Data.s "CompilerIf"
      Data.i 0
      Data.s "DataSection"
      Data.i 0
      Data.s "DeclareModule"
      Data.i 0
      Data.s "Default"
      Data.i -1
      Data.s "Else"
      Data.i -1
      Data.s "ElseIf"
      Data.i -1
      Data.s "EndDataSection"
      Data.i -1
      Data.s "EndDeclareModule"
      Data.i -1
      Data.s "EndEnumeration"
      Data.i -1
      Data.s "Endif"
      Data.i -1
      Data.s "EndImport"
      Data.i -1
      Data.s "EndInterface"
      Data.i -1
      Data.s "EndMacro"
      Data.i -1
      Data.s "EndModule"
      Data.i -1
      Data.s "EndProcedure"
      Data.i -1
      Data.s "EndSelect"
      Data.i -2
      Data.s "EndStructure"
      Data.i -1
      Data.s "EndStructureUnion"
      Data.i -1
      Data.s "EndWith"
      Data.i -1
      Data.s "Enumeration"
      Data.i 0
      Data.s "EnumerationBinary"
      Data.i 0
      Data.s "For"
      Data.i 0
      Data.s "ForEach"
      Data.i 0
      Data.s "ForEver"
      Data.i -1
      Data.s "If"
      Data.i 0
      Data.s "Import"
      Data.i 0
      Data.s "ImportC"
      Data.i 0
      Data.s "Interface"
      Data.i 0
      Data.s "Macro"
      Data.i 0
      Data.s "Module"
      Data.i 0
      Data.s "Next"
      Data.i -1
      Data.s "Procedure"
      Data.i 0
      Data.s "ProcedureC"
      Data.i 0
      Data.s "ProcedureCDLL"
      Data.i 0
      Data.s "ProcedureDLL"
      Data.i 0
      Data.s "Repeat"
      Data.i 0
      Data.s "Select"
      Data.i 0
      Data.s "Structure"
      Data.i 0
      Data.s "StructureUnion"
      Data.i 0
      Data.s "Until"
      Data.i -1
      Data.s "Wend"
      Data.i -1
      Data.s "While"
      Data.i 0
      Data.s "With"
      Data.i 0
      Data.s ""
      Data.i 0
      
      FinPliage:
      Data.s "EndMacro","EndProcedure",""
    EndDataSection
  EndProcedure
  
  Procedure use()
    ;Utilisé pour la sélection lexer. Retourner une structure info lexer
    ProcedureReturn ?ret
    DataSection
      ret:
      Data.i @PBCallback(),@PBinit()
    EndDataSection
  EndProcedure
  
  
EndModule

;-
;-##################################################################
;-
;- Code Demo
CompilerIf #PB_Compiler_IsMainFile
  
  Define hWnd
  Define Texte.s
  Define event
  Define gadget
  
  scintilla::init()
  
  hWnd = OpenWindow(0,#PB_Ignore,#PB_Ignore,640,480,"Ma fenêtre",#PB_Window_SystemMenu|#PB_Window_SizeGadget)
  RemoveKeyboardShortcut(0,#PB_Shortcut_Tab)
  RemoveKeyboardShortcut(0,#PB_Shortcut_Tab|#PB_Shortcut_Shift)
  
  gadget= scintilla::gadget(#PB_Any,0,0,640,480,PB_Lexer::use())
  
  Texte.s = "Procedure test()"    + #LF$
  Texte.s + "For i = 1 To ArraySize(Machin())" + #LF$
  Texte.s + "Debug i "       + #LF$
  Texte.s + "Next i" + #LF$
  Texte.s + "End " + #LF$
  Texte.s + "Debug " + #DQUOTE$+"Bonjour le monde"+#DQUOTE$ + #LF$
  Texte.s + "EndProcedure" +#LF$
  
  Scintilla::SetText(gadget,Texte)
  
  
  Repeat
    event = WaitWindowEvent()
    
    If event = #PB_Event_SizeWindow
      ResizeGadget(gadget,#PB_Ignore,#PB_Ignore,WindowWidth(0),WindowHeight(0))
    EndIf
    
  Until event = #PB_Event_CloseWindow
  
CompilerEndIf


Re: Module Scintilla

Publié : ven. 23/juin/2017 10:06
par TazNormand
Micoute, j'ai fusionné tes 3 topics, c'est quand même plus simple à lire non ?

Re: Module Scintilla

Publié : ven. 23/juin/2017 10:21
par Zorro
@micoute : pour repondre a ta question , on ne peut pas utiliser Scintilla avec une gadget editeur (du moins en principe )

Purebasic te permet d'utiliser en lieu et place un Gadget Scintilla editeur avec la fonction : Resultat = ScintillaGadget(#Scintilla, X, Y, Largeur, Hauteur, @Callback())

l'editeur, enfin , le Gadget Editeur de Purebasic est compatible avec le format RTF
donc soit tu codes en RTF pour les couleurs etc ...

soit tu utilises la librairie Highlightsyntax qui traine je sais plus ou sur le forum anglais (et peut etre meme deja dans le dossier compiler de Purebasic )
cette librairie te permettra de colorer le texte dans un editeur Gadget

ensuite, il existe des procedures diverses pour deplacer le curseur, recuperer une ligne , ajouter des numero de lignes etc ....

il y a 2 ecoles

1- basé sur l'editeur Gadget de Purebasic
soit en utilisant le RTF
soit en utilisant les librairies qui trainent sur les forums

2- basé sur le Gadget Scintilla
en utilisant la librairie Scintilla ... pleins d'exemples sur les forums (Falsam a fait un tuto la dessus)
sur le forum anglais il y a aussi la libraire Go-scintilla (que j'ai eu le tord d'utiliser pour mon EPB)
mais pour des petits projet ça fait le job :)

il vaux mieux faire comme GPI et les tutos de Falsam, c'est a dire utiliser directement les fonctions de la librairie Scintilla proposé dans Purebasic
ne pas utiliser une librairie toute faite , car si on ne comprends pas le fonctionement interne, on ne peut pas resoudre des problemes de lenteur

Merci pour ce code de Gpi, que je ne connaissais pas , il me servira de base pour une nouvelle version de EPB entierement refait a zero


de plus :

tu peux effectivement utiliser des Datas pour avoir la liste des mots clef a colorer comme le fait GPI
avantage , on peut ainsi personaliser son editeur pour un langage precis (LOGO,LUA,Purebasic etc ... )

mais ont peut aussi pour le Purebasic , demander au compilateur de nous donner la liste des Fonctions de Purebasic

avec ce code :
il te faut d’abord creer une Liste Chainée "TheFunctions() "
et cette procedure va remplir la liste Chainée avec les fonctions de Purebasic ... (il y aura meme l'aide en ligne avec de memoire ... la fameuse petite ligne qui s'ecrit en bas de l'editeur lorsque tu cliques sur le nom d'une fonction)

Code : Tout sélectionner

Procedure list_fonction(*bidon) 
	; Cette Procedure recupere la liste des fonctions donné par le compilateur
	; cette list sert pour la coloration des nom de fonction de purebasic, et la complétion
	
	If chemin_compiler_32$<>""
		Define.i compiler = RunProgram(chemin_compiler_32$,lang$+ " /STANDBY ", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write | #PB_Program_Hide)
	Else
		MessageRequester("Erreur " , "Il faut definir les chemins dans menu" +#LF$+"Projet/Parametres" )
	EndIf
	If compiler
		If IsProgram(compiler)
			Repeat
			Until ReadProgramString(compiler) = "READY"
			WriteProgramStringN(compiler, "FUNCTIONLIST")
			j = Val(ReadProgramString(compiler))
			For i = 1 To j
				AddElement(TheFunctions())
				TheFunctions() = ReadProgramString(compiler)
			Next
			WriteProgramStringN(compiler, "END")
			CloseProgram(compiler)
		EndIf
	EndIf
	;
EndProcedure

Re: Module Scintilla

Publié : ven. 23/juin/2017 10:36
par Marc56
Ne pas oublier quand on distribue une appli utilisant Scintilla de mettre la ou les DLL (une pour x86 une pour x64)
Elles sont accessibles directement en dev, mais l'utilisateur final ne les as pas forcément. :!:

Pour pouvoir avoir les deux et charger la bonne selon la version de Windows,
je met les deux dans mon package
et je les renomme au préalable car les x86 et x64 ont le même nom

Ce petit bout de code me permet de charger la bonne version
et ça remplace aussi l'absence de message par défaut si aucune n'est là.
On peut remplacer le End par un téléchargement au besoin.

Code : Tout sélectionner

Procedure Check_DLL()
     Protected  CPU_Type.s = GetEnvironmentVariable("PROCESSOR_ARCHITECTURE")
     If CPU_Type = "AMD64"
          If Not InitScintilla("Scintilla_x64.dll")
               MessageRequester("Erreur", "La DLL Scintilla_x64.dll absente"  + #CRLF$ + CPU_Type)
               End
          EndIf    
     ElseIf CPU_Type = "x86"
          If Not InitScintilla("Scintilla_x86.dll")
               MessageRequester("Erreur", "La DLL Scintilla_x86.dll absente"  + #CRLF$ + CPU_Type)
               End
          EndIf  
     Else
          MessageRequester("Erreur", "Type de CPU Inconnu")
     EndIf
EndProcedure
:)

Re: Module Scintilla

Publié : ven. 23/juin/2017 10:59
par Zorro
bah , moi je ne fourni que la Version 32 et je code en 32 :) :lol:

Re: Module Scintilla

Publié : ven. 23/juin/2017 12:45
par Micoute
TazNormand a écrit :Micoute, j'ai fusionné tes 3 topics, c'est quand même plus simple à lire non ?
Le problème est que le fichier est trop gros et que j'ai été contraint de le fractionner, en outre il comporte quelques petites anomalies, par exemple j'ai omis involontairement quelques mots-clés, mais je le peaufine pour le rendre compatible avec l'éditeur de PB ou EPB, car j'aime bien travailler avec les deux.

Re: Module Scintilla

Publié : ven. 23/juin/2017 13:05
par falsam
@Micoute : Tu te lances dans un éditeur PureBasic ?

Re: Module Scintilla

Publié : sam. 24/juin/2017 14:38
par Micoute
Absolument pas, je veux juste faire une sauvegarde de mes codes préférés et j'aimerais qu'ils ressemblent à l'affichage que j'ai avec l'IDE de PB ou d'EPB, pour l'instant j'ai de bons résultats, mais il y a du boulot, car le module à été originalement écrit pour LUA et ce n'est pas la même syntaxe, mais ça m'occupe.

Re: Module Scintilla

Publié : lun. 26/juin/2017 13:29
par falsam
Si le but est de voir du code PureBasic alors tu peux utiliser la DLL de coloration syntaxique SyntaxHilighting.dll. Cette DLL se trouve dans le dossier d'installation de PureBasic.

A initialiser par exemple en même temps que le gadget Scintilla de cette manière

Code : Tout sélectionner

If InitScintilla() And OpenLibrary(0, #PB_Compiler_Home + "SDK\Syntax Highlighting\SyntaxHilighting.dll")
Je te propose ce code pour la mise en oeuvre.

Ne m'occupant pas de le façon d'ouvrir un fichier soit manuellement soit en passant le nom du fichier en paramètre, tu peux tester ce code avec un copier/coller d'un de tes codes.

Code : Tout sélectionner

EnableExplicit

Enumeration Window
  #mf
EndEnumeration

Enumeration Gadget
  #mfEditor
EndEnumeration

; Color values returned in the Dll callback
Enumeration ColorValue
  #SYNTAX_Text
  #SYNTAX_Keyword  
  #SYNTAX_Comment
  #SYNTAX_Constant
  #SYNTAX_String
  #SYNTAX_Function
  #SYNTAX_Asm
  #SYNTAX_Operator
  #SYNTAX_Structure
  #SYNTAX_Number
  #SYNTAX_Pointer
  #SYNTAX_Separator
  #SYNTAX_Label  
  #SYNTAX_Module
EndEnumeration

; Define prototype for the dll function
Prototype SyntaxHighlight(*Buffer, Length, *Callback, Asm)
Global SyntaxHighlight.SyntaxHighlight

; Font
Global *FontName = AllocateMemory(StringByteLength("Courier New", #PB_Ascii) + 1)

; Indentation
Global SciPos.l, SciLine.l, SciCol.l, SciIndent.l

; Summary
Declare Start()
Declare ScintillaColorCallback(*Position, Length, Color)
Declare ScintillaEventCallback(Gadget, *scinotify.SCNotification)
Declare WindowResize()
Declare Exit()

Start()

Procedure Start()
  If InitScintilla() And OpenLibrary(0, #PB_Compiler_Home + "SDK\Syntax Highlighting\SyntaxHilighting.dll")
    
    ; Get the syntax parser function
    SyntaxHighlight = GetFunction(0, "SyntaxHighlight")
    
    ; Create window and gadget
    OpenWindow(#mf, 0, 0, 800, 600, "PureBasic SyntaxHighlight", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget)
    ScintillaGadget(#mfEditor, 0, 0, 800, 580, @ScintillaEventCallback())
        
    ; Disables the TAB key and special characters
    RemoveKeyboardShortcut(#mf, #PB_Shortcut_Tab)
    AddKeyboardShortcut(#mf, #PB_Shortcut_Control+#PB_Shortcut_B, 0)
    AddKeyboardShortcut(#mf, #PB_Shortcut_Control+#PB_Shortcut_G, 0)
    AddKeyboardShortcut(#mf, #PB_Shortcut_Control+#PB_Shortcut_E, 0)
    AddKeyboardShortcut(#mf, #PB_Shortcut_Control+#PB_Shortcut_R, 0)
    AddKeyboardShortcut(#mf, #PB_Shortcut_Control+#PB_Shortcut_O, 0)
    AddKeyboardShortcut(#mf, #PB_Shortcut_Control+#PB_Shortcut_P, 0)
    AddKeyboardShortcut(#mf, #PB_Shortcut_Control+#PB_Shortcut_Q, 0)
    AddKeyboardShortcut(#mf, #PB_Shortcut_Control+#PB_Shortcut_S, 0)
    AddKeyboardShortcut(#mf, #PB_Shortcut_Control+#PB_Shortcut_F, 0)
    AddKeyboardShortcut(#mf, #PB_Shortcut_Control+#PB_Shortcut_H, 0)
    AddKeyboardShortcut(#mf, #PB_Shortcut_Control+#PB_Shortcut_K, 0)
    AddKeyboardShortcut(#mf, #PB_Shortcut_Control+#PB_Shortcut_W, 0)  
    AddKeyboardShortcut(#mf, #PB_Shortcut_Control+#PB_Shortcut_N, 0)   
    
    ; Important: tell the gadget to send the #SCN_STYLENEEDED notification to the callback if coloring is needed
    ScintillaSendMessage(#mfEditor, #SCI_SETLEXER, #SCLEX_CONTAINER)
    
    ; Enables line numbers
    ScintillaSendMessage(#mfEditor, #SCI_SETMARGINTYPEN, 0, #SC_MARGIN_NUMBER) 
    ScintillaSendMessage(#mfEditor, #SCI_SETMARGINWIDTHN, 0, 60)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETBACK, #STYLE_LINENUMBER, RGB(169, 169, 169))
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETFORE, #STYLE_LINENUMBER, RGB(250, 250, 210))   
    
    ; Enables and sets the color of the edit line
    ScintillaSendMessage(#mfEditor, #SCI_SETCARETLINEVISIBLE, #True)
    ScintillaSendMessage(#mfEditor, #SCI_SETCARETLINEBACK, RGB(255, 228, 181))
    
    ; Set font    
    If *FontName
      PokeS(*FontName, "Lucida Console", -1, #PB_Ascii)
      ScintillaSendMessage(#mfEditor, #SCI_STYLESETFONT, #STYLE_DEFAULT, *FontName)    
      FreeMemory(*FontName)
    EndIf  
    
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETSIZE, #STYLE_DEFAULT, 12) 
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETBACK, #SCI_STYLESETFORE, 0)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETBACK, #STYLE_DEFAULT, $DFFFFF)
    ScintillaSendMessage(#mfEditor, #SCI_STYLECLEARALL)
    
    ; Disables and replaces the tab key with spaces 
    ScintillaSendMessage(#mfEditor, #SCI_SETUSETABS, #False)
    
    ; Number of spaces for a tab
    ScintillaSendMessage(#mfEditor, #SCI_SETINDENT, 4)
    
    ; Set Foreground individual colors
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETFORE, #SYNTAX_Text, 0)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETFORE, #SYNTAX_Keyword, $666600)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETFORE, #SYNTAX_Comment, $AAAA00)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETFORE, #SYNTAX_Constant, $724B92)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETFORE, #SYNTAX_String, $FF8000)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETFORE, #SYNTAX_Function, $666600)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETFORE, #SYNTAX_Asm, $DFFFFF)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETFORE, #SYNTAX_Operator, 0)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETFORE, #SYNTAX_Structure, 0)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETFORE, #SYNTAX_Number, 0)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETFORE, #SYNTAX_Pointer, 0)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETFORE, #SYNTAX_Separator, 0)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETFORE, #SYNTAX_Label, 0)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETFORE, #SYNTAX_Module, 0)
    ScintillaSendMessage(#mfEditor, #SCI_STYLESETBOLD, #SYNTAX_Keyword, #True)
    
    ; Triggers
    BindEvent(#PB_Event_SizeWindow, @WindowResize())
    BindEvent(#PB_Event_CloseWindow, @Exit())
    
    Repeat : WaitWindowEvent(10) : ForEver
  Else
    MessageRequester("Error", "Cannot load scintilla or parser dll")
  EndIf
EndProcedure

; Callback for the syntax parser
Procedure ScintillaColorCallback(*Position, Length, Color)
  ScintillaSendMessage(#mfEditor, #SCI_SETSTYLING, Length, Color)
EndProcedure


; Callback for scintilla events
Procedure ScintillaEventCallback(Gadget, *scinotify.SCNotification)
  Protected LastStyled, Range.TextRange
  
  ; This event indicates that new coloring is needed. 
  ; The #SCI_GETENDSTYLED message And *scinotify\position indicate the range To color
  Select *scinotify\nmhdr\code
    Case #SCN_STYLENEEDED
      
      ; Calculate the range to color
      ; Always start coloring at the line start 
      LastStyled = ScintillaSendMessage(Gadget, #SCI_GETENDSTYLED)
      Range\chrg\cpMin = ScintillaSendMessage(Gadget, #SCI_POSITIONFROMLINE, ScintillaSendMessage(Gadget, #SCI_LINEFROMPOSITION, LastStyled))
      Range\chrg\cpMax = *scinotify\position
      Range\lpstrText = AllocateMemory(Range\chrg\cpMax - Range\chrg\cpMin + 1)
      
      
      If Range\lpstrText
        
        ; Retrieve the text range
        ScintillaSendMessage(Gadget, #SCI_GETTEXTRANGE, 0, @Range)   
        
        ; Start coloring
        ScintillaSendMessage(Gadget, #SCI_STARTSTYLING, Range\chrg\cpMin, $FF)   
        
        ; Call the parser function in the dll
        ; The callback above will apply the colors to the returned tokens      
        SyntaxHighlight(Range\lpstrText, Range\chrg\cpMax - Range\chrg\cpMin, @ScintillaColorCallback(), #False)      
        
        FreeMemory(Range\lpstrText)
       
      EndIf
      
    Case #SCN_CHARADDED
      
      ; Indent when pressing the enter key ?
      If *scinotify\ch = 13
             
        ; Insert new line 
        ScintillaSendMessage(Gadget, #SCI_SETLINEINDENTATION, SciLIne+1, SciIndent)        
        If SciIndent=0 
          SciPos = SciPos + Len(#CRLF$)
        EndIf
        
        ; Cursor set position 
        ScintillaSendMessage(Gadget, #SCI_GOTOPOS, SciPos+SciIndent)
      EndIf
  EndSelect  
  
  ; Where is the cursor ?
  SciPos = ScintillaSendMessage(gadget, #SCI_GETCURRENTPOS)             ;Current position
  SciLine = ScintillaSendMessage(Gadget, #SCI_LINEFROMPOSITION, SciPos) ;Curent line
  SciCol = ScintillaSendMessage(Gadget, #SCI_GETCOLUMN, SciPos)         ;Current col
  
  ; Set up new indentation
  SciIndent = ScintillaSendMessage(Gadget, #SCI_GETLINEINDENTATION, SciLine)
EndProcedure

Procedure WindowResize()
  ResizeGadget(#mfEditor, 0, 0, WindowWidth(#mf), WindowHeight(#mf) - 20)
EndProcedure

Procedure Exit()
  End  
EndProcedure

Re: Module Scintilla

Publié : lun. 26/juin/2017 14:46
par Micoute
Grand merci falsam pour ce partage, ce code est merveilleux.