Modérateur: Vilains modOOos


Auberon a écrit:Si les mots exclus sont les premiers mots que je tape dans une cellule, un espace insécable est quand même ajouté. Mais pas après.
Auberon a écrit:Les tirets de dialogue
Est-il possible d'ajouter aussi un espace insécable après les tirets quadratin et demi-quadratin placés en début de paragraphe? Ce sont des tirets de dialogue, et un espace insécable est nécessaire après ces caractères.
jumbo444 a écrit:Au lieu de rajouter les protocoles, ne serait-il pas possible de détecter la séquence :// qui annulerait l'espace insécable ?
En effet, si on veut faire une liste des protocoles :
- http: => l'espace n'est pas inséré
- nntp: => l'espace est inséré

' Ajout d'espace insécable en cours de saisie (for french langage)
' Auteur du code d'origine : Luc-Olivier Rousseau
' Auteur : Alain Nowak anowak@starxpert.fr
' Modifications : Hagar de l'Est June 5th, 2008
' ----------------------------------------------------------------------------------------------
' Ajout d'espace insécable en cours de saisie
' - ajout d'espace avant les caractères ":", ";", "?", "!"
' - prise en compte de *://
' ----------------------------------------------------------------------------------------------
' table des caractères utiles
' 33 ! 63 ? 58 : 59 ; 32 ' '
' espace insecable : 160
Function doFrenchSpacing(oDocument as Object, sKeyChar as String) As Boolean
Dim oViewCursor as Object
Dim oText as Object
Dim oCursor as Object
doFrenchSpacing = false
on local error goto Fin_doFrenchSpacing
sBefore=""
select case sKeyChar
case ":", ";", "?", "!":
oViewCursor = oDocument.CurrentController.getViewCursor()
oText=oViewCursor.getText()
oCursor = oText.createTextCursorByRange(oViewCursor.getStart())
' détecte les 5 précédents caractères
oCursor.goLeft(3, true)
sBefore = oCursor.getString()
' si dans un tableau et moins de 3 caractères avant curseur, espace insécable
if len(sBefore)=0 then
sReplace = Chr(160) & sKeyChar
oCursor.collapseToEnd
oCursor.setString(sReplace)
doFrenchSpacing = true
else
charBefore = Asc(Right(sBefore,1))
' détection d'une espace simple devant sKeyChar : remplacer espace par espace insécable
if charBefore=32 then
sReplace = Chr(160) & sKeyChar
oCursor.collapseToEnd
oCursor.goLeft(1, true)
oCursor.setString(sReplace)
doFrenchSpacing = true
' si espace insécable ou ponctuation répétée : ne rien faire
elseif (charBefore = 160 or charBefore=33 or charBefore=63 or charBefore=58 or charBefore=59) then
' cas standard : insérer une espace insécable
else
sReplace = Chr(160) & sKeyChar
oCursor.collapseToEnd
oCursor.setString(sReplace)
doFrenchSpacing = true
endif
endif
case "/":
oViewCursor = oDocument.CurrentController.getViewCursor()
oText=oViewCursor.getText()
oCursor = oText.createTextCursorByRange(oViewCursor.getStart())
' détecte les 3 précédents caractères
oCursor.goLeft(3, true)
sBefore = oCursor.getString()
if sBefore=chr(160) & ":/" then
sReplace = ":/" & sKeyChar
oCursor.setString(sReplace)
doFrenchSpacing = true
endif
end select
exit function
Fin_doFrenchSpacing:
' en cas d'erreur,ne rien faire pour ne pas perturber l'utilisateur
End Function


If HasUnoInterfaces(Thiscomponent, "com.sun.star.frame.XModel") Then
If (ThisComponent.SupportsService("com.sun.star.text.TextDocument")) Then
oDocView = ThisComponent.CurrentController
oKeyHandler = createUnoListener("frenchSpacingHandler_", "com.sun.star.awt.XKeyHandler")
oDocView.addKeyHandler(oKeyHandler)
End if
End If
End sub




case "-":
oViewCursor = oDocument.CurrentController.getViewCursor()
oText=oViewCursor.getText()
oCursor = oText.createTextCursorByRange(oViewCursor.getStart())
oCursor.setString("-" & chr(160))
doFrenchSpacing = true

Auberon a écrit:A chaque fois que je veux éditer la macro, j'ai ceci qui s'affiche:



' Ajout d'espace insécable en cours de saisie (for french language)
' Auteur du code d'origine : Luc-Olivier Rousseau
' Auteur : Alain Nowak anowak@starxpert.fr
' Modifications : Hagar de l'Est June 5th, 2008
' Modifications : Jumbo444 5 novembre 2008
' ----------------------------------------------------------------------------------------------
' Ajout d'espace insécable en cours de saisie
' - ajout d'espace avant les caractères ":", ";", "?", "!"
' - prise de la langue locale : remplacement effectué que si langue française
' - prise en compte de https://, http://, ftp://, file:// et svn://
' - détection de :// pour ne pas mettre d'espace insécable
' ----------------------------------------------------------------------------------------------
' table des caractères utiles
' 33 ! 63 ? 58 : 59 ; 32 ' '
' espace insecable : 160
Function doFrenchSpacing(oDocument as Object, sKeyChar as String) As Boolean
Dim oViewCursor as Object
Dim oText as Object
Dim oCursor as Object
doFrenchSpacing = false
on local error goto Fin_doFrenchSpacing
oViewCursor = oDocument.CurrentController.getViewCursor()
if (oViewCursor.CharLocale.Language = "fr") then ' limite le travail au texte en français
sBefore=""
select case sKeyChar
case ":", ";", "?", "!":
oText=oViewCursor.getText()
oCursor = oText.createTextCursorByRange(oViewCursor.getStart())
' détecte les 5 précédents caractères
oCursor.goLeft(5, true)
sBefore = oCursor.getString()
' si dans un tableau et moins de 5 caractères avant curseur, espace insécable
if len(sBefore)=0 then
sReplace = Chr(160) & sKeyChar
oCursor.collapseToEnd
oCursor.setString(sReplace)
doFrenchSpacing = true
else
charBefore = Asc(Right(sBefore,1))
' détection d'une espace simple devant sKeyChar : remplacer espace par espace insécable
if charBefore=32 then
sReplace = Chr(160) & sKeyChar
oCursor.collapseToEnd
oCursor.goLeft(1, true)
oCursor.setString(sReplace)
doFrenchSpacing = true
' espace insécable ou ponctuation répétée ou https: ou http: ou file: ou ftp: ou svn: ne rien faire
elseif ( (charBefore = 160 or charBefore=33 or charBefore=63 or charBefore=58 or charBefore=59) or _
(sKeyChar=":" and (sBefore="https" or Right(sBefore,4)="http" or Right(sBefore,4)="file" _
or Right(sBefore,3)="ftp" or Right(sBefore,3)="svn")) ) then
' cas standard : insérer une espace insécable
else
sReplace = Chr(160) & sKeyChar
oCursor.collapseToEnd
oCursor.setString(sReplace)
doFrenchSpacing = true
endif
endif
case "/" :
oText=oViewCursor.getText()
oCursor = oText.createTextCursorByRange(oViewCursor.getStart())
' détecte les 3 précédents caractères
oCursor.goLeft(3, true)
sBefore = oCursor.getString()
if (Right(sBefore,2)=":/" and Left(sBefore,1)=Chr(160)) then ' efface le caractère insécable
sReplace = "://"
oCursor.collapseToEnd
oCursor.goLeft(3, true)
oCursor.setString(sReplace)
doFrenchSpacing = true
endif
end select
endif
exit function
Fin_doFrenchSpacing:
' en cas d'erreur,ne rien faire pour ne pas perturber l'utilisateur
End Function


Hagar de l'Est a écrit:un message sur ce sujet dans le sujet initial mais comme il est vérouillé, je n'ai pas pu continuer).













Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité