Difference between revisions of "NL/Documentation/BASIC Guide/Structure of Text Documents"

From Apache OpenOffice Wiki
Jump to: navigation, search
(Created page with "{{NL/Documentation/BASICGuideTOC/v2 |ShowPrevNext=block |ShowPrevPage=block |PrevPage=NL/Documentation/BASIC Guide/Text Documents |NextPage=NL/Documentation/BASIC Guide/Editin...")
 
m (Eigenschappen voor alinea's)
 
(17 intermediate revisions by 2 users not shown)
Line 18: Line 18:
 
== Alinea's en gedeelten van alinea's  ==
 
== Alinea's en gedeelten van alinea's  ==
  
The core of a text document consists of a sequence of paragraphs. These are neither named nor indexed and there is therefore no possible way of directly accessing individual paragraphs. The paragraphs can however be sequentially traversed with the help of the <tt>Enumeration</tt> object described in [[Documentation/BASIC Guide/API Intro|Introduction to the API]]. This allows the paragraphs to be edited.
+
De kern van een tekstdocument bestaat uit een reeks van alinea's. Deze worden niet benoemd, noch geïndexeerd en er is daarom geen mogelijke manier van directe toegang tot individuele alinea's. De alinea's kunnen echter reeksmatig worden benaderd met behulp van het object <tt>Enumeration</tt>, beschreven in [[Documentation/BASIC Guide/API Intro|Introductie voor de API]]. Dit maakt het mogelijk dat de alinea's kunnen worden bewerkt.
  
When working with the <tt>Enumeration</tt> object, one special scenario should, however, be noted: it not only returns paragraphs, but also tables (strictly speaking, in {{OOo}} Writer, a table is a special type of paragraph). Before accessing a returned object, you should therefore check whether the returned object supports the <idl>com.sun.star.text.Paragraph</idl> service for paragraphs or the <idl>com.sun.star.text.TextTable</idl> service for tables.
+
Bij het werken met het object <tt>Enumeration</tt>, moet echter met één speciaal scenario, rekening worden gehouden: het geeft niet alleen alinea's weer, maar ook tabellen (strikt gesproken is, in {{AOo}} Writer, een tabel een speciaal type alinea). Voordat u toegang zoekt tot een weergegeven object, zou u daarom moeten controleren of het weergegeven object de service <idl>com.sun.star.text.Paragraph</idl> voor alinea's of de service <idl>com.sun.star.text.TextTable</idl> voor tabellen ondersteunt.
  
The following example traverses the contents of a text document in a loop and uses a message in each instance to inform the user whether the object in question is a paragraph or table.
+
Het volgende voorbeeld gaat, in een lus, door de inhoud van een tekst en gebruikt  voor elk item een bericht om de gebruiker te informeren of het betreffende object een alinea of een tabel is.
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim Doc As Object
 
Dim Doc As Object
 
Dim Enum As Object
 
Dim Enum As Object
Dim TextElement As Object
+
Dim TekstElement As Object
  
' Create document object    
+
' Maak het documentobject    
 
Doc = ThisComponent
 
Doc = ThisComponent
' Create enumeration object  
+
' Maak het object voor de nummering
 
Enum = Doc.Text.createEnumeration
 
Enum = Doc.Text.createEnumeration
' loop over all text elements
+
' lus door alle tekstelementen
  
 
While Enum.hasMoreElements
 
While Enum.hasMoreElements
   TextElement = Enum.nextElement
+
   TekstElement = Enum.nextElement
  
   If TextElement.supportsService("com.sun.star.text.TextTable") Then
+
   If TekstElement.supportsService("com.sun.star.text.TextTable") Then
     MsgBox "The current block contains a table."
+
     MsgBox "Het huidige blok bevat een tabel."
 
   End If
 
   End If
 
    
 
    
   If TextElement.supportsService("com.sun.star.text.Paragraph") Then
+
   If TekstElement.supportsService("com.sun.star.text.Paragraph") Then
     MsgBox "The current block contains a paragraph."
+
     MsgBox "Het huidige blok bevat een alinea."
 
   End If
 
   End If
  
 
Wend
 
Wend
</source>
+
</syntaxhighlight>
  
The example creates a <tt>Doc</tt> document object which references the current {{OOo}} document. With the aid of <tt>Doc</tt>, the example then creates an <tt>Enumeration</tt> object that traverses through the individual parts of the text (paragraphs and tables) and assigns the current element to <tt>TextElement</tt> object. The example uses the <tt>supportsService</tt> method to check whether the <tt>TextElement</tt> is a paragraph or a table.
+
Het voorbeeld maakt een documentobject <tt>Doc</tt> dat verwijst naar het huidige document van {{AOo}}. Met de hulp van <tt>Doc</tt> maakt het voorbeeld dan een object <tt>Enumeration</tt> aan dat door de individuele gedeelten van de tekst (alinea's en tabellen) gaat en aan het huidige element het object <tt>TekstElement</tt> toewijst. Het voorbeeld gebruikt de methode <tt>supportsService</tt> om te controleren of het <tt>TekstElement</tt> een alinea of een tabel is.
  
=== Paragraphs ===
+
=== Alinea's ===
  
The <idl>com.sun.star.text.Paragraph</idl> service grants access to the content of a paragraph. The text in the paragraph can be retrieved and modified using the String property:
+
De service <idl>com.sun.star.text.Paragraph</idl> geeft toegang tot de inhoud van een alinea. De tekst in de alinea kan worden gevonden en gewijzigd met behulp van de eigenschap String:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim Doc As Object
 
Dim Doc As Object
 
Dim Enum As Object
 
Dim Enum As Object
Dim TextElement As Object
+
Dim TekstElement As Object
  
 
Doc = ThisComponent
 
Doc = ThisComponent
Line 64: Line 64:
  
 
While Enum.hasMoreElements
 
While Enum.hasMoreElements
   TextElement = Enum.nextElement
+
   TekstElement = Enum.nextElement
 
    
 
    
   If TextElement.supportsService("com.sun.star.text.Paragraph") Then
+
   If TekstElement.supportsService("com.sun.star.text.Paragraph") Then
     TextElement.String = Replace(TextElement.String, "you", "U")  
+
     TekstElement.String = Replace(TekstElement.String, "you", "U")  
     TextElement.String = Replace(TextElement.String, "too", "2")
+
     TekstElement.String = Replace(TekstElement.String, "twee", "2")
     TextElement.String = Replace(TextElement.String, "for", "4")  
+
     TekstElement.String = Replace(TekstElement.String, "vier", "4")  
 
   End If
 
   End If
  
 
Wend
 
Wend
</source>
+
</syntaxhighlight>
  
The example opens the current text document and passes through it with the help of the Enumeration object. It uses the <tt>TextElement.String</tt> property in all paragraphs to access the relevant paragraphs and replaces the <tt>you, too and for</tt> strings with the <tt>U, 2 and 4</tt> characters. The <tt>Replace</tt> function used for replacing does not fall within the standard linguistic scope of {{OOo}} Basic. This is an instance of the example function described in [[Documentation/BASIC Guide/Strings_%28Runtime_Library%29|Search and Replace]].
+
Het voorbeeld opent het huidige tekstdocument en gaat daar doorheen met behulp van het object Enumeration. Het gebruikt de eigenschap <tt>TekstElement.String</tt> in alle alinea's om toegang te krijgen tot de relevante alinea's en vervangt de tekenreeksen <tt>you, twee en vier</tt> door de tekens <tt>U, 2 en 4</tt>.
 +
De functie <tt>Replace</tt>, die wordt gebruikt voor de vervangingen, valt niet binnen het standaard-taalkundig bereik van OpenOffice BASIC. Dit is een item van de voorbeeldfunctie, die wordt beschreven in [[NL/Documentation/BASIC Guide/Strings_%28Runtime_Library%29|Zoeken en vervangen]].
  
{{Documentation/VBAnote|The content of the procedure described here for accessing the paragraphs of a text is comparable with the Paragraphs listing used in VBA, which is provided in the <tt>Range</tt> and <tt>Document</tt> objects available there. Whereas in VBA the paragraphs are accessed by their number (for example, by the <tt>Paragraph(1)</tt> call), in {{OOo}} Basic, the <tt>Enumeration</tt> object described previously should be used. }}
+
{{Documentation/VBAnote|De inhoud van de hier beschreven procedure voor toegang tot de alinea's van een tekst is vergelijkbaar met de opsomming Paragraphs, gebruikt in VBA, die wordt verschaft in de daar beschikbare objecten <tt>Range</tt> en <tt>Document</tt>. Waar in VBA de toegang tot de alinea's wordt verkregen via hun nummer (bijvoorbeeld, bij de aanroep Paragraph(1)), zou in {{AOo}} BASIC het hiervoor beschreven object <tt>Enumeration</tt> moeten worden gebruikt.}}
  
There is no direct counterpart in {{OOo}} Basic for the <tt>Characters, Sentences</tt> and <tt>Words</tt> lists provided in VBA. You do, however, have the option of switching to a <tt>TextCursor</tt> which allows for navigation at the level of characters, sentences and words.
+
Er zijn geen identieke objecten in {{AOo}} BASIC voor de opsommingen <tt>Characters, Sentences</tt> en <tt>Words</tt> zoals die voorkomen in VBA. U heeft echter de optie om over te schakelen naar een <tt>TextCursor</tt> welke het u mogelijk maakt om te navigeren op het niveau van tekens, zinnen en woorden.
  
=== Paragraph Portions ===
+
=== Gedeelten van alinea's ===
  
The previous example may change the text as requested, but it may sometimes also destroy the formatting.
+
Het vorige voorbeeld kan de tekst veranderen zoals gewenst, maar het kan soms ook de opmaak vernielen.
  
This is because a paragraph in turn consists of individual sub-objects. Each of these sub-objects contains its own formatting information. If the center of a paragraph, for example, contains a word printed in bold, then it will be represented in {{OOo}} by three paragraph portions: the portion before the bold type, then the word in bold, and finally the portion after the bold type, which is again depicted as normal.
+
Dit komt omdat een alinea op zijn beurt uit individuele subobjecten bestaat. Elk van deze subobjecten bevat zijn eigen opmaak-informatie. Als het centrum van een alinea, bijvoorbeeld, een woord bevat dat is afgedrukt in vet, dan wordt het  in {{AOo}} weergegeven door drie gedeelten van een alinea: het gedeelte vóór het type vet, het vette woord en tenslotte het gedeelte achter het type vet, dat normaal wordt weergegeven.
  
If the text of the paragraph is now changed using the paragraph's <tt>String</tt> property, then {{OOo}} first deletes the old paragraph portions and inserts a new paragraph portion. The formatting of the previous sections is then lost.
+
Als de tekst van de alinea nu wordt veranderd met de eigenschap <tt>String</tt>, dan verwijdert {{OOo}} eerst de oude gedeelten van de alinea en voegt nieuwe gedeelten voor een alinea in. De opmaak van de vorige gedeelten gaat dan verloren.  
  
To prevent this effect, the user can access the associated paragraph portions rather than the entire paragraph. Paragraphs provide their own <tt>Enumeration</tt> object for this purpose. The following example shows a double loop which passes over all paragraphs of a text document and the paragraph portions they contain and applies the replacement processes from the previous example:
+
Om dit effect te voorkomen, kan de gebruiker beter toegang zoeken tot de de geassocieerde alinea-gedeelten, in plaats van tot de gehele alinea. Alinea's verschaffen voor dit doel hun eigen object <tt>Enumeration</tt>. Het volgende voorbeeld toont een dubbele lus die door alle alinea's van een tekstdocument en de alinea-gedeelten die zij bevatten gaat en past het proces van vervangingen uit het voorgaande voorbeeld daar op toe:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim Doc As Object
 
Dim Doc As Object
 
Dim Enum1 As Object
 
Dim Enum1 As Object
 
Dim Enum2 As Object
 
Dim Enum2 As Object
Dim TextElement As Object
+
Dim TekstElement As Object
Dim TextPortion As Object
+
Dim TekstDeel As Object
  
 
Doc = ThisComponent
 
Doc = ThisComponent
 
Enum1 = Doc.Text.createEnumeration
 
Enum1 = Doc.Text.createEnumeration
 
   
 
   
' loop over all paragraphs
+
' ga door alle alinea's
 
While Enum1.hasMoreElements
 
While Enum1.hasMoreElements
   TextElement = Enum1.nextElement
+
   TekstElement = Enum1.nextElement
 
    
 
    
   If TextElement.supportsService("com.sun.star.text.Paragraph") Then
+
   If TekstElement.supportsService("com.sun.star.text.Paragraph") Then
     Enum2 = TextElement.createEnumeration
+
     Enum2 = TekstElement.createEnumeration
     ' loop over all sub-paragraphs
+
     ' ga door alle gedeelten van alinea's
 
    
 
    
 
     While Enum2.hasMoreElements
 
     While Enum2.hasMoreElements
       TextPortion = Enum2.nextElement
+
       TekstDeel = Enum2.nextElement
       MsgBox "'" & TextPortion.String & "'"
+
       MsgBox "'" & TekstDeel.String & "'"
       TextPortion.String = Replace(TextPortion.String, "you", "U")  
+
       TekstDeel.String = Replace(TekstDeel.String, "you", "U")  
       TextPortion.String = Replace(TextPortion.String, "too", "2")
+
       TekstDeel.String = Replace(TekstDeel.String, "twee", "2")
       TextPortion.String = Replace(TextPortion.String, "for", "4")  
+
       TekstDeel.String = Replace(TekstDeel.String, "vier", "4")  
 
     Wend
 
     Wend
  
 
   End If
 
   End If
 
Wend
 
Wend
</source>
+
</syntaxhighlight>
  
The example runs through a text document in a double loop. The outer loop refers to the paragraphs of the text. The inner loop processes the paragraph portions in these paragraphs. The example code modifies the content in each of these paragraph portions using the <tt>String</tt> property of the string. as is the case in the previous example for paragraphs. Since however, the paragraph portions are edited directly, their formatting information is retained when replacing the string.
+
Het voorbeeld gaat door een tekstdocument in een dubbele lus. De buitenste lus refereert aan de alinea's van de tekst. De binnenste lus verwerkt de gedeelten van de alinea's in de alinea's. De voorbeeld-code wijzigt de inhoud in elk van deze gedeelten van alinea's met behulp van de eigenschap <tt>String</tt> van de tekenreeks, zoals het geval is in het voorgaande voorbeeld voor alinea's. Omdat echter de gedeelten van de alinea's direct worden bewerkt, blijft hun informatie voor de opmaak behouden bij het vervangen van de tekenreeks.
  
=== Formatting ===
+
=== Opmaken ===
  
There are various ways of formatting text. The easiest way is to assign the format properties directly to the text sequence. This is called direct formatting. Direct formatting is used in particular with short documents because the formats can be assigned by the user with the mouse. You can, for example, highlight a certain word within a text using bold type or center a line.
+
Er zijn verschillende manieren om tekst op te maken. De eenvoudigste manier is om de eigenschappen voor de opmaak direct aan de tekstreeks toe te wijzen. Dit wordt  directe opmaak genoemd. Directe opmaak wordt in het bijzonder gebruikt in korte documenten omdat de opmaak door de gebruiker met de muis kan worden toegewezen. U kunt, bijvoorbeeld, een woord  binnen een tekst accentueren door vet of regel centreren te gebruiken.
  
In addition to direct formatting, you can also format text using templates. This is called indirect formatting. With indirect formatting, the user assigns a pre-defined template to the relevant text portion. If the layout of the text is changed at a later date, the user only needs to change the template. {{OOo}} then changes the way in which all text portions which use this template are depicted.
+
In aanvulling op directe opmaak, kunt u ook tekst opmaken met behulp van profielen. Dit wordt genoemd indirecte opmaak. Met indirecte opmaak wijst de gebruiker een vooraf gedefinieerd opmaakprofiel toe aan het relevante tekstgedeelte. Als het uiterlijk van de tekst op een later tijdstip wordt gewijzigd, hoeft de gebruiker alleen maar het opmaakprofiel te veranderen. {{OOo}} verandert dan de manier waarop alle tekstgedeelten die dit profiel gebruiken wordt weergegeven.
  
{{Documentation/VBAnote|In VBA, the formatting properties of an object are usually spread over a range of sub-objects (for example, <tt>Range.Font</tt>, <tt>Range.Borders</tt>, <tt>Range.Shading</tt>, <tt>Range.ParagraphFormat</tt>). The properties are accessed by means of cascading expressions (for example, <tt>Range.Font.AllCaps</tt>). In {{OOo}} Basic, the formatting properties on the other hand are available directly, using the relevant objects (<tt>TextCursor, Paragraph</tt>, and so on). You will find an overview of the character and paragraph properties available in {{OOo}} in the following two sections.}}
+
{{Documentation/VBAnote|In VBA zijn de eigenschappen voor opmaak van een object in het algemeen verspreid over een scala aan subobjecten (bijvoorbeeld <tt>Range.Font</tt>, <tt>Range.Borders</tt>, <tt>Range.Shading</tt>, <tt>Range.ParagraphFormat</tt>). De eigenschappen worden benaderd door middel van het stapelen van uitdrukkingen (bijvoorbeeld <tt>Range.Font.AllCaps</tt>). Aan de andere kant zijn in {{AOo}} BASIC de eigenschappen voor opmaak direct beschikbaar bij gebruik van de relevante objecten (<tt>TextCursor, Paragraph</tt>, enzovoort). U vindt een overzicht van de in {{OOo}} beschikbare eigenschappen voor tekens en alinea's in de volgende twee gedeelten.}}
  
{{Documentation/Note|The formatting properties can be found in each object (<tt>Paragraph, TextCursor</tt>, and so on) and can be applied directly.}}
+
{{Note|De eigenschappen voor opmaak kunnen in elk object (<tt>Paragraph, TextCursor</tt>, enzovoort) worden gevonden en kunnen direct worden toegepast.}}
  
=== Character Properties ===
+
=== Eigenschappen voor tekens ===
  
Those format properties that refer to individual characters are described as character properties. These include bold type and the font type. Objects that allow character properties to be set have to support the <idl>com.sun.star.style.CharacterProperties</idl> service. {{OOo}} recognizes a whole range of services that support this service. These include the previously described <idl>com.sun.star.text.Paragraph</idl> services for paragraphs as well as the <idl>com.sun.star.text.TextPortion</idl> services for paragraph portions.
+
Deze eigenschappen voor opmaak, die refereren aan individuele tekens, worden omschreven als eigenschappen voor tekens. Deze omvatten ook het type vet en het lettertype. Objecten die toestaan dat eigenschappen van tekens worden ingesteld moeten de service <idl>com.sun.star.style.CharacterProperties</idl> ondersteunen. {{AOo}} herkent een heel bereik aan services die deze service ondersteunen. Deze omvatten ook de voorgaande beschreven services <idl>com.sun.star.text.Paragraph </idl> voor alinea's en ook de services <idl>com.sun.star.text.TextPortion</idl> voor gedeelten van alinea's.
  
The <idl>com.sun.star.style.CharacterProperties</idl> service does not provide any interfaces, but instead offers a range of properties through which character properties can be defined and called. A complete list of all character properties can be found in the {{OOo}} API reference. The following list describes the most important properties:
+
De service <idl>com.sun.star.style.CharacterProperties</idl> verschaft geen interfaces, maar biedt in plaats daarvan een bereik aan eigenschappen waardoor eigenschappen voor tekens kunnen worden gedefinieerd en aangeroepen. Een complete lijst van alle eigenschappen voor tekens kan worden gevonden in de verwijzingen van de {{AOo}} API. De volgende lijst omschrijft de meest belangrijke eigenschappen:
  
;<tt>CharFontName (String)</tt>:name of font type selected.
 
;<tt>CharColor (Long)</tt>:text color.
 
;<tt>CharHeight (Float)</tt>:character height in points (pt).
 
;<tt>CharUnderline (Constant group)</tt>:type of underscore (constants in accordance with <idl>com.sun.star.awt.FontUnderline</idl> ).
 
;<tt>CharWeight (Constant group)</tt>:font weight (constants in accordance with <idl>com.sun.star.awt.FontWeight</idl>).
 
;<tt>CharBackColor (Long)</tt>:background color.
 
;<tt>CharKeepTogether (Boolean)</tt>:suppression of automatic line break.
 
;<tt>CharStyleName (String)</tt>:name of character template.
 
  
=== Paragraph Properties ===
+
;<tt>CharFontName (String)</tt>:naam van het geselecteerde lettertype.
 +
;<tt>CharColor (Long)</tt>:tekstkleur.
 +
;<tt>CharHeight (Float)</tt>:hoogte van teken in punten (pt).
 +
;<tt>CharUnderline (groep Constanten)</tt>:type onderstrepen (constanten die overeenkomen met <idl>com.sun.star.awt.FontUnderline</idl> ).
 +
;<tt>CharWeight (groep Constanten)</tt>:dikte lettertype (constanten die overeenkomen met <idl>com.sun.star.awt.FontWeight</idl>).
 +
;<tt>CharBackColor (Long)</tt>:kleur achtergrond.
 +
;<tt>CharKeepTogether (Boolean)</tt>:onderdrukken van automatisch regeleinde.
 +
;<tt>CharStyleName (String)</tt>:naam van opmaakprofiel van het teken.
  
Formatting information that does not refer to individual characters, but to the entire paragraph is considered to be a paragraph property. This includes the distance of the paragraph from the edge of the page as well as line spacing. The paragraph properties are available through the <idl>com.sun.star.style.ParagraphProperties</idl> service.
+
=== Eigenschappen voor alinea's ===
 +
Informatie over opmaak die niet refereert aan individuele tekens, maar aan de gehele alinea wordt beschouwd als een eigenschap voor een alinea. Dit behelst zowel de afstand van de alinea tot de rand van de pagina als ook de regelafstand. De alinea-eigenschappen zijn beschikbaar via de service <idl>com.sun.star.style.ParagraphProperties</idl>.
  
Even the paragraph properties are available in various objects. All objects that support the <idl>com.sun.star.text.Paragraph</idl> service also provide support for the paragraph properties in <idl>com.sun.star.style.ParagraphProperties</idl>.  
+
Zelfs de eigenschappen voor alinea's zijn beschikbaar in diverse objecten. Alle objecten die de service <idl>com.sun.star.text.Paragraph</idl> ondersteunen, geven ook ondersteuning voor de alinea-eigenschappen in <idl>com.sun.star.style.ParagraphProperties</idl>.
 +
Een volledige lijst van de eigenschappen voor alinea's kan worden gevonden in de verwijzingen van de {{AOo}} API. De meest algemene eigenschappen voor alinea's zijn:
  
A complete list of the paragraph properties can be found in the {{OOo}} API reference. The most common paragraph properties are:
 
  
;<tt>ParaAdjust (enum)</tt>:vertical text orientation (constants in accordance with <idl>com.sun.star.style.ParagraphAdjust</idl> ).
+
;<tt>ParaAdjust (enum)</tt>:verticale oriëntatie van de tekst (constanten die overeenkomen met <idl>com.sun.star.style.ParagraphAdjust</idl> ).
;<tt>ParaLineSpacing (struct)</tt>:line spacing (structure in accordance with <idl>com.sun.star.style.LineSpacing</idl>).
+
;<tt>ParaLineSpacing (struct)</tt>:regelafstand (structuur die overeenkomt met <idl>com.sun.star.style.LineSpacing</idl>).
;<tt>ParaBackColor (Long)</tt>:background color.
+
;<tt>ParaBackColor (Long)</tt>:kleur achtergrond.
;<tt>ParaLeftMargin (Long)</tt>:left margin in 100ths of a millimeter.
+
;<tt>ParaLeftMargin (Long)</tt>:linkermarge in 100-en van een millimeter.
;<tt>ParaRightMargin (Long)</tt>:right margin in 100ths of a millimeter.
+
;<tt>ParaRightMargin (Long)</tt>:rechtermarge in 100-en van een millimeter.
;<tt>ParaTopMargin (Long)</tt>:top margin in 100ths of a millimeter.
+
;<tt>ParaTopMargin (Long)</tt>:bovenmarge in 100-en van een millimeter.
;<tt>ParaBottomMargin (Long)</tt>:bottom margin in 100ths of a millimeter.
+
;<tt>ParaBottomMargin (Long)</tt>:ondermarge in 100-en van een millimeter.
;<tt>ParaTabStops (Array of struct)</tt>:type and position of tabs (array with structures of the type <idl>com.sun.star.style.TabStop</idl> ).
+
;<tt>ParaTabStops (Array van structuur)</tt>:type en positie van tabs (array met structuren van het type <idl>com.sun.star.style.TabStop</idl> ).
;<tt>ParaStyleName (String)</tt>:name of the paragraph template.
+
;<tt>ParaStyleName (String)</tt>:naam van het alineaopmaakprofiel.
  
=== Example: simple HTML export ===
+
=== Voorbeeld: eenvoudige HTML-export ===
  
The following example demonstrates how to work with formatting information. It iterates through a text document and creates a simple HTML file. Each paragraph is recorded in its own HTML element <tt><nowiki><P></nowiki></tt> for this purpose. Paragraph portions displayed in bold type are marked using a <tt><nowiki><B></nowiki></tt> HTML element when exporting.
+
Het volgende voorbeeld demonstreert hoe te werken met informatie over opmaak. Het herhaalt zich door een tekstdocument en maakt een eenvoudig HTML-bestand. Elke alinea wordt  voor dit doel opgenomen in zijn eigen HTML-element <tt><nowiki><P></nowiki></tt>. Alineagedeelten, weergegeven in het type VET, worden gemarkeerd met behulp van een HTML-element <tt><nowiki><B></nowiki></tt> bij exporteren.
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
Dim FileNo As Integer, Filename As String, CurLine As String
+
Dim BestandsNr As Integer, Bestandsnaam As String, HuidigeRegel As String
 
Dim Doc As Object   
 
Dim Doc As Object   
 
Dim Enum1 As Object, Enum2 As Object
 
Dim Enum1 As Object, Enum2 As Object
Dim TextElement As Object, TextPortion As Object
+
Dim TekstElement As Object, TekstDeel As Object
  
Filename = "c:\text.html"
+
Bestandsnaam = "c:\text.html"
FileNo = Freefile
+
BestandsNr = Freefile
Open Filename For Output As #FileNo    
+
Open Bestandsnaam For Output As #BestandsNr    
Print #FileNo, "<HTML><BODY>"
+
Print #BestandsNr, "<HTML><BODY>"
 
Doc = ThisComponent
 
Doc = ThisComponent
 
Enum1 = Doc.Text.createEnumeration
 
Enum1 = Doc.Text.createEnumeration
  
' loop over all paragraphs
+
' lus door alle alinea's
 
While Enum1.hasMoreElements
 
While Enum1.hasMoreElements
   TextElement = Enum1.nextElement
+
   TekstElement = Enum1.nextElement
 
   
 
   
   If TextElement.supportsService("com.sun.star.text.Paragraph") Then
+
   If TekstElement.supportsService("com.sun.star.text.Paragraph") Then
     Enum2 = TextElement.createEnumeration
+
     Enum2 = TekstElement.createEnumeration
     CurLine = "<P>"
+
     HuidigeRegel = "<P>"
  
     ' loop over all paragraph portions
+
     ' lus door alle gedeelten van alinea's
 
     While Enum2.hasMoreElements
 
     While Enum2.hasMoreElements
       TextPortion = Enum2.nextElement
+
       TekstDeel = Enum2.nextElement
 
   
 
   
       If TextPortion.CharWeight = com.sun.star.awt.FontWeight.BOLD THEN
+
       If TekstDeel.CharWeight = com.sun.star.awt.FontWeight.BOLD THEN
         CurLine = CurLine & "<B>" & TextPortion.String & "</B>"
+
         HuidigeRegel = HuidigeRegel & "<B>" & TekstDeel.String & "</B>"
 
       Else
 
       Else
         CurLine = CurLine & TextPortion.String
+
         HuidigeRegel = HuidigeRegel & TekstDeel.String
 
       End If
 
       End If
  
 
     Wend
 
     Wend
 
   
 
   
     ' output the line
+
     ' uitvoer van de regel
     CurLine = CurLine & "</P>"
+
     HuidigeRegel = HuidigeRegel & "</P>"
     Print #FileNo, CurLine
+
     Print #BestandsNr, HuidigeRegel
 
   End If
 
   End If
  
 
Wend
 
Wend
 
   
 
   
' write HTML footer
+
' schrijven van laatste gedeelte HTML  
Print #FileNo, "</BODY></HTML>"
+
Print #BestandsNr, "</BODY></HTML>"
Close #FileNo
+
Close #BestandsNr
</source>
+
</syntaxhighlight>
  
The basic structure of the example is oriented towards the examples for running though the paragraph portions of a text already discussed previously. The functions for writing the HTML file, as well as a test code that checks the font weight of the corresponding text portions and provides paragraph portions in bold type with a corresponding HTML tag, have been added.
+
De basisstructuur van het voorbeeld is georiënteerd op de voorbeelden voor het doorlopen van de gedeelten van alinea's van een tekst zoals eerder besproken. De functie voor het schrijven van het HTML-bestand, net als de testcode die controleert op letterdikte van de corresponderende gedeelten en gedeelten van alinea's in type vet voorziet van een corresponderende HTML-tag, zijn toegevoegd.
  
=== Default values for character and paragraph properties ===
+
=== Standaardwaarden voor eigenschappen van tekens en alinea's ===
  
'''Direct''' formatting always takes priority over '''indirect''' formatting. In other words, formatting using templates is assigned a lower priority than direct formatting in a text.
+
'''Directe''' opmaak heeft altijd voorrang boven '''indirecte''' opmaak. Met andere woorden: aan opmaak met behulp van een profiel wordt een lagere prioriteit toegewezen dan aan directe opmaak van een tekst.
  
Establishing whether a section of a document has been directly or indirectly formatted is not easy. The symbol bars provided by {{OOo}} show the common text properties such as font type, weight and size. However, whether the corresponding settings are based on template or direct formatting in the text is still unclear.
+
Vaststellen of een gedeelte van een document direct of indirect is opgemaakt, is niet gemakkelijk. De door {{AOo}} verschafte werkbalken tonen de algemene tekst-eigenschappen, zoals lettertype, dikte en afmeting. Echter, of de corresponderende instellingen zijn gebaseerd op een profiel of direct zijn opgemaakt in de tekst, is niet duidelijk.
  
{{OOo}} Basic provides the <tt>getPropertyState</tt> method, with which programmers can check how a certain property was formatted. As a parameter, this takes the name of the property and returns a constant that provides information about the origin of the formatting. The following responses, which are defined in the <idl>com.sun.star.beans.PropertyState</idl> enumeration, are possible:
+
{{AOo}} BASIC verschaft de methode <tt>getPropertyState</tt>, waarmee programmeurs kunnen controleren hoe een bepaalde eigenschap werd opgemaakt. Als een parameter gebruikt dit de naam van de eigenschap en geeft een constante terug die informatie verschaft over de oorsprong van de opmaak. De volgende terugkeerwaarden, die zijn gedefinieerd in de opsomming <idl>com.sun.star.beans.PropertyState</idl>, zijn mogelijk:
  
;<idl>com.sun.star.beans.PropertyState.DIRECT_VALUE</idl>:the property is defined directly in the text (direct formatting)
 
;<idl>com.sun.star.beans.PropertyState.DEFAULT_VALUE</idl>:the property is defined by a template (indirect formatting)
 
;<idl>com.sun.star.beans.PropertyState.AMBIGUOUS_VALUE</idl>:the property is unclear. This status arises, for example, when querying the bold type property of a paragraph, which includes both words depicted in bold and words depicted in normal font.
 
  
The following example shows how format properties can be edited in {{OOo}}. It searches through a text for paragraph portions which have been depicted as bold type using direct formatting. If it encounters a corresponding paragraph portion, it deletes the direct formatting using the <tt>setPropertyToDefault</tt> method and assigns a <tt>MyBold</tt> character template to the corresponding paragraph portion.
+
;<idl>com.sun.star.beans.PropertyState.DIRECT_VALUE</idl>:de eigenschap is direct in de tekst gedefinieerd (directe opmaak)
 +
;<idl>com.sun.star.beans.PropertyState.DEFAULT_VALUE</idl>:de eigenschap is gedefinieerd door een opmaakprofiel (indirecte opmaak)
 +
;<idl>com.sun.star.beans.PropertyState.AMBIGUOUS_VALUE</idl>:de eigenschap is niet duidelijk. Deze status duikt, bijvoorbeeld, op bij het bevragen van de eigenschap type vet van een alinea, die zowel woorden in vet als in normaal lettertype weergeeft.
  
<source lang="oobas">
+
Het volgende voorbeeld toont hoe eigenschappen voor opmaak kunnen worden bewerkt in {{AOo}}. Het zoekt door een tekst naar gedeelten van alinea's die werden weergegeven als type vet met behulp van directe opmaak. Als het een corresponderend alinea-gedeelte tegenkomt, verwijdert het de directe opmaak met behulp van de methode <tt>setPropertyToDefault</tt> en wijst een tekenopmaakprofiel <tt>MijnVet</tt> toe aan het corresponderende gedeelte van de alinea.
 +
 
 +
<syntaxhighlight lang="oobas">
 
Dim Doc As Object
 
Dim Doc As Object
 
Dim Enum1 As Object
 
Dim Enum1 As Object
 
Dim Enum2 As Object
 
Dim Enum2 As Object
Dim TextElement As Object
+
Dim TekstElement As Object
Dim TextPortion As Object
+
Dim TekstDeel As Object
 
   
 
   
 
Doc = ThisComponent
 
Doc = ThisComponent
 
Enum1 = Doc.Text.createEnumeration
 
Enum1 = Doc.Text.createEnumeration
 
   
 
   
' loop over all paragraphs
+
' lus door alle alinea's
 
While Enum1.hasMoreElements
 
While Enum1.hasMoreElements
   TextElement = Enum1.nextElement
+
   TekstElement = Enum1.nextElement
  
   If TextElement.supportsService("com.sun.star.text.Paragraph") Then
+
   If TekstElement.supportsService("com.sun.star.text.Paragraph") Then
     Enum2 = TextElement.createEnumeration
+
     Enum2 = TekstElement.createEnumeration
     ' loop over all paragraph portions
+
     ' lus door alle gedeelten van de alinea's
  
 
     While Enum2.hasMoreElements
 
     While Enum2.hasMoreElements
       TextPortion = Enum2.nextElement
+
       TekstDeel = Enum2.nextElement
  
       If TextPortion.CharWeight = _
+
       If TekstDeel.CharWeight = _
 
         com.sun.star.awt.FontWeight.BOLD AND _
 
         com.sun.star.awt.FontWeight.BOLD AND _
         TextPortion.getPropertyState("CharWeight") = _
+
         TekstDeel.getPropertyState("CharWeight") = _
 
         com.sun.star.beans.PropertyState.DIRECT_VALUE Then
 
         com.sun.star.beans.PropertyState.DIRECT_VALUE Then
           TextPortion.setPropertyToDefault("CharWeight")
+
           TekstDeel.setPropertyToDefault("CharWeight")
           TextPortion.CharStyleName = "MyBold"  
+
           TekstDeel.CharStyleName = "MijnVet"  
 
       End If
 
       End If
 
     Wend
 
     Wend
 
   End If
 
   End If
 
Wend
 
Wend
</source>
+
</syntaxhighlight>
 
+
 
   
 
   
 
{{InterWiki Languages BasicGuide|articletitle=Documentation/BASIC Guide/Structure of Text Documents}}
 
{{InterWiki Languages BasicGuide|articletitle=Documentation/BASIC Guide/Structure of Text Documents}}
 
{{PDL1}}
 
{{PDL1}}

Latest revision as of 16:10, 26 August 2022

Book.png

Een tekstdocument kan in principe vier typen van informatie bevatten:

  • De eigenlijke tekst
  • Sjablonen voor opmaak van tekens, alinea's en pagina's
  • Niet-tekstelementen zoals tabellen, afbeeldingen en teken-objecten
  • Globale instellingen voor het tekstdocument

Dit gedeelte richt zich speciaal op de tekst en de daarbij behorende opties voor opmaak.


Alinea's en gedeelten van alinea's

De kern van een tekstdocument bestaat uit een reeks van alinea's. Deze worden niet benoemd, noch geïndexeerd en er is daarom geen mogelijke manier van directe toegang tot individuele alinea's. De alinea's kunnen echter reeksmatig worden benaderd met behulp van het object Enumeration, beschreven in Introductie voor de API. Dit maakt het mogelijk dat de alinea's kunnen worden bewerkt.

Bij het werken met het object Enumeration, moet echter met één speciaal scenario, rekening worden gehouden: het geeft niet alleen alinea's weer, maar ook tabellen (strikt gesproken is, in Apache OpenOffice Writer, een tabel een speciaal type alinea). Voordat u toegang zoekt tot een weergegeven object, zou u daarom moeten controleren of het weergegeven object de service com.sun.star.text.Paragraph voor alinea's of de service com.sun.star.text.TextTable voor tabellen ondersteunt.

Het volgende voorbeeld gaat, in een lus, door de inhoud van een tekst en gebruikt voor elk item een bericht om de gebruiker te informeren of het betreffende object een alinea of een tabel is.

Dim Doc As Object
Dim Enum As Object
Dim TekstElement As Object
 
' Maak het documentobject   
Doc = ThisComponent
' Maak het object voor de nummering 
Enum = Doc.Text.createEnumeration
' lus door alle tekstelementen
 
While Enum.hasMoreElements
  TekstElement = Enum.nextElement
 
  If TekstElement.supportsService("com.sun.star.text.TextTable") Then
    MsgBox "Het huidige blok bevat een tabel."
  End If
 
  If TekstElement.supportsService("com.sun.star.text.Paragraph") Then
    MsgBox "Het huidige blok bevat een alinea."
  End If
 
Wend

Het voorbeeld maakt een documentobject Doc dat verwijst naar het huidige document van Apache OpenOffice. Met de hulp van Doc maakt het voorbeeld dan een object Enumeration aan dat door de individuele gedeelten van de tekst (alinea's en tabellen) gaat en aan het huidige element het object TekstElement toewijst. Het voorbeeld gebruikt de methode supportsService om te controleren of het TekstElement een alinea of een tabel is.

Alinea's

De service com.sun.star.text.Paragraph geeft toegang tot de inhoud van een alinea. De tekst in de alinea kan worden gevonden en gewijzigd met behulp van de eigenschap String:

Dim Doc As Object
Dim Enum As Object
Dim TekstElement As Object
 
Doc = ThisComponent
Enum = Doc.Text.createEnumeration
 
While Enum.hasMoreElements
  TekstElement = Enum.nextElement
 
  If TekstElement.supportsService("com.sun.star.text.Paragraph") Then
    TekstElement.String = Replace(TekstElement.String, "you", "U") 
    TekstElement.String = Replace(TekstElement.String, "twee", "2")
    TekstElement.String = Replace(TekstElement.String, "vier", "4") 
  End If
 
Wend

Het voorbeeld opent het huidige tekstdocument en gaat daar doorheen met behulp van het object Enumeration. Het gebruikt de eigenschap TekstElement.String in alle alinea's om toegang te krijgen tot de relevante alinea's en vervangt de tekenreeksen you, twee en vier door de tekens U, 2 en 4. De functie Replace, die wordt gebruikt voor de vervangingen, valt niet binnen het standaard-taalkundig bereik van OpenOffice BASIC. Dit is een item van de voorbeeldfunctie, die wordt beschreven in Zoeken en vervangen.

Documentation note.png VBA : De inhoud van de hier beschreven procedure voor toegang tot de alinea's van een tekst is vergelijkbaar met de opsomming Paragraphs, gebruikt in VBA, die wordt verschaft in de daar beschikbare objecten Range en Document. Waar in VBA de toegang tot de alinea's wordt verkregen via hun nummer (bijvoorbeeld, bij de aanroep Paragraph(1)), zou in Apache OpenOffice BASIC het hiervoor beschreven object Enumeration moeten worden gebruikt.


Er zijn geen identieke objecten in Apache OpenOffice BASIC voor de opsommingen Characters, Sentences en Words zoals die voorkomen in VBA. U heeft echter de optie om over te schakelen naar een TextCursor welke het u mogelijk maakt om te navigeren op het niveau van tekens, zinnen en woorden.

Gedeelten van alinea's

Het vorige voorbeeld kan de tekst veranderen zoals gewenst, maar het kan soms ook de opmaak vernielen.

Dit komt omdat een alinea op zijn beurt uit individuele subobjecten bestaat. Elk van deze subobjecten bevat zijn eigen opmaak-informatie. Als het centrum van een alinea, bijvoorbeeld, een woord bevat dat is afgedrukt in vet, dan wordt het in Apache OpenOffice weergegeven door drie gedeelten van een alinea: het gedeelte vóór het type vet, het vette woord en tenslotte het gedeelte achter het type vet, dat normaal wordt weergegeven.

Als de tekst van de alinea nu wordt veranderd met de eigenschap String, dan verwijdert Apache OpenOffice eerst de oude gedeelten van de alinea en voegt nieuwe gedeelten voor een alinea in. De opmaak van de vorige gedeelten gaat dan verloren.

Om dit effect te voorkomen, kan de gebruiker beter toegang zoeken tot de de geassocieerde alinea-gedeelten, in plaats van tot de gehele alinea. Alinea's verschaffen voor dit doel hun eigen object Enumeration. Het volgende voorbeeld toont een dubbele lus die door alle alinea's van een tekstdocument en de alinea-gedeelten die zij bevatten gaat en past het proces van vervangingen uit het voorgaande voorbeeld daar op toe:

Dim Doc As Object
Dim Enum1 As Object
Dim Enum2 As Object
Dim TekstElement As Object
Dim TekstDeel As Object
 
Doc = ThisComponent
Enum1 = Doc.Text.createEnumeration
 
' ga door alle alinea's
While Enum1.hasMoreElements
  TekstElement = Enum1.nextElement
 
  If TekstElement.supportsService("com.sun.star.text.Paragraph") Then
    Enum2 = TekstElement.createEnumeration
    ' ga door alle gedeelten van alinea's 
 
    While Enum2.hasMoreElements
      TekstDeel = Enum2.nextElement
      MsgBox "'" & TekstDeel.String & "'"
      TekstDeel.String = Replace(TekstDeel.String, "you", "U") 
      TekstDeel.String = Replace(TekstDeel.String, "twee", "2")
      TekstDeel.String = Replace(TekstDeel.String, "vier", "4") 
    Wend
 
  End If
Wend

Het voorbeeld gaat door een tekstdocument in een dubbele lus. De buitenste lus refereert aan de alinea's van de tekst. De binnenste lus verwerkt de gedeelten van de alinea's in de alinea's. De voorbeeld-code wijzigt de inhoud in elk van deze gedeelten van alinea's met behulp van de eigenschap String van de tekenreeks, zoals het geval is in het voorgaande voorbeeld voor alinea's. Omdat echter de gedeelten van de alinea's direct worden bewerkt, blijft hun informatie voor de opmaak behouden bij het vervangen van de tekenreeks.

Opmaken

Er zijn verschillende manieren om tekst op te maken. De eenvoudigste manier is om de eigenschappen voor de opmaak direct aan de tekstreeks toe te wijzen. Dit wordt directe opmaak genoemd. Directe opmaak wordt in het bijzonder gebruikt in korte documenten omdat de opmaak door de gebruiker met de muis kan worden toegewezen. U kunt, bijvoorbeeld, een woord binnen een tekst accentueren door vet of regel centreren te gebruiken.

In aanvulling op directe opmaak, kunt u ook tekst opmaken met behulp van profielen. Dit wordt genoemd indirecte opmaak. Met indirecte opmaak wijst de gebruiker een vooraf gedefinieerd opmaakprofiel toe aan het relevante tekstgedeelte. Als het uiterlijk van de tekst op een later tijdstip wordt gewijzigd, hoeft de gebruiker alleen maar het opmaakprofiel te veranderen. Apache OpenOffice verandert dan de manier waarop alle tekstgedeelten die dit profiel gebruiken wordt weergegeven.

Documentation note.png VBA : In VBA zijn de eigenschappen voor opmaak van een object in het algemeen verspreid over een scala aan subobjecten (bijvoorbeeld Range.Font, Range.Borders, Range.Shading, Range.ParagraphFormat). De eigenschappen worden benaderd door middel van het stapelen van uitdrukkingen (bijvoorbeeld Range.Font.AllCaps). Aan de andere kant zijn in Apache OpenOffice BASIC de eigenschappen voor opmaak direct beschikbaar bij gebruik van de relevante objecten (TextCursor, Paragraph, enzovoort). U vindt een overzicht van de in Apache OpenOffice beschikbare eigenschappen voor tekens en alinea's in de volgende twee gedeelten.


Documentation note.png De eigenschappen voor opmaak kunnen in elk object (Paragraph, TextCursor, enzovoort) worden gevonden en kunnen direct worden toegepast.

Eigenschappen voor tekens

Deze eigenschappen voor opmaak, die refereren aan individuele tekens, worden omschreven als eigenschappen voor tekens. Deze omvatten ook het type vet en het lettertype. Objecten die toestaan dat eigenschappen van tekens worden ingesteld moeten de service com.sun.star.style.CharacterProperties ondersteunen. Apache OpenOffice herkent een heel bereik aan services die deze service ondersteunen. Deze omvatten ook de voorgaande beschreven services com.sun.star.text.Paragraph voor alinea's en ook de services com.sun.star.text.TextPortion voor gedeelten van alinea's.

De service com.sun.star.style.CharacterProperties verschaft geen interfaces, maar biedt in plaats daarvan een bereik aan eigenschappen waardoor eigenschappen voor tekens kunnen worden gedefinieerd en aangeroepen. Een complete lijst van alle eigenschappen voor tekens kan worden gevonden in de verwijzingen van de Apache OpenOffice API. De volgende lijst omschrijft de meest belangrijke eigenschappen:


CharFontName (String)
naam van het geselecteerde lettertype.
CharColor (Long)
tekstkleur.
CharHeight (Float)
hoogte van teken in punten (pt).
CharUnderline (groep Constanten)
type onderstrepen (constanten die overeenkomen met com.sun.star.awt.FontUnderline ).
CharWeight (groep Constanten)
dikte lettertype (constanten die overeenkomen met com.sun.star.awt.FontWeight).
CharBackColor (Long)
kleur achtergrond.
CharKeepTogether (Boolean)
onderdrukken van automatisch regeleinde.
CharStyleName (String)
naam van opmaakprofiel van het teken.

Eigenschappen voor alinea's

Informatie over opmaak die niet refereert aan individuele tekens, maar aan de gehele alinea wordt beschouwd als een eigenschap voor een alinea. Dit behelst zowel de afstand van de alinea tot de rand van de pagina als ook de regelafstand. De alinea-eigenschappen zijn beschikbaar via de service com.sun.star.style.ParagraphProperties.

Zelfs de eigenschappen voor alinea's zijn beschikbaar in diverse objecten. Alle objecten die de service com.sun.star.text.Paragraph ondersteunen, geven ook ondersteuning voor de alinea-eigenschappen in com.sun.star.style.ParagraphProperties. Een volledige lijst van de eigenschappen voor alinea's kan worden gevonden in de verwijzingen van de Apache OpenOffice API. De meest algemene eigenschappen voor alinea's zijn:


ParaAdjust (enum)
verticale oriëntatie van de tekst (constanten die overeenkomen met com.sun.star.style.ParagraphAdjust ).
ParaLineSpacing (struct)
regelafstand (structuur die overeenkomt met com.sun.star.style.LineSpacing).
ParaBackColor (Long)
kleur achtergrond.
ParaLeftMargin (Long)
linkermarge in 100-en van een millimeter.
ParaRightMargin (Long)
rechtermarge in 100-en van een millimeter.
ParaTopMargin (Long)
bovenmarge in 100-en van een millimeter.
ParaBottomMargin (Long)
ondermarge in 100-en van een millimeter.
ParaTabStops (Array van structuur)
type en positie van tabs (array met structuren van het type com.sun.star.style.TabStop ).
ParaStyleName (String)
naam van het alineaopmaakprofiel.

Voorbeeld: eenvoudige HTML-export

Het volgende voorbeeld demonstreert hoe te werken met informatie over opmaak. Het herhaalt zich door een tekstdocument en maakt een eenvoudig HTML-bestand. Elke alinea wordt voor dit doel opgenomen in zijn eigen HTML-element <P>. Alineagedeelten, weergegeven in het type VET, worden gemarkeerd met behulp van een HTML-element <B> bij exporteren.

Dim BestandsNr As Integer, Bestandsnaam As String, HuidigeRegel As String
Dim Doc As Object   
Dim Enum1 As Object, Enum2 As Object
Dim TekstElement As Object, TekstDeel As Object
 
Bestandsnaam = "c:\text.html"
BestandsNr = Freefile
Open Bestandsnaam For Output As #BestandsNr   
Print #BestandsNr, "<HTML><BODY>"
Doc = ThisComponent
Enum1 = Doc.Text.createEnumeration
 
' lus door alle alinea's
While Enum1.hasMoreElements
  TekstElement = Enum1.nextElement
 
  If TekstElement.supportsService("com.sun.star.text.Paragraph") Then
    Enum2 = TekstElement.createEnumeration
    HuidigeRegel = "<P>"
 
    ' lus door alle gedeelten van alinea's
    While Enum2.hasMoreElements
      TekstDeel = Enum2.nextElement
 
      If TekstDeel.CharWeight = com.sun.star.awt.FontWeight.BOLD THEN
        HuidigeRegel = HuidigeRegel & "<B>" & TekstDeel.String & "</B>"
      Else
        HuidigeRegel = HuidigeRegel & TekstDeel.String
      End If
 
    Wend
 
    ' uitvoer van de regel
    HuidigeRegel = HuidigeRegel & "</P>"
    Print #BestandsNr, HuidigeRegel
  End If
 
Wend
 
' schrijven van laatste gedeelte HTML 
Print #BestandsNr, "</BODY></HTML>"
Close #BestandsNr

De basisstructuur van het voorbeeld is georiënteerd op de voorbeelden voor het doorlopen van de gedeelten van alinea's van een tekst zoals eerder besproken. De functie voor het schrijven van het HTML-bestand, net als de testcode die controleert op letterdikte van de corresponderende gedeelten en gedeelten van alinea's in type vet voorziet van een corresponderende HTML-tag, zijn toegevoegd.

Standaardwaarden voor eigenschappen van tekens en alinea's

Directe opmaak heeft altijd voorrang boven indirecte opmaak. Met andere woorden: aan opmaak met behulp van een profiel wordt een lagere prioriteit toegewezen dan aan directe opmaak van een tekst.

Vaststellen of een gedeelte van een document direct of indirect is opgemaakt, is niet gemakkelijk. De door Apache OpenOffice verschafte werkbalken tonen de algemene tekst-eigenschappen, zoals lettertype, dikte en afmeting. Echter, of de corresponderende instellingen zijn gebaseerd op een profiel of direct zijn opgemaakt in de tekst, is niet duidelijk.

Apache OpenOffice BASIC verschaft de methode getPropertyState, waarmee programmeurs kunnen controleren hoe een bepaalde eigenschap werd opgemaakt. Als een parameter gebruikt dit de naam van de eigenschap en geeft een constante terug die informatie verschaft over de oorsprong van de opmaak. De volgende terugkeerwaarden, die zijn gedefinieerd in de opsomming com.sun.star.beans.PropertyState, zijn mogelijk:


com.sun.star.beans.PropertyState.DIRECT_VALUE
de eigenschap is direct in de tekst gedefinieerd (directe opmaak)
com.sun.star.beans.PropertyState.DEFAULT_VALUE
de eigenschap is gedefinieerd door een opmaakprofiel (indirecte opmaak)
com.sun.star.beans.PropertyState.AMBIGUOUS_VALUE
de eigenschap is niet duidelijk. Deze status duikt, bijvoorbeeld, op bij het bevragen van de eigenschap type vet van een alinea, die zowel woorden in vet als in normaal lettertype weergeeft.

Het volgende voorbeeld toont hoe eigenschappen voor opmaak kunnen worden bewerkt in Apache OpenOffice. Het zoekt door een tekst naar gedeelten van alinea's die werden weergegeven als type vet met behulp van directe opmaak. Als het een corresponderend alinea-gedeelte tegenkomt, verwijdert het de directe opmaak met behulp van de methode setPropertyToDefault en wijst een tekenopmaakprofiel MijnVet toe aan het corresponderende gedeelte van de alinea.

Dim Doc As Object
Dim Enum1 As Object
Dim Enum2 As Object
Dim TekstElement As Object
Dim TekstDeel As Object
 
Doc = ThisComponent
Enum1 = Doc.Text.createEnumeration
 
' lus door alle alinea's
While Enum1.hasMoreElements
  TekstElement = Enum1.nextElement
 
  If TekstElement.supportsService("com.sun.star.text.Paragraph") Then
    Enum2 = TekstElement.createEnumeration
    ' lus door alle gedeelten van de alinea's
 
    While Enum2.hasMoreElements
      TekstDeel = Enum2.nextElement
 
      If TekstDeel.CharWeight = _
        com.sun.star.awt.FontWeight.BOLD AND _
        TekstDeel.getPropertyState("CharWeight") = _
        com.sun.star.beans.PropertyState.DIRECT_VALUE Then
          TekstDeel.setPropertyToDefault("CharWeight")
          TekstDeel.CharStyleName = "MijnVet" 
      End If
    Wend
  End If
Wend


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools