Page 1 sur 1

WebBase HTML CSS Javascript

Publié : ven. 30/janv./2026 0:14
par falsam
WebBase est une énumération de fonctionnalités HTML/CSS/Javascript en cours de développement.

➡️ Objectif :
Avoir les éléments nécessaires pour la production d'une application d'édition de code HTML/CSS/Javascript.

➡️ Fonctionnalités :

V 0.00 😁
Mise en place du gadget Scintilla
Propriété du gadget Scintilla
Scintilla callback pour gérer les évènements Scintilla

V 0.01
Indentation.

V 0.02
Auto-complétions.

➡️ Code de mise en place du gadget Scintilla associé à un callback évènementiel. Les commentaires sont dans le code.

Code : Tout sélectionner

; WebBase - Trame d'un éditeur HTML/JavaScript
; Version 0.00

; PureBasic 6.30 (x64)
; Mise à jour du 29 Janvier 2026
; Pas d'API & Scintilla natif

; Fonctionnalités
; ===============
; Mise en place du gadget Scintilla
; Propriété du gadget Scintilla
; Scintilla callback pour gérer les évenements Scintilla

EnableExplicit

Enumeration window
  #app
EndEnumeration

Enumeration gadgets
  #editor
EndEnumeration

Enumeration styles
EndEnumeration

Define version.s = "0.00"

; Largeur de la marge de numérotation des lignes
Global scMarginSizeDefault = 50

; Couleurs
Global scFrontColor = RGB(105,105, 105) 
Global scBackColor  = RGB(250, 240, 230)
Global scCurrentLineColor = RGB(255, 228, 181)

; Police de caractére
Global scFont.s = "Lucida Console"
Global scFontSize = 12

;- Sommaire des procédures

; Définir les paramétres du gadget scintilla
Declare ScintillaProperties(gadget)

; Callback évenementielle du gadget scintilla 
Declare ScintillaCallBack(gadget, *scn.scNotification)

;- Fenetre de l'application
OpenWindow(#app, 0, 0, 800, 600, "WebBase " + version , #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

; Neutraliser la touche TAB et les caractéres spéciaux
RemoveKeyboardShortcut(#app, #PB_Shortcut_Tab)

AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_B, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_G, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_E, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_R, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_O, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_P, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_Q, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_S, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_F, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_H, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_K, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_W, 0)  
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_N, 0)

; Editeur Scintilla gadget associé à un callback 
ScintillaGadget(#editor, 10, 10, 780, 580, @scintillaCallBack())

;- Parametres Scintilla (Couleur, font, numerotation, style,  etc ...)
ScintillaProperties(#editor)

; Positionner le curseur de saisie dans l'éditeur
SetActiveGadget(#editor)

;- Boucle évenementielle
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow

;-
;- Liste des procédures

; Parametres du gadget scintilla
Procedure ScintillaProperties(gadget)
  ;- 1 Style par défaut
  ; Couleur et police de caractéres
  ScintillaSendMessage(gadget, #SCI_STYLESETFORE, #STYLE_DEFAULT, scFrontColor)
  ScintillaSendMessage(gadget, #SCI_STYLESETBACK, #STYLE_DEFAULT, scBackColor)
  
  ScintillaSendMessage(gadget, #SCI_STYLESETFONT,#STYLE_DEFAULT, @scFont) 
  ScintillaSendMessage(gadget, #SCI_STYLESETSIZE, #STYLE_DEFAULT, scFontSize)
  
  ;- 2 Propager vers tous les styles
  ScintillaSendMessage(gadget, #SCI_STYLECLEARALL)
  
  ;- 3 Définir des styles spécifiques
  ; Activation et couleur de la ligne en cours d'édition
  ScintillaSendMessage(gadget, #SCI_SETCARETLINEVISIBLE, #True)
  ScintillaSendMessage(gadget, #SCI_SETCARETLINEBACK, scCurrentLineColor)
  
  ; Les tabulations sont remplacées par des espaces 
  ScintillaSendMessage(gadget, #SCI_SETUSETABS, #False)
  
  ; Nombre d'espaces pour une tabulation
  ScintillaSendMessage(gadget, #SCI_SETINDENT, 4)
  
  ; Création de la colonne de numérotation des lignes
  ScintillaSendMessage(gadget, #SCI_SETMARGINTYPEN, 1, #SC_MARGIN_NUMBER) 
  ScintillaSendMessage(gadget, #SCI_SETMARGINWIDTHN, 1, scMarginSizeDefault)
  
  ; Création de la colonne de pliages/dépliage
  ScintillaSendMessage(gadget, #SCI_SETMARGINMASKN, 2, #SC_MASK_FOLDERS)
  ScintillaSendMessage(gadget, #SCI_SETMARGINWIDTHN, 2, 20)
  ScintillaSendMessage(gadget, #SCI_SETMARGINSENSITIVEN, 2, #True)
  
EndProcedure

;-

; Callback evenementielle du gadget scintilla
Procedure scintillaCallBack(gadget, *scn.scNotification)

  ; Analyser les evenement scintilla
  Select *scn\nmhdr\code
    Case #SCN_CHARADDED 
      Debug "#SCN_CHARADDED - Indentation et autocomplétion"
      
    Case #SCN_UPDATEUI  
      Debug "#SCN_UPDATEUI - Coloration et systeme de folding"
      
    Case #SCN_MARGINCLICK
      ; Clique sur la deuxiéme colonne (folding)
      If *scn\margin = 2
        Debug "#SCN_MARGINCLICK - pliage/dépliage du code"
      EndIf
      
  EndSelect     
EndProcedure

Re: WebBase HTML CSS Javascript

Publié : ven. 30/janv./2026 0:39
par falsam
Version 0.01 - Je vous propose maintenant de nous occuper de l'indentation.

➡️ Objectif :
Vous pressez la touche tab une ou plusieurs fois.
Vous pressez la touche entrée pour aller à la ligne suivante.
Le curseur de saisie se placera au même niveau que la position du curseur de la ligne précédente.

L'indentation est gérée dans le callback dans l'évènement #SCN_CHARADDED

➡️ Code incluant la mise en place de l'indentation. Commentaires dans le code.

Code : Tout sélectionner

; WebBase - Trame d'un éditeur HTML/JavaScript
; Version 0.01

; PureBasic 6.30 (x64)
; Mise à jour du 29 Janvier 2026
; Pas d'API & Scintilla natif

; Fonctionnalités
; ===============
; V0.00
; Mise en place du gadget Scintilla
; Propriété du gadget Scintilla
; Scintilla callback pour gérer les évenements Scintilla

; V0.01
; Indentation 

EnableExplicit

Enumeration window
  #app
EndEnumeration

Enumeration gadgets
  #editor
EndEnumeration

Enumeration styles
EndEnumeration

Define version.s = "0.01"

; Largeur de la marge de numérotation des lignes
Global scMarginSizeDefault = 50

; Couleurs
Global scFrontColor = RGB(105,105, 105) 
Global scBackColor  = RGB(250, 240, 230)
Global scCurrentLineColor = RGB(255, 228, 181)

; Police de caractére
Global scFont.s = "Lucida Console"
Global scFontSize = 12

; Indentation
Global scIndent, scLine, scPos, scCol


;- Sommaire des procédures

; Définir les paramétres du gadget scintilla
Declare ScintillaProperties(gadget)

; Callback évenementielle du gadget scintilla 
Declare ScintillaCallBack(gadget, *scn.scNotification)

;- Fenetre de l'application
OpenWindow(#app, 0, 0, 800, 600, "WebBase " + version , #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

; Neutraliser la touche TAB et les caractéres spéciaux
RemoveKeyboardShortcut(#app, #PB_Shortcut_Tab)

AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_B, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_G, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_E, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_R, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_O, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_P, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_Q, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_S, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_F, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_H, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_K, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_W, 0)  
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_N, 0)

; Editeur Scintilla gadget associé à un callback 
ScintillaGadget(#editor, 10, 10, 780, 580, @scintillaCallBack())

;- Parametres Scintilla (Couleur, font, numerotation, style,  etc ...)
ScintillaProperties(#editor)

; Positionner le curseur de saisie dans l'éditeur
SetActiveGadget(#editor)

;- Boucle évenementielle
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow

;-
;- Liste des procédures

; Parametres du gadget scintilla
Procedure ScintillaProperties(gadget)
  ;- 1 Style par défaut
  ; Couleur et police de caractéres
  ScintillaSendMessage(gadget, #SCI_STYLESETFORE, #STYLE_DEFAULT, scFrontColor)
  ScintillaSendMessage(gadget, #SCI_STYLESETBACK, #STYLE_DEFAULT, scBackColor)
  
  ScintillaSendMessage(gadget, #SCI_STYLESETFONT,#STYLE_DEFAULT, @scFont) 
  ScintillaSendMessage(gadget, #SCI_STYLESETSIZE, #STYLE_DEFAULT, scFontSize)
  
  ;- 2 Propager vers tous les styles
  ScintillaSendMessage(gadget, #SCI_STYLECLEARALL)
  
  ;- 3 Définir des styles spécifiques
  ; Activation et couleur de la ligne en cours d'édition
  ScintillaSendMessage(gadget, #SCI_SETCARETLINEVISIBLE, #True)
  ScintillaSendMessage(gadget, #SCI_SETCARETLINEBACK, scCurrentLineColor)
  
  ; Les tabulations sont remplacées par des espaces 
  ScintillaSendMessage(gadget, #SCI_SETUSETABS, #False)
  
  ; Nombre d'espaces pour une tabulation
  ScintillaSendMessage(gadget, #SCI_SETINDENT, 4)
  
  ; Création de la colonne de numérotation des lignes
  ScintillaSendMessage(gadget, #SCI_SETMARGINTYPEN, 1, #SC_MARGIN_NUMBER) 
  ScintillaSendMessage(gadget, #SCI_SETMARGINWIDTHN, 1, scMarginSizeDefault)
  
  ; Création de la colonne de pliages/dépliage
  ScintillaSendMessage(gadget, #SCI_SETMARGINMASKN, 2, #SC_MASK_FOLDERS)
  ScintillaSendMessage(gadget, #SCI_SETMARGINWIDTHN, 2, 20)
  ScintillaSendMessage(gadget, #SCI_SETMARGINSENSITIVEN, 2, #True)
  
EndProcedure

;-

; Callback evenementielle du gadget scintilla
Procedure scintillaCallBack(gadget, *scn.scNotification)
  Protected textLength
  Protected SciCurrentPos, SciWordStartPos
  
  ; Calculer la longueur du texte contenu dans le gadget scintilla
  textLength = ScintillaSendMessage(#editor, #SCI_GETLENGTH)
  
  ; Analyser les evenement scintilla
  Select *scn\nmhdr\code
    Case #SCN_CHARADDED 
      Debug "#SCN_CHARADDED - Indentation et autocomplétion"
      
      ; Un caractére est saisie      
      Select *scn\ch
        Case 13
          ;- Indentation
          ; Vous avez pressé la touche entrée
          
          ; Quel est la position du décalages du texte au niveau de la marge.
          scIndent = ScintillaSendMessage(Gadget, #SCI_GETLINEINDENTATION, scLine)
          
          ; Passer à la ligne suivante 
          ; et positionner le curseur 
          ScintillaSendMessage(Gadget, #SCI_SETLINEINDENTATION, scLine+1, scIndent)
          
          ; Touche entrée préssée : Le curseur ne passera pas à  la ligne suivante.
          ; Forcer le passage à la ligne en insérant la longueur de #CRLF$
          If scIndent=0 
            scPos = scPos + Len(#CRLF$)
          EndIf
          
          ; Positionner le curseur de saisie 
          ScintillaSendMessage(Gadget, #SCI_GOTOPOS, scPos + scIndent)
      EndSelect 
      
    Case #SCN_UPDATEUI  
      Debug "#SCN_UPDATEUI - Coloration et systeme de folding"
      
    Case #SCN_MARGINCLICK
      ; Clique sur la deuxiéme colonne (folding)
      If *scn\margin = 2
        Debug "#SCN_MARGINCLICK - pliage/dépliage du code"
      EndIf
      
  EndSelect 
  
  ; Important pour le fonctionnement de l'indentation
  
  ; Trouver la position du curseur de saisie  
  scPos = ScintillaSendMessage(Gadget, #SCI_GETANCHOR)
  
  ; Trouver la ligne ou se touve le curseur
  scLine = ScintillaSendMessage(Gadget, #SCI_LINEFROMPOSITION, scPos)
  
  ; Trouver la colonne en cours
  scCol = ScintillaSendMessage(Gadget, #SCI_GETCOLUMN, scPos)
  
EndProcedure

Re: WebBase HTML CSS Javascript

Publié : ven. 30/janv./2026 1:21
par falsam
Version 0.02 - Je vous propose maintenant de mettre en place l'auto-complétions des mots clés.

➡️ Objectif :
Proposer des mots à l'utilisateur à partir des premiers caractères saisis.

L'auto-complétions est gérée dans le callback dans l'évènement #SCN_CHARADDED

⚠️ Dans la procédure ScintillaProperties(), j'ai ajouté le paramétrage de la mise en œuvre de l'auto-complétions.

Code : Tout sélectionner

  ; Autocomplétion : Parametres de la liste des mots clés 
ScintillaSendMessage(gadget, #SCI_AUTOCSETMAXHEIGHT, 40)
ScintillaSendMessage(gadget, #SCI_AUTOCSETMAXWIDTH, 150)
ScintillaSendMessage(gadget, #SCI_AUTOCSETAUTOHIDE, #True)
ScintillaSendMessage(gadget, #SCI_AUTOCSETCHOOSESINGLE, #True)
ScintillaSendMessage(gadget, #SCI_AUTOCSETIGNORECASE, #True)
  
; Autocomplétion : Caractére séparant chaque mot de la liste des mots clés
ScintillaSendMessage(gadget, #SCI_AUTOCSETSEPARATOR, Asc(KeyWordSep))
  
; Autocomplétion : Caractére sélectionnant le mot de la liste d'autocomplétion
ScintillaSendMessage(gadget, #SCI_AUTOCSETFILLUPS, 0, @" ")
  
; Autocomplétion : Tri de la liste 
ScintillaSendMessage(gadget, #SCI_AUTOCSETORDER, #SC_ORDER_PERFORMSORT)
 

➡️ Code incluant la mise en place de l'auto-complétions. Commentaires dans le code.

Code : Tout sélectionner

; WebBase - Trame d'un editeur HTML/JavaScript
; Version 0.02

; PureBasic 6.30 (x64)
; Mise à jour du 29 Janvier 2026
; Pas d'API & Scintilla natif

; Fonctionnalités
; ===============
; Mise en place du gadget Scintilla
; Propriété du gadget Scintilla
; Scintilla callback pour gérer les évenements Scintilla
; Indentation 

; V0.02
; Autocomplétion 


EnableExplicit

Enumeration window
  #app
EndEnumeration

Enumeration gadgets
  #editor
EndEnumeration

Enumeration styles
EndEnumeration

Define version.s = "0.02"

; Liste des mots clés (C'est un jeu de test)
Global htmlKeyWords.s = "html,head,body,title,script,style,div,canvas,meta,h1,h2,h3,h4,h5,h6,button"

; Séparateur des mots clés
Global KeyWordSep.s = ","

; Largeur de la marge de numérotation des lignes
Global scMarginSizeDefault = 50

; Couleurs
Global scFrontColor = RGB(105,105, 105) 
Global scBackColor  = RGB(250, 240, 230)
Global scCurrentLineColor = RGB(255, 228, 181)

; Police de caractére
Global scFont.s = "Lucida Console"
Global scFontSize = 12

; Indentation
Global scIndent, scLine, scPos, scCol


;- Sommaire des procédures

; Définir les paramétres du gadget scintilla
Declare ScintillaProperties(gadget)

; Callback évenementielle du gadget scintilla 
Declare ScintillaCallBack(gadget, *scn.scNotification)

; Texte au format UTF8
Declare MakeUTF8Text(text.s)

;- Fenetre de l'application
OpenWindow(#app, 0, 0, 800, 600, "WebBase " + version , #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

; Neutraliser la touche TAB et les caractéres spéciaux
RemoveKeyboardShortcut(#app, #PB_Shortcut_Tab)

AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_B, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_G, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_E, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_R, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_O, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_P, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_Q, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_S, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_F, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_H, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_K, 0)
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_W, 0)  
AddKeyboardShortcut(#app, #PB_Shortcut_Control+#PB_Shortcut_N, 0)

; Editeur Scintilla gadget associé à un callback 
ScintillaGadget(#editor, 10, 10, 780, 580, @scintillaCallBack())

;- Parametres Scintilla (Couleur, font, numerotation, style,  etc ...)
ScintillaProperties(#editor)

; Positionner le curseur de saisie dans l'éditeur
SetActiveGadget(#editor)

;- Boucle évenementielle
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow

;-
;- Liste des procédures

; Parametres du gadget scintilla
Procedure ScintillaProperties(gadget)
  ;- 1 Style par défaut
  ; Couleur et police de caractéres
  ScintillaSendMessage(gadget, #SCI_STYLESETFORE, #STYLE_DEFAULT, scFrontColor)
  ScintillaSendMessage(gadget, #SCI_STYLESETBACK, #STYLE_DEFAULT, scBackColor)
  
  ScintillaSendMessage(gadget, #SCI_STYLESETFONT,#STYLE_DEFAULT, @scFont) 
  ScintillaSendMessage(gadget, #SCI_STYLESETSIZE, #STYLE_DEFAULT, scFontSize)
  
  ;- 2 Propager vers tous les styles
  ScintillaSendMessage(gadget, #SCI_STYLECLEARALL)
  
  ;- 3 Définir des styles spécifiques
  ; Activation et couleur de la ligne en cours d'édition
  ScintillaSendMessage(gadget, #SCI_SETCARETLINEVISIBLE, #True)
  ScintillaSendMessage(gadget, #SCI_SETCARETLINEBACK, scCurrentLineColor)
  
  ; Les tabulations sont remplacées par des espaces 
  ScintillaSendMessage(gadget, #SCI_SETUSETABS, #False)
  
  ; Nombre d'espaces pour une tabulation
  ScintillaSendMessage(gadget, #SCI_SETINDENT, 4)
  
  ; Création de la colonne de numérotation des lignes
  ScintillaSendMessage(gadget, #SCI_SETMARGINTYPEN, 1, #SC_MARGIN_NUMBER) 
  ScintillaSendMessage(gadget, #SCI_SETMARGINWIDTHN, 1, scMarginSizeDefault)
  
  ; Autocomplétion : Parametres de la liste des mots clés 
  ScintillaSendMessage(gadget, #SCI_AUTOCSETMAXHEIGHT, 40)
  ScintillaSendMessage(gadget, #SCI_AUTOCSETMAXWIDTH, 150)
  ScintillaSendMessage(gadget, #SCI_AUTOCSETAUTOHIDE, #True)
  ScintillaSendMessage(gadget, #SCI_AUTOCSETCHOOSESINGLE, #True)
  ScintillaSendMessage(gadget, #SCI_AUTOCSETIGNORECASE, #True)
  
  ; Autocomplétion : Caractére séparant chaque mot de la liste des mots clés
  ScintillaSendMessage(gadget, #SCI_AUTOCSETSEPARATOR, Asc(KeyWordSep))
  
  ; Autocomplétion : Caractére sélectionnant le mot de la liste d'autocomplétion
  ScintillaSendMessage(gadget, #SCI_AUTOCSETFILLUPS, 0, @" ")
  
  ; Autocomplétion : Tri de la liste 
  ScintillaSendMessage(gadget, #SCI_AUTOCSETORDER, #SC_ORDER_PERFORMSORT) 

  
  ; Création de la colonne de pliages/dépliage
  ScintillaSendMessage(gadget, #SCI_SETMARGINMASKN, 2, #SC_MASK_FOLDERS)
  ScintillaSendMessage(gadget, #SCI_SETMARGINWIDTHN, 2, 20)
  ScintillaSendMessage(gadget, #SCI_SETMARGINSENSITIVEN, 2, #True)
  
EndProcedure

;-

; Callback evenementielle du gadget scintilla
Procedure scintillaCallBack(gadget, *scn.scNotification)
  Protected textLength
  Protected SciCurrentPos, SciWordStartPos
  
  ; Calculer la longueur du texte contenu dans le gadget scintilla
  textLength = ScintillaSendMessage(#editor, #SCI_GETLENGTH)
  
  ; Analyser les evenement scintilla
  Select *scn\nmhdr\code
    Case #SCN_CHARADDED 
      Debug "#SCN_CHARADDED - Indentation et autocomplétion"
      
      ; Un caractére est saisie      
      Select *scn\ch
        Case 13
          ;- Indentation
          ; Vous avez pressé la touche entrée
          
          ; Quel est la position du décalages du texte au niveau de la marge.
          scIndent = ScintillaSendMessage(gadget, #SCI_GETLINEINDENTATION, scLine)
          
          ; Passer à la ligne suivante 
          ; et positionner le curseur 
          ScintillaSendMessage(gadget, #SCI_SETLINEINDENTATION, scLine+1, scIndent)
          
          ; Touche entrée préssée : Le curseur ne passera pas à  la ligne suivante.
          ; Forcer le passage à la ligne en insérant la longueur de #CRLF$
          If scIndent=0 
            scPos = scPos + Len(#CRLF$)
          EndIf
          
          ; Positionner le curseur de saisie 
          ScintillaSendMessage(gadget, #SCI_GOTOPOS, scPos + scIndent)
          
        Case 'a' To 'z', 'A' To 'Z'
          ; Autocomplétion (Affichage d'une liste contenant les mots clés HTML
          ; Affichage du mot selectionné si autocomplétion
          SciCurrentPos = ScintillaSendMessage(Gadget, #SCI_GETCURRENTPOS)
          SciWordStartPos = ScintillaSendMessage(Gadget, #SCI_WORDSTARTPOSITION, SciCurrentPos, 1)
          ScintillaSendMessage(0, #SCI_AUTOCSHOW, SciCurrentPos - SciWordStartPos, MakeUTF8Text(htmlKeyWords))
          
      EndSelect 
      
    Case #SCN_UPDATEUI  
      Debug "#SCN_UPDATEUI - Coloration et systeme de folding"
      
    Case #SCN_MARGINCLICK
      ; Clique sur la deuxiéme colonne (folding)
      If *scn\margin = 2
        Debug "#SCN_MARGINCLICK - pliage/dépliage du code"
      EndIf
      
  EndSelect 
  
  ; Important pour le fonctionnement de l'indentation
  
  ; Trouver la position du curseur de saisie  
  scPos = ScintillaSendMessage(Gadget, #SCI_GETANCHOR)
  
  ; Trouver la ligne ou se touve le curseur
  scLine = ScintillaSendMessage(Gadget, #SCI_LINEFROMPOSITION, scPos)
  
  ; Trouver la colonne en cours
  scCol = ScintillaSendMessage(Gadget, #SCI_GETCOLUMN, scPos)
  
EndProcedure

;-
;- Utilitaire(s)

; Obtenir un UTF8 d'un string
Procedure MakeUTF8Text(text.s)
  Static buffer.s
  
  buffer = Space(StringByteLength(text, #PB_UTF8) + 1)
  PokeS(@buffer, text, -1, #PB_UTF8)
  ProcedureReturn @buffer
EndProcedure

🔜 Prochain sujet. On rentre dans le vif. Coloration des balises HTML 🌞

Re: WebBase HTML CSS Javascript

Publié : ven. 30/janv./2026 10:24
par Mindphazer
Y'en a un qui va être content ! N'est-ce pas KCC ? :mrgreen:

Re: WebBase HTML CSS Javascript

Publié : ven. 30/janv./2026 10:26
par Mindphazer
falsam a écrit : ven. 30/janv./2026 0:14

Code : Tout sélectionner

; Mise à jour du 29 Janvier 2025
2025 ? Vraiment ? :mrgreen:

Re: WebBase HTML CSS Javascript

Publié : ven. 30/janv./2026 11:18
par falsam
C'est corrigé. Merci Mindphazer et plein de bonnes choses à toi et ton entourage pour cette nouvelle Année 2026 🎉 🎊 🎁