Difference between revisions of "FR/Documentation/BASIC Guide/Editing Text Documents"

From Apache OpenOffice Wiki
Jump to: navigation, search
m
 
Line 14: Line 14:
 
Dans l'API {{OOo}}, un objet <tt>TextCursor</tt> est comparable au curseur visible utilisé dans un document {{OOo}}. Il marque un certain point à l'intérieur d'un document texte et peut être déplacé dans diverses directions au moyen de commandes. Toutefois, les objets <tt>TextCursor</tt> disponibles dans {{OOo}} Basic ne doivent pas être confondus avec le curseur visible. Ils correspondent à deux choses différentes.
 
Dans l'API {{OOo}}, un objet <tt>TextCursor</tt> est comparable au curseur visible utilisé dans un document {{OOo}}. Il marque un certain point à l'intérieur d'un document texte et peut être déplacé dans diverses directions au moyen de commandes. Toutefois, les objets <tt>TextCursor</tt> disponibles dans {{OOo}} Basic ne doivent pas être confondus avec le curseur visible. Ils correspondent à deux choses différentes.
  
{{Documentation/Note|La terminologie diffère de celle de VBA : en ce qui concerne la portée de la fonction, l'objet Range de VBA peut être comparé à l'objet TextCursor de {{OOo}} et non (comme son nom porterait à le croire) à l'objet Range de {{OOo}}.}}
+
{{Note|La terminologie diffère de celle de VBA : en ce qui concerne la portée de la fonction, l'objet Range de VBA peut être comparé à l'objet TextCursor de {{OOo}} et non (comme son nom porterait à le croire) à l'objet Range de {{OOo}}.}}
  
 
L'objet TextCursor de {{OOo}}, par exemple, fournit des méthodes de navigation et de modification du texte qui sont incluses dans l'objet Range de VBA (MoveStart, MoveEnd, InsertBefore, InsertAfter, par exemple). Les équivalents correspondants de l'objet TextCursor de {{OOo}} sont décrits dans les sections suivantes.
 
L'objet TextCursor de {{OOo}}, par exemple, fournit des méthodes de navigation et de modification du texte qui sont incluses dans l'objet Range de VBA (MoveStart, MoveEnd, InsertBefore, InsertAfter, par exemple). Les équivalents correspondants de l'objet TextCursor de {{OOo}} sont décrits dans les sections suivantes.
Line 244: Line 244:
 
</source>
 
</source>
  
{{Documentation/Note|Le concept de base de la recherche et du remplacement dans {{OOo}} est comparable à celui qui est appliqué dans VBA. Les deux interfaces fournissent un objet qui permet de définir les propriétés de recherche et de remplacement. Cet objet est ensuite appliqué à la zone de texte appropriée pour effectuer l'action. Dans VBA, l'objet auxiliaire chargé de cela est accessible à l'aide de la propriété Find de l'objet Range ; dans {{OOo}} Basic, il faut appeler la méthode <tt>createSearchDescriptor</tt> ou <tt>createReplaceDescriptor</tt> de l'objet Document. Même les propriétés et méthodes de recherche disponibles sont différentes.}}
+
{{Note|Le concept de base de la recherche et du remplacement dans {{OOo}} est comparable à celui qui est appliqué dans VBA. Les deux interfaces fournissent un objet qui permet de définir les propriétés de recherche et de remplacement. Cet objet est ensuite appliqué à la zone de texte appropriée pour effectuer l'action. Dans VBA, l'objet auxiliaire chargé de cela est accessible à l'aide de la propriété Find de l'objet Range ; dans {{OOo}} Basic, il faut appeler la méthode <tt>createSearchDescriptor</tt> ou <tt>createReplaceDescriptor</tt> de l'objet Document. Même les propriétés et méthodes de recherche disponibles sont différentes.}}
  
 
Comme dans l'ancienne API {{OOo}}, la recherche et le remplacement de texte sont effectués via l'objet Document. Cependant, il existait auparavant un objet <tt>SearchSettings</tt> dédié à la définition des options de recherche, tandis que, dans la nouvelle API, les recherches sont désormais effectuées à l'aide d'un objet <tt>SearchDescriptor</tt> ou <tt>ReplaceDescriptor</tt> pour le remplacement automatique de texte. Ces objets ne couvrent pas uniquement les options, mais également le texte recherché et, le cas échéant, le texte de remplacement associé. Les objets Descriptor sont créés à l'aide de l'objet Document, complétés selon les requêtes concernées, puis transférés de nouveau à l'objet Document sous forme de paramètres passés dans les méthodes de recherche.
 
Comme dans l'ancienne API {{OOo}}, la recherche et le remplacement de texte sont effectués via l'objet Document. Cependant, il existait auparavant un objet <tt>SearchSettings</tt> dédié à la définition des options de recherche, tandis que, dans la nouvelle API, les recherches sont désormais effectuées à l'aide d'un objet <tt>SearchDescriptor</tt> ou <tt>ReplaceDescriptor</tt> pour le remplacement automatique de texte. Ces objets ne couvrent pas uniquement les options, mais également le texte recherché et, le cas échéant, le texte de remplacement associé. Les objets Descriptor sont créés à l'aide de l'objet Document, complétés selon les requêtes concernées, puis transférés de nouveau à l'objet Document sous forme de paramètres passés dans les méthodes de recherche.

Latest revision as of 18:01, 6 July 2018

doc OOo
Book.png

Dans la section précédente, nous avons abordé de nombreuses options dédiées à l'édition de documents texte axées sur les services com.sun.star.text.TextPortion et com.sun.star.text.Paragraph, qui permettent d'accéder aux portions de paragraphe et aux paragraphes. Ces services sont adaptés aux applications dans lesquelles le contenu du texte doit être édité par un passage dans une boucle. Pour les tâches plus complexes, Apache OpenOffice fournit le service com.sun.star.text.TextCursor, notamment pour le parcours d'un document en sens inverse, phrase par phrase ou mot par mot, plutôt que par objets TextPortions.

Objet TextCursor

Dans l'API Apache OpenOffice, un objet TextCursor est comparable au curseur visible utilisé dans un document Apache OpenOffice. Il marque un certain point à l'intérieur d'un document texte et peut être déplacé dans diverses directions au moyen de commandes. Toutefois, les objets TextCursor disponibles dans Apache OpenOffice Basic ne doivent pas être confondus avec le curseur visible. Ils correspondent à deux choses différentes.

Documentation note.png La terminologie diffère de celle de VBA : en ce qui concerne la portée de la fonction, l'objet Range de VBA peut être comparé à l'objet TextCursor de Apache OpenOffice et non (comme son nom porterait à le croire) à l'objet Range de Apache OpenOffice.

L'objet TextCursor de Apache OpenOffice, par exemple, fournit des méthodes de navigation et de modification du texte qui sont incluses dans l'objet Range de VBA (MoveStart, MoveEnd, InsertBefore, InsertAfter, par exemple). Les équivalents correspondants de l'objet TextCursor de Apache OpenOffice sont décrits dans les sections suivantes.

Navigation à l'intérieur d'un texte

Dans Apache OpenOffice Basic, l'objet TextCursor agit indépendamment du curseur visible dans un document texte. Un déplacement d'objet TextCursor commandé par le programme n'a aucune incidence sur le curseur visible. Plusieurs objets TextCursor peuvent même être ouverts pour le même document et utilisés à divers emplacements indépendamment les uns des autres.

Un objet TextCursor est créé à l'aide de l'appel createTextCursor :

Dim Doc As Object
Dim Cursor As Object
 
Doc = StarDesktop.CurrentComponent
Cursor = TextDocument.Text.createTextCursor()

L'objet Cursor créé de cette manière prend en charge le service com.sun.star.text.TextCursor, qui fournit toute une gamme de méthodes de navigation dans les documents texte. L'exemple suivant déplace d'abord l'objet TextCursor de dix caractères vers la gauche, puis le déplace de trois caractères vers la droite :

Cursor.goLeft(10, False)
Cursor.goRight(3, False)

Un objet TextCursor peut mettre en évidence toute une zone. On peut comparer cela à la mise en évidence d'un emplacement du texte à l'aide de la souris. Dans l'appel de fonction ci-dessus, le paramètre False indique si la zone traversée par le curseur doit être mise en évidence. Ainsi, dans l'exemple suivant, l'objet TextCursor

Cursor.goLeft(10, False)
Cursor.goRight(3, True)

commence par se déplacer de dix caractères vers la droite sans mise en évidence, puis revient trois caractères en arrière et met ces caractères en évidence. La zone mise en évidence par l'objet TextCursor commence donc après le septième caractère du texte et se termine après le dixième.

Les principales méthodes fournies par le service com.sun.star.text.TextCursor pour la navigation sont les suivantes :

goLeft (Count, Expand)
déplacement de Count caractères vers la gauche.
goRight (Count, Expand)
déplacement de Count caractères vers la droite.
gotoStart (Expand)
placement au début du document texte.
gotoEnd (Expand)
placement à la fin du document texte.
gotoRange (TextRange, Expand)
placement sur l'objet TextRange spécifié.
gotoStartOfWord (Expand)
placement au début du mot actif.
gotoEndOfWord (Expand)
placement à la fin du mot actif.
gotoNextWord (Expand)
placement au début du mot suivant.
gotoPreviousWord (Expand)
placement au début du mot précédent.
isStartOfWord ()
retourne True si l'objet TextCursor se trouve au début d'un mot.
isEndOfWord ()
retourne True si l'objet TextCursor se trouve à la fin d'un mot.
gotoStartOfSentence (Expand)
placement au début de la phrase active.
gotoEndOfSentence (Expand)
placement à la fin de la phrase active.
gotoNextSentence (Expand)
placement à la fin de la phrase suivante.
gotoPreviousSentence (Expand)
placement au début de la phrase précédente.
isStartOfSentence ()
retourne True si l'objet TextCursor se trouve au début d'une phrase.
isEndOfSentence ()
retourne True si l'objet TextCursor se trouve à la fin d'une phrase.
gotoStartOfParagraph (Expand)
placement au début du paragraphe actif.
gotoEndOfParagraph (Expand)
placement à la fin du paragraphe actif.
gotoNextParagraph (Expand)
placement au début du paragraphe suivant.
gotoPreviousParagraph (Expand)
placement au début du paragraphe précédent.
isStartOfParagraph ()
retourne True si l'objet TextCursor se trouve au début d'un paragraphe.
isEndOfParagraph ()
retourne True si l'objet TextCursor se trouve à la fin d'un paragraphe.

Le texte est découpé en phrases en fonction des symboles de phrase. Par exemple, les points sont interprétés comme des symboles indiquant la fin des phrases.

Le paramètre Expand est une valeur booléenne indiquant si la zone traversée lors du déplacement doit être mise en évidence. Toutes les méthodes de navigation retournent un paramètre indiquant si la navigation s'est effectuée correctement ou si l'action s'est terminée faute de texte.

Les méthodes répertoriées ci-dessous permettent d'éditer des zones en évidence à l'aide d'un objet TextCursor et prennent en charge le service com.sun.star.text.TextCursor :

collapseToStart ()
réinitialise la mise en évidence et positionne l'objet TextCursor au début de la zone précédemment mise en évidence.
collapseToEnd ()
réinitialise la mise en évidence et positionne l'objet TextCursor à la fin de la zone précédemment mise en évidence.
isCollapsed ()
retourne True si l'objet TextCursor ne recouvre aucune zone mise en évidence.

Formatage du texte avec TextCursor

Le service com.sun.star.text.TextCursor prend en charge toutes les propriétés de caractère et de paragraphe présentées au début de ce chapitre.

L'exemple suivant illustre l'association de ces propriétés à un objet TextCursor. Il parcourt un document complet et met en gras le premier mot de chaque phrase.

Dim Doc As Object   
Dim Cursor As Object
Dim Proceed As Boolean
 
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor
 
Do 
  Cursor.gotoEndOfWord(True)
  Cursor.CharWeight = com.sun.star.awt.FontWeight.BOLD
  Proceed = Cursor.gotoNextSentence(False)
  Cursor.gotoNextWord(False)
Loop While Proceed

Un objet Document est d'abord créé pour le texte qui vient d'être ouvert. L'exemple parcourt ensuite par itérations le texte entier, phrase par phrase, met en évidence le premier mot et le formate en gras.

Extraction et modification du contenu d'un texte

Si un objet TextCursor contient une zone mise en évidence, ce texte est accessible à l'aide de la propriété String de l'objet TextCursor. L'exemple suivant utilise la propriété String pour afficher les premiers mots d'une phrase dans une boîte de message :

Dim Doc As Object   
Dim Cursor As Object
Dim Proceed As Boolean
 
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor
 
Do 
  Cursor.gotoEndOfWord(True)
  MsgBox Cursor.String
  Proceed = Cursor.gotoNextSentence(False)
  Cursor.gotoNextWord(False)
Loop While Proceed

Le premier mot de chaque phrase peut être modifié de la même manière à l'aide de la propriété String :

Dim Doc As Object   
Dim Cursor As Object
Dim Proceed As Boolean
 
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor
 
Do 
  Cursor.gotoEndOfWord(True)
  Cursor.String = "Ups"
  Proceed = Cursor.gotoNextSentence(False)
  Cursor.gotoNextWord(False)
Loop While Proceed

Si l'objet TextCursor contient une zone en surbrillance, une assignation de la propriété String la remplace par le nouveau texte. Si aucune zone n'est mise en évidence, le texte est inséré à la position de l'objet TextCursor.

Insertion de codes de contrôle

Dans certaines situations, la partie à modifier n'est pas le texte du document mais sa structure. Apache OpenOffice fournit des codes de contrôle à cet usage. Ces codes s'insèrent dans le texte et influent sur sa structure. Les codes de contrôle sont définis dans le groupe de constantes com.sun.star.text.ControlCharacter. Les codes de contrôle disponibles dans Apache OpenOffice sont les suivants :

PARAGRAPH_BREAK
saut de paragraphe.
LINE_BREAK
retour à la ligne à l'intérieur d'un paragraphe.
SOFT_HYPHEN
point possible de coupure de mot.
HARD_HYPHEN
point obligatoire de coupure de mot.
HARD_SPACE
espace protégé qui ne sera ni étendu, ni compressé dans un texte justifié.

Pour insérer des codes de contrôle, non seulement le curseur, mais également les objets de document texte associés sont nécessaires. L'exemple suivant insère un saut de paragraphe après le 20e caractère d'un texte :

Dim Doc As Object   
Dim Cursor As Object
Dim Proceed As Boolean
 
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor
Cursor.goRight(20, False)
Doc.Text.insertControlCharacter(Cursor, _
    com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)

Le paramètre False passé dans l'appel de la méthode insertControlCharacter assure que la zone mise en évidence par l'objet TextCursor est conservée après l'insertion. Si le paramètre True est passé ici, insertControlCharacter remplace le texte actif.

Recherche de portions de texte

Il est souvent nécessaire de rechercher un terme particulier dans un texte et de l'éditer. Tous les documents Apache OpenOffice fournissent pour cela une interface spéciale qui fonctionne toujours selon le même principe : avant chaque recherche, il faut créer ce que l'on appelle couramment un objet SearchDescriptor. Il définit ce que Apache OpenOffice recherche dans un document. Un objet SearchDescriptor est un objet prenant en charge le service com.sun.star.util. SearchDescriptor. Il peut être créé à l'aide de la méthode createSearchDescriptor d'un document :

Dim SearchDesc As Object
SearchDesc = Doc.createSearchDescriptor

Une fois l'objet SearchDescriptor créé, il reçoit le texte à rechercher :

SearchDesc.searchString="any text"

Du point de vue de son fonctionnement, l'objet SearchDescriptor est comparable à la boîte de dialogue de recherche de Apache OpenOffice. Comme dans cette boîte de dialogue, les paramètres nécessaires à une recherche peuvent être définis dans l'objet SearchDescriptor.

Les propriétés sont fournies par le service com.sun.star.util.SearchDescriptor :

SearchBackwards (Boolean)
effectue la recherche en parcourant le texte en arrière et non en avant.
SearchCaseSensitive (Boolean)
distingue les majuscules des minuscules lors de la recherche.
SearchRegularExpression (Boolean)
traite la chaîne à rechercher comme une expression régulière.
SearchStyles (Boolean)
recherche dans le texte le modèle de paragraphe spécifié.
SearchWords (Boolean)
ne recherche que des mots entiers.

La fonction Apache OpenOffice SearchSimilarity (ou "correspondance floue") est également disponible dans Apache OpenOffice Basic. Avec cette fonction, Apache OpenOffice recherche une expression similaire, mais pas nécessairement exactement identique à l'expression spécifiée. Vous pouvez définir individuellement le nombre de caractères supplémentaires, supprimés ou modifiés de ces expressions. Les propriétés associées au service com.sun.star.util.SearchDescriptor sont les suivantes :

SearchSimilarity (Boolean)
effectue une recherche de similarité.
SearchSimilarityAdd (Short)
nombre de caractères pouvant être ajoutés dans une recherche de similarité.
SearchSimilarityExchange (Short)
nombre de caractères pouvant être remplacés dans une recherche de similarité.
SearchSimilarityRemove (Short)
nombre de caractères pouvant être supprimés dans une recherche de similarité.
SearchSimilarityRelax (Boolean)
tient compte simultanément de toutes les règles de déviation pour l'expression recherchée.

Une fois l'objet SearchDescriptor paramétré de façon appropriée, il peut être appliqué au document texte. Pour cela, les documents Apache OpenOffice fournissent les méthodes findFirst et findNext :

Found = Doc.findFirst (SearchDesc)
 
Do While Found
  ' Suchergebnis bearbeiten
  Found = Doc.findNext( Found.End, Search)
Loop

Cet exemple recherche toutes les correspondances à l'intérieur d'une boucle et retourne un objet TextRange, qui fait référence au passage de texte trouvé.

Exemple : recherche de similarité

Cet exemple illustre la recherche du terme "turnover" dans un texte et met le résultat en gras. Une recherche de similarité permet de trouver non seulement le terme "turnover", mais également sa forme plurielle "turnovers", ainsi que ses variantes, telles que "turnover's". Les expressions trouvées diffèrent au maximum de deux lettres de l'expression recherchée :

Dim SearchDesc As Object
Dim Doc As Object
 
Doc = StarDesktop.CurrentComponent
SearchDesc = Doc.createSearchDescriptor
SearchDesc.SearchString="turnover"
SearchDesc.SearchSimilarity = True
SearchDesc.SearchSimilarityAdd = 2
SearchDesc.SearchSimilarityExchange = 2
SearchDesc.SearchSimilarityRemove = 2
SearchDesc.SearchSimilarityRelax = False
Found = Doc.findFirst (SearchDesc)
 
Do While Found
  Found.CharWeight = com.sun.star.awt.FontWeight.BOLD
  Found = Doc.findNext( Found.End, Search)
Loop
Documentation note.png Le concept de base de la recherche et du remplacement dans Apache OpenOffice est comparable à celui qui est appliqué dans VBA. Les deux interfaces fournissent un objet qui permet de définir les propriétés de recherche et de remplacement. Cet objet est ensuite appliqué à la zone de texte appropriée pour effectuer l'action. Dans VBA, l'objet auxiliaire chargé de cela est accessible à l'aide de la propriété Find de l'objet Range ; dans Apache OpenOffice Basic, il faut appeler la méthode createSearchDescriptor ou createReplaceDescriptor de l'objet Document. Même les propriétés et méthodes de recherche disponibles sont différentes.

Comme dans l'ancienne API Apache OpenOffice, la recherche et le remplacement de texte sont effectués via l'objet Document. Cependant, il existait auparavant un objet SearchSettings dédié à la définition des options de recherche, tandis que, dans la nouvelle API, les recherches sont désormais effectuées à l'aide d'un objet SearchDescriptor ou ReplaceDescriptor pour le remplacement automatique de texte. Ces objets ne couvrent pas uniquement les options, mais également le texte recherché et, le cas échéant, le texte de remplacement associé. Les objets Descriptor sont créés à l'aide de l'objet Document, complétés selon les requêtes concernées, puis transférés de nouveau à l'objet Document sous forme de paramètres passés dans les méthodes de recherche.

Remplacement de portions de texte

Tout comme la fonction de recherche, la fonction de remplacement de Apache OpenOffice est disponible dans Apache OpenOffice Basic. Les deux fonctions sont traitées de manière identique. Un objet spécial stockant les paramètres du processus est tout d'abord nécessaire au processus de remplacement. Il s'appelle ReplaceDescriptor et prend en charge le service com.sun.star.util.ReplaceDescriptor. Toutes les propriétés de l'objet SearchDescriptor décrites dans le paragraphe précédent sont également prises en charge par ReplaceDescriptor.. Par exemple, au cours d'un processus de remplacement, la distinction entre majuscules et minuscules peut également être activée et désactivée et il est possible d'effectuer des recherches de similarité.

L'exemple suivant illustre l'utilisation d'objets ReplaceDescriptors dans une recherche sur un document Apache OpenOffice.

Dim I As Long
Dim Doc As Object
Dim Replace As Object
Dim BritishWords(5) As String
Dim USWords(5) As String
 
BritishWords() = Array("colour", "neighbour", "centre", "behaviour", _
   "metre", "through")
USWords() = Array("color", "neighbor", "center", "behavior", _
   "meter", "thru")
 
Doc = StarDesktop.CurrentComponent
Replace = Doc.createReplaceDescriptor
 
For O = 0 To 5
  Replace.SearchString = BritishWords(I)
  Replace.ReplaceString = USWords(I)
  Doc.replaceAll(Replace)
Next n

Les expressions de recherche et de remplacement sont définies à l'aide des propriétés SearchString et ReplaceString des objets ReplaceDescriptors. Le processus réel de remplacement est finalement implémenté à l'aide de la méthode replaceAll de l'objet Document, qui remplace toutes les occurrences de l'expression recherchée.

Exemple : recherche et remplacement de texte avec des expressions régulières

La fonction de remplacement de Apache OpenOffice est particulièrement efficace lorsqu'elle est associée à des expressions régulières. Ces derniers permettent de définir une expression de recherche variable avec des substituants et des caractères spéciaux au lieu d'une valeur fixe.

Les expressions régulières prises en charge par Apache OpenOffice sont décrites dans l'aide en ligne de Apache OpenOffice. Quelques exemples sont répertoriés ci-dessous :

  • Un point à l'intérieur d'une expression à rechercher remplace tout caractère. L'expression sh.rt peut ainsi s'appliquer à la fois à shirt et à short.
  • Le caractère ^ marque le début d'un paragraphe. Vous pouvez ainsi toutes les occurrences du nom Peter situées au début d'un paragraphe à l'aide de l'expression de recherche ^Peter.
  • Le caractère $ marque la fin d'un paragraphe. Vous pouvez ainsi trouver toutes les occurrences du nom Peter situées à la fin d'un paragraphe à l'aide de l'expression de recherche Peter$.
  • Un astérisque (*) indique que le caractère précédent peut être répété plusieurs fois. Il peut être combiné avec le point en tant que substituant de tout caractère. L'expression temper.*e permet, par exemple, de rechercher les expressions temperance et temperature.

L'exemple suivant illustre la suppression de toutes les lignes vides d'un document texte à l'aide d'expressions régulières ^$ :

Dim Doc As Object
Dim Replace As Object
Dim I As Long
 
Doc = StarDesktop.CurrentComponent
Replace = Doc.createReplaceDescriptor
Replace.SearchRegularExpression = True
Replace.SearchString = "^$"
Replace.ReplaceString = ""
 
Doc.replaceAll(Replace)
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools