La typographie française répond à des normes très strictes et il n’est pas ici le lieu de faire l’énumération de ses règles. Toutefois, on sait que les quatre signes doubles « ! », « ? », « : » et « ; » doivent être précédés d’un espace et que celui-ci, à fortiori, se doit d’être insécable pour coller au mot qui les précède et donc, ne pas se retrouver sur la ligne suivante. OpenOffice Writer gère depuis déjà fort longtemps les guillemets français, ouvrants et fermants, respectivement suivis et précédés d’un espace insécable. Il en va tout autrement des quatre signes doubles « ! », « ? », « : » et « ; » dont l’espace insécable n’est géré correctement qu’avec l’adjonction d’une extension, elle-même téléchargeable sur cette page. Cette extension permet, en cours de frappe, de positionner les espaces insécables avant les signes doubles, prenant en compte si un espace a été tapé au clavier avant le signe et, s’il n’est pas insécable, le remplace très judicieusement.
Grand amateur de corrections de textes, souvent issus d’OCR, je me trouve fréquemment face a des textes où ces conventions typographiques sont posées aléatoirement, voire sont complètement absentes. En pratique, il peut y avoir (principalement car il y a évidemment toujours des exceptions) trois possibilités dans un texte qui puissent subir ce genre de traitements :
- des signes doubles qui ne sont précédés ni d’espaces insécables, ni d’espaces normaux.
- des signes doubles précédés d’espaces normaux.
- des signes doubles déjà correctement précédés d’espaces insécables.
La correction des mises en place est relativement fastidieuse à faire « à la main » et une macro permet évidemment, de mâcher le travail pour ce type de corrections :
Code : Tout sélectionner
Sub ponctuationDouble
Dim Document As Object, Replace As Object
Dim RechRemp(1,7), chaineImpossible As String
Dim i As Integer
Document = ThisComponent : Replace = Document.CreateReplaceDescriptor()
chaineImpossible = "ireazfdnqsbfjqsghk"
' Marquer tous les ESPACES NORMAUX devant les caractères "»", "!", "?", ":" et ";".
RechRemp(0, 0) = "(" & chr(32) & ")([»!?:;])" : RechRemp(1, 0) = chaineImpossible & "&"
' Marquer tous les ESPACES INSÉCABLES devant les caractères "»", "!", "?", ":" et ";".
RechRemp(0, 1) = "(" & chr(160) & ")([»!?:;])" : RechRemp(1, 1) = chaineImpossible & "&"
' Supprimer tous les ESPACES MARQUÉS devant les caractères "»", "!", "?", ":" et ";".
RechRemp(0, 2) = chaineImpossible & "." : RechRemp(1, 2) = ""
' RAJOUTER un espace insécable devant les caractères "»", "!", "?", ":" et ";".
RechRemp(0, 3) = "([»!?:;])" : RechRemp(1, 3) = chr(160) & "&"
' *** Traitement spécifique du caractère "«" ***
' Marquer tous les espaces normaux APRÈS le caractère "«".
RechRemp(0, 4) = "(«)(" & chr(32) & ")" : RechRemp(1, 4) = "&" & chaineImpossible
' Marquer tous les espaces insécables APRÈS le caractère "«".
RechRemp(0, 5) = "(«)(" & chr(160) & ")" : RechRemp(1, 5) = "&" & chaineImpossible
' Supprimer tous les espaces marqués APRÈS le caractère "«".
RechRemp(0, 6) = "." & chaineImpossible : RechRemp(1, 6) = ""
' RAJOUTER un espace insécable APRÈS le caractère "«".
RechRemp(0, 7) = "(«)" : RechRemp(1, 7) = "&" & chr(160)
For i = 0 to 7
Replace.SearchRegularExpression = True
Replace.SearchString = RechRemp(0, i) : Replace.ReplaceString = RechRemp(1, i)
Document.replaceAll (Replace ())
Next i
End Sub
Typographiquement vôtre,