Scintilla Recherche/selection/remplacement

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Scintilla Recherche/selection/remplacement

Message par Backup »

@falsam

je suis tombé par hasard sur ta procedure de recherche/selection
de scintilla , qui fonctionne tres bien
mais .... pas avec les accents .. si le mot recherché contient un accent, la selection foire ....

je parle de cette procedure :
que j'ai legerement modifier pour qu'elle fonctionne un premier coup avec un bouton [rechercher] ->> mode 0
ou mode suivant (F3) ->>mode <>0

je l'ai aussi passer en mode "GoScintilla" une lib de Srod , que j'utilise depuis que j'ai commencé EPB :)
(j'ai juste mis "Id" ) car GoScintilla utilise le numero de l'editeur (et EBP le numero de l'onglet qui est aussi le numero de l'editeur contenu)

Code : Tout sélectionner

ProcedureDLL GOSCI_Search2(id,StringFind.s,mode)
		;falsam
		Protected Current.l, Start.l, Anchor.l
		If StringFind <> ""
		
		
		Current = ScintillaSendMessage(id, #SCI_GETCURRENTPOS)			
		If mode=0; recherche premier
			Current =1
		EndIf
					ScintillaSendMessage(id, #SCI_SETANCHOR, Current)	
				ScintillaSendMessage(id, #SCI_SEARCHANCHOR)			
				Start = ScintillaSendMessage(id, #SCI_SEARCHNEXT, 0, @StringFind)
				
			If  Start<> -1
				Anchor = ScintillaSendMessage(id, #SCI_GETANCHOR)
				ScintillaSendMessage(id, #SCI_SETSEL, Start, Anchor)
			Else
				;MessageRequester("Find string", "No more matching")
			EndIf
		EndIf
		
	EndProcedure

d'ailleurs dans l'ideal , je recherche une procedure qui
sélectionne le terme a recherché (bon ça .. ça va mis a part les accent )
et aussi qu'on puisse avoir la possibilité de ne pas sélectionner les termes en Rem (;)

j'ai deja fait tout ce boulot, mais ma procedure ne marche plus si des accents sont present !
comme j'utilise en grande partie GoScintilla , je me rends compte que l'utilisation conjointe
de Scintilla et des fonctions String de Purebasic ne donne pas un résultat probant ... :(

je vais finir par virer par traitement tout les accent présent dans l'editeur ! :lol:
Dernière modification par Backup le sam. 24/août/2013 0:29, modifié 3 fois.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Scintilla

Message par falsam »

Longue comme le bras :mrgreen:
j'ai corrigé la procédure de recherche / remplacer.
Ctrl + F pour effectuer la recherche.

Code : Tout sélectionner

; Scintilla : Search Replace Exemple

EnableExplicit

Enumeration
  #Mainform
  #Editor
  
  #StringFindForm
	
	#StringFind
	#StringFindCheck
	#StringReplace
	#Btn_StringFindNext
	#Btn_StringFindReplace
	#Btn_StringFindEnd
  #Kbd_CtrlF  ;Shortcut Find / replace
	#Kbd_F3     ;Shortcut Next string
	#Kbd_Return 
	
	#LexerState_Error

EndEnumeration


Define.l Event, WEvent, MEvent, GEvent, TEvent

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered
Global StringFind.s, StringReplace.s

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

; Set Text
Procedure ScintillaSetText(Gadget.l, Buffer.s)
  ScintillaSendMessage(Gadget, #SCI_SETTEXT, 0, @Buffer)
EndProcedure

; Get Text
Procedure.s ScintillaGetText(Gadget.l)
  Protected SciLength.i, *MemoryID, Buffer.s
  
  SciLength = ScintillaSendMessage(Gadget, #SCI_GETLENGTH)+1
      *MemoryID = AllocateMemory(SciLength)
      If *MemoryID
        ScintillaSendMessage(Gadget, #SCI_GETTEXT, SciLength, *MemoryID)
        Buffer=PeekS(*MemoryID)
        FreeMemory(*MemoryID)  
      EndIf
      ProcedureReturn(Buffer)
EndProcedure


; Find String
Procedure ScintillaStringFind(StringFind.s)
  Protected Current.l, start.l, Anchor.l, Result.i
    If StringFind <> ""
      Current = ScintillaSendMessage(#Editor, #SCI_GETCURRENTPOS)
      ScintillaSendMessage(#Editor, #SCI_SETANCHOR, Current)
      ScintillaSendMessage(#Editor, #SCI_SEARCHANCHOR)
      Start = ScintillaSendMessage(#Editor, #SCI_SEARCHNEXT, 0, @StringFind)
      If  Start<> -1
        anchor = ScintillaSendMessage(#Editor, #SCI_GETANCHOR)
        ScintillaSendMessage(#Editor, #SCI_SETSEL, start, anchor)
      Else
        Result = MessageRequester("Find string", "No more matching."+#CRLF$+
                                  "Do you Want to Continue the search from the beginning",
                                  #PB_MessageRequester_YesNo)
        
        If Result = #PB_MessageRequester_Yes
          ScintillaSendMessage(#Editor, #SCI_GOTOLINE, 0, 0)
          ScintillaStringFind(StringFind)
        Else
        EndIf
        
      EndIf
    EndIf
    
EndProcedure



; Find Replace string
Procedure  ScintillaStringReplace(StringFind.s, StringReplace.s)
  Protected StringSel.s 
  
  ;Storing the selected word
  ScintillaSendMessage(#Editor, #SCI_COPY)
  StringSel=GetClipboardText()
  
  If LCase(StringSel)=LCase(StringFind)
    SetClipboardText(StringReplace)
    ScintillaSendMessage(#Editor, #SCI_PASTE)
    
    ;Find the next occurrence
    ScintillaStringFind(StringFind)
  EndIf
  

EndProcedure


; Show find/replace string dialog
Procedure Open_StringFindForm()
	If OpenWindow(#StringFindForm,0,0,455,195,"Find/Replace",#PB_Window_Tool|#PB_Window_WindowCentered,WindowID(#Mainform))
	  TextGadget(#PB_Any,30,21,85,20,"Find")
	  ComboBoxGadget(#StringFind,130,18,310,23,#PB_ComboBox_Editable)
	  
	  CheckBoxGadget(#StringFindCheck,15,60,105,20,"Replace by")
		ComboBoxGadget(#StringReplace,130,59,310,23,#PB_ComboBox_Editable)
		
		ButtonGadget(#Btn_StringFindNext,20,150,125,20,"Next String")
		ButtonGadget(#Btn_StringFindReplace,160,150,80,20,"Replace")
		ButtonGadget(#Btn_StringFindEnd,360,150,80,20,"Close")
		
		DisableGadget(#StringReplace, #True)
		DisableGadget(#Btn_StringFindReplace, #True)
		   
		SetActiveGadget(#StringFind)
		
		AddKeyboardShortcut(#StringFindForm, #PB_Shortcut_Return, #Kbd_Return) ;Find String
	EndIf
EndProcedure

; Scintilla Callback
;
; CallBack To receive the events of Scintilla gadget
; scinotify * pointer to a structure containing the information on the event:
; See the bottom of this page http://www.scintilla.org/ScintillaDoc.html
;
; -Knowing the current cursor position and correctly position
;  after having press the Enter key
Procedure ScintillaCallBack(Gadget, *scinotify.SCNotification)
  ; Enter key is used
  If *scinotify\ch=13
    
    ;New line: Cursor on the indentation of the previous line.
    ScintillaSendMessage(Gadget, #SCI_SETLINEINDENTATION, SciLIne+1, SciIndent)
    If SciIndent=0 
      SciPos=SciPos+2
    EndIf
   
    ScintillaSendMessage(Gadget, #SCI_GOTOPOS, SciPos+SciIndent)

  EndIf
  
  ;Position in the chain scintilla
  SciPos = ScintillaSendMessage(Gadget, #SCI_GETANCHOR)
  
  ;Line from position
  SciLine = ScintillaSendMessage(Gadget, #SCI_LINEFROMPOSITION, SciPos)
  
  ;Column from position
  SciCol = ScintillaSendMessage(Gadget, #SCI_GETCOLUMN, SciPos)
  
  ;Determination de l'indentation
  SciIndent = ScintillaSendMessage(Gadget, #SCI_GETLINEINDENTATION, SciLine)  
EndProcedure


;Init scintilla properties (minimalist)
Procedure ScintillaSetProperties(Gadget)
 
 ScintillaSendMessage(Gadget,  #SCI_SETLEXER, 0); No lexer
  
 ScintillaSendMessage(Gadget, #SCI_STYLESETFONT, #STYLE_DEFAULT,@"Arial") ;Police
 ScintillaSendMessage(Gadget, #SCI_STYLESETSIZE, #STYLE_DEFAULT, 12) ;Size
 ScintillaSendMessage(Gadget, #SCI_STYLECLEARALL)
  
 ScintillaSendMessage(Gadget, #SCI_SETCARETLINEBACK, RGB(245, 245, 220));Line Active BackColor
 ScintillaSendMessage(Gadget, #SCI_SETCARETLINEVISIBLE, #True) ;Cursor Yes
 ScintillaSendMessage(gadget, #SCI_SETCARETWIDTH, 3) ;Cursor Size
 
 ScintillaSendMessage(Gadget, #SCI_SETUSETABS, #False) ;User tabs replace by space
 ScintillaSendMessage(Gadget, #SCI_SETINDENT, 8) ; Number spaces
 
 ScintillaSendMessage(Gadget, #SCI_STYLESETBACK, #LexerState_Error, RGB(255, 0, 0))
        
EndProcedure


;Mainform
Procedure Open_MainForm()
  OpenWindow(#Mainform, 0, 0, 800, 600, "Recherche", WindowStyle)
  ScintillaGadget(#Editor, 10, 10, 780, 580, @ScintillaCallBack())
  ScintillaSetProperties(#Editor)
  
  ;Init Shortcut  
  RemoveKeyboardShortcut(#Mainform, #PB_Shortcut_Tab)
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_F|#PB_Shortcut_Control, #Kbd_CtrlF)
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_F3, #Kbd_F3)
  SetActiveGadget(#Editor) 
EndProcedure

Procedure Start()
  CompilerIf #PB_Compiler_OS = #PB_OS_Windows
    InitScintilla()
  CompilerEndIf
  
  Open_MainForm()
  ScintillaSetText(#Editor, "éventuel"+#CRLF$+"élève"+#CRLF$+"bientôt")
  
  ;Goto line 0
  ScintillaSendMessage(#Editor, #SCI_GOTOLINE, 0, 0)
  
  ScintillaSendMessage(#Editor, #SCI_SETSELFORE,RGB(255, 0, 0),0)
  
EndProcedure

start()

Repeat
  Event  = WaitWindowEvent(10)
  WEvent = EventWindow()
  MEvent = EventMenu()
  GEvent = EventGadget()
  TEvent = EventType()
  Select Event
    Case #PB_Event_Menu
      Select MEvent
        Case #Kbd_CtrlF
          Open_StringFindForm()
          
        Case #Kbd_F3 
          ScintillaStringFind(StringFind)
          
        Case #Kbd_Return
          Select WEvent 
            Case #StringFindForm
              ScintillaStringFind(StringFind)
          EndSelect
  
      EndSelect
                
    Case #PB_Event_Gadget
      Select GEvent  
        Case #StringFindCheck
          If GetGadgetState(#StringFindCheck)=#PB_Checkbox_Checked
            DisableGadget(#StringReplace, #False)
            DisableGadget(#Btn_StringFindReplace, #False)
          Else
            DisableGadget(#StringReplace, #True)
            DisableGadget(#Btn_StringFindReplace, #True)
          EndIf
          
        Case #StringFind 
          StringFind=GetGadgetText(#StringFind)
          
        Case #StringReplace
          StringReplace=GetGadgetText(#StringReplace)
          
        Case #Btn_StringFindEnd
          CloseWindow(#StringFindForm)
          
        Case #Btn_StringFindNext
          ScintillaStringFind(GetGadgetText(#StringFind))
          
        Case #Btn_StringFindReplace
          ScintillaStringReplace(StringFind, StringReplace)
          
      EndSelect
        
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Scintilla

Message par Backup »

si tu utilises la librairie Goscintilla de Srod
librairie qui est une collection de procedures pour gerer un editeur

voici la version de ta procedure de recherche/selection mise au format Goscintilla

Search2(id,StringFind.s,mode)
id=#editor
StringFind.s="mot a chercher"
mode =0 on effectue une recherche de la premiere occurence (ça permet de remonter au debut du texte pour relancer une recherche du debut )
mode=1 , la recherche se fait au suivant ... (F3)

Code : Tout sélectionner

ProcedureDLL GOSCI_Search2(id,StringFind.s,mode)
		;falsam
		Protected Current.l, Start.l, Anchor.l
		If StringFind <> ""
		
		
		Current = ScintillaSendMessage(id, #SCI_GETCURRENTPOS)			
		If mode=0; recherche premier
			Current =1
		EndIf
					ScintillaSendMessage(id, #SCI_SETANCHOR, Current)	
				ScintillaSendMessage(id, #SCI_SEARCHANCHOR)			
				Start = ScintillaSendMessage(id, #SCI_SEARCHNEXT, 0, @StringFind)
				
			If  Start<> -1
				Anchor = ScintillaSendMessage(id, #SCI_GETANCHOR)
				ScintillaSendMessage(id, #SCI_SETSEL, Start, Anchor)
				;ScintillaSendMessage(id, #SCI_GOTOLINE, 0, 0)
			Else
				;MessageRequester("Find string", "No more matching")
			EndIf
		EndIf
		
	EndProcedure

le probleme c'est qu'apparemment dans le cadrer de Goscintilla , elle n'aime pas les Accents ...
alors que ton exemple fonctionne tres bien :)

pour ma part j'ai fait d'autres procedure qui fonctionne a peut pres pareil
mais j'ai le meme probleme ....

il semble donc que cela provienne de Goscintilla ....

par exemple , voici ma routine de selection pour goscintilla
elle ne s'occupe que de selection , j'ai d'autres routines pour sauter au bon endroit, rechercher le mot, etc ....

GOSCI_select_word(id,number_line,startseg,longseg)
id=#editor
number_line= numero de la ligne qui nous interresse
startseg= le debut de la selection du mot (position en caractere)
longseg= la longueur de la selection en caractere (generalement Len(du_mot_recherché)

Code : Tout sélectionner

ProcedureDLL GOSCI_select_word(id,number_line,startseg,longseg)
		;by Dobro
		;Selection an segment of line	 
		ScintillaSendMessage(id, #SCI_GOTOLINE, number_line)
		; 	
		posx= ScintillaSendMessage(id, #SCI_POSITIONFROMLINE,number_line) ; donne le numero de caractere depuis le debut du document
		dep=posx+startseg
		arr=posx+startseg+longseg
		ScintillaSendMessage(id, #SCI_SETSELECTIONSTART,dep)
		ScintillaSendMessage(id, #SCI_SETSELECTIONEND,arr)
		
EndProcedure

malgres tout mes efforts ,dans le cadre d'un éditeur Goscintilla , ça ne sélectionne pas les mots avec accents.... sans raisons apparente
que ce soit mes routines , ou toute celle trouvé ,(meme la tienne) ......ya un malaise !

ton exemple me montre que ça peut marcher .... j'en déduit que le problème ne viens pas de mes routines , mais de la façon dont
GoScintilla met en oeuvre l'editeur Scintilla ....

seulement je ne parle pas assez bien l'anglais pour expliquer ça a Srod ... :roll:

je vais continuer de chercher :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Scintilla Recherche/selection/remplacement

Message par Backup »

bon j'ai trouvé !!

Goscintilla contient la ligne :

Code : Tout sélectionner

;Set utf-8 codepage.
ScintillaSendMessage(id, #SCI_SETCODEPAGE, #SC_CP_UTF8, 0)
et cela passe l'editeur en mode unicode ....

en mettant en Rem cette ligne , on peut continuer a utiliser les accents ...
meme si dans un premier temps ce qui a été sauvé (les codes sauvé) sous se format
se retrouverons au chargement avec des signes bizarre a la place des accents
je pourrai quand meme remettre les accents ensuite ça roule .... :)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Scintilla Recherche/selection/remplacement

Message par falsam »

Je ne suis pas certain que l'unicode soit en cause. Au contraire je n'y toucherais pas.

J'ai téléchargé l'include de S-Rod (Gros travail). Lorsqu'on fait une recherche il faut s'assurer que le focus est bien sur l'éditeur.

Code : Tout sélectionner

IncludePath "../../"
XIncludeFile "GoScintilla.pbi"

Enumeration
  #Mainform
  #Editor
    
  #StringSearch
  #Search
  
EndEnumeration

;Initialise the Scintilla library for Windows.
CompilerIf  #PB_Compiler_OS = #PB_OS_Windows 
  InitScintilla()
CompilerEndIf


If OpenWindow(#Mainform, 100, 200, 600, 300, "Find Replace!", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
  ;Required for the tab key to function correctly when the Scintilla control has the focus.
  RemoveKeyboardShortcut(#Mainform, #PB_Shortcut_Tab)
  
  ;Search String
  TextGadget(#PB_Any, 10, 10, 80, 20, "Search")
  StringGadget(#StringSearch, 90, 10, 200, 22, "ignoré")
  ButtonGadget(#Search, 300, 10, 80, 22, "Search")
  
  ;Create our Scintilla control. Note that we do not specify a callback; this is optional for GoSctintilla.
  GOSCI_Create(#Editor, 10, 40, 580, 250, 0, #GOSCI_AUTOSIZELINENUMBERSMARGIN)
    
  ;Set the padding added to the width of the line-number margin.
  GOSCI_SetAttribute(#Editor, #GOSCI_LINENUMBERAUTOSIZEPADDING, 10)

  ;Set folding symbols margin width.
  GOSCI_SetMarginWidth(#Editor, #GOSCI_MARGINFOLDINGSYMBOLS, 24)

  ;Set the back color of the line containing the caret.
  GOSCI_SetColor(#Editor, #GOSCI_CARETLINEBACKCOLOR, $B4FFFF)

  ;Set font.
  GOSCI_SetFont(#Editor, "Courier New", 10)

  ;Set tabs. Here we use a 'hard' tab in which a tab character is physically inserted. Set the 3rd (optional) parameter to 1 to use soft-tabs.
   GOSCI_SetTabs(#Editor, 2)
  
  ;Set some initial text.
  text$ = "Cet espace sera ignoré lors de la compilation" + #CRLF$ +
          "Cet espace sera ignoré lors de la compilation" + #CRLF$ +  
          "Cet espace sera ignoré lors de la compilation" + #CRLF$
    
  GOSCI_SetText(#Editor, text$)
  
  SetActiveGadget(#Editor)
  ScintillaSendMessage(#Editor, #SCI_GOTOLINE, 0, 0)

  Repeat
    eventID = WaitWindowEvent()
    Select eventID
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Search
            SetActiveGadget(#Editor)
            GOSCI_Search(#Editor, GetGadgetText(#StringSearch), #GOSCI_SEARCHFORWARDS)
        EndSelect
    EndSelect
  Until eventID = #PB_Event_CloseWindow 

  ;Free the Scintilla gadget.
  GOSCI_Free(#Editor)
EndIf
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Scintilla Recherche/selection/remplacement

Message par Backup »

...
Dernière modification par Backup le mar. 19/août/2014 9:59, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Scintilla Recherche/selection/remplacement

Message par falsam »

Dobro a écrit :pour info EPB est un peu comme Japbe .... (c'est un editeur Purebasic .. d'ou le nom Editeur Pure Basic )
Je crois que tout le monde un peu ancien sur ce forum connait EPB :mrgreen:
Dobro a écrit :je vais peter un cable
Tu n'aurais pas une jolie Gibson qui pourrait te détendre. ?:)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Scintilla Recherche/selection/remplacement

Message par Backup »

Dernière modification par Backup le ven. 23/août/2013 23:34, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Scintilla Recherche/selection/remplacement

Message par Ar-S »

C'est claire qu'"il y a un étron dans le bol de punch" :mrgreen:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Scintilla Recherche/selection/remplacement

Message par Backup »

ben ouaip , je sais plus trop quoi faire ... :?

la solution serai que la fonction Findstring()
contienne un paramètre qui tienne compte du #Pb_UTF8

de sorte qu'en retour il donne la position correcte pour du UTF8 !
car là , il donne la position pour du ASCII lorsqu'il trouve une occurrence ... (c'est a dire un caractere = une position )
mais pour exploiter sur des mots avec Accent sur un éditeur UTF8 (comme Scintilla).. ça va plus , car une lettre avec accent en UTF8 , prends 2 caracteres.. pas un seul !

Fred ??
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Scintilla Recherche/selection/remplacement (FRED ?? )

Message par falsam »

J'ai du mal à adhérer à tes explications. Pourquoi l'exemple d'une recherche de string que je t'ai proposé sur la base du même include que toi fonctionne y compris avec les accents ? http://www.purebasic.fr/french/viewtopi ... 75#p155975
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Scintilla Recherche/selection/remplacement

Message par Backup »

je te l'ai pourtant expliqué
tu utilises les fonctions de recherche de Scintilla (via Goscintilla )
alors que moi j'utilise en partie les fonctions de Goscintilla pour recuperer
la ligne de text qui m’intéresse , et ensuite j'utilise les fonctions String de purebasic
(findstring() )
mais aussi Mid() etc ...
car je veux pouvoir non seulement chercher un mot , le sélectionner ... ok
mais aussi pouvoir ne chercher que les mots Entier, ou ne pas chercher dans les commentaires
et pour ça , t'es obligé de passer par les fonctions String de Purebasic
car si Scintilla propose bien une fonction de recherche et de sélection
ça s'arrete là !

tu ne trouvera pas de quoi lui faire ne chercher que des mots entier (ou pas )
par exemple "désactiver" et "activer" ....
en mode recherche partiel désactiver sera sélectionné , pas en mode recherche par mot entier !
de plus pour les commentaires , t'es bien obligé de scanner la phrase entière
a la recherche de ";" pour prendre ou ne pas prendre en compte ce qui suit dans la recherche ...

voila , ça dépasse le cadre d'une simple sélection d'un mot recherché
et pour ça , il faut que les fonctions de purebasic string
soient compatible avec l'editeur Scintilla ...(en mode UTF8)
ce n'est pas la cas actuellement , ma video le montre bien ....
j'utilise la sélection de Scintilla , mais cette sélection est "bornée" par le résultat
des fonctions de Purebasic d'ou la différence

car Purebasic renvoie en fonction du nombre de caractere
alors que Scintilla a besoin de la position en fonction des caractères qui compose la ligne
si des accents sont present , ils prennent 2 positions ....

regarde ma video ... tu comprendra le probleme :)

note : la video est faite en une seule session
les recherches sont bien successives , elles utilises la meme routine
de temps en temps on voit mon pointeur partir a droite pour relancer le debugger
a cause d'un Calldebugger que j'ai laissé dans mon code

on voit bien que lorsqu'aucun accent est en jeux , ça fonctionne tres bien ...
pourtant la meme routine ne marche plus avec les accents ...

reponse , parceque le bornage gauche -droite que je donne a la fonction de selection de Scintilla , ne contient pas la bonne posiiton de depart de la seleciton !
pourquoi ?
parceque ce depart de selection c'est Findstring qui me le donne
et findstring se fout des accents !
un accent c'est un seul caractere

alors que pour la routine de selection de Scintilla
un accent c'est 2 caracteres ...
Répondre