Difference between revisions of "NL/Documentation/BASIC Guide/Editing Text Documents"
(→Retrieving and Modifying Text Contents) |
(→Inserting Control Codes) |
||
Line 175: | Line 175: | ||
Als de <tt>TextCursor</tt> een geaccentueerd gebied bevat, vervangt een toewijzing aan de eigenschap <tt>String</tt> hierdoor de oude tekst. Als er geen geaccentueerd gebied is, wordt de tekst ingevoegd op de huidige positie van <tt>TextCursor</tt>. | Als de <tt>TextCursor</tt> een geaccentueerd gebied bevat, vervangt een toewijzing aan de eigenschap <tt>String</tt> hierdoor de oude tekst. Als er geen geaccentueerd gebied is, wordt de tekst ingevoegd op de huidige positie van <tt>TextCursor</tt>. | ||
− | === | + | === Invoegen van codes voor beheer === |
− | In | + | In sommige situaties is het niet de echte tekst, maar meer de structuur die aangepast moet worden. {{OOo}} 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 <idl>com.sun.star.text.ControlCharacter</idl>. De volgende codes voor beheer zijn beschikbaar in {{OOo}}: |
− | ;<tt>PARAGRAPH_BREAK</tt>: | + | ;<tt>PARAGRAPH_BREAK</tt>:alineaeinde. |
− | ;<tt>LINE_BREAK</tt>: | + | ;<tt>LINE_BREAK</tt>:regeleinde binnen een alinea. |
− | ;<tt>SOFT_HYPHEN</tt>: | + | ;<tt>SOFT_HYPHEN</tt>:mogelijk punt voor afbreken van woord. |
− | ;<tt>HARD_HYPHEN</tt>: | + | ;<tt>HARD_HYPHEN</tt>:verplicht punt voor afbreken van woord. |
− | ;<tt>HARD_SPACE</tt>: | + | ;<tt>HARD_SPACE</tt>: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: | |
− | + | ||
<source lang="oobas"> | <source lang="oobas"> | ||
Dim Doc As Object | Dim Doc As Object | ||
Dim Cursor As Object | Dim Cursor As Object | ||
− | Dim | + | Dim Doorgaan As Boolean |
Doc = ThisComponent | Doc = ThisComponent | ||
Line 199: | Line 198: | ||
</source> | </source> | ||
− | + | De parameter <tt>False</tt> in de aanroep van de methode <tt>insertControlCharacter</tt> zorgt er voor dat het huidige door de <tt>TextCursor</tt> geaccentueerde gebied blijft behouden na het invoegen. Als hier de parameter <tt>True</tt> wordt gebruikt, dan vervangt <tt>insertControlCharacter</tt> de huidige tekst. | |
== Searching for Text Portions == | == Searching for Text Portions == |
Revision as of 15:52, 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.
Searching for Text Portions
In many instances, it is the case that a text is to be searched for a particular term and the corresponding point needs to be edited. All Apache OpenOffice documents provide a special interface for this purpose, and this interface always functions in accordance with the same principle: Before a search process, what is commonly referred to as a SearchDescriptor must first be created. This defines what Apache OpenOffice searches for in a document. A SearchDescriptor is an object which supports the com.sun.star.util. SearchDescriptor service and can be created by means of the createSearchDescriptor method of a document:
Dim SearchDesc As Object SearchDesc = Doc.createSearchDescriptor
Once the SearchDescriptor has been created, it receives the text to be searched for:
SearchDesc.searchString="any text"
In terms of its function, the SearchDescriptor is best compared with the search dialog from Apache OpenOffice. In a similar way to the search window, the settings needed for a search can be set in the SearchDescriptor object.
The properties are provided by the com.sun.star.util.SearchDescriptor service:
- SearchBackwards (Boolean)
- searches through the text backward rather than forward.
- SearchCaseSensitive (Boolean)
- takes uppercase and lowercase characters into consideration during the search.
- SearchRegularExpression (Boolean)
- treats the search expression like a regular expression.
- SearchStyles (Boolean)
- searches through the text for the specified paragraph template.
- SearchWords (Boolean)
- only searches for complete words.
The Apache OpenOffice SearchSimilarity (or “fuzzy match”) function is also available in Apache OpenOffice Basic. With this function, Apache OpenOffice searches for an expression that may be similar to but not exactly the same as the search expression. The number of additional, deleted and modified characters for these expressions can be defined individually. Here are the associated properties of the com.sun.star.util.SearchDescriptor service:
- SearchSimilarity (Boolean)
- performs a similarity search.
- SearchSimilarityAdd (Short)
- number of characters which may be added for a similarity search.
- SearchSimilarityExchange (Short)
- number of characters which may be replaced as part of a similarity search.
- SearchSimilarityRemove (Short)
- number of characters which may be removed as part of a similarity search.
- SearchSimilarityRelax (Boolean)
- takes all deviation rules into consideration at the same time for the search expression.
Once the SearchDescriptor has been prepared as requested, it can be applied to the text document. The Apache OpenOffice documents provide the findFirst and findNext methods for this purpose:
Found = Doc.findFirst (SearchDesc) Do Until IsNull(Found) ' Edit search results... Found = Doc.findNext( Found.End, SearchDesc) Loop
The example finds all matches in a loop and returns a TextRange object, which refers to the found text passage.
Example: Similarity Search
This example shows how a text can be searched for the word "turnover" and the results formatted in bold type. A similarity search is used so that not only the word “turnover”, but also the plural form "turnovers" and declinations such as "turnover's" are found. The found expressions differ by up to two letters from the search expression:
Dim SearchDesc As Object Dim Doc As Object Doc = ThisComponent 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 Until IsNull(Found) Found.CharWeight = com.sun.star.awt.FontWeight.BOLD Found = Doc.findNext( Found.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). |