Difference between revisions of "NL/Documentation/BASIC Guide/Editing Text Documents"
(→Searching for Text Portions) |
(→Zoeken naar gedeelten van de tekst) |
||
Line 215: | Line 215: | ||
</source> | </source> | ||
− | Met betrekking tot zijn functie | + | Met betrekking tot zijn functie kan de <tt>SearchDescriptor</tt> het best worden vergeleken met het dialoogvenster Zoeken uit {{OOo}}. Op eenzelfde manier als in het venster Zoeken, kunnen de instellingen voor de zoekactie worden ingesteld in het object <tt>SearchDescriptor</tt>. |
De eigenschappen worden verschaft door de service <idl>com.sun.star.util.SearchDescriptor</idl>: | De eigenschappen worden verschaft door de service <idl>com.sun.star.util.SearchDescriptor</idl>: | ||
− | ;<tt>SearchBackwards (Boolean)</tt>: | + | ;<tt>SearchBackwards (Boolean)</tt>:zoekt achterwaarts dor de tekst in plaats van naar voren. |
− | ;<tt>SearchCaseSensitive (Boolean)</tt>: | + | ;<tt>SearchCaseSensitive (Boolean)</tt>:houdt rekening met hoofd- en kleine letters tijdens het zoeken. |
− | ;<tt>SearchRegularExpression (Boolean)</tt>: | + | ;<tt>SearchRegularExpression (Boolean)</tt>:behandelt de zoekuitdrukking als een reguliere uitdrukking. |
− | ;<tt>SearchStyles (Boolean)</tt>: | + | ;<tt>SearchStyles (Boolean)</tt>:zoekt door de tekst naar het gespecificeerde alineaopmaakprofiel. |
− | ;<tt>SearchWords (Boolean)</tt>: | + | ;<tt>SearchWords (Boolean)</tt>:zoekt alleen naar hele woorden. |
− | + | De functie <tt>SearchSimilarity</tt> (of “vage overeenkomst”) van {{OOo}} is ook beschikbaar in {{OOo}} BASIC. Met deze functie, zoekt {{OOo}} naar een uitdrukking die overeenkomt, maar niet geheel gelijk is aan de zoek-uitdrukking. Het aantal toegevoegde, weggelaten of aangepaste tekens voor deze uitdrukking kan individueel worden gedefinieerd. Hier zijn de geassocieerde eigenschappen van de service <tt>com.sun.star.util.SearchDescriptor</tt>: | |
− | ;<tt>SearchSimilarity (Boolean)</tt>: | + | ;<tt>SearchSimilarity (Boolean)</tt>:voert een zoekactie naar overeenkomsten uit. |
− | ;<tt>SearchSimilarityAdd (Short)</tt>: | + | ;<tt>SearchSimilarityAdd (Short)</tt>:aantal tekens dat mag worden toegevoegd voor een zoekactie op overeenkomsten. |
− | ;<tt>SearchSimilarityExchange (Short)</tt>: | + | ;<tt>SearchSimilarityExchange (Short)</tt>:aantal tekens dat mag worden vervangen als deel van een zoekactie op overeenkomsten. |
− | ;<tt>SearchSimilarityRemove (Short)</tt>: | + | ;<tt>SearchSimilarityRemove (Short)</tt>:aantal tekens dat mag worden verwijderd als deel van een zoekactie op overeenkomsten. |
− | ;<tt>SearchSimilarityRelax (Boolean)</tt>: | + | ;<tt>SearchSimilarityRelax (Boolean)</tt>:houdt gelijktijdig rekening met alle afwijkende regels voor de zoekuitdrukking. |
− | + | Als de <tt>SearchDescriptor</tt> eenmaal is voorbereid zoals gewenst, kan hij worden toegepast op het tekstdocument. De documenten van {{OOo}} verschaffen de methoden <tt>findFirst</tt> en <tt>findNext</tt> voor dit doel: | |
<source lang="oobas"> | <source lang="oobas"> | ||
− | + | Gevonden = Doc.findFirst (SearchDesc) | |
− | Do Until IsNull( | + | Do Until IsNull(Gevonden) |
− | ' | + | ' Bewerk de resultaten van de zoekactie... |
− | + | Gevonden = Doc.findNext(Gevonden.End, SearchDesc) | |
Loop | Loop | ||
</source> | </source> | ||
− | + | Het voorbeeld vindt alle overeenkomsten in een lus en geeft een object <tt>TextRange</tt> weer, dat refereert aan de gevonden passage in de tekst. | |
− | === | + | === Voorbeeld: zoekactie naar overeenkomsten === |
− | + | Dit voorbeeld toont hoe een tekst kan worden doorzocht naar het woord “verandering” en het resultaat opgemaakt als type Vet. Een zoekactie naar overeenkomsten wordt gebruikt zodat niet alleen het woord “verandering”, maar ook de meervoudsvorm "veranderingen" en vervoegingen zoals "verandering's" worden gevonden. De gevonden uitdrukkingen verschillen tot maximaal twee letters van de zoek-uitdrukking: | |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 256: | Line 256: | ||
Doc = ThisComponent | Doc = ThisComponent | ||
SearchDesc = Doc.createSearchDescriptor | SearchDesc = Doc.createSearchDescriptor | ||
− | SearchDesc.SearchString=" | + | SearchDesc.SearchString="verandering" |
SearchDesc.SearchSimilarity = True | SearchDesc.SearchSimilarity = True | ||
SearchDesc.SearchSimilarityAdd = 2 | SearchDesc.SearchSimilarityAdd = 2 | ||
Line 264: | Line 264: | ||
Found = Doc.findFirst (SearchDesc) | Found = Doc.findFirst (SearchDesc) | ||
− | Do Until IsNull( | + | Do Until IsNull(Gevonden) |
− | + | Gevonden.CharWeight = com.sun.star.awt.FontWeight.BOLD | |
− | + | Gevonden = Doc.findNext(Gevonden.End, SearchDesc) | |
Loop | Loop | ||
</source> | </source> |
Revision as of 16:14, 11 February 2013
- De structuur van tekstdocumenten
- Tekstdocumenten bewerken
- Meer dan alleen tekst
In het vorige gedeelte is al een groot bereik aan opties besproken voor het bewerken van tekstdocumenten, geconcentreerd op de services com.sun.star.text.TextPortion en com.sun.star.text.Paragraph, welke toegang verlenen tot zowel de alinea's als de alinea-gedeelten. Deze services zijn nuttig voor toepassingen waarin de inhoud van een tekst moet worden bewerkt in één doorloop via een lus. Dit is echter voor veel problemen niet voldoende. Apache OpenOffice verschaft de service com.sun.star.text.TextCursor voor meer gecompliceerde taken, inclusief achterwaartse navigatie binnen een document of navigatie gebaseerd op zinnen en woorden in plaats van op TekstDelen.
De TextCursor
Een TextCursor in de API van Apache OpenOffice is te vergelijken met de zichtbare cursor die wordt gebruikt in een document van Apache OpenOffice. Het markeert een bepaald punt binnen een tekst en waar vandaan kan worden genavigeerd in diverse richtingen met behulp van opdrachten. De beschikbare objecten tt>TextCursor</tt> in Apache OpenOffice BASIC moeten echter niet verward worden met de zichtbare cursor. Dit zijn twee heel verschillende dingen.
Het object TextCursor in Apache OpenOffice, bijvoorbeeld, verschaft methoden om te navigeren en wijzigen van tekst die zijn opgenomen in het object Range in VBA (bijvoorbeeld, MoveStart, MoveEnd, InsertBefore, InsertAfter). De corresponderende onderdelen van het TextCursor object in Apache OpenOffice worden beschreven in het volgende gedeelte.
Het object TextCursor in Apache OpenOffice BASIC werkt onafhankelijk van de zichtbare cursor in een tekstdocument. Een programma-gecontroleerde positie-verandering van een TextCursor object heeft geen enkel effect op de zichtbare cursor. Diverse objecten TextCursor kunnen zelfs geopend zijn voor hetzelfde document en gebruikt op verschillende posities, welke onafhankelijk van elkaar zijn.
Een object TextCursor wordt gemaakt met behulp van de aanroep createTextCursor:
Dim Doc As Object Dim Cursor As Object Doc = ThisComponent Cursor = Doc.Text.createTextCursor()
Het op deze manier gemaakte object Cursor ondersteunt de service com.sun.star.text.TextCursor, welke op zijn beurt een groot scala aan methoden voor het navigeren binnen tekstdocumenten verschaft. Het volgende voorbeeld verplaatst eerst de TextCursor tien tekens naar links en dan drie tekens naar rechts:
Cursor.goLeft(10, False) Cursor.goRight(3, False)
Een TextCursor kan een compleet gebied accentueren. Dit kan worden vergeleken met het accentueren van een punt in de tekst, met behulp van de muis. De parameter False in de vorige aanroep van de functie specificeert of het gebied waar de cursor zich over verplaatst, wordt geaccentueerd. Bijvoorbeeld, de TextCursor in het volgende voorbeeld
Cursor.goRight(10, False) Cursor.goLeft(3, True)
verplaatst eerst tien tekens naar links zonder accentuering en gaat dan drie tekens terug en accentueert dat. Het geaccentueerde gebied door de TextCursor begint daarom na het zevende teken in de tekst en eindigt na het tiende teken.
Hier zijn de centrale methoden die de service com.sun.star.text.TextCursor verschaft voor navigatie:
- goLeft (Aantal, Uitgebreid)
- springt Aantal tekens naar links.
- goRight (Aantal, Uitgebreid)
- springt Aantal tekens naar rechts.
- gotoStart (Uitgebreid)
- springt naar het begin van het tekstdocument.
- gotoEnd (Uitgebreid)
- springt naar het einde van het tekstdocument.
- gotoRange (TekstBereik, Uitgebreid)
- springt naar het opgegeven object TekstBereik.
- gotoStartOfWord (Uitgebreid)
- springt naar het begin van het huidige woord.
- gotoEndOfWord (Uitgebreid)
- springt naar het einde van het huidige woord.
- gotoNextWord (Uitgebreid)
- springt naar het begin van het volgende woord.
- gotoPreviousWord (Uitgebreid)
- springt naar het begin van het vorige woord.
- isStartOfWord ()
- geeft True terug als de TextCursor aan het begin van een woord staat.
- isEndOfWord ()
- geeft True terug als de TextCursor aan het einde van een woord staat.
- gotoStartOfSentence (Uitgebreid)
- springt naar het begin van de huidige zin.
- gotoEndOfSentence (Uitgebreid)
- springt naar het einde van de huidige zin.
- gotoNextSentence (Uitgebreid)
- springt naar het begin van de volgende zin.
- gotoPreviousSentence (Uitgebreid)
- springt naar het begin van de vorige zin.
- isStartOfSentence ()
- geeft True terug als de TextCursor aan het begin van een zin staat.
- isEndOfSentence ()
- geeft True als de TextCursor aan het einde van een zin staat.
- gotoStartOfParagraph (Uitgebreid)
- springt naar het begin van de huidige alinea.
- gotoEndOfParagraph (Uitgebreid)
- springt naar het einde van de huidige alinea.
- gotoNextParagraph (Uitgebreid)
- springt naar het begin van de volgende alinea.
- gotoPreviousParagraph (Uitgebreid)
- springt naar het begin van de vorige alinea.
- isStartOfParagraph ()
- geeft True terug als de TextCursor aan het begin van een alinea staat.
- isEndOfParagraph ()
- geeft True terug als de TextCursor aan het einde van een alinea staat.
De tekst wordt onderverdeeld in zinnen op basis van de symbolen voor zinnen. Punten worden bijvoorbeeld geïnterpreteerd als symbolen die het einde van zinnen aanduiden. (In het Engels, ten minste, moeten zij worden gevolgd door een spatie, tab of return om dit te laten werken.)
De parameter Expand is een Booleaanse waarde die specificeert of het gebied dat wordt gepasseerd tijdens het navigeren moet worden geaccentueerd. Alle methoden voor navigatie geven verder een parameter met Booleaanse waarde weer die aangeeft of de navigatie succesvol was of dat de actie werd beëindigd door gebrek aan tekst. Het volgende is een lijst van verschillende methoden voor het bewerken van geaccentueerde gebieden met behulp van een TextCursor en die tevens de service com.sun.star.text.TextCursor ondersteunen:
- collapseToStart ()
- herstelt het accentueren en plaatst de TextCursor aan het begin van het eerder geaccentueerde gebied.
- collapseToEnd ()
- herstelt het accentueren en plaatst de TextCursor aan het einde van het eerder geaccentueerde gebied.
- isCollapsed ()
- geeft True terug als de TextCursor momenteel geen accentuering bevat.
Opmaken van Tekst met TextCursor
De service com.sun.star.text.TextCursor ondersteunt alle teken- en alinea-eigenschappen die werden gepresenteerd aan het begin van dit hoofdstuk.
Het volgende voorbeeld toont hoe deze kunnen worden gebruikt in samenwerking met een TextCursor. Het gaat door een compleet document en maakt het eerste woord van elke zin op als type Vet.
Dim Doc As Object Dim Cursor As Object Dim Doorgaan As Boolean Doc = ThisComponent Cursor = Doc.Text.createTextCursor Do Cursor.gotoEndOfWord(True) Cursor.CharWeight = com.sun.star.awt.FontWeight.BOLD Doorgaan = Cursor.gotoNextSentence(False) Cursor.gotoNextWord(False) Loop While Doorgaan
Het voorbeeld maakt eerst een documentobject voor de tekst die zojuist geopend werd. Dan doorloopt het de gehele tekst, zin na zin, en accentueert elk eerste woord en maakt dat op in Vet.
Terugvinden en wijzigen van de inhoud van tekst
Als een TextCursor een geaccentueerd gebied bevat, dan is deze tekst beschikbaar door middel van de eigenschap String van het object TextCursor. Het volgende voorbeeld gebruikt de eigenschap String om het eerste woord van een zin in een berichtenvenster weer te geven:
Dim Doc As Object Dim Cursor As Object Dim Doorgaan As Boolean Doc = ThisComponent Cursor = Doc.Text.createTextCursor Do Cursor.gotoEndOfWord(True) MsgBox Cursor.String Doorgaan = Cursor.gotoNextSentence(False) Cursor.gotoNextWord(False) Loop While Doorgaan
Het eerste woord van elke zin kan op dezelfde manier worden gewijzigd met behulp van de eigenschap String:
Dim Doc As Object Dim Cursor As Object Dim Doorgaan As Boolean Doc = ThisComponent Cursor = Doc.Text.createTextCursor Do Cursor.gotoEndOfWord(True) Cursor.String = "Oeps" Proceed = Cursor.gotoNextSentence(False) Cursor.gotoNextWord(False) Loop While Doorgaan
Als de TextCursor een geaccentueerd gebied bevat, vervangt een toewijzing aan de eigenschap String hierdoor de oude tekst. Als er geen geaccentueerd gebied is, wordt de tekst ingevoegd op de huidige positie van TextCursor.
Invoegen van codes voor beheer
In sommige situaties is het niet de echte tekst, maar meer de structuur die aangepast moet worden. Apache OpenOffice verschaft voor dit doel codes voor beheer. Deze worden ingevoegd in de tekst en beïnvloeden diens structuur. De codes voor beheer worden gedefinieerd in de groep van constanten com.sun.star.text.ControlCharacter. De volgende codes voor beheer zijn beschikbaar in Apache OpenOffice:
- PARAGRAPH_BREAK
- alineaeinde.
- LINE_BREAK
- regeleinde binnen een alinea.
- SOFT_HYPHEN
- mogelijk punt voor afbreken van woord.
- HARD_HYPHEN
- verplicht punt voor afbreken van woord.
- HARD_SPACE
- beveiligde spatie die niet wordt uitgestrekt of gecomprimeerd in uitgevulde tekst.
U heeft niet alleen de cursor, maar ook de geassocieerde tekst-objecten nodig om codes voor beheer in te kunnen voegen. Het volgende voorbeeld voegt een alinea in na het 20e teken van een tekst:
Dim Doc As Object Dim Cursor As Object Dim Doorgaan As Boolean Doc = ThisComponent Cursor = Doc.Text.createTextCursor Cursor.goRight(20, False) Doc.Text.insertControlCharacter(Cursor, _ com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
De parameter False in de aanroep van de methode insertControlCharacter zorgt er voor dat het huidige door de TextCursor geaccentueerde gebied blijft behouden na het invoegen. Als hier de parameter True wordt gebruikt, dan vervangt insertControlCharacter de huidige tekst.
Zoeken naar gedeelten van de tekst
In veel gevallen is het zo dat een tekst moet worden doorzocht naar een bepaalde term om op dat bepaalde punt te worden bewerkt. Alle documenten van Apache OpenOfficeverschaffen een speciale interface voor dat doel en deze interface functioneert altijd overeenkomstig hetzelfde principe: Voordat een zoekactie, die gewoonlijk wordt aangeduid als SearchDescriptor kan plaatsvinden, moet die eerst worden gemaakt. Deze definieert waarnaar Apache OpenOffice moet zoeken in een document. Een SearchDescriptor is een object dat de service com.sun.star.util.SearchDescriptor ondersteund en kan worden gemaakt door middel van de methode createSearchDescriptor van een document:
Dim SearchDesc As Object SearchDesc = Doc.createSearchDescriptor
Als de SearchDescriptor eenmaal is gemaakt, ontvangt het de tekst die moet worden doorzocht:
SearchDesc.searchString="elke tekst"
Met betrekking tot zijn functie kan de SearchDescriptor het best worden vergeleken met het dialoogvenster Zoeken uit Apache OpenOffice. Op eenzelfde manier als in het venster Zoeken, kunnen de instellingen voor de zoekactie worden ingesteld in het object SearchDescriptor.
De eigenschappen worden verschaft door de service com.sun.star.util.SearchDescriptor:
- SearchBackwards (Boolean)
- zoekt achterwaarts dor de tekst in plaats van naar voren.
- SearchCaseSensitive (Boolean)
- houdt rekening met hoofd- en kleine letters tijdens het zoeken.
- SearchRegularExpression (Boolean)
- behandelt de zoekuitdrukking als een reguliere uitdrukking.
- SearchStyles (Boolean)
- zoekt door de tekst naar het gespecificeerde alineaopmaakprofiel.
- SearchWords (Boolean)
- zoekt alleen naar hele woorden.
De functie SearchSimilarity (of “vage overeenkomst”) van Apache OpenOffice is ook beschikbaar in Apache OpenOffice BASIC. Met deze functie, zoekt Apache OpenOffice naar een uitdrukking die overeenkomt, maar niet geheel gelijk is aan de zoek-uitdrukking. Het aantal toegevoegde, weggelaten of aangepaste tekens voor deze uitdrukking kan individueel worden gedefinieerd. Hier zijn de geassocieerde eigenschappen van de service com.sun.star.util.SearchDescriptor:
- SearchSimilarity (Boolean)
- voert een zoekactie naar overeenkomsten uit.
- SearchSimilarityAdd (Short)
- aantal tekens dat mag worden toegevoegd voor een zoekactie op overeenkomsten.
- SearchSimilarityExchange (Short)
- aantal tekens dat mag worden vervangen als deel van een zoekactie op overeenkomsten.
- SearchSimilarityRemove (Short)
- aantal tekens dat mag worden verwijderd als deel van een zoekactie op overeenkomsten.
- SearchSimilarityRelax (Boolean)
- houdt gelijktijdig rekening met alle afwijkende regels voor de zoekuitdrukking.
Als de SearchDescriptor eenmaal is voorbereid zoals gewenst, kan hij worden toegepast op het tekstdocument. De documenten van Apache OpenOffice verschaffen de methoden findFirst en findNext voor dit doel:
Gevonden = Doc.findFirst (SearchDesc) Do Until IsNull(Gevonden) ' Bewerk de resultaten van de zoekactie... Gevonden = Doc.findNext(Gevonden.End, SearchDesc) Loop
Het voorbeeld vindt alle overeenkomsten in een lus en geeft een object TextRange weer, dat refereert aan de gevonden passage in de tekst.
Voorbeeld: zoekactie naar overeenkomsten
Dit voorbeeld toont hoe een tekst kan worden doorzocht naar het woord “verandering” en het resultaat opgemaakt als type Vet. Een zoekactie naar overeenkomsten wordt gebruikt zodat niet alleen het woord “verandering”, maar ook de meervoudsvorm "veranderingen" en vervoegingen zoals "verandering's" worden gevonden. De gevonden uitdrukkingen verschillen tot maximaal twee letters van de zoek-uitdrukking:
Dim SearchDesc As Object Dim Doc As Object Doc = ThisComponent SearchDesc = Doc.createSearchDescriptor SearchDesc.SearchString="verandering" SearchDesc.SearchSimilarity = True SearchDesc.SearchSimilarityAdd = 2 SearchDesc.SearchSimilarityExchange = 2 SearchDesc.SearchSimilarityRemove = 2 SearchDesc.SearchSimilarityRelax = False Found = Doc.findFirst (SearchDesc) Do Until IsNull(Gevonden) Gevonden.CharWeight = com.sun.star.awt.FontWeight.BOLD Gevonden = Doc.findNext(Gevonden.End, SearchDesc) Loop
As in the old API from Apache OpenOffice, searching and replacing text in the new API is also performed using the document object. Whereas previously there was an object called SearchSettings especially for defining the search options, in the new object searches are now performed using a SearchDescriptor or ReplaceDescriptor object for automatically replacing text. These objects cover not only the options, but also the current search text and, if necessary, the associated text replacement. The descriptor objects are created using the document object, completed in accordance with the relevant requests, and then transferred back to the document object as parameters for the search methods.
Replacing Text Portions
Just as with the search function, the replacement function from Apache OpenOffice is also available in Apache OpenOffice Basic. The two functions are handled identically. A special object which records the parameters for the process is also first needed for a replacement process. It is called a ReplaceDescriptor and supports the com.sun.star.util.ReplaceDescriptor service. All the properties of the SearchDescriptor described in the previous paragraph are also supported by ReplaceDescriptor. For example, during a replacement process, case sensitivity can also be activated and deactivated, and similarity searches can be performed.
The following example demonstrates the use of ReplaceDescriptors for a search within a Apache OpenOffice document.
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 = ThisComponent Replace = Doc.createReplaceDescriptor For I = 0 To 5 Replace.SearchString = BritishWords(I) Replace.ReplaceString = USWords(I) Doc.replaceAll(Replace) Next I
The expressions for searching and replacing are set using the SearchString and ReplaceString properties of the ReplaceDescriptors. The actual replacement process is finally implemented using the replaceAll method of the document object, which replaces all occurrences of the search expression.
Example: searching and replacing text with regular expressions
The replacement function of Apache OpenOffice is particularly effective when used in conjunction with regular expressions. These provide the option of defining a variable search expression with place holders and special characters rather than a fixed value.
The regular expressions supported by Apache OpenOffice are described in detail in the online help section for Apache OpenOffice. Here are a few examples:
- A period within a search expression stands for any character. The search expression sh.rt therefore can stand for both for shirt and for short.
- The character ^ marks the start of a paragraph. All occurrences of the name Peter that are at the start of a paragraph can therefore be found using the search expression ^Peter.
- The character $ marks a paragraph end. All occurrences of the name Peter that are at the end of a paragraph can therefore be found using the search expression Peter$.
- A * indicates that the preceding character may be repeated any number of times. It can be combined with the period as a place holder for any character. The temper.*e expression, for example, can stand for the expressions temperance and temperature.
The following example shows how all empty lines in a text document can be removed with the help of the regular expression ^$:
Dim Doc As Object Dim Replace As Object Dim I As Long Doc = ThisComponent 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). |