<?xml version="1.0" encoding="UTF-8"?>

<office:document xmlns:office="http://openoffice.org/2000/office" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" xmlns:config="http://openoffice.org/2001/config" office:class="text" office:version="1.0">
 <office:meta>
  <meta:generator>StarOffice 7 (Win32)
  </meta:generator><!--645m20(Build:8701),645m22s1(Build:8715)-->
  <dc:title>Office Development</dc:title>
  <meta:initial-creator>Mathias Bauer</meta:initial-creator>
  <meta:creation-date>2002-01-09T10:30:22</meta:creation-date>
  <dc:creator>Jürgen Schmidt</dc:creator>
  <dc:date>2004-01-16T17:43:34</dc:date>
  <meta:printed-by>Dietrich Schulten</meta:printed-by>
  <meta:print-date>2002-11-22T16:42:12</meta:print-date>
  <dc:language>en-US</dc:language>
  <meta:editing-cycles>2373</meta:editing-cycles>
  <meta:editing-duration>P14DT17H56M22S</meta:editing-duration>
  <meta:user-defined meta:name="Info 1"/>
  <meta:user-defined meta:name="Info 2"/>
  <meta:user-defined meta:name="Info 3"/>
  <meta:user-defined meta:name="Info 4"/>
  <meta:document-statistic meta:table-count="92" meta:image-count="65" meta:object-count="0" meta:page-count="132" meta:paragraph-count="3624" meta:word-count="48072" meta:character-count="360565"/>
 </office:meta>
 <office:settings>
  <config:config-item-set config:name="view-settings">
   <config:config-item config:name="ViewAreaTop" config:type="int">295384</config:config-item>
   <config:config-item config:name="ViewAreaLeft" config:type="int">1713</config:config-item>
   <config:config-item config:name="ViewAreaWidth" config:type="int">19353</config:config-item>
   <config:config-item config:name="ViewAreaHeight" config:type="int">11823</config:config-item>
   <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
   <config:config-item config:name="ShowHeaderWhileBrowsing" config:type="boolean">false</config:config-item>
   <config:config-item config:name="ShowFooterWhileBrowsing" config:type="boolean">false</config:config-item>
   <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
   <config:config-item-map-indexed config:name="Views">
    <config:config-item-map-entry>
     <config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
     <config:config-item config:name="ViewLeft" config:type="int">13598</config:config-item>
     <config:config-item config:name="ViewTop" config:type="int">303516</config:config-item>
     <config:config-item config:name="VisibleLeft" config:type="int">1713</config:config-item>
     <config:config-item config:name="VisibleTop" config:type="int">295384</config:config-item>
     <config:config-item config:name="VisibleRight" config:type="int">21064</config:config-item>
     <config:config-item config:name="VisibleBottom" config:type="int">307206</config:config-item>
     <config:config-item config:name="ZoomType" config:type="short">1</config:config-item>
     <config:config-item config:name="ZoomFactor" config:type="short">156</config:config-item>
     <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
    </config:config-item-map-entry>
   </config:config-item-map-indexed>
  </config:config-item-set>
  <config:config-item-set config:name="configuration-settings">
   <config:config-item config:name="AddParaTableSpacing" config:type="boolean">false</config:config-item>
   <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item>
   <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item>
   <config:config-item-map-indexed config:name="ForbiddenCharacters">
    <config:config-item-map-entry>
     <config:config-item config:name="Language" config:type="string">de</config:config-item>
     <config:config-item config:name="Country" config:type="string">DE</config:config-item>
     <config:config-item config:name="Variant" config:type="string"/>
     <config:config-item config:name="BeginLine" config:type="string"/>
     <config:config-item config:name="EndLine" config:type="string"/>
    </config:config-item-map-entry>
    <config:config-item-map-entry>
     <config:config-item config:name="Language" config:type="string">zh</config:config-item>
     <config:config-item config:name="Country" config:type="string">CN</config:config-item>
     <config:config-item config:name="Variant" config:type="string"/>
     <config:config-item config:name="BeginLine" config:type="string">﹀﹂﹄﹏､～￠々‖•·ˇˉ―--′</config:config-item>
     <config:config-item config:name="EndLine" config:type="string">.([{£¥&apos;&quot;‵〈《「『【〔〖（［｛￡￥〝︵︷︹︻︽︿﹁﹃﹙﹛﹝（｛</config:config-item>
    </config:config-item-map-entry>
   </config:config-item-map-indexed>
   <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
   <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item>
   <config:config-item config:name="UpdateFromTemplate" config:type="boolean">false</config:config-item>
   <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item>
   <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item>
   <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item>
   <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item>
   <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
   <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item>
   <config:config-item config:name="PrinterSetup" config:type="base64Binary"> </config:config-item>
   <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item>
   <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
   <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
   <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
   <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item>
   <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
   <config:config-item config:name="AlignTabStopPosition" config:type="boolean">false</config:config-item>
   <config:config-item config:name="CurrentDatabaseDataSource" config:type="string">Adreßbuch</config:config-item>
   <config:config-item config:name="PrinterName" config:type="string">Xerox DocuPrint N24</config:config-item>
   <config:config-item config:name="PrintFaxName" config:type="string"/>
   <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
   <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item>
   <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">false</config:config-item>
   <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item>
   <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
   <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
   <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item>
   <config:config-item config:name="PrinterIndependentLayout" config:type="string">disabled</config:config-item>
   <config:config-item config:name="UseOldNumbering" config:type="boolean">true</config:config-item>
   <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item>
   <config:config-item config:name="CurrentDatabaseCommand" config:type="string">adressen</config:config-item>
   <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item>
   <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item>
  </config:config-item-set>
 </office:settings>
 <office:script/>
 <office:font-decls>
  <style:font-decl style:name="ZapfDingbats" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable" style:font-charset="x-symbol"/>
  <style:font-decl style:name="Courier New8" fo:font-family="&apos;Courier New&apos;"/>
  <style:font-decl style:name="Courier New6" fo:font-family="&apos;Courier New&apos;, Courier, monospace"/>
  <style:font-decl style:name="Courier New7" fo:font-family="&apos;Courier New&apos;, monospace"/>
  <style:font-decl style:name="Palatino2" fo:font-family="Palatino" style:font-style-name="Bold"/>
  <style:font-decl style:name="Palatino1" fo:font-family="Palatino" style:font-style-name="Fett"/>
  <style:font-decl style:name="Palatino3" fo:font-family="Palatino" style:font-style-name="Regular"/>
  <style:font-decl style:name="Palatino4" fo:font-family="Palatino, serif"/>
  <style:font-decl style:name="Times New Roman" fo:font-family="&apos;Times New Roman&apos;"/>
  <style:font-decl style:name="Arial1" fo:font-family="Arial" style:font-family-generic="swiss"/>
  <style:font-decl style:name="Courier1" fo:font-family="Courier" style:font-family-generic="modern" style:font-pitch="fixed"/>
  <style:font-decl style:name="Courier New" fo:font-family="&apos;Courier New&apos;" style:font-family-generic="modern" style:font-pitch="fixed"/>
  <style:font-decl style:name="Courier New5" fo:font-family="&apos;Courier New&apos;" style:font-style-name="Fett" style:font-family-generic="modern" style:font-pitch="fixed"/>
  <style:font-decl style:name="Courier New1" fo:font-family="&apos;Courier New&apos;" style:font-style-name="Regular" style:font-family-generic="modern" style:font-pitch="fixed"/>
  <style:font-decl style:name="Courier New2" fo:font-family="&apos;Courier New&apos;" style:font-style-name="Standard" style:font-family-generic="modern" style:font-pitch="fixed"/>
  <style:font-decl style:name="Courier" fo:font-family="Courier" style:font-family-generic="roman" style:font-pitch="fixed"/>
  <style:font-decl style:name="Courier New3" fo:font-family="&apos;Courier New&apos;" style:font-family-generic="roman" style:font-pitch="fixed"/>
  <style:font-decl style:name="Arial Unicode MS" fo:font-family="&apos;Arial Unicode MS&apos;" style:font-pitch="variable"/>
  <style:font-decl style:name="HG Mincho Light J" fo:font-family="&apos;HG Mincho Light J&apos;" style:font-pitch="variable"/>
  <style:font-decl style:name="Palatino" fo:font-family="Palatino" style:font-family-generic="roman" style:font-pitch="variable"/>
  <style:font-decl style:name="Times" fo:font-family="Times" style:font-style-name="Fett Kursiv" style:font-family-generic="roman" style:font-pitch="variable"/>
  <style:font-decl style:name="Times New Roman3" fo:font-family="&apos;Times New Roman&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
  <style:font-decl style:name="Times New Roman2" fo:font-family="&apos;Times New Roman&apos;" style:font-style-name="Regular" style:font-family-generic="roman" style:font-pitch="variable"/>
  <style:font-decl style:name="Times New Roman1" fo:font-family="&apos;Times New Roman&apos;" style:font-style-name="Standard" style:font-family-generic="roman" style:font-pitch="variable"/>
  <style:font-decl style:name="Arial" fo:font-family="Arial" style:font-family-generic="swiss" style:font-pitch="variable"/>
  <style:font-decl style:name="Courier New4" fo:font-family="&apos;Courier New&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
  <style:font-decl style:name="Helvetica2" fo:font-family="Helvetica" style:font-family-generic="swiss" style:font-pitch="variable"/>
  <style:font-decl style:name="Helvetica3" fo:font-family="Helvetica" style:font-style-name="Fett" style:font-family-generic="swiss" style:font-pitch="variable"/>
  <style:font-decl style:name="Helvetica1" fo:font-family="Helvetica" style:font-style-name="Kursiv" style:font-family-generic="swiss" style:font-pitch="variable"/>
  <style:font-decl style:name="Helvetica" fo:font-family="Helvetica" style:font-style-name="Standard" style:font-family-generic="swiss" style:font-pitch="variable"/>
 </office:font-decls>
 <office:styles>
  <draw:gradient draw:name="Gradient 7" draw:style="linear" draw:start-color="#000000" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="0" draw:border="0%"/>
  <draw:hatch draw:name="Hatch 103" draw:style="single" draw:color="#000000" draw:distance="0.011cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 105" draw:style="single" draw:color="#000000" draw:distance="0.011cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 106" draw:style="single" draw:color="#000000" draw:distance="0.058cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 108" draw:style="single" draw:color="#000000" draw:distance="0.011cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 110" draw:style="single" draw:color="#000000" draw:distance="0.011cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 112" draw:style="single" draw:color="#000000" draw:distance="0.011cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 114" draw:style="single" draw:color="#000000" draw:distance="0.011cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 46" draw:style="single" draw:color="#000000" draw:distance="0.058cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 47" draw:style="single" draw:color="#c0c0c0" draw:distance="0.057cm" draw:rotation="900"/>
  <draw:hatch draw:name="Hatch 49" draw:style="single" draw:color="#000000" draw:distance="0.011cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 51" draw:style="single" draw:color="#000000" draw:distance="0.011cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 53" draw:style="single" draw:color="#000000" draw:distance="0.011cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 55" draw:style="single" draw:color="#000000" draw:distance="0.011cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 57" draw:style="single" draw:color="#000000" draw:distance="0.011cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 59" draw:style="single" draw:color="#000000" draw:distance="0.011cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 60" draw:style="single" draw:color="#c0c0c0" draw:distance="0.057cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 62" draw:style="single" draw:color="#000000" draw:distance="0.011cm" draw:rotation="0"/>
  <draw:hatch draw:name="Hatch 64" draw:style="single" draw:color="#000000" draw:distance="0.011cm" draw:rotation="0"/>
  <draw:fill-image draw:name="Bitmape 1">
   <office:binary-data>iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAADAFBMVEUAAAAAAIAAgAAAgICA
    AACAAICAgACAgIDAwMAAAP8A/wAA////AAD/AP///wD///8AAAAzAABmAACZAADMAAD/AAAA
    MwAzMwBmMwCZMwDMMwD/MwAAZgAzZgBmZgCZZgDMZgD/ZgAAmQAzmQBmmQCZmQDMmQD/mQAA
    zAAzzABmzACZzADMzAD/zAAA/wAz/wBm/wCZ/wDM/wD//wAAADMzADNmADOZADPMADP/ADMA
    MzMzMzNmMzOZMzPMMzP/MzMAZjMzZjNmZjOZZjPMZjP/ZjMAmTMzmTNmmTOZmTPMmTP/mTMA
    zDMzzDNmzDOZzDPMzDP/zDMA/zMz/zNm/zOZ/zPM/zP//zMAAGYzAGZmAGaZAGbMAGb/AGYA
    M2YzM2ZmM2aZM2bMM2b/M2YAZmYzZmZmZmaZZmbMZmb/ZmYAmWYzmWZmmWaZmWbMmWb/mWYA
    zGYzzGZmzGaZzGbMzGb/zGYA/2Yz/2Zm/2aZ/2bM/2b//2YAAJkzAJlmAJmZAJnMAJn/AJkA
    M5kzM5lmM5mZM5nMM5n/M5kAZpkzZplmZpmZZpnMZpn/ZpkAmZkzmZlmmZmZmZnMmZn/mZkA
    zJkzzJlmzJmZzJnMzJn/zJkA/5kz/5lm/5mZ/5nM/5n//5kAAMwzAMxmAMyZAMzMAMz/AMwA
    M8wzM8xmM8yZM8zMM8z/M8wAZswzZsxmZsyZZszMZsz/ZswAmcwzmcxmmcyZmczMmcz/mcwA
    zMwzzMxmzMyZzMzMzMz/zMwA/8wz/8xm/8yZ/8zM/8z//8wAAP8zAP9mAP+ZAP/MAP//AP8A
    M/8zM/9mM/+ZM//MM///M/8AZv8zZv9mZv+ZZv/MZv//Zv8Amf8zmf9mmf+Zmf/Mmf//mf8A
    zP8zzP9mzP+ZzP/MzP//zP8A//8z//9m//+Z///M//////8AuP8AAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4
    0k8YAAAAFklEQVR4nGPgJwAYRhWMKhhVMFIVAADLVTwBNA/g8AAAAABJRU5ErkJggg==
   </office:binary-data>
  </draw:fill-image>
  <draw:fill-image draw:name="Wet">
   <office:binary-data>iVBORw0KGgoAAAANSUhEUgAAAF4AAABeCAIAAAAlsDQ5AAAfnElEQVR4nLxc648k11W/r6rq
    7nnvrB+z9j6MnbUNtuRHHIsEBTZBRiEhCAuDCCAh+S8BIRkpgEGBP4Ag+MgHkMIHJCSLJFKI
    SCKCtZ8iy3E89u68p1/1uA9+597qmuqu6p6eXW+uR+Oe7uq65557zu/8zrmnVu0eOeYHd47T
    YPih4f/E/y1eOX+NoD8FXej/dNxfxRYPay0v7zg1Wt+k94Wrf+qqwWR4g2R0zDFTXmO9GLXb
    hiXQJe5silLk2u/J9bMvqqHOWVldSv/a2fOUMefry46Jxml5Xkv0DvZJTO7n5+fQlCPF8SDV
    uVt08dGimiCWf+GCpYS5BQt78WBHbfbyd7VsUoQrd6hSXLg4/G+xgvynfOaSarrmmG81wm/F
    xK2CdmZM4AFs1fzb2lJJXhLyc8gi+NRW1dyQ7Oo+5ZxVTWXJM7os/f3nPmYmxeKlN2RrKlFn
    N+yTGlOqmTcN3gea0r550SZvLjVBHVCXuX6eDHhLllN7RxKOW+dMCULuHkDtbMZ2n5qLNc7b
    Ki8dHkJYghsh7nmDlgTLmRVWf3q4ZcaYoiiEYJ04QrDM88yxTrjO1bHn4qMp2/kRqvpmsB1R
    BtHZTz9xq57ZTGeJOGitx+NhEimeKAFBCssmq5onwATOL4wGagaywy3wS1lnYKsReTU3Gbep
    ELHhknjKRDtV6Fhysrr0kxBzNmnDXqaWBN0rznQ2kKxgUuRGr6jOatyRkQPsnJwO4+5mUZAs
    ScyM08w2d302PNUnmsJtP+ZaDWSSiqUFSyI2PB3BzaWyXCkfNs+56TJjsV5qcp+9bwzr9/sr
    K13ya+9BcRQ5biJFI01HnaRXaFYUTsh5d5sLkRegfJYLbplwVuc6z/NOEpGyWAjhMBzhI/vZ
    3j6gMFENTrOYLMtWV3vkWkxQZJA0uGTdbpL3M6LMAvzblYSZBfIc5KyQblk552MN51qbKOan
    JwPPvaUXiDmjBaShuXnY8vtRyozJTIFLg5uZPI3juLoYGoCEsZTMMOyc1nY0TpNOBzYFJZYq
    4FPpwoXGfIcCoihejMc6HQolywVY41k7WTRs1lge4JkSn3uVYOnh+v1TqMYbKLIE7t0q2AgF
    KMSsQb/PWced5X9+cEjGK8OZ8akF29qkfOX3wDZjwfYP70aSm8LpCLbKYcOwGCgIKaOAwhAy
    TJigHeHOHUHcyh8X3EQKOx6P13sJNCKFst61nSSWAUzUpkDEihSD/wsV85BKVCua2E6lnaYY
    56umGuB3p6eneTqKez02ARThb6F1zo2VEZfBs0qi/GCtJstTpC6YLoqikFVq6yQ05AODYE5b
    aIednJ5uXrrMa8KU6oCT2UUFgHNguB78cenh4WE3UgZTJgm0AGeKlXSuALmAM0Mz3qtZmWpd
    cKmVYc8YzsyoRBoOh1AKZsTvtEBsEqyslhDiQBSTjUEIDw8PoJoFSWM9EZ0iE6JFNXANpkEE
    6FIFZiVCvaN/FMGEddHprpC5FC6KmOZGWpXEJs3Gpyf9R3eu6YwhoGt75gyLUbn1w7o3hWoL
    4jTnoX5Uhhg9RNheixCeC9A9xQ0iNLxMgH7Bs7Uj5SieJbzoHx2sbm23TWO9sgVrGgvmamyu
    mhLOlldbY+7c/QjEKekmSdIRirYLQONdymcziAssy8ZpFHVAJSh8LYE1iwPQnPfJLpAcAIAF
    SLD0jCbsnrfVKijjfzDnNE2z/Tvd9UuIIecLtHCcOZSPx95kGJjVEQBFxfhUgNREPAEKhkJg
    8GLiWEIOh4Ot7Q4zXs77TV5q9YRKnpKaO6gm6sC5E/AGn0+SN2G38CntWTm59RlWdnBwcv2p
    Zy4aFpqIoII01lkpIu4XDqWcHB2W1UXjgsyBgOJPR6EKNsOTKB+l+G+UdImDnquZxRdMk+Oz
    4OLhjHI3mK9UivRCV1KErGq1wstIGQxl4u7wcF9y0VKMXA4PKxhSrAZ1wltNofMsH3YkwrKS
    CIiqG2wV+IfP4UpKKkr0lBrZ4dHhnStXn1gAe4uV0sz6qpqZq4EXMRkCfRhIKHgSPtKP30tL
    V5KEGNaCh40ohoq4PvWSRlSvKCp6jfyIR+H7jqwmA8WLwGeQioDZ0UYRowlSGmYkbM2RjsBr
    +icneZpK1Vk+N2kqYo522KTASP4bKbINyAQ7BpuRAsBLkpFZWZgMnMnkeZoX9DMcDVZXLy2v
    Ea+MsqJaRYMKholWCpKpLIhokyPzt2Q6wgNLWKIgIZhRgiuJH6pE7u3deeTK9Zril5JkcaY3
    419kqoqcCOFUkoqgEchVlpMYbac2GnuUjvoDrQswsqCa5cfMYQPVHhwvS6m0Tz6u6SKDjSAa
    wINAe7EbwgqP0DKOEYqMdytsmBLEiPndu3cvP3JdNHjBktpZUOKqKA/RGRmCebm3+MuDMGAI
    rmSxnSE8DQZQjR4O+/ec8Z5hDZmNEIU2CjZgKYXrdaLRQEu5USD0AM5oemwRXFdBZUp0wLw0
    y4HaUdwRcjQeHccSpiRZm8k4ZqvCe33uGW7KKwPwGByqiTULhy7GBkgTxSHnhmLC0ZQ1Qxgx
    6N7B0Wjv5GRUjHWW85FeUi8lSrp6olN+0WONI6KC6aQHPOhe8DO+Ux7UnX2VYAf+B3vxJQHS
    SL/f761ttu+9E7VDpam550lbTc3Kcgf9edofg2Ixk8G7yZYsT6lyRbnV0fHRoJ8N+/3NjbV3
    /+8kL4qt7TbKN187bQJMIhSgpCiQOiIPcMjiQqhmPof0KQqvRrheEvUiO/dplDs+OoBqJktq
    s52FIaw5amy1fLF/cBzH0SrVsSwFc8fjuAM/Gmenw37aTXrP/+JT3/ynfyDQ4fzyzpX7P/1Q
    XEyd2lgaLgLMwlp5WYsQfnDSl6OTXU4aETycLVJqd3R0sHP1ydrCziaYR3PnjXm1m97a9ke7
    Pz063E8k29rayI3t94fjNE+L0cOXth9/dEfGIhuP+6fDJ59+yUm1ICk7L5WZOFQodpA3kcmw
    wF+8lQhT4oII2qHklVMUN6QxQVSD3qavHx3cXWrd0yI2pam9M/vnytpGXrj+qC9ccXR0FHUS
    YyGTeva5mxtr67DU8eB07+CQy5VbX3zNskmdbf4RxbnDqwaJF7FhRgVoS4GJao1gD4SUvhDE
    ZHXHOCGTIjdihjiFsXk2/vjjj5ZXx7nCtX6uDXvq5rP/+6Pv37l7RxJDRoCUb/z+7+Kjjz7c
    vX379jvvvONc5+VP//LaxkaaWSXOUH/BjDOcsH6hNzzPuQMceDihTAD4Q+TBM7sKaMokk+yH
    cosASbgA8X5msloqdLFz1dZVhDtIFb3w0qsf3/nwf7733Ww8YEa//fW/hDzD4TDXdjBOf/XW
    a5/7/K0s1d2OKopzZm0a5sw4i0TOk/CweHIVfEROo4Sn6IygRoSIhBBBccl457IFHd95rjwz
    U5tGljBm3ggYLpShBU0i5EOPXvnyb7/+w+9/92fv/eRoPExHmXF2ZWPzd37va1dvfAorgtHn
    +QxUuVYIa523CjWKefhwgZU7lhsddSLutQNlGCrJA9SoEgx14evSaQXlCJ5mmnKrAnTLNDTT
    rqal3LyZBLraqojL0Ha++Mqv4Qcv3v/peysrK1tbW4hfgewbA9zk1p6tk16IpUy3HhnVWanN
    hnNl6ctI5GGUH3AqxEoe4hSLiMvQT5bpOI77J8fQToY/tJ5dzs+rdeDGjRuBTBgDF+dV2nX/
    Y7Y2DK/RoT1LBJVQsgTYJU2JoB0F+hfHajg4RQ5Bfp6DZBX1m8wvU33yx1WCivmUADJXlimC
    4dSvubc5Z2rD9JvqRgmMhbJ+Tl6EFy5YjfS14IjeYzqnLA4mMxyO65G4rpfp145Nx+xPZMBY
    GGHYWf9GYKbhoK55/YKUbWaoyR3DMR+9xmq7SI4Ej6RHXxUoL6dMl7OI8kjX7w9GoxF4897e
    Hq4P6cLMmDm6XXLM8OZzv+qp+tmZf8hF2RyKUGVzy4jU4lBwEGPA+kIeQKc+0pdGIiq4EUmH
    WTmjNzY2YDUnJycAmm6vt2CpITA1DsbmCnehrMLQmRgvG1x8Ida/yZqVgKnzgyW0o8rr/NbC
    TwCuCFh0yN1BdAKpi4QvaVGXj+8ZswZJ1tAUeuvSBohWn8bgM6++2lze4j+XWfwy1oZQwahe
    c3ZcQzlfTS/3DG4UoagCUJ7PgsfIUKbWeWY7HSRViHrWavBlQzzPpKkenPavXr2KxPPu3scw
    GVx87dq1e5x/zmi41Vz8BuKKkNdQ8yELPwDmC9WPWu+vkHuDlnAbzrUBNOmNp559990fG3eM
    fBwfKZnBlIA2WmfpaHw6to9deYz82TnkcuNUM9l59NpNN5mDNWoxrG3rsBL4gpSBWOsJ1ZT1
    0kmFpj4MzWscqM6zw23PfjfXzypmJ3hFl0qX566uI6J8VMTzdwLCQAPdbifNUiqXuSGY+Kjf
    xYiSOJT1Ab2bW9udJGK+FQEADK++euOJ8/elRVBWHggz3wTsq7zU9cVl/RpWgussrF6AQ04P
    PsG5eRlMhUFUjkEaqahqLuGxRrgk7ty8+cwPv/0f6+vrEWhMokA3tXGf/eyv+Fta6hVg7s//
    9M8KjW8mX7j169RJW1GJqR7vRWfhIa4FfPCdD8zUKmbLsKH7ZAKTCmz7fZAPibwwPknEwun8
    2Ah2afvyLz3/6vf++ztK2jgREZJtJ//5m//4tT/6Y7IXKBNgBLeR6pGdK5vbl3UB0/PBruYO
    kzy7XSyqSytwqPIA1/fri8qYJ6LzT5wizhsBBKYyb6pm+sKE9p4FLQACkLDt3HjqRca//V//
    yYZjqg4XuhN33/6Lr+eiAJ2Jo46xIu72vvSbXwVjVkgvZlMFtjiZpK2yvMhTvKauGWSqzng4
    VZWCXPnYxIPSzmKjU76IFZpDmKEkhOpTSLoLza7+wpN/8MSNb/3bv3z0wfvII9OxJhUh25S9
    TNudx5+49YXX1je3czhbI70819SBrHme5Xnq3Ur5hBC311IEPsEYq9pTpsZ9aqoMFIxNw3CL
    2CQT4h9lZpKOU3yhj5o+KVOlFlD5ld964+jo4OTo0Bl75+5HiNZr6+svvPASvCnNiyy3vZ4a
    DAxQqTZ3LX7MFdGCH1EgUBFIk5R0dANJJmFh7vo/2URswRYqTwG4V4UNYoHlAWojZoE7TCiY
    z+r69vrWdm7cY596OiLh4T3C5jaOIqTc0Eu3Cwi/WEJgTIE42Ol0KNe3GlkapSPYmEwj468y
    j5kjmgc0WsuP1Jg8Cfj+hNJSJsXpIM4n2hOOAPCN8LZhxpfTnX96QvsuANjLtF747Kx+Sm1d
    FPEi03GirC727+wCsJCbFYWBLsi8jUaMGp0eXn7okcJYFUUA6Sjy9RfFdTFT4g03Xzp+h4Y+
    orWeQPkDMt8wRTZqHG9U0JboNm82eSwpTfk939RDVVXKNhgFO8b6wyFMjw7ca+m4P7XgKyvd
    4+NjQFj4ivG9giF+zXCZc81ocnNWQTmnnSiQJhvun7qg4xHmWy1aHHjZRvy6KHURK1OsJ2zt
    51CU6Zg4kqPR8PjwMIkjCmxlN6Chh/WoCMI6nfjw8O7KyqpzHUEUnPy96olqCrNQWl4CboA/
    F4oVFhkzmQ/QjjlJ9Rb/1FcjkkzSy8kK51GgxaJUUXYGEUJexipDA9prg2QdsanXW6fjnZAs
    +4K8Pw7lOidKub+/t/3Qo9SEKqbIe9vkLSyZTay7Dh8h3CGMyIgU5HylR8ouNZvxZivfdFfW
    otVfZPCpFsbyHYQ9YIo1RTYera+tUAOaCFhLjCE0AfvIZJNI/Gx3F2Sy1GwoW7vZdTYFrgfH
    JhiF602hNdkIxRzSVdwJm9f0qKlevvqq5q12ji7Oqs2VLqoMKLwZ5M6yMf5cXV0VCEylkYfm
    aBcyGyqzctfvnwgKBd78fW557klbq005V5lPqSNqxFOUpIfnh+JOD7lQ66IugDWtQaH14HEa
    L8s9pxU66oFZW+3FUuT+aDCcEStIB9wRFtyz8DkaIHtv7+7lh3d8lbf0pgVzNTVSFyN8jxzH
    a8R5hYGBUMNt0pUy4m2p+rJP7NYLBUt8hbEaWlMjk3bUQ1uQcJubG+DWof2NhzNA/3icbwQ2
    +Ah8PEmS3d3dhx65EqowVVGiOUurXuoXVLV0650Ik8UKodHmOQ89bmyOiqd6+RY8ut0qR53H
    zzu3FvQog2c0RFUUjxSTsW/ACN06vvWMmdifckF4TQUAnY4HWytroOUSCW4RWpnbT1FqtlzH
    BDIx0Hoq4Hp78XBeHB3tg2RqUAFJJyXdjizSvltfN07whlVORah5epk3FgaOSn3029fiqNkt
    Vr6i6qQh+gtFgXGC8nH4f54h1aTCM1iy8cN/kb5u7QWbULxUSYLMgyp+YIzYBkRG7vv4fR2O
    xUh0hBgMBg/v+MP9RZRvup4wL2DVnWXyziKhfdGIut4iKbV3Cun7D3w3BnVV+QYdatVA/KI+
    xTwHBIQGNNJmAFFfg7uQcgLqu/LRJBba2Xq9blX6COfUOktFQOvGHSaqma0/1dffkl9ciJL6
    7rMyuaenU1a7hC3cKgCvdciiDJ0OZ5FSp6enuAA7Ce2sbRbh/MdjzeyBxLx0eXIB95m98bkY
    ENeNRiPYiyKUcQRr/oHfWIkolicnx6ubl6qTrJpqXBVlK73MRZzmOF9H3Bc6yHCgHpWNx0We
    Jr2O79ohrPEPs9NthsM+NhZZAiwfOrpytZQ1tKZOq/t8waoisbM8lG67iUe3srQoQ0MV6NXu
    hx88vbHpmqpp1kNaZzpzsWYeVl6xoIwQCuDMn4jyfr8fK97r+QYmKbMsBVaCbhwcHPhHUw6h
    F+hoc3OTlfGlDP+L07cZEKC+S68F32cGf8pZEkzG56vCKWq4BW2A1RxRjjbRTIUYZSN+tYbF
    U95bmbpaEn6vr6/vfvATbjNnt7BjPueGtZMHhROF/f196A6T7uzshDvUvamunWYqVx+BLIYa
    Jm7u+zgtwJ7emWgh8iNRUf/keH3r4Zk7NK1mRi8X1kXbTcJREd1tZWVlb29PCgON9Xo9iAsF
    wVKyLLt+/bqawA2Xamtra6zJmcJje1X6PCPSPAkpKvlKPsI0wCuKpDcfigLEo0CU6ME7erqq
    t9LZ37/bopr6H83UNmD51Jtull/UQKplVPYCC0ekRvb4yM5j73/wHuHx+iZFKRFhV1/+9Iu+
    Tmiz45PxMP38F39jnFM5NqKSGgUCsdBiW6KklxMuDC5AJTI4FRNKJJqDVeqIqZiqizZKYsrm
    JvZItZugUMkvVpSoG3Mzis//IoShRWaZTuLOzpXHb9++vTsaHCT7YL1f/sqXSp7u7FtvvZWN
    i5WNrZde+YxTUZbbNA1xRLSV5c+RNozAkkITK5tk+b5DkxpkSDEq8uSQ0NCYEj2omnTx+Voe
    IV3AgyCOjHme+edsJdVbe92N69eeevcH34HNQ9pv/O1fv/nmm3/3jb/HPcajVHU2vvr6G2lB
    RYMkofqh751xrBFBzhU1gFRAMa8ZNdMREHQE9xqPs2AsE6pBk85VTaDbc2adUsRiNkyk1j94
    XBS+YcfX8557/sVscPyjH/2ACz1O+3/19t+kYy1lsra2/fof/snG1iVO/5QG83UsD+QX/KeW
    2MSR4UbgkKQFrkIrBT/DLHqS1yf+LsvGVCDx/4RSSNZkONmYf/f2PKBZH1igHWKcyA+QQxWs
    KAC6ggIl56987tb1m89869//FbwmN+ahxx97/rmXX3jhRRap0SjvdKiIlSRsNNCw+OrpvYsO
    6nehHrJowoAVPaEuQic0tUpberwpotxN50jBBRdVSL3Av5XF2gJ5VbKa93XyXiYov6VMkuq7
    8Gqqt4v/7+XafqOowviZOXPZ7bZd2kKQS4EFqggtWiHECwk+ETUmvml8MvHNP0QNz/LgE4nB
    P8AXMcZ4eSIhxkCIQjRKYoBoRaHtbme7M3Pm+P2+MzOdvcx2wcoJaUt3ei7ffOe7/L6LPb1j
    9zvvvpfoyNQ00dzkaemYI3Y8bXOlU6v5rG4fpY6c3j8pPnLa6PCwcWzDOPhIYkr6ig5BqPwS
    yVrQmhif1CLNekPFygik6SVBN16z8WnJn6NHRxglNlARK+pEaDvgIJWddhdGZMu78HEUIsgR
    /ZcrZGL8XhJdiIgmo/Nh6cIIIUrriNAgDd0P6ZiKChNKZpkC59XcWbKnpqdmVLxhW44qhoeg
    AWI4BojOD6nbjUOigl8rrcwcLmf/052ivcehQmIlyESKzIlj1VknNcWBzbSf2cMNk3qBqJYN
    78ki/iGJI5NMQ4nczyRi3br1a+PAQdw4vlC0x3IxrGE1QqXBPeNoNAe2ka/PQSi6/OQT0hS+
    N9YT2N2go5W5JvRdMxKscqxfFJBco1A4iRKF5k6s8BccI+NDdplRXe7uwOgaL02qWFbciuMq
    MGniWbZjuvlxqxBlm8ik7RCrgr9aK9iAyJHYElhUGPOcJQW5qMYiSJufcJyL9wS/g/gfzJDI
    R6ii6x8F5zb3/jdHhcskHcs1yfgMOdoCiHAa3rCyUjRtoD8zMgzbzMnlG2UDJiyeheZPmHkc
    vvQxMu/Jk44cF8hQFJI7K1T5hRJdbtoA8F7r/Mkti2qYaS1Hej7TIko7WRFN6IIRS3AjspRA
    Ktak43VWlmY2WUoac7250gcFhunbQ/RVxdx+RCMJ0mHLOnJAm+49lQCm/WGjnif77YBiuk3/
    R6WQm5DoMyNRL0p2Uay5JwebjrRZVI5aFpeU0itPTEaizq464BI9rLVPvq6VhjwQFQ3X2wEt
    4nkVcugthL3joE1+rV/W4qf7pKMi8KOblKWDgzUosCACuSSBoY9jhPRt0MRMC5NbEb+QM2FW
    gc7OVnbKWDiNnpuERcaSVBStB+2o0/a8qmOTaSYTHcLYVUT9RFmy+A4HsUPvEnlIpOCaDYyo
    lJKwXMps2Ih0fI+0tSsZgrFFiovRAwntHn0xeAij0dTGfpzSd2IKCPMGHDGSiWmQvHWcjUxE
    I/BjuI8DEs6LVOj5YdCn3Qw2svs6ZMUECeAJuv5wGghEJSPkJhZC7BKsrTWbTYNGm0WtbPXy
    1j5JbEPbpc/RAmRZ0huo+j4jrAn3o0qILsQ4q83l+vTO/s09AvQlshXzH/oAmhJt3f2A1mlF
    f4xEQ8l14oLLbk3RNW074gILjCAIcDqTO5Gt7nSXOBd2xu0cyYYkye0jmyxM4o5H/ChdwaFG
    Ik7FH1tbXY3aQRSGk9unLeEm3JVEpg1vNVDdvpkHL8ffC8cbQrVN6J26foyWVyu1u3d+37t3
    JlJofxPGBhomGSCarfXV1YAkxOzs7M83b7Y7YJOI1TAmiAf09UtH2qsBMXxU1QB5A7CEih+D
    OOskCoI1U7p7797SjgMN9tMMaqVNpN/OLknRj89/ztyOrVTYRQIhLyNGstfS0tLMVA1dF2yP
    W4cinb4dBFNT9UONA+fPnyeumdkxiw5TjoOcfkGSdKjnLfiuksmkQEzlm9aAfhV5GJbjo5pB
    tNdaIa3Sbt69c2cfWpJIVueJSejv2esQNbzlQ5tero6oVqt//fGn6gTVilcfn6ANEl0mJydn
    9u4ma4+otby8TObb/MKzuE8qbUwAniiTi6ycZI480wJ0ZKIMAsbSrsAVjMleCDtt9LtZeXDv
    2tXZ3fstwy0yve090/agHP8rgYyLRF7rxMTErd86reZK1bWXfXdPY/+ePbtgqomEXKkP3/9g
    PezQ488snoB1kiJETJpNFwCma4tKpRJ1AvpK0gttOFTiImWK1Nb68vJ9WvjO0l1yVeBbaNOJ
    CAaXPSDZ6XGwjEAlGxIQ2BxzF44/9+Wlz1w78Rxx/MRJOhad4qvPL13/6UYraIeRPvvKWcVN
    jCwr69FbhM17JD8reZ3nNXHmKoACV6LghZQd2YsBy/Ymh43iqMNGIthNsstr9OCIdNiS0EVx
    +JyAgG0T10tvfuHkd19/IW310fmPExXRv7ATk9YW0nl6fnFh8RTDoeADk7u5CShhyhrTffPe
    W63WWEWurqjx8XG6okHQWjg2P3fo8Llz5xr79pPQE9w/VWnT+kXzi3iI82xhTjDJRzKBI41U
    2ziSe/fPnXoh+PabS/SC+bUl4XrH86u7Zhuvvf4GOq2w9tBpydlQbBgGAOpy4PWQTHe4tRnS
    8Nra87yJidq2bZMz01OfXrx4+/Zt4p0jR44AT+R0T5UoUzZP6yVl0c6+BbOvw0zH0Qfws1i5
    FSeMheSIzZNHjzYO7rly5fv1oIXEozg+NDd35Niitj2VQl9cfgv3sRsb7kFAyLEkNSYdpo7U
    sY7din/zl5u+btdqtZ0z0/TXn1y4sHTvn+WVtUp1cvbwfKjRXozmdjmxmF+BlddGdXGD1dUN
    C7/gVrTFR3oveKHBTVfkayCXWQkqUizk5uCEylgMjlPZ/tKZV4sPwilONvons+vNCMwQ9zIz
    tFN0w9Jk0Yh6ferHH26QCL929ToZ2A9Wmu1254ldu9986205VoMYznL2RBp+SotEt3Zkntdg
    uJ5hti24leWkEYqTV/GzohOSt+16Bxtzaw/+vnz5Mvmq7HRYL54+c/rMy6SMVNr0cmN/pm9c
    HroqvuNNUnL6tHvZ41Z3kvhAlHZ4cHXIGBKHgjXJ+QbcoAWBCwQrFk4833hqfuX+A7qr9Xp9
    or5N2a5JTknBSkb/e1Lv8tuxqWM1yBoauL38zL0PGK55RCijMB4ueomFpTtenxpH+yfNpc4i
    BCwhnLLcEuYakVnDudX3eKyb0UeWxFuovRzyqLTTmLjRU55LjBNL6ZCTWqv6YUR2ExBVm4Wu
    yLJg8kJSI3eMn2TmHIUc/RJkIKMNwcPyl/Efx7/ZXqhltvNkGgAAAABJRU5ErkJggg==
   </office:binary-data>
  </draw:fill-image>
  <draw:marker draw:name="Arrow" svg:viewBox="0 0 20 30" svg:d="m10 0-10 30h20z"/>
  <draw:marker draw:name="Pfeil offen" svg:viewBox="0 0 8000 10010" svg:d="m0 10010 3974-10010 4026 9990-8000 20 1497-1003 5000-14-2517-6993-2483 7007z"/>
  <draw:marker draw:name="Raute geschlossen" svg:viewBox="0 0 458 458" svg:d="m229 458c-76-76-152-152-229-229 76-76 152-152 229-229 76 76 152 152 229 229-76 76-152 152-229 229z"/>
  <draw:marker draw:name="Raute offen" svg:viewBox="0 0 10000 10000" svg:d="m0 5000 5000-5000 5000 5000-5000 5000-5000-5000h1500l3500 3500 3500-3500-3500-3500-3500 3500z"/>
  <draw:stroke-dash draw:name="Dash 10" draw:style="rect" draw:dots1="1" draw:dots1-length="0.011cm" draw:dots2="1" draw:dots2-length="0.011cm" draw:distance="0.011cm"/>
  <draw:stroke-dash draw:name="Dash 11" draw:style="rect" draw:dots1="1" draw:dots1-length="0.011cm" draw:dots2="1" draw:dots2-length="0.011cm" draw:distance="0.011cm"/>
  <draw:stroke-dash draw:name="Dash 12" draw:style="rect" draw:dots1="1" draw:dots1-length="0.011cm" draw:dots2="1" draw:dots2-length="0.011cm" draw:distance="0.011cm"/>
  <draw:stroke-dash draw:name="Dash 2" draw:style="rect" draw:dots1="1" draw:dots1-length="0.011cm" draw:dots2="1" draw:dots2-length="0.011cm" draw:distance="0.011cm"/>
  <draw:stroke-dash draw:name="Dash 3" draw:style="rect" draw:dots1="1" draw:dots1-length="0.011cm" draw:dots2="1" draw:dots2-length="0.011cm" draw:distance="0.011cm"/>
  <draw:stroke-dash draw:name="Dash 33" draw:style="rect" draw:dots1="1" draw:dots1-length="0.011cm" draw:dots2="1" draw:dots2-length="0.011cm" draw:distance="0.011cm"/>
  <draw:stroke-dash draw:name="Dash 34" draw:style="rect" draw:dots1="1" draw:dots1-length="0.011cm" draw:dots2="1" draw:dots2-length="0.011cm" draw:distance="0.011cm"/>
  <draw:stroke-dash draw:name="Dash 35" draw:style="rect" draw:dots1="1" draw:dots1-length="0.011cm" draw:dots2="1" draw:dots2-length="0.011cm" draw:distance="0.011cm"/>
  <draw:stroke-dash draw:name="Dash 36" draw:style="rect" draw:dots1="1" draw:dots1-length="112%" draw:distance="112%"/>
  <draw:stroke-dash draw:name="Dash 37" draw:style="rect" draw:dots1="1" draw:dots1-length="0.011cm" draw:dots2="1" draw:dots2-length="0.011cm" draw:distance="0.011cm"/>
  <draw:stroke-dash draw:name="Dash 38" draw:style="rect" draw:dots1="1" draw:dots1-length="0.011cm" draw:dots2="1" draw:dots2-length="0.011cm" draw:distance="0.011cm"/>
  <draw:stroke-dash draw:name="Dash 39" draw:style="rect" draw:dots1="1" draw:dots1-length="0.011cm" draw:dots2="1" draw:dots2-length="0.011cm" draw:distance="0.011cm"/>
  <draw:stroke-dash draw:name="Dash 4" draw:style="rect" draw:dots1="1" draw:dots1-length="0.011cm" draw:dots2="1" draw:dots2-length="0.011cm" draw:distance="0.011cm"/>
  <draw:stroke-dash draw:name="Dash 5" draw:style="rect" draw:dots1="1" draw:dots1-length="0.011cm" draw:dots2="1" draw:dots2-length="0.011cm" draw:distance="0.011cm"/>
  <draw:stroke-dash draw:name="Dash 6" draw:style="rect" draw:dots1="1" draw:dots1-length="0.011cm" draw:dots2="1" draw:dots2-length="0.011cm" draw:distance="0.011cm"/>
  <draw:stroke-dash draw:name="Dash 7" draw:style="rect" draw:dots1="1" draw:dots1-length="112%" draw:distance="112%"/>
  <draw:stroke-dash draw:name="Dash 8" draw:style="rect" draw:dots1="1" draw:dots1-length="112%" draw:distance="112%"/>
  <draw:stroke-dash draw:name="Dash 9" draw:style="rect" draw:dots1="1" draw:dots1-length="112%" draw:distance="112%"/>
  <style:default-style style:family="graphics">
   <style:properties draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" fo:color="#000000" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="en" fo:country="US" style:font-name-asian="HG Mincho Light J" style:font-size-asian="12pt" style:language-asian="none" style:country-asian="none" style:font-name-complex="Arial Unicode MS" style:font-size-complex="12pt" style:language-complex="none" style:country-complex="none" style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb">
    <style:tab-stops/>
   </style:properties>
  </style:default-style>
  <style:default-style style:family="paragraph">
   <style:properties fo:color="#000000" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="en" fo:country="US" style:font-name-asian="HG Mincho Light J" style:font-size-asian="12pt" style:language-asian="none" style:country-asian="none" style:font-name-complex="Arial Unicode MS" style:font-size-complex="12pt" style:language-complex="none" style:country-complex="none" fo:hyphenate="false" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.245cm" style:writing-mode="lr-tb"/>
  </style:default-style>
  <style:style style:name="Standard" style:family="paragraph" style:class="text">
   <style:properties fo:color="#000000" style:font-name="Times New Roman1" fo:language="en" fo:country="US"/>
  </style:style>
  <style:style style:name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0.212cm" fo:color="#000000"/>
  </style:style>
  <style:style style:name="First line indent" style:family="paragraph" style:parent-style-name="Text body" style:class="text">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0.499cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Hanging indent" style:family="paragraph" style:parent-style-name="Text body" style:class="text">
   <style:properties fo:margin-left="1cm" fo:margin-right="0cm" fo:text-indent="-0.499cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="0cm"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Text body indent" style:family="paragraph" style:parent-style-name="Text body" style:class="text">
   <style:properties fo:margin-left="0.499cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Salutation" style:family="paragraph" style:parent-style-name="Standard" style:class="text"/>
  <style:style style:name="Signature" style:family="paragraph" style:parent-style-name="Standard" style:class="text"/>
  <style:style style:name="List Indent" style:family="paragraph" style:parent-style-name="Text body" style:class="text">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:text-indent="-4.5cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="0cm"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Marginalia" style:family="paragraph" style:parent-style-name="Text body" style:class="text">
   <style:properties fo:margin-left="4.001cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text body" style:class="text">
   <style:properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" fo:color="#000000" style:font-name="Arial" fo:font-size="14pt" fo:keep-with-next="true"/>
  </style:style>
  <style:style style:name="Heading 1" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text">
   <style:properties fo:font-size="115%" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Heading 2" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text">
   <style:properties fo:font-size="14pt" fo:font-style="italic" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Heading 3" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text">
   <style:properties fo:font-size="14pt" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Heading 4" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text">
   <style:properties fo:font-size="85%" fo:font-style="italic" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Heading 5" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text">
   <style:properties fo:font-size="85%" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Heading 6" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text">
   <style:properties fo:font-size="75%" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Heading 7" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text" style:master-page-name="">
   <style:properties fo:font-size="75%" fo:font-weight="bold" fo:hyphenate="false" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="1" style:page-number="0"/>
  </style:style>
  <style:style style:name="Heading 8" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text" style:master-page-name="">
   <style:properties fo:font-size="75%" fo:font-weight="bold" fo:hyphenate="false" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="1" style:page-number="0"/>
  </style:style>
  <style:style style:name="Heading 9" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text" style:master-page-name="">
   <style:properties fo:font-size="75%" fo:font-weight="bold" fo:hyphenate="false" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="1" style:page-number="0"/>
  </style:style>
  <style:style style:name="Heading 10" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text" style:master-page-name="">
   <style:properties fo:font-size="75%" fo:font-weight="bold" fo:hyphenate="false" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="1" style:page-number="0"/>
  </style:style>
  <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text body" style:class="list">
   <style:properties style:font-name="Times New Roman"/>
  </style:style>
  <style:style style:name="Numbering 1 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 1" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 1 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 1 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 2 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 2" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 2 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 2 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 3 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 3" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 3 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 3 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 4 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 4" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 4 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 4 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 5 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 5" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 5 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 5 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 1 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 1" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 1 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 1 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 2 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 2" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 2 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 2 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 3 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 3" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 3 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 3 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 4 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 4" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 4 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 4 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 5 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 5" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 5 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 5 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Header" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0.499cm" fo:margin-bottom="0cm" fo:font-size="12pt" fo:text-indent="0cm" style:auto-text-indent="false" fo:padding="0cm" fo:border="none">
    <style:tab-stops>
     <style:tab-stop style:position="7.721cm" style:type="center"/>
     <style:tab-stop style:position="15.443cm" style:type="right"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Header left" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties text:number-lines="false" text:line-number="0">
    <style:tab-stops>
     <style:tab-stop style:position="7.721cm" style:type="center"/>
     <style:tab-stop style:position="15.443cm" style:type="right"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Header right" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties>
    <style:tab-stops>
     <style:tab-stop style:position="8.5cm" style:type="center"/>
     <style:tab-stop style:position="17.002cm" style:type="right"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Footer" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties>
    <style:tab-stops>
     <style:tab-stop style:position="7.721cm" style:type="center"/>
     <style:tab-stop style:position="15.443cm" style:type="right"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Footer left" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties fo:margin-left="0.199cm" fo:margin-right="0cm" style:font-name="Helvetica" fo:font-size="9pt" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="7.721cm" style:type="center"/>
     <style:tab-stop style:position="15.443cm" style:type="right"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Footer right" style:family="paragraph" style:parent-style-name="Standard" style:class="extra" style:master-page-name="">
   <style:properties fo:margin-left="0cm" fo:margin-right="0.199cm" style:font-name="Helvetica" fo:font-size="8.5pt" fo:text-align="end" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops>
     <style:tab-stop style:position="7.721cm" style:type="center"/>
     <style:tab-stop style:position="15.443cm" style:type="right"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Table Contents" style:family="paragraph" style:parent-style-name="Text body" style:class="extra"/>
  <style:style style:name="Table Heading" style:family="paragraph" style:parent-style-name="Table Contents" style:class="extra">
   <style:properties fo:font-style="italic" fo:font-weight="bold" fo:text-align="center" style:justify-single-word="false"/>
  </style:style>
  <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" style:font-name="Times New Roman" fo:font-size="10pt" fo:font-style="italic"/>
  </style:style>
  <style:style style:name="Illustration" style:family="paragraph" style:parent-style-name="Caption" style:class="extra"/>
  <style:style style:name="Table" style:family="paragraph" style:parent-style-name="Caption" style:class="extra"/>
  <style:style style:name="Text" style:family="paragraph" style:parent-style-name="Caption" style:class="extra"/>
  <style:style style:name="Frame contents" style:family="paragraph" style:parent-style-name="Text body" style:class="extra">
   <style:properties style:font-name="Helvetica" fo:font-size="18pt" fo:line-height="100%"/>
  </style:style>
  <style:style style:name="Footnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties fo:margin-left="0.499cm" fo:margin-right="0cm" fo:font-size="10pt" fo:text-indent="-0.499cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Addressee" style:family="paragraph" style:parent-style-name="Standard" style:class="extra" style:master-page-name="">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0.349cm" fo:font-style="italic" style:page-number="0"/>
  </style:style>
  <style:style style:name="Sender" style:family="paragraph" style:parent-style-name="Standard" style:class="extra" style:master-page-name="">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0cm" fo:font-style="italic" style:page-number="0"/>
  </style:style>
  <style:style style:name="Endnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties fo:margin-left="0.499cm" fo:margin-right="0cm" fo:font-size="10pt" fo:text-indent="-0.499cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
  </style:style>
  <style:style style:name="Drawing" style:family="paragraph" style:parent-style-name="Caption" style:class="extra"/>
  <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
   <style:properties style:font-name="Times New Roman" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="Index Heading" style:family="paragraph" style:parent-style-name="Heading" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="16pt" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Index 1" style:family="paragraph" style:parent-style-name="Index" style:class="index" style:master-page-name="">
   <style:properties fo:margin-left="0.3cm" fo:margin-right="0cm" fo:margin-top="0.049cm" fo:margin-bottom="0.049cm" style:font-name="Palatino" fo:font-size="9pt" fo:text-indent="-0.3cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Index 2" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0.499cm" fo:margin-right="0cm" fo:font-size="9pt" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Index 3" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="1cm" fo:margin-right="0cm" fo:font-size="9pt" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Index Separator" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="1cm" fo:margin-bottom="0.199cm" style:font-name="Palatino1" fo:font-size="12pt" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Contents Heading" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Under_Head1" style:class="index" style:master-page-name="">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0.838cm" fo:margin-top="2.499cm" fo:margin-bottom="0cm" fo:font-size="20pt" fo:font-weight="normal" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0" fo:padding="3.59cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #ffffff" fo:border-bottom="none"/>
  </style:style>
  <style:style style:name="Contents 1" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0.61cm" fo:margin-bottom="0.254cm" style:font-name="Palatino" fo:font-size="10pt" fo:font-weight="bold" fo:text-indent="-0.54cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.443cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 2" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="3.54cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.279cm" style:font-name="Palatino" fo:font-size="10pt" fo:font-weight="normal" fo:text-indent="-1.041cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="14.944cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 3" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="3.54cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.279cm" style:font-name="Palatino" fo:font-size="10pt" fo:text-indent="-0.54cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="14.444cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 4" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="4.001cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.505cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 5" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="4.5cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.005cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index Heading" style:family="paragraph" style:parent-style-name="Heading" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="16pt" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="User Index 1" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="17.002cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 2" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0.499cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="16.503cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 3" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0.998cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="16.004cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 4" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="1.498cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.505cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 5" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="1.997cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.005cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 6" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="12.947cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 7" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="2.995cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="12.448cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 8" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="3.494cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="11.949cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 9" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="3.993cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="11.449cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 10" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="4.493cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="10.95cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Illustration Index Heading" style:family="paragraph" style:parent-style-name="Heading" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="16pt" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
  </style:style>
  <style:style style:name="Illustration Index 1" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.443cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Object index heading" style:family="paragraph" style:parent-style-name="Heading" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="16pt" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
  </style:style>
  <style:style style:name="Object index 1" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.443cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Table index heading" style:family="paragraph" style:parent-style-name="Heading" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="16pt" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
  </style:style>
  <style:style style:name="Table index 1" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.443cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Bibliography Heading" style:family="paragraph" style:parent-style-name="Heading" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="16pt" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
  </style:style>
  <style:style style:name="Bibliography 1" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.443cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 6" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="2.496cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="12.947cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 7" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="2.995cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="12.448cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 8" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="3.494cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="11.949cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 9" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="3.993cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="11.449cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 10" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="4.493cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="10.95cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Title" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Subtitle" style:class="chapter">
   <style:properties fo:font-size="18pt" fo:font-weight="bold" fo:text-align="start" style:justify-single-word="false"/>
  </style:style>
  <style:style style:name="Subtitle" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="chapter">
   <style:properties fo:font-size="14pt" fo:font-style="italic" fo:text-align="center" style:justify-single-word="false"/>
  </style:style>
  <style:style style:name="Quotations" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
   <style:properties fo:margin-left="1cm" fo:margin-right="1cm" fo:margin-top="0cm" fo:margin-bottom="0.349cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Preformatted Text" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:font-name="Courier" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="Horizontal Line" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text body" style:class="html">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0.499cm" fo:font-size="6pt" style:border-line-width-bottom="0.002cm 0.035cm 0.002cm" fo:padding="0cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.039cm double #808080"/>
  </style:style>
  <style:style style:name="List Contents" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
   <style:properties fo:margin-left="0.998cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="List Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="List Contents" style:class="html">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Texttable" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0cm" fo:font-size="9.5pt" fo:line-height="0.39cm" fo:hyphenate="false" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="1" style:page-number="0"/>
  </style:style>
  <style:style style:name="HeadlineIndex" style:family="paragraph" style:parent-style-name="Header">
   <style:properties fo:font-size="20pt" fo:padding="3.191cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #ffffff" fo:border-bottom="none"/>
  </style:style>
  <style:style style:name="PartNumText" style:family="paragraph" style:parent-style-name="Illustration">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:font-name="Helvetica1" fo:font-size="7pt" fo:font-style="normal"/>
  </style:style>
  <style:style style:name="TitelText" style:family="paragraph" style:parent-style-name="Frame contents" style:master-page-name="">
   <style:properties fo:font-size="24pt" fo:text-align="end" style:justify-single-word="false" style:page-number="0"/>
  </style:style>
  <style:style style:name="SubTitelText" style:family="paragraph" style:parent-style-name="Frame contents" style:master-page-name="">
   <style:properties fo:font-size="16pt" fo:text-align="end" style:justify-single-word="false" style:page-number="0"/>
  </style:style>
  <style:style style:name="Code" style:family="paragraph" style:parent-style-name="Paragraph" style:master-page-name="">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:font-name="Courier New" fo:font-size="70%" style:text-underline="none" fo:orphans="4" fo:widows="4" fo:hyphenate="false" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="1" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0" fo:background-color="#e6e6e6" fo:keep-with-next="false">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Reference Header" style:family="paragraph" style:parent-style-name="Heading 5" style:next-style-name="Text body" style:auto-update="true" style:master-page-name="">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0.379cm" fo:margin-bottom="0.25cm" fo:text-align="start" style:justify-single-word="false" fo:orphans="2" fo:widows="2" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0" fo:break-before="auto" fo:break-after="auto"/>
  </style:style>
  <style:style style:name="Table Title" style:family="paragraph" style:parent-style-name="Table" style:next-style-name="Table Heading" style:master-page-name="">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" style:font-name="Palatino2" fo:font-style="normal" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0"/>
  </style:style>
  <style:style style:name="CopyrightText" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.15cm" fo:margin-bottom="0cm" style:font-name="Palatino" fo:font-size="9pt" fo:hyphenate="true" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="no-limit" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Figure Code" style:family="paragraph" style:parent-style-name="Code" style:master-page-name="">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.102cm" style:font-name="Courier New1" fo:font-size="9pt" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops>
     <style:tab-stop style:position="6.35cm"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Figure Code Map" style:family="paragraph" style:parent-style-name="Figure Code">
   <style:properties style:font-name="Times New Roman2"/>
  </style:style>
  <style:style style:name="ReviewComment" style:family="paragraph" style:parent-style-name="Standard">
   <style:properties fo:font-size="10pt" fo:background-color="#ffcc99">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="CodeInLists" style:family="paragraph" style:parent-style-name="Numbering 1" style:master-page-name="">
   <style:properties fo:margin-left="3.048cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:font-name="Courier New1" fo:font-size="7pt" fo:line-height="100%" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0"/>
  </style:style>
  <style:style style:name="ParagraphInList" style:family="paragraph" style:parent-style-name="Numbering 1">
   <style:properties fo:margin-left="3.048cm" fo:margin-right="0cm" fo:margin-top="0.28cm" fo:margin-bottom="0.28cm" style:font-name="Palatino3" fo:font-size="9.5pt" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Figure Code 2" style:family="paragraph" style:parent-style-name="Code">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.051cm" fo:font-size="8pt" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Head 1" style:family="paragraph" style:parent-style-name="Heading 1" style:next-style-name="Under_Head1" style:master-page-name="Chapter_Start">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="2.499cm" fo:margin-bottom="0cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="24pt" fo:font-weight="normal" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0" fo:break-before="auto" fo:break-after="auto"/>
  </style:style>
  <style:style style:name="Under_Head1" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Paragraph">
   <style:properties fo:font-size="9.5pt" fo:padding="0.15cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="ChapterText" style:family="paragraph" style:parent-style-name="Heading 2" style:master-page-name="">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-transform="uppercase" style:font-name="Helvetica" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops>
     <style:tab-stop style:position="2.2cm" style:type="right"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Paragraph" style:family="paragraph" style:parent-style-name="Text body" style:master-page-name="">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0.229cm" fo:margin-bottom="0.229cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="10pt" fo:orphans="2" fo:widows="2" fo:hyphenate="true" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="no-limit" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0"/>
  </style:style>
  <style:style style:name="Head 2" style:family="paragraph" style:parent-style-name="Heading 2" style:next-style-name="Paragraph" style:master-page-name="">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="1cm" fo:margin-bottom="0.4cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="18pt" fo:font-style="normal" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0"/>
  </style:style>
  <style:style style:name="Head 3" style:family="paragraph" style:parent-style-name="Heading 3" style:next-style-name="Paragraph">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="1cm" fo:margin-bottom="0.3cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="16pt" fo:font-weight="normal" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Head 4" style:family="paragraph" style:parent-style-name="Heading 4" style:next-style-name="Paragraph">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0.891cm" fo:margin-bottom="0.199cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="14pt" fo:font-style="normal" fo:font-weight="normal" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Head 5" style:family="paragraph" style:parent-style-name="Heading 5" style:next-style-name="Paragraph" style:master-page-name="">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0.589cm" fo:margin-bottom="0.101cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="12pt" fo:font-style="italic" fo:font-weight="normal" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0"/>
  </style:style>
  <style:style style:name="Head 6" style:family="paragraph" style:parent-style-name="Heading 6" style:next-style-name="Paragraph">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0.589cm" fo:margin-bottom="0.101cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="10pt" fo:font-style="italic" fo:font-weight="normal" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="TextInTable" style:family="paragraph" style:parent-style-name="Table Contents" style:master-page-name="">
   <style:properties fo:margin-top="0.28cm" fo:margin-bottom="0.28cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="9pt" fo:hyphenate="true" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="no-limit" style:page-number="0"/>
  </style:style>
  <style:style style:name="TableHead" style:family="paragraph" style:parent-style-name="Table Heading" style:master-page-name="">
   <style:properties fo:color="#000000" style:font-name="Palatino" fo:font-size="10pt" fo:font-style="normal" fo:text-align="start" style:justify-single-word="false" fo:hyphenate="true" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="no-limit" style:page-number="0"/>
  </style:style>
  <style:style style:name="PropText" style:family="paragraph" style:parent-style-name="Preformatted Text">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:color="#000000" style:font-name="Courier New2" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="TOC_Head" style:family="paragraph" style:parent-style-name="Contents Heading" style:next-style-name="Under_Head1" style:master-page-name="TOC_Start">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:font-name="Palatino" style:page-number="0" fo:padding="0cm" fo:border="none"/>
  </style:style>
  <style:style style:name="TOC_Level1" style:family="paragraph" style:parent-style-name="Contents 1"/>
  <style:style style:name="TOC_Level2" style:family="paragraph" style:parent-style-name="Contents 2"/>
  <style:style style:name="TOC_Level3" style:family="paragraph" style:parent-style-name="Contents 3"/>
  <style:style style:name="Index_Head" style:family="paragraph" style:parent-style-name="Index Heading" style:master-page-name="Index_Start">
   <style:properties style:page-number="0"/>
  </style:style>
  <style:style style:name="Index_Separation" style:family="paragraph" style:parent-style-name="Index Separator" style:master-page-name="">
   <style:properties fo:margin-top="0.499cm" fo:margin-bottom="0cm" style:font-name="Helvetica2" fo:font-weight="bold" style:page-number="0" fo:keep-with-next="true"/>
  </style:style>
  <style:style style:name="Index_Level1" style:family="paragraph" style:parent-style-name="Index 1">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="10pt" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Index_Level2" style:family="paragraph" style:parent-style-name="Index 2">
   <style:properties style:font-name="Palatino" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="Copyright" style:family="paragraph" style:parent-style-name="Head 2">
   <style:properties fo:margin-left="0cm" fo:margin-right="0.838cm" fo:font-size="16pt" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="BottomTitelLine" style:family="paragraph" style:parent-style-name="Frame contents">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="8pt" fo:text-indent="0cm" style:auto-text-indent="false" fo:padding="0.049cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table_Note" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties fo:margin-left="2.799cm" fo:margin-right="0cm" fo:margin-top="0.079cm" fo:margin-bottom="0cm" fo:font-size="8pt" fo:font-style="normal" fo:text-indent="-0.259cm" style:auto-text-indent="false">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="TitledListBody" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties fo:margin-left="3.05cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.28cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="TitledListHead" style:family="paragraph" style:parent-style-name="Paragraph" style:next-style-name="TitledListBody" style:master-page-name="">
   <style:properties fo:margin-top="0.28cm" fo:margin-bottom="0cm" fo:font-style="italic" style:page-number="0" fo:keep-with-next="true"/>
  </style:style>
  <style:style style:name="TipInTable" style:family="paragraph" style:parent-style-name="TextInTable"/>
  <style:style style:name="TitledListCode" style:family="paragraph" style:parent-style-name="TitledListBody">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:font-name="Courier New1" fo:font-size="70%" fo:background-color="#e6e6e6">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="MethodSignatures" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties fo:margin-left="3.039cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:font-name="Courier New1" fo:font-size="7pt" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="TableHeadLeft" style:family="paragraph" style:parent-style-name="TableHead">
   <style:properties fo:margin-left="0.3cm" fo:margin-right="0cm" fo:text-align="start" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="TableCode" style:family="paragraph" style:parent-style-name="TextInTable">
   <style:properties style:font-name="Courier New1" fo:font-size="90%"/>
  </style:style>
  <style:style style:name="Listing" style:family="paragraph" style:parent-style-name="Paragraph" style:next-style-name="Paragraph">
   <style:properties fo:margin-top="0.101cm" fo:margin-bottom="0.28cm" fo:font-size="9pt" fo:font-style="italic"/>
  </style:style>
  <style:style style:name="Output" style:family="paragraph" style:parent-style-name="Code">
   <style:properties fo:background-color="#ffffff" fo:padding="0.049cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="TableFootnote" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties fo:margin-left="2.799cm" fo:margin-right="0cm" fo:margin-top="0.079cm" fo:margin-bottom="0cm" style:font-name="Palatino3" fo:font-size="8pt" fo:text-indent="-0.259cm" style:auto-text-indent="false">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Normal" style:family="paragraph" style:parent-style-name="Standard">
   <style:properties fo:color="#000000" fo:font-size="10pt" style:text-background-color="#ffffff" style:font-size-asian="10pt" style:font-size-complex="10pt" style:text-autospace="none"/>
  </style:style>
  <style:style style:name="Footnote Symbol" style:family="text"/>
  <style:style style:name="Caption characters" style:family="text"/>
  <style:style style:name="Numbering Symbols" style:family="text"/>
  <style:style style:name="Bullet Symbols" style:family="text">
   <style:properties style:font-name="ZapfDingbats" fo:font-size="6pt"/>
  </style:style>
  <style:style style:name="Internet link" style:family="text">
   <style:properties fo:color="#000080" style:text-underline="single" style:text-underline-color="font-color"/>
  </style:style>
  <style:style style:name="Visited Internet Link" style:family="text">
   <style:properties fo:color="#800000" style:text-underline="single" style:text-underline-color="font-color"/>
  </style:style>
  <style:style style:name="Placeholder" style:family="text">
   <style:properties fo:font-variant="small-caps" fo:color="#008080" style:text-underline="dotted" style:text-underline-color="font-color"/>
  </style:style>
  <style:style style:name="Main index entry" style:family="text">
   <style:properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
  </style:style>
  <style:style style:name="Footnote anchor" style:family="text">
   <style:properties style:text-position="super 58%"/>
  </style:style>
  <style:style style:name="Emphasis" style:family="text">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="Strong Emphasis" style:family="text">
   <style:properties fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Source Text" style:family="text">
   <style:properties style:font-name="Courier New3"/>
  </style:style>
  <style:style style:name="Example" style:family="text">
   <style:properties style:font-name="Courier New3"/>
  </style:style>
  <style:style style:name="User Entry" style:family="text">
   <style:properties style:font-name="Courier New3"/>
  </style:style>
  <style:style style:name="Definition" style:family="text"/>
  <style:style style:name="PageNumber" style:family="text">
   <style:properties style:font-name="Helvetica3" fo:font-size="9pt" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="ChapterNummer" style:family="text">
   <style:properties style:font-name="Helvetica3" fo:font-size="18pt" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="White" style:family="text"/>
  <style:style style:name="Code (in text)" style:family="text">
   <style:properties fo:color="#000000" style:font-name="Courier New1" fo:font-size="9pt"/>
  </style:style>
  <style:style style:name="Default Paragraph Font" style:family="text" style:parent-style-name="Normal">
   <style:properties style:font-name="Times New Roman" fo:font-size="12pt"/>
  </style:style>
  <style:style style:name="Normal" style:family="text">
   <style:properties style:font-name="Arial1" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="Page_Number" style:family="text">
   <style:properties style:font-name="Helvetica3" fo:font-size="9pt" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Enumeration_1" style:family="text" style:parent-style-name="Bullet Symbols"/>
  <style:style style:name="CITE" style:family="text">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="CODE" style:family="text">
   <style:properties style:font-name="Courier New4"/>
  </style:style>
  <style:style style:name="EM" style:family="text">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="KBD" style:family="text">
   <style:properties style:font-name="Courier New4"/>
  </style:style>
  <style:style style:name="SAMP" style:family="text">
   <style:properties style:font-name="Courier New4"/>
  </style:style>
  <style:style style:name="STRONG" style:family="text">
   <style:properties fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="VAR" style:family="text">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="TT" style:family="text">
   <style:properties style:font-name="Courier New4"/>
  </style:style>
  <style:style style:name="DFN" style:family="text"/>
  <style:style style:name="Q" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="LANG" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="AU" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="PERSON" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="ACRONYM" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="ABBREV" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="INS" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="DEL" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="BLINK" style:family="text">
   <style:properties fo:color="#ffff00" fo:text-shadow="1pt 1pt"/>
  </style:style>
  <style:style style:name="Kapitälchen" style:family="text">
   <style:properties fo:font-variant="small-caps" fo:font-size="11pt"/>
  </style:style>
  <style:style style:name="Tasten" style:family="text">
   <style:properties style:font-name="Times" fo:font-size="11pt" fo:font-style="italic" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Großbuch" style:family="text">
   <style:properties fo:text-transform="uppercase"/>
  </style:style>
  <style:style style:name="CODE Comment" style:family="text" style:parent-style-name="CODE">
   <style:properties fo:color="#008000"/>
  </style:style>
  <style:style style:name="CODE KeyWord" style:family="text" style:parent-style-name="CODE">
   <style:properties fo:color="#000000" fo:font-size="9pt"/>
  </style:style>
  <style:style style:name="CODE String" style:family="text" style:parent-style-name="CODE">
   <style:properties fo:color="#008080"/>
  </style:style>
  <style:style style:name="CODE Emphasis" style:family="text" style:parent-style-name="CodeEmphasis"/>
  <style:style style:name="www/ftp/email" style:family="text" style:parent-style-name="Emphasis"/>
  <style:style style:name="Buttons/Menus" style:family="text">
   <style:properties fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="CodeEmphasis" style:family="text" style:parent-style-name="DefaultCode">
   <style:properties fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Reference" style:family="text">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="DefaultParagraph" style:family="text">
   <style:properties style:font-name="Palatino3" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="MethodSignatureEmphasis" style:family="text" style:parent-style-name="DefaultParagraph">
   <style:properties style:font-name="Courier New5" fo:font-size="7pt" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="DefaultCode" style:family="text" style:parent-style-name="DefaultParagraph">
   <style:properties style:font-name="Courier New1" fo:font-size="7pt"/>
  </style:style>
  <style:style style:name="Kommentar" style:family="text" style:parent-style-name="Source Text">
   <style:properties fo:color="#008000"/>
  </style:style>
  <style:style style:name="ChapterRef" style:family="text">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="Frame" style:family="graphics">
   <style:properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" fo:margin-left="0.201cm" fo:margin-right="0.201cm" fo:margin-top="0.201cm" fo:margin-bottom="0.201cm" style:wrap="dynamic" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph-content" style:horizontal-pos="center" style:horizontal-rel="paragraph-content" fo:background-color="transparent" style:background-transparency="100%" fo:padding="0cm" fo:border="none">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Graphics" style:family="graphics">
   <style:properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="none" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/>
  </style:style>
  <style:style style:name="OLE" style:family="graphics">
   <style:properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="none" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/>
  </style:style>
  <style:style style:name="Formula" style:family="graphics">
   <style:properties text:anchor-type="as-char" svg:y="0cm" style:vertical-pos="top" style:vertical-rel="baseline"/>
  </style:style>
  <style:style style:name="Labels" style:family="graphics" style:auto-update="true">
   <style:properties text:anchor-type="as-char" svg:y="0cm" fo:margin-left="0.201cm" fo:margin-right="0.201cm" style:protect="size position" style:vertical-pos="top" style:vertical-rel="baseline"/>
  </style:style>
  <style:style style:name="ChapterFrame" style:family="graphics">
   <style:properties svg:width="2.54cm" fo:min-height="0.801cm" text:anchor-type="page" svg:x="0cm" svg:y="0cm" style:wrap="run-through" style:vertical-pos="top" style:vertical-rel="page-content" style:horizontal-pos="left" style:horizontal-rel="page-content" fo:padding="0.049cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Illustration" style:family="graphics">
   <style:properties text:anchor-type="page" svg:x="0cm" svg:y="0cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.499cm" fo:margin-bottom="0.499cm" style:wrap="none" style:vertical-pos="from-top" style:vertical-rel="page-content" style:horizontal-pos="from-left" style:horizontal-rel="page-content" fo:background-color="transparent" style:background-transparency="100%" fo:padding="0cm" fo:border="none">
    <style:background-image/>
    <style:columns fo:column-count="0" fo:column-gap="0cm"/>
   </style:properties>
  </style:style>
  <text:outline-style>
   <text:outline-level-style text:level="1" text:style-name="White" style:num-format="1" text:start-value="6">
    <style:properties text:min-label-width="2.54cm"/>
   </text:outline-level-style>
   <text:outline-level-style text:level="2" style:num-suffix=" " style:num-format="1" text:display-levels="2"/>
   <text:outline-level-style text:level="3" style:num-suffix=" " style:num-format="1" text:display-levels="3"/>
   <text:outline-level-style text:level="4" style:num-format=""/>
   <text:outline-level-style text:level="5" style:num-format=""/>
   <text:outline-level-style text:level="6" style:num-format=""/>
   <text:outline-level-style text:level="7" style:num-format=""/>
   <text:outline-level-style text:level="8" style:num-format=""/>
   <text:outline-level-style text:level="9" style:num-format=""/>
   <text:outline-level-style text:level="10" style:num-format=""/>
  </text:outline-style>
  <text:list-style style:name="Numbering 1">
   <text:list-level-style-number text:level="1" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="2" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="0.499cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="3" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="0.999cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="4" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1.498cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="5" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1.997cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="6" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2.496cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="7" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2.995cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="8" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.494cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="9" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.994cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="10" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.493cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
  </text:list-style>
  <text:list-style style:name="List 1">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="0.395cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="0.79cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="1.186cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="1.581cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="1.976cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="2.371cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="2.766cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="3.161cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="3.556cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="List 2">
   <text:list-level-style-bullet text:level="1" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="0.297cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="0.593cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="0.889cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="1.186cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="1.482cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="1.778cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="2.075cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="2.371cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="2.667cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="Enumeration_1">
   <text:list-level-style-bullet text:level="1" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="0.499cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="0.999cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="1.498cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="1.997cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="2.496cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="2.995cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="3.494cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="3.994cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="4.493cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:footnotes-configuration text:citation-style-name="Footnote Symbol" text:citation-body-style-name="Footnote anchor" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
  <text:endnotes-configuration style:num-format="i" text:start-value="0"/>
  <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
 </office:styles>
 <office:automatic-styles>
  <style:style style:name="Table3" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table3.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Table3.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle39" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle39.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle39.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle31" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle31.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle31.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle34" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle34.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle34.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle34.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle34.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle32" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle32.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle32.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle40" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle40.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle40.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle43" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle43.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle43.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle43.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle43.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle41" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle41.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle41.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle35" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle35.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle35.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle44" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle44.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle44.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle44.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle44.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle29" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle29.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle29.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle30" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle30.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle30.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle50" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle50.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle50.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle50.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle50.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle36" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle36.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle36.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle36.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle36.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle46" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle46.A" style:family="table-column">
   <style:properties style:column-width="3.378cm" style:rel-column-width="14337*"/>
  </style:style>
  <style:style style:name="Tabelle46.B" style:family="table-column">
   <style:properties style:column-width="12.061cm" style:rel-column-width="51198*"/>
  </style:style>
  <style:style style:name="Tabelle46.A1" style:family="table-cell">
   <style:properties fo:background-color="#e6e6e6" fo:padding="0.097cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Tabelle46.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle46.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle45" style:family="table">
   <style:properties style:width="17.979cm" fo:margin-top="0.199cm" fo:margin-bottom="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle45.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle45.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle45.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle45.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle47" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle47.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle47.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle3" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle3.A" style:family="table-column">
   <style:properties style:column-width="2.579cm" style:rel-column-width="10946*"/>
  </style:style>
  <style:style style:name="Tabelle3.B" style:family="table-column">
   <style:properties style:column-width="4.987cm" style:rel-column-width="21166*"/>
  </style:style>
  <style:style style:name="Tabelle3.C" style:family="table-column">
   <style:properties style:column-width="7.874cm" style:rel-column-width="33423*"/>
  </style:style>
  <style:style style:name="Tabelle3.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle3.C1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle3.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle3.C2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle1" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle1.A" style:family="table-column">
   <style:properties style:column-width="3.42cm" style:rel-column-width="14517*"/>
  </style:style>
  <style:style style:name="Tabelle1.B" style:family="table-column">
   <style:properties style:column-width="6.01cm" style:rel-column-width="25508*"/>
  </style:style>
  <style:style style:name="Tabelle1.C" style:family="table-column">
   <style:properties style:column-width="6.01cm" style:rel-column-width="25510*"/>
  </style:style>
  <style:style style:name="Tabelle1.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle1.C1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle1.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle1.C2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle33" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle33.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle33.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle33.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle33.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle49" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle49.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle49.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle49.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle49.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle48" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle48.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle48.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle2" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle2.A" style:family="table-column">
   <style:properties style:column-width="5.382cm" style:rel-column-width="22843*"/>
  </style:style>
  <style:style style:name="Tabelle2.B" style:family="table-column">
   <style:properties style:column-width="10.058cm" style:rel-column-width="42692*"/>
  </style:style>
  <style:style style:name="Tabelle2.A1" style:family="table-cell">
   <style:properties fo:background-color="#e6e6ff" fo:padding="0.097cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Tabelle2.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle2.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle38" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle38.A" style:family="table-column">
   <style:properties style:column-width="3.175cm" style:rel-column-width="13478*"/>
  </style:style>
  <style:style style:name="Tabelle38.B" style:family="table-column">
   <style:properties style:column-width="12.264cm" style:rel-column-width="52057*"/>
  </style:style>
  <style:style style:name="Tabelle38.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle38.B1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle38.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle38.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle51" style:family="table">
   <style:properties style:width="15.436cm" fo:margin-left="2.544cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle51.A" style:family="table-column">
   <style:properties style:column-width="2.471cm" style:rel-column-width="10489*"/>
  </style:style>
  <style:style style:name="Tabelle51.B" style:family="table-column">
   <style:properties style:column-width="12.965cm" style:rel-column-width="55046*"/>
  </style:style>
  <style:style style:name="Tabelle51.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle51.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle51.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle37" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle37.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle37.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle37.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle37.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle59" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle59.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle59.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle59.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle59.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table9" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table9.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Table9.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle52" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle52.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle52.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle18" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle18.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle18.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle53" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle53.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle53.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle53.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle53.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle55" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle55.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle55.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle55.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle55.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle56" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle56.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle56.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle56.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle56.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle42" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle42.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle42.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle54" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle54.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle54.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle54.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle54.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle21" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle21.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle21.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle21.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle21.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle22" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle22.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle22.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle22.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle22.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table6" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table6.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Table6.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Table6.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Table6.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table7" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table7.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Table7.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Table7.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Table7.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table8" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table8.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Table8.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Table8.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Table8.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle4" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle4.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle4.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle4.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle4.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle57" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle57.A" style:family="table-column">
   <style:properties style:column-width="4.076cm" style:rel-column-width="17302*"/>
  </style:style>
  <style:style style:name="Tabelle57.B" style:family="table-column">
   <style:properties style:column-width="11.363cm" style:rel-column-width="48233*"/>
  </style:style>
  <style:style style:name="Tabelle57.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle57.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle57.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle5" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle5.A" style:family="table-column">
   <style:properties style:column-width="2.584cm" style:rel-column-width="10971*"/>
  </style:style>
  <style:style style:name="Tabelle5.B" style:family="table-column">
   <style:properties style:column-width="5.985cm" style:rel-column-width="25402*"/>
  </style:style>
  <style:style style:name="Tabelle5.C" style:family="table-column">
   <style:properties style:column-width="3.29cm" style:rel-column-width="13966*"/>
  </style:style>
  <style:style style:name="Tabelle5.D" style:family="table-column">
   <style:properties style:column-width="3.581cm" style:rel-column-width="15196*"/>
  </style:style>
  <style:style style:name="Tabelle5.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle5.D1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle5.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle5.D2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle26" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle26.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle26.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle26.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle26.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle27" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle27.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle27.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle27.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle27.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle28" style:family="table">
   <style:properties style:width="17.979cm" fo:margin-top="0cm" fo:margin-bottom="0.3cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle28.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle28.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle28.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle28.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle61" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle61.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle61.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle61.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle61.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle62" style:family="table">
   <style:properties style:width="17.979cm" fo:margin-top="0cm" fo:margin-bottom="0.3cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle62.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle62.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle62.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle62.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle63" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle63.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle63.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle63.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle63.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle64" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle64.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle64.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle64.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle64.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle65" style:family="table">
   <style:properties style:width="15.48cm" table:align="right"/>
  </style:style>
  <style:style style:name="Tabelle65.A" style:family="table-column">
   <style:properties style:column-width="8.742cm"/>
  </style:style>
  <style:style style:name="Tabelle65.B" style:family="table-column">
   <style:properties style:column-width="6.738cm"/>
  </style:style>
  <style:style style:name="Tabelle65.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle65.B1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle65.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle65.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle65.B8" style:family="table-cell">
   <style:properties fo:background-color="transparent" fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Tabelle66" style:family="table">
   <style:properties style:width="14.951cm" table:align="right" fo:keep-with-next="true" style:may-break-between-rows="false"/>
  </style:style>
  <style:style style:name="Tabelle66.A" style:family="table-column">
   <style:properties style:column-width="5.269cm"/>
  </style:style>
  <style:style style:name="Tabelle66.B" style:family="table-column">
   <style:properties style:column-width="2.402cm"/>
  </style:style>
  <style:style style:name="Tabelle66.C" style:family="table-column">
   <style:properties style:column-width="1.543cm"/>
  </style:style>
  <style:style style:name="Tabelle66.D" style:family="table-column">
   <style:properties style:column-width="1.655cm"/>
  </style:style>
  <style:style style:name="Tabelle66.E" style:family="table-column">
   <style:properties style:column-width="1.388cm"/>
  </style:style>
  <style:style style:name="Tabelle66.F" style:family="table-column">
   <style:properties style:column-width="1.367cm"/>
  </style:style>
  <style:style style:name="Tabelle66.G" style:family="table-column">
   <style:properties style:column-width="1.326cm"/>
  </style:style>
  <style:style style:name="Tabelle66.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle66.G1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle66.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle66.B2" style:family="table-cell">
   <style:properties fo:vertical-align="middle" fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle66.G2" style:family="table-cell">
   <style:properties fo:vertical-align="middle" fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table1" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table1.A" style:family="table-column">
   <style:properties style:column-width="5.121cm" style:rel-column-width="21735*"/>
  </style:style>
  <style:style style:name="Table1.B" style:family="table-column">
   <style:properties style:column-width="10.319cm" style:rel-column-width="43800*"/>
  </style:style>
  <style:style style:name="Table1.A1" style:family="table-cell">
   <style:properties fo:background-color="#e6e6ff" fo:padding="0.097cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Table1.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table1.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table2" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table2.A" style:family="table-column">
   <style:properties style:column-width="5.338cm" style:rel-column-width="22656*"/>
  </style:style>
  <style:style style:name="Table2.B" style:family="table-column">
   <style:properties style:column-width="10.102cm" style:rel-column-width="42879*"/>
  </style:style>
  <style:style style:name="Table2.A1" style:family="table-cell">
   <style:properties fo:background-color="#e6e6ff" fo:padding="0.049cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Table2.A2" style:family="table-cell">
   <style:properties fo:padding="0.049cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table2.B2" style:family="table-cell">
   <style:properties fo:padding="0.049cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table4" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table4.A" style:family="table-column">
   <style:properties style:column-width="5.375cm" style:rel-column-width="22813*"/>
  </style:style>
  <style:style style:name="Table4.B" style:family="table-column">
   <style:properties style:column-width="10.065cm" style:rel-column-width="42722*"/>
  </style:style>
  <style:style style:name="Table4.A1" style:family="table-cell">
   <style:properties fo:background-color="#e6e6ff" fo:padding="0.049cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Table4.A2" style:family="table-cell">
   <style:properties fo:padding="0.049cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table4.B2" style:family="table-cell">
   <style:properties fo:padding="0.049cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle58" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle58.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle58.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle6" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle6.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle6.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle6.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle6.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table5" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table5.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Table5.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle7" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle7.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle7.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle7.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle7.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle8" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle8.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle8.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle8.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle8.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle9" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle9.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle9.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle9.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle9.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle10" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle10.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle10.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle10.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle10.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle11" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle11.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle11.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle11.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle11.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle12" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle12.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle12.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle12.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle12.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle60" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle60.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle60.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle13" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle13.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle13.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle13.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle13.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="type_props" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="type_props.A" style:family="table-column">
   <style:properties style:column-width="3.485cm" style:rel-column-width="14794*"/>
  </style:style>
  <style:style style:name="type_props.B" style:family="table-column">
   <style:properties style:column-width="11.954cm" style:rel-column-width="50741*"/>
  </style:style>
  <style:style style:name="type_props.A1" style:family="table-cell">
   <style:properties fo:background-color="transparent" fo:padding="0.097cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="type_props.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="type_props.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle14" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle14.A" style:family="table-column">
   <style:properties style:column-width="3.485cm" style:rel-column-width="14796*"/>
  </style:style>
  <style:style style:name="Tabelle14.B" style:family="table-column">
   <style:properties style:column-width="11.954cm" style:rel-column-width="50739*"/>
  </style:style>
  <style:style style:name="Tabelle14.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle14.B1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle14.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle14.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle15" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle15.A" style:family="table-column">
   <style:properties style:column-width="3.485cm" style:rel-column-width="14796*"/>
  </style:style>
  <style:style style:name="Tabelle15.B" style:family="table-column">
   <style:properties style:column-width="11.954cm" style:rel-column-width="50739*"/>
  </style:style>
  <style:style style:name="Tabelle15.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle15.B1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle15.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle15.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle16" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle16.A" style:family="table-column">
   <style:properties style:column-width="3.558cm" style:rel-column-width="15103*"/>
  </style:style>
  <style:style style:name="Tabelle16.B" style:family="table-column">
   <style:properties style:column-width="2.489cm" style:rel-column-width="10565*"/>
  </style:style>
  <style:style style:name="Tabelle16.C" style:family="table-column">
   <style:properties style:column-width="9.393cm" style:rel-column-width="39867*"/>
  </style:style>
  <style:style style:name="Tabelle16.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle16.C1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle16.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle16.C2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle17" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle17.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle17.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle17.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle17.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle19" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle19.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle19.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle19.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle19.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle20" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle20.A" style:family="table-column">
   <style:properties style:column-width="2.72cm" style:rel-column-width="11545*"/>
  </style:style>
  <style:style style:name="Tabelle20.B" style:family="table-column">
   <style:properties style:column-width="12.719cm" style:rel-column-width="53990*"/>
  </style:style>
  <style:style style:name="Tabelle20.A1" style:family="table-cell">
   <style:properties fo:background-color="#e6e6e6" fo:padding="0.097cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Tabelle20.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle20.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table10" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table10.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Table10.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Table10.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Table10.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table11" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table11.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Table11.A1" style:family="table-cell">
   <style:properties fo:padding-left="0cm" fo:padding-right="0.101cm" fo:padding-top="0.101cm" fo:padding-bottom="0.101cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle23" style:family="table">
   <style:properties style:width="15.439cm" table:align="right"/>
  </style:style>
  <style:style style:name="Tabelle23.A" style:family="table-column">
   <style:properties style:column-width="4.018cm"/>
  </style:style>
  <style:style style:name="Tabelle23.B" style:family="table-column">
   <style:properties style:column-width="11.421cm"/>
  </style:style>
  <style:style style:name="Tabelle23.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle23.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle23.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table39" style:family="table">
   <style:properties style:width="15.468cm" table:align="right"/>
  </style:style>
  <style:style style:name="Table39.A" style:family="table-column">
   <style:properties style:column-width="4.156cm"/>
  </style:style>
  <style:style style:name="Table39.B" style:family="table-column">
   <style:properties style:column-width="11.312cm"/>
  </style:style>
  <style:style style:name="Table39.A1" style:family="table-cell">
   <style:properties fo:background-color="transparent" fo:padding="0.097cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Table39.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table39.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle24" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle24.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle24.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle24.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle24.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle25" style:family="table">
   <style:properties style:width="15.439cm" table:align="right" style:may-break-between-rows="false"/>
  </style:style>
  <style:style style:name="Tabelle25.A" style:family="table-column">
   <style:properties style:column-width="4.018cm"/>
  </style:style>
  <style:style style:name="Tabelle25.B" style:family="table-column">
   <style:properties style:column-width="11.421cm"/>
  </style:style>
  <style:style style:name="Tabelle25.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle25.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle25.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle67" style:family="table">
   <style:properties style:width="14.446cm" fo:margin-left="2.512cm" fo:margin-right="1.021cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle67.A" style:family="table-column">
   <style:properties style:column-width="2.644cm" style:rel-column-width="11996*"/>
  </style:style>
  <style:style style:name="Tabelle67.B" style:family="table-column">
   <style:properties style:column-width="1.998cm" style:rel-column-width="9067*"/>
  </style:style>
  <style:style style:name="Tabelle67.C" style:family="table-column">
   <style:properties style:column-width="9.804cm" style:rel-column-width="44472*"/>
  </style:style>
  <style:style style:name="Tabelle67.A1" style:family="table-cell">
   <style:properties fo:background-color="#e6e6e6" fo:padding="0.097cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Tabelle67.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle67.C2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle68" style:family="table">
   <style:properties style:width="17.979cm" fo:margin-top="0cm" fo:margin-bottom="0.199cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle68.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle68.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle68.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle68.B1" style:family="table-cell">
   <style:properties fo:background-color="transparent" fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Tabelle69" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle69.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle69.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle69.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle69.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle70" style:family="table">
   <style:properties style:width="17.979cm" fo:margin-top="0cm" fo:margin-bottom="0.3cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle70.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle70.A1" style:family="table-cell">
   <style:properties fo:padding-left="0cm" fo:padding-right="0.101cm" fo:padding-top="0.101cm" fo:padding-bottom="0.101cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle71" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle71.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle71.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle71.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle71.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle72" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle72.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle72.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle73" style:family="table">
   <style:properties style:width="15.473cm" fo:margin-left="2.512cm" fo:margin-right="-0.005cm" fo:margin-top="0cm" fo:margin-bottom="0.3cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle73.A" style:family="table-column">
   <style:properties style:column-width="2.129cm" style:rel-column-width="9018*"/>
  </style:style>
  <style:style style:name="Tabelle73.B" style:family="table-column">
   <style:properties style:column-width="2.182cm" style:rel-column-width="9242*"/>
  </style:style>
  <style:style style:name="Tabelle73.C" style:family="table-column">
   <style:properties style:column-width="11.162cm" style:rel-column-width="47275*"/>
  </style:style>
  <style:style style:name="Tabelle73.A1" style:family="table-cell">
   <style:properties fo:background-color="#e6e6e6" fo:padding="0.097cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Tabelle73.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle73.C2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle74" style:family="table">
   <style:properties style:width="15.452cm" fo:margin-left="2.512cm" fo:margin-right="0.016cm" fo:margin-top="0cm" fo:margin-bottom="0.3cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle74.A" style:family="table-column">
   <style:properties style:column-width="2.127cm" style:rel-column-width="9023*"/>
  </style:style>
  <style:style style:name="Tabelle74.B" style:family="table-column">
   <style:properties style:column-width="2.182cm" style:rel-column-width="9255*"/>
  </style:style>
  <style:style style:name="Tabelle74.C" style:family="table-column">
   <style:properties style:column-width="2.27cm" style:rel-column-width="9629*"/>
  </style:style>
  <style:style style:name="Tabelle74.D" style:family="table-column">
   <style:properties style:column-width="8.872cm" style:rel-column-width="37628*"/>
  </style:style>
  <style:style style:name="Tabelle74.A1" style:family="table-cell">
   <style:properties fo:background-color="#e6e6e6" fo:padding="0.097cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Tabelle74.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle74.D2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle74.C3" style:family="table-cell" style:data-style-name="N0">
   <style:properties fo:vertical-align="bottom" fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle75" style:family="table">
   <style:properties style:width="14.005cm" fo:margin-left="2.512cm" fo:margin-right="1.462cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle75.A" style:family="table-column">
   <style:properties style:column-width="1.854cm" style:rel-column-width="8674*"/>
  </style:style>
  <style:style style:name="Tabelle75.B" style:family="table-column">
   <style:properties style:column-width="12.151cm" style:rel-column-width="56861*"/>
  </style:style>
  <style:style style:name="Tabelle75.A1" style:family="table-cell">
   <style:properties fo:background-color="#e6e6e6" fo:padding="0.097cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Tabelle75.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle75.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle76" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle76.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle76.A1" style:family="table-cell">
   <style:properties fo:padding="0cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle77" style:family="table">
   <style:properties style:width="15.468cm" table:align="right"/>
  </style:style>
  <style:style style:name="Tabelle77.A" style:family="table-column">
   <style:properties style:column-width="2.559cm"/>
  </style:style>
  <style:style style:name="Tabelle77.B" style:family="table-column">
   <style:properties style:column-width="12.908cm"/>
  </style:style>
  <style:style style:name="Tabelle77.A1" style:family="table-cell">
   <style:properties fo:background-color="#e6e6e6" fo:padding="0.097cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Tabelle77.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle77.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle78" style:family="table">
   <style:properties style:width="15.468cm" table:align="right"/>
  </style:style>
  <style:style style:name="Tabelle78.A" style:family="table-column">
   <style:properties style:column-width="2.559cm"/>
  </style:style>
  <style:style style:name="Tabelle78.B" style:family="table-column">
   <style:properties style:column-width="2.046cm"/>
  </style:style>
  <style:style style:name="Tabelle78.C" style:family="table-column">
   <style:properties style:column-width="10.862cm"/>
  </style:style>
  <style:style style:name="Tabelle78.A1" style:family="table-cell">
   <style:properties fo:background-color="#e6e6e6" fo:padding="0.097cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Tabelle78.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle78.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle78.A5" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="none"/>
  </style:style>
  <style:style style:name="Tabelle79" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle79.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Tabelle79.A1" style:family="table-cell">
   <style:properties fo:padding="0cm" fo:border="none"/>
  </style:style>
  <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Footer right">
   <style:properties fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Head 1" style:master-page-name="Chapter_Start">
   <style:properties style:page-number="0"/>
  </style:style>
  <style:style style:name="P3" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L1"/>
  <style:style style:name="P4" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L2"/>
  <style:style style:name="P5" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L3"/>
  <style:style style:name="P6" style:family="paragraph" style:parent-style-name="TextInTable">
   <style:properties style:text-background-color="#ffffff"/>
  </style:style>
  <style:style style:name="P7" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L4"/>
  <style:style style:name="P8" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties style:text-crossing-out="none"/>
  </style:style>
  <style:style style:name="P9" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties fo:keep-with-next="true"/>
  </style:style>
  <style:style style:name="P10" style:family="paragraph" style:parent-style-name="MethodSignatures">
   <style:properties fo:keep-with-next="true"/>
  </style:style>
  <style:style style:name="P11" style:family="paragraph" style:parent-style-name="Code" style:master-page-name="">
   <style:properties style:page-number="0" fo:keep-with-next="true"/>
  </style:style>
  <style:style style:name="P12" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L5"/>
  <style:style style:name="P13" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L6"/>
  <style:style style:name="P14" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L7"/>
  <style:style style:name="P15" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L8"/>
  <style:style style:name="P16" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L9"/>
  <style:style style:name="P17" style:family="paragraph" style:parent-style-name="Table Heading">
   <style:properties fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="P18" style:family="paragraph" style:parent-style-name="Table Contents">
   <style:properties fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="P19" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="Numbering 1"/>
  <style:style style:name="P20" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L10"/>
  <style:style style:name="P21" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L11"/>
  <style:style style:name="P22" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties fo:margin-top="0.483cm" fo:margin-bottom="0.229cm"/>
  </style:style>
  <style:style style:name="P23" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L12"/>
  <style:style style:name="P24" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L13"/>
  <style:style style:name="P25" style:family="paragraph" style:parent-style-name="Reference Header">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0.379cm" fo:margin-bottom="0.25cm" fo:text-align="start" style:justify-single-word="false" fo:orphans="2" fo:widows="2" fo:text-indent="0cm" style:auto-text-indent="false" fo:break-before="auto" fo:break-after="auto" fo:background-color="#ffffff" fo:keep-with-next="true">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="P26" style:family="paragraph" style:parent-style-name="TableHead">
   <style:properties fo:margin-left="-0.076cm" fo:margin-right="0.004cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="P27" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L14"/>
  <style:style style:name="P28" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L15"/>
  <style:style style:name="P29" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L16"/>
  <style:style style:name="P30" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties style:text-background-color="#ffff00"/>
  </style:style>
  <style:style style:name="P31" style:family="paragraph" style:parent-style-name="TitledListHead">
   <style:properties style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="P32" style:family="paragraph" style:parent-style-name="TitledListBody">
   <style:properties style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="P33" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="P34" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L17"/>
  <style:style style:name="P35" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties fo:margin-left="2.491cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="P36" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L18"/>
  <style:style style:name="P37" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L19"/>
  <style:style style:name="P38" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L20"/>
  <style:style style:name="P39" style:family="paragraph" style:parent-style-name="Head 5">
   <style:properties style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="P40" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L21"/>
  <style:style style:name="P41" style:family="paragraph" style:parent-style-name="TextInTable">
   <style:properties style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="P42" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties style:font-name="Palatino"/>
  </style:style>
  <style:style style:name="P43" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L22"/>
  <style:style style:name="P44" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L23"/>
  <style:style style:name="P45" style:family="paragraph" style:parent-style-name="Head 6">
   <style:properties style:font-name="Palatino4"/>
  </style:style>
  <style:style style:name="P46" style:family="paragraph" style:parent-style-name="Code">
   <style:properties fo:font-size="7pt"/>
  </style:style>
  <style:style style:name="P47" style:family="paragraph" style:parent-style-name="Code">
   <style:properties style:font-name="Courier New8" fo:font-size="7pt"/>
  </style:style>
  <style:style style:name="P48" style:family="paragraph" style:parent-style-name="Code" style:master-page-name="">
   <style:properties style:font-name="Courier New" fo:font-size="7pt" style:page-number="0" fo:keep-with-next="true"/>
  </style:style>
  <style:style style:name="P49" style:family="paragraph" style:parent-style-name="Code">
   <style:properties style:font-name="Courier New" fo:font-size="7pt" fo:keep-with-next="true"/>
  </style:style>
  <style:style style:name="P50" style:family="paragraph" style:parent-style-name="Code">
   <style:properties fo:keep-with-next="true"/>
  </style:style>
  <style:style style:name="P51" style:family="paragraph" style:parent-style-name="Code">
   <style:properties style:font-name="Courier New" fo:font-size="7pt"/>
  </style:style>
  <style:style style:name="P52" style:family="paragraph" style:parent-style-name="Head 5" style:master-page-name="">
   <style:properties style:page-number="0" fo:break-before="auto" fo:break-after="auto"/>
  </style:style>
  <style:style style:name="P53" style:family="paragraph" style:parent-style-name="Code">
   <style:properties fo:margin-left="2.496cm" fo:margin-right="0cm" style:font-name="Courier New8" fo:font-size="7pt" fo:language="en" fo:country="US" style:font-name-asian="Courier New8" style:font-size-asian="10pt" style:font-name-complex="Courier New8" style:font-size-complex="10pt" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="P54" style:family="paragraph" style:parent-style-name="Code">
   <style:properties fo:margin-left="2.496cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="P55" style:family="paragraph" style:parent-style-name="Code">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" style:font-name="Courier New8" fo:font-size="7pt" fo:language="en" fo:country="US" style:font-name-asian="Courier New8" style:font-size-asian="10pt" style:font-name-complex="Courier New8" style:font-size-complex="10pt" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="P56" style:family="paragraph" style:parent-style-name="Code">
   <style:properties fo:margin-left="2.496cm" fo:margin-right="0cm" fo:font-size="7pt" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="P57" style:family="paragraph" style:parent-style-name="Code">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" style:font-name="Courier New8" fo:font-size="7pt" fo:language="en" fo:country="US" style:font-name-asian="Courier New8" style:font-size-asian="10pt" style:font-name-complex="Courier New8" style:font-size-complex="10pt" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="P58" style:family="paragraph" style:parent-style-name="TitledListHead">
   <style:properties style:use-window-font-color="true" style:font-name="Palatino" fo:font-size="10pt" fo:font-weight="normal"/>
  </style:style>
  <style:style style:name="P59" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L24"/>
  <style:style style:name="P60" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L24">
   <style:properties fo:font-style="normal"/>
  </style:style>
  <style:style style:name="P61" style:family="paragraph" style:parent-style-name="Code">
   <style:properties style:font-name="Courier New" fo:font-size="7pt" fo:language="en" fo:country="US" style:font-name-asian="Courier New8" style:font-size-asian="10pt" style:font-name-complex="Courier New8" style:font-size-complex="10pt"/>
  </style:style>
  <style:style style:name="P62" style:family="paragraph" style:parent-style-name="Code">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0cm"/>
  </style:style>
  <style:style style:name="P63" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties fo:font-weight="normal"/>
  </style:style>
  <style:style style:name="P64" style:family="paragraph" style:parent-style-name="Head 5">
   <style:properties fo:font-weight="normal"/>
  </style:style>
  <style:style style:name="P65" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties style:use-window-font-color="true"/>
  </style:style>
  <style:style style:name="P66" style:family="paragraph" style:parent-style-name="Code">
   <style:properties style:use-window-font-color="true" fo:font-size="7pt" style:font-size-asian="7pt" style:font-size-complex="7pt"/>
  </style:style>
  <style:style style:name="P67" style:family="paragraph" style:parent-style-name="Code">
   <style:properties style:use-window-font-color="true"/>
  </style:style>
  <style:style style:name="P68" style:family="paragraph" style:parent-style-name="TableHead">
   <style:properties fo:text-align="start" style:justify-single-word="false"/>
  </style:style>
  <style:style style:name="P69" style:family="paragraph" style:parent-style-name="Head 3">
   <style:properties fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="P70" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L25"/>
  <style:style style:name="P71" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L26"/>
  <style:style style:name="P72" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L27"/>
  <style:style style:name="P73" style:family="paragraph" style:parent-style-name="TextInTable">
   <style:properties fo:font-size="9pt"/>
  </style:style>
  <style:style style:name="P74" style:family="paragraph" style:parent-style-name="TextInTable">
   <style:properties fo:language="en" fo:country="US"/>
  </style:style>
  <style:style style:name="P75" style:family="paragraph" style:parent-style-name="TextInTable">
   <style:properties fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="P76" style:family="paragraph" style:parent-style-name="TextInTable">
   <style:properties fo:font-size="9pt" fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
  </style:style>
  <style:style style:name="P77" style:family="paragraph" style:parent-style-name="TextInTable">
   <style:properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
  </style:style>
  <style:style style:name="P78" style:family="paragraph" style:parent-style-name="TextInTable">
   <style:properties fo:text-align="end" style:justify-single-word="false"/>
  </style:style>
  <style:style style:name="P79" style:family="paragraph" style:parent-style-name="TextInTable">
   <style:properties fo:font-size="9pt" style:font-size-asian="9pt" style:font-size-complex="9pt" style:text-autospace="none"/>
  </style:style>
  <style:style style:name="P80" style:family="paragraph" style:parent-style-name="TextInTable" style:list-style-name="L28"/>
  <style:style style:name="P81" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L29"/>
  <style:style style:name="P82" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L29">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="P83" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="P84" style:family="paragraph" style:parent-style-name="TextInTable" style:list-style-name="L30"/>
  <style:style style:name="P85" style:family="paragraph" style:parent-style-name="TitledListBody" style:list-style-name="L31"/>
  <style:style style:name="P86" style:family="paragraph" style:parent-style-name="TitledListBody" style:list-style-name="L32"/>
  <style:style style:name="P87" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L33"/>
  <style:style style:name="T1" style:family="text">
   <style:properties fo:font-weight="normal"/>
  </style:style>
  <style:style style:name="T2" style:family="text">
   <style:properties fo:language="en" fo:country="US"/>
  </style:style>
  <style:style style:name="T3" style:family="text">
   <style:properties style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="T4" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="T5" style:family="text">
   <style:properties style:letter-kerning="false" style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="T6" style:family="text" style:parent-style-name="Emphasis">
   <style:properties style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="T7" style:family="text">
   <style:properties fo:color="#000000"/>
  </style:style>
  <style:style style:name="T8" style:family="text">
   <style:properties fo:color="#000000" fo:font-weight="normal" style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="T9" style:family="text" style:parent-style-name="www/ftp/email">
   <style:properties style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="T10" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties style:text-crossing-out="none" style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="T11" style:family="text">
   <style:properties style:text-crossing-out="none" style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="T12" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties style:text-crossing-out="none"/>
  </style:style>
  <style:style style:name="T13" style:family="text">
   <style:properties style:text-crossing-out="none"/>
  </style:style>
  <style:style style:name="T14" style:family="text" style:parent-style-name="Emphasis">
   <style:properties fo:font-style="normal" style:font-style-asian="normal" style:font-style-complex="normal"/>
  </style:style>
  <style:style style:name="T15" style:family="text">
   <style:properties fo:font-style="italic" fo:font-weight="normal"/>
  </style:style>
  <style:style style:name="T16" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties fo:font-weight="normal"/>
  </style:style>
  <style:style style:name="T17" style:family="text">
   <style:properties fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/>
  </style:style>
  <style:style style:name="T18" style:family="text" style:parent-style-name="www/ftp/email">
   <style:properties fo:font-style="normal"/>
  </style:style>
  <style:style style:name="T19" style:family="text">
   <style:properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
  </style:style>
  <style:style style:name="T20" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties fo:font-style="normal" style:font-style-asian="normal" style:font-style-complex="normal"/>
  </style:style>
  <style:style style:name="T21" style:family="text">
   <style:properties fo:color="#000000" style:font-name="Arial" fo:font-size="11.8999996185303pt" fo:language="en" fo:country="US" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="T22" style:family="text">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="T23" style:family="text">
   <style:properties style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="T24" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="T25" style:family="text" style:parent-style-name="ChapterRef">
   <style:properties style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="T26" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties fo:language="none" fo:country="none" style:text-background-color="transparent"/>
  </style:style>
  <style:style style:name="T27" style:family="text">
   <style:properties style:font-name="Palatino"/>
  </style:style>
  <style:style style:name="T28" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties style:font-name="Courier New1" fo:font-weight="normal"/>
  </style:style>
  <style:style style:name="T29" style:family="text" style:parent-style-name="Buttons/Menus">
   <style:properties style:font-name="Palatino"/>
  </style:style>
  <style:style style:name="T30" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties style:font-name="Courier New1"/>
  </style:style>
  <style:style style:name="T31" style:family="text">
   <style:properties fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="T32" style:family="text">
   <style:properties fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="T33" style:family="text">
   <style:properties style:font-name="Courier New"/>
  </style:style>
  <style:style style:name="T34" style:family="text">
   <style:properties style:font-name="Palatino4"/>
  </style:style>
  <style:style style:name="T35" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties style:font-name="Courier New7"/>
  </style:style>
  <style:style style:name="T36" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties fo:font-size="9pt"/>
  </style:style>
  <style:style style:name="T37" style:family="text">
   <style:properties style:font-name="Courier New7"/>
  </style:style>
  <style:style style:name="T38" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties style:font-name="Courier New"/>
  </style:style>
  <style:style style:name="T39" style:family="text" style:parent-style-name="CODE">
   <style:properties style:font-name="Courier New" fo:font-size="7pt"/>
  </style:style>
  <style:style style:name="T40" style:family="text">
   <style:properties style:font-name="Palatino" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="T41" style:family="text">
   <style:properties style:font-name="Palatino" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="T42" style:family="text" style:parent-style-name="www/ftp/email">
   <style:properties style:font-name="Palatino" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="T43" style:family="text" style:parent-style-name="Source Text">
   <style:properties style:font-name="Courier New8" fo:font-size="7pt" fo:language="en" fo:country="US" style:font-name-asian="Courier New8" style:font-size-asian="10pt" style:font-name-complex="Courier New8" style:font-size-complex="10pt"/>
  </style:style>
  <style:style style:name="T44" style:family="text">
   <style:properties fo:font-size="7pt"/>
  </style:style>
  <style:style style:name="T45" style:family="text" style:parent-style-name="CODE Emphasis">
   <style:properties fo:font-size="7pt"/>
  </style:style>
  <style:style style:name="T46" style:family="text">
   <style:properties style:use-window-font-color="true" style:font-name="Palatino" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="T47" style:family="text" style:parent-style-name="Source Text">
   <style:properties style:use-window-font-color="true" style:font-name="Palatino" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="T48" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties fo:color="#000000" style:font-name="Courier New1" fo:font-size="9pt"/>
  </style:style>
  <style:style style:name="T49" style:family="text" style:parent-style-name="Source Text">
   <style:properties style:use-window-font-color="true" style:font-name="Courier New8" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="T50" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties style:use-window-font-color="true" style:font-name="Courier New8" fo:font-size="9pt"/>
  </style:style>
  <style:style style:name="T51" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties fo:color="#000000" style:font-name="Courier New8" fo:font-size="9pt"/>
  </style:style>
  <style:style style:name="T52" style:family="text" style:parent-style-name="Source Text">
   <style:properties style:font-name="Palatino" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="T53" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties style:font-name="Courier New1" fo:font-size="9pt"/>
  </style:style>
  <style:style style:name="T54" style:family="text">
   <style:properties style:font-name="Palatino" fo:font-size="10pt" fo:font-weight="normal"/>
  </style:style>
  <style:style style:name="T55" style:family="text">
   <style:properties style:font-name="Palatino" fo:font-size="10pt" fo:language="en" fo:country="GB"/>
  </style:style>
  <style:style style:name="T56" style:family="text" style:parent-style-name="Emphasis">
   <style:properties style:font-name="Palatino" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="T57" style:family="text">
   <style:properties fo:font-style="normal"/>
  </style:style>
  <style:style style:name="T58" style:family="text">
   <style:properties fo:color="#000000" fo:language="en" fo:country="US" style:text-underline="none"/>
  </style:style>
  <style:style style:name="T59" style:family="text">
   <style:properties fo:color="#000000" style:font-name="Courier New" fo:font-size="7pt" fo:language="en" fo:country="US" style:text-underline="none"/>
  </style:style>
  <style:style style:name="T60" style:family="text" style:parent-style-name="MethodSignatureEmphasis">
   <style:properties fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="T61" style:family="text">
   <style:properties style:use-window-font-color="true"/>
  </style:style>
  <style:style style:name="T62" style:family="text">
   <style:properties fo:font-size="9pt"/>
  </style:style>
  <style:style style:name="T63" style:family="text" style:parent-style-name="Emphasis">
   <style:properties fo:font-weight="normal"/>
  </style:style>
  <style:style style:name="T64" style:family="text" style:parent-style-name="Emphasis">
   <style:properties fo:language="en" fo:country="US"/>
  </style:style>
  <style:style style:name="T65" style:family="text" style:parent-style-name="www/ftp/email">
   <style:properties fo:font-style="normal" style:font-style-asian="normal" style:font-style-complex="normal"/>
  </style:style>
  <style:style style:name="T66" style:family="text" style:parent-style-name="www/ftp/email">
   <style:properties fo:font-weight="normal"/>
  </style:style>
  <style:style style:name="T67" style:family="text">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="T68" style:family="text">
   <style:properties style:font-name="Courier New6"/>
  </style:style>
  <style:style style:name="T69" style:family="text">
   <style:properties style:font-name="Courier1" fo:font-size="8pt"/>
  </style:style>
  <style:style style:name="fr1" style:family="graphics" style:parent-style-name="ChapterFrame">
   <style:properties fo:padding="0.049cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.018cm solid #000000"/>
  </style:style>
  <style:style style:name="fr2" style:family="graphics" style:parent-style-name="Frame">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:wrap="run-through" style:vertical-pos="top" style:vertical-rel="paragraph-content" style:horizontal-pos="left" style:horizontal-rel="paragraph-content" fo:padding="0cm" fo:border="none" style:shadow="none"/>
  </style:style>
  <style:style style:name="fr3" style:family="graphics" style:parent-style-name="Graphics">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.101cm" style:wrap="none" style:vertical-pos="from-top" style:vertical-rel="paragraph-content" style:horizontal-pos="from-left" style:horizontal-rel="paragraph-content" style:mirror="none" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="1" draw:color-inversion="false" draw:transparency="0%" draw:color-mode="standard"/>
  </style:style>
  <style:style style:name="fr4" style:family="graphics" style:parent-style-name="Frame">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:wrap="run-through" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="left" style:horizontal-rel="paragraph-content" fo:padding="0cm" fo:border="none" style:shadow="none"/>
  </style:style>
  <style:style style:name="fr5" style:family="graphics" style:parent-style-name="Graphics">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.101cm" style:wrap="none" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="1" draw:color-inversion="false" draw:transparency="0%" draw:color-mode="standard"/>
  </style:style>
  <style:style style:name="fr6" style:family="graphics" style:parent-style-name="Frame">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:run-through="foreground" style:wrap="run-through" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="left" style:horizontal-rel="paragraph-content" fo:padding="0cm" fo:border="none" style:shadow="none"/>
  </style:style>
  <style:style style:name="fr7" style:family="graphics" style:parent-style-name="Graphics">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.101cm" style:run-through="foreground" style:wrap="none" style:vertical-pos="from-top" style:vertical-rel="paragraph-content" style:horizontal-pos="from-left" style:horizontal-rel="paragraph-content" style:mirror="none" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="1" draw:color-inversion="false" draw:transparency="0%" draw:color-mode="standard"/>
  </style:style>
  <style:style style:name="fr8" style:family="graphics" style:parent-style-name="Graphics">
   <style:properties style:wrap="right" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="1" draw:color-inversion="false" draw:transparency="0%" draw:color-mode="standard"/>
  </style:style>
  <style:style style:name="fr9" style:family="graphics" style:parent-style-name="Frame">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:run-through="foreground" style:wrap="run-through" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="left" style:horizontal-rel="paragraph-content" fo:padding="0cm" fo:border="none"/>
  </style:style>
  <style:style style:name="fr10" style:family="graphics" style:parent-style-name="Graphics">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.101cm" style:wrap="none" style:vertical-pos="from-top" style:vertical-rel="paragraph-content" style:horizontal-pos="from-left" style:horizontal-rel="paragraph-content" fo:padding="0cm" fo:border="none" style:shadow="none" style:mirror="none" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="1" draw:color-inversion="false" draw:transparency="0%" draw:color-mode="standard"/>
  </style:style>
  <style:style style:name="fr11" style:family="graphics" style:parent-style-name="Graphics">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.101cm" style:wrap="none" style:vertical-pos="from-top" style:vertical-rel="paragraph-content" style:horizontal-pos="left" style:horizontal-rel="paragraph-content" style:mirror="none" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="1" draw:color-inversion="false" draw:transparency="0%" draw:color-mode="standard"/>
  </style:style>
  <style:style style:name="fr12" style:family="graphics" style:parent-style-name="Frame">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:wrap="run-through" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="left" style:horizontal-rel="paragraph-content" fo:padding="0cm" fo:border="none"/>
  </style:style>
  <style:style style:name="fr13" style:family="graphics" style:parent-style-name="Graphics">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:wrap="none" style:vertical-pos="from-top" style:vertical-rel="paragraph-content" style:horizontal-pos="from-left" style:horizontal-rel="paragraph-content" fo:padding="0cm" fo:border="none" style:shadow="none" style:mirror="none" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="1" draw:color-inversion="false" draw:transparency="0%" draw:color-mode="standard"/>
  </style:style>
  <style:style style:name="fr14" style:family="graphics" style:parent-style-name="Frame">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:wrap="run-through" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="left" style:horizontal-rel="paragraph-content" fo:padding="0cm" fo:border="none" style:shadow="none"/>
  </style:style>
  <style:style style:name="fr15" style:family="graphics" style:parent-style-name="Graphics">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.101cm" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="from-top" style:vertical-rel="paragraph-content" style:horizontal-pos="from-left" style:horizontal-rel="paragraph-content" style:mirror="none" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="1" draw:color-inversion="false" draw:transparency="0%" draw:color-mode="standard"/>
  </style:style>
  <style:style style:name="fr16" style:family="graphics" style:parent-style-name="Frame">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.3cm" style:run-through="foreground" style:wrap="run-through" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" fo:padding="0cm" fo:border="none" style:shadow="none"/>
  </style:style>
  <style:style style:name="fr17" style:family="graphics" style:parent-style-name="Frame">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:wrap="run-through" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" fo:padding="0cm" fo:border="none" style:shadow="none"/>
  </style:style>
  <text:list-style style:name="L1">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L2">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L3">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L4">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L5">
   <text:list-level-style-number text:level="1" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="2" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="3" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="4" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="5" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="6" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="7" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="8" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="9" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="10" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
  </text:list-style>
  <text:list-style style:name="L6">
   <text:list-level-style-number text:level="1" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-number text:level="3" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="4" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="5" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="6" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="7" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="8" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="9" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="10" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
  </text:list-style>
  <text:list-style style:name="L7">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L8">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L9">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L10">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L11">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L12">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L13">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L14">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L15">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L16">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L17">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L18">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L19">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L20">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L21">
   <text:list-level-style-number text:level="1" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="2" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="3" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="4" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="5" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="6" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="7" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="8" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="9" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="10" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
  </text:list-style>
  <text:list-style style:name="L22">
   <text:list-level-style-number text:level="1" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="2" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="3" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="4" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="5" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="6" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="7" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="8" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="9" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="10" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
  </text:list-style>
  <text:list-style style:name="L23">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L24">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L25">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L26">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L27">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L28">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L29">
   <text:list-level-style-number text:level="1" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="2" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="3" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="4" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="5" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="6" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="7" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="8" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="9" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="10" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
  </text:list-style>
  <text:list-style style:name="L30">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L31">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.748cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.995cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.242cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.489cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="5.736cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="6.983cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="8.23cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="9.478cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="10.725cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="11.972cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L32">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.748cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.995cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.242cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.489cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="5.736cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="6.983cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="8.23cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="9.478cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="10.725cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="11.972cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L33">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.748cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.995cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.242cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.489cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="5.736cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="6.983cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="8.23cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="9.478cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="10.725cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="11.972cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <style:page-master style:name="pm1">
   <style:properties fo:page-width="19.05cm" fo:page-height="22.86cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="2.337cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.016cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.508cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm2">
   <style:properties fo:page-width="20.999cm" fo:page-height="29.699cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style/>
  </style:page-master>
  <style:page-master style:name="pm3" style:page-usage="left">
   <style:properties fo:page-width="19.05cm" fo:page-height="22.86cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="1.27cm" fo:margin-right="2.337cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.016cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.508cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm4" style:page-usage="right">
   <style:properties fo:page-width="19.05cm" fo:page-height="22.86cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="2.337cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.016cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.508cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm5">
   <style:properties fo:page-width="22.721cm" fo:page-height="11.4cm" style:num-format="1" style:print-orientation="landscape" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:margin-left="0cm" fo:margin-right="0cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style/>
  </style:page-master>
  <style:page-master style:name="pm6">
   <style:properties fo:page-width="19.05cm" fo:page-height="22.86cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style/>
  </style:page-master>
  <style:page-master style:name="pm7">
   <style:properties fo:page-width="19.05cm" fo:page-height="22.86cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.91cm" fo:margin-bottom="1.91cm" fo:margin-left="2.341cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:columns fo:column-count="0" fo:column-gap="0cm"/>
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style/>
  </style:page-master>
  <style:page-master style:name="pm8" style:page-usage="left">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="1.27cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="0.699cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.199cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm9" style:page-usage="left">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="1.27cm" fo:margin-right="2.337cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style/>
  </style:page-master>
  <style:page-master style:name="pm10" style:page-usage="right">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="2.337cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style/>
  </style:page-master>
  <style:page-master style:name="pm11" style:page-usage="right">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.91cm" fo:margin-bottom="1.91cm" fo:margin-left="2.341cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style>
    <style:properties svg:height="3.59cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0cm"/>
   </style:header-style>
   <style:footer-style>
    <style:properties fo:min-height="0.699cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.199cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm12" style:page-usage="left">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="1.27cm" fo:margin-right="2.337cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.016cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.508cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm13" style:page-usage="right">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="2.337cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.016cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.508cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm14">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="2.337cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style>
    <style:properties svg:height="3.59cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0cm"/>
   </style:header-style>
   <style:footer-style>
    <style:properties fo:min-height="0.699cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.199cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm15" style:page-usage="left">
   <style:properties fo:page-width="19.05cm" fo:page-height="22.86cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="1.27cm" fo:margin-right="2.337cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.02cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.51cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm16" style:page-usage="right">
   <style:properties fo:page-width="19.05cm" fo:page-height="22.86cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="2.337cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.02cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.51cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm17" style:page-usage="left">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="1.27cm" fo:margin-right="2.337cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:columns fo:column-count="2" fo:column-gap="0.84cm">
     <style:column style:rel-width="32767*" fo:margin-left="0cm" fo:margin-right="0.42cm"/>
     <style:column style:rel-width="32768*" fo:margin-left="0.42cm" fo:margin-right="0cm"/>
    </style:columns>
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.02cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.51cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm18" style:page-usage="right">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="2.337cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:columns fo:column-count="2" fo:column-gap="0.84cm">
     <style:column style:rel-width="32767*" fo:margin-left="0cm" fo:margin-right="0.42cm"/>
     <style:column style:rel-width="32768*" fo:margin-left="0.42cm" fo:margin-right="0cm"/>
    </style:columns>
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.02cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.51cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm19" style:page-usage="right">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.91cm" fo:margin-bottom="1.91cm" fo:margin-left="2.341cm" fo:margin-right="1.27cm" fo:border="none" fo:padding="0cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:columns fo:column-count="2" fo:column-gap="0.84cm">
     <style:column style:rel-width="32767*" fo:margin-left="0cm" fo:margin-right="0.42cm"/>
     <style:column style:rel-width="32768*" fo:margin-left="0.42cm" fo:margin-right="0cm"/>
    </style:columns>
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style>
    <style:properties svg:height="5.881cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.801cm" fo:border-top="none" fo:border-bottom="0.035cm solid #000000" fo:border-left="none" fo:border-right="none" fo:padding="0.499cm"/>
   </style:header-style>
   <style:footer-style>
    <style:properties fo:min-height="1.02cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.51cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm20" style:page-usage="right">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.91cm" fo:margin-bottom="1.91cm" fo:margin-left="2.341cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.02cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.51cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm21" style:page-usage="left">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.91cm" fo:margin-bottom="1.91cm" fo:margin-left="1.27cm" fo:margin-right="2.341cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.02cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.51cm"/>
   </style:footer-style>
  </style:page-master>
  <number:number-style style:name="N0" style:family="data-style">
   <number:number number:min-integer-digits="1"/>
  </number:number-style>
 </office:automatic-styles>
 <office:master-styles>
  <style:master-page style:name="Standard" style:page-master-name="pm1">
   <style:footer>
    <text:p text:style-name="Footer"/>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="First Page" style:page-master-name="pm2" style:next-style-name="Standard"/>
  <style:master-page style:name="Left Page" style:page-master-name="pm3" style:next-style-name="Right Page">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
     <text:user-field-decl text:value-type="string" text:string-value="March 2001" text:name="ReleaseDate"/>
     <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer left"><text:page-number text:select-page="current">127</text:page-number> <text:s text:c="4"/><text:user-field-get text:name="SOVersion">Product name and Release number</text:user-field-get> <text:s/><text:user-field-get text:name="BuchTitel">Manual Title</text:user-field-get>  <text:user-field-get text:name="ReleaseDate">March 2001</text:user-field-get> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="Right Page" style:page-master-name="pm4" style:next-style-name="Left Page">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Chapter" text:name="KapitelTitel"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer right"><text:user-field-get text:name="KapitelTitel">Chapter</text:user-field-get> <text:s/><text:chapter text:display="number" text:outline-level="1"/> <text:s text:c="4"/><text:chapter text:display="name" text:outline-level="1"/> <text:s text:c="3"/><text:page-number text:select-page="current">127</text:page-number> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="Envelope" style:page-master-name="pm5"/>
  <style:master-page style:name="Index" style:page-master-name="pm6"/>
  <style:master-page style:name="HTML" style:page-master-name="pm7"/>
  <style:master-page style:name="Vakat" style:page-master-name="pm8">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
     <text:user-field-decl text:value-type="string" text:string-value="March 2001" text:name="ReleaseDate"/>
     <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer left"><text:page-number text:select-page="current">127</text:page-number> <text:span text:style-name="PageNumber"><text:s text:c="4"/></text:span><text:s/><text:user-field-get text:name="SOVersion">Product name and Release number</text:user-field-get> <text:s text:c="2"/><text:user-field-get text:name="BuchTitel">Manual Title</text:user-field-get>  <text:user-field-get text:name="ReleaseDate">March 2001</text:user-field-get> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="CopyrightPage" style:page-master-name="pm9"/>
  <style:master-page style:name="BookPage1" style:page-master-name="pm10" style:next-style-name="CopyrightPage"/>
  <style:master-page style:name="NoChapter" style:page-master-name="pm11" style:next-style-name="Page_Left">
   <style:header>
    <text:p text:style-name="Header"/>
   </style:header>
   <style:footer>
    <text:p text:style-name="Footer right"><text:page-number text:select-page="current">127</text:page-number> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="NoChapter left" style:page-master-name="pm12" style:next-style-name="No chapter right">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
     <text:user-field-decl text:value-type="string" text:string-value="March 2001" text:name="ReleaseDate"/>
     <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer left"><text:page-number text:select-page="current">127</text:page-number> <text:s text:c="4"/><text:user-field-get text:name="SOVersion">Product name and Release number</text:user-field-get> <text:s text:c="2"/><text:user-field-get text:name="BuchTitel">Manual Title</text:user-field-get>  <text:user-field-get text:name="ReleaseDate">March 2001</text:user-field-get> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="No chapter right" style:page-master-name="pm13" style:next-style-name="NoChapter left">
   <style:footer>
    <text:p text:style-name="Footer right"><text:s text:c="5"/><text:chapter text:display="name" text:outline-level="1"/> <text:s text:c="3"/><text:page-number text:select-page="current">127</text:page-number> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="TOC_Start" style:page-master-name="pm14" style:next-style-name="TOC_Left">
   <style:header>
    <text:p text:style-name="Header"/>
   </style:header>
   <style:header-left>
    <text:p text:style-name="Header left"/>
   </style:header-left>
   <style:footer>
    <text:p text:style-name="Footer right"><text:s text:c="5"/><text:page-number style:num-format="1" text:select-page="current">127</text:page-number> </text:p>
   </style:footer>
   <style:footer-left>
    <text:p text:style-name="Footer right"><text:page-number text:select-page="current">127</text:page-number> </text:p>
   </style:footer-left>
  </style:master-page>
  <style:master-page style:name="TOC_Left" style:page-master-name="pm15" style:next-style-name="TOC_Right">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
     <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer left"><text:page-number text:select-page="current">127</text:page-number> <text:s text:c="4"/><text:user-field-get text:name="SOVersion">Product name and Release number</text:user-field-get> <text:s/><text:user-field-get text:name="BuchTitel">Manual Title</text:user-field-get> </text:p>
   </style:footer>
   <style:footer-left>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
     <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer left"><text:page-number text:select-page="current">127</text:page-number> <text:s text:c="4"/><text:user-field-get text:name="SOVersion">Product name and Release number</text:user-field-get> <text:user-field-get text:name="BuchTitel">Manual Title</text:user-field-get> </text:p>
   </style:footer-left>
  </style:master-page>
  <style:master-page style:name="TOC_Right" style:page-master-name="pm16" style:next-style-name="TOC_Left">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Contents" text:name="InhaltsverzTitel"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer right"><text:user-field-get text:name="InhaltsverzTitel">Contents</text:user-field-get> <text:s text:c="4"/><text:page-number style:num-format="1" text:select-page="current">127</text:page-number> </text:p>
   </style:footer>
   <style:footer-left>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Contents" text:name="InhaltsverzTitel"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer right"><text:user-field-get text:name="InhaltsverzTitel">Contents</text:user-field-get> <text:span text:style-name="Page_Number"><text:s text:c="4"/></text:span><text:page-number text:select-page="current">127</text:page-number> </text:p>
   </style:footer-left>
  </style:master-page>
  <style:master-page style:name="Index_Left" style:page-master-name="pm17" style:next-style-name="Index_Right">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
     <text:user-field-decl text:value-type="string" text:string-value="March 2001" text:name="ReleaseDate"/>
     <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer left"><text:page-number text:select-page="current">127</text:page-number> <text:span text:style-name="T1"><text:s text:c="3"/></text:span><text:s/><text:user-field-get text:name="SOVersion">Product name and Release number</text:user-field-get> <text:s/><text:user-field-get text:name="BuchTitel">Manual Title</text:user-field-get>  <text:user-field-get text:name="ReleaseDate">March 2001</text:user-field-get> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="Index_Right" style:page-master-name="pm18" style:next-style-name="Index_Left">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Index" text:name="IndexTitel"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer right"><text:user-field-get text:name="IndexTitel">Index</text:user-field-get> <text:s text:c="4"/><text:page-number text:select-page="current">127</text:page-number> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="Chapter_Start" style:page-master-name="pm11" style:next-style-name="Page_Left">
   <style:header>
    <text:p text:style-name="Header"><draw:text-box draw:style-name="fr1" draw:name="Rahmen2" text:anchor-type="paragraph" svg:width="2.54cm" fo:min-height="0.801cm" draw:z-index="55">
      <text:p text:style-name="ChapterText"><text:user-field-get text:name="KapitelTitel">Chapter</text:user-field-get> <text:tab-stop/> <text:chapter text:display="number" text:outline-level="1">6</text:chapter> </text:p>
     </draw:text-box> </text:p>
   </style:header>
   <style:footer>
    <text:p text:style-name="Footer right"><text:page-number text:select-page="current">127</text:page-number> </text:p>
   </style:footer>
   <style:footer-left>
    <text:p text:style-name="Footer right"><text:page-number text:select-page="current">127</text:page-number> </text:p>
   </style:footer-left>
  </style:master-page>
  <style:master-page style:name="Index_Start" style:page-master-name="pm19" style:next-style-name="Index_Left">
   <style:header>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Index" text:name="IndexTitel"/>
    </text:user-field-decls>
    <text:p text:style-name="HeadlineIndex"><text:user-field-get text:name="IndexTitel">Index</text:user-field-get> </text:p>
   </style:header>
   <style:footer>
    <text:p text:style-name="P1"><text:page-number text:select-page="current">127</text:page-number> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="Page_Right" style:page-master-name="pm20" style:next-style-name="Page_Left">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Chapter" text:name="KapitelTitel"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer right"><text:user-field-get text:name="KapitelTitel">Chapter</text:user-field-get> <text:s/><text:chapter text:display="number" text:outline-level="1">6</text:chapter> <text:s text:c="4"/><text:chapter text:display="name" text:outline-level="1">Office Development</text:chapter> <text:s text:c="3"/><text:page-number text:select-page="current">127</text:page-number> </text:p>
   </style:footer>
   <style:footer-left>
    <text:p text:style-name="Footer"/>
   </style:footer-left>
  </style:master-page>
  <style:master-page style:name="Page_Left" style:page-master-name="pm21" style:next-style-name="Page_Right">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
     <text:user-field-decl text:value-type="string" text:string-value="March 2001" text:name="ReleaseDate"/>
     <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer left"><text:page-number text:select-page="current">127</text:page-number> <text:s text:c="4"/><text:user-field-get text:name="SOVersion">Product name and Release number</text:user-field-get> <text:s/><text:user-field-get text:name="BuchTitel">Manual Title</text:user-field-get>  <text:user-field-get text:name="ReleaseDate">March 2001</text:user-field-get> </text:p>
   </style:footer>
  </style:master-page>
 </office:master-styles>
 <office:body>
  <text:variable-decls>
   <text:variable-decl text:value-type="string" text:name="Version"/>
   <text:variable-decl text:value-type="string" text:name="HTML_ON"/>
   <text:variable-decl text:value-type="string" text:name="HTML_OFF"/>
   <text:variable-decl text:value-type="float" text:name="lala"/>
   <text:variable-decl text:value-type="string" text:name="TITEL"/>
   <text:variable-decl text:value-type="string" text:name="END"/>
   <text:variable-decl text:value-type="string" text:name="NAME"/>
   <text:variable-decl text:value-type="string" text:name="HREF"/>
   <text:variable-decl text:value-type="string" text:name="HelpID"/>
   <text:variable-decl text:value-type="string" text:name="MODIFY"/>
   <text:variable-decl text:value-type="string" text:name="REFNR"/>
   <text:variable-decl text:value-type="string" text:name="OS2"/>
   <text:variable-decl text:value-type="string" text:name="ELSE"/>
   <text:variable-decl text:value-type="string" text:name="UNIX"/>
   <text:variable-decl text:value-type="string" text:name="MAC"/>
   <text:variable-decl text:value-type="string" text:name="INDEX"/>
   <text:variable-decl text:value-type="string" text:name="DOKENDE"/>
   <text:variable-decl text:value-type="string" text:name="WIN"/>
   <text:variable-decl text:value-type="string" text:name="KEY"/>
   <text:variable-decl text:value-type="string" text:name="HFELD"/>
   <text:variable-decl text:value-type="string" text:name="AKTHLP"/>
   <text:variable-decl text:value-type="string" text:name="TabelleAnfang"/>
  </text:variable-decls>
  <text:sequence-decls>
   <text:sequence-decl text:display-outline-level="1" text:separation-character="." text:name="Illustration"/>
   <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
   <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
   <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
   <text:sequence-decl text:display-outline-level="0" text:name="CapterNumber"/>
   <text:sequence-decl text:display-outline-level="1" text:separation-character="." text:name="Figure"/>
   <text:sequence-decl text:display-outline-level="1" text:separation-character="." text:name="Tables"/>
  </text:sequence-decls>
  <text:user-field-decls>
   <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
   <text:user-field-decl text:value-type="string" text:string-value="March 2001" text:name="ReleaseDate"/>
   <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
   <text:user-field-decl text:value-type="string" text:string-value="Chapter" text:name="KapitelTitel"/>
   <text:user-field-decl text:value-type="string" text:string-value="Contents" text:name="InhaltsverzTitel"/>
   <text:user-field-decl text:value-type="string" text:string-value="Index" text:name="IndexTitel"/>
   <text:user-field-decl text:value-type="string" text:string-value="" text:name="EinFeld"/>
   <text:user-field-decl text:value-type="string" text:string-value="" text:name="nocheins"/>
   <text:user-field-decl text:value-type="string" text:string-value="StarOffice 5.1" text:name="Version_renamed_3"/>
   <text:user-field-decl text:value-type="string" text:string-value="Setup &amp; Administration Guide" text:name="Titel_renamed_4"/>
   <text:user-field-decl text:value-type="string" text:string-value="" text:name="fuer"/>
   <text:user-field-decl text:value-type="string" text:string-value="" text:name="Anhang"/>
   <text:user-field-decl text:value-type="string" text:string-value="" text:name="Notizen"/>
  </text:user-field-decls>
  <text:h text:style-name="P2" text:level="1">Office Development</text:h>
  <text:p text:style-name="Under_Head1"/>
  <text:p text:style-name="Paragraph"/>
  <text:p text:style-name="Paragraph">This chapter describes the <text:alphabetical-index-mark-start text:id="IMark43875748"/>application environment<text:alphabetical-index-mark-end text:id="IMark43875748"/> of the [PRODUCTNAME] application. It assumes that you have read the chapter <text:span text:style-name="ChapterRef">[CHAPTER:FirstSteps]</text:span>, and that you are able to connect to the office and load documents.</text:p>
  <text:p text:style-name="Paragraph">In most cases, developers use the functionality of [PRODUCTNAME] by opening and modifying documents. The interfaces and services common to all document types and how documents are embedded in the surrounding application environment are discussed.</text:p>
  <text:p text:style-name="Paragraph">It is also possible to extend the functionality of [PRODUCTNAME] by replacing the services mentioned here by intercepting the communication between objects or by creating your own document type and integrating it into the desktop environment. All these things are discussed in this chapter.</text:p>
  <text:h text:style-name="Head 2" text:level="2">[PRODUCTNAME] Application Environment</text:h>
  <text:h text:style-name="Head 3" text:level="3">Overview</text:h>
  <text:p text:style-name="Paragraph">The [PRODUCTNAME] application environment is made up of the <text:alphabetical-index-mark-start text:id="IMark43875748"/><text:span text:style-name="Emphasis">desktop environment</text:span> <text:alphabetical-index-mark-end text:id="IMark43875748"/>and the <text:alphabetical-index-mark-start text:id="IMark44349172"/><text:span text:style-name="Emphasis">framework API</text:span><text:alphabetical-index-mark-end text:id="IMark44349172"/>. </text:p>
  <table:table table:name="Table3" table:style-name="Table3">
   <table:table-column table:style-name="Table3.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table3.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr2" draw:name="Rahmen10" text:anchor-type="paragraph" svg:width="9.622cm" fo:min-height="7.44cm" draw:z-index="0">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr3" draw:name="Application Environment" text:anchor-type="paragraph" svg:x="0.004cm" svg:y="0.002cm" svg:width="9.329cm" svg:height="6.939cm" draw:z-index="1" xlink:href="AppEnvironment.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Application Environment</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration0" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.1</text:sequence>: [PRODUCTNAME] Application Environment</text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The desktop environment consists of the desktop and auxiliary objects. It employs the framework API to carry out its functions. The framework API currently has two parts: the <text:span text:style-name="Emphasis">component</text:span> <text:span text:style-name="Emphasis">framework</text:span> and <text:span text:style-name="Emphasis">dispatch</text:span> <text:span text:style-name="Emphasis">framework</text:span>. The component framework follows a special Frame-Controller-Model paradigm to manage components viewable in [PRODUCTNAME]. The dispatch framework handles command requests sent by the GUI.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Desktop Environment</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.Desktop]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.Desktop]</text:span> service is the central management instance for the [PRODUCTNAME] application framework. All [PRODUCTNAME] application windows are organized in a hierarchy of frames that contain viewable components. The desktop is the root frame for this hierarchy. From the desktop you can load viewable components, access frames and components, terminate the office, traverse the frame hierarchy and dispatch command requests.</text:p>
  <text:p text:style-name="Paragraph">The name of this service originates at <text:alphabetical-index-mark-start text:id="IMark43875748"/>StarOffice 5.x<text:alphabetical-index-mark-end text:id="IMark43875748"/>, where all document windows were embedded into a common application window that was occupied by the StarOffice desktop, mirroring the Windows desktop. The root frame of this hierarchy was called the <text:alphabetical-index-mark-start text:id="IMark43865492"/>desktop frame<text:alphabetical-index-mark-end text:id="IMark43865492"/>. The name of this service and the interface name <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDesktop]</text:span> were kept for<text:span text:style-name="T2"> compatibility </text:span>reasons.</text:p>
  <text:p text:style-name="Paragraph">The <text:alphabetical-index-mark-start text:id="IMark43875748"/>desktop object<text:alphabetical-index-mark-end text:id="IMark43875748"/> and <text:alphabetical-index-mark-start text:id="IMark45380908"/>frame object<text:alphabetical-index-mark-end text:id="IMark45380908"/>s use auxiliary services, such as the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.TypeDetection]</text:span> service and other, opaque implementations that interact with the UNO-based office, but are not accessible through the [PRODUCTNAME] API. Examples for the latter are the global document event handling and its user interface (<text:span text:style-name="Buttons/Menus">Tools – Configure – Events</text:span>), and the menu bars that use the dispatch API without being UNO services themselves. The desktop service, together with these surrounding objects, is called the <text:span text:style-name="Emphasis">desktop environment</text:span>.</text:p>
  <table:table table:name="Tabelle39" table:style-name="Tabelle39">
   <table:table-column table:style-name="Tabelle39.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle39.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr4" draw:name="Rahmen5" text:anchor-type="paragraph" svg:y="0cm" svg:width="13.296cm" fo:min-height="6.936cm" draw:z-index="2">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr5" draw:name="Desktop overview" text:anchor-type="paragraph" svg:x="0cm" svg:y="-4.911cm" svg:width="13.13cm" svg:height="6.436cm" draw:z-index="3" xlink:href="DesktopOverview.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Desktop overview</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration1" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.2</text:sequence>: The Desktop terminates the office and manages components and frames</text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The viewable components managed by the desktop can be three different kinds of objects: full-blown office documents with a document model and controllers, components with a controller but no model, such as the bibliography and database browser, or simple windows without API-enabled controllers, for example, preview windows. The commonality between these types of components is the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XComponent]</text:span> interface. Components with controllers are also called <text:alphabetical-index-mark-start text:id="IMark43875748"/><text:span text:style-name="Emphasis">office components</text:span><text:alphabetical-index-mark-end text:id="IMark43875748"/>, whereas simple window components are called <text:alphabetical-index-mark-start text:id="IMark43975444"/><text:span text:style-name="Emphasis">trivial</text:span> <text:span text:style-name="Emphasis">components</text:span><text:alphabetical-index-mark-end text:id="IMark43975444"/>.</text:p>
  <text:p text:style-name="Paragraph">Frames in the [PRODUCTNAME] API are the connecting link between windows, components and the desktop environment. The relationship between frames and components are discussed in the next section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.Overview.FrameworkAPI]</text:span>.</text:p>
  <text:p text:style-name="Paragraph">Like all other services, the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.Desktop]</text:span> service can be exchanged by another implementation that extends the functionality of [PRODUCTNAME]. By exchanging the desktop service it is possible to use different kinds of windows or to make [PRODUCTNAME] use MDI instead of SDI. This is not an easy thing to do, but it is possible without changing any code elsewhere in [PRODUCTNAME].</text:p>
  <text:h text:style-name="Head 4" text:level="4">Framework API</text:h>
  <text:p text:style-name="Paragraph">The framework API does not define an all-in-one framework with strongly coupled interfaces, but defines <text:span text:style-name="T2">specialized frameworks </text:span>that are grouped together by implementing the relevant interfaces at [PRODUCTNAME] components. Each framework concentrates on a particular aspect, so that each component decides the frameworks it wants to participate in.</text:p>
  <text:p text:style-name="Paragraph">Currently, there are two of these <text:span text:style-name="T2">frameworks:</text:span> the <text:alphabetical-index-mark-start text:id="IMark43875748"/><text:span text:style-name="Emphasis">component framework</text:span><text:alphabetical-index-mark-end text:id="IMark43875748"/> that implements the frame-controller-model paradigm and the <text:alphabetical-index-mark-start text:id="IMark43975444"/><text:span text:style-name="Emphasis">dispatch framework </text:span><text:alphabetical-index-mark-end text:id="IMark43975444"/>that handles command requests from and to the application environment. The controller and frame implementations form the bridge between the two frameworks, because controllers and frames implement interfaces from the component framework and dispatch framework.</text:p>
  <text:p text:style-name="Paragraph">The framework API is an abstract specification. Its current implementation uses the <text:alphabetical-index-mark-start text:id="IMark43875748"/>Abstract Window Toolkit (AWT)<text:alphabetical-index-mark-end text:id="IMark43875748"/> specified in <text:span text:style-name="Code (in text)">[MODULE:com.sun.star.awt]</text:span>, which is an abstract specification as well. The current implementation of the AWT is the Visual Component Library (VCL), a cross-platform toolkit for windows and controls written in C++ created before the specification of com.sun.star.awt and adapted to support com.sun.star.awt.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Frame-Controller-Model Paradigm in [PRODUCTNAME]</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.XModel;com.sun.star.frame.XFrame;com.sun.star.frame.XController]The well known <text:alphabetical-index-mark-start text:id="IMark43875748"/>Model-View-Controller (MVC)<text:alphabetical-index-mark-end text:id="IMark43875748"/> paradigm separates three application areas: document data (<text:span text:style-name="Emphasis">model</text:span>), presentation (<text:span text:style-name="Emphasis">view</text:span>) and interaction (<text:span text:style-name="Emphasis">controller</text:span>). [PRODUCTNAME] has a similar abstraction, called the <text:alphabetical-index-mark-start text:id="IMark43975444"/>Frame-Controller-Model (FCM)<text:alphabetical-index-mark-end text:id="IMark43975444"/> paradigm. The FCM paradigm shares certain aspects with MVC , but it has different purposes, therefore it is best to approach FCM independently from MVC. The model and controller in MVC and FCM are quite different things.</text:p>
  <text:p text:style-name="Paragraph">The FCM paradigm in [PRODUCTNAME] separates three application areas: document object (<text:span text:style-name="Emphasis">model</text:span>), screen interaction with the model (<text:span text:style-name="Emphasis">controller</text:span>) and controller-window linkage (<text:span text:style-name="Emphasis">frame</text:span>). </text:p>
  <text:unordered-list text:style-name="L1">
   <text:list-item>
    <text:p text:style-name="P3">The model holds the document data and has methods to change these data without using a controller object. Text, drawings, and spreadsheet cells are accessed directly at the model.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P3">The controller has knowledge about the current view status of the document and manipulates the screen presentation of the document, but not the document data. It observes changes made to the model, and can be duplicated to have multiple controllers for the same model.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P3">The frame contains the controller for a model and <text:span text:style-name="Emphasis">knows</text:span> the windows that are used with it, but does not have window functionality.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">The purpose of FCM is to have three exchangeable parts that are used with an exchangeable window system:</text:p>
  <text:p text:style-name="Paragraph">It is possible to write a new controller that presents an existing model in a different manner without changing the model or the frame. A controller depends on the model it presents, therefore a new controller for a <text:span text:style-name="Emphasis">new</text:span> model can be written.</text:p>
  <text:p text:style-name="Paragraph">Developers can introduce new models for new document types without taking care of the frame and underlying window management system. However, since there is no default controller, it is necessary to write a suitable controller also.</text:p>
  <text:p text:style-name="Paragraph">By keeping all window-related functionality separate from the frame, it is possible to use one single frame implementation for every possible window in the entire [PRODUCTNAME] application. Thus, the presentation of all visible components is customized by exchanging the frame implementation. At runtime you can access a frame and replace the controller, together with the model it controls, by a different controller instance.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Frames</text:h>
  <text:h text:style-name="Head 6" text:level="6">Linking Components and Windows</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.Frame;com.sun.star.frame.XFrame;com.sun.star.frame.XFrames;com.sun.star.awt.XWindow;com.sun.star.awt.XTopWindow]The main role of a frame in the Frame-Controller-Model paradigm is to act as a liaison between viewable components and the window system. </text:p>
  <text:p text:style-name="Paragraph">Frames can hold one component, or a component and one or more subframes. The following diagrams: <text:sequence-ref text:reference-format="text" text:ref-name="refIllustration2"> Illustration 6.3: Frame containing a component</text:sequence-ref> and <text:sequence-ref text:reference-format="text" text:ref-name="refIllustration3"> Illustration 6.4: Frame containing a component and a sub-frame</text:sequence-ref> depict both possibilities. The first illustration <text:sequence-ref text:reference-format="value" text:ref-name="refIllustration2">6.3</text:sequence-ref> shows a frame containing only a component. It is connected with two window instances: the container window and component window.</text:p>
  <table:table table:name="Tabelle31" table:style-name="Tabelle31">
   <table:table-column table:style-name="Tabelle31.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle31.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr6" draw:name="Rahmen3" text:anchor-type="paragraph" svg:y="0cm" svg:width="12.704cm" fo:min-height="2.956cm" draw:z-index="4">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr7" draw:name="Frame contains office components" text:anchor-type="paragraph" svg:x="0.004cm" svg:y="0.002cm" svg:width="12.561cm" svg:height="2.371cm" draw:z-index="5" xlink:href="FCMFrame.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Frame contains office components</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration2" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.3</text:sequence>: Frame containing a component</text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">When a frame is constructed, the frame must be initialized with a container window using <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrame:initialize]()</text:span>. This method expects the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindow]</text:span> interface of a surrounding window instance, which becomes the container window of the frame. The window instance passed to <text:span text:style-name="Code (in text)">initialize()</text:span> must also support <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XTopWindow]</text:span> to become a container window. The container window must broadcast window events, such as <text:span text:style-name="Code (in text)">windowActivated()</text:span>, and appear in front of other windows or be sent to the background. The fact that container windows support <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XTopWindow]</text:span> does not mean the container window is an independent window of the underlying window system with a title bar and a system menu. An <text:span text:style-name="Code (in text)">XTopWindow</text:span> acts as a window if necessary, but it can also be docked or depend on a surrounding application window.</text:p>
  <text:p text:style-name="Paragraph">After initializing the frame, a component is set into the frame by a <text:alphabetical-index-mark-start text:id="IMark45198260"/>frame loader<text:alphabetical-index-mark-end text:id="IMark45198260"/> implementation that loads a component into the frame. It calls <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrame:setComponent]()</text:span> that takes another <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindow]</text:span> instance and the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XController]</text:span> interface of a controller.Usually the controller is holding a model, therefore the component gets a <text:alphabetical-index-mark-start text:id="IMark43875748"/>component window<text:alphabetical-index-mark-end text:id="IMark43875748"/> of its own, separate from the <text:alphabetical-index-mark-start text:id="IMark44653412"/>container window<text:alphabetical-index-mark-end text:id="IMark44653412"/>.</text:p>
  <text:p text:style-name="Paragraph">A frame with a component is associated with <text:span text:style-name="Emphasis">two</text:span> windows: the <text:span text:style-name="Emphasis">container</text:span> window which is an <text:span text:style-name="Code (in text)">XTopWindow</text:span> and the <text:span text:style-name="Emphasis">component</text:span> window, which is the rectangular area that displays the component and receives GUI events for the component while it is active. When a frame is initialized with an instance of a window in a call to <text:span text:style-name="Code (in text)">initialize()</text:span>, this window becomes its container window. When a component is set into a frame using <text:span text:style-name="Code (in text)">setComponent()</text:span>, another <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindow]</text:span> instance is passed becoming the component window.</text:p>
  <text:p text:style-name="Paragraph">When a frame is added to the desktop frame hierarchy, the desktop becomes the parent frame of our frame. For this purpose, the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFramesSupplier]</text:span> interface of the desktop is passed to the method <text:span text:style-name="Code (in text)">setCreator()</text:span> at the <text:span text:style-name="Code (in text)">XFrame</text:span> interface. This happens internally when the method <text:span text:style-name="Code (in text)">append()</text:span> is called at the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrames]</text:span> interface supplied by the desktop.</text:p>
  <table:table table:name="Tabelle34" table:style-name="Tabelle34">
   <table:table-column table:style-name="Tabelle34.A"/>
   <table:table-column table:style-name="Tabelle34.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle34.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="6" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle34.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">A component window can have sub-windows, and that is the case with all documents in [PRODUCTNAME]. For instance, a text document has sub-windows for the toolbars and the editable text. Form controls are sub-windows, as well, however, these sub-windows depend on the component window and do not appear in the Frame-Controller-Model paradigm, as discussed above.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The second diagram shows a frame with a component and a sub-frame with another component. Each frame has a container window and component window.</text:p>
  <table:table table:name="Tabelle32" table:style-name="Tabelle32">
   <table:table-column table:style-name="Tabelle32.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle32.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr9" draw:name="Rahmen31" text:anchor-type="paragraph" svg:y="0cm" svg:width="13.115cm" fo:min-height="11.492cm" draw:z-index="7">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr10" draw:name="Frame contains office components and sub components" text:anchor-type="paragraph" svg:x="0.004cm" svg:y="0.002cm" svg:width="12.959cm" svg:height="10.991cm" draw:z-index="8" xlink:href="FCMSubframe.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Frame contains office components and sub components</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration3" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.4</text:sequence>: Frame containing a component and a sub-frame</text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">In the [PRODUCTNAME] GUI, sub-frames appear as dependent windows. The sub-frame in <text:sequence-ref text:reference-format="category-and-value" text:ref-name="refIllustration3"> Illustration 6.4</text:sequence-ref> could be a dockable window, such as the beamer showing the database browser or a floating frame in a document created with <text:span text:style-name="Buttons/Menus">Insert – Frame</text:span>. </text:p>
  <text:p text:style-name="Paragraph">Note that a frame with a component and sub-frame is associated with <text:span text:style-name="Emphasis">four</text:span> windows. The frame and the sub-frame have a container window and a component window for the component.</text:p>
  <text:p text:style-name="Paragraph">When a sub-frame is added to a surrounding frame, the frame becomes the parent of the sub-frame by a call to <text:span text:style-name="Code (in text)">setCreator()</text:span> at the sub-frame. This happens internally when the method <text:span text:style-name="Code (in text)">append()</text:span> is called at the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrames]</text:span> interface supplied by the surrounding frame.</text:p>
  <text:p text:style-name="Paragraph">The section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.CreateFrames]</text:span> shows examples for the usage of the <text:span text:style-name="Code (in text)">XFrame</text:span> interface that creates frames in the desktop environment, constructs dockable and standalone windows, and inserts components into frames.</text:p>
  <text:h text:style-name="Head 6" text:level="6">Communication through <text:alphabetical-index-mark text:string-value="dispatch framework"/>Dispatch Framework</text:h>
  <text:p text:style-name="Paragraph">Besides the main role of frames as expressed in the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrame]</text:span> interface, frames play another role by providing a communication context for the component they contain, that is, every communication from a controller to the desktop environment, and the user interface and conversely is done through the frame. This aspect of a frame is published through the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProvider]</text:span> interface, that uses special command requests to trigger actions.</text:p>
  <text:p text:style-name="Paragraph">The section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.UsingDispatch]</text:span> discusses the usage of the dispatch API. </text:p>
  <text:h text:style-name="Head 6" text:level="6">Components in Frames</text:h>
  <text:p text:style-name="Paragraph">The desktop environment section discussed the three kinds of viewable components that can be inserted into a frame. If the component has a controller <text:span text:style-name="Emphasis">and</text:span> a model like a document, or if it has only a controller, such as the bibliography and database browser, it implements <text:span text:style-name="T3">the </text:span><text:span text:style-name="T4">[IDL:com.sun.star.frame.Controller]</text:span><text:span text:style-name="T3"> service represented by the interface </text:span><text:span text:style-name="T4">[IDL:com.sun.star.frame.XController]</text:span><text:span text:style-name="T3">. In the call to </text:span><text:span text:style-name="T4">[IDL:com.sun.star.frame.XFrame:setComponent](),</text:span> <text:span text:style-name="T3">the controller is passed with the component window instance. If the component has no controller, it directly implements </text:span><text:span text:style-name="T4">[IDL:com.sun.star.lang.XComponent]</text:span><text:span text:style-name="T3"> and </text:span><text:span text:style-name="T4">[IDL:com.sun.star.awt.XWindow]</text:span><text:span text:style-name="T3">. In this case, the component is passed as </text:span><text:span text:style-name="T4">XWindow</text:span> <text:span text:style-name="T3">parameter, and the </text:span><text:span text:style-name="T4">XController</text:span> <text:span text:style-name="T3">parameter must be an </text:span><text:span text:style-name="T4">XController</text:span> <text:span text:style-name="T3">reference set to </text:span><text:span text:style-name="T4">null</text:span><text:span text:style-name="T3">.</text:span> </text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="T3">If the </text:span><text:span text:style-name="T5">viewable</text:span> <text:span text:style-name="T3">component is a </text:span><text:alphabetical-index-mark-start text:id="IMark43875748"/><text:span text:style-name="T6">trivial</text:span> <text:span text:style-name="T6">component</text:span> <text:alphabetical-index-mark-end text:id="IMark43875748"/><text:span text:style-name="T3">(implementing </text:span><text:span text:style-name="T4">XWindow</text:span> <text:span text:style-name="T3">only), the frame holds a reference to the component window, controls the lifetime of the component and propagates certain events from the container window to the component window. If the viewable component is an </text:span><text:alphabetical-index-mark-start text:id="IMark44354572"/><text:span text:style-name="T6">office</text:span> <text:span text:style-name="T6">component</text:span> <text:alphabetical-index-mark-end text:id="IMark44354572"/><text:span text:style-name="T3">(having a controller), the frame adds to these basic functions a set of features for integration of the component into the environment </text:span>by supporting additional command URLs for the component at its <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProvider]</text:span> interface.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="controller"/>Controllers</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.Controller;com.sun.star.frame.XController]Controllers in [PRODUCTNAME] are between a frame and document model. This is their basic role as expressed in <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XController]</text:span>, which has methods <text:span text:style-name="Code (in text)">getModel()</text:span> and <text:span text:style-name="Code (in text)">getFrame()</text:span>. The method <text:span text:style-name="Code (in text)">getFrame()</text:span> provides the frame the controller is attached to. The method <text:span text:style-name="Code (in text)">getModel()</text:span> returns a document model, but it may return an empty reference if the component does not have a model.</text:p>
  <text:p text:style-name="Paragraph">Usually the controller objects support additional interfaces specific to the document type they control, such as <text:span text:style-name="Code (in text)">[IDL:com.sun.star.sheet.XSpreadsheetView]</text:span> for Calc document controllers or <text:span text:style-name="Code (in text)">[IDL:com.sun.star.text.XTextViewCursorSupplier]</text:span> for Writer document controllers.</text:p>
  <table:table table:name="Tabelle40" table:style-name="Tabelle40">
   <table:table-column table:style-name="Tabelle40.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle40.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr6" draw:name="Rahmen6" text:anchor-type="paragraph" svg:y="0cm" svg:width="13.284cm" fo:min-height="7.87cm" draw:z-index="9">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr3" draw:name="Controller with Model and Frame" text:anchor-type="paragraph" svg:x="0.004cm" svg:y="0.002cm" svg:width="13.13cm" svg:height="7.37cm" draw:z-index="10" xlink:href="FCMController.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Controller with Model and Frame</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration4" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.5</text:sequence>: Controller with Model and Frame</text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">There can be more than one controller instance with frames of their own controlling the same document model simultaneously. Multiple controllers and frames are created by [PRODUCTNAME] when the user clicks <text:span text:style-name="Buttons/Menus">Window – New Window</text:span>.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Windows</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.awt.XWindow;com.sun.star.awt.XTopWindow;com.sun.star.awt.XWindowPeer]Windows in the [PRODUCTNAME] API are rectangular areas that are positioned and resized, and inform listeners about UI events (<text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindow]</text:span>). They have a platform-specific counterpart that is wrapped in the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindowPeer]</text:span> interface, which is invalidated (redrawn), and sets the <text:alphabetical-index-mark-start text:id="IMark43875748"/>system pointer<text:alphabetical-index-mark-end text:id="IMark43875748"/> and hands out the <text:alphabetical-index-mark-start text:id="IMark44354572"/>toolkit<text:alphabetical-index-mark-end text:id="IMark44354572"/> for the window. The usage of the window interfaces is outlined in the section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.UsingCompFramework.Windows]</text:span> below.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="dispatch framework"/>Dispatch Framework</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.XDispatchProvider]The dispatch framework is designed to provide a uniform access to components for a GUI by using <text:alphabetical-index-mark-start text:id="IMark43875748"/>command URL<text:alphabetical-index-mark-end text:id="IMark43875748"/>s that mirror menu items, such as <text:span text:style-name="Buttons/Menus">Edit – Select All</text:span> with various document components. Only the component knows how to execute a command. Similarly, different document components trigger changes in the UI by common commands. For example, a controller might create UI elements like a menu bar, or open a hyperlink.</text:p>
  <text:p text:style-name="Paragraph">Command dispatching follows a chain of responsibility. Calls to the dispatch API are moderated by the frame, so all dispatch API calls from the UI to the component and conversely are handled by the frame. The frame passes on the command until an object is found that can handle it. It is possible to restrict, extend or redirect commands at the frame through a different frame implementation or through other components connecting to the frame.</text:p>
  <text:p text:style-name="Paragraph">It has already been discussed that frames and controllers have an interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProvider]</text:span>. The interface is used to query a dispatch object for a command URL from a frame and have the dispatch object execute the command. This interface is one element of the dispatch framework.</text:p>
  <text:p text:style-name="Paragraph">By offering the interception of dispatches through the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProviderInterception]</text:span>, the <text:span text:style-name="Code (in text)">Frame</text:span> service offers a method to modify a component&apos;s handling of <text:alphabetical-index-mark-start text:id="IMark43875748"/>GUI event<text:alphabetical-index-mark-end text:id="IMark43875748"/> s while keeping its whole API available simultaneously.</text:p>
  <table:table table:name="Tabelle43" table:style-name="Tabelle43">
   <table:table-column table:style-name="Tabelle43.A"/>
   <table:table-column table:style-name="Tabelle43.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle43.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note2" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="11" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle43.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">Normally, command URL dispatches go to a target frame which decides what to do with it. A component can use globally accessible objects like the desktop service to bypass restrictions set by a frame, but this is not recommended. It is impossible to prevent a implemention of components against the design principles, because the framework API is made for components that adhere to its design.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The usage of the Dispatch Framework is described in the section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.UsingDispatch]</text:span>.</text:p>
  <text:h text:style-name="Head 3" text:level="3">Using the <text:alphabetical-index-mark-start text:id="IMark44338588"/>Desktop<text:alphabetical-index-mark-end text:id="IMark44338588"/></text:h>
  <table:table table:name="Tabelle41" table:style-name="Tabelle41">
   <table:table-column table:style-name="Tabelle41.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle41.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr6" draw:name="Rahmen8" text:anchor-type="paragraph" svg:y="0cm" svg:width="13.411cm" fo:min-height="21.071cm" draw:z-index="12">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr3" draw:name="UML diagram of Desktop and OfficeDocument" text:anchor-type="paragraph" svg:x="0.004cm" svg:y="0.002cm" svg:width="13.25cm" svg:height="20.57cm" draw:z-index="13" xlink:href="framework.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>UML diagram showing the Desktop service and the relation to an OfficeDocument service</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration5" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.6</text:sequence>: Desktop Service and Component Framework</text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.Desktop;com.sun.star.frame.XDesktop;com.sun.star.frame.XComponentLoader;com.sun.star.document.XEventBroadcaster;com.sun.star.frame.XFrames]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.Desktop]</text:span> service available at the global service manager includes the service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.Frame]</text:span>. The Desktop service specification provides three interfaces: <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDesktop]</text:span>, <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XComponentLoader]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XEventBroadcaster]</text:span>, as shown in the following UML chart:</text:p>
  <table:table table:name="Tabelle35" table:style-name="Tabelle35">
   <table:table-column table:style-name="Tabelle35.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle35.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr6" draw:name="Rahmen4" text:anchor-type="paragraph" svg:y="0cm" svg:width="12.64cm" fo:min-height="9.46cm" draw:z-index="14">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr3" draw:name="UML diagram of com.sun.star.frame.Desktop" text:anchor-type="paragraph" svg:x="0cm" svg:y="-3.799cm" svg:width="12.45cm" svg:height="8.961cm" draw:z-index="15" xlink:href="Desktop.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>UML diagram showing the com.sun.star.frame.Desktop service</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration6" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.7</text:sequence>: UML description of the desktop service</text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDesktop]</text:span> provides access to frames and components, and controls the termination of the office process. It defines the following methods:</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::frame::XFrame <text:span text:style-name="MethodSignatureEmphasis">getCurrentFrame</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::container::XEnumerationAccess <text:span text:style-name="MethodSignatureEmphasis">getComponents</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::lang::XComponent <text:span text:style-name="MethodSignatureEmphasis">getCurrentComponent</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">boolean <text:span text:style-name="MethodSignatureEmphasis">terminate</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">addTerminateListener</text:span> ( [in] com::sun::star::frame::XTerminateListener xListener)</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">removeTerminateListener</text:span> ( [in] com::sun::star::frame::XTerminateListener xListener)</text:p>
  <text:p text:style-name="Paragraph">The methods <text:span text:style-name="Code (in text)">getCurrentFrame()</text:span> and <text:span text:style-name="Code (in text)">getCurrentComponent()</text:span> distribute the <text:alphabetical-index-mark text:string-value="active frame model"/>active frame and <text:alphabetical-index-mark text:string-value="active document model"/>document model, whereas <text:span text:style-name="Code (in text)">getComponents()</text:span> returns a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.XEnumerationAccess]</text:span> to all loaded documents. For documents loaded in the desktop environment the methods <text:span text:style-name="Code (in text)">getComponents()</text:span> and <text:span text:style-name="Code (in text)">getCurrentComponent()</text:span> always return the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XComponent]</text:span> interface of the document model. </text:p>
  <table:table table:name="Tabelle44" table:style-name="Tabelle44">
   <table:table-column table:style-name="Tabelle44.A"/>
   <table:table-column table:style-name="Tabelle44.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle44.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Tip" text:anchor-type="paragraph" svg:x="0.067cm" svg:y="0cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="16" xlink:href="../tip.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Tip graphics marks a hint section in the text</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle44.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">If a specific document component is required, but are not sure whether this component is the current component, use <text:span text:style-name="Code (in text)">getComponents()</text:span> to get an enumeration of all document components, check each for the existence of the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XModel]</text:span> interface and use <text:span text:style-name="Code (in text)">getURL()</text:span> at <text:span text:style-name="Code (in text)">XModel</text:span> to identify your document. Since not all components have to support <text:span text:style-name="Code (in text)">XModel</text:span>, test for <text:span text:style-name="Code (in text)">XModel</text:span> before calling <text:span text:style-name="Code (in text)">getURL()</text:span>.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The office process is usually terminated when the user selects <text:span text:style-name="Buttons/Menus">File - </text:span><text:alphabetical-index-mark text:string-value="exit"/><text:span text:style-name="Buttons/Menus"><text:span text:style-name="Buttons/Menus"/></text:span><text:span text:style-name="Buttons/Menus">Exit</text:span> or after the last application window has been closed. Clients can <text:alphabetical-index-mark text:string-value="terminate office"/>terminate the office through a call to <text:span text:style-name="Code (in text)">terminate()</text:span>and add a <text:alphabetical-index-mark-start text:id="IMark44271916"/>terminate listener<text:alphabetical-index-mark-end text:id="IMark44271916"/> to veto the <text:alphabetical-index-mark-start text:id="IMark44354572"/>shutdown process<text:alphabetical-index-mark-end text:id="IMark44354572"/>. </text:p>
  <text:p text:style-name="Paragraph">[BUG641+]As long as the Windows quickstarter is active, the soffice executable is not terminated. </text:p>
  <text:p text:style-name="Paragraph">The following sample shows an <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XTerminateListener]</text:span> implementation that prevents the office from being terminated when the class <text:span text:style-name="Code (in text)">TerminationTest</text:span> is still active:</text:p>
  <text:p text:style-name="Code">import com.sun.star.frame.TerminationVetoException;</text:p>
  <text:p text:style-name="Code">import com.sun.star.frame.XTerminateListener;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">public class TerminateListener implements XTerminateListener {</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>public void <text:span text:style-name="CodeEmphasis">notifyTermination</text:span> (com.sun.star.lang.EventObject eventObject) {</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>System.out.println(&quot;about to terminate...&quot;);</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>public void <text:span text:style-name="CodeEmphasis">queryTermination</text:span> (com.sun.star.lang.EventObject eventObject) </text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>throws TerminationVetoException {</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>// test if we can terminate now</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>if (TerminationTest.isAtWork() == true) {</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>System.out.println(&quot;Terminate while we are at work? No way!&quot;);</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/><text:span text:style-name="CodeEmphasis">throw new TerminationVetoException()</text:span> ; // this will veto the termination, </text:p>
  <text:p text:style-name="Code"><text:s text:c="50"/>// a call to terminate() returns false</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>public void <text:span text:style-name="CodeEmphasis">disposing</text:span> (com.sun.star.lang.EventObject eventObject) {</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>} <text:s text:c="3"/></text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">The following class <text:span text:style-name="Code (in text)">TerminationTest</text:span> tests the <text:span text:style-name="Code (in text)">TerminateListener</text:span> above.</text:p>
  <text:p text:style-name="Code">import com.sun.star.bridge.XUnoUrlResolver;</text:p>
  <text:p text:style-name="Code">import com.sun.star.uno.UnoRuntime;</text:p>
  <text:p text:style-name="Code">import com.sun.star.uno.XComponentContext;</text:p>
  <text:p text:style-name="Code">import com.sun.star.lang.XMultiComponentFactory;</text:p>
  <text:p text:style-name="Code">import com.sun.star.beans.XPropertySet;</text:p>
  <text:p text:style-name="Code">import com.sun.star.beans.PropertyValue;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">import com.sun.star.frame.XDesktop;</text:p>
  <text:p text:style-name="Code">import com.sun.star.frame.TerminationVetoException;</text:p>
  <text:p text:style-name="Code">import com.sun.star.frame.XTerminateListener;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">public class <text:span text:style-name="MethodSignatureEmphasis">TerminationTest</text:span> extends java.lang.Object {</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>private static boolean atWork = false;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>public static void main(String[] args) {</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="8"/>XComponentContext xRemoteContext = null;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>XMultiComponentFactory xRemoteServiceManager = null;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>XDesktop xDesktop = null;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>try { <text:s text:c="10"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>// connect and retrieve a remote service manager and component context</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>XComponentContext xLocalContext =</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(null);</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>XMultiComponentFactory xLocalServiceManager = xLocalContext.getServiceManager();</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>Object urlResolver <text:s/>= xLocalServiceManager.createInstanceWithContext(</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&quot;com.sun.star.bridge.UnoUrlResolver&quot;, xLocalContext );</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>XUnoUrlResolver xUnoUrlResolver = (XUnoUrlResolver) UnoRuntime.queryInterface( </text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>XUnoUrlResolver.class, urlResolver );</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>Object initialObject = xUnoUrlResolver.resolve( </text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&quot;uno:socket,host=localhost,port=2083;urp;StarOffice.ServiceManager&quot; );</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>XPropertySet xPropertySet = (XPropertySet)UnoRuntime.queryInterface(</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>XPropertySet.class, initialObject);</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>Object context = xPropertySet.getPropertyValue(&quot;DefaultContext&quot;); <text:s text:c="11"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>xRemoteContext = (XComponentContext)UnoRuntime.queryInterface(</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>XComponentContext.class, context);</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>xRemoteServiceManager = xRemoteContext.getServiceManager();</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="12"/>// get Desktop instance</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>Object desktop = xRemoteServiceManager.<text:span text:style-name="CodeEmphasis">createInstanceWithContext</text:span> (</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&quot;<text:span text:style-name="CodeEmphasis">com.sun.star.frame.Desktop</text:span> &quot;, xRemoteContext);</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>xDesktop = (XDesktop)UnoRuntime.queryInterface(XDesktop.class, desktop);</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>TerminateListener terminateListener = <text:span text:style-name="CodeEmphasis">new TerminateListener</text:span> ();</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>xDesktop.<text:span text:style-name="CodeEmphasis">addTerminateListener</text:span> (terminateListener);</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>// try to terminate while we are at work</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>atWork = true;</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>boolean terminated = xDesktop.<text:span text:style-name="CodeEmphasis">terminate</text:span> ();</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>System.out.println(&quot;The Office &quot; +</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>(terminated == true ? &quot;has been terminated&quot; : &quot;is still running, we are at work&quot;));</text:p>
  <text:p text:style-name="Code"><text:s text:c="5"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>// no longer at work</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>atWork = false;</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>// once more: try to terminate </text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>terminated = xDesktop.<text:span text:style-name="CodeEmphasis">terminate</text:span> ();</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>System.out.println(&quot;The Office &quot; + </text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>(terminated == true ? &quot;has been terminated&quot; :</text:p>
  <text:p text:style-name="Code"><text:s text:c="20"/>&quot;is still running. Someone else prevents termination, e.g. the quickstarter&quot;));</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>catch (java.lang.Exception e){</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>e.printStackTrace();</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>finally {</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>System.exit(0);</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>public static boolean isAtWork() {</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>return atWork;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">[BUG641+]The office freezes when terminate() is called if there are unsaved changes. As a workaround set all documents into an unmodified state through their <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XModifiable]</text:span> interface or store them using <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XStorable]</text:span>.</text:p>
  <text:p text:style-name="Paragraph">The Desktop offers a facility to load components through its interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XComponentLoader]</text:span>. It has one method:</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::lang::XComponent <text:span text:style-name="MethodSignatureEmphasis">loadComponentFromURL</text:span> ( [in] string aURL,</text:p>
  <text:p text:style-name="MethodSignatures"><text:tab-stop/> <text:tab-stop/> [in] string aTargetFrameName,</text:p>
  <text:p text:style-name="MethodSignatures"><text:tab-stop/> <text:tab-stop/> [in] long nSearchFlags,</text:p>
  <text:p text:style-name="MethodSignatures"><text:tab-stop/> <text:tab-stop/> [in] sequence &lt; com::sun::star::beans::PropertyValue aArgs &gt; )</text:p>
  <text:p text:style-name="Paragraph">Refer to chapter <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.HandleDocuments]</text:span> for details about the loading process.</text:p>
  <text:p text:style-name="Paragraph">For versions beyond 641, the desktop also provides an interface that allows listeners to be notified about certain document events through its interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XEventBroadcaster]</text:span>. </text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">addEventListener</text:span> ( [in] com::sun::star::document::XEventListener xListener)</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">removeEventListener</text:span> ( [in] com::sun::star::document::XEventListener xListener)</text:p>
  <text:p text:style-name="Paragraph">The XEventListener must implement a single method (besides <text:span text:style-name="Code (in text)">disposing()</text:span>):</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="CodeEmphasis">notifyEvent</text:span> ( [in] com::sun::star::document::EventObject Event )</text:p>
  <text:p text:style-name="Paragraph">The struct <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.EventObject]</text:span> has a <text:span text:style-name="Code (in text)">string</text:span> member <text:span text:style-name="Code (in text)">EventName</text:span> that assumes one of the values specified in <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.Events]</text:span>. The corresponding events are found on the <text:span text:style-name="Buttons/Menus">Events</text:span> tab of the <text:span text:style-name="Buttons/Menus">Tools – Configure</text:span> dialog when the option [PRODUCTNAME] is selected.</text:p>
  <text:p text:style-name="Paragraph">The desktop broadcasts these events for all loaded documents.</text:p>
  <text:p text:style-name="Paragraph">The current version of [PRODUCTNAME] does not have a GUI element as a <text:alphabetical-index-mark text:string-value="desktop object"/>desktop. The redesign of the [PRODUCTNAME] GUI in <text:alphabetical-index-mark-start text:id="IMark44876204"/>StarOffice 5.x<text:alphabetical-index-mark-end text:id="IMark44876204"/> and later resulted in the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.Frame]</text:span> service part of the desktop service is now non-functional. While the XFrame interface can still be queried from the desktop, almost all of its methods are dummy implementations. The default implementation of the desktop object in [PRODUCTNAME] is not able to contain a component and refuses to be attached to it, because the desktop is still a frame that is the root for the common hierarchy of all frames in [PRODUCTNAME]. The desktop has to be a frame because its <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFramesSupplier]</text:span> interface must be passed to <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrame:setCreator]()</text:span> at the child frames, therefore the desktop becomes the parent frame. However, the following functionality of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.Frame]</text:span> is still in place:</text:p>
  <text:p text:style-name="Paragraph">The desktop interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFramesSupplier]</text:span> offers methods to access frames. This interface inherits from <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrame]</text:span>, and introduces the following methods:</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::frame::XFrames <text:span text:style-name="MethodSignatureEmphasis">getFrames</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::frame::XFrame <text:span text:style-name="MethodSignatureEmphasis">getActiveFrame</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">setActiveFrame</text:span> ( [in] com::sun::star::frame::XFrame xFrame)</text:p>
  <text:p text:style-name="Paragraph">The method <text:span text:style-name="Code (in text)">getFrames()</text:span> returns a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrames]</text:span> container, that is a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.XIndexAccess],</text:span> with additional methods to add and remove frames:</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">append</text:span> ( [in] com::sun::star::frame::XFrame xFrame )</text:p>
  <text:p text:style-name="MethodSignatures">sequence &lt; com::sun::star::frame::XFrame &gt; <text:span text:style-name="MethodSignatureEmphasis">queryFrames</text:span> ( [in] long nSearchFlags )</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">remove</text:span> ( [in] com::sun::star::frame::XFrame xFrame )</text:p>
  <text:p text:style-name="Paragraph">This <text:span text:style-name="Code (in text)">XFrames</text:span> collection is used when frames are added to the desktop to become application windows.</text:p>
  <text:p text:style-name="Paragraph">Through <text:span text:style-name="Code (in text)">getActiveFrame(),</text:span> you access the active sub-frame of the desktop frame, whereas <text:span text:style-name="Code (in text)">setActiveFrame()</text:span> is called by a sub-frame to inform the desktop about the active sub-frame. </text:p>
  <text:p text:style-name="Paragraph">[BUG641+]The object returned by <text:span text:style-name="Code (in text)">getFrames()</text:span> does not support <text:span text:style-name="Code (in text)">XTypeProvider</text:span>, therefore it cannot be used with [PRODUCTNAME] Basic.</text:p>
  <text:p text:style-name="Paragraph">The parent interface of <text:span text:style-name="Code (in text)">XFramesSupplier</text:span>, <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrame]</text:span> is functional by accessing the frame hierarchy below the desktop. These methods are discussed in the section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.UsingCompFramework.Frames]</text:span> below:</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::frame::XFrame <text:span text:style-name="MethodSignatureEmphasis">findFrame</text:span> ( [in] string aTargetFrameName, [in] long nSearchFlags );</text:p>
  <text:p text:style-name="MethodSignatures">boolean <text:span text:style-name="MethodSignatureEmphasis">isTop</text:span> ();</text:p>
  <text:p text:style-name="Paragraph">The generic dispatch interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProvider]</text:span> executes functions of the internal <text:span text:style-name="Code (in text)">Desktop</text:span> implementation that are not accessible through<text:span text:style-name="T2"> specialized </text:span>interfaces. Dispatch functions are described by a command URL. The <text:span text:style-name="Code (in text)">XDispatchProvider</text:span> returns a dispatch object that dispatches a given command URL. A reference of command URLs supported by the desktop is available on OpenOffice (<text:a xlink:type="simple" xlink:href="http://www.openoffice.org/files/documents/25/60/commands_11beta.html">http://www.openoffice.org/files/documents/25/60/commands_11beta.html</text:a>). Through the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProviderInterception],</text:span> client code intercepts thecommand dispatches at the desktop. The dispatching process is described in section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.UsingDispatch]</text:span>.</text:p>
  <text:h text:style-name="Head 3" text:level="3">Using the <text:alphabetical-index-mark text:string-value="component framework"/>Component Framework</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.lang.XComponent]The component framework comprises the interfaces of frames, controllers and models used to manage components in the [PRODUCTNAME] desktop environment. In our context, everything that &quot;dwells&quot; in a frame of the desktop environment is called a <text:span text:style-name="Emphasis">component,</text:span> because the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XComponent]</text:span> is the common denominator for objects that are loaded into frames.</text:p>
  <text:p text:style-name="Paragraph">Frames, controllers and models hold references to each other. The frame is by definition the default owner of the controller and the model, that is,. it is responsible to call <text:span text:style-name="Code (in text)">dispose()</text:span> on the controller and model when it is destroyed itself. Other objects that are to hold references to the frame, controller, or model must register as listeners to be informed when these references become invalid. Therefore <text:span text:style-name="Code (in text)">XModel</text:span>, <text:line-break/><text:span text:style-name="Code (in text)">XController</text:span> and <text:span text:style-name="Code (in text)">XFrame</text:span> inherit from <text:span text:style-name="Code (in text)">XComponent</text:span>:</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">dispose</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">addEventListener</text:span> ( [in] com::sun::star::lang::XEventListener xListener)</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">removeEventListener</text:span> ( [in] com::sun::star::lang::XEventListener aListener)</text:p>
  <text:p text:style-name="Paragraph">The process to resolve the circular dependencies of the component framework is a complex. For instance, the objects involved in the process may be in a condition where they may not be disposed of. Refer to the section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.HandleDocuments.Closing]</text:span> for additional details.</text:p>
  <text:p text:style-name="Paragraph">Theoretically every UNO object could exist in a frame, as long as it is willing to let the frame control its existence when it ends. </text:p>
  <text:p text:style-name="Paragraph">A trivial component (<text:span text:style-name="Code (in text)">XWindow</text:span> only) is enough for simple viewing purposes, where no activation of a component and related actions like cursor positioning or user interactions are necessary. </text:p>
  <text:p text:style-name="Paragraph">If the component participates in more complex interactions, it must implement the controller service. </text:p>
  <text:p text:style-name="Paragraph">Many features of the desktop environment are only available if the URL of a component is known. For example:</text:p>
  <text:unordered-list text:style-name="L2">
   <text:list-item>
    <text:p text:style-name="P4">Presenting the URL or title of the document.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P4">Inserting the document into the autosave queue.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P4">Preventing the desktop environment from loading documents twice.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P4">Allow for participation in the global document event handling.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">In this case, <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XModel]</text:span> comes into operation, since it has methods to handle URLs, among others.</text:p>
  <text:p text:style-name="Paragraph">So a <text:alphabetical-index-mark text:string-value="component"/>complete <text:alphabetical-index-mark-start text:id="IMark44271916"/>office component<text:alphabetical-index-mark-end text:id="IMark44271916"/> is made up of </text:p>
  <text:unordered-list text:style-name="L3">
   <text:list-item>
    <text:p text:style-name="P5">a <text:alphabetical-index-mark-start text:id="IMark43875748"/>controller object<text:alphabetical-index-mark-end text:id="IMark43875748"/> that presents the model or shows a view to the model that implements the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.Controller]</text:span> service, but publishes additional document-specific interfaces. For almost all [PRODUCTNAME] document types there are document specific controller object specifications,such as <text:span text:style-name="Code (in text)">[IDL:com.sun.star.sheet.SpreadsheetView]</text:span>, and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.drawing.DrawingDocumentDrawView]</text:span>. For controllers, refer to the section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.UsingCompFramework.Controllers]</text:span>.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P5">a <text:alphabetical-index-mark-start text:id="IMark44271916"/>model object<text:alphabetical-index-mark-end text:id="IMark44271916"/> implementing the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.OfficeDocument]</text:span> service. Refer to the section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.UsingCompFramework.Models]</text:span>.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:h text:style-name="Head 4" text:level="4">Getting Frames, Controllers and Models from Each Other</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.XController;com.sun.star.frame.XModel;com.sun.star.frame.XFrame]Usually developers require the controller and frame of an already loaded document model. The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XModel]</text:span> interface of [PRODUCTNAME] document models gets the controller that provides access to the frame through its <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XController]</text:span> interface. The following illustration shows the methods that get the controller and frame for a document model and conversely. From the frame , obtain the corresponding component and container window.</text:p>
  <table:table table:name="Tabelle29" table:style-name="Tabelle29">
   <table:table-column table:style-name="Tabelle29.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle29.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr6" draw:name="Rahmen7" text:anchor-type="paragraph" svg:y="0cm" svg:width="15.268cm" fo:min-height="8.976cm" draw:z-index="17">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr3" draw:name="Frame-Controller-Model organization" text:anchor-type="paragraph" svg:x="0.004cm" svg:y="0.002cm" svg:width="14.771cm" svg:height="10.119cm" draw:z-index="18" xlink:href="FCMNavigation.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Frame-Controller-Model organization</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration7" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.8</text:sequence>: Frame-Controller-Model Organization</text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">If the loaded component is a trivial component and implements <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindow]</text:span> only, the <text:alphabetical-index-mark-start text:id="IMark44271916"/>window<text:alphabetical-index-mark-end text:id="IMark44271916"/> and the <text:alphabetical-index-mark-start text:id="IMark43875748"/>window peer<text:alphabetical-index-mark-end text:id="IMark43875748"/> is reached by querying these interfaces from the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XComponent]</text:span> returned by <text:span text:style-name="Code (in text)">loadComponentFromURL()</text:span>.</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark-start text:id="IMark44271916"/>Frames<text:alphabetical-index-mark-end text:id="IMark44271916"/></text:h>
  <table:table table:name="Tabelle30" table:style-name="Tabelle30">
   <table:table-column table:style-name="Tabelle30.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle30.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr6" draw:name="Rahmen11" text:anchor-type="paragraph" svg:y="0cm" svg:width="12.638cm" fo:min-height="5.879cm" draw:z-index="19">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr5" draw:name="UML diagram of com.sun.star.frame.Frame" text:anchor-type="paragraph" svg:x="0cm" svg:y="-4.821cm" svg:width="12.441cm" svg:height="5.38cm" draw:z-index="20" xlink:href="Frame.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>UML diagram showing the com.sun.star.frame.Frame service</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration8" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.9</text:sequence>: Frame Service</text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5">XFrame</text:h>
  <text:h text:style-name="Head 6" text:level="6"><text:alphabetical-index-mark text:string-value="Frame setup" text:key1="Frames"/>Frame Setup</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.XFrame]The main role of a frame is to link components into a surrounding window system. This role is expressed by the following methods of the frame&apos;s main interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrame]</text:span>:</text:p>
  <text:p text:style-name="MethodSignatures">// methods for container window</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">initialize</text:span> ( [in] com::sun::star::awt::XWindow xWindow);</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::awt::XWindow <text:span text:style-name="MethodSignatureEmphasis">getContainerWindow</text:span> ();</text:p>
  <text:p text:style-name="MethodSignatures"><text:span text:style-name="Code (in text)"/></text:p>
  <text:p text:style-name="MethodSignatures">// methods for component window and controller</text:p>
  <text:p text:style-name="MethodSignatures">boolean <text:span text:style-name="MethodSignatureEmphasis">setComponent</text:span> ( [in] com::sun::star::awt::XWindow xComponentWindow, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="22"/>[in] com::sun::star::frame::XController xController );</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::awt::XWindow <text:span text:style-name="MethodSignatureEmphasis">getComponentWindow</text:span> ();</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::frame::XController<text:span text:style-name="Code (in text)"> </text:span><text:span text:style-name="MethodSignatureEmphasis">getController</text:span> <text:span text:style-name="Code (in text)">();</text:span> </text:p>
  <text:p text:style-name="Paragraph">The first two methods deal with the container window of a frame, the latter three are about linking the component and the component window with the frame. The method <text:span text:style-name="Code (in text)">initialize()</text:span> expects a top window that is created by the AWT toolkit that becomes the container window of the frame and is retrieved by <text:span text:style-name="Code (in text)">getContainerWindow()</text:span>.</text:p>
  <text:h text:style-name="Head 6" text:level="6"><text:alphabetical-index-mark-start text:id="IMark43875748" text:key1="Frames"/>Frame Hierarchies<text:alphabetical-index-mark-end text:id="IMark43875748"/></text:h>
  <text:p text:style-name="Paragraph">When frames link components into a surrounding window system, they build a frame hierarchy. This aspect is covered by the hierarchy-related <text:span text:style-name="Code (in text)">XFrame</text:span> methods:</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">setCreator</text:span> ( [in] com::sun::star::frame::XFramesSupplier xCreator );</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::frame::XFramesSupplier <text:span text:style-name="MethodSignatureEmphasis">getCreator</text:span> ();</text:p>
  <text:p text:style-name="MethodSignatures">string <text:span text:style-name="MethodSignatureEmphasis">getName</text:span> ();</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">setName</text:span> ( [in] string aName );</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::frame::XFrame <text:span text:style-name="MethodSignatureEmphasis">findFrame</text:span> ( [in] string aTargetFrameName, [in] long nSearchFlags );</text:p>
  <text:p text:style-name="MethodSignatures">boolean <text:span text:style-name="MethodSignatureEmphasis">isTop</text:span> ();</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">XFrame</text:span> method <text:span text:style-name="Code (in text)">setCreator()</text:span> informs a frame about its parent frame and must be called by a frames container (<text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrames]</text:span>) when a frame is added to it by a call to <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrames:append]()</text:span>. A frames container is provided by frames supporting the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFramesSupplier]</text:span>. <text:span text:style-name="Code (in text)">XFramesSupplier</text:span> is currently supported by the desktop frame and by the default frame implementation used by [PRODUCTNAME] documents. It is described below.</text:p>
  <text:p text:style-name="Paragraph">The frame has a <text:alphabetical-index-mark-start text:id="IMark44271916" text:key1="Frames"/>custom name<text:alphabetical-index-mark-end text:id="IMark44271916"/> that is read through <text:span text:style-name="Code (in text)">getName()</text:span> and written through <text:span text:style-name="Code (in text)">setName()</text:span>. Frames in the desktop hierarchy created by GUI interaction usually do not have names. The <text:span text:style-name="Code (in text)">getName()</text:span> returns an empty string for them, whereas frames that are created for special purposes, such as the beamer frame or the online help, have names. Developers can set a name and use it to address a frame in <text:span text:style-name="Code (in text)">findFrame()</text:span> calls or when loading a component into the frame. Custom frame names must not start with an underscore.Leading underscores are reserved for special frame names.See below.</text:p>
  <text:p text:style-name="Paragraph">Every frame in the frame hierarchy is accessed through any other frame in this hierarchy by calling the <text:span text:style-name="Code (in text)">findFrame()</text:span> method. This method searches for a frame with a given name in five steps: self, children, siblings, parent, and create if not found. The <text:span text:style-name="Code (in text)">findFrame()</text:span> checks the called frame, then calls <text:span text:style-name="Code (in text)">findFrame()</text:span> at its children, then its siblings and at its parent frame. The fifth step in the search strategy is reached if the search makes it to the desktop without finding a frame with the given name. In this case, a new frame is created and assigned the name that was searched for. If the top frame is outside the desktop hierarchy, a new frame is not created.</text:p>
  <text:p text:style-name="Paragraph">The name used with <text:span text:style-name="Code (in text)">findFrame()</text:span> can be an arbitrary string without a leading underscore or one of the following reserved frame names. These names are for internal use for loading documents.Some of the reserved names are logical in a <text:span text:style-name="Code (in text)">findFrame()</text:span> call, also. A complete list of reserved frame names can be found in section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.HandleDocuments.Loading.TargetFrame]</text:span>.</text:p>
  <text:p text:style-name="TitledListHead"><text:alphabetical-index-mark-start text:id="IMark43875748"/>_top<text:alphabetical-index-mark-end text:id="IMark43875748"/> </text:p>
  <text:p text:style-name="TitledListBody">Returns the top frame of the called frame, first frame where <text:span text:style-name="Code (in text)">isTop()</text:span> returns true when<text:span text:style-name="T2"> traveling </text:span>up the hierarchy.</text:p>
  <text:p text:style-name="TitledListHead"><text:alphabetical-index-mark-start text:id="IMark44271916"/>_parent<text:alphabetical-index-mark-end text:id="IMark44271916"/> </text:p>
  <text:p text:style-name="TitledListBody">Returns the next frame above in the frame hierarchy.</text:p>
  <text:p text:style-name="TitledListHead"><text:alphabetical-index-mark-start text:id="IMark43875748"/>_self<text:alphabetical-index-mark-end text:id="IMark43875748"/> </text:p>
  <text:p text:style-name="TitledListBody">Returns the frame itself, same as an empty target frame name. This means you are searching for a frame you already have, but it is legal to do so.</text:p>
  <text:p text:style-name="TitledListHead"><text:alphabetical-index-mark-start text:id="IMark44271916"/>_blank<text:alphabetical-index-mark-end text:id="IMark44271916"/> </text:p>
  <text:p text:style-name="TitledListBody">Creates a new <text:alphabetical-index-mark-start text:id="IMark43875748" text:key1="Frames"/>top-level frame<text:alphabetical-index-mark-end text:id="IMark43875748"/> whose parent is the desktop frame.</text:p>
  <text:p text:style-name="Paragraph">Calls with <text:span text:style-name="Code (in text)">&quot;_top&quot;</text:span> or <text:span text:style-name="Code (in text)">&quot;_parent&quot;</text:span> return the frame itself if the called frame is a top frame or has no parent. This is compatible to the targetting strategies of web browsers.</text:p>
  <text:p text:style-name="Paragraph">We have seen that <text:span text:style-name="Code (in text)">findFrame()</text:span> is called recursively. To control the recursion, the search flags parameter specified in the constants group <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FrameSearchFlag]</text:span> is used. For all of the five steps mentioned above, a suitable flag exists (<text:span text:style-name="Code (in text)">SELF, CHILDREN, SIBLINGS, PARENT, CREATE</text:span> ). Every search step can be prohibited by deleting the appropriate <text:span text:style-name="Code (in text)">FrameSearchFlag</text:span>. The search flag parameter can also be used to avoid<text:span text:style-name="T2"> ambiguities </text:span>caused by multiple occurrences of a frame name in a hierarchy by excluding parts of the frame tree from the search. If <text:span text:style-name="Code (in text)">findFrame()</text:span> is called for a reserved frame name, the search flags are ignored.</text:p>
  <table:table table:name="Tabelle50" table:style-name="Tabelle50">
   <table:table-column table:style-name="Tabelle50.A"/>
   <table:table-column table:style-name="Tabelle50.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle50.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Tip2" text:anchor-type="paragraph" svg:x="0.067cm" svg:y="0cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="21" xlink:href="../tip.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Tip graphics marks a hint section in the text</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle50.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">An additional flag can be used to extend a bottom-up search to all [PRODUCTNAME] application windows, no matter where the search starts. Based on the five flags for the five steps, the default frame search stops searching when it reaches a top frame and does not continue with other [PRODUCTNAME] windows. Setting the <text:span text:style-name="Code (in text)">TASKS</text:span> flag overrides this.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">There are separate frame hierarchies that do not interact with each other. If a frame is created, but not inserted into any hierarchy, it becomes the top frame of its own hierarchy. This frame and its contents can not be accessed from other hierarchies by traversing the frame hierarchies through API calls. , Also, this frame and its content cannot reach frames and their contents in other hierarchies. It is the code that creates a frame and decides if the new frame becomes part of an existing hierarchy, thus enabling it to find other frames ,and making it and its viewable component visible to the other frames. Examples for frames that are not inserted into an existing hierarchy are preview frames in dialogs, such as the document preview in the <text:span text:style-name="Buttons/Menus">File – New – Templates and Documents</text:span> dialog. </text:p>
  <table:table table:name="Tabelle36" table:style-name="Tabelle36">
   <table:table-column table:style-name="Tabelle36.A"/>
   <table:table-column table:style-name="Tabelle36.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle36.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note3" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="56" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle36.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">This is the only way the current frame and desktop implementation handle this. If one exchanges either or both of them by another implementation, the treatment of the <text:span text:style-name="Code (in text)">&quot;_blank&quot;</text:span> target and the <text:span text:style-name="Code (in text)">CREATE</text:span> SearchFlag may differ. </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 6" text:level="6">Frame <text:alphabetical-index-mark text:string-value="actions" text:key1="Frames"/>Actions</text:h>
  <text:p text:style-name="Paragraph">Several actions take place at a frame. The context of viewable components can change, a frame may be activated or the relationship between frame and component may be altered. For instance, when the current selection in a document has been changed, the controller informs the frame about it by calling <text:span text:style-name="Code (in text)">contextChanged()</text:span>. The frame then tells its frame action listeners that the context has changed. The frame action listeners are also informed about changes in the relationship between the frame and component, and about frame activation. The corresponding <text:span text:style-name="Code (in text)">XFrame</text:span> methods are:</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">contextChanged</text:span> ();</text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">activate</text:span> ();</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">deactivate</text:span> ();</text:p>
  <text:p text:style-name="MethodSignatures">boolean <text:span text:style-name="MethodSignatureEmphasis">isActive</text:span> ();</text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">addFrameActionListener</text:span> ( [in] com::sun::star::frame::XFrameActionListener xListener );</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">removeFrameActionListener</text:span> ( [in] com::sun::star::frame::XFrameActionListener xListener );</text:p>
  <text:p text:style-name="Paragraph">The method <text:span text:style-name="Code (in text)">activate()</text:span> makes the given frame the <text:alphabetical-index-mark-start text:id="IMark43875748" text:key1="Frames"/>active frame<text:alphabetical-index-mark-end text:id="IMark43875748"/> in its parent container. If the parent is the desktop frame, this makes the associated component the <text:alphabetical-index-mark-start text:id="IMark44876204" text:key1="Frames"/>current component<text:alphabetical-index-mark-end text:id="IMark44876204"/>. However, this is not reflected in the user interface by making the corresponding window the top window. If the container of the active frame is to be the top window, use <text:span text:style-name="Code (in text)">setFocus()</text:span> at the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindow]</text:span> interface of the container window.</text:p>
  <text:p text:style-name="Paragraph">The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrameActionListener]</text:span> used with <text:span text:style-name="Code (in text)">addFrameActionListener()</text:span> must implement the following method:</text:p>
  <table:table table:name="Tabelle46" table:style-name="Tabelle46">
   <table:table-column table:style-name="Tabelle46.A"/>
   <table:table-column table:style-name="Tabelle46.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle46.A1" table:number-columns-spanned="2" table:value-type="string">
      <text:p text:style-name="TableHead">Method of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrameActionListener]</text:span></text:p>
     </table:table-cell>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle46.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.frame.XFrameActionListener:frameAction]()</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle46.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Takes a struct <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FrameActionEvent]</text:span>. The struct contains two members: the source <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrame]</text:span> <text:span text:style-name="Code (in text)">Frame</text:span> and an enum <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FrameActionEvent]</text:span> <text:span text:style-name="Code (in text)">Action</text:span> value with one of the following values:</text:p>
     <text:p text:style-name="TextInTable">COMPONENT_ATTACHED: a component has been attached to a frame. This is almost the same as the instantiation of the component within that frame. The component is attached to the frame immediately before this event is broadcast.</text:p>
     <text:p text:style-name="TextInTable">COMPONENT_DETACHING: a component is detaching from a frame. This is the same as the destruction of the component which was in that frame. The moment the event is broadcast the component is still attached to the frame, but in the next moment it will not be.. </text:p>
     <text:p text:style-name="TextInTable">COMPONENT_REATTACHED: a component has been attached to a new model. In this case, the component remains the same, but operates on a new model component.</text:p>
     <text:p text:style-name="TextInTable">FRAME_ACTIVATED: a component has been activated. Activations are broadcast from the top component which was not active, down to the innermost component.</text:p>
     <text:p text:style-name="TextInTable">FRAME_DEACTIVATING: broadcast immediately before the component is deactivated. Deactivations are broadcast from the innermost component which does not stay active up to the outermost component which does not stay active.</text:p>
     <text:p text:style-name="TextInTable">CONTEXT_CHANGED: a component has changed its internal context, for example, the selection. If the activation status within a frame changes, this is a context change, also. </text:p>
     <text:p text:style-name="TextInTable">FRAME_UI_ACTIVATED: broadcast by an active frame when it is getting UI control (tool control). </text:p>
     <text:p text:style-name="TextInTable">FRAME_UI_DEACTIVATING: broadcast by an active frame when it is losing UI control (tool control). </text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <table:table table:name="Tabelle45" table:style-name="Tabelle45">
   <table:table-column table:style-name="Tabelle45.A"/>
   <table:table-column table:style-name="Tabelle45.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle45.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important" text:anchor-type="paragraph" svg:x="0.12cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="22" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle45.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">At this time, the <text:span text:style-name="Code (in text)">XFrame</text:span> methods used to build a frame-controller-model relationship can only be fully utilized by frame loader implementations or customized trivial components. Outside a frame loader you can create a frame, but the current implementations cannot create a standalone controller that could be used with <text:span text:style-name="Code (in text)">setComponent()</text:span>. Therefore, you can not remove components from one frame and add them to another or create additional controllers for a loaded model using the component framework. This is due to restrictions of the VCL and the C++ implementation of the current document components.</text:p>
      <text:p text:style-name="TextInTable">Currently, the only way for clients to construct a frame and insert a [PRODUCTNAME] document into it, is to use the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XComponentLoader]</text:span> interface of the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.Desktop]</text:span> or the interfaces <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XSynchronousFrameLoader],</text:span> the preferred frame loader interface, and the asynchronous <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrameLoader]</text:span> of the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FrameLoader]</text:span> service that is available at the global service factory.</text:p>
      <text:p text:style-name="TextInTable">The recommended method to get additional controllers for loaded models is to use the <text:span text:style-name="Code (in text)">OpenNewView</text:span> property with <text:span text:style-name="Code (in text)">loadComponentFromURL()</text:span> at the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XComponentLoader]</text:span> interface of the desktop.</text:p>
      <text:p text:style-name="TextInTable">There is also another possibility: dispatch a “.uno:NewWindow” command to a frame that contains that model. </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5">XFramesSupplier</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.XFramesSupplier]The <text:span text:style-name="Code (in text)">Frame</text:span> interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFramesSupplier]</text:span> offers methods to access <text:alphabetical-index-mark-start text:id="IMark43875748" text:key1="Frames"/>sub-frames<text:alphabetical-index-mark-end text:id="IMark43875748"/> of a frame. The frame implementation of [PRODUCTNAME] supports this interface. This interface inherits from <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrame]</text:span>, and introduces the following methods:</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::frame::XFrames <text:span text:style-name="MethodSignatureEmphasis">getFrames</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::frame::XFrame <text:span text:style-name="MethodSignatureEmphasis">getActiveFrame</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">setActiveFrame</text:span> ( [in] com::sun::star::frame::XFrame xFrame)</text:p>
  <text:p text:style-name="Paragraph">The method <text:span text:style-name="Code (in text)">getFrames()</text:span> returns a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrames]</text:span> container, that is a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.XIndexAccess]</text:span> with additional methods to add and remove frames:</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">append</text:span> ( [in] com::sun::star::frame::XFrame xFrame )</text:p>
  <text:p text:style-name="MethodSignatures">sequence &lt; com::sun::star::frame::XFrame &gt; <text:span text:style-name="MethodSignatureEmphasis">queryFrames</text:span> ( [in] long nSearchFlags )</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">remove</text:span> ( [in] com::sun::star::frame::XFrame xFrame ); </text:p>
  <text:p text:style-name="Paragraph">This <text:span text:style-name="Code (in text)">XFrames</text:span> collection is used when frames are appended to a frame to become sub-frames. The <text:span text:style-name="Code (in text)">append()</text:span> method implementation must extend the existing frame hierarchy by an internal call to <text:span text:style-name="Code (in text)">setCreator()</text:span> at the parent frame in the frame hierarchy. The parent frame is always the frame whose <text:span text:style-name="Code (in text)">XFramesSupplier</text:span> interface is used to append a new frame.</text:p>
  <text:p text:style-name="Paragraph">Through <text:span text:style-name="Code (in text)">getActiveFrame()</text:span> access the active sub-frame in a frame with subframes. If there are no sub-frames or a sub-frame is currently non active, the active frame is <text:span text:style-name="Code (in text)">null</text:span>.<text:span text:style-name="Code (in text)"> </text:span>The <text:span text:style-name="Code (in text)">setActiveFrame()</text:span> is called by a sub-frame to inform the frame about the activation of the sub-frame. In <text:span text:style-name="Code (in text)">setActiveFrame(),</text:span> the method <text:span text:style-name="Code (in text)">setActiveFrame()</text:span> at the creator is called, then the registered frame action listeners are notified by an appropriate call to <text:span text:style-name="Code (in text)">frameAction()</text:span> with <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FrameActionEvent:Action]</text:span> set to <text:span text:style-name="Code (in text)">FRAME_UI_ACTIVATED</text:span>.</text:p>
  <text:h text:style-name="Head 5" text:level="5">XDispatchProvider and XDispatchProviderInterception</text:h>
  <text:p text:style-name="Paragraph">Frame services also support <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProvider]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProviderInterception]</text:span>. The section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.UsingDispatch]</text:span> explains how these interfaces are used. </text:p>
  <text:h text:style-name="Head 5" text:level="5">XStatusIndicatorFactory</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.task.XStatusIndicatorFactory]The frame implementation supplies a <text:alphabetical-index-mark-start text:id="IMark44271916" text:key1="Frames"/>status indicator<text:alphabetical-index-mark-end text:id="IMark44271916"/> through its interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.task.XStatusIndicatorFactory]</text:span>. A status indicator can be used by a frame loader to show the loading process for a document. The factory has only one method that returns an object supporting <text:span text:style-name="Code (in text)">[IDL:com.sun.star.task.XStatusIndicator]</text:span>:</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::task::XStatusIndicator <text:span text:style-name="MethodSignatureEmphasis">createStatusIndicator</text:span> ()</text:p>
  <text:p text:style-name="Paragraph">The status indicator is displayed by a call to <text:span text:style-name="Code (in text)">[IDL:com.sun.star.task.XStatusIndicator:start]()</text:span>. Pass a text and a numeric range, and use <text:span text:style-name="Code (in text)">setValue()</text:span> to let the status bar grow until the maximum range is reached. The method <text:span text:style-name="Code (in text)">end()</text:span> removes the status indicator.</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark-start text:id="IMark43875748"/>Controllers<text:alphabetical-index-mark-end text:id="IMark43875748"/></text:h>
  <table:table table:name="Tabelle47" table:style-name="Tabelle47">
   <table:table-column table:style-name="Tabelle47.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle47.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr6" draw:name="Rahmen12" text:anchor-type="paragraph" svg:y="0cm" svg:width="12.608cm" fo:min-height="3.84cm" draw:z-index="23">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr3" draw:name="UML diagram of com.sun.star.frame.Controller" text:anchor-type="paragraph" svg:x="0cm" svg:y="-3.761cm" svg:width="12.471cm" svg:height="3.341cm" draw:z-index="24" xlink:href="Controller.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>UML diagram showing com.sun.star.frame.Controller service</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration9" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.10</text:sequence>: Controller Service</text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5">XController</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.Controller]A <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XController]</text:span> inherits from <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XComponent]</text:span> and introduces the following methods:</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::frame::XFrame <text:span text:style-name="MethodSignatureEmphasis">getFrame</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">attachFrame</text:span> (com::sun::star::frame::XFrame xFrame)</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::frame::XModel <text:span text:style-name="MethodSignatureEmphasis">getModel</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">boolean <text:span text:style-name="MethodSignatureEmphasis">attachModel</text:span> (com::sun::star::frame::XModel xModel)</text:p>
  <text:p text:style-name="MethodSignatures">boolean <text:span text:style-name="MethodSignatureEmphasis">suspend</text:span> (boolean bSuspend)</text:p>
  <text:p text:style-name="MethodSignatures">any <text:span text:style-name="MethodSignatureEmphasis">getViewData</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">restoreViewData</text:span> (any Data)</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XController]</text:span> links model and frame through the methods <text:span text:style-name="Code (in text)">get/attachModel()</text:span> and <text:span text:style-name="Code (in text)">get/attachFrame()</text:span>. These methods and the corresponding methods in the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XModel]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrame]</text:span> interfaces act together. calling <text:span text:style-name="Code (in text)">attachModel()</text:span> at the controller <text:span text:style-name="Emphasis">must</text:span> be accompanied by a corresponding call of <text:span text:style-name="Code (in text)">connectController()</text:span> at the model, and <text:span text:style-name="Code (in text)">attachFrame()</text:span> at the controller <text:span text:style-name="Emphasis">must</text:span> have its counterpart <text:span text:style-name="Code (in text)">setComponent()</text:span> at the frame.</text:p>
  <text:p text:style-name="Paragraph">The controller is asked for permission to dispose of the entire associated component by using <text:span text:style-name="Code (in text)">suspend()</text:span>. The <text:span text:style-name="Code (in text)">suspend()</text:span> method shows dialogs, for example, to save changes. To avoid the dialog, close the corresponding frame without using <text:span text:style-name="Code (in text)">suspend()</text:span> before. The section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.HandleDocuments.Closing]</text:span> provides additional information.</text:p>
  <text:p text:style-name="Paragraph">Developers retrieve and restore data used to setup the view at the controller by calling <text:span text:style-name="Code (in text)">get/restoreViewData()</text:span>. These methods are usually called on loading and saving the document, but they also allow developers to manipulate the state of a view from the outside. The exact content of this data depends on the concrete controller/model pair. </text:p>
  <text:h text:style-name="Head 5" text:level="5">XDispatchProvider</text:h>
  <text:p text:style-name="Paragraph">Through <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProvider],</text:span> the controller participates in the dispatch framework. It is described in section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.UsingDispatch]</text:span>.</text:p>
  <text:h text:style-name="Head 5" text:level="5">XSelectionSupplier</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.view.XSelectionSupplier]The optional <text:span text:style-name="Code (in text)">Controller</text:span> interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.view.XSelectionSupplier]</text:span> accesses the selected object and informs listeners when the selection changes:</text:p>
  <text:p text:style-name="MethodSignatures">boolean <text:span text:style-name="MethodSignatureEmphasis">select</text:span> ( [in] any aSelection)</text:p>
  <text:p text:style-name="MethodSignatures">any <text:span text:style-name="MethodSignatureEmphasis">getSelection</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">addSelectionChangeListener</text:span> ( [in] com::sun::star::view::XSelectionChangeListener xListener)</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">removeSelectionChangeListener</text:span> ( [in] com::sun::star::view::XSelectionChangeListener xListener)</text:p>
  <text:p text:style-name="Paragraph">The type of selection depends on the type of the document and the selected object. It is also possible to get the current selection in the active or last controller of a model by calling the method <text:span text:style-name="Code (in text)">getCurrentSelection()</text:span> in the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XModel]</text:span> interface.</text:p>
  <text:h text:style-name="Head 5" text:level="5">XContextMenuInterception</text:h>
  <text:p text:style-name="Paragraph">The optional <text:span text:style-name="Code (in text)">Controller</text:span> interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.ui.XContextMenuInterception]</text:span> intercepts requests for context<text:span text:style-name="T2"> menus </text:span>in the document&apos;s window. See chapter <text:span text:style-name="ChapterRef">[CHAPTER:Components.Integrating.InterceptContextMenus]</text:span>.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Document Specific Controller Services</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.Controller;com.sun.star.text.TextDocumentView;com.sun.star.sheet.SpreadsheetView;com.sun.star.drawing.DrawingDocumentDrawView;com.sun.star.sdb.DataSourceBrowser]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.Controller]</text:span> specification is generic and does not describe additional features required for a fully functional document controller specification, such as the controller specifications for Writer, Calc and Draw documents. The following table shows the controller services specified for [PRODUCTNAME] document components. </text:p>
  <text:p text:style-name="Paragraph">Once the reference to a controller is retrieved, you can query for these interfaces. Use the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XServiceInfo]</text:span> interface of the model to ask it for the supported service(s). The component implementations in [PRODUCTNAME] support the following services. Refer to the related chapters for additional information about the interfaces you get from the controllers of [PRODUCTNAME] documents.</text:p>
  <table:table table:name="Tabelle3" table:style-name="Tabelle3">
   <table:table-column table:style-name="Tabelle3.A"/>
   <table:table-column table:style-name="Tabelle3.B"/>
   <table:table-column table:style-name="Tabelle3.C"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle3.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Component and Chapter</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle3.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Specialized Controller Service</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle3.C1" table:value-type="string">
      <text:p text:style-name="TableHead">General Description</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Writer <text:span text:style-name="ChapterRef">[CHAPTER:Text.Controlling]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.text.TextDocumentView]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">The text view supplies a text view cursor that has knowledge about the current page layout and page number. It can walk through document pages, screen pages and lines. The selected ruby text is also available, a special Asian text formatting, comparable to superscript.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Calc <text:span text:style-name="ChapterRef">[CHAPTER:Spreadsheet.Controlling]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.sheet.SpreadsheetView]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">The spreadsheet view is extremely powerful. It includes the services <text:span text:style-name="Code (in text)">[IDL:com.sun.star.sheet.SpreadsheetViewPane]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.sheet.SpreadsheetViewSettings]</text:span>. The view pane handles the currently visible cell range and provides controllers for form controls in the spreadsheet. The view settings deal with the visibility of spreadsheet elements, such as the grid and current zoom mode. Furthermore, the spreadsheet view provides access to the active sheet in the view and the collection of all view panes, allowing to split and freeze the view, and control the interactive selection of a cell range.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Draw <text:span text:style-name="ChapterRef">[CHAPTER:Drawing.Controlling]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.drawing.DrawingDocumentDrawView]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">The drawing document view toggles master page mode and layer mode, controls the current page and supplies the currently visible rectangle.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Impress <text:span text:style-name="ChapterRef">[CHAPTER:Drawing.Controlling]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.drawing.DrawingDocumentDrawView]</text:span></text:p>
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.presentation.PresentationView]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">The presentation view does not introduce presentation specific features. Running presentations are controlled by the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.presentation.XPresentationSupplier]</text:span> interface of the presentation document model.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">DataBaseAccess</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.sdb.DataSourceBrowser]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">This controller has no published functionality that would be useful for developers.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Bibliography</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">(no special controller specified)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">-</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Writer (PagePreview)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">(no special controller specified)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">-</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Writer/Webdocument (SourceView)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">(no special controller specified)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">-</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Calc (PagePreview)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">(no special controller specified)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">-</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Chart <text:span text:style-name="ChapterRef">[CHAPTER:Charts.Controlling]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">(no special controller specified)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">-</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Math</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">(no special controller specified)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle3.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">-</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark-start text:id="IMark43875748"/>Models<text:alphabetical-index-mark-end text:id="IMark43875748"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.XModel]There is not an independent specification for a model service. The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XModel]</text:span> is currently supported by Writer, Calc, Draw and Impress document components. In our context, we call objects supporting <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XModel],</text:span> <text:span text:style-name="Emphasis">model objects</text:span>. All [PRODUCTNAME] document components have the service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.OfficeDocument]</text:span> in common. An <text:span text:style-name="Code (in text)">OfficeDocument</text:span> implements the following interfaces: </text:p>
  <text:h text:style-name="Head 5" text:level="5">XModel</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.XModel]The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XModel]</text:span> inherits from <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XComponent]</text:span> and introduces the following methods, which handle the model&apos;s resource description, manage its controllers and retrieves the current selection.</text:p>
  <text:p text:style-name="MethodSignatures">string <text:span text:style-name="MethodSignatureEmphasis">getURL</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">sequence &lt; com::sun::star::beans::PropertyValue &gt; <text:span text:style-name="MethodSignatureEmphasis">getArgs</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">boolean <text:span text:style-name="MethodSignatureEmphasis">attachResource</text:span> ( [in] string aURL, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="24"/>[in] sequence &lt; com::sun::star::beans::PropertyValue aArgs &gt; )</text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">com::sun::star::frame::XController <text:span text:style-name="MethodSignatureEmphasis">getCurrentController</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">setCurrentController</text:span> (com::sun::star::frame::XController xController)</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">connectController</text:span> (com::sun::star::frame::XController xController)</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">disconnectController</text:span> (com::sun::star::frame::XController xController)</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">lockControllers</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">unlockControllers</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">boolean <text:span text:style-name="MethodSignatureEmphasis">hasControllersLocked</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">com::sun::star::uno::XInterface <text:span text:style-name="MethodSignatureEmphasis">getCurrentSelection</text:span> ()</text:p>
  <text:p text:style-name="Paragraph">The method <text:span text:style-name="Code (in text)">getURL()</text:span> provides the URL where a document was loaded from or last stored using <text:span text:style-name="Code (in text)">storeAsURL()</text:span>. As long as a new document has not been saved, the URL is an empty string. The method <text:span text:style-name="Code (in text)">getArgs()</text:span> returns a sequence of property values that report the resource description according to <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.MediaDescriptor],</text:span> specified on loading or saving with storeAsURL. The method <text:span text:style-name="Code (in text)">attachResource()</text:span> is used by the frame loader implementations to inform the model about its URL and MediaDescriptor.</text:p>
  <text:p text:style-name="Paragraph">The current or last <text:alphabetical-index-mark-start text:id="IMark44271916" text:key1="Models"/>active controller<text:alphabetical-index-mark-end text:id="IMark44271916"/> for a model isretrieved through <text:span text:style-name="Code (in text)">getCurrentController()</text:span>. The corresponding method <text:span text:style-name="Code (in text)">setCurrentController()</text:span> sets a different current controller at models where additional controllers are available. However, additional controllers can not be created at this time for [PRODUCTNAME] components using the component API. The method <text:span text:style-name="Code (in text)">connectController()</text:span> is used by frame loader implementations and provides the model with a new controller that has been created for it, without making it the <text:span text:style-name="Emphasis">current</text:span> controller. The <text:span text:style-name="Code (in text)">disconnectController()</text:span> tells the model that a controller may no longer be used. Finally, the model holds back screen updates using <text:span text:style-name="Code (in text)">lockControllers()</text:span> and <text:span text:style-name="Code (in text)">unlockControllers()</text:span>. For each call to <text:span text:style-name="Code (in text)">lockControllers(),</text:span> there must be a call to <text:span text:style-name="Code (in text)">unlockControllers()</text:span> to remove the lock. The method <text:span text:style-name="Code (in text)">hasControllersLocked()</text:span> tells if the controllers are locked.</text:p>
  <text:p text:style-name="Paragraph">The currently selected object is retrieved by a call to <text:span text:style-name="Code (in text)">getCurrentSelection()</text:span>. This method is an alternative to <text:span text:style-name="Code (in text)">getSelection()</text:span> at the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.view.XSelectionSupplier]</text:span> interface supported by controller services.</text:p>
  <text:h text:style-name="Head 5" text:level="5">XModifiable</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.util.XModifiable]The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XModifiable]</text:span> traces the <text:alphabetical-index-mark-start text:id="IMark43875748"/>modified status<text:alphabetical-index-mark-end text:id="IMark43875748"/> of a document:</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">addModifyListener</text:span> ( [in] com::sun::star::util::XModifyListener aListener)</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">removeModifyListener</text:span> ( [in] com::sun::star::util::XModifyListener aListener)</text:p>
  <text:p text:style-name="MethodSignatures">boolean <text:span text:style-name="MethodSignatureEmphasis">isModified</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">setModified</text:span> ( [in] boolean bModified)</text:p>
  <text:h text:style-name="Head 5" text:level="5">XStorable</text:h>
  <text:p text:style-name="Paragraph">The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XStorable]</text:span> stores a document under an arbitrary URL or its current location. Details about how to use this interface are discussed in the chapter <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.HandleDocuments]</text:span></text:p>
  <text:h text:style-name="Head 5" text:level="5">XPrintable</text:h>
  <text:p text:style-name="Paragraph">The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.view.XPrintable]</text:span> is used to set and get the printer and its settings, and dispatch print jobs. These methods and special printing features for the various document types are described in the chapters <text:span text:style-name="ChapterRef">[CHAPTER:Text.FileHandling.Printing]</text:span>, <text:span text:style-name="ChapterRef">[CHAPTER:Spreadsheet.FileHandling.Printing]</text:span>, <text:span text:style-name="ChapterRef">[CHAPTER:Drawing.DrawFileHandling.Printing]</text:span> and <text:span text:style-name="ChapterRef">[CHAPTER:Drawing.PresentationFileHandling.Printing]</text:span>.</text:p>
  <text:p text:style-name="MethodSignatures">sequence&lt; com::sun::star::beans::PropertyValue &gt; <text:span text:style-name="MethodSignatureEmphasis">getPrinter</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">setPrinter</text:span> ( [in] sequence&lt; com::sun::star::beans::PropertyValue &gt; aPrinter ) </text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">print</text:span> ( [in] sequence&lt; com::sun::star::beans::PropertyValue &gt; xOptions ) </text:p>
  <text:h text:style-name="Head 5" text:level="5">XEventBroadcaster</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.document.XEventBroadcaster]For versions later than 641, the optional interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XEventBroadcaster]</text:span> at office documents enables developers to add listeners for events related to office documents in general, or for events specific for the individual document type.See <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.Common.DocumentEvents]</text:span>). </text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">addEventListener</text:span> ( [in] com::sun::star::document::XEventListener xListener)</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">removeEventListener</text:span> ( [in] com::sun::star::document::XEventListener xListener)</text:p>
  <text:p text:style-name="Paragraph">The XEventListener must implement a single method, besides <text:span text:style-name="Code (in text)">disposing()</text:span>:</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="CodeEmphasis">notifyEvent</text:span> ( [in] com::sun::star::document::EventObject Event )</text:p>
  <text:p text:style-name="Paragraph">The struct <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.EventObject]</text:span> has a string member <text:span text:style-name="Code (in text)">EventName</text:span>, that assumes one of the values specified in <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.Events]</text:span>. These events are also on the <text:span text:style-name="Buttons/Menus">Events</text:span> tab of the <text:span text:style-name="Buttons/Menus">Tools – Configure</text:span> dialog.</text:p>
  <text:p text:style-name="Paragraph">The general events are the same events as those provided at the <text:span text:style-name="Code (in text)">XEventBroadcaster</text:span> interface of the desktop. While the model is only concerned about its own events, the desktop broadcasts the events for all the loaded documents.</text:p>
  <text:h text:style-name="Head 5" text:level="5">XEventsSupplier</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.document.XEventsSupplier]The optional interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XEventsSupplier]</text:span> binds the execution of dispatch URLs to document events, thus providing a configurable event listener as a simplification for the more general event broadcaster or listener mechanism of the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XEventBroadcaster]</text:span> interface. This is done programmatically versus manually in <text:span text:style-name="Buttons/Menus">Tools – Configure – Events</text:span>. </text:p>
  <text:h text:style-name="Head 5" text:level="5">XDocumentInfoSupplier</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.document.XDocumentInfoSupplier]The optional interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XDocumentInfoSupplier]</text:span> provides access to document information as described in section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.Common.DocumentInfo]</text:span>.Document information is presented in the <text:span text:style-name="Buttons/Menus">File – Properties</text:span> dialog in the GUI.</text:p>
  <text:h text:style-name="Head 5" text:level="5">XViewDataSupplier</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.document.XViewDataSupplier]The optional <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XViewDataSupplier]</text:span> interface sets and restores view data.</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::container::XIndexAccess <text:span text:style-name="MethodSignatureEmphasis">getViewData</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">setViewData</text:span> ( [in] com::sun::star::container::XIndexAccess aData)</text:p>
  <text:p text:style-name="Paragraph">The view data are a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.XIndexAccess]</text:span> to sequences of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.PropertyValue]</text:span> structs. Each sequence represents the settings of a view to the model that supplies the view data.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Document Specific Features</text:h>
  <text:p text:style-name="Paragraph">Every service specification for real model objects provides more interfaces that constitute the actual model functionality For example, a text document service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.text.TextDocument]</text:span> provides text related interfaces. Having received a reference to a model, developers query for these interfaces. The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XServiceInfo]</text:span> interface of a model can be used to ask for supported services. The [PRODUCTNAME] document types support the following services:</text:p>
  <table:table table:name="Tabelle1" table:style-name="Tabelle1">
   <table:table-column table:style-name="Tabelle1.A"/>
   <table:table-column table:style-name="Tabelle1.B"/>
   <table:table-column table:style-name="Tabelle1.C"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle1.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Document</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle1.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Service</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle1.C1" table:value-type="string">
      <text:p text:style-name="TableHead">Chapter</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Calc</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.sheet.SpreadsheetDocument]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle1.C2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="ChapterRef">[CHAPTER:Spreadsheet]</text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Draw</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.drawing.DrawingDocument]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle1.C2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="ChapterRef">[CHAPTER:Drawing]</text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Impress</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.presentation.PresentationDocument]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle1.C2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="ChapterRef">[CHAPTER:Drawing]</text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Math</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.formula.FormulaProperties]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle1.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">-</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Writer (all Writer modules)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.text.TextDocument]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle1.C2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="ChapterRef">[CHAPTER:Text]</text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Chart</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.chart.ChartDocument]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle1.C2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="ChapterRef">[CHAPTER:Charts]</text:span></text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">Refer to the related chapters for additional information about the interfaces of the documents of [PRODUCTNAME].</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="interfaces" text:key1="Window"/>Window Interfaces</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.awt.XWindow;com.sun.star.awt.XTopWindow;com.sun.star.awt.XWindowPeer]The window interfaces of the component window and container window control the [PRODUCTNAME] application windows. This chapter provides a short overview.</text:p>
  <text:h text:style-name="Head 5" text:level="5">XWindow</text:h>
  <text:p text:style-name="Paragraph">The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindow]</text:span> is supported by the component and controller windows. This interface comprises methods to resize a window, control its visibility, enable and disable it, and make it the focus for input device events. Listeners are informed about window events.</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">setPosSize</text:span> ( long X, long Y, long Width, long Height, short Flags ); </text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::awt::Rectangle <text:span text:style-name="MethodSignatureEmphasis">getPosSize</text:span> (); </text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">setVisible</text:span> ( boolean Visible ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">setEnable</text:span> ( boolean Enable ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">setFocus</text:span> (); </text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">addWindowListener</text:span> ( com::sun::star::awt::XWindowListener xListener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">removeWindowListener</text:span> ( com::sun::star::awt::XWindowListener xListener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">addFocusListener</text:span> ( com::sun::star::awt::XFocusListener xListener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">removeFocusListener</text:span> ( com::sun::star::awt::XFocusListener xListener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">addKeyListener</text:span> ( com::sun::star::awt::XKeyListener xListener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">removeKeyListener</text:span> ( com::sun::star::awt::XKeyListener xListener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">addMouseListener</text:span> ( com::sun::star::awt::XMouseListener xListener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">removeMouseListener</text:span> ( com::sun::star::awt::XMouseListener xListener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">addMouseMotionListener</text:span> ( com::sun::star::awt::XMouseMotionListener xListener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">removeMouseMotionListener</text:span> ( com::sun::star::awt::XMouseMotionListener xListener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">addPaintListener</text:span> ( com::sun::star::awt::XPaintListener xListener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">removePaintListener</text:span> ( com::sun::star::awt::XPaintListener xListener ); </text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindowListener]</text:span> gets the following notifications. The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.WindowEvent]</text:span> has members describing the size and position of the window.</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">windowResized</text:span> ( [in] com::sun::star::awt::WindowEvent e )</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">windowMoved</text:span> ( [in] com::sun::star::awt::WindowEvent e )</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">windowShown</text:span> ( [in] com::sun::star::lang::EventObject e )</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">windowHidden</text:span> ( [in] com::sun::star::lang::EventObject e ); </text:p>
  <text:p text:style-name="Paragraph">What the other listeners do are evident by their names.</text:p>
  <text:h text:style-name="Head 5" text:level="5">XTopWindow</text:h>
  <text:p text:style-name="Paragraph">The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XTopWindow]</text:span> is available at container windows. It informs listeners about top window events, and it can put itself in front of other windows or withdraw into the background. It also has a method to control the current menu bar:</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">addTopWindowListener</text:span> ( com::sun::star::awt::XTopWindowListener xListener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">removeTopWindowListener</text:span> ( com::sun::star::awt::XTopWindowListener xListener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">toFront</text:span> (); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">toBack</text:span> (); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">setMenuBar</text:span> ( com::sun::star::awt::XMenuBar xMenu );<text:line-break/></text:p>
  <table:table table:name="Tabelle33" table:style-name="Tabelle33">
   <table:table-column table:style-name="Tabelle33.A"/>
   <table:table-column table:style-name="Tabelle33.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle33.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note4" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="25" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle33.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">Although the XTopWindow interface has a method <text:span text:style-name="Code (in text)">setMenuBar()</text:span>, this method is not usable at this time. The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XMenuBar]</text:span> interface is deprecated.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The top window listener receives the following messages. All methods take a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.WindowEvent]</text:span> with members describing the size and position of the window.</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">windowOpened</text:span> ( [in] com::sun::star::awt::WindowEvent e )</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">windowClosing</text:span> ( [in] com::sun::star::awt::WindowEvent e )</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">windowClosed</text:span> ( [in] com::sun::star::awt::WindowEvent e )</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">windowMinimized</text:span> ( [in] com::sun::star::awt::WindowEvent e )</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">windowNormalized</text:span> ( [in] com::sun::star::awt::WindowEvent e )</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">windowActivated</text:span> ( [in] com::sun::star::awt::WindowEvent e )</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">windowDeactivated</text:span> ( [in] com::sun::star::awt::WindowEvent e )</text:p>
  <text:h text:style-name="Head 5" text:level="5">XWindowPeer</text:h>
  <text:p text:style-name="Paragraph">Each XWindow has a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindowPeer]</text:span>. The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindowPeer]</text:span> interface accesses the window toolkit implementation used to create it and provides the pointer of the pointing device, and controls the background color. It is also used to invalidate a window or portions of it to trigger a redraw cycle.</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::awt::XToolkit <text:span text:style-name="MethodSignatureEmphasis">getToolkit</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">setPointer</text:span> ( [in] com::sun::star::awt::XPointer Pointer )</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">setBackground</text:span> ( [in] long Color ) </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">invalidate</text:span> ( [in] short Flags )</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">invalidateRect</text:span> ( [in] com::sun::star::awt::Rectangle Rect, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="32"/>[in] short Flags )</text:p>
  <text:h text:style-name="Head 3" text:level="3">Creating Frames Manually</text:h>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="creating" text:key1="Frames"/>Frame Creation</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.Frame;com.sun.star.frame.XFrame]]Every time a frame is needed in [PRODUCTNAME], the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.Frame]</text:span> service is created. [PRODUCTNAME] has an implementation for this service, available at the global service manager.</text:p>
  <text:p text:style-name="Paragraph">This service can be replaced by a different implementation, for example, your own implementation in Java, by registering it at the service manager. In special cases, it is possible to use a custom frame implementation instead of the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.Frame]</text:span> service by instantiating a specific implementation using the implementation name with the factory methods of the service manager. Both methods can alter the default window and document handling in [PRODUCTNAME], thus changing or extending its <text:span text:style-name="T2">functionality.</text:span> </text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="assigning windows" text:key1="Frames"/>Assigning Windows to Frames</text:h>
  <text:p text:style-name="Paragraph">Every frame can be assigned to any [PRODUCTNAME] window. For instance, the same frame implementation is used to load a component into an application window of the underlying windowing system or into a preview window of a [PRODUCTNAME] dialog. The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.Frame]</text:span> service implementation does not depend on the type of the window, although the entirety of the frame and window will be a different object by the user.</text:p>
  <text:p text:style-name="Paragraph">If you have a window in your application and want to load a [PRODUCTNAME] document, create a frame and window object, and put them together by a call to <text:span text:style-name="Code (in text)">initialize()</text:span>. A default frame is created by instantiating an object implementing the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.Frame]</text:span> service at the global service manager. For window creation, the current <text:span text:style-name="Code (in text)">[MODULE:com.sun.star.awt]</text:span> implementation has to be used to create windows in all languages supporting UNO. This toolkit offers a method to create window objects that wrap a platform specific window, such as a Java AWT window or a Windows system window represented by its window handle. A Java example is given below.</text:p>
  <text:p text:style-name="Paragraph">Two conditions apply to windows that are to be used with [PRODUCTNAME] frames.</text:p>
  <text:p text:style-name="Paragraph">The first condition is that the window must be created by the current <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.Toolkit]</text:span> service implementation. Not every object implementing the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindow]</text:span> interface is used as an argument in the <text:span text:style-name="Code (in text)">initialize()</text:span> method, because it is syntactically correct, but it is restricted to objects created by the current <text:span text:style-name="Code (in text)">[MODULE:com.sun.star.awt]</text:span> implementation. The insertion of a component into a frame only works if <text:span text:style-name="Emphasis">all</text:span> involved windows are .xbl created by the same toolkit implementation. All internal office components, such as Writer and Calc, are implemented using the Visual Component Library (VCL), so that they do not work if the container window is not implemented by VCL. The current toolkit uses this library internally, so all the windows created by the awt toolkit are passed to a frame.No others work at this time. Using VCL directly is not recommended. The code has to be rewritten, whenever this complication has incurred by the current office implementation and is removed, and the toolkit implementation is exchangeable.</text:p>
  <text:p text:style-name="Paragraph">The second condition is that if a frame and its component are supposed to get <text:span text:style-name="Code (in text)">windowActivated()</text:span> messages, the window object implements the additional interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XTopWindow]</text:span>. This is necessary for editing components, because the <text:span text:style-name="Code (in text)">windowActivated</text:span> event shows a cursor or a selection in the document. As long as this condition is met, further code is not necessary for the interaction between the frame and window, because the frame gets all the necessary events from the window by registering the appropriate listeners in the call to <text:span text:style-name="Code (in text)">initialize()</text:span>.</text:p>
  <text:p text:style-name="Paragraph">When you use the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.Toolkit]</text:span> to create windows, supply a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.WindowDescriptor]</text:span> struct to describe what kind of window is required. Set the <text:span text:style-name="Code (in text)">Type</text:span> member of this struct to <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.WindowClass:TOP]</text:span> and the <text:span text:style-name="Code (in text)">WindowServiceName</text:span> member to <text:span text:style-name="Code (in text)">&quot;window&quot;</text:span> if you want to have an application window, or to <text:span text:style-name="Code (in text)">&quot;dockingwindow&quot;</text:span> if a window is need to be inserted in other windows created by the toolkit.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Setting Components into <text:alphabetical-index-mark-start text:id="IMark44271916" text:key1="Frames"/>Frame Hierarchies<text:alphabetical-index-mark-end text:id="IMark44271916"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.XFramesSupplier]Once a frame has been initialized with a window, it can be added to a <text:alphabetical-index-mark-start text:id="IMark43875748" text:key1="Frames"/>frames supplier<text:alphabetical-index-mark-end text:id="IMark43875748"/>, such as the desktop using the frames container provided by <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFramesSupplier:getFrames]()</text:span>. Its method <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrames:append]()</text:span> inserts the new frame into the <text:span text:style-name="Code (in text)">XFrames</text:span> container and calls <text:span text:style-name="Code (in text)">setCreator()</text:span> at the new frame, passing the <text:span text:style-name="Code (in text)">XFramesSupplier</text:span> interface of the parent frame. </text:p>
  <table:table table:name="Tabelle49" table:style-name="Tabelle49">
   <table:table-column table:style-name="Tabelle49.A"/>
   <table:table-column table:style-name="Tabelle49.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle49.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note5" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="26" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle49.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">The parent frame <text:span text:style-name="Emphasis">must</text:span> be set as the creator of the newly created frame. The current implementation of the frames container calls <text:span text:style-name="Code (in text)">setCreator()</text:span> internally when frames are added to it using <text:span text:style-name="Code (in text)">append()</text:span>.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The following example <text:alphabetical-index-mark text:string-value="creating [example]" text:key1="Frames"/>creates a new window and a frame, plugs them together, and adds them to the desktop, thus creating a new, empty [PRODUCTNAME] application window. [SOURCE:OfficeDev/DesktopEnvironment/FunctionHelper.java]</text:p>
  <text:p text:style-name="Code"><text:s/>// Conditions: xSMGR = m_xServiceManager<text:line-break/> // Get access to vcl toolkit of remote office to create<text:line-break/> // the container window of new target frame.<text:line-break/> com.sun.star.awt.XToolkit xToolkit =<text:line-break/> <text:s/>(com.sun.star.awt.XToolkit)UnoRuntime.queryInterface(<text:line-break/> <text:s text:c="2"/>com.sun.star.awt.XToolkit.class,<text:line-break/> <text:s text:c="2"/>xSMGR.<text:span text:style-name="CodeEmphasis">createInstance(&quot;com.sun.star.awt.Toolkit&quot;)</text:span> );<text:line-break/> <text:line-break/> // Describe the properties of the container window.<text:line-break/> // Tip: It is possible to use native window handle of a java window<text:line-break/> // as parent for this. see chapter &quot;OfficeBean&quot; for further informations<text:line-break/> com.sun.star.awt.WindowDescriptor aDescriptor =<text:line-break/> <text:s/>new com.sun.star.awt.WindowDescriptor();</text:p>
  <text:p text:style-name="Code"><text:s/>aDescriptor.Type <text:s text:c="13"/>= <text:span text:style-name="CodeEmphasis">com.sun.star.awt.WindowClass.TOP</text:span> ;<text:line-break/> aDescriptor.WindowServiceName = <text:span text:style-name="CodeEmphasis">&quot;window&quot;</text:span> ;<text:line-break/> aDescriptor.ParentIndex <text:s text:c="6"/>= -1;<text:line-break/> aDescriptor.Parent <text:s text:c="11"/>= null;<text:line-break/> aDescriptor.Bounds <text:s text:c="11"/>= new com.sun.star.awt.Rectangle(0,0,0,0);</text:p>
  <text:p text:style-name="Code"><text:s/>aDescriptor.WindowAttributes <text:s/>=<text:line-break/> <text:s/>com.sun.star.awt.WindowAttribute.BORDER <text:s text:c="3"/>|<text:line-break/> <text:s/>com.sun.star.awt.WindowAttribute.MOVEABLE <text:s/>|<text:line-break/> <text:s/>com.sun.star.awt.WindowAttribute.SIZEABLE <text:s/>|<text:line-break/> <text:s/>com.sun.star.awt.WindowAttribute.CLOSEABLE ;<text:line-break/> <text:line-break/> <text:span text:style-name="CodeEmphasis">com.sun.star.awt.XWindowPeer xPeer = xToolkit.createWindow(aDescriptor)</text:span> ;<text:line-break/> </text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CodeEmphasis"><text:s/>com.sun.star.awt.XWindow xWindow</text:span> = (com.sun.star.awt.XWindow)UnoRuntime.<text:span text:style-name="CodeEmphasis">queryInterface</text:span> (<text:line-break/> <text:s text:c="2"/><text:span text:style-name="CodeEmphasis">com.sun.star.awt.XWindow</text:span> .class, xPeer);<text:line-break/> <text:line-break/> // Create a new empty target frame.<text:line-break/> // Attention: Before [PRODUCTNAME] build 643 we must use <text:line-break/> // com.sun.star.frame.Task instead of com.sun.star.frame.Frame,</text:p>
  <text:p text:style-name="Code">// because the desktop environment accepts only this special frame type<text:line-break/> // as direct children. It will be deprecated from build 643<text:line-break/> xFrame = (com.sun.star.frame.XFrame)UnoRuntime.queryInterface(<text:line-break/> <text:s text:c="3"/>com.sun.star.frame.XFrame.class, </text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>xSMGR.<text:span text:style-name="CodeEmphasis">createInstance</text:span> (&quot;<text:span text:style-name="CodeEmphasis">com.sun.star.frame.Task</text:span> &quot;));<text:line-break/> <text:line-break/> // Set the container window on it.<text:line-break/> xFrame.<text:span text:style-name="CodeEmphasis">initialize(xWindow)</text:span> ;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// Insert the new frame in desktop hierarchy.<text:line-break/> // Use XFrames interface to do so. It provides access to the<text:line-break/> // child frame container of the parent node.<text:line-break/> // Note: append(xFrame) calls xFrame.setCreator(Desktop) automaticly.<text:line-break/> com.sun.star.frame.XFramesSupplier <text:span text:style-name="CodeEmphasis">xTreeRoot</text:span> =<text:line-break/> (com.sun.star.frame.XFramesSupplier)UnoRuntime.queryInterface(<text:line-break/> <text:s text:c="7"/>com.sun.star.frame.XFramesSupplier.class,<text:line-break/> <text:s text:c="11"/>xSMGR.<text:span text:style-name="CodeEmphasis">createInstance(&quot;com.sun.star.frame.Desktop&quot;)</text:span> );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">com.sun.star.frame.XFrames xChildContainer = xTreeRoot.<text:span text:style-name="CodeEmphasis">getFrames</text:span> ();</text:p>
  <text:p text:style-name="Code">xChildContainer.<text:span text:style-name="CodeEmphasis">append(xFrame)</text:span> ;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// Make some other initializations.<text:line-break/> xPeer.setBackground(0xFFFFFFFF);<text:line-break/> xWindow.setVisible(true);<text:line-break/> <text:span text:style-name="CodeEmphasis">xFrame.setName(&quot;newly created 1&quot;)</text:span> ;</text:p>
  <text:p text:style-name="Paragraph"/>
  <text:h text:style-name="Head 3" text:level="3">Handling Documents</text:h>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="loading" text:key1="Documents"/>Loading Documents</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.XComponentLoader]The framework API defines a simple but powerful interface to load viewable components, the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XComponentLoader]</text:span>. This interface is implemented by the globally accessible <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.Desktop]</text:span> service,to query the <text:span text:style-name="Code (in text)">XComponentLoader</text:span> from the desktop.</text:p>
  <table:table table:name="Tabelle48" table:style-name="Tabelle48">
   <table:table-column table:style-name="Tabelle48.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle48.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr6" draw:name="Rahmen13" text:anchor-type="paragraph" svg:y="0cm" svg:width="13.347cm" fo:min-height="13.301cm" draw:z-index="27">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr3" draw:name="UML diagram showing the involved services for document loading" text:anchor-type="paragraph" svg:x="0.004cm" svg:y="0.002cm" svg:width="13.079cm" svg:height="12.801cm" draw:z-index="28" xlink:href="loadcomp.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>UML diagram showing the involved services for document loading</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration10" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.11</text:sequence>: Services Involved in Document Loading</text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XComponentLoader]</text:span> has one method:</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::lang::XComponent <text:span text:style-name="MethodSignatureEmphasis">loadComponentFromURL</text:span> ( [in] string aURL,</text:p>
  <text:p text:style-name="MethodSignatures"><text:tab-stop/> <text:tab-stop/> [in] string aTargetFrameName,</text:p>
  <text:p text:style-name="MethodSignatures"><text:tab-stop/> <text:tab-stop/> [in] long nSearchFlags,</text:p>
  <text:p text:style-name="MethodSignatures"><text:tab-stop/> <text:tab-stop/> [in] sequence &lt; com::sun::star::beans::PropertyValue aArgs &gt; )</text:p>
  <text:p text:style-name="Paragraph">The use fo this method is demonstrated below in the service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.MediaDescriptor]</text:span>.</text:p>
  <text:h text:style-name="Head 5" text:level="5">MediaDescriptor</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.document.MediaDescriptor]A call to <text:span text:style-name="Code (in text)">loadComponentFromURL()</text:span> receives a sequence of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.PropertyValue]</text:span> structs as a parameter, which implements the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.MediaDescriptor]</text:span> service, consisting of property definitions. It describes where a resource or <text:span text:style-name="Emphasis">medium</text:span> should be loaded from and how this should be done.</text:p>
  <text:p text:style-name="Paragraph">The media descriptor is also used for saving a document to a location using the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XStorable]</text:span>. It transports the &quot;where to&quot; and the &quot;how&quot; of the storing procedure. The table below shows the properties defined in the media descriptor.</text:p>
  <text:p text:style-name="Paragraph">Some properties are used for loading and saving while others apply to one or the other. If a media descriptor is used, only a few of the members are specified. The others assume default values. Strings default to empty strings in general and interface references default to empty references. For all other properties, the default values are specified in the description column of the table. </text:p>
  <text:p text:style-name="Paragraph">Some properties are tagged deprecated. There are old implementations that still use these properties. They are supported, but are discouraged to use them. Use the new property that can be found in the description column of the deprecated property.</text:p>
  <text:p text:style-name="Paragraph">To develop a UNO component that uses the media descriptor, note that all the properties are under control of the framework API. Never create your own property names for the media descriptor, or name clashes may be induced if the framework defines a property that uses the same name. Instead, use the <text:span text:style-name="Code (in text)">ComponentData</text:span> property to transport document specific information. <text:span text:style-name="Code (in text)">ComponentData</text:span> is specified to be an <text:span text:style-name="Code (in text)">any</text:span>, therefore it can be a sequence of property values by itself. If you do use it. make an appropriate specification available to users of your component.</text:p>
  <table:table table:name="Tabelle2" table:style-name="Tabelle2">
   <table:table-column table:style-name="Tabelle2.A"/>
   <table:table-column table:style-name="Tabelle2.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle2.A1" table:number-columns-spanned="2" table:value-type="string">
      <text:p text:style-name="TableHead">Properties of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.MediaDescriptor]</text:span></text:p>
     </table:table-cell>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:AsTemplate]</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">boolean. Setting <text:span text:style-name="Code (in text)">AsTemplate</text:span> to true creates a new untitled document out of the loaded document, even if it has no template extension.</text:p>
     <text:p text:style-name="TextInTable">Loading a template, that is, a document with a template extension, creates a new untitled document by default, but setting the <text:span text:style-name="Code (in text)">AsTemplate</text:span> property to false loads a template for editing.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:Author]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Only for storing versions in components supporting versioning: author of version.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:CharacterSet]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Defines the character set for document formats that contain single byte characters, if necessary. Which character set names are valid depends on the filter implementation, but with the current filters you can employ the character sets used for the conversion of byte to unicode strings.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:Comment]</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Only for storing versions in components supporting versioning: comment (description) for stored version.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:ComponentData]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">any. This is a parameter that is used for any properties specific for a special office component type.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:FileName]</text:span> - deprecated</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Same as URL (added for<text:span text:style-name="T2"> compatibility </text:span>reasons)</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:FilterData]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">any. This is a parameter that is used for any properties specific for a special filter type.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:FilterName]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Name of a filter that should be used for loading or storing the component. Names must match the names of the typedetection configuration.Invalid names are ignored. If a name is specified on loading, it will be verified by a filter detection, but in case of doubt it will be preferred.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:FilterFlags]</text:span> - deprecated</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. For compatibility reasons: same as FilterOptions</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:FilterOptions]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Some filters need additional parameters. Use only together with property FilterName. Details must be documented by the filter. This is an old format for some filters. If a string is not enough, filters can use the property FilterData.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:Hidden]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">boolean. Defines if the loaded component is made visible. If this property is not specified, the component is made visible by default. Making a hidden component visible by calling <text:span text:style-name="Code (in text)">setVisible()</text:span> at the container window is not recommended at this time.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:InputStream]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">com.sun.star.io.XInputStream. Used when loading a document. Reading must be done using this stream. If no stream is provided, the loader creates a stream by itself using the UR<text:span text:style-name="T7">L, version number, readonly flag, password, or anything requiredfor stream creation, given in the media descriptor.</text:span> </text:p>
     <text:p text:style-name="TextInTable">The model becomes the final owner of the stream and usually holds the reference to lock the file. Therefore, it is not allowed to keep a reference to this <text:span text:style-name="Code (in text)">InputStream</text:span> after loading the component.It is useless, because an InputStream is only usable once for reading. Even if it implements the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.io.XSeekable]</text:span> interface, do not interfere with the model&apos;s reading process. Consider all the objects involved in the loading process as temporary.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:InteractionHandler]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">com.sun.star.task.XInteractionHandler. Object implementing the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.task.InteractionHandler]</text:span> service that handles exceptional situations where proceeding with the task is impossible without additional information or impossible at all.</text:p>
     <text:p text:style-name="TextInTable">[PRODUCTNAME] provides a default implementation that can handle many situations. If no InteractionHandler is set, a suitable exception is thrown.</text:p>
     <text:p text:style-name="TextInTable">It is not allowed to keep a reference to this object, not even in the loaded or stored components&apos; copy of the MediaDescriptor provided by its arguments attribute.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:JumpMark]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Jump to a marked position after l<text:span text:style-name="T7">oading. The office document loaders expect simple strings used like targets in HTML documents.Do not use a leading </text:span><text:span text:style-name="T8"># character. The meaning of a jump mark depends upon the filter, but in Writer, bookmarks can be used, whereas in Calc cells, cell ranges and named areas are supported.</text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:MediaType]</text:span> (string)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Type of the medium to load that must match to one of the types defined in the typedetection configuration, otherwise it is ignored. T<text:span text:style-name="T3">he typedetection configuration is found in the </text:span><text:span text:style-name="T9">TypeDetection.xml </text:span><text:span text:style-name="T3">file in the </text:span><text:span text:style-name="T9">config/registry/instance/org/openoffice/Office</text:span><text:span text:style-name="T3"> folders of the user or share tree. The MediaType is found in the &quot;type&quot; entries. Here, it is the second member of the &quot;data&quot; value. This parameter bypa</text:span>sses the type detection of the desktop environment, so that passing a wrong MediaType causes load failures.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:OpenFlags]</text:span> - deprecated</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. For compatibility reasons: string that summarizes some flags for loading. The string contains capital letters for the flags:</text:p>
     <text:p text:style-name="TextInTable">&quot;ReadOnly&quot; - &quot;R&quot;<text:line-break/> &quot;Preview&quot; - &quot;B&quot;<text:line-break/> &quot;AsTemplate&quot; - &quot;T&quot;<text:line-break/> &quot;Hidden&quot; - &quot;H&quot;</text:p>
     <text:p text:style-name="TextInTable">Use the corresponding boolean parameters instead.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:OpenNewView]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">boolean. Affects the behavior of the component loader when a resource is already loaded. If true, the loader tries to open a new view for a document already loaded. For components supporting multiple views, a second window is opened as if the user clicked <text:span text:style-name="Buttons/Menus">Window – New Window.</text:span>Other components are loaded one more time. Without this property, the default behavior of the loader applies, for example, the loader of the desktop activates a document if the user tries to load it a second time.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:Overwrite]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">boolean. For storing only: overwrite existing files with the same name, default is true, so an <text:span text:style-name="Code (in text)">[IDL:com.sun.star.io.IOException]</text:span> occurs if the target file already exists. If the default is changed and the file exists, the UCB throws an exception. If the file is loaded through API, this exception is transported to the caller or handled by an interaction handler. </text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:Password]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. A password for loading or storing a component, if necessary. If no password is specified, loading of a password protected document fails, storing is done without encryption.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:PostData]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">reference &lt;XinputStream&gt;. HTTP post data to send to a location described by the media descriptor to get a result that is loaded as a component, usually in webforms. Default is: no PostData.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:PostString]</text:span> - deprecated</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Same as PostData, but the data is transferred as a string (just for compatibility).</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:Preview]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">boolean. Setting this to true tells the loaded component that it is loaded as a preview, so that it can optimize loading and viewing for this special purpose. Default is false.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:ReadOnly]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">boolean. Tells<text:span text:style-name="T2"> if </text:span>a document is to be loaded in a (logical) readonly or in read/write mode. If opening in the desired mode is impossible, an error<text:span text:style-name="T2"> occurs. </text:span>By default, the loaded content decides what to do. If its UCB content supports a &quot;readonly&quot; property, the logical open mode depends on that property, otherwise it is read/write.</text:p>
     <text:p text:style-name="TextInTable">This property only affects the UI. Opening a document in read only mode does not prevent the component from being modified by API calls, but all modifying functionality in the UI is disabled or removed.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:Referer]</text:span></text:p>
     <text:p text:style-name="TextInTable">(the wrong spelling is kept for compatibility reasons)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. A URL describing the environment of the request; for example,. a<text:span text:style-name="T2"> referrer </text:span>may be the URL of a document, if a hyperlink inside this document is clicked to load another document. The<text:span text:style-name="T2"> referrer </text:span>may be evaluated by the addressed UCB content or the loaded document.</text:p>
     <text:p text:style-name="TextInTable">Without a referrer, the processing of URLs that require security checks is denied, for instance <text:span text:style-name="Code (in text)">macro:</text:span> URLs.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:StatusIndicator]</text:span><text:line-break/> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.task.XStatusIndicator]</text:span>. Object implementing the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.task.XStatusIndicator]</text:span> interface that gives status information, such as text or progress, for the target frame.</text:p>
     <text:p text:style-name="TextInTable">[PRODUCTNAME] provides a default implementation that is retrieved by calling <text:span text:style-name="Code (in text)">createStatusIndicator()</text:span> at the frame you load a component into. Usually you do not need this parameter if you do not want to use any other indicator than the one in the status bar of the document window. It is not allowed to keep a reference to this object, not even in the loaded or stored component&apos;s copy of the MediaDescriptor provided by its <text:span text:style-name="Code (in text)">getArgs()</text:span> method.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:TemplateName]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. The logical name of a template to load. Together with the TemplateRegionName property this is used instead of the URL of the template. <text:span text:style-name="T3">The logical names are the template names you see in the templates dialog. </text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:TemplateRegionName]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. See TemplateName.<text:span text:style-name="T3"> The template region names are the folder names you see in the templates dialog. </text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:Unpacked]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">boolean. For storing: Setting this to true means that a zip file is not used to save the document. Use a folder instead for UCB contents that <text:span text:style-name="T3">support folders, such as file, WebDAV, and ftp.</text:span> Default is false.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:URL]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. The location of the component in URL syntax.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:Version]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">short. For components supporting versioning: the number of the version to be loaded or saved. Default is zero and means that no version is created or loaded, and the main document is processed.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:ViewData]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">any. Data to set a special view state after loading. The type depends on the component and is retrieved from a controller object by its <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XViewDataSupplier]</text:span> interface. Default is: no ViewData.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:ViewId]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">short. For components supporting different views: a number to define the view that should be constructed after loading. Default is: zero, and this should be treated by the component as the default view.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:MacroExecutionMode]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">short. How should the macro be executed - the value should be one from <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.MacroExecMode]</text:span> constants group</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.document.MediaDescriptor:UpdateDocMode]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle2.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">short. Can the document be updated depending on links. The value should be one from <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.UpdateDocMode]</text:span> constant group </text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">The media descriptor used for loading and storing components is passed as an in/out parameter to some objects that participate in the loading or storing process, that is, the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.TypeDetection]</text:span> service or a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.ExtendedTypeDetection]</text:span> service. These objects add additional information they have gathered to the media descriptor, so that other objects called later do not have to reinvestigate this. </text:p>
  <text:p text:style-name="Paragraph">The first object that gets the media descriptor might need an input stream, but assume that there is currently none. The object creates one and uses it. If the stream happens to be seekable (usually it is), the object puts the stream into the media descriptor, so that it passes it to other objects that need the stream as well. They do not have to create it again. It is important for streams created for a remote resource, such as http contents. </text:p>
  <text:p text:style-name="Paragraph">If the stream, provided from the outside or created by the first consumer, is not seekable, every consumer creates one. It creates a buffering stream component that reads in the original stream and provides a seekable stream for all further consumers. This buffered stream can be put into the media descriptor.</text:p>
  <text:p text:style-name="Paragraph">As previously mentioned, the easiest way to load a document is to call <text:span text:style-name="Code (in text)">loadComponentFromURL()</text:span> at the desktop service, but any other object could implement this interface. </text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark44271916" text:key1="Documents" text:key2="loading"/>URL Parameter<text:alphabetical-index-mark-end text:id="IMark44271916"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.util.URLTransformer]The URL is part of the media descriptor and also an explicit parameter for <text:span text:style-name="Code (in text)">loadComponentFromURL()</text:span>. This enables script code to load a document without creating a media descriptor at the cost of code redundancy. The URL parameter of <text:span text:style-name="Code (in text)">loadComponentFromURL()</text:span> overrides a possible URL property passed in the media descriptor. Aside from valid URLs that describe an existing file, the following URLs are used to open viewable components in [PRODUCTNAME]:</text:p>
  <table:table table:name="Tabelle38" table:style-name="Tabelle38">
   <table:table-column table:style-name="Tabelle38.A"/>
   <table:table-column table:style-name="Tabelle38.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle38.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Component</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle38.B1" table:value-type="string">
      <text:p text:style-name="TableHead">URL</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle38.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Writer</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle38.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">private:factory/swriter</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle38.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Calc</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle38.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">private:factory/scalc</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle38.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Draw</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle38.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">private:factory/sdraw</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle38.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Impress</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle38.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">private:factory/simpress</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle38.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Database</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle38.B2" table:value-type="string">
     <text:p text:style-name="P6">.component:DB/QueryDesign<text:line-break/>.component:DB/TableDesign<text:line-break/>.component:DB/RelationDesign<text:line-break/>.component:DB/DataSourceBrowser<text:line-break/>.component:DB/FormGridView</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle38.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Bibliography</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle38.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">.component:Bibliography/View1 </text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="target frame" text:key1="Documents" text:key2="loading"/>Target Frame</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.FrameSearchFlag]The URL and media descriptor <text:span text:style-name="Code (in text)">loadComponentFromURL()</text:span> have two additional arguments, the target frame name and search flags. The method <text:span text:style-name="Code (in text)">loadComponentFromURL()</text:span> looks for a frame in the frame hierarchy and loads the component into the frame it finds. It uses the same algorithm as <text:span text:style-name="Code (in text)">findFrame()</text:span> at the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrame]</text:span> interface, described in section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.UsingCompFramework.Frames.XFrame.Hierarchies]</text:span>. </text:p>
  <text:p text:style-name="Paragraph">The target frame name is a reserved name starting with an underscore or arbitrary name. The reserved names denote frequently used frames in the frame hierarchy or special functions, whereas an arbitrary name is searched recursively. If a reserved name is used, the search flags are ignored and set to <text:span text:style-name="Code (in text)">0</text:span>. The following reserved names are supported:</text:p>
  <text:p text:style-name="TitledListHead"><text:alphabetical-index-mark-start text:id="IMark44271916"/>_self<text:alphabetical-index-mark-end text:id="IMark44271916"/> </text:p>
  <text:p text:style-name="TitledListBody">Returns the frame itself. The same as with an empty target frame name. This means to search for a frame you already have, but it is legal. </text:p>
  <text:p text:style-name="TitledListHead"><text:alphabetical-index-mark-start text:id="IMark43875748"/>_top<text:alphabetical-index-mark-end text:id="IMark43875748"/> </text:p>
  <text:p text:style-name="TitledListBody">Returns the top frame of the called frame .,The first frame where <text:span text:style-name="Code (in text)">isTop()</text:span> returns true when<text:span text:style-name="T2"> traveling </text:span>up the hierarchy. If the starting frame does not have a parent frame, the call is treated as a search for <text:span text:style-name="Code (in text)">&quot;_self&quot;</text:span>. This<text:span text:style-name="T2"> behavior </text:span>is compatible to the frame<text:span text:style-name="T2"> targeting </text:span>in a web browser.</text:p>
  <text:p text:style-name="TitledListHead"><text:alphabetical-index-mark-start text:id="IMark43875748"/>_parent<text:alphabetical-index-mark-end text:id="IMark43875748"/> </text:p>
  <text:p text:style-name="TitledListBody">Returns the next frame above in the frame hierarchy. If the starting frame does not have a parent frame, the call is treated as a search for <text:span text:style-name="Code (in text)">&quot;_self&quot;</text:span>. This<text:span text:style-name="T2"> behavior </text:span>is compatible to the frame<text:span text:style-name="T2"> targeting </text:span>in a web browser.</text:p>
  <text:p text:style-name="TitledListHead"><text:alphabetical-index-mark-start text:id="IMark44271916"/>_blank<text:alphabetical-index-mark-end text:id="IMark44271916"/> </text:p>
  <text:p text:style-name="TitledListBody">Creates a new top-level frame as a child frame of the desktop. If the called frame is not part of the desktop hierarchy, this call fails. Using the &quot;<text:span text:style-name="Code (in text)">_blank&quot;</text:span> target loads open documents again that result in a read-only document, depending on the UCB content provider for the component. If loading is done as a result of a user action, this becomes confusing to theusers, therefore the &quot;<text:span text:style-name="Code (in text)">_default&quot;</text:span> target is recommended in calls from a user interface, instead of &quot;<text:span text:style-name="Code (in text)">_blank&quot;.</text:span> Refer to the next section for a discussion about the _default target..</text:p>
  <text:p text:style-name="TitledListHead"><text:alphabetical-index-mark-start text:id="IMark43875748"/>_default<text:alphabetical-index-mark-end text:id="IMark43875748"/> </text:p>
  <text:p text:style-name="TitledListBody">Similar to <text:span text:style-name="Code (in text)">&quot;_blank&quot;</text:span>, but the implementation defines further behavior that has to be documented by the implementer. The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XComponentLoader]</text:span> implemented at the desktop object shows the following default behavior.</text:p>
  <text:p text:style-name="TitledListBody">First, it checks<text:span text:style-name="T2"> if </text:span>the component to load is already loaded in another top-level frame. If this is the case, the frame is activated and brought to the foreground. When the <text:span text:style-name="Code (in text)">OpenNewView</text:span> property is set to true in the media descriptor, the loader creates a second controller to show another view for the loaded document. For components supporting this, a second window is opened as if the user clicked <text:span text:style-name="Buttons/Menus">Window – New Window.</text:span> The other components are loaded one more time, as if the <text:span text:style-name="Code (in text)">&quot;_blank&quot;</text:span> target had been used. Currently, almost all office components implementing <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XModel]</text:span> have multiple controllers, except for HTML and writer documents in the online view. The database and bibliography components have no model, therefore they cannot open a second view at all and <text:span text:style-name="Code (in text)">OpenNewView</text:span> leads to an exception with them.</text:p>
  <text:p text:style-name="TitledListBody">Next, the loader checks if the active frame contains an unmodified, empty document of the same document type as the component that is being loaded. If so, the component is loaded into that frame, replacing the empty document, otherwise a new top-level frame is created similar to a call with <text:span text:style-name="Code (in text)">&quot;_blank&quot;</text:span>.</text:p>
  <text:p text:style-name="Paragraph">Names starting with an underscore must not be used as real names for a frame. </text:p>
  <text:p text:style-name="Paragraph">If the given frame name is an arbitrary string, the loader searches for this frame in the frame hierarchy. The search is done in the following order: self, children, siblings, parent, create if not found. Each of these search steps can be skipped by deleting it from the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FrameSearchFlag]</text:span> bit vector:</text:p>
  <table:table table:name="Tabelle51" table:style-name="Tabelle51">
   <table:table-column table:style-name="Tabelle51.A"/>
   <table:table-column table:style-name="Tabelle51.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle51.A1" table:number-columns-spanned="2" table:value-type="string">
      <text:p text:style-name="TableHead">Constants in <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FrameSearchFlag]</text:span> group</text:p>
     </table:table-cell>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle51.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">SELF</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle51.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">search current frame</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle51.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">CHILDREN</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle51.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">search children recursively</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle51.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">SIBLINGS</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle51.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">search frames on the same level</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle51.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">PARENT</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle51.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">search frame above the current frame in the hierarchy</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle51.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">CREATE</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle51.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">create new frame if not found</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle51.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">TASKS</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle51.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">do not stop searching when a top frame is reached, but continue with other top frames</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle51.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">ALL</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle51.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">search the frame hierarchy below the current top frame, do not create new frame: SELF | CHILDREN | SIBLINGS | PARENT</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle51.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">GLOBAL</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle51.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">search all frames, do not create new frame: SELF | CHILDREN | SIBLINGS | PARENT | TASKS</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">A typical case for a named frame is a situation where a frame is needed to be reused for subsequent loading of components, for example, a frame attached to a preview window or a docked frame, such as the frame in [PRODUCTNAME] that opens the address book when the <text:span text:style-name="Buttons/Menus">F4</text:span> key is pressed.</text:p>
  <text:p text:style-name="Paragraph">The frame names <text:span text:style-name="Code (in text)">&quot;_self&quot;</text:span>, <text:span text:style-name="Code (in text)">&quot;_top&quot; </text:span>and <text:span text:style-name="Code (in text)">&quot;_parent&quot;</text:span> define a frame target relative to a starting frame. They can only be used if the component loader interface finds the frame and the <text:span text:style-name="Code (in text)">setComponent()</text:span> can be used with the frame. The desktop frame is the root, therefore it does not have a top and parent frame. The component loader of the desktop cannot use these names, because the desktop refuses to have a component set into it.. However, if a frame implemented <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XComponentLoader]</text:span>, these names could be used. </text:p>
  <table:table table:name="Tabelle37" table:style-name="Tabelle37">
   <table:table-column table:style-name="Tabelle37.A"/>
   <table:table-column table:style-name="Tabelle37.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle37.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note6" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="57" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle37.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">[PRODUCTNAME] [OO1.1] will have a frame implementation that supports <text:span text:style-name="Code (in text)">XComponentLoader</text:span>. </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The reserved frame names are also used as a targeting mechanism in the dispatch framework with regard to as far as the relative frame names being resolved. For additional information, see chapter <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.UsingDispatch]</text:span>.</text:p>
  <text:p text:style-name="Paragraph">The example below creates a frame, and uses the target frame and search flag parameters of <text:span text:style-name="Code (in text)">loadComponentFromURL()</text:span> to <text:alphabetical-index-mark text:string-value="loading [example]" text:key1="Documents"/>load a document into it. [SOURCE:OfficeDev/DesktopEnvironment/FunctionHelper.java]</text:p>
  <text:p text:style-name="Code"><text:s/>// Conditions: sURL = &quot;private:factory/swriter&quot;<text:line-break/> // <text:s text:c="12"/>xSMGR = m_xServiceManager<text:line-break/> // <text:s text:c="12"/>xFrame = reference to a frame</text:p>
  <text:p text:style-name="Code"><text:s/>// <text:s text:c="12"/>lProperties[] = new com.sun.star.beans.PropertyValue[0]</text:p>
  <text:p text:style-name="Code"><text:line-break/> // First prepare frame for loading.<text:line-break/> // We must adress it inside the frame tree without any complications.<text:line-break/> // To do so we set an unambiguous name and use it later.<text:line-break/> // Don&apos;t forget to reset the name to the original name after that.</text:p>
  <text:p text:style-name="Code"><text:line-break/> String sOldName = xFrame.getName();<text:line-break/> String sTarget <text:s/>= &quot;odk_officedev_desk&quot;;<text:line-break/> xFrame.setName(sTarget);<text:line-break/> <text:line-break/> // Get access to the global component loader of the office<text:line-break/> // for synchronous loading of documents.<text:line-break/> com.sun.star.frame.XComponentLoader xLoader =<text:line-break/> <text:s/>(com.sun.star.frame.XComponentLoader)UnoRuntime.queryInterface(<text:line-break/> <text:s text:c="2"/>com.sun.star.frame.XComponentLoader.class,<text:line-break/> <text:s text:c="2"/>xSMGR.createInstance(&quot;com.sun.star.frame.Desktop&quot;));<text:line-break/> <text:line-break/> // Load the document into the target frame by using our unambigous name<text:line-break/> // and special search flags.<text:line-break/> xDocument = xLoader.loadComponentFromURL(<text:line-break/> <text:s/>sURL, sTarget, com.sun.star.frame.FrameSearchFlag.CHILDREN, lProperties);<text:line-break/> <text:line-break/> // dont forget to restore old frame name ...<text:line-break/> xFrame.setName(sOldName);</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">loadComponentFromURL()</text:span> call returns a reference to a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XComponent]</text:span> interface. The object belonging to this interface depends on the loaded component. If it is a component that only provides a component window, but not a controller, the returned component is this window. If it is an office component that provides a controller, the returned component is the controller or its model, if these is one. All Writer, Calc, Draw, Impress or Math documents in [PRODUCTNAME] support a model, therefore the <text:span text:style-name="Code (in text)">loadComponentFromURL()</text:span> call returns it. The database and bibliography components however, return a controller, because they do not have a model.</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="closing" text:key1="Documents"/>Closing Documents</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.lang.XComponent;com.sun.star.util.XCloseable;com.sun.star.util.XCloseListener]The <text:span text:style-name="Code (in text)">loadComponentFromURL()</text:span> returns a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XComponent]</text:span> interface has previously been discussed. The return value is a reference to a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XComponent]</text:span> interface, the corresponding object is a disposable component, and the caller must take care of lifetime problems. An <text:span text:style-name="Code (in text)">XComponent</text:span> supports the following methods:</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">dispose</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">addEventListener</text:span> ( [in] com::sun::star::lang::XEventListener xListener)</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">removeEventListener</text:span> ( [in] com::sun::star::lang::XEventListener aListener)</text:p>
  <text:p text:style-name="Paragraph">In principle, there is a simple rule. The documentation of a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XComponent]</text:span> specifies the objects that can own a component. Normally, a client using an <text:span text:style-name="Code (in text)">XComponent</text:span> is the owner of the <text:span text:style-name="Code (in text)">XComponent</text:span> and has the responsibility to dispose of it or it is not the owner. If it is not the owner, it may add itself as a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XEventListener]</text:span> at the <text:span text:style-name="Code (in text)">XComponent</text:span> and not call <text:span text:style-name="Code (in text)">dispose()</text:span> on it. This type of <text:span text:style-name="Code (in text)">XEventListener</text:span> supports one method in which a component reacts upon the fact that another component is about to be disposed of:</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">disposing</text:span> ( [in] com::sun::star::lang::EventObject Source )</text:p>
  <text:p text:style-name="Paragraph">However, the frame, controller and model are interwoven tightly, and situations do occur in which there are several owners, for example, if there is more than one view for one model, or one of these components is in use and cannot be disposed of, for example, while a print job is running or a modal dialog is open. Therefore, developers must cope with these situations and remember a few things concerning the deletion of components. </text:p>
  <text:p text:style-name="Paragraph">Closing a document has two aspects. It is possible that someone else wants to close a document being currently worked on And you may want to close a component someone else is using at the same time. Both aspects are discussed in the following sections. A code example that closes a document is provided at the end of this section.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Reacting Upon Closing</text:h>
  <text:p text:style-name="Paragraph">The first aspect is that someone else wants to close a component for which you hold a reference. In the current version of [PRODUCTNAME], there are three possibilities. </text:p>
  <text:unordered-list text:style-name="L4">
   <text:list-item>
    <text:p text:style-name="P7">If the component is used briefly as a stack variable, you do not care about the component after loading, or you are sure there will be no interference, it is justifiable to load the component without taking further measures. If the user is going to close the component, let the reference go out of scope, or release the reference when no longer required.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P7">If a reference is used, but it is not necessary to react when it becomes invalid and the object supports <text:span text:style-name="Code (in text)">[IDL:com.sun.star.uno.XWeak]</text:span>, you can hold a weak reference instead of a hard reference. Weak references are automatically converted to <text:span text:style-name="Code (in text)">null</text:span> if the object they reference is going to be disposed. Because the generic frame implementation, and also the controllers and models of all standard document types implement XWeak, it is recommended to use it when possible. </text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P7">If a hard reference is held or you want to know that the component has been closed and the new situation has to be accommodated, add a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XEventListener]</text:span> at the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XComponent]</text:span> interface. In this case, release the reference on a <text:span text:style-name="Code (in text)">disposing()</text:span> notification.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="P8"><text:span text:style-name="T3">Sometimes it is necessary to exercise more control over the closing process, therefore a new, optional interface </text:span><text:span text:style-name="T4">[IDL:com.sun.star.util.XCloseable]</text:span><text:span text:style-name="T3"> has been introduced whichis supported in versions beyond 641. If the object you are referencing is a </text:span><text:span text:style-name="T4">[IDL:com.sun.star.util.XCloseable]</text:span><text:span text:style-name="T3">, register it as a </text:span><text:span text:style-name="T4">[IDL:com.sun.star.util.XCloseListener]</text:span><text:span text:style-name="T3"> and throw a </text:span><text:span text:style-name="T4">[IDL:com.sun.star.util.CloseVetoException]</text:span><text:span text:style-name="T3"> when prompted to close. Since </text:span><text:span text:style-name="T10">XCloseable</text:span><text:span text:style-name="T11"> is specified </text:span><text:span text:style-name="T3">as an optional interface for frames and models, do not assume that this interface is supported. It is possible that the code runs with a [PRODUCTNAME] version where frames and models do not implement </text:span><text:span text:style-name="T10">XCloseable</text:span><text:span text:style-name="T11">. Therefore </text:span><text:span text:style-name="T3">,be prepared for the case when you receive null when you try to query </text:span><text:span text:style-name="T10">XCloseable</text:span><text:span text:style-name="T11">. The </text:span><text:span text:style-name="T10">XCloseable</text:span><text:span text:style-name="T11"> interface is described in more detail below.</text:span></text:p>
  <text:h text:style-name="Head 5" text:level="5">How to Trigger Closing</text:h>
  <text:p text:style-name="Paragraph">The second aspect – to close a view of a component or the entire viewable component <text:span text:style-name="Emphasis">yourself</text:span> – is more complex. The necessary steps depend on how you want to treat modified documents. Besides you have to prepare for the new <text:span text:style-name="T10">[IDL:com.sun.star.util.XCloseable]</text:span> interface, which will be implemented in future versions of [PRODUCTNAME].</text:p>
  <table:table table:name="Tabelle59" table:style-name="Tabelle59">
   <table:table-column table:style-name="Tabelle59.A"/>
   <table:table-column table:style-name="Tabelle59.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle59.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important2" text:anchor-type="paragraph" svg:x="0.12cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="58" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle59.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">Although <text:span text:style-name="Code (in text)">XCloseable</text:span> is not supported in the current version of [PRODUCTNAME], you already have to check for this interface to write compatible code. Not checking for <text:span text:style-name="Code (in text)">XCloseable</text:span> will be illegal in future versions. If a component supports this interface, you must not use any closing procedure other than calling <text:span text:style-name="Code (in text)">close()</text:span> at that interface.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The following three diagrams show the decisions to be made when closing a frame or a document model. The important points are: if you expect modifications, you must either handle them using <text:span text:style-name="T12">[IDL:com.sun.star.util.XModifiable]</text:span><text:span text:style-name="T13"> and </text:span><text:span text:style-name="T12">[IDL:com.sun.star.frame.XStorable],</text:span><text:span text:style-name="T13"> or let the user do the necessary interaction by calling </text:span><text:span text:style-name="T12">suspend()</text:span> on the controller. In any case, check if the frame or model is an <text:span text:style-name="Code (in text)">XCloseable</text:span> and prefer <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XCloseable:close]()</text:span> over a call to <text:span text:style-name="Code (in text)">dispose()</text:span>. The first two diagrams illustrate the separate closing process for frames and models, the third diagram covers the actual termination of frames and models.</text:p>
  <table:table table:name="Table9" table:style-name="Table9">
   <table:table-column table:style-name="Table9.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table9.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr6" draw:name="Frame2" text:anchor-type="paragraph" svg:y="0cm" svg:width="14.503cm" fo:min-height="11.876cm" draw:z-index="63">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr3" draw:name="Flow chart of closing a frame" text:anchor-type="paragraph" svg:x="0cm" svg:y="-3.87cm" svg:width="14.34cm" svg:height="11.31cm" draw:z-index="64" xlink:href="ClosingFrame.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Flow chart of closing a frame</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration11" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.12</text:sequence>: Closing a Frame</text:p>
       </draw:text-box></text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <table:table table:name="Tabelle52" table:style-name="Tabelle52">
   <table:table-column table:style-name="Tabelle52.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle52.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr6" draw:name="Rahmen14" text:anchor-type="paragraph" svg:y="0cm" svg:width="13.665cm" fo:min-height="9.599cm" draw:z-index="29">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr3" draw:name="Flow chart of closing a Model" text:anchor-type="paragraph" svg:x="0cm" svg:y="-3.87cm" svg:width="13.501cm" svg:height="9.1cm" draw:z-index="30" xlink:href="ClosingModel.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Flow chart of closing a Model</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration12" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.13</text:sequence>: Closing a Model</text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Text body"/>
  <table:table table:name="Tabelle18" table:style-name="Tabelle18">
   <table:table-column table:style-name="Tabelle18.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle18.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr6" draw:name="Frame3" text:anchor-type="paragraph" svg:y="0cm" svg:width="13.127cm" fo:min-height="4.733cm" draw:z-index="65">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr3" draw:name="Flow chart of terminating a Frame or Model" text:anchor-type="paragraph" svg:x="0cm" svg:y="-3.87cm" svg:width="12.95cm" svg:height="4.17cm" draw:z-index="66" xlink:href="TerminateFrameModel.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Flow chart of terminating a Frame or Model</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration13" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.14</text:sequence>: Terminate Frame/Model</text:p>
       </draw:text-box></text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5">XCloseable</text:h>
  <text:p text:style-name="Paragraph">The dispose mechanism has shortcomings in complex situations, such as the frame-controller-model interaction. The dispose call cannot be rejected, but as shown above, sometimes it <text:span text:style-name="Emphasis">is</text:span> necessary to prevent destruction of objects due to shared ownership or a state of the documents that forbids destruction. </text:p>
  <text:p text:style-name="Paragraph">A closing mechanism is required that enables all involved objects to negotiate if deletion is possible and to veto, if necessary. By offering the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XCloseable],</text:span> a component tells it must be destroyed by calling <text:span text:style-name="Code (in text)">close().</text:span> Calling <text:span text:style-name="Code (in text)">dispose()</text:span> on an <text:span text:style-name="Code (in text)">XCloseable</text:span> might lead to deadlocks or crash the entire application.</text:p>
  <text:p text:style-name="Paragraph">In [PRODUCTNAME], model or frame objects are possible candidates for implementing the interface <text:span text:style-name="Code (in text)">XCloseable</text:span>, therefore query for that interface before destroying the object. Call <text:span text:style-name="Code (in text)">dispose()</text:span> directly if the model or frame does not support the interface, thus declaring that it handles all the problems.</text:p>
  <text:p text:style-name="Paragraph">An object implementing <text:span text:style-name="Code (in text)">XCloseable</text:span> registers close listeners. When a close request is received, all listeners are asked for permission. If a listener wants to deprecate, it throws an exception derived from <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.CloseVetoException]</text:span> containing the reason why the component can not be closed. This exception is passed to the close requester. The <text:span text:style-name="Code (in text)">XCloseable</text:span> itself can veto the destruction by throwing an exception. If there is no veto, the <text:span text:style-name="Code (in text)">XCloseable</text:span> calls <text:span text:style-name="Code (in text)">dispose()</text:span> on itself and returns.</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">XCloseable</text:span> handles problems that occur if a component rejects destruction. A script programmer usually can not cope with a component not used anymore and refuses to be destroyed. Ensure that the component is destroyed to avoid a memory leak. The <text:span text:style-name="Code (in text)">close()</text:span> method offers a method to pass the responsibility to close the object to any possible close listener that vetoes closing or to the <text:span text:style-name="Code (in text)">XCloseable</text:span> if the initial caller is not able to stay in memory to try again later. This responsibility is referred to as <text:span text:style-name="Emphasis">delivered ownership</text:span>. The mechanism sets some constraints on the possible reasons for an objection against a close request.</text:p>
  <text:p text:style-name="Paragraph">A close listener that is asked for permission can object for any reason if the close call does not force it to assume ownership of the closeable object.The close requester is aware of a possible failure. If the close call forces the ownership, the close listener must be careful. An objection is only allowed if the reason is temporary. As soon as the reason no longer exists, the owner automatically calls close on the object that should be closed, now being in the same situation as the initial close requester.</text:p>
  <text:p text:style-name="P8">A permanent reason for objection is not allowed. For example,. the document is modified is not a valid reason to object, because it is unlikely that the document becomes unmodified by itself. Consequently, it could never be closed. Therefore, if an API programmer wants to avoid data loss, he must use the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XModifiable]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XStorable]</text:span> interfaces of the document. The fact that a model refuses to be closed if it is modified is not dependable. </text:p>
  <text:p text:style-name="Paragraph">The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XCloseable]</text:span> inherits from <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XCloseBroadcaster]</text:span> and has the following methods:</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">addCloseListener</text:span> ( [in] com::sun::star::util::XCloseListener Listener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">removeCloseListener</text:span> ( [in] com::sun::star::util::XCloseListener Listener ); </text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">close</text:span> ( [in] boolean DeliverOwnership ) </text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XCloseListener]</text:span> is notified twice when <text:span text:style-name="Code (in text)">close()</text:span> is called on an <text:span text:style-name="Code (in text)">XClosable</text:span> :</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">queryClosing</text:span> ( [in] com::sun::star::lang::EventObject Source, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="19"/>[in] boolean GetsOwnership ) </text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">notifyClosing</text:span> ( [in] com::sun::star::lang::EventObject Source )</text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="Paragraph">Both <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XCloseable:close]()</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XCloseListener:queryClosing]()</text:span> throw a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.CloseVetoException]</text:span>.</text:p>
  <text:p text:style-name="Paragraph">In the closing negotiations, an <text:span text:style-name="Code (in text)">XClosable</text:span> is asked to close itself. In the call to <text:span text:style-name="Code (in text)">close(),</text:span> the caller passes a boolean parameter <text:span text:style-name="Code (in text)">DeliverOwnership</text:span> to tell the <text:span text:style-name="Code (in text)">XClosable</text:span> that it will give up ownership in favor of an <text:span text:style-name="Code (in text)">XCloseListener,</text:span> or the <text:span text:style-name="Code (in text)">XCloseable</text:span> that might have to finish a job first, but will close the <text:span text:style-name="Code (in text)">XClosable</text:span> immediately when the job is completed.</text:p>
  <text:p text:style-name="Paragraph">After a call to <text:span text:style-name="Code (in text)">close()</text:span>, the <text:span text:style-name="Code (in text)">XClosable</text:span> notifies its listeners twice. First, it checks if itcan be closed. If not, it throws a CloseVetoException, otherwise it uses <text:span text:style-name="Code (in text)">queryClosing()</text:span> to see if a listener has any objections against closing. The value of <text:span text:style-name="Code (in text)">DeliverOwnership</text:span> is conveyed in the <text:span text:style-name="Code (in text)">GetsOwnership</text:span> parameter of <text:span text:style-name="Code (in text)">queryClosing()</text:span>. If no listener disapproves of closing, the <text:span text:style-name="Code (in text)">XClosable</text:span> exercises <text:span text:style-name="Code (in text)">notifyClosing()</text:span> on the listeners and disposes itself. The result of a call to <text:span text:style-name="Code (in text)">close()</text:span> on a <text:span text:style-name="Emphasis">model</text:span> is that all frames, controllers and the model itself are destroyed. The result of a call to <text:span text:style-name="Code (in text)">close()</text:span> on a <text:span text:style-name="Emphasis">frame</text:span> is that this frame is closed, but the model stays alive if there are other controllers.</text:p>
  <text:p text:style-name="Paragraph">If an <text:span text:style-name="Code (in text)">XCloseListener</text:span> does not agree on closing, it throws a <text:span text:style-name="Code (in text)">CloseVetoException</text:span>, and the <text:span text:style-name="Code (in text)">XClosable</text:span> lets the exception pass in <text:span text:style-name="Code (in text)">close()</text:span>, so that the caller receives the exception. The <text:span text:style-name="Code (in text)">CloseVetoException</text:span> tells the caller that closing failed. If the caller delegated its ownership in the call to <text:span text:style-name="Code (in text)">close()</text:span> by setting the <text:span text:style-name="Code (in text)">DeliverOwnership</text:span> parameter to true, an <text:span text:style-name="Code (in text)">XCloseListener</text:span> knows that it automatically assumes ownership by throwing a <text:span text:style-name="Code (in text)">CloseVetoException.</text:span>The caller knows that someone else is now the owner if it receives a <text:span text:style-name="Code (in text)">CloseVetoException</text:span>. The new owner is compelled to close the <text:span text:style-name="Code (in text)">XClosable</text:span> as soon as possible. If the <text:span text:style-name="Code (in text)">XCloseable</text:span> was the object that threw an exception, it is compelled also to close itself as soon as possible.</text:p>
  <table:table table:name="Tabelle53" table:style-name="Tabelle53">
   <table:table-column table:style-name="Tabelle53.A"/>
   <table:table-column table:style-name="Tabelle53.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle53.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note7" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="31" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle53.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">No API exists for trivial components. As a consequence, components are not allowed to do anything that prevents them from being destroyed. For example, since the office crashes when a container window or component window has an open modal dialog, every component that wants to open a modal dialog must implement the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XController]</text:span> interface.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">If a <text:span text:style-name="Emphasis">model object</text:span> supports <text:span text:style-name="Code (in text)">XCloseable</text:span>, calling <text:span text:style-name="Code (in text)">dispose()</text:span> on it is forbidden, try to <text:span text:style-name="Code (in text)">close()</text:span> the <text:span text:style-name="Code (in text)">XCloseable</text:span> and catch a possible <text:span text:style-name="Code (in text)">CloseVetoException</text:span>. Components that cannot cope with a destroyed model add a close listener at the model. This enables them to object when the model receives a <text:span text:style-name="Code (in text)">close()</text:span> request. They also add as a close listener if they are not already added as an (dispose) event listener. This can be done by every controller object that uses that model. Tt is also possible to let the model iterate through its controllers and call their <text:span text:style-name="Code (in text)">suspend()</text:span> methods explicitly as a part of its implementation of the close method. It is only necessary to know that a method <text:span text:style-name="Code (in text)">close()</text:span> must be called to close the model with its controllers. The method the model chooses is an implementation detail.</text:p>
  <text:p text:style-name="Paragraph">The example below closes a loaded document component. It does not save modified documents or prompts the user to save. [SOURCE:OfficeDev/DesktopEnvironment/FunctionHelper.java]</text:p>
  <text:p text:style-name="Code">// Conditions: xDocument = m_xLoadedDocument<text:line-break/> // Check supported functionality of the document (model or controller).<text:line-break/> com.sun.star.frame.XModel xModel =<text:line-break/> <text:s/>(com.sun.star.frame.XModel)UnoRuntime.queryInterface(<text:line-break/> <text:s text:c="2"/>com.sun.star.frame.XModel.class,xDocument);<text:line-break/> <text:line-break/> if(xModel!=null)<text:line-break/> {<text:line-break/> <text:s/>// It is a full featured office document.<text:line-break/> <text:s/>// Try to use close mechanism instead of a hard dispose().<text:line-break/> <text:s/>// But maybe such service is not available on this model.<text:line-break/> <text:s/>com.sun.star.util.XCloseable xCloseable =<text:line-break/> <text:s text:c="3"/>(com.sun.star.util.XCloseable)UnoRuntime.queryInterface(<text:line-break/> <text:s text:c="4"/>com.sun.star.util.XCloseable.class,xModel);<text:line-break/> </text:p>
  <text:p text:style-name="Code"><text:line-break/> <text:s/>if(xCloseable!=null)<text:line-break/> <text:s/>{<text:line-break/> <text:s text:c="3"/>try<text:line-break/> <text:s text:c="3"/>{<text:line-break/> <text:s text:c="5"/>// use close(boolean DeliverOwnership)</text:p>
  <text:p text:style-name="Code"><text:s text:c="6"/>// The boolean parameter DeliverOwnership tells objects vetoing the close process that they may</text:p>
  <text:p text:style-name="Code"><text:s text:c="6"/>// assume ownership if they object the closure by throwing a CloseVetoException</text:p>
  <text:p text:style-name="Code"><text:s text:c="6"/>// Here we give up ownership. To be on the safe side, catch possible veto exception anyway. <text:line-break/> <text:s text:c="5"/>xCloseable.close(true);<text:line-break/> <text:s text:c="3"/>}<text:line-break/> <text:s text:c="3"/>catch(com.sun.star.util.CloseVetoException exCloseVeto)<text:line-break/> <text:s text:c="3"/>{<text:line-break/> <text:s text:c="3"/>}<text:line-break/> <text:s/>}<text:line-break/> <text:s/>// If close is not supported by this model - try to dispose it.<text:line-break/> <text:s/>// But if the model disagree with a reset request for the modify state<text:line-break/> <text:s/>// we shouldn&apos;t do so. Otherwhise some strange things can happen.<text:line-break/> <text:s/>else<text:line-break/> <text:s/>{<text:line-break/> <text:s text:c="5"/>com.sun.star.lang.XComponent xDisposeable =<text:line-break/> <text:s text:c="7"/>(com.sun.star.lang.XComponent)UnoRuntime.queryInterface(<text:line-break/> <text:s text:c="8"/>com.sun.star.lang.XComponent.class,xModel); <text:s text:c="5"/><text:line-break/> <text:s text:c="8"/>xDisposeable.dispose();<text:line-break/> <text:s text:c="6"/>}<text:line-break/> <text:s text:c="6"/>catch(com.sun.star.beans.PropertyVetoException exModifyVeto)<text:line-break/> <text:s text:c="6"/>{<text:line-break/> <text:s text:c="6"/>}<text:line-break/> <text:s text:c="4"/>}<text:line-break/> <text:s text:c="2"/>}<text:line-break/> }</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="storing" text:key1="Documents"/>Storing Documents</text:h>
  <text:p text:style-name="P9">[TOPIC:com.sun.star.frame.XStorable]After loading an office component successfully, the returned interface cis used to manipulate the component. Document specific interfaces, such as the interfaces <text:span text:style-name="Code (in text)">[IDL:com.sun.star.text.XTextDocument]</text:span>, <text:span text:style-name="Code (in text)">[IDL:com.sun.star.sheet.XSpreadsheetDocument]</text:span> or <text:span text:style-name="Code (in text)">[IDL:com.sun.star.drawing.XDrawPagesSupplier]</text:span> are retrieved using <text:span text:style-name="Code (in text)">queryInterface()</text:span>. </text:p>
  <text:p text:style-name="P9">If the office component supports the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XStorable]</text:span> interface applying to every component implementing the service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.OfficeDocument]</text:span>, it can be stored:</text:p>
  <text:p text:style-name="P10">void <text:span text:style-name="MethodSignatureEmphasis">store</text:span> ( ) </text:p>
  <text:p text:style-name="P10">void <text:span text:style-name="MethodSignatureEmphasis">storeAsURL</text:span> ( [in] string sURL, </text:p>
  <text:p text:style-name="P10"><text:s text:c="17"/>[in] sequence&lt; com::sun::star::beans::PropertyValue &gt; lArguments ) </text:p>
  <text:p text:style-name="P10">void <text:span text:style-name="MethodSignatureEmphasis">storeToURL</text:span> ( [in] string sURL, </text:p>
  <text:p text:style-name="P10"><text:s text:c="17"/>[in] sequence&lt; com::sun::star::beans::PropertyValue &gt; lArguments ) </text:p>
  <text:p text:style-name="P10">boolean <text:span text:style-name="MethodSignatureEmphasis">hasLocation</text:span> ()</text:p>
  <text:p text:style-name="P10">string <text:span text:style-name="MethodSignatureEmphasis">getLocation</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures">boolean <text:span text:style-name="MethodSignatureEmphasis">isReadonly</text:span> ()</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">XStorable</text:span> offers the methods <text:span text:style-name="Code (in text)">store()</text:span>, <text:span text:style-name="Code (in text)">storeAsURL()</text:span> and <text:span text:style-name="Code (in text)">storeToURL()</text:span> for storing. The latter two methods are called with a media descriptor.</text:p>
  <text:p text:style-name="Paragraph">The method <text:span text:style-name="Code (in text)">store()</text:span> overwrites an existing file. Calling this method on a document that was created from scratch using a <text:span text:style-name="www/ftp/email">private:factory/...</text:span> URL leads to an exception.</text:p>
  <text:p text:style-name="Paragraph">The other two methods <text:span text:style-name="Code (in text)">storeAsURL()</text:span> and <text:span text:style-name="Code (in text)">storeToURL()</text:span> leave the original file untouched and differ after the storing procedure. The <text:span text:style-name="Code (in text)">storeToURL()</text:span> method saves the current document to the desired location without touching the internal state of the document. The method <text:span text:style-name="Code (in text)">storeAsURL</text:span> sets the <text:span text:style-name="Code (in text)">Modified</text:span> attribute of the document, accessible through its <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XModifiable]</text:span> interface, to <text:span text:style-name="Code (in text)">false</text:span> and updates the internal media descriptor of the document with the parameters passed in the call. This changes the document URL.</text:p>
  <text:p text:style-name="Paragraph">The following example exports a Writer document, Writer/Web document or Calc sheet to HTML. [SOURCE:OfficeDev/DesktopEnvironment/FunctionHelper.java]</text:p>
  <text:p text:style-name="Code"><text:s/>// Conditions: sURL <text:s text:c="5"/>= &quot;file:///home/target.htm&quot;<text:line-break/> // <text:s text:c="12"/>xDocument = m_xLoadedDocument<text:line-break/> <text:line-break/> // Export can be achieved by saving the document and using<text:line-break/> // a special filter which can write the desired format.<text:line-break/> // Normally this filter should be searched inside the filter<text:line-break/> // configuration (using service com.sun.star.document.FilterFactory)<text:line-break/> // but here we use well known filter names directly.<text:line-break/> </text:p>
  <text:p text:style-name="Code"><text:s/>String sFilter = null;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s/>// Detect document type by asking XServiceInfo</text:p>
  <text:p text:style-name="Code"><text:s/>com.sun.star.lang.XServiceInfo <text:span text:style-name="MethodSignatureEmphasis">xInfo</text:span> = (com.sun.star.lang.XServiceInfo)UnoRuntime.<text:span text:style-name="MethodSignatureEmphasis">queryInterface</text:span> (<text:line-break/> <text:s text:c="2"/>com.sun.star.lang.<text:span text:style-name="MethodSignatureEmphasis">XServiceInfo</text:span> .class, xDocument);<text:line-break/> </text:p>
  <text:p text:style-name="Code"><text:s/>// Determine suitable HTML filter name for export.</text:p>
  <text:p text:style-name="Code"><text:s/>if(xInfo!=null)<text:line-break/> {<text:line-break/> <text:s/>if(xInfo.<text:span text:style-name="CodeEmphasis">supportsService</text:span> (&quot;<text:span text:style-name="CodeEmphasis">com.sun.star.text.TextDocument</text:span> &quot;) == true)<text:line-break/> <text:s text:c="5"/>sFilter = new String(&quot;<text:span text:style-name="CodeEmphasis">HTML (StarWriter)</text:span> &quot;);<text:line-break/> <text:s/>else<text:line-break/> <text:s/>if(xInfo.<text:span text:style-name="CodeEmphasis">supportsService</text:span> (&quot;<text:span text:style-name="CodeEmphasis">com.sun.star.text.WebDocument</text:span> &quot;) == true)<text:line-break/> <text:s text:c="5"/>sFilter = new String(&quot;<text:span text:style-name="CodeEmphasis">HTML</text:span> &quot;);<text:line-break/> <text:s/>else<text:line-break/> <text:s/>if(xInfo.<text:span text:style-name="CodeEmphasis">supportsService</text:span> (&quot;<text:span text:style-name="CodeEmphasis">com.sun.star.sheet.SpreadsheetDocument</text:span> &quot;) == true)<text:line-break/> <text:s text:c="5"/>sFilter = new String(&quot;<text:span text:style-name="CodeEmphasis">HTML (StarCalc)</text:span> &quot;);<text:line-break/> }<text:line-break/> </text:p>
  <text:p text:style-name="Code"><text:s/>if(sFilter!=null)<text:line-break/> {<text:line-break/> <text:s/>// Build necessary argument list for store properties.<text:line-break/> <text:s/>// Use flag &quot;Overwrite&quot; to prevent exceptions, if file already exists.<text:line-break/> </text:p>
  <text:p text:style-name="P11"><text:s text:c="2"/>com.sun.star.beans.PropertyValue[] lProperties =<text:line-break/> <text:s text:c="5"/>new com.sun.star.beans.PropertyValue[2];<text:line-break/> <text:s/>lProperties[0] <text:s text:c="6"/>= new com.sun.star.beans.PropertyValue();<text:line-break/> <text:s/>lProperties[0].Name <text:s/>= &quot;<text:span text:style-name="MethodSignatureEmphasis">FilterName</text:span> &quot;;<text:line-break/> <text:s/>lProperties[0].Value = sFilter;<text:line-break/> <text:s/>lProperties[1] <text:s text:c="6"/>= new com.sun.star.beans.PropertyValue();<text:line-break/> <text:s/>lProperties[1].Name <text:s/>= &quot;<text:span text:style-name="MethodSignatureEmphasis">Overwrite</text:span> &quot;;<text:line-break/> <text:s/>lProperties[1].Value = new Boolean(true);<text:line-break/> <text:line-break/> <text:s/>com.sun.star.frame.XStorable <text:span text:style-name="MethodSignatureEmphasis">xStore</text:span> = (com.sun.star.frame.XStorable)UnoRuntime.<text:span text:style-name="MethodSignatureEmphasis">queryInterface</text:span> (</text:p>
  <text:p text:style-name="Code"><text:s text:c="6"/>com.sun.star.frame.<text:span text:style-name="MethodSignatureEmphasis">XStorable</text:span> .class, xDocument);<text:line-break/> </text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>xStore.<text:span text:style-name="MethodSignatureEmphasis">storeAsURL</text:span> (sURL, lProperties);<text:line-break/> }</text:p>
  <text:p text:style-name="Paragraph">If a model is loaded or stored successfully, all parts of the media descriptor not explicitly excluded according to the media descriptor table in section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.HandleDocuments.Loading.MediaDesc]</text:span> must be provided by the methods <text:span text:style-name="Code (in text)">getURL()</text:span> and <text:span text:style-name="Code (in text)">getArgs()</text:span> in the<text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XModel]</text:span> interface. The separation of the URL and the other arguments is used, because the URL is the often the most wanted part for itsperformance optimized access. </text:p>
  <table:table table:name="Tabelle55" table:style-name="Tabelle55">
   <table:table-column table:style-name="Tabelle55.A"/>
   <table:table-column table:style-name="Tabelle55.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle55.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Tip3" text:anchor-type="paragraph" svg:x="0.067cm" svg:y="0cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="32" xlink:href="../tip.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Tip graphics marks a hint section in the text</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle55.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">The XModel offers a method <text:span text:style-name="Code (in text)">attachResource()</text:span> that changes the media descriptor of the document, but this method should only be used in special cases, for example, by the implementer of a new document model and controller. The method <text:span text:style-name="Code (in text)">attachResource()</text:span> does not force reloading of the document. Validation checks are done when a document is loaded through MediaDescriptor. For example, if the resource is write protected, add <text:span text:style-name="Code (in text)">Readonly</text:span> to the MediaDescriptor and the filter name must match the data. A possible use for <text:span text:style-name="Code (in text)">attachResource()</text:span> could be creating a document from a template, where after loading successfully, the document&apos;s resource is changed to an &quot;unnamed&quot; state by deleting the URL.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="printing" text:key1="Documents"/>Printing Documents</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.view.XPrintable]Printing revolves around the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.view.XPrintable]</text:span>. Its methods and special printing features for the various document types are described in the document chapters <text:span text:style-name="ChapterRef">[CHAPTER:Text.FileHandling.Printing]</text:span>, <text:span text:style-name="ChapterRef">[CHAPTER:Spreadsheet.FileHandling.Printing]</text:span>, <text:span text:style-name="ChapterRef">[CHAPTER:Drawing.DrawFileHandling.Printing]</text:span> and <text:span text:style-name="ChapterRef">[CHAPTER:Drawing.PresentationFileHandling.Printing]</text:span>.</text:p>
  <text:h text:style-name="Head 3" text:level="3">Using the <text:alphabetical-index-mark text:string-value="dispatch framework"/>Dispatch Framework</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.XDispatchProvider;com.sun.star.frame.XDispatch;com.sun.star.frame.XStatusListener;com.sun.star.util.XURLTransformer;[TOPIC:com.sun.star.frame.XDispatchProviderInterceptor]]The component framework with the Frame-Controller-Model paradigm builds the skeleton of the global object structure. Other frameworks are defined that enrich the communication between an office component and the desktop environment. Usually they start at a frame object for the frame anchors an office component in the desktop environment.</text:p>
  <text:p text:style-name="Paragraph">One framework is the dispatch framework. Its main purpose defines interfaces for a <text:alphabetical-index-mark-start text:id="IMark43875748"/><text:span text:style-name="Emphasis">generic</text:span> <text:span text:style-name="Emphasis">communication</text:span> <text:alphabetical-index-mark-end text:id="IMark43875748"/>between an office component and a user interface. This <text:alphabetical-index-mark-start text:id="IMark44271916"/><text:span text:style-name="Emphasis">communication</text:span> process<text:alphabetical-index-mark-end text:id="IMark44271916"/> handles requests for <text:alphabetical-index-mark-start text:id="IMark43887388"/>command execution<text:alphabetical-index-mark-end text:id="IMark43887388"/>s and gives information about the various attributes of an office component. <text:span text:style-name="Emphasis">Generic</text:span> means that the user interface does not have to know all the interfaces supported by the office component.The user interfaces sends messages to the office component and receives <text:span text:style-name="T2">notifications</text:span>.Tthe messages use a simple format. The entire negotiation about supported commands and parameters can happen at runtime while an application built on the specialized interfaces of the component are created at compile or interpret time. This generic approach is achieved by looking at an office component differently, not as objects with method-based interfaces, but as slot machines that take standardized <text:alphabetical-index-mark-start text:id="IMark43674652"/>command tokens<text:alphabetical-index-mark-end text:id="IMark43674652"/>.</text:p>
  <text:p text:style-name="Paragraph">We have discussed the differences between the different document types. The common functionality covers the generic features, that is, an office component is considered to be the entirety of its controller, its model and <text:span text:style-name="Emphasis">many</text:span> document-specific interfaces. To implement a user interface for a component, it would be closely bound to the component and its specialized interfaces. If different components use different interfaces and methods for their implementations, similar functions cannot be visualized by the same user interface implementation. For instance, an action like <text:span text:style-name="Buttons/Menus">Edit – Select All</text:span> leads to different interface calls depending on the document type it is sent to. From a user interface perspective, it would be better to define abstract descriptions of the actions to be performed and let the components decide how to handle these actions, or not to handle . These abstract descriptions and how to handle them is specified in the dispatch framework.</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="command URL"/>Command URL</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.util.URL] In the dispatch framework, every possible user action is defined as an executable <text:span text:style-name="Emphasis">command</text:span>, and every possible visualization as a reflection of something that is exposed by the component is defined as an <text:span text:style-name="Emphasis">attribute</text:span>. Every executable command and every attribute is a feature of the office component, and the dispatch framework gives every feature a name called <text:span text:style-name="Emphasis">command URL</text:span>. It is represented by a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.URL]</text:span> struct.</text:p>
  <text:p text:style-name="Paragraph">Command URLs are strings that follow the <text:span text:style-name="www/ftp/email">protocol_scheme:protocol_specific_part</text:span> pattern. Public URL schemes, such as <text:span text:style-name="www/ftp/email">file:</text:span> or <text:span text:style-name="www/ftp/email">http</text:span> can be used here.Executing a request with a URL that points to a location of a document means that this document is loaded. In general, both parts of the command URL can be arbitrary strings, but a request cannot be<text:span text:style-name="T2"> executed </text:span>if there is an object that does not know how to handle its command URL.</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="processing chain" text:key1="dispatch framework"/>Processing Chain</text:h>
  <text:p text:style-name="Paragraph">A <text:alphabetical-index-mark-start text:id="IMark43887388"/>request<text:alphabetical-index-mark-end text:id="IMark43887388"/> is created by any object.User interface objects can create requests. Consider a toolbox where different functions acting on the office component are presented as buttons. When a button is clicked, the desired functionality is executed. If the code assigned to the button is provided with a suitable command URL, it handles the user action by creating the request and finding a component that can handle it. The button handler does not require any prior knowledge of the component and how it would go about its task.</text:p>
  <text:p text:style-name="Paragraph">This situation is handled by the design pattern <text:alphabetical-index-mark-start text:id="IMark43875748"/><text:span text:style-name="Emphasis">chain of responsibility.</text:span><text:alphabetical-index-mark-end text:id="IMark43875748"/> Everything a component needs to know to execute a request is the last link of a chain of objects capable of executing requests. If this object gets the request, it checks<text:span text:style-name="T2"> if </text:span>it can handle it or passes it to the next chain member until the request is executed, or the end of the chain is reached.</text:p>
  <text:p text:style-name="Paragraph">The chain members in the dispatch framework are objects implementing the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProvider]</text:span>. Every frame and controller supports it.In the simplest case, the chain consists of two members, a frame and its controller, but concatenating several chain parts on demand of a frame or a controller is possible. A controller once called, passes on the call, that is, it can use internal frames created by its implementation. A frame also passes the call to other objects, for example, its parent frame. </text:p>
  <text:p text:style-name="Paragraph">The current implementation of the chain is different from a simple chain.A frame is always the leading chain member and <text:span text:style-name="Emphasis">must </text:span>be called initially, but in the default implementation used in [PRODUCTNAME], the frame first(!) asks its controller before it goes on with the request. Other frame implementations handle this in a different way. Other chain members are inserted into the call sequence before the controller uses the dispatch interception capability of a frame. The developers should not rely on any particular order inside the chain. </text:p>
  <text:p text:style-name="Paragraph">The dispatch framework uses a generic approach to describe and handle requests with a lose coupling between the participating objects. To work correctly, it is necessary to follow certain rules:</text:p>
  <text:ordered-list text:style-name="L5">
   <text:list-item>
    <text:p text:style-name="P12">Every chain starts at a frame, and this object decides if it passes on the call to its controller. The controller is not called directly from the outside. This is not compulsory for internal usage of the dispatch API inside an office component implementation. Ther two reasons for this rule are:</text:p>
   </text:list-item>
  </text:ordered-list>
  <text:unordered-list text:style-name="L6">
   <text:list-item>
    <text:unordered-list>
     <text:list-item>
      <text:p text:style-name="P13">A frame providesa <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProviderInterception]</text:span> interface, where other dispatch providers dock. The frame implementation guarantees that these interceptors are called before the frame handles the request or passes it to the controller. This allows a sophisticated customization of the dispatch handling.</text:p>
     </text:list-item>
     <text:list-item>
      <text:p text:style-name="P13">If a component is placed into a context where parts of its functionality are not be exposed to the outside, a special frame implementation is used to suppress or handle requests before they are passed to the controller. This frame can add or remove arguments to requests and exchange them.</text:p>
     </text:list-item>
    </text:unordered-list>
   </text:list-item>
  </text:unordered-list>
  <text:ordered-list text:style-name="L5" text:continue-numbering="true">
   <text:list-item>
    <text:p text:style-name="P12">A command URL isparsed into a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.URL]</text:span> struct before passing it to a dispatch provider, because it is assumed that the call is passed on to several objects. Having a preparsed URL saves parsing the command string repeatedly. Parsing means that the members <text:span text:style-name="Code (in text)">Complete</text:span>, <text:span text:style-name="Code (in text)">Main</text:span>, <text:span text:style-name="Code (in text)">Protocol</text:span> and at least one more member of the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.URL]</text:span> struct, depending on the given protocol scheme have to be set. Additional members are set if the concrete URL protocol supports them. For well known protocol schemes and protocol schemes specific to [PRODUCTNAME], the service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.URLTransformer]</text:span> is used to fill the struct from a command URL string. For other protocols, the members are set explicitly, but it is also possible to write an extended version of the <text:span text:style-name="Code (in text)">URLTransformer</text:span> service to carry out URL parsing. An extended <text:span text:style-name="Code (in text)">URLTransformer</text:span> must support all protocols supported by the default URLTransformer implementation, for example, by instantiating the old implementation by its<text:span text:style-name="T2"> implementation </text:span>name and forwarding all known URLs to it, except URLs with new protocols. </text:p>
   </text:list-item>
  </text:ordered-list>
  <text:p text:style-name="Paragraph">The dispatch framework connects an object that creates a request with another object that reacts on the request. In addition, it provides feedback to the requester. It can tell if the request is currently allowed or not. If the request acts on a specific attribute of an object, it c provides the current status of this attribute. Altogether, this is called <text:alphabetical-index-mark-start text:id="IMark44271916" text:key1="dispatch framework"/><text:span text:style-name="Emphasis">status information</text:span><text:alphabetical-index-mark-end text:id="IMark44271916"/>, represented by a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FeatureStateEvent]</text:span> struct. This information is reflected in a user interface by enabling or disabling controls to show their availability, or by displaying the status of objects. For example, a pressed button for the bold attribute of text, or a numeric value for the text height in a combo box.</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProvider]</text:span> interface does not handle requests, but delegates every request to an individual dispatch object implementing <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatch]</text:span>.</text:p>
  <table:table table:name="Tabelle56" table:style-name="Tabelle56">
   <table:table-column table:style-name="Tabelle56.A"/>
   <table:table-column table:style-name="Tabelle56.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle56.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note8" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="33" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle56.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">This is the concept, but the implementation is not forced and it may decide to return the same object for every request. It is not recommened to use the dispatch provider object as a dispatch object.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="dispatch process" text:key1="dispatch framework"/>Dispatch Process</text:h>
  <text:p text:style-name="Paragraph">This section describes the necessary steps to handle dispatch providers and dispatch objects. The illustration below shows the services and interfaces of the the Dispatch framework.</text:p>
  <text:p text:style-name="Standard"/>
  <table:table table:name="Tabelle42" table:style-name="Tabelle42">
   <table:table-column table:style-name="Tabelle42.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle42.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr6" draw:name="Rahmen9" text:anchor-type="paragraph" svg:y="0cm" svg:width="11.987cm" fo:min-height="16.12cm" draw:z-index="34">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr3" draw:name="UML diagram of the Dispatch Framework" text:anchor-type="paragraph" svg:x="0.004cm" svg:y="0.002cm" svg:width="11.689cm" svg:height="15.619cm" draw:z-index="35" xlink:href="DispatchFramework.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>UML diagram showing the Dispatch Framework</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration14" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.15</text:sequence>: Dispatch Framework</text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="getting a dispatch object" text:key1="dispatch process"/>Getting a Dispatch Object</text:h>
  <text:p text:style-name="Paragraph">First, create a command URL that represents the desired functionality ensuring that it is parsed as described above. Tables with possible command URLs for the default office components of [PRODUCTNAME] are located in the appendix.</text:p>
  <text:p text:style-name="Paragraph">Request the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProvider]</text:span> interface of the frame that contains the office component for a dispatch object for the command URL by calling its <text:span text:style-name="Code (in text)">queryDispatch()</text:span> method. </text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::frame::XDispatch <text:span text:style-name="MethodSignatureEmphasis">queryDispatch</text:span> ( [in] com::sun::star::util::URL URL, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="30"/>[in] string TargetFrameName, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="30"/>[in] long SearchFlags )</text:p>
  <text:p text:style-name="MethodSignatures">sequence&lt; com::sun::star::frame::XDispatch &gt; <text:span text:style-name="MethodSignatureEmphasis">queryDispatches</text:span> ( </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="29"/>[in] sequence&lt; com::sun::star::frame::DispatchDescriptor &gt; Requests )</text:p>
  <text:p text:style-name="Paragraph">The additional parameters (<text:span text:style-name="Code (in text)">TargetFrameName</text:span>, <text:span text:style-name="Code (in text)">SearchFlags</text:span>) of this call are only used for dispatching public URL schemes, because they specify a target frame and frame search mode to the loading process. Valid target names and search flags are described in the section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.HandleDocuments.Loading.TargetFrame]</text:span>. The targets <text:span text:style-name="Code (in text)">&quot;_self&quot;</text:span>, <text:span text:style-name="Code (in text)">&quot;_parent&quot;</text:span> and <text:span text:style-name="Code (in text)">&quot;_top&quot;</text:span> are well defined, so that they can be used, because a <text:span text:style-name="Code (in text)">queryDispatch()</text:span> call starts at a frame object. Using frame names or search flags with command URLs does not have any meaning in the office components in [PRODUCTNAME].</text:p>
  <text:p text:style-name="Paragraph">You receive a dispatch object that supports at least <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatch]</text:span>:</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">dispatch</text:span> ( [in] com::sun::star::util::URL URL, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="25"/>[in] sequence&lt; com::sun::star::beans::PropertyValue &gt; Arguments )</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">addStatusListener</text:span> ( [in] com::sun::star::frame::XStatusListener Control, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="26"/>[in] com::sun::star::util::URL URL )</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">removeStatusListener</text:span> ( [in] com::sun::star::frame::XStatusListener Control, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="26"/>[in] com::sun::star::util::URL URL )</text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures"><text:s/></text:p>
  <text:h text:style-name="Head 5" text:level="5">Listening for Status Information</text:h>
  <text:p text:style-name="Paragraph">If a dispatch object is received, add a listener for status events by calling its <text:span text:style-name="Code (in text)">addStatusListener()</text:span> method. A <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XStatusListener]</text:span> implements:</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">statusChanged</text:span> ( [in] com::sun::star::frame::FeatureStateEvent Event )</text:p>
  <text:p text:style-name="Paragraph">Keep a reference to the dispatch object until you call the <text:span text:style-name="Code (in text)">removeStatusListener()</text:span> method, because it is not sure that any other object will keep it alive. If a status listener is not registered, because you want to dispatch a command,and are not interested in status events, release all references to the dispatch object immediately after usage. If a dispatch object is not received, the desired functionality is not available. If you have a visual user interface element that represents that functionality, disable it.</text:p>
  <text:p text:style-name="Paragraph">If a status listener is registered and there is status information, a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FeatureStateEvent]</text:span> is received immediately after registering the listener. Status information is still received later if the status changes and you are still listening. The <text:span text:style-name="Code (in text)">IsEnabled</text:span> member of the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FeatureStateEvent]</text:span> tells you if the functionality is currently available, and the <text:span text:style-name="Code (in text)">State</text:span> member holds information about a status that could be represented by UI elements. Its type depends on the command URL. A boolean status information is visualized in a pressed or not pressed look of a toolbox button. Other types need complex elements, such as combo boxes or spinfields embedded in a toolbox that show the current font and font size. If the <text:span text:style-name="Code (in text)">State</text:span> member is empty, the action does not have an explicit status, such as the menu item <text:span text:style-name="Buttons/Menus">File – Print.</text:span> The current status can be <text:span text:style-name="T2">ambiguous</text:span>, because more than one object is selected and the objects are in a different status, for example. selected text that is partly formatted bold and partly regular.</text:p>
  <text:p text:style-name="Paragraph">A special event is a status event where the <text:span text:style-name="Code (in text)">Requery</text:span> flag is set. This is a request to release all references to the dispatch object and to ask the dispatch provider for a new object, because the old one has become invalid. This allows the office components to accommodate internal context changes. It is possible that a dispatch object is not received, because the desired functionality has become unavailable.</text:p>
  <text:p text:style-name="Paragraph">If you do not get any status information in your <text:span text:style-name="Code (in text)">statusChanged()</text:span> implementation, assume that the functionality is always available, but has no explicit status.</text:p>
  <text:p text:style-name="Paragraph">If you are no longer interested in status events, use the <text:span text:style-name="Code (in text)">removeStatusListener()</text:span> method and release all references to the dispatch object. You may get a <text:span text:style-name="Code (in text)">disposing()</text:span> callback from the dispatch object when it is going to be destroyed. It is not necessary to call <text:span text:style-name="Code (in text)">removeStatusListener()</text:span>. Ensure that you do not hold any references to the dispatch object anymore.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="listening for context changes" text:key1="dispatch process"/>Listening for Context Changes</text:h>
  <text:p text:style-name="Paragraph">Sometimes internal changes, for example, travelling from a text paragraph to a text table, or selecting a different type of object, force an office component to invalidate all referenced dispatch objects and provides other dispatch objects, including dispatches for command URLs it could not handle before. The component then calls the <text:span text:style-name="Code (in text)">contextChanged()</text:span> method of its frame, and the frame broadcasts the corresponding <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FrameActionEvent]</text:span>. For this reason, register a frame action listener using <text:span text:style-name="Code (in text)">addFrameActionListener()</text:span> at frames you want dispatch objects. Refer to section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.UsingCompFramework.Frames.XFrame.Actions]</text:span> for additional information. If the listener is called back with a CONTEXT_CHANGED event, release all dispatch objects and query new dispatch objects for every command URL you require. You can also try command URLs that did not get a dispatch object before.</text:p>
  <text:p text:style-name="Paragraph">If you are no longer interested in context changes of a frame, use the <text:span text:style-name="Code (in text)">removeFrameActionListener()</text:span> method of the frame to deregister and release all references to the frame. If you get a <text:span text:style-name="Code (in text)">disposing()</text:span> request from the frame in between, it is not necessary to call <text:span text:style-name="Code (in text)">removeFrameActionListener()</text:span>, but you must release all frame references you are currently holding.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="dispatching a command" text:key1="dispatch process"/>Dispatching a Command</text:h>
  <text:p text:style-name="Paragraph">If the desired functionality is available, execute it by calling the <text:span text:style-name="Code (in text)">dispatch()</text:span> method of the dispatch object. This method is called with the same command URL you used to get it, and optionally with a sequence of arguments of type <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.PropertyValue]</text:span> that depend on the command. It is not redundant that supplied the URL again, because it is allowed to use one dispatch object for many command URLs. The appendix shows the names and types for the parameters. However, the command URLs for simple user interface elements, such as menu entries or toolbox buttons send no parameters. Complex user interface elements use parameters, for example, a combo box in a toolbar that changes the font height. [SOURCE:OfficeDev/DesktopEnvironment/FunctionHelper.java]</text:p>
  <text:p text:style-name="Code"><text:s/>// Conditions: sURL <text:s text:c="7"/>= &quot;private:factory/swriter&quot;<text:line-break/> // <text:s text:c="12"/>lProperties = new com.sun.star.beans.PropertyValue[0]<text:line-break/> // <text:s text:c="12"/>xSMGR <text:s text:c="6"/>= m_xServiceManager<text:line-break/> // <text:s text:c="12"/>xListener <text:s text:c="2"/>= this</text:p>
  <text:p text:style-name="Code">// <text:s text:c="12"/>xFrame <text:s text:c="5"/>= a given frame<text:line-break/> <text:line-break/> // Query the frame for right interface which provides access to all<text:line-break/> // available dispatch objects.<text:line-break/> com.sun.star.frame.XDispatchProvider <text:span text:style-name="CodeEmphasis">xProvider</text:span> =<text:line-break/> <text:s text:c="3"/>(com.sun.star.frame.XDispatchProvider)UnoRuntime.<text:span text:style-name="CodeEmphasis">queryInterface</text:span> (<text:line-break/> <text:s text:c="7"/><text:span text:style-name="CodeEmphasis">com.sun.star.frame.XDispatchProvider</text:span> .class, <text:span text:style-name="CodeEmphasis">xFrame</text:span> );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// Create and parse a valid URL<text:line-break/> // Note: because it is an in/out parameter we must use an array of URLs<text:line-break/> com.sun.star.util.XURLTransformer <text:span text:style-name="CodeEmphasis">xParser</text:span> =<text:line-break/> <text:s text:c="3"/>(com.sun.star.util.XURLTransformer)UnoRuntime.<text:span text:style-name="CodeEmphasis">queryInterface</text:span> (<text:line-break/> <text:s text:c="7"/><text:span text:style-name="CodeEmphasis">com.sun.star.util.XURLTransformer</text:span> .class,</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>xSMGR.<text:span text:style-name="CodeEmphasis">createInstance(&quot;com.sun.star.util.URLTransformer&quot;</text:span> ));<text:line-break/> <text:line-break/> com.sun.star.util.URL[] aParseURL = new com.sun.star.util.URL[1];<text:line-break/> aParseURL[0] <text:s text:c="9"/>= new com.sun.star.util.URL();<text:line-break/> aParseURL[0].Complete = sURL;<text:line-break/> </text:p>
  <text:p text:style-name="Code">xParser.<text:span text:style-name="CodeEmphasis">parseStrict</text:span> (aParseURL);<text:line-break/> <text:line-break/> // Ask for dispatch object for requested URL and use it.<text:line-break/> // Force given frame as target &quot;&quot; which means the same like &quot;_self&quot;.<text:line-break/> xDispatcher = xProvider.queryDispatch(aParseURL[0],&quot;&quot;,0);<text:line-break/> </text:p>
  <text:p text:style-name="Code">if(xDispatcher!=null)<text:line-break/> {<text:line-break/> <text:s/>xDispatcher.<text:span text:style-name="CodeEmphasis">addStatusListener</text:span> (xListener,aParseURL[0]);<text:line-break/> <text:s/>xDispatcher.<text:span text:style-name="CodeEmphasis">dispatch</text:span> (aParseURL[0],lProperties);<text:line-break/> }</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="dispatch results" text:key1="dispatch process"/>Dispatch Results</text:h>
  <text:p text:style-name="Paragraph">Every dispatch object implement optional interfaces. An important extension is the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XNotifyingDispatch]</text:span> interface for dispatch results. The <text:span text:style-name="Code (in text)">dispatch()</text:span> call is a <text:span text:style-name="Code (in text)">void</text:span> method and should be treated as an asynchronous or oneway call, therefore a dispatch result can not be passed as a return value, rather, a callback interface is necessary. The interface that provides dispatch results by a callback is the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XNotifyingDispatch]</text:span> interface:</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">dispatchWithNotification</text:span> ( [in] com::sun::star::util::URL URL, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="27"/>[in] sequence&lt; com::sun::star::beans::PropertyValue &gt; Arguments, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="27"/>[in] com::sun::star::frame::XDispatchResultListener Listener )</text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="Paragraph">Its method <text:span text:style-name="Code (in text)">dispatchWithNotification()</text:span> takes a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchResultListener]</text:span> interface that is called after a dispatched URL has been executed. </text:p>
  <table:table table:name="Tabelle54" table:style-name="Tabelle54">
   <table:table-column table:style-name="Tabelle54.A"/>
   <table:table-column table:style-name="Tabelle54.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle54.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important3" text:anchor-type="paragraph" svg:x="0.12cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="59" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle54.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">Although the dispatch process is considered to be asynchronous, this is not necessarily so. Therefore, be prepared to get the dispatch result notification before the dispatch call returns. </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The dispatch result is transferred as a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.DispatchResultEvent]</text:span> struct in the callback method <text:span text:style-name="Code (in text)">dispatchFinished()</text:span>. The <text:span text:style-name="Code (in text)">State</text:span> member of this struct tells if the dispatch was successful or not, while the <text:span text:style-name="Code (in text)">Result</text:span> member contains the value that would be returned if the call had been executed as a synchronous function call. The appendix shows the types of return values. If a public URL is dispatched, the dispatch result is a reference to the frame the component was loaded into. [SOURCE:OfficeDev/DesktopEnvironment/FunctionHelper.java]</text:p>
  <text:p text:style-name="Code"><text:s/>// Conditions: sURL <text:s text:c="7"/>= &quot;private:factory/swriter&quot;<text:line-break/> // <text:s text:c="12"/>lProperties = new com.sun.star.beans.PropertyValue[0]<text:line-break/> // <text:s text:c="12"/>xSMGR <text:s text:c="6"/>= m_xServiceManager<text:line-break/> // <text:s text:c="12"/>xListener <text:s text:c="2"/>= this<text:line-break/> <text:line-break/> // Query the frame for right interface which provides access to all<text:line-break/> // available dispatch objects.<text:line-break/> com.sun.star.frame.XDispatchProvider <text:span text:style-name="CodeEmphasis">xProvider</text:span> =<text:line-break/> <text:s text:c="3"/>(com.sun.star.frame.XDispatchProvider)UnoRuntime.<text:span text:style-name="CodeEmphasis">queryInterface</text:span> (<text:line-break/> <text:s text:c="7"/><text:span text:style-name="CodeEmphasis">com.sun.star.frame.XDispatchProvider</text:span> .class, xFrame);</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s/>// Create and parse a valid URL<text:line-break/> // Note: because it is an in/out parameter we must use an array of URLs<text:line-break/> com.sun.star.util.XURLTransformer <text:span text:style-name="CodeEmphasis">xParser</text:span> =<text:line-break/> <text:s text:c="3"/>(com.sun.star.util.XURLTransformer)UnoRuntime.queryInterface(<text:line-break/> <text:s text:c="6"/><text:span text:style-name="CodeEmphasis">com.sun.star.util.XURLTransformer</text:span> .class,<text:line-break/> <text:s text:c="10"/>xSMGR.<text:span text:style-name="CodeEmphasis">createInstance</text:span> (&quot;<text:span text:style-name="CodeEmphasis">com.sun.star.util.URLTransformer</text:span> &quot;));</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s/>// Ask for right dispatch object for requested URL and use it.<text:line-break/> // Force given frame as target &quot;&quot; which means the same like &quot;_self&quot;.<text:line-break/> // Attention: The interface XNotifyingDispatch is an optional one!</text:p>
  <text:p text:style-name="Code"><text:s/>com.sun.star.frame.XDispatch <text:s text:c="2"/>xDispatcher =<text:line-break/> <text:s text:c="3"/>xProvider.<text:span text:style-name="CodeEmphasis">queryDispatch</text:span> (aURL,&quot;&quot;,0);<text:line-break/> </text:p>
  <text:p text:style-name="Code"><text:s/>com.sun.star.frame.XNotifyingDispatch <text:span text:style-name="CodeEmphasis">xNotifyingDispatcher</text:span> = <text:line-break/> <text:s text:c="3"/>(com.sun.star.frame.XNotifyingDispatch)UnoRuntime.<text:span text:style-name="CodeEmphasis">queryInterface</text:span> (<text:line-break/> <text:s text:c="7"/><text:span text:style-name="CodeEmphasis">com.sun.star.frame.XNotifyingDispatch.class</text:span> , <text:span text:style-name="CodeEmphasis">xDispatcher</text:span> );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s/>if(xNotifyingDispatcher!=null)<text:line-break/> <text:s text:c="3"/>xNotifyingDispatcher.<text:span text:style-name="CodeEmphasis">dispatchWithNotification</text:span> (aURL, lProperties, xListener);</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="dispatch interception"/>Dispatch Interception</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.XDispatchProviderInterceptor]The dispatch framework described in the last chapter establishes a communication between a user interfaces and an office component. Both can be [PRODUCTNAME] default components or custom components. Sometimes it is not necessary to replace a UI element by a new implementation. It can be sufficient to influence its visualized state or to redirect user interactions to external code. This is the typical use for dispatch interception.</text:p>
  <text:p text:style-name="Paragraph">The <text:alphabetical-index-mark-start text:id="IMark43887388"/>dispatch communication<text:alphabetical-index-mark-end text:id="IMark43887388"/> works in two directions: status information is transferred from the office component to the UI elements and user requests travel from the UI element to the office component. Both go through the same switching center that is, an object implementing <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatch]</text:span>. The UI element gets this object by calling <text:span text:style-name="Code (in text)">queryDispatch()</text:span> at the frame containing the office component, and usually receives an object that connects to code inside the frame, the office component or global services in [PRODUCTNAME]. The frame offers an interface that is used to return third-party dispatch objects that provide the UI element with status updates. For example, it is possible to disable a UI element that would not be disabled otherwise. Another possibility is to write replacement code that is called by the UI element if the user performs a suitable action.</text:p>
  <text:p text:style-name="Paragraph">Dispatch objects are provided by objects implementing the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProvider]</text:span> interface, and that is the interface you are required to implement. There is an extra step where the dispatch provider must be attached to the frame to intercept the dispatching communication, therefore the dispatch provider becomes a part of the <text:span text:style-name="Emphasis">chain of responsibility</text:span> described in the previous section. This is accomplished by implementing <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProviderInterceptor]</text:span>.</text:p>
  <text:p text:style-name="Paragraph">This chain usually only consists of the frame and the controller of the office component it contains, but the frame offers the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProviderInterception]</text:span> interface where other providers are inserted. They are called before the frame tries to find a dispatch object for a command URL, so that it is possible to put the complete dispatch communication in a frame under external control. More than one interceptor can be registered, thus building a bigger chain.</text:p>
  <text:p text:style-name="Paragraph">Routing every dispatch through the whole chain becomes a performance problem, because could be more than a hundred possible clients asking for a dispatch object. For this reason there is also an API that limits the routing procedure to particular commands or command groups. This is described below.</text:p>
  <text:p text:style-name="Paragraph">Once the connection is established, the dispatch interceptor decides how requests for a dispatch object are dealt with. When asked for a dispatch object for a Command URL, it can:</text:p>
  <text:unordered-list text:style-name="L7">
   <text:list-item>
    <text:p text:style-name="P14">Return an empty interface that disables the corresponding functionality. </text:p>
    <text:p text:style-name="P14">[BUG641+]There&apos;s a bug in Ooo1.0/SO6.0 that this does not work, so disabling must be done explicitly (see below). It will be fixed in Ooo1.02/SO6.02.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P14">Pass the request to the next chain member, called <text:span text:style-name="Emphasis">slave dispatcher provider </text:span>described below if it is not interested in that functionality.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P14">Handle the request and return an object implementing <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatch]</text:span>. As described in the previous chapter, client objects may register at this object as status event listeners. The dispatch object returns any possible status information as long as the type of the &quot;State&quot; member in the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FeatureStateEvent]</text:span> struct has one of the expected types, otherwise the client requesting the status information can not handle it properly. The expected types must be documented together with the existing commands.For example, if a menu entry wants status information, it handles a void, that is, do nothing special or a boolean state by displaying a check mark, but nothing else. <text:line-break/>The status information could contain a <text:span text:style-name="Code (in text)">disable</text:span> directive. Note that a dispatch object returns status information immediately when a listener registers. Any , events change can be broadcasted at arbitrary points in time.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P14">The returned dispatch object is also used by client objects to dispatch the command that matches the command URL. The dispatch object receiving this request checks if the code it wants to execute is valid under the current conditions. It is not sufficient to rely on <text:span text:style-name="Code (in text)">disable</text:span> requests, because a client is not forced to register as a status listener if it wants to dispatch a request.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Emphasis">slave dispatch provider</text:span> and <text:span text:style-name="Emphasis">master dispatch provider</text:span> in the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XDispatchProviderInterceptor]</text:span> interface are a bit obscure at first. They are two pointers to chain members in both directions, next and previous, where the first and last member in the chain have special meanings and responsibilities.</text:p>
  <text:p text:style-name="Paragraph">The command dispatching passes through a chain of dispatch providers, starting at the frame. If the frame is answered to include an interceptor in this chain, the frame inserts the interceptor in the chain and passes the following chain member to the new chain member, so that calls are passed along the chain if it does not want to handle them.</text:p>
  <text:p text:style-name="Paragraph">If any interceptor is deregistered, the frame puts the lose ends together by adjusting the master and slave pointer of the chain successor and predecessor of the element that is going to be removed from the chain. All of them are interceptors, so only the last slave is a dispatch provider.</text:p>
  <text:p text:style-name="Paragraph">The frame takes care of the whole chain in the register or deregister of calls in the dispatch provider interceptor, so that the implementer of an interceptor does not have to be concerned with the chain construction.</text:p>
  <text:h text:style-name="Head 3" text:level="3"><text:alphabetical-index-mark text:string-value="intercepting context menus"/>Java Window Integration</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.awt.XToolkit;com.sun.star.awt.XWindowPeer;com.sun.star.awt.Toolkit]This section discusses experiences obtained during the development of Java-[PRODUCTNAME] integration. Usually, developers use the OfficeBean for this purpose. The following provides background information about possible strategies to reach this goal.</text:p>
  <text:p text:style-name="Paragraph">There are multiple possibilities to integrate local windows with [PRODUCTNAME] windows. This chapter shows the integration of [PRODUCTNAME] windows into a Java bean environment. Some of this information maybe helpful with other local window integrations. </text:p>
  <text:h text:style-name="Head 4" text:level="4">The <text:alphabetical-index-mark text:string-value="window handle"/>Window Handle</text:h>
  <text:p text:style-name="Paragraph">An important precondition is the existence of a system window handle of the own Java window. For this, use a <text:span text:style-name="Code (in text)">java.awt.Canvas</text:span> and the following JNI methods:</text:p>
  <text:unordered-list text:style-name="L8">
   <text:list-item>
    <text:p text:style-name="P15">a method to query the window handle (HWND on Windows, X11 ID on UNIX)</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P15">a method to identify the operating system, for example, UNIX, Windows, or Macintosh </text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">For an example, see <text:a xlink:type="simple" xlink:href="http://api.openoffice.org/source/browse/api/odk/source/bean/com/sun/star/beans/LocalOfficeWindow.java"><text:span text:style-name="www/ftp/email">bean/com/sun/star/beans/LocalOfficeWindow.java</text:span></text:a> </text:p>
  <text:p text:style-name="Paragraph">The two methods <text:span text:style-name="Code (in text)">getNativeWindow()</text:span> and <text:span text:style-name="Code (in text)">getNativeWindowSystemType()</text:span> are declared and exported, but implemented for windows in <text:a xlink:type="simple" xlink:href="http://api.openoffice.org/source/browse/api/odk/source/bean/native/win32/com_sun_star_beans_LocalOfficeWindow.c"><text:span text:style-name="www/ftp/email">bean/native/win32/com_sun_star_beans_LocalOfficeWindow.c</text:span></text:a> through JNI</text:p>
  <table:table table:name="Tabelle21" table:style-name="Tabelle21">
   <table:table-column table:style-name="Tabelle21.A"/>
   <table:table-column table:style-name="Tabelle21.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle21.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important4" text:anchor-type="paragraph" svg:x="0.12cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="36" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle21.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">It has to be a <text:span text:style-name="Code (in text)">java.awt.Cavans</text:span>. These JNI methods cannot be implemented at a Swing control, because it does not have its own system window. You can use a <text:span text:style-name="Code (in text)">java.awt.Canvas</text:span> in a Swing container environment.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph"/>
  <table:table table:name="Tabelle22" table:style-name="Tabelle22">
   <table:table-column table:style-name="Tabelle22.A"/>
   <table:table-column table:style-name="Tabelle22.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle22.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note9" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="37" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle22.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">The handle is not available before the window is visible, otherwise the JNI function does not work. One possibility is to cache the handle and set it in <text:span text:style-name="Code (in text)">show()</text:span> or <text:span text:style-name="Code (in text)">setVisible()</text:span>.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 4" text:level="4">Using the Window Handle</text:h>
  <text:p text:style-name="Paragraph">The window handle create the [PRODUCTNAME] window. There are two ways to accomplish this:</text:p>
  <text:h text:style-name="Head 5" text:level="5">A Hack</text:h>
  <text:p text:style-name="Paragraph">This option is mentioned because there are situations where this is the only feasible method. The knowledge of this option can help in other situations.</text:p>
  <text:p text:style-name="Paragraph">Add the UNO interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindowPeer]</text:span> so that it is usable for the [PRODUCTNAME] window toolkit. This interface can have an empty implementation. In <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XToolkit:createWindow](),</text:span> another interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XSystemDependentWindowPeer]</text:span> is expected that queries the HWND. Thus, <text:span text:style-name="Code (in text)">XWindowPeer</text:span> is for transporting and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XSystemDependentWindowPeer]</text:span> queries the HWND.</text:p>
  <text:p text:style-name="Paragraph">This method getsa <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindow]</text:span> as a child of your own Java window, that is used to initialize a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrame]</text:span>. [SOURCE:OfficeDev/DesktopEnvironment/FunctionHelper.java]</text:p>
  <text:p text:style-name="Code">com.sun.star.awt.XToolkit xToolkit =<text:line-break/> <text:tab-stop/> (com.sun.star.awt.XToolkit)UnoRuntime.queryInterface(<text:line-break/> <text:tab-stop/> com.sun.star.awt.XToolkit.class,<text:line-break/> <text:tab-stop/> xSMGR.createInstance(&quot;com.sun.star.awt.Toolkit&quot;));</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// this is the canvas object with the JNI methods<text:line-break/> aParentView = ... <text:line-break/> // some JNI methods cannot work before this</text:p>
  <text:p text:style-name="Code">aParentView.setVisible(true);</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// now wrap the canvas (JavaWindowPeerFake) and add the necessary interfaces</text:p>
  <text:p text:style-name="Code">com.sun.star.awt.XWindowPeer xParentPeer =<text:line-break/> <text:tab-stop/> (com.sun.star.awt.XWindowPeer)UnoRuntime.queryInterface(</text:p>
  <text:p text:style-name="Code"><text:s text:c="13"/>com.sun.star.awt.XWindowPeer.class,</text:p>
  <text:p text:style-name="Code"><text:s text:c="13"/>new JavaWindowPeerFake(aParentView));</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">com.sun.star.awt.WindowDescriptor aDescriptor = new com.sun.star.awt.WindowDescriptor();</text:p>
  <text:p text:style-name="Code">aDescriptor.Type <text:s text:c="15"/>= <text:s text:c="2"/>com.sun.star.awt.WindowClass.TOP;</text:p>
  <text:p text:style-name="Code">aDescriptor.WindowServiceName <text:s text:c="2"/>= <text:s text:c="2"/>&quot;workwindow&quot;;</text:p>
  <text:p text:style-name="Code">aDescriptor.ParentIndex <text:s text:c="8"/>= <text:s text:c="2"/>1;</text:p>
  <text:p text:style-name="Code">aDescriptor.Parent <text:s text:c="13"/>= <text:s text:c="2"/>xParentPeer;</text:p>
  <text:p text:style-name="Code">aDescriptor.Bounds <text:s text:c="13"/>= <text:s text:c="2"/>new com.sun.star.awt.Rectangle(0,0,0,0);</text:p>
  <text:p text:style-name="Code">if (aParentView.getNativeWindowSystemType()==com.sun.star.lang.SystemDependent.SYSTEM_WIN32)<text:line-break/> <text:tab-stop/> aDescriptor.WindowAttributes = com.sun.star.awt.WindowAttribute.SHOW;</text:p>
  <text:p text:style-name="Code">else</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> aDescriptor.WindowAttributes = com.sun.star.awt.WindowAttribute.SYSTEMDEPENDENT;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// now the toolkit can create an com.sun.star.awt.XWindow <text:line-break/> com.sun.star.awt.XWindowPeer xPeer = xToolkit.createWindow( aDescriptor );</text:p>
  <text:p text:style-name="Code">com.sun.star.awt.XWindow xWindow =<text:line-break/> <text:tab-stop/> (com.sun.star.awt.XWindow)UnoRuntime.queryInterface(</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> com.sun.star.awt.XWindow.class,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> xPeer);</text:p>
  <text:h text:style-name="Head 5" text:level="5">Legal Solution</text:h>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.Toolkit]</text:span> service has a method <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XSystemChildFactory]</text:span> with a method <text:span text:style-name="Code (in text)">createSystemChild()</text:span>. This accepts an <text:span text:style-name="Code (in text)">any</text:span> with a wrapped HWND or X Window ID, as long and the system type, such as Windows, Java, and UNIX directly. Here you create an <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindow]</text:span>. This method cannot be used in [PRODUCTNAME] build versions before src642, because the process ID parameter is unknown to the Java environment. Newer versions do not check this parameter, thus this new, method works.</text:p>
  <table:table table:name="Table6" table:style-name="Table6">
   <table:table-column table:style-name="Table6.A"/>
   <table:table-column table:style-name="Table6.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table6.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important5" text:anchor-type="paragraph" svg:x="0.12cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="38" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Table6.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">As a user of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XSystemChildFactory:createSystemChild]()</text:span> ensure that your client (Java application) and your <text:s/>server ([PRODUCTNAME]) use the same display. Otherwise the window handle is not interchangeable.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">[SOURCE:OfficeDev/DesktopEnvironment/FunctionHelper.java]</text:p>
  <text:p text:style-name="Code">com.sun.star.awt.XToolkit xToolkit =<text:line-break/> <text:tab-stop/> (com.sun.star.awt.XToolkit)UnoRuntime.queryInterface(</text:p>
  <text:p text:style-name="Code"><text:s text:c="13"/>com.sun.star.awt.XToolkit.class,</text:p>
  <text:p text:style-name="Code"><text:s text:c="13"/>xSMGR.createInstance(&quot;com.sun.star.awt.Toolkit&quot;));</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// this is the canvas with the JNI functions<text:line-break/> aParentView = ... <text:line-break/> // some JNI funtions will not work withouth this</text:p>
  <text:p text:style-name="Code">aParentView.setVisible(true);</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// no wrapping necessary, simply use the HWND</text:p>
  <text:p text:style-name="Code">com.sun.star.awt.XSystemChildFactory xFac = <text:line-break/> <text:tab-stop/> (com.sun.star.awt.XSystemChildFactory)UnoRuntime.queryInterface(</text:p>
  <text:p text:style-name="Code"><text:s text:c="13"/>com.sun.star.awt.XSystemChildFactory.class,</text:p>
  <text:p text:style-name="Code"><text:s text:c="13"/>xToolkit);<text:line-break/> </text:p>
  <text:p text:style-name="Code">Integer nHandle = aParentView.getHWND();</text:p>
  <text:p text:style-name="Code">byte[] lIgnoredProcessID = new byte[0];<text:line-break/> </text:p>
  <text:p text:style-name="Code">com.sun.star.awt.XWindowPeer xPeer =<text:line-break/> <text:tab-stop/> xFac.createSystemChild(<text:line-break/> <text:tab-stop/> <text:tab-stop/> (Object)nHandle,<text:line-break/> <text:tab-stop/> <text:tab-stop/> lIgnoredProcessID,<text:line-break/> <text:tab-stop/> <text:tab-stop/> com.sun.star.lang.SystemDependent.SYSTEM_WIN32);<text:line-break/> </text:p>
  <text:p text:style-name="Code">com.sun.star.awt.XWindow xWindow =<text:line-break/> <text:tab-stop/> (com.sun.star.awt.XWindow)UnoRuntime.queryInterface(</text:p>
  <text:p text:style-name="Code"><text:s text:c="13"/>com.sun.star.awt.XWindow.class,</text:p>
  <text:p text:style-name="Code"><text:s text:c="13"/>xPeer);</text:p>
  <text:p text:style-name="Paragraph"/>
  <table:table table:name="Table7" table:style-name="Table7">
   <table:table-column table:style-name="Table7.A"/>
   <table:table-column table:style-name="Table7.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table7.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note10" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="39" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Table7.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">The old method still works and can be used, but it should be considered deprecated. If in doubt, implement both and try the new method at runtime. If it does not work, try the hack.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">Resizing</text:p>
  <text:p text:style-name="Paragraph">Another difficulty is resizing the window. Normally, the child window expects resize events of the parent. The child does not resize it window, because it must know the layout of the parent window. The VCL, [PRODUCTNAME]&apos;s windowing engine creates a special system child window, thus we can resize windows.</text:p>
  <text:p text:style-name="Paragraph">The parent window can be filled &quot;full size&quot; with the child window, but only for UNIX and not for Windows. The VCL&apos;s implementation is system dependent.</text:p>
  <text:p text:style-name="Paragraph">The bean deals with this issue by adding another function to the local library. Windows adds arbitrary properties to an HWND. You can also subclass the window, that is, each Windows window has a function pointer or callback to the function that performs the event handling (WindowProcedure). Using this, it is possible to treat events by calling your own methods. This is useful whenever the window is not created by you and you need to influence the behavior of the window.</text:p>
  <text:p text:style-name="Paragraph">In this case, the Java window has not been created by us, but we need to learn about resize events to forward these to the [PRODUCTNAME] window. Look at the file <text:a xlink:type="simple" xlink:href="http://api.openoffice.org/source/browse/api/odk/source/bean/native/win32/com_sun_star_beans_LocalOfficeWindow.c"><text:span text:style-name="www/ftp/email">bean/native/win32/com_sun_star_beans_LocalOfficeWindow.c</text:span></text:a>, and find the method <text:span text:style-name="Code (in text)">OpenOfficeWndProc()</text:span>. In the first call of the JNI function <text:span text:style-name="Code (in text)">Java_com_sun_star_beans_LocalOfficeWindow_getNativeWindow()</text:span> of this file, the own handler is applied to the foreign window.</text:p>
  <table:table table:name="Table8" table:style-name="Table8">
   <table:table-column table:style-name="Table8.A"/>
   <table:table-column table:style-name="Table8.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table8.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important6" text:anchor-type="paragraph" svg:x="0.12cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="40" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Table8.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">The old bean implementation had a bug that is fixed in newer versions. If you did not check if the function pointer was set, and called <text:span text:style-name="Code (in text)">Java_com_sun_star_beans_LocalOfficeWindow_getNativeWindow()</text:span> multiple times, you created a chain of functions that called each other with the result of an endless recursion leading to a stack overflow. If the own handler is already registered, it is now marked in one of the previously mentioned properties registered with an HWND:</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">In the future, VCL will do this sub-classing by itself, even on Windows. This will lead to equal behavior between Windows and UNIX.</text:p>
  <text:p text:style-name="Paragraph">The initial size of the window is a related problem. If a canvas is connected with a [PRODUCTNAME] window, set both sizes to a valid, positive value, otherwise the [PRODUCTNAME] window will not be visible. If you are using a non-product build of OpenOffice.org, you see an assertion failed &quot;small world isn&apos;t it&quot;. This might change when the sub-classing is done by VCL in the future.</text:p>
  <text:p text:style-name="Paragraph">There is still one unresolved problem. The code mentioned above works with Java 1.3, but not for Java 1.4. There, the behavior of windows is changed. Where Java 1.3 sends real resize events from the own <text:span text:style-name="Code (in text)">WindowProc</text:span>, Java 1.4 does a re-parenting. The canvas window is destroyed and created again. This leads to an empty window with no [PRODUCTNAME] window. This problem is under investigation.</text:p>
  <text:h text:style-name="Head 4" text:level="4">More Remote Problems</text:h>
  <text:p text:style-name="Paragraph">There are additional difficulties to window handles and local window handles. Some personal experiences of one of the [PRODUCTNAME] authors are provided:</text:p>
  <text:unordered-list text:style-name="L9">
   <text:list-item>
    <text:p text:style-name="P16">Listeners in Java should be implemented in a thread. The problem is that SolarMutex, a mutex semaphore of [PRODUCTNAME], one-way UNO methods and the global Java GUI thread do not work together.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P16">The Java applet should release its listeners. If they stay in the containers of [PRODUCTNAME] after the Java process ends, UNO throws a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.DisposedException]</text:span>, which are not caught correctly. Java does not know destructors, therefore it is a difficult to follow this advice. One possibility is to register a <text:span text:style-name="Code (in text)">Thread</text:span> object at <text:span text:style-name="Code (in text)">java.Runtime</text:span> as a <text:span text:style-name="Code (in text)">ShutDownHook</text:span>. This is called even when CTRL-C is pressed on the command line where you can deregister the listeners. Because listeners are threads, there is some effort.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:h text:style-name="Head 2" text:level="2">Common Application Features</text:h>
  <text:h text:style-name="Head 3" text:level="3"><text:alphabetical-index-mark text:string-value="clipboard"/>Clipboard</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.datatransfer.clipboard.SystemClipboard;com.sun.star.datatransfer.clipboard.XClipboard]This chapter introduces the usage of the clipboard service [IDL:com.sun.star.datatransfer.clipboard.SystemClipboard]. The clipboard serves as a data exchange mechanism between [PRODUCTNAME] custom components, or between custom components and external applications. It is usually used for copy and paste operations. </text:p>
  <table:table table:name="Tabelle4" table:style-name="Tabelle4">
   <table:table-column table:style-name="Tabelle4.A"/>
   <table:table-column table:style-name="Tabelle4.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle4.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note11" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="41" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle4.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">Note: The architecture of the [PRODUCTNAME] clipboard service is strongly conforming to the Java clipboard specification.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">Different platforms use different methods for describing data formats available on the clipboard. Under Windows, clipboard formats are identified by unique numbers, for example, under X11, a clipboard format is identified by an ATOM. To have a platform independent mechanism, the [PRODUCTNAME] clipboard supports the concept of DataFlavors. Each instance of a DataFlavor represents the opaque concept of a data format as it would appear on a clipboard. A DataFlavor defined in <text:span text:style-name="Code (in text)">[IDL:com.sun.star.datatransfer.DataFlavor]</text:span> has three members:</text:p>
  <table:table table:name="Tabelle57" table:style-name="Tabelle57">
   <table:table-column table:style-name="Tabelle57.A"/>
   <table:table-column table:style-name="Tabelle57.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle57.A1" table:number-columns-spanned="2" table:value-type="string">
      <text:p text:style-name="TableHead">Members of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.datatransfer.DataFlavor]</text:span></text:p>
     </table:table-cell>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle57.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.datatransfer.DataFlavor:MimeType]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle57.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">A string that describes the data. This string must conform to Rfc2045 and Rfc2046 with one exception. The quoted parameter may contain spaces. In section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.Common.Clipboard.Formats]</text:span>, a list of common DataFlavors supported by [PRODUCTNAME] is provided. </text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle57.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.datatransfer.DataFlavor:HumanPresentableName]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle57.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">The human presentable name for the data format that this DataFlavor represents.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle57.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.datatransfer.DataFlavor:DataType]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle57.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">The type of the data. In section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.Common.Clipboard.Formats]</text:span> there is a list of common DataFlavors supported by [PRODUCTNAME] and their corresponding <text:span text:style-name="Code (in text)">DataType</text:span>.</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">The carrier of the clipboard data is a transferable object that implements the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.datatransfer.XTransferable]</text:span>. A transferable object offers one or many different DataFlavors. </text:p>
  <text:h text:style-name="Head 4" text:level="4">Using the Clipboard</text:h>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="pasting data" text:key1="clipboard"/>Pasting Data</text:h>
  <text:p text:style-name="Paragraph">The following Java example demonstrates the use of the clipboard service to paste from the clipboard. [SOURCE:OfficeDev/Clipboard/Clipboard.java]</text:p>
  <text:p text:style-name="Code">import com.sun.star.datatransfer.*;<text:line-break/>import com.sun.star.datatransfer.clipboard.*;<text:line-break/>import com.sun.star.uno.AnyConverter;</text:p>
  <text:p text:style-name="Code">...</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// instantiate the clipboard service</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">Object oClipboard =</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> xMultiComponentFactory.createInstanceWithContext(</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> &quot;com.sun.star.datatransfer.clipboard.SystemClipboard&quot;, </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> xComponentContext);</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> </text:p>
  <text:p text:style-name="Code">// query for the interface XClipboard </text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">XClipboard xClipboard = (XClipboard)</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> UnoRuntime.queryInterface(XClipboard.class, oClipboard);</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">//---------------------------------------------------</text:p>
  <text:p text:style-name="Code">// get a list of formats currently on the clipboard</text:p>
  <text:p text:style-name="Code">//---------------------------------------------------</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">XTransferable xTransferable = xClipboard.getContents();</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">DataFlavor[] aDflvArr = xTransferable.getTransferDataFlavors();</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// print all available formats</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">System.out.println(&quot;Reading the clipboard...&quot;);</text:p>
  <text:p text:style-name="Code">System.out.println(&quot;Available clipboard formats:&quot;);</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> </text:p>
  <text:p text:style-name="Code">DataFlavor aUniFlv = null;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">for (int i=0;i&lt;aDflvArr.length;i++)</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> System.out.println( &quot;MimeType: &quot; + </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> aDflvArr[i].MimeType + </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> &quot; HumanPresentableName: &quot; + </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> aDflvArr[i].HumanPresentableName );<text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> </text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:tab-stop/> // if there is the format unicode text on the clipboard save the</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> // corresponding DataFlavor so that we can later output the string</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:tab-stop/> if (aDflvArr[i].MimeType.equals(&quot;text/plain;charset=utf-16&quot;))</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> {<text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> aUniFlv = aDflvArr[i];</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> }</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> </text:p>
  <text:p text:style-name="Code">System.out.println(&quot;&quot;);</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">try<text:tab-stop/> </text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> if (aUniFlv != null)</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> {</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> System.out.println(&quot;Unicode text on the clipboard...&quot;);</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> Object aData = xTransferable.getTransferData(aUniFlv);<text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> System.out.println(AnyConverter.toString(aData));</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> }</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Code">catch(UnsupportedFlavorException ex)</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> System.err.println( &quot;Requested format is not available&quot; );</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">...</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="copying data" text:key1="clipboard"/>Copying Data</text:h>
  <text:p text:style-name="Paragraph">To copy to the clipboard, implement a transferable object that supports the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.datatransfer.XTransferable]</text:span>. The transferable object offers arbitrary formats described by DataFlavors. </text:p>
  <text:p text:style-name="Paragraph">The following Java example demonstrates the implementation of a transferable object. This transferable object contains only one format, unicode text. [SOURCE:OfficeDev/Clipboard/TextTransferable.java]</text:p>
  <text:p text:style-name="Code">//---------------------------------------<text:line-break/> // A simple transferable containing only<text:line-break/> // one format, unicode text<text:line-break/> //---------------------------------------<text:line-break/> </text:p>
  <text:p text:style-name="Code">public class TextTransferable implements XTransferable<text:line-break/> {<text:line-break/> <text:tab-stop/> public TextTransferable(String aText)<text:line-break/> <text:tab-stop/> {<text:line-break/> <text:tab-stop/> <text:tab-stop/> text = aText;<text:line-break/> <text:tab-stop/> }<text:line-break/> <text:line-break/> <text:tab-stop/> // XTransferable methods</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> public Object getTransferData(DataFlavor aFlavor) throws UnsupportedFlavorException<text:line-break/> <text:tab-stop/> {<text:line-break/> <text:tab-stop/> <text:tab-stop/> if ( !aFlavor.MimeType.equalsIgnoreCase( UNICODE_CONTENT_TYPE ) )<text:line-break/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> throw new UnsupportedFlavorException();</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> return text;<text:line-break/> <text:tab-stop/> }</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> public DataFlavor[] getTransferDataFlavors()<text:line-break/> <text:tab-stop/> {<text:line-break/> <text:tab-stop/> <text:tab-stop/> DataFlavor[] adf = new DataFlavor[1];<text:line-break/> <text:tab-stop/> <text:tab-stop/> DataFlavor uniflv = new DataFlavor(<text:line-break/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> UNICODE_CONTENT_TYPE, <text:line-break/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> &quot;Unicode Text&quot;, <text:line-break/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> new Type(String.class) );</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> adf[0] = uniflv;<text:line-break/> <text:line-break/> <text:tab-stop/> <text:tab-stop/> return adf;<text:line-break/> <text:tab-stop/> }</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> public boolean isDataFlavorSupported(DataFlavor aFlavor)<text:line-break/> <text:tab-stop/> {<text:line-break/> <text:tab-stop/> <text:tab-stop/> return aFlavor.MimeType.equalsIgnoreCase(UNICODE_CONTENT_TYPE);<text:line-break/> <text:tab-stop/> }<text:line-break/> <text:line-break/> <text:tab-stop/> // members<text:line-break/> <text:tab-stop/> private final String text;<text:line-break/> <text:tab-stop/> private final String UNICODE_CONTENT_TYPE = &quot;text/plain;charset=utf-16&quot;;<text:line-break/> }</text:p>
  <text:p text:style-name="Paragraph">Everyone providing data to the clipboard becomes a clipboard owner. A clipboard owner is an object that implements the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.datatransfer.clipboard.XClipboardOwner]</text:span>. If the current clipboard owner loses ownership of the clipboard, it receives a notification from the clipboard service. The clipboard owner can use this notification to destroy the transferable object that was formerly on the clipboard. If the transferable object is a self-destroying object, destroying clears all references to the object. If the clipboard service is the last client, clearing the reference to the transferable object leads to destruction.</text:p>
  <text:p text:style-name="Paragraph">All data types except for text have to be transferred as byte array. The next example shows this for a bitmap.</text:p>
  <text:p text:style-name="Code">public class BmpTransferable implements XTransferable</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>public BmpTransferable(byte[] aBitmap)</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>mBitmapData = aBitmap;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// XTransferable methods</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>public Object getTransferData(DataFlavor aFlavor) throws UnsupportedFlavorException</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>if ( !aFlavor.MimeType.equalsIgnoreCase(BITMAP_CONTENT_TYPE ) )</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>throw new UnsupportedFlavorException();</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="8"/>return mBitmapData;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>public DataFlavor[] getTransferDataFlavors()</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>DataFlavor[] adf = new DataFlavor[1];</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>DataFlavor bmpflv= new DataFlavor(</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>BITMAP_CONTENT_TYPE,</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>&quot;Bitmap&quot;,</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>new Type(byte[].class) );</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>adf[0] = bmpflv;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="8"/>return adf;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>public boolean isDataFlavorSupported(DataFlavor aFlavor)</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>return aFlavor.MimeType.equalsIgnoreCase(BITMAP_CONTENT_TYPE);</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// members</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>private byte[] mBitmapData;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>private final String BITMAP_CONTENT_TYPE = &quot;application/x-openoffice;windows_formatname=&quot;Bitmap&quot;&quot;;</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">The following Java example shows an implementation of the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.datatransfer.clipboard.XClipboardOwner]</text:span>. [SOURCE:OfficeDev/Clipboard/ClipboardOwner.java]</text:p>
  <text:p text:style-name="Code">...</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">//----------------------------------------</text:p>
  <text:p text:style-name="Code">// A simple clipboard owner implementation</text:p>
  <text:p text:style-name="Code">//----------------------------------------</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">public class ClipboardOwner implements XClipboardOwner</text:p>
  <text:p text:style-name="Code">{ </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> public void lostOwnership( </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> XClipboard xClipboard, </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> XTransferable xTransferable )</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> {</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> System.out.println(&quot;&quot;);</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> System.out.println( &quot;Lost clipboard ownership...&quot; );</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> System.out.println(&quot;&quot;);</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> isowner = false;</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> }</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:tab-stop/> public boolean isClipboardOwner()</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> {</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> return isowner;</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> }</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:tab-stop/> private boolean isowner = true;</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">...</text:p>
  <text:p text:style-name="Paragraph">The last two samples combined show how it is possible to copy data to the clipboard as demonstrated in the following Java example. [SOURCE:OfficeDev/Clipboard/Clipboard.java]</text:p>
  <text:p text:style-name="Code">import com.sun.star.datatransfer.*;<text:line-break/> import com.sun.star.datatransfer.clipboard.*;<text:line-break/> import com.sun.star.uno.AnyConverter;</text:p>
  <text:p text:style-name="Code">...<text:line-break/> </text:p>
  <text:p text:style-name="Code">// instantiate the clipboard service</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">Object oClipboard =</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> xMultiComponentFactory.createInstanceWithContext(</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> &quot;com.sun.star.datatransfer.clipboard.SystemClipboard&quot;, </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> xComponentContext);</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> </text:p>
  <text:p text:style-name="Code">// query for the interface XClipboard <text:line-break/> </text:p>
  <text:p text:style-name="Code">XClipboard xClipboard = (Xclipboard)UnoRuntime.queryInterface(XClipboard.class, oClipboard);</text:p>
  <text:p text:style-name="Code">//---------------------------------------------------<text:line-break/> // becoming a clipboard owner<text:line-break/> //---------------------------------------------------</text:p>
  <text:p text:style-name="Code">System.out.println(&quot;Becoming a clipboard owner...&quot;);<text:line-break/> System.out.println(&quot;&quot;);</text:p>
  <text:p text:style-name="Code">ClipboardOwner aClipOwner = new ClipboardOwner();<text:line-break/> <text:line-break/> xClipboard.setContents(new TextTransferable(&quot;Hello World!&quot;), aClipOwner);</text:p>
  <text:p text:style-name="Code">while (aClipOwner.isClipboardOwner())<text:line-break/> {<text:line-break/> <text:tab-stop/> System.out.println(&quot;Still clipboard owner...&quot;);<text:line-break/> <text:tab-stop/> Thread.sleep(1000);<text:line-break/> }</text:p>
  <text:p text:style-name="Code">...</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="becoming a clipboard viewer" text:key1="clipboard"/>Becoming a Clipboard Viewer</text:h>
  <text:p text:style-name="Paragraph">It is useful to listen to clipboard changes. User interface controls may change their visible appearance depending on the current clipboard content. To avoid polling on the clipboard, the clipboard service supports an asynchronous notification mechanism. Every client that needs notification about clipboard changes implements the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.datatransfer.clipboard.XClipboardListener]</text:span> and registers as a clipboard listener.<text:line-break/>Implementing the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.datatransfer.clipboard.XClipboardListener]</text:span> is simple as the next Java example demonstrates. [SOURCE:OfficeDev/Clipboard/ClipboardListener.java]</text:p>
  <text:p text:style-name="Code">//----------------------------<text:line-break/> // A simple clipboard listener<text:line-break/> //----------------------------</text:p>
  <text:p text:style-name="Code">public class ClipboardListener implements XClipboardListener<text:line-break/> { <text:line-break/> <text:tab-stop/> public void disposing(EventObject event)<text:line-break/> <text:tab-stop/> {<text:line-break/> <text:tab-stop/> }<text:line-break/> <text:line-break/> <text:tab-stop/> public void changedContents(ClipboardEvent event)<text:line-break/> <text:tab-stop/> {<text:line-break/> <text:tab-stop/> <text:tab-stop/> System.out.println(&quot;&quot;);<text:line-break/> <text:tab-stop/> <text:tab-stop/> System.out.println(&quot;Clipboard content has changed!&quot;);<text:line-break/> <text:tab-stop/> <text:tab-stop/> System.out.println(&quot;&quot;);<text:line-break/> <text:tab-stop/> }<text:line-break/> }</text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="CODE"/></text:p>
  <text:p text:style-name="Paragraph">If the interface was implemented by the object, it registers as a clipboard listener. A clipboard listener deregisters if clipboard notifications are no longer necessary. Both aspects are demonstrated in the next example. [SOURCE:OfficeDev/Clipboard/Clipboard.java]</text:p>
  <text:p text:style-name="Code">// instantiate the clipboard service</text:p>
  <text:p text:style-name="Code">Object oClipboard =<text:line-break/> <text:tab-stop/> xMultiComponentFactory.createInstanceWithContext(<text:line-break/> <text:tab-stop/> &quot;com.sun.star.datatransfer.clipboard.SystemClipboard&quot;, <text:line-break/> <text:tab-stop/> xComponentContext);</text:p>
  <text:p text:style-name="Code">// query for the interface XClipboard </text:p>
  <text:p text:style-name="Code">XClipboard xClipboard = (XClipboard)<text:line-break/> <text:tab-stop/> UnoRuntime.queryInterface(XClipboard.class, oClipboard);</text:p>
  <text:p text:style-name="Code">//---------------------------------------------------<text:line-break/> // registering as clipboard listener<text:line-break/> //---------------------------------------------------</text:p>
  <text:p text:style-name="Code">XClipboardNotifier xClipNotifier = (XClipboardNotifier)<text:line-break/> <text:tab-stop/> UnoRuntime.queryInterface(XClipboardNotifier.class, oClipboard);</text:p>
  <text:p text:style-name="Code">ClipboardListener aClipListener= new ClipboardListener();</text:p>
  <text:p text:style-name="Code">xClipNotifier.addClipboardListener(aClipListener);</text:p>
  <text:p text:style-name="Code">...</text:p>
  <text:p text:style-name="Code">//---------------------------------------------------<text:line-break/> // unregistering as clipboard listener<text:line-break/> //---------------------------------------------------</text:p>
  <text:p text:style-name="Code">xClipNotifier.removeClipboardListener(aClipListener);</text:p>
  <text:p text:style-name="Code">...</text:p>
  <text:h text:style-name="Head 4" text:level="4">[PRODUCTNAME] Clipboard <text:alphabetical-index-mark text:string-value="data formats" text:key1="clipboard"/>Data Formats</text:h>
  <text:p text:style-name="Paragraph">This section describes common clipboard data formats that [PRODUCTNAME] supports and their corresponding DataType.<text:line-break/>As previously mentioned, data formats are described by DataFlavors. The important characteristics of a DataFlavor are the MimeType and DataType. The [PRODUCTNAME] clipboard service uses a standard MimeType for different data formats if there is one registered at <text:a xlink:type="simple" xlink:href="http://www.iana.org/">Iana</text:a>. For example, for HTML text, the MimeType <text:span text:style-name="Code (in text)">&quot;text/html&quot;</text:span> is used, Rich Text uses the MimeType <text:span text:style-name="Code (in text)">&quot;text/richtext&quot;,</text:span> and text uses <text:span text:style-name="Code (in text)">&quot;text/plain&quot;</text:span>. If there is no corresponding MimeType registered at <text:a xlink:type="simple" xlink:href="http://www.iana.org/">Iana,</text:a> [PRODUCTNAME] defines a private MimeType. Private [PRODUCTNAME] MimeType always has the MimeType <text:span text:style-name="Code (in text)">&quot;application/x-openoffice&quot;</text:span>. Each private [PRODUCTNAME] MimeType has a parameter &quot;windows_formatname&quot; identifying the clipboard format name used under Windows. The used Windows format names are the format names used with older [PRODUCTNAME] versions. Common Windows format names are &quot;Bitmap&quot;, <text:span text:style-name="Code (in text)">&quot;GDIMetaFile&quot;</text:span>, <text:span text:style-name="Code (in text)">&quot;FileName&quot;</text:span>, <text:span text:style-name="Code (in text)">&quot;FileList&quot;</text:span>, and <text:span text:style-name="Code (in text)">&quot;DIF&quot;</text:span>. <text:line-break/>The DataType of a DataFlavor identifies how the data are exchanged. There are only two DataTypes that can be used. The DataType for Unicode text is a string, and in Java, <text:span text:style-name="Code (in text)">String.class</text:span>, For all other data formats, the DataType is a sequence of bytes in Java <text:span text:style-name="Code (in text)">byte[].class</text:span>.</text:p>
  <text:p text:style-name="Paragraph">The following table lists common data formats, and their corresponding MimeType and DataTypes:</text:p>
  <table:table table:name="Tabelle5" table:style-name="Tabelle5">
   <table:table-column table:style-name="Tabelle5.A"/>
   <table:table-column table:style-name="Tabelle5.B"/>
   <table:table-column table:style-name="Tabelle5.C"/>
   <table:table-column table:style-name="Tabelle5.D"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle5.A1" table:value-type="string">
      <text:p text:style-name="P17">Form</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle5.A1" table:value-type="string">
      <text:p text:style-name="P17">MimeType</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle5.A1" table:value-type="string">
      <text:p text:style-name="P17">DataType (in Java)</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle5.D1" table:value-type="string">
      <text:p text:style-name="P17">Description</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle5.A2" table:value-type="string">
     <text:p text:style-name="P18">Unicode Text</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle5.A2" table:value-type="string">
     <text:p text:style-name="P18">text/plain;charset=utf-16</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle5.A2" table:value-type="string">
     <text:p text:style-name="P18">String.class</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle5.D2" table:value-type="string">
     <text:p text:style-name="P18">Unicode Text</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle5.A2" table:value-type="string">
     <text:p text:style-name="P18">Richtext</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle5.A2" table:value-type="string">
     <text:p text:style-name="P18">text/richtext</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle5.A2" table:value-type="string">
     <text:p text:style-name="P18">byte[].class</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle5.D2" table:value-type="string">
     <text:p text:style-name="P18">Richtext</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle5.A2" table:value-type="string">
     <text:p text:style-name="P18">Bitmap</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle5.A2" table:value-type="string">
     <text:p text:style-name="P18">application/x-openoffice;windows_formatname=&quot;Bitmap&quot;</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle5.A2" table:value-type="string">
     <text:p text:style-name="P18">byte[].class</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle5.D2" table:value-type="string">
     <text:p text:style-name="P18">A bitmap in OpenOffice bitmap format.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle5.A2" table:value-type="string">
     <text:p text:style-name="P18">HTML Text</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle5.A2" table:value-type="string">
     <text:p text:style-name="P18">text/html</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle5.A2" table:value-type="string">
     <text:p text:style-name="P18">byte[].class</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle5.D2" table:value-type="string">
     <text:p text:style-name="P18">HTML Text</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:h text:style-name="Head 3" text:level="3"><text:alphabetical-index-mark text:string-value="internationalization"/>Internationalization</text:h>
  <text:p text:style-name="Paragraph">The I18N framework provides interfaces to access <text:alphabetical-index-mark text:string-value="locale dependent data"/>locale-dependent data (e.g. calendar data, currency) and methods (e.g. collation and transliteration). The I18N framework offers full-featured internationalization functionality that covers a range of geographic locations that include South Asia (China, Japan, and Korea, or CJK), Europe, Middle East (Hebrew, Arabic) and South-East Asia (Thai, Indian). Also, the I18N framework builds on the component model UNO, thus making the addition of new internationalization components easy.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Introduction</text:h>
  <text:p text:style-name="Paragraph">The I18N framework contains a lot of data and many interfaces and methods not important to developers of external code using the [PRODUCTNAME] API, but only for developers of the [PRODUCTNAME] application itself. This chapter is split into two parts, one that gives a short overview on using the API and is restricted to what is useful to external developers, and a second part that focuses on how to implement a new locale supporting the API (Note that this section <text:span text:style-name="T14">does not cover</text:span> how to translate and localize the [PRODUCTNAME] resources).</text:p>
  <text:h text:style-name="Head 4" text:level="4">Overview and Using the API</text:h>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark44271916"/>XLocaleData<text:alphabetical-index-mark-end text:id="IMark44271916"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XLocaleData]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XLocaleData]</text:span> interface provides access to locale-specific information, such as decimal separators, group (thousands) separators, currency information, calendar data, and number format codes. No further functionality is discussed.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark43887388"/>XCharacterClassification<text:alphabetical-index-mark-end text:id="IMark43887388"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XCharacterClassification]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XCharacterClassification]</text:span> interface is used to determine the <text:alphabetical-index-mark text:string-value="unicode type"/>Unicode type of a character (such as uppercase, lowercase, letter, digit, punctuation) or the <text:alphabetical-index-mark-start text:id="IMark44271916"/>script type<text:alphabetical-index-mark-end text:id="IMark44271916"/>. It also provides methods to perform simple uppercase to lowercase and lowercase to upper <text:s/>case conversions that are locale-dependent but do not need real transliteration. An example of locale-dependent <text:alphabetical-index-mark-start text:id="IMark43887388"/>case conversion<text:alphabetical-index-mark-end text:id="IMark43887388"/> is the Turkish lowercase <text:span text:style-name="T15">i</text:span> to uppercase <text:span text:style-name="T15">I-dot</text:span> and lowercase <text:span text:style-name="T15">i-dotless</text:span> to uppercase <text:span text:style-name="T15">I</text:span> conversion, as opposed to the western lowercase <text:span text:style-name="T15">i</text:span> to uppercase <text:span text:style-name="T15">I</text:span> conversion.</text:p>
  <table:table table:name="Tabelle26" table:style-name="Tabelle26">
   <table:table-column table:style-name="Tabelle26.A"/>
   <table:table-column table:style-name="Tabelle26.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle26.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important7" text:anchor-type="paragraph" svg:x="0.071cm" svg:y="0.03cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="76" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle26.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">There was a bug in [PRODUCTNAME] [OO1.0] that prevents this special example of Turkish case conversion to work properly. The issue is resolved for [PRODUCTNAME] [OO1.1].</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">Another provided functionality is parsing methods to isolate and determine identifiers, numbers, and quoted strings in a given string. See the description of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XCharacterClassification]</text:span> methods <text:span text:style-name="T16">parseAnyToken()</text:span> and <text:span text:style-name="T16">parsePredefinedToken()</text:span>. The parser uses <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XLocaleData]</text:span> to obtain the locale-dependent decimal and group separators.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark43887388"/>XCalendar<text:alphabetical-index-mark-end text:id="IMark43887388"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XCalendar]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XCalendar]</text:span> interface enables the application to use any calendar available for a given locale, not being restricted to the <text:alphabetical-index-mark-start text:id="IMark44271916"/>Gregorian calendar<text:alphabetical-index-mark-end text:id="IMark44271916"/>. You may query the interface for the available calendars for a given locale with method <text:span text:style-name="Code (in text)">getAllCalendars()</text:span> and load one of the available calendars using method <text:span text:style-name="Code (in text)">loadCalendar()</text:span>, or you may use the default calendar loaded with method <text:span text:style-name="Code (in text)">loadDefaultCalendar()</text:span>. Normally, a Gregorian calendar is available with the name <text:span text:style-name="Code (in text)">&quot;gregorian&quot;</text:span> in the <text:span text:style-name="Code (in text)">Name</text:span> field of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.Calendar]</text:span> even if the default calendar is not a Gregorian calendar, but this is not mandatory. Available calendars are obtained through the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XLocaleData]</text:span> interface.</text:p>
  <table:table table:name="Tabelle27" table:style-name="Tabelle27">
   <table:table-column table:style-name="Tabelle27.A"/>
   <table:table-column table:style-name="Tabelle27.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle27.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important8" text:anchor-type="paragraph" svg:x="0.12cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="77" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle27.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">You <text:span text:style-name="Emphasis">must</text:span> initially load a calendar before using any of the interface methods that perform calendar calculations.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark44271916"/>XExtendedCalendar<text:alphabetical-index-mark-end text:id="IMark44271916"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XExtendedCalendar]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XExtendedCalendar]</text:span> interface was introduced with [PRODUCTNAME] [OO1.1] and provides additional functionality to display locale and calendar dependent calendar values. This interface is derived from <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XCalendar]</text:span>. The interface provides a method to obtain display strings of date parts for specific calendars of a specific locale.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark43887388"/>XNumberFormatCode<text:alphabetical-index-mark-end text:id="IMark43887388"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XNumberFormatCode]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XNumberFormatCode]</text:span> interface provides access to predefined number format codes for a given locale, which in turn are obtained through the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XLocaleData]</text:span> interface. Normally you do not need to <text:bookmark text:name="2botherwithit"/>bother with it because the application&apos;s number formatter <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.Common.NumberFormats]</text:span> manages the codes. It just might serve to get the available codes and determine default format codes of a specific category.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark43875748"/>XNativeNumberSupplier<text:alphabetical-index-mark-end text:id="IMark43875748"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XNativeNumberSupplier]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XNativeNumberSupplier]</text:span> interface was introduced with [PRODUCTNAME] [OO1.1] and provides functionality to convert between ASCII Arabic digits/numeric strings and native numeral strings, such as Korean number symbols.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark44271916"/>XCollator<text:alphabetical-index-mark-end text:id="IMark44271916"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XCollator]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XCollator]</text:span> interface provides locale-dependent collation algorithms for sorting purposes. There is at least one collator algorithm available per locale, though there may be more than one, for example <text:span text:style-name="Code (in text)">dictionary</text:span> and <text:span text:style-name="Code (in text)">telephone</text:span> algorithms, or <text:span text:style-name="Code (in text)">stroke</text:span>, <text:span text:style-name="Code (in text)">radical</text:span>, <text:span text:style-name="Code (in text)">pinyin</text:span> in Chinese locales. There is always one default algorithm for each locale that may be loaded using method <text:span text:style-name="Code (in text)">loadDefaultCollator()</text:span>, and all available algorithms may be queried with method <text:span text:style-name="Code (in text)">listCollatorAlgorithms()</text:span> of those a selected algorithm may be loaded using <text:span text:style-name="Code (in text)">loadCollatorAlgorithm()</text:span>. The available collator implementations and options are obtained through the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XLocaleData]</text:span> interface.</text:p>
  <table:table table:name="Tabelle28" table:style-name="Tabelle28">
   <table:table-column table:style-name="Tabelle28.A"/>
   <table:table-column table:style-name="Tabelle28.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle28.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important9" text:anchor-type="paragraph" svg:x="0.071cm" svg:y="0.03cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="72" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle28.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">You <text:span text:style-name="Emphasis">must</text:span> initially load an algorithm prior to using any of the <text:span text:style-name="Code (in text)">compare...()</text:span> methods, otherwise the result will be 0 indicating any comparison being equal.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <table:table table:name="Tabelle61" table:style-name="Tabelle61">
   <table:table-column table:style-name="Tabelle61.A"/>
   <table:table-column table:style-name="Tabelle61.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle61.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note12" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="73" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle61.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">Since collation may be a very time consuming procedure, use it only for user-visible data, for example for sorted lists. If, for example, you only need a case insensitive comparison without displaying the results to the user, use the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XTransliteration]</text:span> interface instead.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark43887388"/>XTransliteration<text:alphabetical-index-mark-end text:id="IMark43887388"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XTransliteration]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XTransliteration]</text:span> interface provides methods to perform locale-dependent character conversions, such as case conversions, conversions between <text:alphabetical-index-mark-start text:id="IMark43875748"/>Hiragana<text:alphabetical-index-mark-end text:id="IMark43875748"/> and Katakana, and Half-width and Full-width. Transliteration is also used by the collators if, for example, a case insensitive sort is to be performed. The available transliteration implementations are obtained through the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XLocaleData]</text:span> interface.</text:p>
  <table:table table:name="Tabelle62" table:style-name="Tabelle62">
   <table:table-column table:style-name="Tabelle62.A"/>
   <table:table-column table:style-name="Tabelle62.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle62.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important10" text:anchor-type="paragraph" svg:x="0.071cm" svg:y="0.03cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="75" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle62.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">You <text:span text:style-name="Emphasis">must</text:span> initially load a transliteration module prior to using any of the transliterating or comparing methods, otherwise the result is unpredictable.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <table:table table:name="Tabelle63" table:style-name="Tabelle63">
   <table:table-column table:style-name="Tabelle63.A"/>
   <table:table-column table:style-name="Tabelle63.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle63.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note13" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="74" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle63.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">If you only need to determine if two strings are equal for a specific transliteration (for example a case insensitive comparison) use the <text:span text:style-name="Code (in text)">equals()</text:span> method instead of the <text:span text:style-name="Code (in text)">compare...()</text:span> methods, it may have a faster implementation.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark44271916"/>XBreakIterator<text:alphabetical-index-mark-end text:id="IMark44271916"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XBreakIterator]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XBreakIterator]</text:span> interface may be used to traverse the text in character mode or word mode, to jump to the beginning or to the end of a sentence, to find the beginning or the end of a given script type, and, as the name suggests, to determine a line break position, optionally using a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XHyphenator]</text:span>. The service implementation obtains lists of forbidden characters (characters that are not allowed at the beginning or the end of a line in certain locales) through the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XLocaleData]</text:span> interface. The <text:span text:style-name="Code (in text)">XBreakIterator</text:span> interface also offers methods to determine the script type of a character or to find the beginning or end of a script type along a sequence of characters.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark43887388"/>XIndexEntrySupplier<text:alphabetical-index-mark-end text:id="IMark43887388"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XIndexEntrySupplier]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XIndexEntrySupplier]</text:span> interface may be used to obtain information on <text:alphabetical-index-mark-start text:id="IMark43875748"/>index entries<text:alphabetical-index-mark-end text:id="IMark43875748"/> to generate a &quot;table of alphabetical index&quot; for a given locale. Since not all languages are alphabetical in the western sense (for example, CJK languages), different methods are needed.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark44271916"/>XExtendedIndexEntrySupplier<text:alphabetical-index-mark-end text:id="IMark44271916"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XExtendedIndexEntrySupplier]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XExtendedIndexEntrySupplier]</text:span> interface was introduced with [PRODUCTNAME] [OO1.1] and provides additional functionality to generate index entries for languages that need phonetically sorted indexes, such as Japanese. The interface is derived from <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XIndexEntrySupplier]</text:span>.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark43887388"/>XInputSequenceChecker<text:alphabetical-index-mark-end text:id="IMark43887388"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XInputSequenceChecker]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XInputSequenceChecker]</text:span> interface was introduced with [PRODUCTNAME] [OO1.1] and provides input sequence checking for <text:alphabetical-index-mark-start text:id="IMark43875748"/>Thai<text:alphabetical-index-mark-end text:id="IMark43875748"/> and <text:alphabetical-index-mark-start text:id="IMark44271916"/>Hindi<text:alphabetical-index-mark-end text:id="IMark44271916"/>.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Implementing a New Locale</text:h>
  <table:table table:name="Tabelle64" table:style-name="Tabelle64">
   <table:table-column table:style-name="Tabelle64.A"/>
   <table:table-column table:style-name="Tabelle64.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle64.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important11" text:anchor-type="paragraph" svg:x="0.12cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="71" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle64.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">The procedures, directory layout, and file contents described here reflect the structure of the i18npool module as of [PRODUCTNAME] version [OO1.1], and <text:span text:style-name="Emphasis">not</text:span> the i18n module for [PRODUCTNAME] [OO1.0].</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark44271916"/>XLocaleData<text:alphabetical-index-mark-end text:id="IMark44271916"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XLocaleData]One of the most important tasks in implementing a new locale is to define all the locale data to be used, listed in the following table as types returned by the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XLocaleData]</text:span> interface methods:</text:p>
  <table:table table:name="Tabelle65" table:style-name="Tabelle65">
   <table:table-column table:style-name="Tabelle65.A"/>
   <table:table-column table:style-name="Tabelle65.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle65.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Type</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle65.B1" table:value-type="string">
      <text:p text:style-name="TableHead">Count</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle65.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">[IDL:com.sun.star.i18n.LanguageCountryInfo]</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle65.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">exactly 1</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle65.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">[IDL:com.sun.star.i18n.LocaleDataItem]</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle65.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">exactly 1</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle65.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">sequence&lt;[IDL:com.sun.star.i18n.Calendar]&gt;</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle65.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">1 or more</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle65.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">sequence&lt;[IDL:com.sun.star.i18n.Currency]&gt;</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle65.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">1 or more</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle65.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">sequence&lt;[IDL:com.sun.star.i18n.FormatElement]&gt;</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle65.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">at least all [IDL:com.sun.star.i18n.NumberFormatIndex] format codes (see below)</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle65.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">sequence&lt;[IDL:com.sun.star.i18n.Implementation]&gt; collator implementations</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle65.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">0 or more, if none specified the ICU collator will be called for the language given in &lt;LanguageCountryInfo&gt;</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle65.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">sequence&lt;string&gt; search options (transliteration modules)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle65.B8" table:value-type="string">
     <text:p text:style-name="TextInTable">0 or more</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle65.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">sequence&lt;string&gt; collation options (transliteration modules)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle65.B8" table:value-type="string">
     <text:p text:style-name="TextInTable">0 or more</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle65.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">sequence&lt;string&gt; names of supported transliterations (transliteration modules)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle65.B8" table:value-type="string">
     <text:p text:style-name="TextInTable">0 or more</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle65.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">[IDL:com.sun.star.i18n.ForbiddenCharacters]</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle65.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">exactly 1, though may have empty elements</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle65.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">sequence&lt;string&gt; reserved words</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle65.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">all words of [IDL:com.sun.star.i18n.reservedWords]</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle65.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">sequence&lt;[IDL:com.sun.star.beans.PropertyValues]&gt; numbering levels</text:p>
     <text:p text:style-name="TextInTable">(no public XLocaleData API method available, used by and accessible through [IDL:com.sun.star.text.XDefaultNumberingProvider] method getDefaultContinuousNumberingLevels() implemented in i18npool)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle65.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">exactly 8 &lt;NumberingLevel&gt; entities</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle65.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">sequence&lt;[IDL:com.sun.star.container.XIndexAccess]&gt; outline styles</text:p>
     <text:p text:style-name="TextInTable">(no public XLocaleData API method available, used by and accessible through [IDL:com.sun.star.text.XDefaultNumberingProvider] method getDefaultOutlineNumberings() implemented in i18npool )</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle65.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">exactly 8 &lt;OutlineStyle&gt; entities consisting of 5 &lt;OutlineNumberingLevel&gt; entities each</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">Locale data is defined in an XML file. It is translated into a C++ source file during the build process, which is compiled and linked together with other compiled locale data files into shared libraries. The contents of the XML file, their elements, and how they are to be defined are described in <text:span text:style-name="www/ftp/email">i18npool/source/localedata/data/locale.dtd</text:span>. The latest revision available for a specific CVS branch of that file provides up-to-date information about the definitions, as well as additional information.</text:p>
  <text:p text:style-name="Paragraph">If the language-country combination is <text:span text:style-name="T17">not</text:span> already listed in <text:span text:style-name="www/ftp/email">tools/inc/lang.hxx</text:span> and <text:span text:style-name="www/ftp/email">tools/source/intntl/isolang.cxx</text:span> and <text:span text:style-name="www/ftp/email">svx/source/dialog/langtab.src,</text:span> [PRODUCTNAME] is probably not prepared to deal with your specific locale. For assistance, you can consult <text:a xlink:type="simple" xlink:href="http://l10n.openoffice.org/adding_language.html#step1"><text:span text:style-name="www/ftp/email">http://l10n.openoffice.org/adding_language.html#step1</text:span></text:a> (Add the New Language to the Resource System) and join the <text:span text:style-name="www/ftp/email">dev@l10n.openoffice.org</text:span> mailing list (see also<text:span text:style-name="www/ftp/email"> </text:span><text:a xlink:type="simple" xlink:href="http://l10n.openoffice.org/servlets/ProjectMailingListList"><text:span text:style-name="www/ftp/email">http://l10n.openoffice.org/servlets/ProjectMailingListList</text:span></text:a>).</text:p>
  <text:p text:style-name="Paragraph">In order to conform with the available build infrastructure, the name of your locale data file should follow the conventions used in the <text:span text:style-name="www/ftp/email">i18npool/source/localedata/data</text:span> directory: <text:span text:style-name="www/ftp/email">&lt;language&gt;_&lt;country&gt;.xml</text:span>, where <text:span text:style-name="www/ftp/email">language</text:span> is a lowercase, two letter <text:alphabetical-index-mark-start text:id="IMark43875748"/>ISO-639<text:alphabetical-index-mark-end text:id="IMark43875748"/> code, and <text:span text:style-name="www/ftp/email">country</text:span> is an uppercase two letter <text:alphabetical-index-mark-start text:id="IMark43887388"/>ISO-3166<text:alphabetical-index-mark-end text:id="IMark43887388"/> code. Start by copying the <text:span text:style-name="www/ftp/email">en_US.xml</text:span> file to your <text:span text:style-name="www/ftp/email">&lt;language&gt;_&lt;country&gt;.xml</text:span> file and adopt the entries to suit your needs. Add the corresponding <text:span text:style-name="www/ftp/email">*.cxx</text:span> and <text:span text:style-name="www/ftp/email">*.obj</text:span> target file name to the <text:span text:style-name="www/ftp/email">i18npool/source/localedata/data/makefile.mk.</text:span> Note that there is an explicit rule defined, so that you do not need to add the <text:span text:style-name="www/ftp/email">*.xml</text:span> file name anywhere. You must also add the locale to the <text:span text:style-name="Code (in text)">aDllsTable</text:span> structure located in <text:span text:style-name="www/ftp/email">i18npool/source/localedata/data/localedata.cxx.</text:span> Make sure to specify the correct library name, since it must correspond to the library name used in the makefile. Finally, the public symbols to be exported must be added to the linker <text:span text:style-name="T2">map file</text:span> corresponding to the library. You can use the <text:span text:style-name="www/ftp/email">i18npool/source/localedata/data/linkermapfile-check.awk</text:span><text:span text:style-name="T18"> script to assist you. Instructions for how to use the script are located the header comments of the file.</text:span></text:p>
  <text:p text:style-name="TitledListHead">&lt;LC_FORMAT&gt;&lt;FormatElement&gt;</text:p>
  <text:p text:style-name="TitledListBody">To be able to load documents of versions up to and including StarOffice 5.2 (old binary file format), each locale must define all number formats mentioned in <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.NumberFormatIndex]</text:span> and assign the proper <text:span text:style-name="Code (in text)">formatindex=&quot;...&quot;</text:span> attribute.<text:line-break/>Failing to do so may result in data not properly displayed or not displayed at all if a built-in &quot;System&quot; or &quot;Default&quot; format code was used (as generally done by the average user) and the document is loaded under a locale not having those formats defined. Since old versions did merge some format information of the [Windows] Regional Settings, it might be necessary to define some duplicated codes to fill all positions. To verify that all necessary elements are defined, use a non-product build of OpenOffice.org and open a <text:s/>number formatting dialog, and select your locale from the <text:span text:style-name="T19">Language</text:span> <text:span text:style-name="T2">list box.</text:span> An assertion message box appears if there are any missing elements. The errors are only shown the very first time the locale is selected in a given document.</text:p>
  <text:p text:style-name="TitledListHead">&lt;LC_FORMAT&gt;&lt;FormatElement&gt;&lt;FormatCode&gt;</text:p>
  <text:p text:style-name="TitledListBody">In general, definition of number format codes follows the user visible rules, apart from that any non-ASCII character must be entered using UTF-8 encoding. For a detailed description of codes and a list of possible keywords please consult the [PRODUCTNAME] English online help on section &quot;number format codes&quot;.<text:line-break/>Be sure to use the separators you declared in the <text:span text:style-name="Code (in text)">&lt;LC_CTYPE&gt;</text:span> section in the number format codes, for example <text:span text:style-name="Code (in text)">&lt;DecimalSeparator&gt;</text:span>, <text:span text:style-name="Code (in text)">&lt;ThousandSeparator&gt;</text:span>, otherwise the number formatter generates incorrect formats.<text:line-break/>Verify the defined codes again by using the number formatter dialog of a non-product OpenOffice.org build. If anything is incorrect, an assertion message box appears containing information about the <text:span text:style-name="T2">error.</text:span><text:line-break/>The format indices 1..49 are reserved and, for backward compatibility, <text:span text:style-name="Emphasis">must</text:span> be used as stated in <text:span text:style-name="www/ftp/email">offapi/com/sun/star/i18n/NumberFormatIndex.idl</text:span>. Note that 48 and 49 are used internally and must not be used in locale data XML files. All other formats must be present.</text:p>
  <text:p text:style-name="TitledListHead">&lt;FormatCode usage=&quot;DATE&quot;&gt; and &lt;FormatCode usage=&quot;DATE_TIME&quot;&gt;</text:p>
  <text:p text:style-name="TitledListBody">Characters of date and time keywords, such as YYYY for year, had previously been localized for a few locales (for example, JJJJ in German). The new I18N framework no longer follows that approach, because it may lead to ambiguous and case insensitive character combinations that <text:s/>cannot be resolved at runtime. Localized keyword support is only given for some old locales, other locales must define their codes using English notation.<text:line-break/>The table below shows the localized keyword codes:</text:p>
  <table:table table:name="Tabelle66" table:style-name="Tabelle66">
   <table:table-column table:style-name="Tabelle66.A"/>
   <table:table-column table:style-name="Tabelle66.B"/>
   <table:table-column table:style-name="Tabelle66.C"/>
   <table:table-column table:style-name="Tabelle66.D"/>
   <table:table-column table:style-name="Tabelle66.E"/>
   <table:table-column table:style-name="Tabelle66.F"/>
   <table:table-column table:style-name="Tabelle66.G"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle66.A1" table:value-type="string">
      <text:p text:style-name="TableHead"/>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle66.A1" table:value-type="string">
      <text:p text:style-name="TableHead">DayOfWeek</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle66.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Era</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle66.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Year</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle66.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Month</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle66.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Day</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle66.G1" table:value-type="string">
      <text:p text:style-name="TableHead">Hour</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle66.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">English (and all other locales not mentioned)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">A</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">G</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Y</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">M</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">D</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.G2" table:value-type="string">
     <text:p text:style-name="TextInTable">H</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle66.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">de_AT, de_CH, de_DE, de_LI, de_LU</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">J</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">T</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.G2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle66.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">nl_BE, nl_NL</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">J</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.G2" table:value-type="string">
     <text:p text:style-name="TextInTable">U</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle66.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">fr_BE, fr_CA, fr_CH, fr_FR, fr_LU, fr_MC</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">O</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">A</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">J</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.G2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle66.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">it_CH, it_IT</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">O</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">X</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">A</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">G</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.G2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle66.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">pt_BR, pt_PT</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">O</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">A</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.G2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle66.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">es_AR, es_BO, es_CL, es_CO, es_CR, es_DO, es_EC, es_ES, es_GT, es_HN, es_MX, es_NI, es_PA, es_PE, es_PR, es_PY, es_SV, es_UY, es_VE</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">O</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">A</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.G2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle66.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">da_DK</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.G2" table:value-type="string">
     <text:p text:style-name="TextInTable">T</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle66.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">nb_NO, nn_NO, no_NO</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.G2" table:value-type="string">
     <text:p text:style-name="TextInTable">T</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle66.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">sv_FI, sv_SE</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.G2" table:value-type="string">
     <text:p text:style-name="TextInTable">T</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle66.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">fi_FI</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">V</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">K</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">P</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle66.G2" table:value-type="string">
     <text:p text:style-name="TextInTable">T</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="TitledListHead">&lt;FormatCode usage=&quot;DATE&quot; formatindex=&quot;21&quot;&gt; and <text:line-break/>&lt;FormatCode usage=&quot;DATE_TIME&quot; formatindex=&quot;47&quot;&gt;</text:p>
  <text:p text:style-name="TitledListBody">The <text:span text:style-name="Code (in text)">formatindex=&quot;21&quot;</text:span> [IDL:com.sun.star.i18n.NumberFormatIndex] <text:span text:style-name="Code (in text)">DATE_SYS_DDMMYYYY</text:span> format code is used to edit date formatted data. It represents a date using the most detailed information available, for example, a 4-digit year and instead of a 2-digit year. The YMD default order (how a date is assembled) is determined from the order encountered in this format.<text:line-break/>Similarly, the <text:span text:style-name="Code (in text)">formatindex=&quot;47&quot;</text:span> <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.NumberFormatIndex]</text:span> <text:span text:style-name="Code (in text)">DATETIME_SYS_DDMMYYYY_HHMMSS</text:span> format code is used to edit date-time data. Both format codes must display data in a way that is parable by the application, in order to be able to reassemble edited data. This generally means using only YYYY,MM,DD,HH,MM,SS keywords and <text:span text:style-name="Code (in text)">&lt;DateSeparator&gt;</text:span> and <text:span text:style-name="Code (in text)">&lt;TimeSeparator&gt;</text:span>.</text:p>
  <text:p text:style-name="TitledListHead">&lt;FormatCode usage=&quot;CURRENCY&quot;&gt;</text:p>
  <text:p text:style-name="TitledListBody">The [$xxx-yyy] notation is needed for compatibility reasons. The <text:span text:style-name="Code (in text)">xxx</text:span> part denotes the currency symbol, and the <text:span text:style-name="Code (in text)">yyy</text:span> part specifies the locale identifier in Microsoft Language ID hexadecimal notation. For example, having “409” as the locale identifier (English-US) and “$” as the currency symbol results in [$$-409]. A list of available Language IDs known to the [PRODUCTNAME] application can be found at project util module tools in file <text:span text:style-name="www/ftp/email">tools/inc/lang.hxx</text:span>. Format indices 12, 13, 14, 15, 17 with [$xxx-yyy] notation must use the xxx currency symbol that has the attribute usedInCompatibleFormatCodes=&quot;true&quot; (see element <text:span text:style-name="Code (in text)">&lt;LC_CURRENCY&gt;</text:span> in the <text:span text:style-name="www/ftp/email">locale.dtd</text:span> file).</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark43875748"/>XCalendar<text:alphabetical-index-mark-end text:id="IMark43875748"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XCalendar]The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XCalendar]</text:span> provides a general calendar service. All calendar implementations are managed by a class <text:span text:style-name="Code (in text)">CalendarImpl</text:span>, the front-end, which dynamically calls a language-specific implementation.</text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="Code (in text)">Calendar_gregorian</text:span> is a wrapper to ICU&apos;s Calendar class.</text:p>
  <text:p text:style-name="Paragraph">If you need to implement a locale-specific calendar, you can choose to either derive your class from <text:span text:style-name="Code (in text)">Calendar_gregorian</text:span> or to write your own class.</text:p>
  <text:p text:style-name="Paragraph">There are three steps needed to create a locale-specific calendar:</text:p>
  <text:ordered-list text:style-name="Numbering 1">
   <text:list-item>
    <text:p text:style-name="P19">Name your calendar <text:span text:style-name="Code (in text)">&lt;</text:span><text:span text:style-name="T20">name</text:span><text:span text:style-name="Code (in text)">&gt;</text:span> (for example, &apos;gengou&apos; for Japanese Calendar) and add it to the locale data XML file with proper day/month/era names.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Derive a class either from <text:span text:style-name="Code (in text)">Calendar_gregorian</text:span> or <text:span text:style-name="Code (in text)">XCalendar</text:span>, name it as <text:span text:style-name="Code (in text)">Calendar_&lt;name&gt;</text:span>, which will be loaded by <text:span text:style-name="Code (in text)">CalendarImpl</text:span> when the calendar is specified.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Add your new calendar as a service in <text:span text:style-name="www/ftp/email">i18npool/source/registerservices/registerservices.cxx</text:span>.</text:p>
   </text:list-item>
  </text:ordered-list>
  <text:p text:style-name="Paragraph">If you plan to derive from the Gregorian calendar, you need to know the mapping between your new calendar and the Gregorian calendar. For example, the Japanese Emperor Era calendar has a starting year offset to Gregorian calendar for each era. You will need to override the method <text:span text:style-name="Code (in text)">Calendar_gregorian::mapToGregorian()</text:span> and <text:span text:style-name="Code (in text)">Calendar_gregorian::mapFromGregorian()</text:span> to map the Era/Year/Month/Day between the Gregorian calendar and the calendar for your language.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark43887388"/>XCharacterClassification<text:alphabetical-index-mark-end text:id="IMark43887388"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XCharacterClassification]The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XCharacterClassification]</text:span> provides <text:span text:style-name="Code (in text)">toUpper()</text:span>, <text:span text:style-name="Code (in text)">toLower()</text:span>, <text:span text:style-name="Code (in text)">toTitle()</text:span> and methods to get various character attributes defined by Unicode. These functions are implemented by the <text:span text:style-name="Code (in text)">cclass_unicode</text:span> class. If you need language specific requirements for these functions, you can derive a language specific class <text:span text:style-name="Code (in text)">cclass_&lt;locale_name&gt;</text:span> from <text:span text:style-name="Code (in text)">cclass_unicode</text:span> and overwrite the methods. In most cases, the attributes are well defined by Unicode, so you do not need to create your own class.</text:p>
  <text:p text:style-name="Paragraph">The class also provides a generic parser. If a particular language needs special number parsing, detected non-ASCII numbers are fed to the <text:span text:style-name="Code (in text)">com.sun.star.i18n.NativeNumberSupplier</text:span> service to obtain the ASCII representation, which in turn is interpreted and converted to a double precision floating point value.</text:p>
  <text:p text:style-name="Paragraph">A manager class <text:span text:style-name="Code (in text)">CharacterClassificationImpl</text:span> will handle the loading of language specific implementations of <text:span text:style-name="Code (in text)">CharacterClassification</text:span> on the fly. If no implementation is provided, the implementation defaults to class <text:span text:style-name="Code (in text)">cclass_unicode</text:span>.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark43887388"/>XBreakIterator<text:alphabetical-index-mark-end text:id="IMark43887388"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XBreakIterator]The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XBreakIterator]</text:span> provides support for Character(Cell)/Word/Sentence/Line-break services. For example, <text:span text:style-name="Code (in text)">BreakIterator</text:span> provides the APIs to iterate a string by character, word, line and sentence. The interface is used by the Output layer for the following operations:</text:p>
  <text:unordered-list text:style-name="L10">
   <text:list-item>
    <text:p text:style-name="P20">Cursor positioning and selection: Since a character or cell can take more than one code point, cursor movement cannot be done by simply incrementing or decrementing the index.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:unordered-list text:style-name="L11">
   <text:list-item>
    <text:p text:style-name="P21">Complex Text Layout Languages (CTL): In CTL languages (such as Thai, Hebrew, Arabic and Indian), multiple characters can combine to form a display cell. Cursor movement must traverse a display cell instead of a single character.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">Line breaking must be highly configurable in desktop publishing applications. The line breaking algorithm should be able to find a line break with or without a hyphenator. Additionally, it should be able to parse special characters that are illegal if they occur at the end or beginning of a line.</text:p>
  <text:p text:style-name="Paragraph">Both requirements are locale-sensitive.</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">BreakIterator</text:span> components are managed by the class <text:span text:style-name="Code (in text)">BreakIteratorImpl</text:span>, which will load the language-specific component in service name <text:span text:style-name="Code (in text)">BreakIterator_&lt;language&gt;</text:span> dynamically.</text:p>
  <text:p text:style-name="Paragraph">The base break iterator class <text:span text:style-name="Code (in text)">BreakIterator_Unicode</text:span> is a wrapper to the ICU <text:span text:style-name="Code (in text)">BreakIterator</text:span> class. While this class meets the requirements for western languages, it does not meet the requirements for other languages, such as those of South Asia (CJK) and South East Asia (Indian, Thai, Arabic), where enhanced functionality is required, as described previously.</text:p>
  <text:p text:style-name="Paragraph">Thus the current <text:span text:style-name="Code (in text)">BreakIterator</text:span> base class has two derived classes, <text:span text:style-name="Code (in text)">BreakIterator_CJK</text:span> and <text:s/><text:span text:style-name="Code (in text)">BreakIterator_CTL</text:span>. <text:span text:style-name="Code (in text)">BreakIterator_CJK</text:span> provides a dictionary based word break for Chinese and Japanese, and a forbidden rule driven line break for Chinese, Japanese and Korean. <text:span text:style-name="Code (in text)">BreakIterator_CTL</text:span> provides a more specific definition of character/cell/cluster grouping for languages like Thai and Arabic.</text:p>
  <text:p text:style-name="Paragraph">Use the following steps to create a language-specific <text:span text:style-name="Code (in text)">BreakIterator</text:span> service:</text:p>
  <text:ordered-list text:style-name="Numbering 1" text:continue-numbering="true">
   <text:list-item text:start-value="1">
    <text:p text:style-name="P19">Derive a class either from <text:span text:style-name="Code (in text)">BreakIterator_CJK</text:span> or <text:span text:style-name="Code (in text)">BreakIterator_CTL</text:span>, name it as <text:span text:style-name="Code (in text)">BreakIterator_&lt;language&gt;</text:span>.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Add new service in <text:span text:style-name="Code (in text)">registerservices.cxx</text:span></text:p>
   </text:list-item>
  </text:ordered-list>
  <text:p text:style-name="Paragraph">There are three methods for word breaking: <text:span text:style-name="Code (in text)">nextWord()</text:span>, <text:span text:style-name="Code (in text)">previousWord()</text:span>, <text:span text:style-name="Code (in text)">getWordBoundary()</text:span>. You can overwrite them with your own language rules.</text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="Code (in text)">BreakIterator_CJK</text:span> provides input string caching and dictionary searching for longest matching. You can provide a sorted dictionary (the encoding must be UTF-8) by creating the following file: <text:span text:style-name="www/ftp/email">i18npool/source/breakiterator/data/&lt;language&gt;.dict</text:span>.</text:p>
  <text:p text:style-name="Paragraph">The utility <text:span text:style-name="Code (in text)">gendict</text:span> will convert the file to C code, which will be compiled into a shared library for dynamic loading.</text:p>
  <text:p text:style-name="Paragraph">All dictionary searching and loading is performed in the <text:span text:style-name="Code (in text)">xdictionary</text:span> class. The only thing you need to do is to derive your class from <text:span text:style-name="Code (in text)">BreakIterator_CJK</text:span> and create an instance of the <text:span text:style-name="Code (in text)">xdictionary</text:span> with the language name and pass it to the parent class.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark43875748"/>XCollator<text:alphabetical-index-mark-end text:id="IMark43875748"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XCollator]The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XCollator]</text:span> must be used to provide text collation for the new locale. There are two types of collations, <text:span text:style-name="Emphasis">single level</text:span> and <text:span text:style-name="Emphasis">multiple level</text:span> collation.</text:p>
  <text:p text:style-name="Paragraph">Most European and English locales need multiple level collation. [PRODUCTNAME] uses the ICU collator to cover these needs.</text:p>
  <text:p text:style-name="Paragraph">Most CJK languages only require single level collation. There is a two step lookup table that performs the collation for these languages. If you have a new language or algorithm in this category, you can derive a new service from <text:span text:style-name="Code (in text)">Collator_CJK</text:span> and provide index and weight tables. Here is a sample implementation:</text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">#include &lt;collator_CJK.hxx&gt;<text:line-break/>static sal_uInt16 index[] = {<text:line-break/>...<text:line-break/>};<text:line-break/><text:line-break/>static sal_uInt16 weight[] = {<text:line-break/>...<text:line-break/>};<text:line-break/><text:line-break/>sal_Int32 SAL_CALL Collator_zh_CN_pinyin::compareSubstring(<text:line-break/> <text:s text:c="7"/>const ::rtl::OUString&amp; str1, sal_Int32 off1, sal_Int32 len1,<text:line-break/> <text:s text:c="7"/>const ::rtl::OUString&amp; str2, sal_Int32 off2, sal_Int32 len2)<text:line-break/> <text:s text:c="7"/>throw (::com::sun::star::uno::RuntimeException)<text:line-break/>{<text:line-break/> <text:s text:c="3"/>return compare(str1, off1, len1, str2, off2, len2, index, weight);<text:line-break/>}<text:line-break/><text:line-break/>sal_Int32 SAL_CALL Collator_zh_CN_pinyin::compareString(<text:line-break/> <text:s text:c="7"/>const ::rtl::OUString&amp; str1,<text:line-break/> <text:s text:c="7"/>const ::rtl::OUString&amp; str2)<text:line-break/> <text:s text:c="7"/>throw (::com::sun::star::uno::RuntimeException) <text:line-break/>{<text:line-break/> <text:s text:c="3"/>return compare(str1, 0, str1.getLength(), str2, 0, str2.getLength(),<text:line-break/> <text:s text:c="7"/>index, weight);<text:line-break/>}</text:span></text:p>
  <text:p text:style-name="Paragraph">Front end implementation <text:span text:style-name="Code (in text)">Collator</text:span> will load and cache the language-specific service on the name <text:span text:style-name="Code (in text)">Collator_&lt;locale&gt;</text:span> dynamically.</text:p>
  <text:p text:style-name="Paragraph">The steps to add new services:</text:p>
  <text:ordered-list text:style-name="Numbering 1" text:continue-numbering="true">
   <text:list-item text:start-value="1">
    <text:p text:style-name="P19">Derive the new service from the above class</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Provide the index and weight tables</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Register the new service in <text:span text:style-name="www/ftp/email">registerservices.cxx</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Add the new service in the collation section in the locale data file.</text:p>
   </text:list-item>
  </text:ordered-list>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark43875748"/>XTransliteration<text:alphabetical-index-mark-end text:id="IMark43875748"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.TransliterationModules;com.sun.star.i18n.TransliterationModulesNew]The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XTransliteration]</text:span> can be used for string conversion. The front end implementation <text:span text:style-name="Code (in text)">TransliterationImpl</text:span> will load and cache specific transliteration services by a predefined enum in <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.TransliterationModules]</text:span> or<text:span text:style-name="Code (in text)"> </text:span><text:s/><text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.TransliterationModulesNew]</text:span>, or dynamically by implementation name.</text:p>
  <text:p text:style-name="Paragraph">Transliterations have been defined in three categories: <text:span text:style-name="Code (in text)">Ignore</text:span>, <text:span text:style-name="Code (in text)">OneToOne</text:span> and <text:span text:style-name="Code (in text)">Numeric</text:span>. All of them are derived from <text:span text:style-name="Code (in text)">transliteration_commonclass</text:span>.</text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="Code (in text)">Ignore</text:span> services are for ignore case, half/full width, and Katakana/Hiragana. You can derive your new service from it, and overwrite folding/transliteration methods.</text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="Code (in text)">OneToOne</text:span> services are for one to one mapping, such as converting lowercase to uppercase. The class provides two more services, <text:bookmark text:name="1huh"/>to take a mapping table or mapping function to do folding and transliteration. You can derive a class from it and provide a table or function for the parent class to do the transliteration.</text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="Code (in text)">Numeric</text:span> services are used to convert a number to a number string in specific languages. It can be used to format Date string and other types of strings.</text:p>
  <text:p text:style-name="Paragraph">To add a new transliteration</text:p>
  <text:ordered-list text:style-name="Numbering 1" text:continue-numbering="true">
   <text:list-item text:start-value="1">
    <text:p text:style-name="P19">Derive a new class from the three classes previously mentioned.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Overwrite folding/transliteration methods or provide a table for the parent to perform the transliteration.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Register the new service in <text:span text:style-name="www/ftp/email">registerservices.cxx</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Add the new service in the transliteration section in the locale data file</text:p>
   </text:list-item>
  </text:ordered-list>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark44271916"/>XNativeNumberSupplier<text:alphabetical-index-mark-end text:id="IMark44271916"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XNativeNumberSupplier]The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XNativeNumberSupplier]</text:span> provides the functionality to convert between ASCII Arabic digit numbers and locale-dependent numeral representations. It performs the conversion by implementing special transliteration services. The interface also provides a mechanism to generate attributes to be stored in the XML file format (see the XML file format documentation, section &quot;Common Data Style Attributes&quot;, &quot;number:transliteration-...&quot;), as well as a conversion of those XML attributes needed to map back to a specific representation style. If you add a number transliteration for a specific locale and reuse one of the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.NativeNumberMode]</text:span> constants, please add the description to <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.NativeNumberMode]</text:span> if your changes are to be added back to the OpenOffice.org code repository.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark-start text:id="IMark43875748"/>XIndexEntrySupplier<text:alphabetical-index-mark-end text:id="IMark43875748"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.i18n.XIndexEntrySupplier]The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.i18n.XIndexEntrySupplier]</text:span> can be used to provide the functionality to generate index pages. The main method of this interface is <text:span text:style-name="Code (in text)">getIndexCharacter()</text:span>. Front end implementation <text:span text:style-name="Code (in text)">IndexEntrySupplier</text:span> will dynamically load and cache language specific service based on the name <text:span text:style-name="Code (in text)">IndexEntrySupplier_&lt;locale&gt;</text:span>.</text:p>
  <text:p text:style-name="Paragraph">Languages to be indexed have been divided into two sets. The first set contains Latin1 languages, which can be covered by 256 Unicode code points. A one step lookup table is used to generate index characters. An alphabetic and numeric table has been generated, which covers most Latin1 languages. But if you need another algorithm or have a conflict with the table, you can create your own table and derive a new class from <text:span text:style-name="Code (in text)">IndexEntrySupplier_Euro</text:span>. Here is a sample implementation:</text:p>
  <text:p text:style-name="Code"><text:span text:style-name="Code (in text)">#include &lt;sal/types.h&gt;<text:line-break/>#include &lt;indexentrysupplier_euro.hxx&gt;<text:line-break/>#include &lt;indexdata_alphanumeric.h&gt;<text:line-break/><text:line-break/>OUString SAL_CALL i18n::IndexEntrySupplier_alphanumeric::getIndexCharacter(<text:line-break/> <text:s text:c="7"/>const OUString&amp; rIndexEntry,<text:line-break/> <text:s text:c="7"/>const lang::Locale&amp; rLocale, const OUString&amp; rSortAlgorithm )<text:line-break/> <text:s text:c="7"/>throw (uno::RuntimeException)<text:line-break/>{<text:line-break/> <text:s text:c="3"/>return getIndexString(rIndexEntry, idxStr);<text:line-break/>}</text:span></text:p>
  <text:p text:style-name="Paragraph">where <text:span text:style-name="Code (in text)">idxStr</text:span> is the table.</text:p>
  <text:p text:style-name="Paragraph">For the languages that could not be covered in the first set, such as CJK, a two step lookup table is used. Here is a sample implementation:</text:p>
  <text:p text:style-name="Code"><text:span text:style-name="Code (in text)">#include &lt;indexentrysupplier_cjk.hxx&gt;<text:line-break/>#include &lt;indexdata_zh_pinyin.h&gt;<text:line-break/><text:line-break/>OUString SAL_CALL i18n::IndexEntrySupplier_zh_pinyin::getIndexCharacter(<text:line-break/> <text:s text:c="7"/>const OUString&amp; rIndexEntry,<text:line-break/> <text:s text:c="7"/>const lang::Locale&amp; rLocale, const OUString&amp; rSortAlgorithm )<text:line-break/> <text:s text:c="7"/>throw (uno::RuntimeException)<text:line-break/>{<text:line-break/> <text:s text:c="3"/>return getIndexString(rIndexEntry, idxStr, idx1, idx2);<text:line-break/>}</text:span></text:p>
  <text:p text:style-name="Paragraph">where <text:span text:style-name="Code (in text)">idx1</text:span> and <text:span text:style-name="Code (in text)">idx2</text:span> are two step tables and <text:span text:style-name="Code (in text)">idxStr</text:span> contains all the index keys that will be returned. If you have a new language or algorithm, you can derive a new service from <text:span text:style-name="Code (in text)">IndexEntrySupplier_CJK</text:span> and provide tables for the parent class to generate the index.</text:p>
  <text:p text:style-name="Paragraph">Note that the index depends on collation, therefore, each index algorithm should have a collation algorithm to support it.</text:p>
  <text:p text:style-name="P22">To add new service:</text:p>
  <text:ordered-list text:style-name="Numbering 1" text:continue-numbering="true">
   <text:list-item text:start-value="1">
    <text:p text:style-name="P19">Derive the new service from <text:span text:style-name="Code (in text)">IndexEntrySupplier_Euro</text:span>.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Provide a table for the lookup</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Register new service in <text:span text:style-name="Code (in text)">registerservices.cxx</text:span></text:p>
   </text:list-item>
  </text:ordered-list>
  <text:h text:style-name="Head 5" text:level="5">A Comment on Search and Replace</text:h>
  <text:p text:style-name="Paragraph">Search and replace is also locale-dependent because there may be special search options that are only available for a particular locale. For instance, if the <text:span text:style-name="T19">Asian languages support</text:span> is enabled, you&apos;ll see an additional option for &quot;Sounds like (Japanese)&quot; in the <text:span text:style-name="Buttons/Menus">Edit - Find &amp; Replace</text:span> dialog box. With this option, you can turn on or off certain options specific to Japanese in the search and replace process.</text:p>
  <text:p text:style-name="Paragraph">Search and replace relies on the transliteration modules for various search options. The transliteration modules are loaded and the search string is converted before the search process.</text:p>
  <text:h text:style-name="Head 3" text:level="3"><text:alphabetical-index-mark text:string-value="linguistic API"/>Linguistics</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.linguistic2.LinguServiceManager;com.sun.star.linguistic2.DictionaryList;com.sun.star.linguistic2.LinguProperties;com.sun.star.linguistic2.SpellChecker;com.sun.star.linguistic2.Hyphenator;com.sun.star.linguistic2.Thesaurus]The Linguistic API provides a set of UNO services used for spell checking, hyphenation or accessing a thesaurus. Through the Linguistic API, developers add new implementations and integrate them into [PRODUCTNAME]. Users of the Linguistic API call its methods Usually this functionality is used by one or more clients, that is, applications or components, to process documents , such as text documents or spreadsheets.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Services Overview</text:h>
  <text:p text:style-name="Paragraph">The services provided by the Linguistic API are:</text:p>
  <text:unordered-list text:style-name="L12">
   <text:list-item>
    <text:p text:style-name="P23"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.LinguServiceManager]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P23"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.DictionaryList]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P23"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.LinguProperties]</text:span></text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">Also there is at least one or more implementation for each of the following services:</text:p>
  <text:unordered-list text:style-name="L13">
   <text:list-item>
    <text:p text:style-name="P24"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.SpellChecker]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P24"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.Hyphenator]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P24"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.Thesaurus]</text:span></text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">The service implementations for spell checker, thesaurus and hyphenator supply the respective functionality. Each of the implementations support a different set of languages. Refer to <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XSupportedLocales]</text:span>.</text:p>
  <text:p text:style-name="Paragraph">For example, there could be two implementations for a spell checker, usually from different supporting parties: the first supporting English, French and German, and the second supporting Russian and English. Similar settings occur for the hyphenator and thesaurus.</text:p>
  <text:p text:style-name="Paragraph">It is not convenient for each application or component to know all these implementations and to choose the appropriate implementation for the specific purpose and language, therefore a mediating instance is required.</text:p>
  <text:p text:style-name="Paragraph">This instance is the <text:span text:style-name="Code (in text)">LinguServiceManager</text:span>. Spell checking, hyphenation and thesaurus functionality is accessed from a client by using the respective interfaces from the <text:span text:style-name="Code (in text)">LinguServiceManager</text:span>.</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">LinguServiceManager</text:span> dispatches the interface calls from the client to a specific service implementation,if any, of the respective type that supports the required language.<text:line-break/>For example, if the client requires spell checking of a French word, the first spell checker implementations from those mentioned above are called.</text:p>
  <text:p text:style-name="Paragraph">If there is more than one spell checker available for one language, as in the above example for the English language, the <text:span text:style-name="Code (in text)">LinguServiceManager</text:span> starts with the first one that was supplied in the <text:span text:style-name="Code (in text)">setConfiguredServices()</text:span> method of its interface. The thesaurus behaves in a similar manner.<text:line-break/> For more details, refer to the interface description <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XLinguServiceManager]</text:span>.</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">LinguProperties</text:span> service provides, among others, properties that are required by the spell checker, hyphenator and thesaurus that are modified by the client. Refer to the<text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.LinguProperties].</text:span></text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">DictionaryList</text:span> (see <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.DictionaryList]</text:span>) provides a set of user defined or predefined dictionaries for languages that are activated and deactivated. If they are active, they are used by the spell checker and hyphenator. These are used by the user to override results from the spell checker and hyphenator implementations, thus allowing the user to customize spell checking and hyphenation.</text:p>
  <text:p text:style-name="Paragraph">In the code snippets and examples in the following chapters, we will use the following members and interfaces: [SOURCE:OfficeDev/Linguistic/LinguisticExamples.java]</text:p>
  <text:p text:style-name="Code">// used interfaces</text:p>
  <text:p text:style-name="Code">import com.sun.star.lang.XMultiServiceFactory;</text:p>
  <text:p text:style-name="Code">import com.sun.star.linguistic2.XLinguServiceManager;</text:p>
  <text:p text:style-name="Code">import com.sun.star.linguistic2.XSpellChecker;</text:p>
  <text:p text:style-name="Code">import com.sun.star.linguistic2.XHyphenator;</text:p>
  <text:p text:style-name="Code">import com.sun.star.linguistic2.XThesaurus;</text:p>
  <text:p text:style-name="Code">import com.sun.star.linguistic2.XSpellAlternatives;</text:p>
  <text:p text:style-name="Code">import com.sun.star.linguistic2.XHyphenatedWord;</text:p>
  <text:p text:style-name="Code">import com.sun.star.linguistic2.XPossibleHyphens;</text:p>
  <text:p text:style-name="Code">import com.sun.star.linguistic2.XMeaning;</text:p>
  <text:p text:style-name="Code">import com.sun.star.linguistic2.XSearchableDictionaryList;</text:p>
  <text:p text:style-name="Code">import com.sun.star.linguistic2.XLinguServiceEventListener;</text:p>
  <text:p text:style-name="Code">import com.sun.star.linguistic2.LinguServiceEvent;</text:p>
  <text:p text:style-name="Code">import com.sun.star.beans.XPropertySet;</text:p>
  <text:p text:style-name="Code">import com.sun.star.beans.PropertyValue;</text:p>
  <text:p text:style-name="Code">import com.sun.star.uno.XComponentContext;</text:p>
  <text:p text:style-name="Code">import com.sun.star.uno.XNamingService;</text:p>
  <text:p text:style-name="Code">import com.sun.star.lang.XMultiComponentFactory;</text:p>
  <text:p text:style-name="Code">import com.sun.star.lang.EventObject;</text:p>
  <text:p text:style-name="Code">import com.sun.star.lang.Locale;</text:p>
  <text:p text:style-name="Code">import com.sun.star.bridge.XUnoUrlResolver;</text:p>
  <text:p text:style-name="Code">import com.sun.star.uno.UnoRuntime;</text:p>
  <text:p text:style-name="Code">import com.sun.star.uno.Any;</text:p>
  <text:p text:style-name="Code">import com.sun.star.lang.XComponent;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">//</text:p>
  <text:p text:style-name="Code">// members for commonly used interfaces</text:p>
  <text:p text:style-name="Code">//</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// The MultiServiceFactory interface of the Office</text:p>
  <text:p text:style-name="Code">protected XMultiServiceFactory mxFactory = null;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// The LinguServiceManager interface</text:p>
  <text:p text:style-name="Code">protected XLinguServiceManager mxLinguSvcMgr = null;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// The SpellChecker interface</text:p>
  <text:p text:style-name="Code">protected XSpellChecker mxSpell = null;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// The Hyphenator interface</text:p>
  <text:p text:style-name="Code">protected XHyphenator mxHyph = null;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// The Thesaurus interface</text:p>
  <text:p text:style-name="Code">protected XThesaurus mxThes = null;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// The DictionaryList interface</text:p>
  <text:p text:style-name="Code">protected XSearchableDictionaryList mxDicList = null;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// The LinguProperties interface</text:p>
  <text:p text:style-name="Code">protected XPropertySet mxLinguProps = null;</text:p>
  <text:p text:style-name="Paragraph">To establish a connection to the office and have our <text:span text:style-name="Code (in text)">mxFactory</text:span> object initialized with its <text:span text:style-name="Code (in text)">XMultiServiceFactory,</text:span> the following code is used: [SOURCE:OfficeDev/Linguistic/LinguisticExamples.java]</text:p>
  <text:p text:style-name="Code">public void Connect( String sConnection )</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>throws com.sun.star.uno.Exception,</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>com.sun.star.uno.RuntimeException, </text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>Exception</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>XComponentContext xContext = </text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>com.sun.star.comp.helper.Bootstrap.createInitialComponentContext( null );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>XMultiComponentFactory xLocalServiceManager = xContext.getServiceManager();</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>Object <text:s/>xUrlResolver <text:s/>= xLocalServiceManager.createInstanceWithContext( </text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>&quot;com.sun.star.bridge.UnoUrlResolver&quot;, xContext );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>XUnoUrlResolver urlResolver = (XUnoUrlResolver)UnoRuntime.queryInterface( </text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>XUnoUrlResolver.class, xUrlResolver );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>Object rInitialObject = urlResolver.resolve( &quot;uno:&quot; + sConnection +</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>&quot;;urp;StarOffice.NamingService&quot; );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>XNamingService rName = (XNamingService)UnoRuntime.queryInterface(XNamingService.class,</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>rInitialObject );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>if( rName != null ) </text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>Object rXsmgr = rName.getRegisteredObject( &quot;StarOffice.ServiceManager&quot; );</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>mxFactory = (XMultiServiceFactory)</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>UnoRuntime.queryInterface( XMultiServiceFactory.class, rXsmgr );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">And the <text:span text:style-name="Code (in text)">LinguServiceManager</text:span> object <text:span text:style-name="Code (in text)">mxLinguSvcMgr</text:span> is initialized like similar to the following snippet: [SOURCE:OfficeDev/Linguistic/LinguisticExamples.java]</text:p>
  <text:p text:style-name="Code">/** Get the LinguServiceManager to be used. For example to access spell checker, </text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>thesaurus and hyphenator, also the component may choose to register itself</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>as listener to it in order to get notified of relevant events. */</text:p>
  <text:p text:style-name="Code">public boolean GetLinguSvcMgr()</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>throws com.sun.star.uno.Exception</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>if (mxFactory != null) {</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>Object aObj = mxFactory.createInstance(</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>&quot;com.sun.star.linguistic2.LinguServiceManager&quot; );</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>mxLinguSvcMgr = (XLinguServiceManager) </text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>UnoRuntime.queryInterface(XLinguServiceManager.class, aObj);</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>return mxLinguSvcMgr != null;</text:p>
  <text:p text:style-name="Code">} <text:s text:c="3"/></text:p>
  <text:p text:style-name="Paragraph">The empty list of temporary property values used for the current function call only and the language used may look like the following:</text:p>
  <text:p text:style-name="Code">// list of property values to used in function calls below.</text:p>
  <text:p text:style-name="Code">// Only properties with values different from the (default) values</text:p>
  <text:p text:style-name="Code">// in the LinguProperties property set need to be supllied.</text:p>
  <text:p text:style-name="Code">// Thus we may stay with an empty list in order to use the ones</text:p>
  <text:p text:style-name="Code">// form the property set.</text:p>
  <text:p text:style-name="Code">PropertyValue[] aEmptyProps = new PropertyValue[0];</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// use american english as language</text:p>
  <text:p text:style-name="Code">Locale aLocale = new Locale(&quot;en&quot;,&quot;US&quot;,&quot;&quot;);</text:p>
  <text:p text:style-name="Paragraph">Using temporary property values:</text:p>
  <text:p text:style-name="Paragraph">To change a value for the example <text:span text:style-name="Code (in text)">IsGermanPreReform</text:span> to a different value for one or a limited number of calls without modifying the default values, provide this value as a member of the last function argument used in the examples below before calling the respective functions.</text:p>
  <text:p text:style-name="Code">// another list of property values to used in function calls below.</text:p>
  <text:p text:style-name="Code">// Only properties with values different from the (default) values</text:p>
  <text:p text:style-name="Code">// in the LinguProperties property set need to be supllied.</text:p>
  <text:p text:style-name="Code">PropertyValue[] aProps = new PropertyValue[1];</text:p>
  <text:p text:style-name="Code">aProps[0] = new PropertyValue();</text:p>
  <text:p text:style-name="Code">aProps[0].Name <text:s/>= &quot;IsGermanPreReform&quot;;</text:p>
  <text:p text:style-name="Code">aProps[0].Value = new Boolean( true );</text:p>
  <text:p text:style-name="Paragraph">Replace the <text:span text:style-name="Code (in text)">aEmptyProps</text:span> argument in the function calls with <text:span text:style-name="Code (in text)">aProps</text:span> to override the value of <text:span text:style-name="Code (in text)">IsGermanPreReform</text:span> from the <text:span text:style-name="Code (in text)">LinguProperties</text:span>. Other properties are overridden by adding them to the <text:span text:style-name="Code (in text)">aProps</text:span> object.</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="spellchecker"/>Using <text:alphabetical-index-mark text:string-value="spellchecker"/>Spellchecker</text:h>
  <text:p text:style-name="Paragraph">The interface used for spell checking is <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XSpellChecker]</text:span>. Accessing the spell checker through the <text:span text:style-name="Code (in text)">LinguServiceManager</text:span> and initializing the <text:span text:style-name="Code (in text)">mxSpell</text:span> object is done by: [SOURCE:OfficeDev/Linguistic/LinguisticExamples.java]</text:p>
  <text:p text:style-name="Code">/** Get the SpellChecker to be used.</text:p>
  <text:p text:style-name="Code">*/</text:p>
  <text:p text:style-name="Code">public boolean GetSpell()</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>throws com.sun.star.uno.Exception,</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>com.sun.star.uno.RuntimeException</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>if (mxLinguSvcMgr != null)</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>mxSpell = mxLinguSvcMgr.getSpellChecker();</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>return mxSpell != null;</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="P25">Relevant <text:span text:style-name="T21">properties</text:span> </text:p>
  <text:p text:style-name="Paragraph">The properties of the <text:span text:style-name="Code (in text)">LinguProperties</text:span> service evaluated by the spell checker are:</text:p>
  <table:table table:name="Table1" table:style-name="Table1">
   <table:table-column table:style-name="Table1.A"/>
   <table:table-column table:style-name="Table1.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table1.A1" table:number-columns-spanned="2" table:value-type="string">
      <text:p text:style-name="P26">Spell-checking Properties of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.LinguProperties]</text:span> Description</text:p>
     </table:table-cell>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.linguistic2.LinguProperties:IsIgnoreControlCharacters]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.B2" table:value-type="string">
     <text:p text:style-name="Texttable">Defines if control characters should be ignored or not.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.linguistic2.LinguProperties:IsUseDictionaryList]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.B2" table:value-type="string">
     <text:p text:style-name="Texttable">Defines if the dictionary-list should be used or not.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.linguistic2.LinguProperties:IsGermanPreReform]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.B2" table:value-type="string">
     <text:p text:style-name="Texttable">Defines if the new German spelling rules should be used for German language text or not.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.linguistic2.LinguProperties:IsSpellUpperCase]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.B2" table:value-type="string">
     <text:p text:style-name="Texttable">Defines if words with only uppercase letters should be subject to spellchecking or not.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.linguistic2.LinguProperties:IsSpellWithDigits]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.B2" table:value-type="string">
     <text:p text:style-name="Texttable">Defines if words containing digits or numbers should be subject to spellchecking or not.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.linguistic2.LinguProperties:IsSpellCapitalization]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.B2" table:value-type="string">
     <text:p text:style-name="Texttable">dDefines if the captitalization of words should be checked or not.</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">Changing the values of these properties in the <text:span text:style-name="Code (in text)">LinguProperties</text:span> affect all subsequent calls to the spell checker. Instantiate a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.LinguProperties]</text:span> instance and change it by calling <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.XPropertySet:setPropertyValue]()</text:span>. The changes affect the whole office unless another modifies the properties again. This is done implicitly when changing the linguistic settings through <text:span text:style-name="Buttons/Menus">Tools - Options - Language Settings - Writing Aids</text:span>. </text:p>
  <text:p text:style-name="Paragraph">The following example shows verifying single words: [SOURCE:OfficeDev/Linguistic/LinguisticExamples.java]</text:p>
  <text:p text:style-name="Code">// test with correct word</text:p>
  <text:p text:style-name="Code">String aWord = &quot;horseback&quot;;</text:p>
  <text:p text:style-name="Code">boolean bIsCorrect = mxSpell.isValid( aWord, aLocale, aEmptyProps );</text:p>
  <text:p text:style-name="Code">System.out.println( aWord + &quot;: &quot; + <text:s/>bIsCorrect );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// test with incorrect word</text:p>
  <text:p text:style-name="Code">aWord = &quot;course&quot;;</text:p>
  <text:p text:style-name="Code">bIsCorrect = mxSpell.isValid( aWord, aLocale , aEmptyProps );</text:p>
  <text:p text:style-name="Code">System.out.println( aWord + &quot;: &quot; + <text:s/>bIsCorrect ); <text:s text:c="3"/></text:p>
  <text:p text:style-name="Paragraph">Tne following example shows <text:s/>spelling a single word and retrieving possible corrections:</text:p>
  <text:p text:style-name="Code">aWord = &quot;house&quot;;</text:p>
  <text:p text:style-name="Code">XSpellAlternatives xAlt = mxSpell.spell( aWord, aLocale, aEmptyProps );</text:p>
  <text:p text:style-name="Code">if (xAlt == null)</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>System.out.println( aWord + &quot; is correct.&quot; );</text:p>
  <text:p text:style-name="Code">else</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>System.out.println( aWord + &quot; is not correct. A list of proposals follows.&quot; );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>String[] aAlternatives = xAlt.getAlternatives();</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>if (aAlternatives.length == 0)</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>System.out.println( &quot;no proposal found.&quot; );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>else</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>for (int i = 0; i &lt; aAlternatives.length; ++i)</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>System.out.println( aAlternatives[i] );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">For a description of the return types interface, refer to <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XSpellAlternatives]</text:span>.</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="hyphenator"/>Using Hyphenator</text:h>
  <text:p text:style-name="Paragraph">The interface used for hyphenation is <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XHyphenator]</text:span>. Accessing the hyphenator through the <text:span text:style-name="Code (in text)">LinguServiceManager</text:span> and initializing the <text:span text:style-name="Code (in text)">mxHyph</text:span> object is done by: [SOURCE:OfficeDev/Linguistic/LinguisticExamples.java]</text:p>
  <text:p text:style-name="Code">/** Get the Hyphenator to be used.</text:p>
  <text:p text:style-name="Code">*/</text:p>
  <text:p text:style-name="Code">public boolean GetHyph()</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>throws com.sun.star.uno.Exception,</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>com.sun.star.uno.RuntimeException</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>if (mxLinguSvcMgr != null)</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>mxHyph = mxLinguSvcMgr.getHyphenator();</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>return mxHyph != null;</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="P25">Relevant <text:span text:style-name="T21">properties</text:span> </text:p>
  <text:p text:style-name="Paragraph">The properties of the LinguProperties service evaluated by the hyphenator are:</text:p>
  <table:table table:name="Table2" table:style-name="Table2">
   <table:table-column table:style-name="Table2.A"/>
   <table:table-column table:style-name="Table2.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table2.A1" table:number-columns-spanned="2" table:value-type="string">
      <text:p text:style-name="P26">Hyphenating Properties of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.LinguProperties]</text:span></text:p>
     </table:table-cell>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.linguistic2.LinguProperties:IsIgnoreControlCharacters]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.B2" table:value-type="string">
     <text:p text:style-name="Texttable">Defines if control characters should be ignored or not.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.linguistic2.LinguProperties:IsUseDictionaryList]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.B2" table:value-type="string">
     <text:p text:style-name="Texttable">Defines if the dictionary-list should be used or not.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.linguistic2.LinguProperties:IsGermanPreReform]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.B2" table:value-type="string">
     <text:p text:style-name="Texttable">Defines if the new German spelling rules should be used for German language text or not.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.linguistic2.LinguProperties:HyphMinLeading]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.B2" table:value-type="string">
     <text:p text:style-name="Texttable">The minimum number of characters of a hyphenated word to remain before the hyphenation character.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.linguistic2.LinguProperties:HyphMinTrailing]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.B2" table:value-type="string">
     <text:p text:style-name="Texttable">The minimum number of characters of a hyphenated word to remain after the hyphenation character.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.linguistic2.LinguProperties:HyphMinWordLength]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.B2" table:value-type="string">
     <text:p text:style-name="Texttable">The minimum length of a word to be hyphenated.</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">Changing the values of these properties in the Lingu-Properties affect all subsequent calls to the hyphenator.</text:p>
  <text:p text:style-name="Paragraph">A <text:span text:style-name="T22">valid</text:span> hyphenation position is a possible one that meets the restrictions given by the <text:span text:style-name="Code (in text)">HyphMinLeading</text:span>, <text:span text:style-name="Code (in text)">HyphMinTrailing</text:span> and <text:span text:style-name="Code (in text)">HyphMinWordLength</text:span> values.</text:p>
  <text:p text:style-name="Paragraph">For example, if <text:span text:style-name="Code (in text)">HyphMinWordLength</text:span> is <text:span text:style-name="Code (in text)">7</text:span>, &quot;remove&quot; does not have a <text:span text:style-name="T22">valid</text:span> hyphenation position. Also, this is the case when <text:span text:style-name="Code (in text)">HyphMinLeading</text:span> is <text:span text:style-name="Code (in text)">3</text:span> or <text:span text:style-name="Code (in text)">HyphMinTrailing</text:span> is <text:span text:style-name="Code (in text)">5</text:span>.</text:p>
  <text:p text:style-name="Paragraph">The following example shows a word hypenated: [SOURCE:OfficeDev/Linguistic/LinguisticExamples.java]</text:p>
  <text:p text:style-name="Code">// maximum number of characters to remain before the hyphen </text:p>
  <text:p text:style-name="Code">// character in the resulting word of the hyphenation</text:p>
  <text:p text:style-name="Code">short nMaxLeading = 6;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">XHyphenatedWord xHyphWord = mxHyph.hyphenate( &quot;horseback&quot;, aLocale, nMaxLeading , aEmptyProps );</text:p>
  <text:p text:style-name="Code">if (xHyphWord == null)</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>System.out.println( &quot;no valid hyphenation position found&quot; );</text:p>
  <text:p text:style-name="Code">else</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>System.out.println( &quot;valid hyphenation pos found at &quot; + xHyphWord.getHyphenationPos() </text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>+ &quot; in &quot; + xHyphWord.getWord() );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>System.out.println( &quot;hyphenation char will be after char &quot; + xHyphWord.getHyphenPos() </text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>+ &quot; in &quot; + xHyphWord.getHyphenatedWord() );</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">If the hyphenator implementation is working correctly, it reports a <text:span text:style-name="T22">valid</text:span> hyphenation position of 4 that is after the &apos;horse&apos; part. Experiment with other values for <text:span text:style-name="Code (in text)">nMaxLeading</text:span> and other words. For example, if you set it to 4, no <text:span text:style-name="T22">valid</text:span> hyphenation position is found since there is no hyphenation position in the word &apos;horseback&apos; before and including the &apos;s&apos;.</text:p>
  <text:p text:style-name="Paragraph">For a description of the return types interface, refer to<text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XHyphenatedWord]</text:span>.</text:p>
  <text:p text:style-name="Paragraph">The example below shows querying for an alternative spelling. In some languages, for example German in the old (pre-reform) spelling, there are words where the spelling of changes when they are hyphenated at specific positions. To inquire about the existence of alternative spellings, the <text:span text:style-name="Code (in text)">queryAlternativeSpelling()</text:span> function is used: [SOURCE:OfficeDev/Linguistic/LinguisticExamples.java]</text:p>
  <text:p text:style-name="Code">//! Note: &apos;aProps&apos; needs to have set &apos;IsGermanPreReform&apos; to true!</text:p>
  <text:p text:style-name="Code">xHyphWord = mxHyph.queryAlternativeSpelling( &quot;Schiffahrt&quot;, </text:p>
  <text:p text:style-name="Code"><text:s text:c="20"/>new Locale(&quot;de&quot;,&quot;DE&quot;,&quot;&quot;), (short)4, aProps );</text:p>
  <text:p text:style-name="Code">if (xHyphWord == null)</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>System.out.println( &quot;no alternative spelling found at specified position.&quot; );</text:p>
  <text:p text:style-name="Code">else</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>if (xHyphWord.isAlternativeSpelling())</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>System.out.println( &quot;alternative spelling detectetd!&quot; );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>System.out.println( &quot;valid hyphenation pos found at &quot; + xHyphWord.getHyphenationPos() </text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>+ &quot; in &quot; + xHyphWord.getWord() );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>System.out.println( &quot;hyphenation char will be after char &quot; + xHyphWord.getHyphenPos() </text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>+ &quot; in &quot; + xHyphWord.getHyphenatedWord() );</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">The return types interface is the same as in the above example (<text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XHyphenatedWord]</text:span>).</text:p>
  <text:p text:style-name="Paragraph">The next example demonstrates getting possible hyphenation positions. To determine all possible hyphenation positions in a word, do this: [SOURCE:OfficeDev/Linguistic/LinguisticExamples.java]</text:p>
  <text:p text:style-name="Code">XPossibleHyphens xPossHyph = mxHyph.createPossibleHyphens( &quot;waterfall&quot;, aLocale, aEmptyProps );</text:p>
  <text:p text:style-name="Code">if (xPossHyph == null)</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>System.out.println( &quot;no hyphenation positions found.&quot; );</text:p>
  <text:p text:style-name="Code">else</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>System.out.println( xPossHyph.getPossibleHyphens() ); <text:s text:c="3"/></text:p>
  <text:p text:style-name="Paragraph">For a description of the return types interface, refer to <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XPossibleHyphens]</text:span>.</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="thesaurus"/>Using <text:alphabetical-index-mark text:string-value="thesaurus"/>Thesaurus</text:h>
  <text:p text:style-name="Paragraph">The interface used for the thesaurus is <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XThesaurus]</text:span>. Accessing the thesaurus through the <text:span text:style-name="Code (in text)">LinguServiceManager</text:span> and initializing the <text:span text:style-name="Code (in text)">mxThes</text:span> object is done by: [SOURCE:OfficeDev/Linguistic/LinguisticExamples.java]</text:p>
  <text:p text:style-name="Code">/** Get the Thesaurus to be used.</text:p>
  <text:p text:style-name="Code">*/</text:p>
  <text:p text:style-name="Code">public boolean GetThes()</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>throws com.sun.star.uno.Exception,</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>com.sun.star.uno.RuntimeException</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>if (mxLinguSvcMgr != null)</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>mxThes = mxLinguSvcMgr.getThesaurus();</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>return mxThes != null;</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">The properties of the <text:span text:style-name="Code (in text)">LinguProperties</text:span> service evaluated by the thesaurus are:</text:p>
  <table:table table:name="Table4" table:style-name="Table4">
   <table:table-column table:style-name="Table4.A"/>
   <table:table-column table:style-name="Table4.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table4.A1" table:number-columns-spanned="2" table:value-type="string">
      <text:p text:style-name="P26">Thesaurus related Properties of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.LinguProperties]</text:span></text:p>
     </table:table-cell>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Table4.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.linguistic2.LinguProperties:IsIgnoreControlCharacters]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table4.B2" table:value-type="string">
     <text:p text:style-name="Texttable">Defines if control characters should be ignored or not.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table4.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.linguistic2.LinguProperties:IsGermanPreReform]</text:span></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table4.B2" table:value-type="string">
     <text:p text:style-name="Texttable">Defines if the new German spelling rules should be used for German language text or not.</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">Changing the values of these properties in the <text:span text:style-name="Code (in text)">LinguProperties</text:span> affect all subsequent calls to the thesaurus. The following example about retrieving synonyms shows this: [SOURCE:OfficeDev/Linguistic/LinguisticExamples.java]</text:p>
  <text:p text:style-name="Code">XMeaning[] xMeanings = mxThes.queryMeanings( &quot;house&quot;, aLocale, aEmptyProps );</text:p>
  <text:p text:style-name="Code">if (xMeanings == null)</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>System.out.println( &quot;nothing found.&quot; );</text:p>
  <text:p text:style-name="Code">else</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>for (int i = 0; i &lt; xMeanings.length; ++i)</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>System.out.println( &quot;Meaning: &quot; + xMeanings[i].getMeaning() );</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>String[] aSynonyms = xMeanings[i].querySynonyms();</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>for (int k = 0; k &lt; aSynonyms.length; ++k)</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>System.out.println( &quot; <text:s text:c="3"/>Synonym: &quot; + aSynonyms[k] );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">The reason to subdivide synonyms into different meanings is becausethere are different synonyms for some words that are not even closely related. For example, the word &apos;house&apos; has the synonyms &apos;home&apos;, &apos;place&apos;, &apos;dwelling&apos;, &apos;family&apos;, &apos;clan&apos;, &apos;kindred&apos;, &apos;room&apos;, &apos;board&apos;, and &apos;put up&apos;.</text:p>
  <text:p text:style-name="Paragraph">The first three in the aboce list have the meaning of &apos;building where one lives&apos; where the next three mean that of &apos;a group of people sharing common ancestry&apos; and the last three means that of &apos;to provide with lodging&apos;. Thus, having meanings is a way to group large sets of synonyms into smaller ones with approximately the same definition.</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="events"/>Events</text:h>
  <text:p text:style-name="Paragraph">There are several types of events. For example, all user dictionaries <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XDictionary]</text:span> report their status changes as events <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.DictionaryEvent]</text:span> to the <text:span text:style-name="Code (in text)">DictionaryList</text:span>, which collects and transforms their information into <text:span text:style-name="Code (in text)">DictionaryList</text:span> events <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.DictionaryListEvent],</text:span> and passes those on to its own listeners.</text:p>
  <text:p text:style-name="Paragraph">Thus, it is possible to register to the <text:span text:style-name="Code (in text)">DictionaryList</text:span> as a listener to be informed about relevant changes in the dictionaries., There is no need to register as a listener for each dictionary.</text:p>
  <text:p text:style-name="Paragraph">The spell checker and hyphenator implementations monitor the changes in the <text:span text:style-name="Code (in text)">LinguProperties</text:span> for changes of their relevant properties. If such a property changes its value, the implementation launches an event <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.LinguServiceEvent]</text:span>that hints to its listeners that spelling or hyphenation should be reevaluated. For this purpose, those implementations support the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XLinguServiceEventBroadcaster]</text:span> interface.</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">LinguServiceManager</text:span> acts as a listener for <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.DictionaryListEvent]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.LinguServiceEvent]</text:span> events. The respective interfaces are <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2].XDictionaryListEventListener]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XLinguServiceEventListener]</text:span>. The events from the <text:span text:style-name="Code (in text)">DictionaryList</text:span> are transformed into <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.LinguServiceEvent]</text:span> events and passed to the listeners of the <text:span text:style-name="Code (in text)">LinguServiceManager</text:span>, along with the received events from the spell checkers and hyphenators.</text:p>
  <text:p text:style-name="Paragraph">Therefore, a client that wants to be notified when spell checking or hyphenation changes, for example, when it features automatic spell checking or automatic hyphenation, needs to be registered as <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XLinguServiceEventListener]</text:span> to the <text:span text:style-name="Code (in text)">LinguServiceManager</text:span> only.</text:p>
  <text:p text:style-name="Paragraph">Implementing the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XLinguServiceEventListener]</text:span> interface is similar to the following snippet: [SOURCE:OfficeDev/Linguistic/LinguisticExamples.java]</text:p>
  <text:p text:style-name="Code">/** simple sample implementation of a clients XLinguServiceEventListener</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>* <text:s/>interface implementation</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>*/</text:p>
  <text:p text:style-name="Code">public class Client </text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>implements XLinguServiceEventListener</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>public void disposing ( EventObject aEventObj )</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>//! any references to the EventObjects source have to be</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>//! released here now!</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>System.out.println(&quot;object listened to will be disposed&quot;);</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>public void processLinguServiceEvent( LinguServiceEvent aServiceEvent )</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{ <text:s text:c="2"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>//! do here whatever you think needs to be done depending</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>//! on the event recieved (e.g. trigger background spellchecking</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>//! or hyphenation again.)</text:p>
  <text:p text:style-name="Code"><text:s text:c="20"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>System.out.println(&quot;Listener called&quot;);</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code">};</text:p>
  <text:p text:style-name="Paragraph">After the client has been instantiated, it needs to register as <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XLinguServiceEventListener]</text:span>. For the sample client above, this looks like: [SOURCE:OfficeDev/Linguistic/LinguisticExamples.java]</text:p>
  <text:p text:style-name="Code">XLinguServiceEventListener aClient = new Client();</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// now add the client as listener to the service manager to</text:p>
  <text:p text:style-name="Code">// get informed when spellchecking or hyphenation may produce</text:p>
  <text:p text:style-name="Code">// different results then before.</text:p>
  <text:p text:style-name="Code">mxLinguSvcMgr.addLinguServiceManagerListener( aClient );</text:p>
  <text:p text:style-name="Paragraph">This enables the sample client to receive <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.LinguServiceEvent]s</text:span> and act accordingly. Before the sample client terminates, it has to stop listening for events from the <text:span text:style-name="Code (in text)">LinguServiceManager</text:span>:</text:p>
  <text:p text:style-name="Code">//! remove listener before programm termination.</text:p>
  <text:p text:style-name="Code">//! should not be omitted.</text:p>
  <text:p text:style-name="Code">mxLinguSvcMgr.removeLinguServiceManagerListener(aClient);</text:p>
  <text:p text:style-name="Paragraph">In the <text:span text:style-name="www/ftp/email">LinguisticExamples.java</text:span> sample, a property is modified for the listener to be called.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Implementing a Spell Checker</text:h>
  <text:p text:style-name="Paragraph">A sample implementation of a spell checker isfound in the [SOURCE:OfficeDev/Linguistic/SampleSpellChecker.java] file from the examples for linguistics.</text:p>
  <text:p text:style-name="Paragraph">The spell checker implements the following interfaces:</text:p>
  <text:unordered-list text:style-name="L14">
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XSpellChecker]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XLinguServiceEventBroadcaster]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XInitialization]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XServiceDisplayName]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XServiceInfo]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XComponent]</text:span></text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">and</text:p>
  <text:unordered-list text:style-name="L15">
   <text:list-item>
    <text:p text:style-name="P28"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XTypeProvider]</text:span>, to access your add-in interfaces from [PRODUCTNAME] Basic, otherwise, this interface is not mandatory.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">To implement a spell checker of your own, modify the sample in the following ways:</text:p>
  <text:p text:style-name="Paragraph">Choose a <text:span text:style-name="T22">unique</text:span> service implementation nameto distinguish your service implementation from any other. To do this, edit the string in the line</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>public static String _aSvcImplName = &quot;com.sun.star.linguistic2.JavaSamples.SampleSpellChecker&quot;;</text:p>
  <text:p text:style-name="Paragraph">Then, specify the list of languages supported by your service. Edit the </text:p>
  <text:p text:style-name="Code">public Locale[] getLocales()</text:p>
  <text:p text:style-name="Paragraph">function and modify the </text:p>
  <text:p text:style-name="Code">public boolean hasLocale( Locale aLocale )</text:p>
  <text:p text:style-name="Paragraph">function accordingly. The next step is to change the </text:p>
  <text:p text:style-name="Code">private short GetSpellFailure(...)</text:p>
  <text:p text:style-name="Paragraph">as required. This function determines if a word is spelled correctly in a given language. If the word is OK return -1, otherwise return an appropriate value of the type <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.SpellFailure]</text:span>.</text:p>
  <text:p text:style-name="Paragraph">Check if you need to edit or remove the </text:p>
  <text:p text:style-name="Code">private boolean IsUpper(...) </text:p>
  <text:p text:style-name="Paragraph">and </text:p>
  <text:p text:style-name="Code">private boolean HasDigits(...)</text:p>
  <text:p text:style-name="Paragraph">functions. Consider this only if you are planning to support non-western languages and need sophisticated versions of those, or do not need them at all. Do not forget to change the code at the end of </text:p>
  <text:p text:style-name="Code">public boolean isValid(...) </text:p>
  <text:p text:style-name="Paragraph">accordingly.</text:p>
  <text:p text:style-name="Paragraph">Supply your own version of </text:p>
  <text:p text:style-name="Code">private XSpellAlternatives GetProposals(...)</text:p>
  <text:p text:style-name="Paragraph">It provides the return value for the </text:p>
  <text:p text:style-name="Code">public XSpellAlternatives spell(...)</text:p>
  <text:p text:style-name="Paragraph">function call if the word was found to be incorrect. The main purpose is to provide proposals for how the word might be written correctly. Note the list ay be empty.</text:p>
  <text:p text:style-name="Paragraph">Next, edit the text in </text:p>
  <text:p text:style-name="Code">public String getServiceDisplayName(...)</text:p>
  <text:p text:style-name="Paragraph">It should be unique but it is not necessary. If you are developing a set of services, that is, spellchecker, hyphenator and thesaurus, it should be the same for all of them. This text is displayed in dialogs to show a more meaningful text than the service implementation name.</text:p>
  <text:p text:style-name="Paragraph">Now, have a look in the constructor</text:p>
  <text:p text:style-name="Code">public SampleSpellChecker()</text:p>
  <text:p text:style-name="Paragraph">at the property names. Remove the entries for the properties that are not relevant to your service implementation. If you make modification, also look in the file <text:span text:style-name="www/ftp/email">PropChgHelper_Spell.java</text:span> in the function </text:p>
  <text:p text:style-name="Code">public void propertyChange(...)</text:p>
  <text:p text:style-name="Paragraph">and change it accordingly. <text:line-break/></text:p>
  <text:p text:style-name="Paragraph">Set the values of <text:span text:style-name="Code (in text)">bSCWA</text:span> and <text:span text:style-name="Code (in text)">bSWWA</text:span> to <text:span text:style-name="Code (in text)">true</text:span> only for those properties that are relevant to your implementation, thus avoiding sending unnecessary <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.LinguServiceEvent]</text:span> events, that is, avoid triggering spell-checking in clients if there is no requirement.</text:p>
  <text:p text:style-name="Paragraph">Finally, after registration of the service (see <text:span text:style-name="ChapterRef">[Chapter:Components.Deployment]</text:span>) it has to be activated to be used by the <text:span text:style-name="Code (in text)">LinguServiceManager</text:span>. After restarting [PRODUCTNAME], this is done in the following manner:</text:p>
  <text:p text:style-name="Paragraph">Open the dialog <text:span text:style-name="Buttons/Menus">Tools – Options – Language Settings – Writing Aids</text:span>. In the section <text:span text:style-name="Buttons/Menus">Writing Aids,</text:span> in the box <text:span text:style-name="Buttons/Menus">Available Language Modules,</text:span> a new entry with text of the Service Display Name that you chose is displayed in the implementation. Check the empty checkbox to the left of that entry. If you want to use your module, uncheck any other listed entry. If you want to make more specific settings per language, press the <text:span text:style-name="Buttons/Menus">Edit</text:span> button next to the modules box and use that dialog.</text:p>
  <text:p text:style-name="Paragraph">[BUG641+]The Context menu of the Writer that pops up when pressing the right-mouse button over an incorrectly spelled word currently has a bug that may crash the program when the Java implementation of a spell checker is used. The spell check dialog is functioning. </text:p>
  <text:h text:style-name="Head 4" text:level="4">Implementing a Hyphenator</text:h>
  <text:p text:style-name="Paragraph">A sample implementation of a hyphenator is found in the [SOURCE:OfficeDev/Linguistic/SampleHyphenator.java] file from the examples for linguistic.</text:p>
  <text:p text:style-name="Paragraph">The hyphenator implements the following interfaces:</text:p>
  <text:unordered-list text:style-name="L14">
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XHyphenator]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XLinguServiceEventBroadcaster]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XInitialization]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XServiceDisplayName]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XServiceInfo]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XComponent]</text:span></text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">and</text:p>
  <text:unordered-list text:style-name="L15">
   <text:list-item>
    <text:p text:style-name="P28"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XTypeProvider]</text:span>, if you want to access your add-in interfaces from [PRODUCTNAME] Basic, otherwise, this interface is not mandatory.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">Aside from choosing a new service implementation name, the process of implementing the hyphenator is the same as implementing the spell checker, except that you need to implement the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XHyphenator]</text:span> interface instead of the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XSpellChecker]</text:span> interface.</text:p>
  <text:p text:style-name="Paragraph">You can choose a different set of languages to be supported. When editing the sample code, modify the hasLocale() and getLocales() methods to reflect the set of languages your implementation supports.</text:p>
  <text:p text:style-name="Paragraph">To implement the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XHyphenator]</text:span> interface, modify the functions</text:p>
  <text:p text:style-name="Code">public XHyphenatedWord hyphenate(...)</text:p>
  <text:p text:style-name="Code">public XHyphenatedWord queryAlternativeSpelling(...)</text:p>
  <text:p text:style-name="Code">public XPossibleHyphens createPossibleHyphens(...)&lt;</text:p>
  <text:p text:style-name="Paragraph">in the sample hyphenator source file at the stated positions.</text:p>
  <text:p text:style-name="Paragraph">Look in the constructor </text:p>
  <text:p text:style-name="Code">public SampleHyphenator() </text:p>
  <text:p text:style-name="Paragraph">at the relevant properties and modify the </text:p>
  <text:p text:style-name="Code">public void propertyChange(...) </text:p>
  <text:p text:style-name="Paragraph">function in the file [SOURCE:OfficeDev/Linguistic/PropChgHelper_Hyph.java] accordingly.</text:p>
  <text:p text:style-name="Paragraph">The rest, registration and activation is again the same as for the spell checker.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Implementing a <text:alphabetical-index-mark text:string-value="thesaurus"/>Thesaurus</text:h>
  <text:p text:style-name="Paragraph">A sample implementation of a thesaurus is found in the [SOURCE:OfficeDev/Linguistic/SampleThesaurus.java] file from the examples for linguistic.</text:p>
  <text:p text:style-name="Paragraph">The thesaurus implements the following interfaces:</text:p>
  <text:unordered-list text:style-name="L14">
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XThesaurus]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XInitialization]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XServiceDisplayName]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XServiceInfo]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P27"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XComponent]</text:span></text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">and</text:p>
  <text:unordered-list text:style-name="L15">
   <text:list-item>
    <text:p text:style-name="P28"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XTypeProvider]</text:span>, if you want to access your add-in interfaces from [PRODUCTNAME] Basic, otherwise, this interface is not mandatory.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">For the implementation of the thesaurus, modify the sample thesaurus by following the same procedure as for the spell checker and thesaurus:</text:p>
  <text:p text:style-name="Paragraph">Choose a different implementation name for the service and modify the </text:p>
  <text:p text:style-name="Code">public Locale[] getLocales()</text:p>
  <text:p text:style-name="Paragraph">and </text:p>
  <text:p text:style-name="Code">public boolean hasLocale(...)</text:p>
  <text:p text:style-name="Paragraph">functions.</text:p>
  <text:p text:style-name="Paragraph">The only function to be modified at the stated position to implement the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.linguistic2.XThesaurus]</text:span> interface is </text:p>
  <text:p text:style-name="Code">public XMeaning[] queryMeanings(...)</text:p>
  <text:p text:style-name="Paragraph">Look in the constructor </text:p>
  <text:p text:style-name="Code">public SampleThesaurus() </text:p>
  <text:p text:style-name="Paragraph">to see if there are properties you do not require.</text:p>
  <text:p text:style-name="Paragraph">Registration and activation is the same as for the spell checker and hyphenator.</text:p>
  <text:h text:style-name="Head 3" text:level="3">Integrating <text:alphabetical-index-mark text:string-value="import filter"/>Import<text:alphabetical-index-mark text:string-value="import" text:key1="filter"/> and <text:alphabetical-index-mark text:string-value="export filter"/>Export<text:alphabetical-index-mark text:string-value="export" text:key1="filter"/> Filters</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.frame.XComponentLoader;com.sun.star.document.TypeDetection;com.sun.star.document.ExtendedTypeDetection;com.sun.star.document.FilterFactory;com.sun.star.document.ImportFilter;com.sun.star.document.ExportFilter;com.sun.star.frame.FrameLoader;com.sun.star.frame.SynchronousFrameLoader]This section explains the implementation of [PRODUCTNAME] import and export filter components, focussing on filter components. It is intended as a brief introduction for developers who want to implement [PRODUCTNAME] filters for foreign file formats.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Approaches</text:h>
  <text:p text:style-name="Paragraph">They are several ways to get information into or out of [PRODUCTNAME]: You can</text:p>
  <text:unordered-list text:style-name="L16">
   <text:list-item>
    <text:p text:style-name="P29">link against the application core</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P29">use the document API</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P29">use the XML file format</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">Each method has unique advantages and disadvantages, that are summarized briefly:</text:p>
  <text:p text:style-name="Paragraph">Using the core data structure and linking against the application core is the traditional way to implement filters in [PRODUCTNAME]. The advantages of this method are efficiency and direct access to the document. However, the core implementation provides an implementation centric view of the applications. Additionally, there are a number of technical disadvantages. Every change in the core data structures or objects must be followed by corresponding changes in code that uses them. Consequently, filters need to be recompiled to match the binary layout of the application core objects. While these are manageable, albeit cumbersome, for closed source applications, this method is expected to create a maintenance nightmare if application and filters are developed separately as is customary in open source applications. Simultaneous delivery of a new application build and the corresponding filters developed by third parties looks challenging.</text:p>
  <text:p text:style-name="Paragraph">Using the [PRODUCTNAME] API based on UNO is more advantageous, since it solves the technical problems indicated in the above paragraph. The idea is to read data from a file on loading and build up a document using the [PRODUCTNAME] API, and to iterate over a document model and write the corresponding data to a file on storing. The UNO component technology insulates the filter from binary layout, and other compiler and version dependent issues. Additionally, the API is expected to be more stable than the core interfaces, and provides an <text:s/>abstraction from the core applications. In fact, the example filter implementation of this section makes use of this strategy and is based on the [PRODUCTNAME] API.</text:p>
  <text:p text:style-name="Paragraph">The third is to import and export documents using the XML-based file format. UNO-based XML import and export components feature all of the advantages of the previous method, but additionally provide the filter implementer with a clean, structured, and fully documented view of the document. A significant difficulty in conversion between formats is the conceptual mapping from the one format to the other. From [PRODUCTNAME] [OO1.1] there are XML filter components that carry out the mapping at runtime, so that filter implementers can read from XML streams when exporting and write to XML streams when importing.</text:p>
  <text:p text:style-name="Paragraph">The following section describes the second method using the UNO-based API. Further details on the third method, based on the generic XML format are found in the xml project of OpenOffice.org under <text:a xlink:type="simple" xlink:href="http://xml.openoffice.org/filter/"><text:span text:style-name="www/ftp/email">http://xml.openoffice.org/filter/</text:span></text:a>. The third method to create XML based filters is described afterwards.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Document API Filter Development</text:h>
  <text:p text:style-name="Paragraph">First, we provide an overview of the import and export process using a document API, and gain an understanding of the general concepts. </text:p>
  <text:h text:style-name="Head 5" text:level="5">Introduction</text:h>
  <text:p text:style-name="Paragraph">Inside [PRODUCTNAME] a document is represented by its document service, called <text:span text:style-name="Emphasis">model</text:span>. On disk, the same document is represented as a file or possibly as a dynamic generated output, for example, of a database statement. We cannot assign it to a file on disk, so we call it <text:span text:style-name="Emphasis">content</text:span> to describe it. A filter component is used to convert between these different formats.</text:p>
  <table:table table:name="Tabelle58" table:style-name="Tabelle58">
   <table:table-column table:style-name="Tabelle58.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle58.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr6" draw:name="Rahmen15" text:anchor-type="paragraph" svg:y="0cm" svg:width="9.728cm" fo:min-height="9.858cm" draw:z-index="42">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr3" draw:name="Import/Export filter process" text:anchor-type="paragraph" svg:x="0.004cm" svg:y="0.002cm" svg:width="9.449cm" svg:height="9.29cm" draw:z-index="43" xlink:href="import_export.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Import/Export filter process</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration15" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.16</text:sequence>: Import/Export Filter Process</text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">If you make use of UNO, this above diagram can be turned into programming reality quite easily. The three entities in the diagram, content, model, and filter, all have direct counterparts in UNO services. The services consist of several interfaces that map to a specific implementation, for example, using C++ or Java.</text:p>
  <text:p text:style-name="Paragraph">The filter writer creates a class that implements the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.ExportFilter]</text:span> or <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.ImportFilter]</text:span> services, or both. To achieve this, the corresponding stream or URL is obtained from the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.MediaDescriptor]</text:span>. The incoming data is then interpreted and the model is used by calling the appropriate methods. The available methods depend on the type of document as described by the document service.</text:p>
  <text:p text:style-name="Paragraph">For a list of available document services, refer to the section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.UsingCompFramework.Models.DocumentSpecific]</text:span>.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Filtering Process</text:h>
  <text:p text:style-name="Paragraph">Inside [PRODUCTNAME], the whole process of loading or saving contents is realized as a modular system that is based on UNO services. <text:span text:style-name="T3">It functions generically in many components and is easily adapted to the developer&apos;s needs through the addition of custom modules or the removal of others.</text:span> </text:p>
  <text:p text:style-name="P30"/>
  <text:p text:style-name="P31"><text:alphabetical-index-mark text:string-value="loading" text:key1="filter"/>Loading:</text:p>
  <text:p text:style-name="TitledListBody">A URL or a stream is passed to <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XComponentLoader:loadComponentFromURL]()</text:span>. The load properties create a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.MediaDescriptor]</text:span> that is filled with the URL or stream, and the load properties. The component loader implementation passes the information about the resource to the <text:span text:style-name="Code (in text)">TypeDetection</text:span>.</text:p>
  <text:p text:style-name="TitledListBody">The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.TypeDetection]</text:span> uses the <text:span text:style-name="Code (in text)">MediaDescriptor</text:span> to determine a unique type name that is necessary to create a filter instance at the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.FilterFactory]</text:span>. </text:p>
  <text:p text:style-name="TitledListBody">The <text:span text:style-name="Code (in text)">TypeDetection</text:span> also employs the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.ExtendedTypeDetection]</text:span>that examines the given resource and confirms the unique type name determined by <text:span text:style-name="Code (in text)">TypeDetection</text:span>. The <text:span text:style-name="Code (in text)">MediaDescriptor</text:span> is updated, if necessary, and a unique type name is returned.</text:p>
  <text:p text:style-name="TitledListBody">Finally, the component loader ensures there is a frame, or creates a new one, if necessary, and asks a <text:s/>frame loader service (<text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FrameLoader]</text:span> or <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.SynchronousFrameLoader]</text:span>) to load the resource into the frame. Its interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrameLoader]</text:span> has a method <text:span text:style-name="Code (in text)">load()</text:span> that takes a frame, the <text:span text:style-name="Code (in text)">MediaDescriptor</text:span> and an event listener, and creates a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.ImportFilter]</text:span> instance at the <text:span text:style-name="Code (in text)">FilterFactory</text:span> to load the resource into the given frame. For this purpose, it calls <text:span text:style-name="Code (in text)">createInstance()</text:span> with the filter implementation name (such as com.sun.star.comp.Writer.GenericXMLFilter) or <text:span text:style-name="Code (in text)">createInstanceWithArguments()</text:span> with the implementation name and additional arguments used to initialize the filter.</text:p>
  <text:p text:style-name="TitledListBody">Then, the loader calls <text:span text:style-name="Code (in text)">setTargetDocument() </text:span>and <text:span text:style-name="Code (in text)">filter()</text:span> on the <text:span text:style-name="Code (in text)">ImportFilter</text:span> service. The <text:span text:style-name="Code (in text)">ImportFilter</text:span> creates its results in the given target document.</text:p>
  <text:p text:style-name="TitledListHead"><text:alphabetical-index-mark text:string-value="storing to a URL" text:key1="filter"/>Storing to a URL:</text:p>
  <text:p text:style-name="TitledListBody">A URL or a stream is passed to <text:span text:style-name="Code (in text)">storeToURL()</text:span> or <text:span text:style-name="Code (in text)">storeAsURL()</text:span> in the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XStorable]</text:span>, implemented by office documents. The store properties create a media descriptor that is filled with the URL or stream, and the store properties. <text:span text:style-name="T3">The </text:span><text:span text:style-name="T4">TypeDetection</text:span> <text:span text:style-name="T3">provides a unique type name that is used with the </text:span><text:span text:style-name="T4">FilterFactory</text:span> <text:span text:style-name="T3">to create a </text:span><text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.ExportFilter]</text:span><text:span text:style-name="T3">. </text:span></text:p>
  <text:p text:style-name="P32">The <text:span text:style-name="Code (in text)">XStorable</text:span> implementation calls <text:span text:style-name="Code (in text)">setSourceDocument()</text:span> and <text:span text:style-name="Code (in text)">filter()</text:span> at the filter, which writes the results to the storage specified in the <text:span text:style-name="Code (in text)">MediaDescriptor</text:span> passed to <text:span text:style-name="Code (in text)">filter()</text:span>. </text:p>
  <table:table table:name="Tabelle6" table:style-name="Tabelle6">
   <table:table-column table:style-name="Tabelle6.A"/>
   <table:table-column table:style-name="Tabelle6.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle6.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note14" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="60" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle6.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">Many existing filters are legacy filters. The <text:span text:style-name="Code (in text)">XStorable</text:span> implementation does not use the <text:span text:style-name="Code (in text)">FilterFactory</text:span> to create them, but triggers filtering by internal calls.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="P33">If a URL or an already open stream takes part in the load or save process of the [PRODUCTNAME], the following services and operations are involved: </text:p>
  <table:table table:name="Table5" table:style-name="Table5">
   <table:table-column table:style-name="Table5.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table5.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr6" draw:name="Frame4" text:anchor-type="paragraph" svg:y="0cm" svg:width="14.672cm" fo:min-height="15.33cm" draw:z-index="61">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr11" draw:name="Sequence diagram of a filter process" text:anchor-type="paragraph" svg:y="0cm" svg:width="14.42cm" svg:height="14.831cm" draw:z-index="62" xlink:href="sequence_diagram_load_url.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Sequence diagram showing  a filter process</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration16" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.17</text:sequence>: General <text:span text:style-name="T3">Filtering Process</text:span> </text:p>
       </draw:text-box></text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="P33">In the following, the modules that participate in the loading process are discussed in detail.</text:p>
  <text:h text:style-name="Head 6" text:level="6">MediaDescriptor</text:h>
  <text:p text:style-name="Paragraph">The <text:alphabetical-index-mark-start text:id="IMark43875748" text:key1="filter"/>media descriptor<text:alphabetical-index-mark-end text:id="IMark43875748"/> is an abstract description of a content specifying the <text:span text:style-name="Emphasis">where from</text:span> and the <text:span text:style-name="Emphasis">how</text:span> for the handling of the content to be performed. A content is also called a <text:span text:style-name="Emphasis">medium</text:span>. Refer to <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.HandleDocuments.Loading.MediaDesc]</text:span> for further information. Inside the [PRODUCTNAME], it is realized as a sequence of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.PropertyValue]</text:span> structs as a parameter.</text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="T3">A descriptor is passed to various methods which are involved in the load and save process.</text:span> </text:p>
  <text:p text:style-name="Paragraph">Every member of the process can use this descriptor and change it to update the information about the document. This descriptor is used as an [inout] parameter by <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XTypeDetection:queryTypeByDescriptor]()</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XExtendedFilterDetection:detect]()</text:span>. The <text:span text:style-name="Code (in text)">MediaDescriptor</text:span> is [in] only in <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XComponentLoader:loadComponentFromURL]()</text:span>, <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.XFrameLoader:load]()</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XFilter:filter]()</text:span>. With methods that take the <text:span text:style-name="Code (in text)">MediaDescriptor</text:span> as [in] parameter only, a manual synchronization must be done by the outside code. T<text:span text:style-name="T3">he caller of a method that accepts the MediaDescriptor as [in] parameter only merges the results, for example, return values, manually into the original descriptor. The model is not available at loading time. It is the result of the load request.</text:span></text:p>
  <table:table table:name="Tabelle7" table:style-name="Tabelle7">
   <table:table-column table:style-name="Tabelle7.A"/>
   <table:table-column table:style-name="Tabelle7.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle7.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important12" text:anchor-type="paragraph" svg:x="0.12cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="44" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle7.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">It is not allowed to hold a member of this descriptor by reference longer than it is used, especially a possible stream item. For example, it would not be possible to close a stream that is still referenced by others. It is only allowed to use it directly or as a copy.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph"/>
  <table:table table:name="Tabelle8" table:style-name="Tabelle8">
   <table:table-column table:style-name="Tabelle8.A"/>
   <table:table-column table:style-name="Tabelle8.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle8.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Tip4" text:anchor-type="paragraph" svg:x="0.067cm" svg:y="0cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="45" xlink:href="../tip.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Tip graphics marks a hint section in the text</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle8.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">The stream part of the <text:span text:style-name="Code (in text)">MediaDescriptor</text:span> is a special item. If a stream exists, it must be used. Only if a stream does not exist, is it allowed to open a new one using the URL. The stream should be set in the <text:span text:style-name="Code (in text)">MediaDescriptor</text:span> to provide it for following users of the descriptor.<text:line-break/>One rule exists for all: the stream inside the descriptor should be seekable. In case it is not, it makes no sense to provide it to the other members of the whole process, especially used sub-modules. On the other hand, a module can be called with a non-seekable stream from outside to perform the operation. For example, for detection or loading it should be no problem. In case a non-seekable stream comes in, but seeking is important, it must be used buffered.<text:line-break/>Another central question is: who controls the lifetime of the stream or the stream position ? The lifetime of a non-seekable stream is controlled by the creator everytime. It has to be deleted after using. Seekable streams should be added to the MediaDescriptor and will be released by the creator of the MediaDescriptor.<text:line-break/>Every (sub-) module must be called with a stream seeked to position 0. Of course, non-seekable streams must be newly created and unused. Internally it can do anything with this stream. Furthermore it is not necessary (or even impossible) to restore any positions. The user of the module has to do such things. </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 6" text:level="6"><text:alphabetical-index-mark text:string-value="type detection"/>TypeDetection</text:h>
  <text:p text:style-name="Paragraph">Every content to be loaded must be specified, that is, the type of content represented in the [PRODUCTNAME] must be well known in [PRODUCTNAME]. The type is usually document type,.however, the results of active contents, for example, macros, or database contents are also described here.</text:p>
  <text:p text:style-name="Paragraph">A special service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.TypeDetection]</text:span> is used to accomplish this. It provides an API to associate, for example, a URL or a stream with the extensions well known to [PRODUCTNAME], MIME types or clipboard formats. The resulting value is an internal unique type name used for further operations by using other services, for example, <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FrameLoaderFactory]</text:span>. This type name can be a part of the already mentioned <text:span text:style-name="Code (in text)">MediaDescriptor</text:span>.</text:p>
  <text:p text:style-name="Paragraph">It is not necessary or useful to replace this service by custom implementations.,It works in a generic method on top of a special configuration. Extending the type detection is done by changing the configuration and is described later. It is required to make these changes if new content formats are provided for [PRODUCTNAME], because this is the reason to integrate custom filters into the product.</text:p>
  <text:h text:style-name="Head 6" text:level="6"><text:alphabetical-index-mark text:string-value="extended type detection" text:key1="type detection"/><text:alphabetical-index-mark text:string-value="extended type detection"/>ExtendedTypeDetection</text:h>
  <text:p text:style-name="Paragraph">Based on the registered types, flat detection is already possible, that is,. the assignment of types, for example, to a URL, on the basis of configuration data only. Tlat detection cannot always get a correct result if you imagine someone modifying the file extension of a text document from .sxw to .txt.. To ensure correct results, we need deep detection, that is, the content has to be examinedThe <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.ExtendedTypeDetection]</text:span> service performs this task. It is called <text:span text:style-name="Emphasis">detector</text:span>. It gets all the information collected on a document and decides the type to assign it to. In the new modular type detection, the detector is meant as a UNO service that registers itself in the [PRODUCTNAME] and is requested by the generic <text:span text:style-name="Code (in text)">TypeDetection</text:span> mechanism, if necessary.</text:p>
  <text:p text:style-name="Paragraph">To extend the list of the known content types of [PRODUCTNAME], we suggest implementing a detector component in addition to a filter. It improves the generic detection of [PRODUCTNAME] and makes the results more secure.</text:p>
  <text:p text:style-name="Paragraph">Inside [PRODUCTNAME], a detector service is called with an already opened stream that is used to find out the content type. In case no stream is given, it indicates that someone else uses this service, for example, outside [PRODUCTNAME]). It is then allowed to open your own stream by using the URL part of the <text:span text:style-name="Code (in text)">MediaDescriptor</text:span>. If the resulting stream is seekable, it should be <text:span text:style-name="T3">set</text:span> inside the descriptor after its position is reset to <text:span text:style-name="Code (in text)">0</text:span>. If the stream is not seekable, it is not allowed to set it. Please follow the already mentioned rules for handling streams. </text:p>
  <text:h text:style-name="Head 6" text:level="6"><text:alphabetical-index-mark text:string-value="frame loader"/>FrameLoader</text:h>
  <text:p text:style-name="Paragraph">Frame loaders load a detected type. A visual component is expected as the result. Such visual components are:</text:p>
  <text:unordered-list text:style-name="L17">
   <text:list-item>
    <text:p text:style-name="P34">trivial components only implementing <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.XWindow]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P34">simple office components implementing the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.Controller]</text:span> service</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P34">full featured office components implementing the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.OfficeDocument]</text:span> service.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="P35">Further details are found in section <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.Overview.FrameworkAPI]</text:span>. </text:p>
  <text:p text:style-name="P35">A frame loader service exist in different versions:</text:p>
  <text:unordered-list text:style-name="L18">
   <text:list-item>
    <text:p text:style-name="P36"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FrameLoader]</text:span> for asynchronous </text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P36"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.SynchronousFrameLoader]</text:span> for synchronous load processes.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">It can be searched or created by another service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FrameLoaderFactory]</text:span>that is described below. The synchronous version is optional. Both services can be implemented at the same component, but the synchronous version is preferred, if it is supported.</text:p>
  <text:p text:style-name="Paragraph">There are two ways to extend [PRODUCTNAME] to load a new content format:</text:p>
  <text:unordered-list text:style-name="L19">
   <text:list-item>
    <text:p text:style-name="P37">implementing a frame loader that uses its own internal mechanism to create the expected visual component, for example, . local file access.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P37">implementing a filter that does the same,but isused by a generic frame loader implementation.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">Note that the first method does not work for exporting, because a loader service can not be used at save timeTo enable a content format for import and export is to provide a filter service. A generic frame loader implementation already exists in [PRODUCTNAME]that uses all well known registered filters in a uniform way. So the second method is preferred.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="filter"/>Filter</text:h>
  <text:p text:style-name="Paragraph">Most of the services described before are used for loading. Normally, they are not necessary for saving, except the <text:span text:style-name="Code (in text)">MediaDescriptor</text:span>. Only filters are fixed members of both processes. </text:p>
  <text:p text:style-name="Paragraph">These objects also represent a service. Their task is to import or export the content of a type into or from a model. Accordingly, import filters are distinguished from export filters. It is possible to provide both functionality in the same implementation.</text:p>
  <text:p text:style-name="Paragraph">A filter is acquired<text:span text:style-name="T3"> </text:span>from the factory service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.FilterFactory]</text:span>. It provides a low-level access to the configuration that knows all registered filters of [PRODUCTNAME], supports search functionality, and creates and initializes filter components. The description of this factory and its configuration are provided below. </text:p>
  <text:p text:style-name="Paragraph">If a filter wants to be initialized with its own configuration data or get existing parameters of the corresponding create request, it implements the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XInitialization]</text:span>. The method <text:span text:style-name="Code (in text)">initialize()</text:span> is used directly after creation by the factory and is the first request on a new filter instance. <text:span text:style-name="T3">The parameter list of </text:span><text:span text:style-name="T4">initialize()</text:span> <text:span text:style-name="T3">uses the following protocol:</text:span> </text:p>
  <text:unordered-list text:style-name="L20">
   <text:list-item>
    <text:p text:style-name="P38">The first item in the list is a sequence of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.PropertyValue]</text:span> structs, that describe the configuration properties of the filter.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P38">All other items are directly copied from the parameter <text:span text:style-name="Code (in text)">Arguments</text:span> of the factory interface method <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XMultiServiceFactory:createWithArguments]()</text:span>.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">A filter should be initialized, because one generic implementation is registered to handle different types, it must know which specialization is required. The simplest way to achieve this for the filter is to know its own configuration data, especially the unique internal name.<text:span text:style-name="T3"> </text:span></text:p>
  <text:p text:style-name="P30"><text:span text:style-name="T23">This information is used internally then, or it is provided by the interface </text:span><text:span text:style-name="T24">[IDL:com.sun.star.container.XNamed]</text:span><text:span text:style-name="T23">. An owner of a filter uses the provided name to find specific information about this component by using the </text:span><text:span text:style-name="T24">FilterFactory</text:span><text:span text:style-name="T23"> service.</text:span></text:p>
  <table:table table:name="Tabelle9" table:style-name="Tabelle9">
   <table:table-column table:style-name="Tabelle9.A"/>
   <table:table-column table:style-name="Tabelle9.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle9.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important13" text:anchor-type="paragraph" svg:x="0.12cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="46" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle9.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">The interface provides functionality for reading and writing of this name. It is not allowed to change an internal filter name during runtime of [PRODUCTNAME], because all filter names must be unique and it is not possible for a filter instance to alter its name. Calls to <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.XNamed:setName]()</text:span> should be ignored or forwarded to the FilterFactory service, which knows all unique names and can solve ambigities!</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">This code snippet initializes a filter instance:</text:p>
  <text:p text:style-name="Code">private String m_sInternalName;</text:p>
  <text:p text:style-name="Code">public void initialize( Object[] lArguments )<text:line-break/> <text:tab-stop/> throws com.sun.star.uno.Exception<text:line-break/> {<text:line-break/> <text:tab-stop/> // no arguments – no initialization<text:line-break/> <text:tab-stop/> if (lArguments.length&lt;1)<text:line-break/> <text:tab-stop/> <text:tab-stop/> return;</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> // Arguments[0] = own configuration data<text:line-break/> <text:tab-stop/> com.sun.star.beans.PropertyValue[] lConfig =<text:line-break/> <text:tab-stop/> <text:tab-stop/> (com.sun.star.beans.PropertyValue[])lArguments[0];<text:line-break/> <text:line-break/> <text:tab-stop/> // Arguments[1..n] = optional arguments of create request<text:line-break/> <text:s text:c="5"/>for (int n=1; n&lt;lArguments.length; ++n)<text:line-break/> <text:tab-stop/> {<text:line-break/> <text:tab-stop/> <text:tab-stop/> ...<text:line-break/> <text:tab-stop/> }<text:line-break/> <text:line-break/> <text:s text:c="5"/>// analyze own configuration data for our own internal<text:line-break/> <text:tab-stop/> // filter name! Important for generic filter services,<text:line-break/> <text:tab-stop/> // which are registered more then once. They can use this<text:line-break/> <text:tab-stop/> // information to find out, which specialization of it<text:line-break/> <text:tab-stop/> // is required.<text:line-break/> <text:tab-stop/> for (int i=0; i&lt;lConfig.length; ++i)<text:line-break/> <text:tab-stop/> {<text:line-break/> <text:tab-stop/> <text:tab-stop/> if (lConfig[i].Name.equals(&quot;Name&quot;))<text:line-break/> <text:tab-stop/> <text:tab-stop/> {<text:line-break/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> m_sInternalName =<text:line-break/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> AnyConverter.toString(lConfig[i].Value);<text:line-break/> <text:line-break/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> // Tip: A generic filter implementation can use this internal<text:line-break/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> // name at runtime, to detect which specialization of it is required.<text:line-break/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> if (m_sInternalName==”filter_format_1”)<text:line-break/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> m_eHandle = E_FORMAT_1;<text:line-break/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> else <text:line-break/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> if (m_sInternalName==”filter_format_2”)<text:line-break/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> ...<text:line-break/> <text:tab-stop/> <text:tab-stop/> }<text:line-break/> <text:tab-stop/> }<text:line-break/> }</text:p>
  <text:p text:style-name="Paragraph">Furthermore, depending on its action a filter supports the services <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.ImportFilter]</text:span> for import or <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.ExportFilter]</text:span> for export functionality.</text:p>
  <text:p text:style-name="Paragraph">The common interface of both services is <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XFilter]</text:span> <text:span text:style-name="T3">starts or cancels the filter process. How the cancelling is implemented is an internal detail of the filter implementation, however a thread is a good solution.</text:span> </text:p>
  <text:p text:style-name="Paragraph">On calling <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XFilter:filter](),</text:span> the already mentioned <text:span text:style-name="Code (in text)">MediaDescriptor</text:span> is passed to the service. It includes the necessary information about the content, for example, the URL or the stream, but not the source or the target model for the filter process.</text:p>
  <text:p text:style-name="Paragraph">Additional interfaces are part of the service description, <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XImporter]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XExporter]</text:span> to get this information. These interfaces are used directly before the filter operation is started. A filter saves the model set by <text:span text:style-name="Code (in text)">setTargetDocument()</text:span> and <text:span text:style-name="Code (in text)">setSourceDocument(),</text:span> and uses it inside its filter operation.</text:p>
  <table:table table:name="Tabelle10" table:style-name="Tabelle10">
   <table:table-column table:style-name="Tabelle10.A"/>
   <table:table-column table:style-name="Tabelle10.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle10.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Tip5" text:anchor-type="paragraph" svg:x="0.067cm" svg:y="0cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="47" xlink:href="../tip.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Tip graphics marks a hint section in the text</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle10.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">The <text:span text:style-name="Code (in text)">filter()</text:span> method does not include any information about the required import or export functionality. It seems that it is not possible to implement both at the same object. The interfaces XImporter/XExporter are used to solve this conflict. Only one of them is called for one <text:span text:style-name="Code (in text)">filter()</text:span> request. So an internal flag that indicates the using of an interface helps.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">This example code detects the required filter operation: [SOURCE:OfficeDev/FilterDevelopment/AsciiFilter/AsciiReplaceFilter.java]</text:p>
  <text:p text:style-name="Code">private boolean m_bImport;<text:line-break/> <text:line-break/> // used to tell us: &quot;you will be used for import&quot;<text:line-break/> public void setTargetDocument(<text:line-break/> <text:s/>com.sun.star.lang.XComponent xDocument )<text:line-break/> <text:s text:c="3"/>throws com.sun.star.lang.IllegalArgumentException<text:line-break/> {<text:line-break/> <text:s text:c="4"/>m_bImport = true;<text:line-break/> }<text:line-break/> <text:line-break/> // used to tell us: &quot;you will be used for export&quot;<text:line-break/> public void setSourceDocument(<text:line-break/> <text:s/>com.sun.star.lang.XComponent xDocument )<text:line-break/> <text:s text:c="3"/>throws com.sun.star.lang.IllegalArgumentException<text:line-break/> {<text:line-break/> <text:s text:c="4"/>m_bImport = false;<text:line-break/> }<text:line-break/> <text:line-break/> // detect required type of filter operation<text:line-break/> public boolean filter(<text:line-break/> <text:s/>com.sun.star.beans.PropertyValue[] lDescriptor )<text:line-break/> {<text:line-break/> <text:s text:c="4"/>boolean bState = false;<text:line-break/> <text:s text:c="4"/>if (m_bImport==true)<text:line-break/> <text:s text:c="6"/>bState = impl_import( lDescriptor );<text:line-break/> <text:s text:c="4"/>else<text:line-break/> <text:s text:c="6"/>bState = impl_export( lDescriptor );<text:line-break/> <text:s text:c="4"/>return bState;<text:line-break/> }</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">MediaDescriptor</text:span> does not include the model, but it should include the already opened stream, true for the current implementation in [PRODUCTNAME]. If it is there, it must be used. Only if a stream does not exist, it indicates that someone else uses this filter service, for example, outside [PRODUCTNAME], it creates a stream of your own by using the URL parameter of the descriptor. </text:p>
  <text:p text:style-name="Paragraph">In general, a filter must not change the position of an incoming stream without reading or writing data. The position inside the stream is 0. Follow the previouslymentioned rules for handling streams of the section about the MediaDescriptor above. We can make these rules easier, <text:span text:style-name="T1">because currently there are no external filters used inside office</text:span>. See descriptions of the chapter “MediaDescriptor” before ... )). </text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="options" text:key1="filter"/><text:alphabetical-index-mark text:string-value="options" text:key1="filter"/>Filter Options</text:h>
  <text:p text:style-name="Paragraph">It is possible to parameterize a filter component. For example, the [PRODUCTNAME] filter <text:span text:style-name="Code (in text)">&quot;Text - txt - csv (StarCalc)&quot;</text:span> needs a separator used to detect columns. This information is transported inside the <text:span text:style-name="Code (in text)">MediaDescriptor</text:span>. A special property named <text:span text:style-name="Code (in text)">FilterData</text:span> of type <text:span text:style-name="Code (in text)">any</text:span> exists. The value depends on the filter implementation and is not specified.</text:p>
  <table:table table:name="Tabelle11" table:style-name="Tabelle11">
   <table:table-column table:style-name="Tabelle11.A"/>
   <table:table-column table:style-name="Tabelle11.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle11.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note15" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="48" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle11.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">There is another string property named <text:span text:style-name="Code (in text)">FilterOptions</text:span>. It should be used if the flexibility of an <text:span text:style-name="Code (in text)">any</text:span> is not required. For historical reasons, a third-string property <text:span text:style-name="Code (in text)">FilterFlags</text:span> exists. It is deprecated, so it is not recommend for use. </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">A generic UI that uses a filter as one part of a load request does not know about special parameters. Normally, the <text:span text:style-name="Code (in text)">FilterData</text:span> are not set inside the media descriptor, therefore a filter should use default values. It should be possible to prompt the user for better values by registering another component that implements the service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.ui.dialogs.FilterOptionsDialog]</text:span>. It is called <text:span text:style-name="Emphasis">UIComponent</text:span>. It enables a filter developer to query for user options before the filter operation is performed. <text:span text:style-name="T3">It does not show this dialog inside the filter,</text:span> because any UI can be suppressed, for example, an external application uses the API of [PRODUCTNAME] for scripting running in a hidden mode. The code that uses the filter decides if it is necessary and allowed to use the dialog. If not, the filter lives with missing parameters and uses default values. If it is not possible to have defaults, it aborts the <text:span text:style-name="Code (in text)">filter()</text:span> request returning <text:span text:style-name="Code (in text)">false</text:span>.</text:p>
  <text:p text:style-name="Paragraph">The UIComponent provides an interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.XPropertyAccess]</text:span> used to set the whole <text:span text:style-name="Code (in text)">MediaDescriptor</text:span> before executing the dialog using the <text:span text:style-name="Code (in text)">FilterOptionsDialog</text:span> interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.ui.dialogs.XExecutableDialog]</text:span> and retrieves the changes. The user of the dialog decides if the changes are merged with the original ones or replaced. Using the whole descriptor provides the informtion about the environment in which the filter works, for example, the URL or information about preview mode. The parameters of a filter depend on it. Normally a UIComponent is shown if no FilterData or FilterOptions are part of the descriptor, so that they are added. In the case where they exist, it is necessary to change it.</text:p>
  <table:table table:name="Tabelle12" table:style-name="Tabelle12">
   <table:table-column table:style-name="Tabelle12.A"/>
   <table:table-column table:style-name="Tabelle12.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle12.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Tip6" text:anchor-type="paragraph" svg:x="0.067cm" svg:y="0cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="49" xlink:href="../tip.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Tip graphics marks a hint section in the text</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle12.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">If the filter programmer wants to implement a generic dialog for different filters, then he must know which of these filters the UIComponent is shown. This information exists inside the MediaDescriptor, called FilterName. The outside code which uses the dialog knows this filter alsoand should set it in the descriptor, because the implementation name of the component must be known to create the dialog. This information exists inside the configuration where it is registered for a filter.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="P39" text:level="5"><text:alphabetical-index-mark text:string-value="configuring" text:key1="filter"/>Configuring a Filter in [PRODUCTNAME]</text:h>
  <text:p text:style-name="Paragraph">As previously discussed, the whole process of loading and saving <text:span text:style-name="T3">content works generically </text:span>in many components and can be adapted to the needs of a user through the addition of custom modules or the removal of others. All this information about services and parameters are organized in a special configuration branch of [PRODUCTNAME] called <text:span text:style-name="www/ftp/email">org.openoffice.Office.TypeDetection</text:span>. The principal structure is shown below:</text:p>
  <table:table table:name="Tabelle60" table:style-name="Tabelle60">
   <table:table-column table:style-name="Tabelle60.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle60.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr6" draw:name="Rahmen171" text:anchor-type="paragraph" svg:y="0cm" svg:width="12.882cm" fo:min-height="12.09cm" draw:z-index="50">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr3" draw:name="Overview of TypeDetection" text:anchor-type="paragraph" svg:x="0.004cm" svg:y="0.002cm" svg:width="11.82cm" svg:height="11.689cm" draw:z-index="51" xlink:href="typedetection.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Overview graphic of the TypeDetection</svg:desc>
         </draw:image> Illustration <text:sequence text:ref-name="refIllustration17" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.18</text:sequence>: Structure of org.openoffice.Office.TypeDetection Configuration Branch</text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">As shown on the left, the file consists of lists called sets. The list items are described by the structures shown on the right to which the arrows point. <text:span text:style-name="T3">It works similar to 1:n relations in a database.</text:span> Every filter, frame loader, detector is registered for one or multiple types. The detection of the proper type is important for the functionality of the whole system. If the right loader or filter cannot be found, the load or save request does not produce the right results.</text:p>
  <text:p text:style-name="Paragraph">To extend [PRODUCTNAME] to load or save new content formats, a new type entry is added describing the new content. Furthermore, a filter item is registered for this new type. An optional and recommended change for a detector can be done.</text:p>
  <text:p text:style-name="Paragraph"/>
  <table:table table:name="Tabelle13" table:style-name="Tabelle13">
   <table:table-column table:style-name="Tabelle13.A"/>
   <table:table-column table:style-name="Tabelle13.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle13.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important14" text:anchor-type="paragraph" svg:x="0.12cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="52" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle13.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">It is not a good idea to edit the configuration branch files directly to make these changes. It is better to use the configuration API to do so, because <text:span text:style-name="T3">the format of the file may be changed in the future. The properties describing the components, such as types and filters, are always the same and are not likely to be changed or in an incompatible manner. It is better to add entries by specifying their properties using the API only.</text:span> To make this easier for external programmers, this manual provides a [PRODUCTNAME] Basic script that is used for that purpose called <text:alphabetical-index-mark-start text:id="IMark44271916"/><text:span text:style-name="www/ftp/email">regfilter.bas</text:span><text:alphabetical-index-mark-end text:id="IMark44271916"/>.</text:p>
      <text:p text:style-name="TextInTable">The work to be done by the filter programmer is to provide an ini file that includes the properties and start the basic script inside [PRODUCTNAME]. The script reads the file and uses it to change the configuration package. These changes are done for the user layer of the configuration, so it is possible to restore the original state. There is also an example ini file in the samples folder for this manual that can be used for your own purposes called <text:alphabetical-index-mark-start text:id="IMark43887388"/><text:span text:style-name="www/ftp/email">regfilter.ini</text:span><text:alphabetical-index-mark-end text:id="IMark43887388"/>.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5">General Notes</text:h>
  <text:p text:style-name="Paragraph">In [PRODUCTNAME], there are services providing a special API to access the underlying configuration repository. Most of these services support container functionality and allow read access whereas some services offer write access also . During runtime, every configuration item, such as type, filter, and detector, is represented as a sequence of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.PropertyValue]</text:span> structs. The next sections describe the names and values of those structures.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Necessary Steps</text:h>
  <text:p text:style-name="Paragraph">To extend [PRODUCTNAME] by new content formats, use the following steps:</text:p>
  <text:ordered-list text:style-name="L21">
   <text:list-item>
    <text:p text:style-name="P40">Implement a filter component. It must be able to load or save the type it is registered for. For access to the office, only the API of the document service or universal content provider keeps the filter compatible with new versions of [PRODUCTNAME].</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P40">Provide an implementation of a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.ExtendedTypeDetection]</text:span> service to analyze a given content. It must return an internal type name representing the type or an empty value for unknown formats.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P40">Add a filter options dialog if the implemented filter requires additional parameters. Keep it separate from the filter and change the given <text:span text:style-name="Code (in text)">MediaDescriptor</text:span> based on user input. <text:line-break/>Document the parameters so that an external script programmer can use this information to provide proper values to the <text:span text:style-name="Code (in text)">MediaDescriptor</text:span>.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P40">Register the component libraries as UNO services inside [PRODUCTNAME]. This is done by the mechanism described in the chapter <text:span text:style-name="ChapterRef">[CHAPTER:Components.Deployment]</text:span>.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P40">Adapt the configuration branch <text:span text:style-name="www/ftp/email">org.openoffice.Office.TypeDetection</text:span> so that it knows these new components. Use [PRODUCTNAME] Basic script <text:span text:style-name="www/ftp/email">regfilter.bas</text:span> that is provided as an additional tool in this chapter. It requires an ini file that is specified inside the subroutine <text:span text:style-name="Code (in text)">Main</text:span> of the script and has to be adjusted for your own purposes. It is well documented, and uses the names and value types described in this manual.</text:p>
   </text:list-item>
  </text:ordered-list>
  <text:h text:style-name="Head 5" text:level="5">Properties of a Type</text:h>
  <text:p text:style-name="Paragraph">Every type inside [PRODUCTNAME] is specified by the properties shown in the table below. These values are accessible at the previously mentioned service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.TypeDetection]</text:span> using the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.XNameAccess]</text:span>. Write access is not available here. All types are addressed by their internal names.</text:p>
  <table:table table:name="type_props" table:style-name="type_props">
   <table:table-column table:style-name="type_props.A"/>
   <table:table-column table:style-name="type_props.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="type_props.A1" table:number-columns-spanned="2" table:value-type="string">
      <text:p text:style-name="TableHead">Properties of a Document Type, available at TypeDetection</text:p>
     </table:table-cell>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="type_props.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Name</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="type_props.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. The internal name of a type must be unique and is also used as a list entry. It contains any special characters, but they must been coded.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="type_props.A2" table:value-type="string">
     <text:p text:style-name="TableCode">UIName</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="type_props.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Displays the type at the user interface under a localized name. You must assign a value for a language, thus supporting CJK versions. All Unicode characters are permitted here.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="type_props.A2" table:value-type="string">
     <text:p text:style-name="TableCode">MediaType</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="type_props.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Describes the MIME type of the contents. The reason is that the internal names can be altered at any time without affecting the process.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="type_props.A2" table:value-type="string">
     <text:p text:style-name="TableCode">ClipboardFormat</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="type_props.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. The format is a unique description of this type for use in clipboards.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="type_props.A2" table:value-type="string">
     <text:p text:style-name="TableCode">URLPattern</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="type_props.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">sequence&lt;string&gt;. Important components of a type are the patterns. They enable the support of your own URL schemata, for example, in [PRODUCTNAME] &quot;private:factory/swriter&quot; for opening an empty text document. The wildcards &apos;*&apos; or &apos;?&apos; are supported here.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="type_props.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Extensions</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="type_props.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">sequence&lt;string&gt;. The type of a content can be derived from its URL by its extension. In most cases, the flat detection depends on them alone.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="type_props.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Preferred</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="type_props.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">boolean. Since file extensions cannot always be assigned to a unique type, this flag was introduced. It indicates the preferred type for a group of types with similar properties, otherwise, the first match is used.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="type_props.A2" table:value-type="string">
     <text:p text:style-name="TableCode">DocumentIconID</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="type_props.B2" table:value-type="string">
     <text:p text:style-name="P41">int. You can assign an icon to a type. To do this, the ID is used as reference to a resource. This feature is currently not supported in [PRODUCTNAME].</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5">Properties of an ExtendedTypeDetection Service</text:h>
  <text:p text:style-name="Paragraph"><text:span text:style-name="T3">In contrast to filters or frame loaders, the ExtendedTypeDetection has no configuration API on top of its configuration data. The normal configuration API of [PRODUCTNAME] has to be used, as described in </text:span><text:span text:style-name="T25">[Chapter:Config]</text:span><text:span text:style-name="T3">. The configuration set </text:span><text:span text:style-name="T4">org.openoffice.Office.TypeDetection/DetectServices</text:span><text:span text:style-name="T3"> could be used, but it is better to use the already mentioned basic macro </text:span><text:span text:style-name="T9">regfilter.bas</text:span><text:span text:style-name="T3"> in combination with </text:span><text:span text:style-name="T9">regfilter.ini</text:span><text:span text:style-name="T3">. Such detector services are used automatically during type detection of content. A detector service is addressed by its UNO implementation name.</text:span></text:p>
  <table:table table:name="Tabelle14" table:style-name="Tabelle14">
   <table:table-column table:style-name="Tabelle14.A"/>
   <table:table-column table:style-name="Tabelle14.B"/>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle14.A1" table:value-type="string">
     <text:p text:style-name="TableHead">Property Name</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle14.B1" table:value-type="string">
     <text:p text:style-name="TableHead">Description</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle14.A2" table:value-type="string">
     <text:p text:style-name="TableCode">ServiceName</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle14.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. This must be a valid UNO implementation name. This field cannot contain the service name, because this value must be unique, otherwise it would be impossible to distinguish more than one registered entry, for a service name is not unique. This value is also an entry in the corresponding configuration list.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle14.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Types</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle14.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="T3">sequence&lt;string&gt;. A list of type names recognized by this service</text:span> that makes it possible to write a servicethat detects more than one type.</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="properties" text:key1="filter"/>Properties of a Filter</text:h>
  <text:p text:style-name="Paragraph">Every filter is registered for only one type . Multiple registrations are to be done by multiple configuration entries. One type is handled by more than one filter. Flags also regulate the use of the preferred filter. A filter is described by the following properties:</text:p>
  <text:p text:style-name="Paragraph"/>
  <table:table table:name="Tabelle15" table:style-name="Tabelle15">
   <table:table-column table:style-name="Tabelle15.A"/>
   <table:table-column table:style-name="Tabelle15.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle15.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Property Name</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle15.B1" table:value-type="string">
      <text:p text:style-name="TableHead">Description</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle15.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Name</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle15.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. The internal name of a filter must be unique and is also used as list entry. It contains special characters, but they must be encoded.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle15.A2" table:value-type="string">
     <text:p text:style-name="TableCode">UIName</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle15.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. A filter should be able to show a localized name in selection dialogs. You must assign a value for a language, thus supporting CJK versions. All Unicode characters are permitted here.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle15.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Installed</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle15.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">boolean. This flag indicates the installation status of a filter. A filter is generally registered equally for all users. In a network installation you should deactivate this for certain groups or single users.</text:p>
     <text:p text:style-name="TextInTable">Note: A filter works only if the component library has already been registered in [PRODUCTNAME].</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle15.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Order</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle15.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">int. This number shows filters in a user defined order. Valid values are greater then 0. If the number is set to 0, sorting is done alphabetically by the <text:span text:style-name="Code (in text)">UIName</text:span> property of the filter. The same applies to filters that have the same <text:span text:style-name="Code (in text)">Order</text:span> value.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle15.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Type</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle15.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. A filter must register itself for the type it can handle. Multiple assignments are not allowed. Multiple configuration entries must be created, one for every supported type.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle15.A2" table:value-type="string">
     <text:p text:style-name="TableCode">DocumentService</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle15.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Describes the component for which the filter operates,For example, <text:span text:style-name="Code (in text)">&quot;com.sun.star.text.TextDocument&quot;</text:span>, depending upon the use., This is considered the output or goal of the filter process. A UNO service name is expected. Note: The implementation name cannot be used here, the generic type of the document is needed.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle15.A2" table:value-type="string">
     <text:p text:style-name="TableCode">FilterService</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle15.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. This is the UNO implementation name of the filter. It should be clear that this field can not contain the service name of a filter, otherwise [PRODUCTNAME] could not distinguish more then one registered filter.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle15.A2" table:value-type="string">
     <text:p text:style-name="TableCode">UIComponent</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle15.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Describes an implementation of a UI dialog used by the filter to let the user modify certain properties for filtering. For example, the <text:span text:style-name="Code (in text)">&quot;Text - txt - csv (StarCalc)&quot;</text:span> needs information about the used column separators to load data. To distinguish between different implementations, it must be the real UNO implementation name, not a service name.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle15.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Flags</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle15.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">int. Describes the filter, as shown in the table below. This is where, the organization into import and export filters takes place. Note that external filters must set the <text:span text:style-name="Code (in text)">ThirdParty</text:span> flag to be detected.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle15.A2" table:value-type="string">
     <text:p text:style-name="TableCode">UserData</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle15.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">sequence&lt;string&gt;. Some filters need to store more configuration data than usual. This is realized through this entry. The format of the string list is not restricted.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle15.A2" table:value-type="string">
     <text:p text:style-name="TableCode">FileFormatVersion</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle15.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">int. Indicates a version number of a document that can be edited by this filter.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle15.A2" table:value-type="string">
     <text:p text:style-name="TableCode">TemplateName</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle15.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. The name of a template file for importing styles. It is a special feature for importing documents only and not useable for export. Every [PRODUCTNAME] document service knows default styles. If this <text:span text:style-name="Code (in text)">TemplateName</text:span> is set, it merges these default styles with the styles of the template, and the template styles are merged with all styles of a document that is imported by this filter.</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">Most functionality of a Filter is listed by its flags. They are necessary to prevent a filter from being displayed in a UI, and to classify import and export, or internal a nd external filters, and prefer some filters to others. Currently supported flags are:</text:p>
  <table:table table:name="Tabelle16" table:style-name="Tabelle16">
   <table:table-column table:style-name="Tabelle16.A"/>
   <table:table-column table:style-name="Tabelle16.B"/>
   <table:table-column table:style-name="Tabelle16.C"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle16.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Name</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle16.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Value</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle16.C1" table:value-type="string">
      <text:p text:style-name="TableHead">Description</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">Import</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">0x00000001 h</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">This filter supports the specification of a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.ImportFilter]</text:span> and is used for loading content.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">Export</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">0x00000002 h</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">This filter supports the specification of a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.ExportFilter]</text:span> and is used for saving content.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">Template</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">0x00000004 h</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">These filters are specialized to handle template formats. By default, a filtered document is used as a template to create a new document .</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">Internal</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">0x00000008 h</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">This filter should never be shown on any UI and not be available.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">OwnTemplate</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">0x00000010 h</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Templates used with the template API of [PRODUCTNAME] and it supports the internal template features. For older versions, it is useable for internal content formats only.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">Own</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">0x00000020 h</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Tag the intrinsic content formats of [PRODUCTNAME] based on OLE storage or zip packages.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">Alien</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">0x00000040 h</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">A filter with this flag is not fully compatible with the current document format. It is unclear what document features will be lost during saving. This flag decides if a warning box on saving has to be shown.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">UsesOptions<text:line-break/> (deprecated)</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">0x00000080 h</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">This filter could be customized during processing. Older versions of [PRODUCTNAME] used it to customize the &quot;SaveAs&quot; dialog. Newer versions uses the filter property &quot;UIComponent&quot; to tell if a filter provides filter options.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">Default</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">0x00000100 h</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Mark a filter as the default filter for saving. Only one filter in an application module, distinguished through the <text:span text:style-name="Code (in text)">DocumentService</text:span> property, has this flag set.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">NotInFileDialog</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">0x00001000 h</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Suppress display of a filter in file open and save dialogs.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">NotInChooser</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">0x00002000 h</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Suppress display of a filter in UI elements for choosing filters.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">ThirdParty</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">0x00080000 h</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">These filters are developed by external parties. For historical reasons, the filter detection of [PRODUCTNAME] differentiates between old internal and new external ones, because the former are not UNO based and are used differently.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">Preferred</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="Code (in text)">0x10000000 h</text:span> </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle16.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">If more than one filter is registered for the same type, this flag prefers one of them at loading time if the user does not select a specific filter. In contrast to the <text:span text:style-name="Code (in text)">Default</text:span> flag, it does not depend on the application module, but there can only be one preferred filter for a type.</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph"/>
  <table:table table:name="Tabelle17" table:style-name="Tabelle17">
   <table:table-column table:style-name="Tabelle17.A"/>
   <table:table-column table:style-name="Tabelle17.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle17.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important15" text:anchor-type="paragraph" svg:x="0.12cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="53" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle17.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">Besides these filter flags there are other flags existing that are used currently, but are not documented here. Use documented flags only.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.FilterFactory]</text:span><text:span text:style-name="T3"> provides </text:span>these data. It supports read access by using the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.XNameAccess]</text:span>. All items are addressed by their internal names. The return value is represented as a list of type <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.PropertyValue]</text:span> structures. It uses the filter properties shown above. </text:p>
  <text:p text:style-name="Paragraph">Another aspect of this service is the factory interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XMultiServiceFactory]</text:span>. It creates filter instances using an internal type, or an internal filter name directly. Using a type name searches for a suitable filter and creates, initializes and returns it. Using a filter name directly follows the algorithm shown in the box below. Note that creation of filters is possible for external ones only that have set the <text:span text:style-name="Code (in text)">FilterService </text:span>property. Most of the current filters of [PRODUCTNAME] are internal filters, implemented as local code, but not as a UNO service. They can not be created by this <text:span text:style-name="Code (in text)">FilterFactory</text:span>. It is possible to ask only for their properties.</text:p>
  <table:table table:name="Tabelle19" table:style-name="Tabelle19">
   <table:table-column table:style-name="Tabelle19.A"/>
   <table:table-column table:style-name="Tabelle19.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle19.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important16" text:anchor-type="paragraph" svg:x="0.12cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="54" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle19.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">Direct creation of a filter instance is only possible using a special argument in the <text:span text:style-name="T26">createInstanceWithArguments</text:span><text:span text:style-name="Code (in text)">()</text:span> call of the interface XMultiServiceFactory. To do so, a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.PropertyValue]</text:span> <text:span text:style-name="Code (in text)">FilterName</text:span> with the internal name of the requested filter as value must be used. Otherwise, the service specifier, that is, the first argument of the create call, is interpreted as an internal type name. It will be used to search a suitable, preferred filter that will be created. It is a combination of searching and creation. Future implementations will split that to make it clearer. In future implementations, a registered filter must be searched through the provided query mechanism and created by using this factory interface. </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="properties" text:key1="frame loader"/>Properties of a FrameLoader</text:h>
  <text:p text:style-name="Paragraph">[PRODUCTNAME] distinguishes asynchronous (<text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FrameLoader]</text:span>) and synchronous (<text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.SynchronousFrameLoader]</text:span>) frame loader implementations, but the configuration does not recognize that. The interface is supported by the loader is detected at runtime , the synchronous interface being preferred. The following properties describe a loader:</text:p>
  <table:table table:name="Tabelle20" table:style-name="Tabelle20">
   <table:table-column table:style-name="Tabelle20.A"/>
   <table:table-column table:style-name="Tabelle20.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle20.A1" table:number-columns-spanned="2" table:value-type="string">
      <text:p text:style-name="TableHead">Properties of a FrameLoader</text:p>
     </table:table-cell>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle20.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Name</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle20.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. This must be a valid UNO implementation name. It should be obvious that this field can not contain the service name, because this value must be unique. Otherwise [PRODUCTNAME] could not distinguish more than one registered entry, for there can be several implementations for a service name. This value is also an entry in the corresponding configuration list.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle20.A2" table:value-type="string">
     <text:p text:style-name="TableCode">UIName</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle20.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Displays the loader at a localized user interface. You must assign a value for a language, thus supporting CJK versions. All Unicode characters are permitted.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle20.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Types</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle20.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">sequence&lt;string&gt;. A list of type names recognized by this service You can also implement and register loader for groups of types.</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">The service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.frame.FrameLoaderFactory]</text:span> makes this data available. It uses the same mechanism as the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.FilterFactory]</text:span>, that is, an interface for data access, <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.XNameAccess],</text:span> and another one for creation of such a <text:span text:style-name="Code (in text)">FrameLoader,</text:span> <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XMultiServiceFactory]</text:span>. </text:p>
  <text:p text:style-name="Paragraph">There are other properties than the properties described, for example, for the ContentHandler. They are not necessary for the environment of filters, or loading and saving documents, so they are not described. Additional information is found at <text:a xlink:type="simple" xlink:href="http://framework.openoffice.org/"><text:span text:style-name="www/ftp/email">http://framework.openoffice.org</text:span></text:a>.</text:p>
  <text:p text:style-name="Paragraph">There is one entry in the configuration, used as a fallback if a registered item is not found, the generic <text:span text:style-name="Code (in text)">FrameLoader</text:span>. It is not necessary for an external developer to provide a frame loader to add support for an unknown document format to [PRODUCTNAME]. It is enough to register a new filter component that is used by this special loader in a generic manner.</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="XML file format"/><text:alphabetical-index-mark text:string-value="XML based filter"/>XML Based <text:alphabetical-index-mark text:string-value="filter development"/>Filter Development</text:h>
  <text:h text:style-name="Head 5" text:level="5">Introduction</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.document.XFilter]<text:span text:style-name="T27">This chapter outlines the development of XML based filtering components that use the </text:span><text:alphabetical-index-mark-start text:id="IMark43887388"/>XML filter adaptor<text:alphabetical-index-mark-end text:id="IMark43887388"/> <text:span text:style-name="T27">framework. The XML filter adaptor</text:span> <text:span text:style-name="T27">is a generic </text:span><text:span text:style-name="T28">[IDL:com.sun.star.document.XFilter]</text:span> <text:span text:style-name="T27">implementation. It has been designed to be reusable, and to supply a standard method of designing and referencing XML based </text:span><text:alphabetical-index-mark text:string-value="import filter"/><text:span text:style-name="T27">import and </text:span><text:alphabetical-index-mark-start text:id="IMark43875748"/><text:span text:style-name="T27">export filter</text:span><text:alphabetical-index-mark-end text:id="IMark43875748"/><text:span text:style-name="T27">s. The XML filter adaptor</text:span> <text:span text:style-name="T27">does not perform any of the filtering functionality itself, but instead is used to instantiate a filtering component.</text:span></text:p>
  <text:p text:style-name="P42">The advantage of the XML filter adaptor framework is that you do not have to work with document models to create a document from an import file, nor do you have to iterate over a document model to export it to a different file format. Rather, you can use the [PRODUCTNAME] XML file format to import and export. When importing, you parse your import file and send [PRODUCTNAME] XML to the filter adaptor, which creates a document for you in the GUI. When exporting, the office sends a description of the current document as [PRODUCTNAME] XML, so that you can export without having to iterate over a document model.</text:p>
  <text:p text:style-name="Paragraph">The course of action during export and import can be described as follows: when a user clicks <text:span text:style-name="Buttons/Menus">File-Open</text:span>, or some UNO code calls <text:span text:style-name="Code (in text)">loadComponentFromURL()</text:span>, the office looks in the type detection configuration to identify an import filter and optionally checks the file format by doing some deep detection. It instantiates the import filter it finds and uses its method <text:span text:style-name="Code (in text)">[IDLS:com.sun.star.xml.XImportFilter:importer]() </text:span>to pass a <text:span text:style-name="Code (in text)">MediaDescriptor</text:span> for the source, a specialized XML document handler for [PRODUCTNAME] XML, and user data. The import filter has to read the import source and deliver [PRODUCTNAME] XML to the document handler received in the call to <text:span text:style-name="Code (in text)">importer()</text:span>, emulating a SAX parser that calls the parser callback functions.</text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="T27">Similarly, the office instantiates an export filter after clicking </text:span><text:span text:style-name="T29">File-Save (As)</text:span><text:span text:style-name="T27"> or a call to </text:span><text:span text:style-name="T30">storeXXX()</text:span><text:span text:style-name="T27">, and uses its method </text:span><text:span text:style-name="T30">[IDLS:com.sun.star.xml.XExportFilter:exporter]()</text:span><text:span text:style-name="T27"> to pass a target location and user data. In this case, the office expects the export filter to be a </text:span><text:span text:style-name="T30">[IDL:com.sun.star.xml.sax.XDocumentHandler]</text:span><text:span text:style-name="T27">, which is able to handle [PRODUCTNAME] XML. The office creates an export stream with [PRODUCTNAME] XML, and parses this XML so that the export filter receives the SAX callbacks and can translate them to whatever is necessary, writing the result to the target received in the call to </text:span><text:span text:style-name="T30">[IDL:com.sun.star.xml.XExportFilter:exporter]()</text:span><text:span text:style-name="T27">.</text:span></text:p>
  <text:h text:style-name="Head 5" text:level="5">Components of a Filter</text:h>
  <text:p text:style-name="Paragraph">For a filter of this type to operate, three things are necessary.</text:p>
  <text:ordered-list text:style-name="L22">
   <text:list-item>
    <text:p text:style-name="P43">The XML filter adaptor.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P43">A filtering component that implements the required interfaces.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P43">A valid filter and type definition.</text:p>
   </text:list-item>
  </text:ordered-list>
  <text:p text:style-name="Paragraph">Both the XML filter adaptor and the filtering component are UNO components that can be instantiated through the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XMultiServiceFactory:createInstance]()</text:span> method. Since the XML filter adaptor is generic, the filtering component is all that needs to be implemented. Once this has been done, the <text:alphabetical-index-mark-start text:id="IMark44271916"/><text:span text:style-name="www/ftp/email">TypeDetection.xcu</text:span><text:alphabetical-index-mark-end text:id="IMark44271916"/><text:span text:style-name="Source Text"> </text:span>file can be expanded to include the newly created filter definition.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Writing the Filtering Component</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.xml.ImportFilter;com.sun.star.xml.ExportFilter;com.sun.star.xml.XMLImportFilter;com.sun.star.xml.XMLImportFilter;com.sun.star.xml.sax.XDocumentHandler]The filtering component must implement the following interfaces as described by the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.xml.ImportFilter]</text:span> service and the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.xml.ExportFilter]</text:span> service:</text:p>
  <text:p text:style-name="TitledListHead"><text:span text:style-name="T1">Importer</text:span><text:span text:style-name="T31">:</text:span></text:p>
  <text:p text:style-name="TitledListBody"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.xml.XMLImportFilter]</text:span></text:p>
  <text:p text:style-name="TitledListHead"><text:span text:style-name="T1">Exporter</text:span><text:span text:style-name="T31">:</text:span></text:p>
  <text:p text:style-name="TitledListBody"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.xml.XMLExportFilter]</text:span> <text:span text:style-name="T32">and</text:span> <text:span text:style-name="Code (in text)">[IDL:com.sun.star.xml.sax.XDocumentHandler]</text:span> </text:p>
  <text:h text:style-name="Head 6" text:level="6">XImportFilter</text:h>
  <text:p text:style-name="Paragraph">The service<text:span text:style-name="Code (in text)">[IDL:com.sun.star.xml.XMLImportFilter]</text:span> defines an interface with the following method:</text:p>
  <text:p text:style-name="MethodSignatures">boolean importer( <text:line-break/> [in] sequence&lt; com::sun::star::beans::PropertyValue &gt; aSourceData,<text:line-break/> [in] com::sun::star::xml::sax::XDocumentHandler xDocHandler,<text:line-break/> [in] sequence&lt; string &gt; msUserData )</text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="Code (in text)">aSourceData</text:span> is a <text:span text:style-name="Code (in text)">MediaDescriptor</text:span>, which can be used to obtain the following information:</text:p>
  <text:unordered-list text:style-name="L23">
   <text:list-item>
    <text:p text:style-name="P44">An <text:span text:style-name="Code (in text)">XInputStream</text:span> <text:span text:style-name="T33"><text:line-break/></text:span>This is a stream that is attached to the source to be read. This can be a file, or some other data source.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P44"><text:span text:style-name="Code (in text)">Filename</text:span><text:line-break/>This is the name of the file on the disk, that the input stream comes from.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P44"><text:span text:style-name="Code (in text)">Url</text:span><text:line-break/>This is a url describing the location being read.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph"><text:span text:style-name="Code (in text)">xDocHandler</text:span> <text:span text:style-name="T34">is a </text:span><text:span text:style-name="T35">SAX</text:span> <text:span text:style-name="T34">event handler that can be used when parsing an </text:span><text:span text:style-name="T30">XInputStream</text:span>, which <text:span text:style-name="T34">may or may not contain [PRODUCTNAME] XML. Before this stream can be read by [PRODUCTNAME], it will need to be transformed into [PRODUCTNAME] XML.</text:span> </text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="Code (in text)">msUserData</text:span> <text:span text:style-name="T34">is an array of </text:span><text:span text:style-name="T35">Strings</text:span> <text:span text:style-name="T34">, that contains the information supplied in the </text:span><text:span text:style-name="Code (in text)">UserData</text:span> <text:span text:style-name="T34">section of the </text:span><text:span text:style-name="Code (in text)">Filter</text:span> <text:span text:style-name="T34">definition in the </text:span><text:alphabetical-index-mark-start text:id="IMark43875748"/><text:span text:style-name="www/ftp/email">TypeDetection.xcu</text:span><text:alphabetical-index-mark-end text:id="IMark43875748"/> <text:span text:style-name="T34">file. </text:span></text:p>
  <text:h text:style-name="Head 6" text:level="6">XExportFilter</text:h>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.xml.XExportFilter]</text:span> defines an interface with the following method:</text:p>
  <text:p text:style-name="MethodSignatures">boolean exporter( </text:p>
  <text:p text:style-name="MethodSignatures">[in] sequence&lt; com::sun::star::beans::PropertyValue &gt; aSourceData,</text:p>
  <text:p text:style-name="MethodSignatures">[in] sequence&lt; string &gt; msUserData )</text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="Code (in text)">aSourceData</text:span> and <text:span text:style-name="Code (in text)">msUserData</text:span> contain the same type of information as in the importer, except that the <text:span text:style-name="Code (in text)">MediaDescriptor</text:span> contains an <text:span text:style-name="T36">XOutputStream</text:span> , which can be used to write to. </text:p>
  <text:h text:style-name="P45" text:level="6">XDocumentHandler</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.xml.sax.XDocumentHandler]When the export takes place, the new Filtering component must also be an <text:span text:style-name="Code (in text)">XDocumentHandler</text:span> , to allow the output based on <text:alphabetical-index-mark-start text:id="IMark43887388"/>SAX<text:alphabetical-index-mark-end text:id="IMark43887388"/> events to be filtered, if required. For this reason, an <text:span text:style-name="Code (in text)">XDocumentHandler</text:span> is not passed to the exporter, and any exporter that is used by the XML filter<text:span text:style-name="T31"> </text:span>adaptor must implement the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.xml.sax.XDocumentHandler]</text:span> interface. </text:p>
  <text:h text:style-name="Head 5" text:level="5">The Importer</text:h>
  <text:h text:style-name="Head 6" text:level="6">Evaluating XImportFilter Parameters</text:h>
  <text:p text:style-name="Paragraph">The writing of an importer usually starts with extracting the required variables from the <text:span text:style-name="T35">Mediadescriptor</text:span> and the <text:span text:style-name="T35">userData</text:span> . These variables are required for the filtering component to operate correctly. Depending on the requirements of the individual filter, the first thing to do is to extract the information from the <text:alphabetical-index-mark text:string-value="media descriptor"/><text:span text:style-name="T35">MediaDescriptor</text:span>, referred to as <text:span text:style-name="T35">aSourceData</text:span> in the interface definition. This can be achieved as follows:</text:p>
  <text:p text:style-name="Paragraph">Get the number of elements in the <text:span text:style-name="T35">MediaDescriptor</text:span></text:p>
  <text:p text:style-name="P46"><text:span text:style-name="T37">sal_Int32 nLength = aSourceData.getLength();</text:span> </text:p>
  <text:p text:style-name="Paragraph">Iterate through the <text:span text:style-name="T37">MediaDescriptor</text:span> to find the information needed: an input stream, a file name, or a URL.</text:p>
  <text:p text:style-name="P47">for (sal_Int32 i = 0; i &lt; nLength; i++) {</text:p>
  <text:p text:style-name="P47"><text:tab-stop/> if (pValue[i].Name.equalsAsciiL (RTL_CONSTASCII_STRINGPARAM(&quot;InputStream&quot;)))<text:line-break/> <text:tab-stop/> <text:tab-stop/> pValue[i].Value &gt;&gt;= xInputStream;</text:p>
  <text:p text:style-name="P47"><text:tab-stop/> else if (pValue[i].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(&quot;FileName&quot;)<text:line-break/> <text:tab-stop/> <text:tab-stop/> pValue[i].Value &gt;&gt;= sFileName;</text:p>
  <text:p text:style-name="P47"><text:tab-stop/> else if (pValue[i].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(&quot;URL&quot;)))<text:line-break/> <text:tab-stop/> <text:tab-stop/> pValue[i].Value &gt;&gt;= sURL;</text:p>
  <text:p text:style-name="P47">}</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">msUserData</text:span> parameter passed to <text:span text:style-name="Code (in text)">importer()</text:span> contains information that defines how the filter operates, so this information must be referenced as required.</text:p>
  <text:h text:style-name="Head 6" text:level="6">Importer Filtering</text:h>
  <text:p text:style-name="Paragraph">An <text:span text:style-name="Code (in text)">XInputStream</text:span> implementation has now been obtained that contains all of the information you want to process. From the filtering perspective, you can just read from this stream and carry out whatever processing is required in order for the input to be transformed into [PRODUCTNAME] XML. Once this has been done, however, you need to write the result to where it can be parsed into [PRODUCTNAME]&apos;s internal format. A <text:alphabetical-index-mark text:string-value="pipe"/><text:span text:style-name="T35">Pipe</text:span> can be used to achieve this. A <text:span text:style-name="T35">Pipe</text:span> is a form of buffer that can be written to and read from. For the <text:span text:style-name="Code (in text)">[IDLS:com.sun.star.xml.XImportFilter:importer]</text:span>, read from the <text:span text:style-name="T38">XInputStream</text:span> that was extracted from the <text:span text:style-name="T35">MediaDescriptor</text:span>, and once the filtering has taken place, write to a <text:span text:style-name="T35">Pipe</text:span> that has been created. This <text:span text:style-name="T35">Pipe</text:span> can be read from when it comes to parsing. This is how the <text:span text:style-name="Code (in text)">Pipe</text:span> is created:</text:p>
  <text:p text:style-name="P47">Reference &lt;XInterface&gt; xPipe;</text:p>
  <text:p text:style-name="P47"/>
  <text:p text:style-name="P47">// We Create our pipe</text:p>
  <text:p text:style-name="P47">xPipe= XflatXml::xMSF-&gt;createInstance(OUString::createFromAscii(&quot;com.sun.star.io.Pipe&quot;));</text:p>
  <text:p text:style-name="P47"/>
  <text:p text:style-name="P47">// We get an inputStream to our Pipe</text:p>
  <text:p text:style-name="P47">Reference&lt; com::sun::star::io::XInputStream &gt; xPipeInput (xPipe,UNO_QUERY);</text:p>
  <text:p text:style-name="P47"/>
  <text:p text:style-name="P47">// We get an OutputStream to our Pipe</text:p>
  <text:p text:style-name="P47">Reference&lt; com::sun::star::io::XOutputStream &gt; xTmpOutputStream (xPipe,UNO_QUERY);</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="T35">XInputStream</text:span> can be read from, and the <text:span text:style-name="T35">XOutputstream</text:span> can be written to.</text:p>
  <text:h text:style-name="Head 6" text:level="6">Parsing the Result</text:h>
  <text:p text:style-name="Paragraph">Once the desired [PRODUCTNAME] XML has been produced and written to the <text:span text:style-name="T35">XOutputStream</text:span> of the <text:span text:style-name="Code (in text)">Pipe</text:span>, the <text:span text:style-name="Code (in text)">XinputStream</text:span> of the <text:span text:style-name="Code (in text)">Pipe</text:span> can be parsed with the aid of the <text:span text:style-name="T35">XdocumentHandler</text:span>.</text:p>
  <text:p text:style-name="P48">// Create a Parser</text:p>
  <text:p text:style-name="P49">const OUString sSaxParser(RTL_CONSTASCII_USTRINGPARAM(&quot;com.sun.star.xml.sax.Parser&quot;));</text:p>
  <text:p text:style-name="P49">Reference &lt; com::sun::star::xml::sax::XParser &gt; xSaxParser(xMSF-&gt;createInstance(sSaxParser), UNO_QUERY);</text:p>
  <text:p text:style-name="P49"/>
  <text:p text:style-name="P49">// Create an InputSource using the Pipe</text:p>
  <text:p text:style-name="P49">com::sun::star::xml::sax::InputSource aInput;</text:p>
  <text:p text:style-name="P49">aInput.sSystemId = sFileName;<text:tab-stop/><text:tab-stop/>// File Name</text:p>
  <text:p text:style-name="P50">aInput.aInputStream = xPipeInput; <text:s text:c="8"/>// Pipe InputStream </text:p>
  <text:p text:style-name="P49"/>
  <text:p text:style-name="P49">// Set the SAX Event Handler</text:p>
  <text:p text:style-name="P51">xSaxParser-&gt;setDocumentHandler(xHandler);</text:p>
  <text:p text:style-name="P51"/>
  <text:p text:style-name="P51">// Parse the result</text:p>
  <text:p text:style-name="P51">try { <text:line-break/> <text:s/>xSaxParser-&gt;parseStream(aInput);</text:p>
  <text:p text:style-name="P51"><text:span text:style-name="CODE">}</text:span></text:p>
  <text:p text:style-name="P51"><text:span text:style-name="CODE">catch( Exception &amp;exc){<text:line-break/> <text:s/>// Perform exception handling</text:span> </text:p>
  <text:p text:style-name="Code"><text:span text:style-name="T39">}</text:span> </text:p>
  <text:p text:style-name="Paragraph">Assuming that the XML was valid, no exceptions will be thrown and the importer will return true. At this stage, the filtering is complete and the imported document will be displayed.</text:p>
  <text:h text:style-name="P52" text:level="5">The Exporter</text:h>
  <text:h text:style-name="Head 6" text:level="6">Evaluating XExportFilter Parameters</text:h>
  <text:p text:style-name="Paragraph">The<text:span text:style-name="T40"> </text:span><text:span text:style-name="Code (in text)">[IDLS:com.sun.star.xml.XExportFilter:exporter]()</text:span> method operates in much the same way as <text:span text:style-name="Code (in text)">[IDLS:com.sun.star.xml.XExportFilter:importer]()</text:span>, except that instead of the <text:span text:style-name="T35">exporter</text:span> using a provided <text:span text:style-name="T35">XDocumentHandler</text:span>, it is itself a<text:span text:style-name="T40"> </text:span><text:span text:style-name="Code (in text)">[IDL:com.sun.star.xml.sax.XDocumentHandler]</text:span> <text:span text:style-name="T27">implementation</text:span>.</text:p>
  <text:p text:style-name="Paragraph">When the <text:span text:style-name="Code (in text)">exporter()</text:span> method is invoked, the necessary variables need to be extracted for use by the filter. This is the same thing that happens with the importer, except that the <text:span text:style-name="T35">MediaDescriptor</text:span> contains an <text:span text:style-name="T35">XOutputStream</text:span> , instead of the importer&apos;s <text:span text:style-name="T35">XInputStream</text:span> . Once the variables have been extracted (and—in some cases—a <text:span text:style-name="T35">Pipe</text:span> has been created) the <text:span text:style-name="Code (in text)">exporter()</text:span> method returns. It does not carry out the filtering at this stage.</text:p>
  <table:table table:name="Table10" table:style-name="Table10">
   <table:table-column table:style-name="Table10.A"/>
   <table:table-column table:style-name="Table10.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table10.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note16" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="69" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Table10.B1" table:value-type="string">
      <text:p text:style-name="TipInTable">The pipe is only necessary if the output needs to be processed further after being processed by the <text:span text:style-name="Code (in text)">XDocumentHandler</text:span>. Otherwise, the result from the <text:span text:style-name="Code (in text)">XDocumentHandler</text:span> implementation can be written directly to the <text:span text:style-name="Code (in text)">XOutputStream</text:span> provided. For instance, this is the case with a FlatXML filter. </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 6" text:level="6">Exporter Filtering</text:h>
  <text:p text:style-name="Paragraph">After the <text:span text:style-name="Code (in text)">[IDLS:com.sun.star.xml.XExportFilter:exporter]()</text:span> method returns, the <text:span text:style-name="Code (in text)">XML filter adaptor</text:span> then invokes the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.xml.sax.XDocumentHandler]</text:span> methods to parse the XML output.</text:p>
  <text:p text:style-name="Paragraph">For the filtering, the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.xml.sax.XDocumentHandler]</text:span> implementation is used. This consists of a set of <text:span text:style-name="T37">SAX</text:span> event handling methods, which define how particular XML tags are handled. These methods are:</text:p>
  <text:p text:style-name="P51">startDocument(){<text:line-break/>}</text:p>
  <text:p text:style-name="P51">endDocument(){<text:line-break/>}</text:p>
  <text:p text:style-name="P51">startElement(){<text:line-break/>}</text:p>
  <text:p text:style-name="P51">endElement(){<text:line-break/>}</text:p>
  <text:p text:style-name="P51">charactors(){<text:line-break/>}</text:p>
  <text:p text:style-name="P51">ignorableWhitespace(){<text:line-break/>}</text:p>
  <text:p text:style-name="P51">processingInstruction(){<text:line-break/>}</text:p>
  <text:p text:style-name="P51">setDocumentLocator(){<text:line-break/>}</text:p>
  <text:p text:style-name="Paragraph">The result of this event handling can be processed and written to the <text:span text:style-name="T35">XOutputStream</text:span> that was extracted from the <text:span text:style-name="T35">MediaDescriptor</text:span> .</text:p>
  <text:h text:style-name="Head 5" text:level="5">Configuration</text:h>
  <text:p text:style-name="Paragraph"><text:span text:style-name="T41">For [PRODUCTNAME] to be able to make use of this filtering component, the f</text:span>ilter <text:span text:style-name="T41">and the t</text:span>ype <text:span text:style-name="T41">that it handles must be defined in the </text:span><text:span text:style-name="T42">TypeDetection.xcu</text:span><text:span text:style-name="T41"> file. </text:span></text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="T41">The </text:span><text:alphabetical-index-mark-start text:id="IMark43875748" text:key1="filter"/><text:span text:style-name="T41">t</text:span>ype<text:span text:style-name="T41"> section</text:span><text:alphabetical-index-mark-end text:id="IMark43875748"/><text:span text:style-name="T41"> defines certain file types and their extensions. The </text:span><text:alphabetical-index-mark-start text:id="IMark44271916" text:key1="filter"/><text:span text:style-name="T41">f</text:span>ilter<text:span text:style-name="T41"> section</text:span><text:alphabetical-index-mark-end text:id="IMark44271916"/><text:span text:style-name="T41"> contains the actual filter definition. </text:span></text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="T41">Below is an example of a type and filter definition in the </text:span><text:span text:style-name="T42">TypeDetection.xcu</text:span><text:span text:style-name="T41"> file. It describes a </text:span><text:alphabetical-index-mark-start text:id="IMark43887388" text:key1="filter"/><text:span text:style-name="Code (in text)">PocketWord</text:span><text:alphabetical-index-mark-end text:id="IMark43887388"/><text:span text:style-name="T41"> filter.</text:span></text:p>
  <text:p text:style-name="P53">&lt;!-- Type section --&gt;</text:p>
  <text:p text:style-name="P54">&lt;node oor:name=&quot;writer_PocketWord_File&quot; oor:op=&quot;replace&quot;&gt;</text:p>
  <text:p text:style-name="P54"><text:s text:c="4"/>&lt;prop oor:name=&quot;UIName&quot;&gt;</text:p>
  <text:p text:style-name="P54"><text:tab-stop/>&lt;value xml:lang=&quot;en-US&quot;&gt;Pocket Word&lt;/value&gt;</text:p>
  <text:p text:style-name="P54"><text:s text:c="4"/>&lt;/prop&gt;</text:p>
  <text:p text:style-name="P54"><text:s text:c="4"/>&lt;prop oor:name=&quot;Data&quot;&gt;</text:p>
  <text:p text:style-name="P54"><text:tab-stop/>&lt;value&gt;0,,,,<text:span text:style-name="CodeEmphasis">psw</text:span>,20002,&lt;/value&gt;</text:p>
  <text:p text:style-name="P54"><text:s text:c="4"/>&lt;/prop&gt;</text:p>
  <text:p text:style-name="P54">&lt;/node&gt;</text:p>
  <text:p text:style-name="P54"/>
  <text:p text:style-name="P55">&lt;!-- Filter section --&gt;</text:p>
  <text:p text:style-name="P54"><text:span text:style-name="T43">&lt;node oor:name=&quot;PocketWord File&quot; oor:op=&quot;replace&quot;&gt;</text:span></text:p>
  <text:p text:style-name="P56"><text:s text:c="4"/>&lt;prop oor:name=&quot;UIName&quot;&gt;</text:p>
  <text:p text:style-name="P56"><text:s text:c="4"/><text:tab-stop/>&lt;value xml:lang=&quot;en-US&quot;&gt;Pocket Word&lt;/value&gt;</text:p>
  <text:p text:style-name="P56"><text:s text:c="3"/>&lt;/prop&gt;</text:p>
  <text:p text:style-name="P56"><text:s text:c="3"/>&lt;prop oor:name=&quot;Data&quot;&gt;</text:p>
  <text:p text:style-name="P56"><text:s text:c="3"/><text:tab-stop/>&lt;value&gt;</text:p>
  <text:p text:style-name="P56"><text:tab-stop/><text:tab-stop/>0,</text:p>
  <text:p text:style-name="P56"><text:tab-stop/><text:tab-stop/><text:span text:style-name="CODE Emphasis">writer_PocketWord_File</text:span>,</text:p>
  <text:p text:style-name="P54"><text:span text:style-name="T44"><text:tab-stop/><text:tab-stop/></text:span><text:span text:style-name="T45">com.sun.star.text.TextDocument</text:span><text:span text:style-name="T44">,</text:span></text:p>
  <text:p text:style-name="P56"><text:tab-stop/><text:tab-stop/><text:span text:style-name="CODE Emphasis">com.sun.star.comp.Writer.XmlFilterAdaptor</text:span>,</text:p>
  <text:p text:style-name="P56"><text:tab-stop/><text:tab-stop/>524355,</text:p>
  <text:p text:style-name="P56"><text:tab-stop/><text:tab-stop/><text:span text:style-name="CODE Emphasis">com.sun.star.documentconversion.XMergeBridge;</text:span></text:p>
  <text:p text:style-name="P56"><text:span text:style-name="CODE Emphasis"><text:s text:c="17"/>classes/pocketword.jar;</text:span></text:p>
  <text:p text:style-name="P56"><text:span text:style-name="CODE Emphasis"><text:s text:c="17"/>com.sun.star.comp.Writer.XMLImporter;</text:span></text:p>
  <text:p text:style-name="P56"><text:span text:style-name="CODE Emphasis"><text:s text:c="17"/>com.sun.star.comp.Writer.XMLExporter;</text:span></text:p>
  <text:p text:style-name="P56"><text:span text:style-name="CODE Emphasis"><text:s text:c="17"/>staroffice/sxw;application/x-pocket-word</text:span>,</text:p>
  <text:p text:style-name="P56"><text:tab-stop/><text:tab-stop/>0,</text:p>
  <text:p text:style-name="P56"><text:tab-stop/><text:tab-stop/>,</text:p>
  <text:p text:style-name="P56"><text:tab-stop/>&lt;/value&gt;</text:p>
  <text:p text:style-name="P56"><text:s text:c="3"/>&lt;/prop&gt;</text:p>
  <text:p text:style-name="P56"><text:s text:c="3"/>&lt;prop oor:name=&quot;Installed&quot; oor:type=&quot;xs:boolean&quot;&gt;</text:p>
  <text:p text:style-name="P56"><text:s text:c="3"/><text:tab-stop/>&lt;value&gt;true&lt;/value&gt;</text:p>
  <text:p text:style-name="P56"><text:s text:c="3"/>&lt;/prop&gt;</text:p>
  <text:p text:style-name="P57">&lt;/node&gt;</text:p>
  <text:p text:style-name="Paragraph">The type section defines a type <text:span text:style-name="Code (in text)">writer_PocketWord_File</text:span> with <text:span text:style-name="Code (in text)">&quot;Pocket Word&quot;</text:span> as <text:span text:style-name="Code (in text)">UIName</text:span> in <text:span text:style-name="Buttons/Menus">File - Open</text:span> . The file extension of this type is specified as <text:span text:style-name="www/ftp/email">.psw</text:span> in the <text:span text:style-name="Code (in text)">Data</text:span> property.</text:p>
  <text:p text:style-name="Paragraph">The filter section defines the same UI name <text:span text:style-name="Code (in text)">&quot;Pocket Word&quot; </text:span>for the filter, and a number of settings in the <text:span text:style-name="Code (in text)">Data</text:span> property, simply separated by commas:</text:p>
  <text:p text:style-name="P58">Type</text:p>
  <text:p text:style-name="TitledListBody"><text:span text:style-name="T46">This is the id of the file t</text:span><text:span text:style-name="T47">ype</text:span><text:span text:style-name="T46"> definition that defines the type of file that this filter can handle, in this case </text:span><text:span text:style-name="T48">&quot;writer_PocketWord_File</text:span><text:span text:style-name="T49">”</text:span><text:span text:style-name="T46">. </text:span>This value refers to the <text:span text:style-name="Code (in text)">oor:name</text:span> of the type section.</text:p>
  <text:p text:style-name="P58">Office application</text:p>
  <text:p text:style-name="TitledListBody"><text:span text:style-name="T46">This is the application that will be used to open the document, in this case Writer (“</text:span><text:span text:style-name="T50">com.sun.star.text.TextDocument</text:span><text:span text:style-name="T46">”).</text:span></text:p>
  <text:p text:style-name="P58">Filter Component</text:p>
  <text:p text:style-name="TitledListBody"><text:span text:style-name="T46">This is the </text:span><text:span text:style-name="T47">component</text:span><text:span text:style-name="T46"> that [PRODUCTNAME] will initialize when importing or exporting, in this case “</text:span><text:span text:style-name="T51">com.sun.star.comp.Writer.XmlFilterAdaptor</text:span><text:span text:style-name="T47">“.</text:span></text:p>
  <text:p text:style-name="P58">User Data</text:p>
  <text:p text:style-name="TitledListBody"><text:span text:style-name="T46">Section containing the filtering component that the </text:span><text:span text:style-name="T47">XML filter adaptor</text:span><text:span text:style-name="T46"> will initialize and use for filtering. In this example “</text:span><text:span text:style-name="T50">com.sun.star.documentconversion.XMergeBridge;classes/pocketword.jar;com.sun.star.comp.Writer.XMLImporter;<text:line-break/>com.sun.star.comp.Writer.XMLExporter;staroffice/sxw;application/x-pocket-word</text:span><text:span text:style-name="T46">” </text:span></text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="T46">From this example, you see that this Filter uses the </text:span>XML filter adaptor<text:span text:style-name="T46">. When the </text:span>XML filter adaptor <text:span text:style-name="T46">initializes, it initializes the </text:span><text:span text:style-name="Code (in text)">XMergeBridge</text:span> that<text:span text:style-name="T46"> is specified in the </text:span><text:span text:style-name="T48">UserData</text:span><text:span text:style-name="T46"> section. The rest of the information in the </text:span><text:span text:style-name="Code (in text)">UserData</text:span><text:span text:style-name="T46"> section has been included for use by the </text:span><text:span text:style-name="Code (in text)">XMergeBridge</text:span> <text:span text:style-name="T46">filtering component, including the </text:span><text:span text:style-name="T48">com.sun.star.comp.Writer.XMLImporter</text:span>, <text:span text:style-name="T46">which will be used by </text:span>the XML filter adaptor to<text:span text:style-name="T46"> create the </text:span><text:span text:style-name="Code (in text)">XDocumentHandler</text:span> <text:span text:style-name="T46">when importing.</text:span> </text:p>
  <text:h text:style-name="Head 5" text:level="5">Sample Filter Component Implementations</text:h>
  <text:p text:style-name="Paragraph">There are currently three filtering components which use the XML filter adaptor.</text:p>
  <text:p text:style-name="P35"><text:span text:style-name="T34">The first one is the </text:span><text:span text:style-name="T35">XMergeBridge</text:span><text:span text:style-name="T34">. This has been created as a means of linking the </text:span><text:span text:style-name="T30">XMerge </text:span><text:span text:style-name="T34">Small Device filter framework with [PRODUCTNAME]. This means that any available </text:span><text:span text:style-name="T30">XMerge</text:span> <text:span text:style-name="T34">plugin, can also be used as a [PRODUCTNAME] filter. This is currently hosted within the </text:span><text:span text:style-name="T30">XMerge</text:span><text:span text:style-name="T34"> project in openoffice cvs at</text:span></text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="www/ftp/email">xml/xmerge/java/org/openoffice/xmerge/xmergebridge</text:span></text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="T34">The final two are a Java and a C++ implementation of a </text:span><text:span text:style-name="Emphasis">Flat [PRODUCTNAME] XML</text:span><text:span text:style-name="T34"> reader and writer. These are intended to be sample filter component implementations, and offer a skeleton filter component that can be expanded upon by developers wishing to create their own filtering components. These are temporarily hosted in cvs at</text:span> </text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="www/ftp/email">xml/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml</text:span></text:p>
  <text:h text:style-name="Head 5" text:level="5">Additional Components</text:h>
  <text:p text:style-name="Paragraph"><text:span text:style-name="T52">In order for Java based components to operate effectively, a set of wrapper classes have been added to the </text:span><text:span text:style-name="T42">javaunohelper</text:span><text:span text:style-name="T52"> package. These files allow for an </text:span><text:span text:style-name="T53">XInputStream</text:span> or an <text:span text:style-name="Code (in text)">XOutputStream</text:span> to be accessed using the same methods as a normal Java <text:span text:style-name="Code (in text)">InputStream</text:span> or <text:span text:style-name="Code (in text)">OutputStream</text:span>. These classes are located in the <text:span text:style-name="www/ftp/email">javaunohelper</text:span> package at </text:p>
  <text:p text:style-name="Code"><text:tab-stop/>com.sun.star.lib.uno.adapter.XInputStreamToInputStreamAdapter </text:p>
  <text:p text:style-name="Code"><text:tab-stop/>com.sun.star.lib.uno.adapter.XInputStreamToInputStreamAdapter </text:p>
  <text:p text:style-name="Paragraph">For more information on the use of these helper classes, see the <text:span text:style-name="CODE">flatxmljava</text:span> example.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="XML filter detection" text:key1="filter"/>XML Filter Detection</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.document.ExtendedTypeDetection]The number of XML files that conform to differing DTD specifications means that a single filter and file type definition is insufficient to handle all of the possible formats available. In order to allow [PRODUCTNAME] to handle multiple filter definitions and implementations, it is necessary to implement an additional filter detection module that is capable of determining the type of XML file being read, based on its <text:span text:style-name="Code (in text)">DocType</text:span> declaration.</text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="T54">To accomplish this, a filter detection service </text:span><text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.ExtendedTypeDetection]</text:span><text:span text:style-name="T54"> can be </text:span><text:span text:style-name="T41">implemented, which is capable of handling and distinguishing between many different XML based file formats. This type of service </text:span><text:span text:style-name="T55">supersedes</text:span><text:span text:style-name="T41"> the basic </text:span><text:alphabetical-index-mark-start text:id="IMark43887388" text:key1="filter"/><text:span text:style-name="T56">flat</text:span><text:span text:style-name="T41"> detection</text:span><text:alphabetical-index-mark-end text:id="IMark43887388"/><text:span text:style-name="T41">, which uses the file&apos;s suffix to determine the Type, and instead, carries out a </text:span><text:alphabetical-index-mark-start text:id="IMark43875748" text:key1="filter"/><text:span text:style-name="T56">deep</text:span><text:span text:style-name="T41"> detection</text:span><text:alphabetical-index-mark-end text:id="IMark43875748"/><text:span text:style-name="T41"> which uses the file&apos;s internal structure and content to detect its true type.</text:span></text:p>
  <text:h text:style-name="Head 6" text:level="6">Requirements for Deep Detection</text:h>
  <text:p text:style-name="Paragraph">There are three requirements for implementing a deep detection module that is capable of identifying one or more unique XML types. These include:</text:p>
  <text:unordered-list text:style-name="L24">
   <text:list-item>
    <text:p text:style-name="P59">An extended type definition for describing the format in more detail (<text:span text:style-name="www/ftp/email">TypeDetection.xcu</text:span>).</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P59">A <text:span text:style-name="Code (in text)">DetectService</text:span> i<text:span text:style-name="T57">mplementation.</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P60">A <text:span text:style-name="Code (in text)">DetectService</text:span> definition (<text:span text:style-name="www/ftp/email">TypeDetection.xcu</text:span>).</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:h text:style-name="Head 6" text:level="6">Extending the File Type Definition</text:h>
  <text:p text:style-name="Paragraph"><text:span text:style-name="T41">Since many different XML files can conform to different DTDs, the t</text:span>ype<text:span text:style-name="T41"> definition of a particular XML file needs to be extended. To do this, some or all of the </text:span><text:span text:style-name="T53">DocType</text:span><text:span text:style-name="T41"> information can be contained as part of the file t</text:span>ype<text:span text:style-name="T41"> definition. This information is held as part of the </text:span><text:span text:style-name="Code (in text)">ClipboardFormat</text:span><text:span text:style-name="T41"> property of the t</text:span>ype<text:span text:style-name="T41"> node. A unique namespace or preface identifies the String at this point in the sequence as being a </text:span><text:span text:style-name="T53">DocType</text:span><text:span text:style-name="T41"> declaration.</text:span></text:p>
  <table:table table:name="Table11" table:style-name="Table11">
   <table:table-column table:style-name="Table11.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table11.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr12" draw:name="Frame5" text:anchor-type="paragraph" svg:width="11.709cm" fo:min-height="7.689cm" draw:z-index="67">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr13" draw:name="Overview of a filter type detection" text:anchor-type="paragraph" svg:x="0.004cm" svg:y="0.002cm" svg:width="11.709cm" style:rel-width="100%" svg:height="7.689cm" style:rel-height="scale" draw:z-index="68" xlink:href="typedetection.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Overview graphic showing  a filter type detection</svg:desc>
         </draw:image>Illustration <text:sequence text:ref-name="refIllustration18" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.19</text:sequence></text:p>
       </draw:text-box></text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 6" text:level="6">Sample Type definition:</text:h>
  <text:p text:style-name="P61">&lt;node oor:name=&quot;writer_DocBook_File&quot; oor:op=&quot;replace&quot;&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>&lt;prop oor:name=&quot;UIName&quot;&gt;</text:p>
  <text:p text:style-name="Code"><text:tab-stop/>&lt;value XML:lang=&quot;en-US&quot;&gt;DocBook&lt;/value&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>&lt;/prop&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>&lt;prop oor:name=&quot;Data&quot;&gt;</text:p>
  <text:p text:style-name="Code"><text:tab-stop/>&lt;value&gt; 0,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/><text:tab-stop/>,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/><text:tab-stop/>doctype:-//OASIS//DTD DocBook XML V4.1.2//EN,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/><text:tab-stop/>,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/><text:tab-stop/>XML,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/><text:tab-stop/>20002,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/>&lt;/value&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>&lt;/prop&gt;</text:p>
  <text:p text:style-name="Code">&lt;/node&gt;</text:p>
  <text:h text:style-name="Head 6" text:level="6">The ExtendedTypeDetection Service Implementation</text:h>
  <text:p text:style-name="Paragraph">In order for the type detection code to function as an <text:span text:style-name="Code (in text)">ExtendedTypeDetection</text:span> service, you must implement the <text:span text:style-name="Code (in text)">detect()</text:span> method as defined by the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XExtendedFilterDetection]</text:span> interface definition:</text:p>
  <text:p text:style-name="Code">string detect( [inout]sequence&lt;com::sun::star::beans::PropertyValue &gt; Descriptor );</text:p>
  <text:p text:style-name="Paragraph">This method supplies you with a sequence of <text:span text:style-name="Code (in text)">ProptertyValue</text:span>s from which you can use to extract the current <text:span text:style-name="Code (in text)">TypeName</text:span> and the <text:span text:style-name="Code (in text)">URL</text:span> of the file being loaded:</text:p>
  <text:p text:style-name="Code">::rtl::OUString SAL_CALL FilterDetect::detect(com::sun::star::uno::Sequence&lt; com::sun::star::beans::PropertyValue &gt;&amp; aArguments ) throw (com::sun::star::uno::RuntimeException) {</text:p>
  <text:p text:style-name="P62">const PropertyValue * pValue = aArguments.getConstArray();</text:p>
  <text:p text:style-name="Code">sal_Int32 nLength;</text:p>
  <text:p text:style-name="Code">::rtl::OString resultString;</text:p>
  <text:p text:style-name="Code">nLength = aArguments.getLength();</text:p>
  <text:p text:style-name="Code">for (sal_Int32 i = 0; i &lt; nLength; i++) {</text:p>
  <text:p text:style-name="Code"><text:tab-stop/>if (pValue[i].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(&quot;TypeName&quot;))) {</text:p>
  <text:p text:style-name="Code"><text:tab-stop/>}</text:p>
  <text:p text:style-name="Code"><text:tab-stop/>else if (pValue[i].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(&quot;URL&quot;))) {</text:p>
  <text:p text:style-name="Code"><text:tab-stop/><text:tab-stop/>pValue[i].Value &gt;&gt;= sUrl;</text:p>
  <text:p text:style-name="Code"><text:tab-stop/>}</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">Once you have the <text:span text:style-name="Code (in text)">URL</text:span> of the file, you can then use it to create a <text:span text:style-name="Code (in text)">::ucb::Content</text:span> from which you can open an <text:span text:style-name="Code (in text)">XInputStream</text:span> to the file:</text:p>
  <text:p text:style-name="Code">Reference&lt; com::sun::star::ucb::XCommandEnvironment &gt; xEnv;</text:p>
  <text:p text:style-name="Code">::ucb::Content aContent(sUrl,xEnv);</text:p>
  <text:p text:style-name="Code">xInStream = aContent.openStream();</text:p>
  <text:p text:style-name="Paragraph">You can now use this <text:span text:style-name="Code (in text)">XInputStream</text:span> to read the header of the file being loaded. Because the exact location of the <text:span text:style-name="Code (in text)">DocType</text:span> information within the file is not known, the first 1000 bytes of information will be read:</text:p>
  <text:p text:style-name="P51">::rtl::OString resultString;</text:p>
  <text:p text:style-name="Code">com::sun::star::uno::Sequence&lt; sal_Int8 &gt; aData;</text:p>
  <text:p text:style-name="Code">long bytestRead =xInStream-&gt;readBytes (aData, <text:s/>1000);</text:p>
  <text:p text:style-name="Code">resultString=::rtl::OString(</text:p>
  <text:p text:style-name="Code">(const sal_Char *)aData.getConstArray(),bytestRead) ;</text:p>
  <text:p text:style-name="Paragraph">Once you have this information, you can start looking for a type that describes the file being loaded. In order to do this, you need to get a list of the types currently supported:</text:p>
  <text:p text:style-name="Code">Reference &lt;XNameAccess&gt; xTypeCont(mxMSF-&gt;createInstance(OUString::createFromAscii(</text:p>
  <text:p text:style-name="Code"><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/>&quot;com.sun.star.document.TypeDetection&quot; )),UNO_QUERY);</text:p>
  <text:p text:style-name="Code">Sequence &lt;::rtl::OUString&gt; myTypes= xTypeCont-&gt;getElementNames();</text:p>
  <text:p text:style-name="Code">nLength = myTypes.getLength();</text:p>
  <text:p text:style-name="Paragraph">For each of these types, you must first determine whether the <text:span text:style-name="Code (in text)">ClipboardFormat</text:span> property contains a <text:span text:style-name="Code (in text)">DocType</text:span>:</text:p>
  <text:p text:style-name="P51">Loc_of_<text:span text:style-name="T58">ClipboardFormat</text:span>=...;</text:p>
  <text:p text:style-name="Code">Sequence&lt;::rtl::OUString&gt; <text:span text:style-name="T59">ClipboardFormat</text:span>Seq;</text:p>
  <text:p text:style-name="Code">Type_Props[Loc_of_<text:span text:style-name="T59">ClipboardFormat</text:span>].Value &gt;&gt;=<text:span text:style-name="T59">ClipboardFormat</text:span>Seq ;</text:p>
  <text:p text:style-name="Code">while() {</text:p>
  <text:p text:style-name="Code"><text:tab-stop/>if(<text:span text:style-name="T59">ClipboardFormat</text:span>Seq.match(OUString::createFromAscii(&quot;doctype:&quot;) {</text:p>
  <text:p text:style-name="Code"><text:tab-stop/><text:tab-stop/>//if it contains a DocType, start to compare to header</text:p>
  <text:p text:style-name="Code"><text:tab-stop/>}</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">All of the possible <text:span text:style-name="Code (in text)">DocType</text:span> declarations of the file types can be checked to determine a match. If a match is found, the type corresponding to the match is returned. If no match is found, an empty string is returned. This will force [PRODUCTNAME] into flat detection mode.</text:p>
  <text:h text:style-name="Head 6" text:level="6">TypeDetection.xcu DetectServices Entry</text:h>
  <text:p text:style-name="Paragraph">Now that you have created the <text:span text:style-name="Code (in text)">ExtendedTypeDetection</text:span> service implementation, you need to tell [PRODUCTNAME] when to use this service.</text:p>
  <text:p text:style-name="Paragraph">First create a <text:span text:style-name="Code (in text)">DetectService</text:span>s node, unless one already exists, and then add the information specific to the d<text:span text:style-name="T1">etection service</text:span><text:span text:style-name="T31"> </text:span>that has been implemented, that is, the name of the service and the file types that use it.</text:p>
  <text:p text:style-name="Code">&lt;node oor:name=&quot;DetectServices&quot;&gt;</text:p>
  <text:p text:style-name="Code">&lt;node oor:name=&quot;com.sun.star.comp.filters.XMLDetect&quot; oor:op=&quot;replace&quot;&gt;</text:p>
  <text:p text:style-name="Code"><text:tab-stop/>&lt;prop oor:name=&quot;ServiceName&quot;&gt;</text:p>
  <text:p text:style-name="Code"><text:tab-stop/><text:tab-stop/>&lt;value XML:lang=&quot;en-US&quot;&gt;com.sun.star.comp.filters.XMLDetect&lt;/value&gt;</text:p>
  <text:p text:style-name="Code"><text:tab-stop/>&lt;/prop&gt;</text:p>
  <text:p text:style-name="Code"><text:tab-stop/>&lt;prop oor:name=&quot;Types&quot;&gt;</text:p>
  <text:p text:style-name="Code"><text:tab-stop/><text:tab-stop/>&lt;value&gt;writer_DocBook_File&lt;/value&gt;</text:p>
  <text:p text:style-name="Code"><text:tab-stop/><text:tab-stop/>&lt;value&gt;writer_Flat_XML_File&lt;/value&gt;</text:p>
  <text:p text:style-name="Code"><text:tab-stop/>&lt;/prop&gt;</text:p>
  <text:p text:style-name="Code">&lt;/node&gt;</text:p>
  <text:p text:style-name="Code">&lt;/node&gt;</text:p>
  <text:h text:style-name="Head 3" text:level="3"><text:alphabetical-index-mark text:string-value="number formats" text:key1="frame loader"/>Number Formats</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.util.XNumberFormatsSupplier;com.sun.star.util.NumberFormats;com.sun.star.util.XNumberFormatTypes;com.sun.star.util.XNumberFormats;com.sun.star.util.XNumberFormatter;com.sun.star.util.NumberFormatter;com.sun.star.util.XNumberFormatPreviewer]Number formats are template strings consisting of format codes defining how numbers or text appear, for example,, whether or not to display trailing zeroes, group by thousands, separators, colors, and how many decimals are displayed. This does not include any font attributes, except for colors. They are found wherever number formats are applied, for example, on the <text:span text:style-name="Buttons/Menus">Numbers</text:span> tab of the <text:span text:style-name="Buttons/Menus">Format – Cells</text:span> dialog in spreadsheets.</text:p>
  <text:p text:style-name="Paragraph">Number formats are defined on the document level. A document displaying formatted values has a collection of number formats, each with a unique index key within that document. Identical formats are not necessarily represented by the same index key in different documents.</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="managing" text:key1="number formats"/>Managing Number Formats</text:h>
  <text:p text:style-name="Paragraph">Documents provide their formats through the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XNumberFormatsSupplier]</text:span>that has one method <text:span text:style-name="Code (in text)">getNumberFormats()</text:span> that returns <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.NumberFormats]</text:span>. Using <text:span text:style-name="Code (in text)">NumberFormats</text:span>, developers can read and modify number formats in documents, and also add new formats. </text:p>
  <text:p text:style-name="Paragraph">You have to retrieve the <text:span text:style-name="Code (in text)">NumberFormatsSupplier</text:span> as a property at a few objects from their <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.XPropertySet]</text:span> interface, for example, from data sources supporting the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.sdb.DataSource]</text:span> service and from database connections supporting the service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.sdb.DatabaseEnvironment],</text:span> or <text:span text:style-name="Code (in text)">[IDL:com.sun.star.sdb.DatabaseAccess]</text:span>. In addition, all UNO controls offering the service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.awt.UnoControlFormattedFieldModel]</text:span> have a <text:span text:style-name="Code (in text)">NumberFormatsSupplier</text:span> property.</text:p>
  <text:h text:style-name="Head 5" text:level="5">NumberFormats Service</text:h>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.NumberFormats]</text:span> service specifies a container of number formats and implements the interfaces <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XNumberFormatTypes]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XNumberFormats]</text:span>. </text:p>
  <text:h text:style-name="Head 6" text:level="6">XNumberFormats</text:h>
  <text:p text:style-name="Paragraph"><text:span text:style-name="Code (in text)">NumberFormats</text:span> supports the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XNumberFormats]</text:span>. This interface provides access to the number formats of a container. It is used to query the properties of a number format by an index key, retrieve a list of available number format keys of a given type for a given locale, query the key for a user-defined format string, or add new format codes into the list or to remove formats.</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::beans::XPropertySet <text:span text:style-name="MethodSignatureEmphasis">getByKey</text:span> ( [in] long nKey )</text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">sequence&lt; long &gt; <text:span text:style-name="MethodSignatureEmphasis">queryKeys</text:span> ( [in] short nType, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="15"/>[in] com::sun::star::lang::Locale nLocale, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="15"/>[in] boolean bCreate )</text:p>
  <text:p text:style-name="MethodSignatures">long <text:span text:style-name="MethodSignatureEmphasis">queryKey</text:span> ( [in] string aFormat,</text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="15"/>[in] com::sun::star::lang::Locale nLocale, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="15"/>[in] boolean bScan )</text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">long <text:span text:style-name="MethodSignatureEmphasis">addNew</text:span> ( [in] string aFormat, [in] com::sun::star::lang::Locale nLocale ) </text:p>
  <text:p text:style-name="MethodSignatures">long <text:span text:style-name="MethodSignatureEmphasis">addNewConverted</text:span> ( [in] string aFormat, [in] com::sun::star::lang::Locale nLocale, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="13"/>[in] com::sun::star::lang::Locale nNewLocale ) </text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">removeByKey</text:span> ( [in] long nKey )</text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">string <text:span text:style-name="MethodSignatureEmphasis">generateFormat</text:span> ( [in] long nBaseKey, [in] com::sun::star::lang::Locale nLocale, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="13"/>[in] boolean bThousands, [in] boolean bRed, [in] short nDecimals, [in] short nLeading )</text:p>
  <text:p text:style-name="Paragraph">The important methods are probably <text:span text:style-name="Code (in text)">queryKey()</text:span> and <text:span text:style-name="Code (in text)">addNew()</text:span>. The method <text:span text:style-name="Code (in text)">queryKey()</text:span> finds the key for a given format string and locale, whereas <text:span text:style-name="Code (in text)">addNew()</text:span> creates a new format in the container and returns its key for immediate use. The <text:span text:style-name="Code (in text)">bScan</text:span> is reserved for future use and should be set to <text:span text:style-name="Code (in text)">false.</text:span></text:p>
  <text:p text:style-name="Paragraph">The properties of a single number format are obtained by a call to <text:span text:style-name="T16">getByKey()</text:span> <text:span text:style-name="T1">which returns a </text:span><text:span text:style-name="T16">[I</text:span><text:span text:style-name="Code (in text)">DL:com.sun.star.util.NumberFormatProperties]</text:span> service f<text:span text:style-name="T1">or the given index key.</text:span> </text:p>
  <text:h text:style-name="Head 6" text:level="6">XNumberFormatTypes</text:h>
  <text:p text:style-name="Paragraph">The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XNumberFormatTypes]</text:span> offers functions to retreive the index keys of specific predefined number format types. The predefined types are addressed by constants from <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.NumberFormat]</text:span>.The <text:span text:style-name="Code (in text)">NumberFormat</text:span> contains values for predefined format types, such as PERCENT, TIME, CURRENCY, and TEXT.</text:p>
  <text:p text:style-name="MethodSignatures">long <text:span text:style-name="MethodSignatureEmphasis">getStandardIndex</text:span> ( [in] com::sun::star::lang::Locale nLocale )</text:p>
  <text:p text:style-name="MethodSignatures">long <text:span text:style-name="MethodSignatureEmphasis">getStandardFormat</text:span> ( [in] short nType, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="16"/>[in] com::sun::star::lang::Locale nLocale )</text:p>
  <text:p text:style-name="MethodSignatures">long <text:span text:style-name="MethodSignatureEmphasis">getFormatIndex</text:span> ( [in] short nIndex, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="16"/>[in] com::sun::star::lang::Locale nLocale )</text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">boolean <text:span text:style-name="MethodSignatureEmphasis">isTypeCompatible</text:span> ( [in] short nOldType, [in] short nNewType )</text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">long <text:span text:style-name="MethodSignatureEmphasis">getFormatForLocale</text:span> ( [in] long nKey, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="16"/>[in] com::sun::star::lang::Locale nLocale )</text:p>
  <text:p text:style-name="P63">In most cases you will need <text:span text:style-name="Code (in text)">getStandardFormat().</text:span> It expects a type constant from the NumberFormat group and the locale t to use, and returns the key of the corresponding predefined format.</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="applying" text:key1="number formats"/>Applying Number Formats</text:h>
  <text:p text:style-name="Paragraph">To format numeric values, an <text:span text:style-name="Code (in text)">XNumberFormatsSupplier</text:span> is attached to an instance of a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.NumberFormatter]</text:span>, available at the global service manager. For this purpose, its main interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XNumberFormatter]</text:span> has a method <text:span text:style-name="Code (in text)">attachNumberFormatsSupplier()</text:span>. When the <text:span text:style-name="Code (in text)">XNumberFormatsSupplier</text:span> is attached, strings and numeric values are formatted using the methods of the <text:span text:style-name="Code (in text)">NumberFormatter</text:span>. To specify the format to apply, you have to get the unique index key for one of the formats defined in <text:span text:style-name="Code (in text)">NumberFormats</text:span>. These keys are available at the <text:span text:style-name="Code (in text)">XNumberFormats</text:span> and <text:span text:style-name="Code (in text)">XNumberFormatTypes </text:span>interface of <text:span text:style-name="Code (in text)">NumberFormats</text:span>.</text:p>
  <text:p text:style-name="Paragraph">Numbers in documents, such as in table cells, formulas, and text fields, are formatted by applying the format key to the NumberFormat property of the appropriate element.</text:p>
  <text:h text:style-name="P64" text:level="5">NumberFormatter Service</text:h>
  <text:p text:style-name="Paragraph">The service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.NumberFormatter]</text:span> implements the interfaces <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XNumberFormatter]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XNumberFormatPreviewer]</text:span>.</text:p>
  <text:h text:style-name="Head 6" text:level="6">XNumberformatter</text:h>
  <text:p text:style-name="Paragraph">The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XNumberFormatter]</text:span> converts numbers to strings, or strings to numbers, or detects a number format matching a given string.</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">attachNumberFormatsSupplier</text:span> ( [in] com::sun::star::util::XNumberFormatsSupplier xSupplier )</text:p>
  <text:p text:style-name="MethodSignatures">com::sun::star::util::XNumberFormatsSupplier <text:span text:style-name="MethodSignatureEmphasis">getNumberFormatsSupplier</text:span> ()</text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">long <text:span text:style-name="MethodSignatureEmphasis">detectNumberFormat</text:span> ( [in] long nKey, [in] string aString ) </text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">double <text:span text:style-name="MethodSignatureEmphasis">convertStringToNumber</text:span> ( [in] long nKey, [in] string aString ) </text:p>
  <text:p text:style-name="MethodSignatures">string <text:span text:style-name="MethodSignatureEmphasis">convertNumberToString</text:span> ( [in] long nKey, [in] double fValue ); </text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">com::sun::star::util::color <text:span text:style-name="MethodSignatureEmphasis">queryColorForNumber</text:span> ( [in] long nKey, [in] double fValue, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="49"/>[in] com::sun::star::util::color aDefaultColor )</text:p>
  <text:p text:style-name="MethodSignatures">string <text:span text:style-name="MethodSignatureEmphasis">formatString</text:span> ( [in] long nKey, [in] string aString ); </text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">com::sun::star::util::color <text:span text:style-name="MethodSignatureEmphasis">queryColorForString</text:span> ( [in] long nKey, [in] string aString, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="49"/>[in] com::sun::star::util::color aDefaultColor )</text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">string <text:span text:style-name="MethodSignatureEmphasis">getInputString</text:span> ( [in] long nKey, [in] double fValue )</text:p>
  <text:h text:style-name="Head 6" text:level="6">XNumberformatPreviewer</text:h>
  <text:p text:style-name="MethodSignatures">string <text:span text:style-name="MethodSignatureEmphasis">convertNumberToPreviewString</text:span> ( [in] string aFormat, [in] double fValue, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="37"/>[in] com::sun::star::lang::Locale nLocale, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="37"/>[in] boolean bAllowEnglish ) </text:p>
  <text:p text:style-name="MethodSignatures"/>
  <text:p text:style-name="MethodSignatures">com::sun::star::util::color <text:span text:style-name="MethodSignatureEmphasis">queryPreviewColorForNumber</text:span> ( [in] string aFormat, [in] double fValue, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="37"/>[in] com::sun::star::lang::Locale nLocale, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="37"/>[in] boolean bAllowEnglish, </text:p>
  <text:p text:style-name="MethodSignatures"><text:s text:c="37"/>[in] com::sun::star::util::color aDefaultColor ) </text:p>
  <text:p text:style-name="Paragraph">This interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XNumberFormatPreviewer]</text:span>converts values to strings according to a given format code without inserting the format code into the underlying <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.NumberFormats]</text:span> collection.</text:p>
  <text:p text:style-name="P63">The example below demonstrates the usage of these interfaces. [SOURCE:OfficeDev/Number_Formats.java]</text:p>
  <text:p text:style-name="Code">public void doSampleFunction() throws RuntimeException, Exception</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Assume:</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>// com.sun.star.sheet.XSpreadsheetDocument maSpreadsheetDoc;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>// com.sun.star.sheet.XSpreadsheet maSheet;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Query the number formats supplier of the spreadsheet document</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>com.sun.star.util.XNumberFormatsSupplier xNumberFormatsSupplier =</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>(com.sun.star.util.XNumberFormatsSupplier)</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>UnoRuntime.queryInterface(</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>com.sun.star.util.XNumberFormatsSupplier.class, maSpreadsheetDoc );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Get the number formats from the supplier</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>com.sun.star.util.XNumberFormats xNumberFormats =</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>xNumberFormatsSupplier.getNumberFormats();</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Query the XNumberFormatTypes interface</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>com.sun.star.util.XNumberFormatTypes xNumberFormatTypes =</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>(com.sun.star.util.XNumberFormatTypes)</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>UnoRuntime.queryInterface(</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>com.sun.star.util.XNumberFormatTypes.class, xNumberFormats );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Get the number format index key of the default currency format,</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>// note the empty locale for default locale</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>com.sun.star.lang.Locale aLocale = new com.sun.star.lang.Locale();</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>int nCurrencyKey = xNumberFormatTypes.getStandardFormat(</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>com.sun.star.util.NumberFormat.CURRENCY, aLocale );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Get cell range B3:B11</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>com.sun.star.table.XCellRange xCellRange =</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>maSheet.getCellRangeByPosition( 1, 2, 1, 10 );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Query the property set of the cell range</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>com.sun.star.beans.XPropertySet xCellProp =</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>(com.sun.star.beans.XPropertySet)</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>UnoRuntime.queryInterface(</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>com.sun.star.beans.XPropertySet.class, xCellRange );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Set number format to default currency</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>xCellProp.setPropertyValue( &quot;NumberFormat&quot;, new Integer(nCurrencyKey) );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Get cell B3</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>com.sun.star.table.XCell xCell = maSheet.getCellByPosition( 1, 2 );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Query the property set of the cell</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>xCellProp = (com.sun.star.beans.XPropertySet)</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>UnoRuntime.queryInterface(</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>com.sun.star.beans.XPropertySet.class, xCell );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Get the number format index key of the cell&apos;s properties</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>int nIndexKey = ((Integer) xCellProp.getPropertyValue( &quot;NumberFormat&quot; )).intValue();</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Get the properties of the number format</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>com.sun.star.beans.XPropertySet xProp = xNumberFormats.getByKey( nIndexKey );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Get the format code string of the number format&apos;s properties</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>String aFormatCode = (String) xProp.getPropertyValue( &quot;FormatString&quot; );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>System.out.println( &quot;FormatString: `&quot; + aFormatCode + &quot;&apos;&quot; );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Create an arbitrary format code</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>aFormatCode = &quot;\&quot;wonderful \&quot;&quot; + aFormatCode;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Test if it is already present</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>nIndexKey = xNumberFormats.queryKey( aFormatCode, aLocale, false );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// If not, add to number formats collection</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>if ( nIndexKey == -1 )</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>try</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>nIndexKey = xNumberFormats.addNew( aFormatCode, aLocale );</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>catch( com.sun.star.util.MalformedNumberFormatException ex )</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>System.out.println( &quot;Bad number format code: &quot; + ex );</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>nIndexKey = -1;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Set the new format at the cell</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>if ( nIndexKey != -1 )</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>xCellProp.setPropertyValue( &quot;NumberFormat&quot;, new Integer(nIndexKey) );</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:h text:style-name="Head 3" text:level="3">Document Events</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.document.Events;com.sun.star.document.XEventBroadcaster;com.sun.star.document.EventObject;com.sun.star.lang.EventObject]Recurring actions, such as loading, printing or saving, that occur when working with documents, are document <text:span text:style-name="T17">events</text:span>, and all documents in [PRODUCTNAME] offer an interface that sends notifications when these events take place.</text:p>
  <text:p text:style-name="Paragraph">There are general events common every document, such as loading, printing, or saving, and there are other events that are specific to a particular document type. Both can be accessed through the same interface.</text:p>
  <text:p text:style-name="Paragraph">In the document events API, these events are represented by an event name. The following table shows a list of all general document <text:alphabetical-index-mark-start text:id="IMark44271916"/>event names<text:alphabetical-index-mark-end text:id="IMark44271916"/>:</text:p>
  <table:table table:name="Tabelle23" table:style-name="Tabelle23">
   <table:table-column table:style-name="Tabelle23.A"/>
   <table:table-column table:style-name="Tabelle23.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle23.A1" table:number-columns-spanned="2" table:value-type="string">
      <text:p text:style-name="TableHead">General Document Event Names</text:p>
     </table:table-cell>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle23.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:alphabetical-index-mark-start text:id="IMark43875748" text:key1="events"/><text:span text:style-name="Code (in text)">OnNew</text:span><text:alphabetical-index-mark-end text:id="IMark43875748"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle23.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">New Document was created</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle23.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:alphabetical-index-mark-start text:id="IMark43887388" text:key1="events"/><text:span text:style-name="Code (in text)">OnLoad</text:span><text:alphabetical-index-mark-end text:id="IMark43887388"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle23.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Document has been loaded</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle23.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:alphabetical-index-mark-start text:id="IMark44271916" text:key1="events"/><text:span text:style-name="Code (in text)">OnSaveAs</text:span><text:alphabetical-index-mark-end text:id="IMark44271916"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle23.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Document is going to be saved under a new name</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle23.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:alphabetical-index-mark-start text:id="IMark43875748" text:key1="events"/><text:span text:style-name="Code (in text)">OnSaveAsDone</text:span><text:alphabetical-index-mark-end text:id="IMark43875748"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle23.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Document was saved under a new name</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle23.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:alphabetical-index-mark-start text:id="IMark43887388" text:key1="events"/><text:span text:style-name="Code (in text)">OnSave</text:span><text:alphabetical-index-mark-end text:id="IMark43887388"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle23.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Document is going to be saved</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle23.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:alphabetical-index-mark-start text:id="IMark44271916" text:key1="events"/><text:span text:style-name="Code (in text)">OnSaveDone</text:span><text:alphabetical-index-mark-end text:id="IMark44271916"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle23.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Document was saved</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle23.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:alphabetical-index-mark-start text:id="IMark43875748" text:key1="events"/><text:span text:style-name="Code (in text)">OnPrepareUnload</text:span><text:alphabetical-index-mark-end text:id="IMark43875748"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle23.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Document is going to be removed, but still fully available</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle23.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:alphabetical-index-mark-start text:id="IMark43887388" text:key1="events"/><text:span text:style-name="Code (in text)">OnUnload</text:span><text:alphabetical-index-mark-end text:id="IMark43887388"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle23.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Document has been removed, document ist still valid, but closing can no longer be prevented</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle23.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:alphabetical-index-mark-start text:id="IMark44271916" text:key1="events"/><text:span text:style-name="Code (in text)">OnFocus</text:span><text:alphabetical-index-mark-end text:id="IMark44271916"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle23.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Document was activated</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle23.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:alphabetical-index-mark-start text:id="IMark43875748" text:key1="events"/><text:span text:style-name="Code (in text)">OnUnfocus</text:span><text:alphabetical-index-mark-end text:id="IMark43875748"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle23.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Document was deactivated</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle23.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:alphabetical-index-mark-start text:id="IMark43887388" text:key1="events"/><text:span text:style-name="Code (in text)">OnPrint</text:span><text:alphabetical-index-mark-end text:id="IMark43887388"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle23.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Document will be printed</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle23.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:alphabetical-index-mark-start text:id="IMark44271916" text:key1="events"/><text:span text:style-name="Code (in text)">OnModifyChange</text:span><text:alphabetical-index-mark-end text:id="IMark44271916"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle23.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Modified state of the document has changed</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">These event names are documented in the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.Events]</text:span> service. Note that this service description exceeds the scope of events that happen on the document as a whole—so it also contains events that can only be accessed by finding the part of the document where the event occurred, for example, a button in a form. This list of events can also be extended by new events, so that future versions of [PRODUCTNAME] can support new types of events through the same API. Therefore, every client that wants to deal with a particular document event must check if this event is supported, or whether it should be prepared to catch an <text:alphabetical-index-mark-start text:id="IMark43875748"/>exception<text:alphabetical-index-mark-end text:id="IMark43875748"/>.</text:p>
  <text:p text:style-name="Paragraph">Every client that is interested in document events can register for being notified. The necessary interface for notification is <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XEventBroadcaster]</text:span>, which is an optional interface of the service<text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.OfficeDocument]</text:span>. All document objects in [PRODUCTNAME] implement this interface. It has two methods to add and remove listeners for document events:</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="T60">addEventListener</text:span>( [in] ::com::sun::star::document::XEventListener Listener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="MethodSignatureEmphasis">remove</text:span><text:span text:style-name="T60">EventListener</text:span>( [in] ::com::sun::star::document::XEventListener Listener ); </text:p>
  <text:p text:style-name="Paragraph">The listeners must implement the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XEventListener]</text:span> and get a notification through a call of their method:</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="T60">notifyEvent</text:span>( [in] ::com::sun::star::document::EventObject Event ); </text:p>
  <text:p text:style-name="Paragraph">The argument of this call is a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.EventObject]</text:span> struct, which is derived from the usual <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.EventObject]</text:span> and contains two members: the member <text:span text:style-name="Code (in text)">Source</text:span>, which contains an interface pointer to the event source (here the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.OfficeDocument]</text:span> service) and the member <text:span text:style-name="Code (in text)">EventName</text:span> which can be one of the names shown in the preceding table.</text:p>
  <text:p text:style-name="Paragraph">Both methods in the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XEventBroadcaster]</text:span> can cause problems in scripting languages if the object that implements this interface also implements <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XComponent]</text:span>, because it has two very similar methods:</text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void <text:span text:style-name="T31">addEventListener</text:span>( [in] ::com::sun::star::lang::XEventListener Listener ); </text:p>
  <text:p text:style-name="MethodSignatures">[oneway] void remove<text:span text:style-name="T31">EventListener</text:span>( [in] ::com::sun::star::lang::XEventListener Listener ); </text:p>
  <text:p text:style-name="Paragraph">Unfortunately this applies to all [PRODUCTNAME] documents.</text:p>
  <text:p text:style-name="Paragraph">In C++ and Java this is no problem, because the complete signature of a method, including the arguments, is used to identify it. </text:p>
  <text:p text:style-name="Paragraph">In [PRODUCTNAME] Basic, the fully qualified name including the interface can be used from version [OO1.1]:</text:p>
  <text:p text:style-name="Code">Sub RegisterListener</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="2"/>oListener = CreateUnoListener( &quot;DocumentListener_&quot;,&quot;com.sun.star.document.XEventListener&quot; )</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="2"/>ThisComponent.<text:span text:style-name="CodeEmphasis">com_sun_star_document_XEventBroadcaster_addEventListener</text:span>( oListener )</text:p>
  <text:p text:style-name="Code"><text:tab-stop/></text:p>
  <text:p text:style-name="Code">End Sub</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">Sub DocumentListener_notifyEvent( o as object )</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="2"/>IF o.EventName = &quot;OnPrepareUnload&quot; THEN</text:p>
  <text:p text:style-name="Code"><text:tab-stop/>print o.Source.URL</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>ENDIF</text:p>
  <text:p text:style-name="Code"><text:tab-stop/></text:p>
  <text:p text:style-name="Code">end sub</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">Sub DocumentListener_disposing()</text:p>
  <text:p text:style-name="Code">End Sub</text:p>
  <text:p text:style-name="P65">But the OLE automation bridge, and possibly other scripting language bindings, are unable to distinguish between both <text:span text:style-name="Code (in text)">addEventListener()</text:span> and <text:span text:style-name="Code (in text)">removeEventListener()</text:span> methods based on the method signature and must be told which interface you want to use.</text:p>
  <text:p text:style-name="P65">You must use the core reflection to get access to either method. The following code shows an example in VBScript, which registers a document event listener at the current document. </text:p>
  <text:p text:style-name="P66">set xContext = objServiceManager.getPropertyValue( &quot;DefaultContext&quot; )</text:p>
  <text:p text:style-name="P66">set xCoreReflection = xContext.getValueByName( &quot;/singletons/com.sun.star.reflection.theCoreReflection&quot; )</text:p>
  <text:p text:style-name="P66">set xClass = xCoreReflection.forName( &quot;com.sun.star.document.XEventBroadcaster&quot; )</text:p>
  <text:p text:style-name="P66">set xMethod = xClass.getMethod( &quot;addEventListener&quot; )</text:p>
  <text:p text:style-name="P66"/>
  <text:p text:style-name="P66">dim invokeargs(0)</text:p>
  <text:p text:style-name="P66">invokeargs(0) = myListener</text:p>
  <text:p text:style-name="P66"/>
  <text:p text:style-name="P66">set value = objServiceManager.Bridge_GetValueObject()</text:p>
  <text:p text:style-name="P66">call value.InitInOutParam(&quot;[]any&quot;, invokeargs)</text:p>
  <text:p text:style-name="P66">call xMethod.invoke( objDocument, value )</text:p>
  <text:p text:style-name="Paragraph">The C++ code below uses OLE Automation. Two helper functions are provided that help to execute UNO operations.</text:p>
  <text:p text:style-name="P67">// helper function to execute UNO operations via IDispatch</text:p>
  <text:p text:style-name="P67">HRESULT ExecuteFunc( IDispatch* idispUnoObject, <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/> OLECHAR* sFuncName, <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/> CComVariant* params, <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/> unsigned int count, <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/> CComVariant* pResult )<text:line-break/>{<text:line-break/> <text:s/>if( !idispUnoObject )<text:line-break/> <text:s text:c="3"/>return E_FAIL;<text:line-break/><text:line-break/> <text:s/>DISPID id;<text:line-break/> <text:s/>HRESULT hr = idispUnoObject-&gt;GetIDsOfNames( IID_NULL, &amp;sFuncName, 1, LOCALE_USER_DEFAULT, &amp;id);<text:line-break/> <text:s/>if( !SUCCEEDED( hr ) ) return hr;<text:line-break/><text:line-break/> <text:s/>DISPPARAMS dispparams= { params, 0, count, 0};<text:line-break/><text:line-break/> <text:s/>// DEBUG<text:line-break/> <text:s/>EXCEPINFO myInfo;<text:line-break/> <text:s/>return idispUnoObject-&gt;Invoke( id, IID_NULL,LOCALE_USER_DEFAULT, DISPATCH_METHOD, <text:line-break/> <text:s text:c="19"/>&amp;dispparams, pResult, &amp;myInfo, 0);<text:line-break/>}<text:line-break/></text:p>
  <text:p text:style-name="P67">// helper function to execute UNO methods that return interfaces<text:line-break/>HRESULT GetIDispByFunc( IDispatch* idispUnoObject, <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/> <text:s/><text:tab-stop/>OLECHAR* sFuncName, <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/> <text:s/><text:tab-stop/>CComVariant* params, <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/> <text:s/><text:tab-stop/>unsigned int count, <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/><text:tab-stop/> <text:s/><text:tab-stop/>CComPtr&lt;IDispatch&gt;&amp; pdispResult )<text:line-break/>{<text:line-break/> <text:s/>if( !idispUnoObject )<text:line-break/> <text:s text:c="3"/>return E_FAIL;<text:line-break/><text:line-break/> <text:s/>CComVariant result;<text:line-break/> <text:s/>HRESULT hr = ExecuteFunc( idispUnoObject, sFuncName, params, count, &amp;result );<text:line-break/> <text:s/>if( !SUCCEEDED( hr ) ) return hr;<text:line-break/><text:line-break/> <text:s/>if( result.vt != VT_DISPATCH || result.pdispVal == NULL )<text:line-break/> <text:s text:c="3"/>return E_FAIL;<text:line-break/><text:line-break/> <text:s/>pdispResult = CComPtr&lt;IDispatch&gt;( result.pdispVal );<text:line-break/><text:line-break/> <text:s/>return S_OK;<text:line-break/>}</text:p>
  <text:p text:style-name="P67"/>
  <text:p text:style-name="P67">// it&apos;s assumed that pServiceManager (by creating it as a COM object), pDocument (f.e. by loading it) // and pListener (the listener we want to add) are passed as parameters</text:p>
  <text:p text:style-name="P67"/>
  <text:p text:style-name="Code"><text:span text:style-name="T61">HRESULT AddDocument</text:span>EventListener(</text:p>
  <text:p text:style-name="P67"><text:s/>CComPtr&lt;IDispatch&gt; pServiceManager, CComPtr&lt;IDispatch&gt; pDocument, CComPtr&lt;IDispatch&gt; pListener)</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>CComPtr&lt;IDispatch&gt; pdispContext;<text:line-break/> <text:s/>hr = GetIDispByFunc( pServiceManager, L&quot;getPropertyValue&quot;, &amp;CComVariant( L&quot;DefaultContext&quot; ), 1, <text:tab-stop/><text:tab-stop/>pdispContext );<text:line-break/> <text:s/>if( !SUCCEEDED( hr ) ) return hr;<text:line-break/><text:line-break/> <text:s/>CComPtr&lt;IDispatch&gt; pdispCoreReflection;<text:line-break/> <text:s/>hr = GetIDispByFunc( pdispContext, <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/> L&quot;getValueByName&quot;, <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/> &amp;CcomVariant( L&quot;/singletons/com.sun.star.reflection.theCoreReflection&quot; ), <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/> 1, <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/> pdispCoreReflection );<text:line-break/> <text:s/>if( !SUCCEEDED( hr ) ) return hr;<text:line-break/><text:line-break/> <text:s/>CComPtr&lt;IDispatch&gt; pdispClass;<text:line-break/> <text:s/>hr = GetIDispByFunc( pdispCoreReflection, <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/> L&quot;forName&quot;, <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/> &amp;CComVariant( L&quot;com.sun.star.document.XEventBroadcaster&quot; ), <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/> 1, <text:line-break/><text:tab-stop/><text:tab-stop/><text:tab-stop/> pdispClass );<text:line-break/> <text:s/>if( !SUCCEEDED( hr ) ) return hr;<text:line-break/><text:line-break/> <text:s/>CComPtr&lt;IDispatch&gt; pdispMethod;<text:line-break/> <text:s/>hr = GetIDispByFunc( pdispClass, L&quot;getMethod&quot;, &amp;CComVariant( L&quot;addEventListener&quot; ), 1, pdispMethod );<text:line-break/> <text:s/>if( !SUCCEEDED( hr ) ) return hr;<text:line-break/><text:line-break/> <text:s/>CComPtr&lt;IDispatch&gt; pdispListener;<text:line-break/> <text:s/>CComPtr&lt;IDispatch&gt; pdispValueObj;</text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>hr = GetIDispByFunc( mpDispFactory, L&quot;Bridge_GetValueObject&quot;, NULL, 0, pdispValueObj );</text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>if( !SUCCEEDED( hr ) ) return hr;</text:p>
  <text:p text:style-name="P67"/>
  <text:p text:style-name="P67"><text:s text:c="2"/>CComVariant pValParams[2];</text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>pValParams[1] = CComVariant( L&quot;com.sun.star.document.XEventListener&quot; );</text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>pValParams[0] = CComVariant( pdispListener );</text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>CComVariant dummyResult;</text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>hr = ExecuteFunc( pdispValueObj, L&quot;Set&quot;, pValParams, 2, &amp;dummyResult );</text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>if( !SUCCEEDED( hr ) ) return hr;</text:p>
  <text:p text:style-name="P67"/>
  <text:p text:style-name="P67"><text:s text:c="2"/>SAFEARRAY FAR* pPropVal = SafeArrayCreateVector( VT_VARIANT, 0, 1 );</text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>long ix1 = 0;</text:p>
  <text:p text:style-name="P67"/>
  <text:p text:style-name="P67"><text:s text:c="2"/>CComVariant aArgs( pdispValueObj );</text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>SafeArrayPutElement( pPropVal, &amp;ix, &amp;aArgs );</text:p>
  <text:p text:style-name="P67"><text:tab-stop/></text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>CComVariant aDoc( pdispDocument );</text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>CComVariant pParams[2];</text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>pParams[1] = aDoc;</text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>pParams[0].vt = VT_ARRAY | VT_VARIANT; pParams[0].parray = pPropVal;</text:p>
  <text:p text:style-name="P67"/>
  <text:p text:style-name="P67"><text:s text:c="2"/>CComVariant result;</text:p>
  <text:p text:style-name="P67"/>
  <text:p text:style-name="P67"><text:s text:c="2"/>//invoking the method addeventlistner<text:tab-stop/><text:tab-stop/></text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>hr = ExecuteFunc( pdispMethod, L&quot;invoke&quot;, pParams, 2, &amp;result );</text:p>
  <text:p text:style-name="P67"><text:s text:c="2"/>if( !SUCCEEDED( hr ) ) return hr;</text:p>
  <text:p text:style-name="P67"/>
  <text:p text:style-name="P67"><text:s text:c="2"/>return S_OK;</text:p>
  <text:p text:style-name="P67">}</text:p>
  <text:p text:style-name="Paragraph">Another way to react to document events is to bind a macro to it—a process called <text:span text:style-name="Emphasis">event binding</text:span>. From [PRODUCTNAME] [OO1.1] you can also use scripts in other languages, provided that a corresponding scripting framework implementation is present.</text:p>
  <text:p text:style-name="Paragraph">All document objects in [PRODUCTNAME] support event binding through an interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XEventsSupplier]</text:span>. This interface has only one method:</text:p>
  <text:p text:style-name="MethodSignatures">::com::sun::star::container::XNameReplace <text:span text:style-name="MethodSignatureEmphasis">getEvents</text:span>(); </text:p>
  <text:p text:style-name="Paragraph">This method gives access to a container of event bindings. The container is represented by a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.XNameReplace]</text:span> interface that, together with the methods of its base interfaces, offers the following methods:</text:p>
  <text:p text:style-name="MethodSignatures">void <text:span text:style-name="MethodSignatureEmphasis">replaceByName</text:span>( [in] string aName, [in] any aElement );</text:p>
  <text:p text:style-name="MethodSignatures">any <text:span text:style-name="MethodSignatureEmphasis">getByName</text:span>( [in] string aName );</text:p>
  <text:p text:style-name="MethodSignatures">sequence&lt; string &gt; <text:span text:style-name="MethodSignatureEmphasis">getElementNames</text:span>(); </text:p>
  <text:p text:style-name="MethodSignatures">boolean <text:span text:style-name="MethodSignatureEmphasis">hasByName</text:span>( [in] string aName );</text:p>
  <text:p text:style-name="MethodSignatures">type <text:span text:style-name="MethodSignatureEmphasis">getElementType</text:span>(); <text:s text:c="2"/></text:p>
  <text:p text:style-name="MethodSignatures">boolean <text:span text:style-name="MethodSignatureEmphasis">hasElements</text:span>(); <text:s/></text:p>
  <text:p text:style-name="Paragraph">Each container element represents an event binding. By default, all bindings are empty. The element names are the event names shown in the preceding table. In addition, there are document type-specific events. The method <text:span text:style-name="Code (in text)">getElementNames()</text:span> yields all possible events that are supported by the object and <text:span text:style-name="Code (in text)">hasByName()</text:span> checks for the existence of a particular event.</text:p>
  <text:p text:style-name="Paragraph">For every supported event name you can use <text:span text:style-name="Code (in text)">getByName()</text:span> to query for the current event binding or <text:span text:style-name="Code (in text)">replaceByName()</text:span> to set a new one. Both methods may throw a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.NoSuchElementException]</text:span> exception if an unsupported event name is used.</text:p>
  <text:p text:style-name="Paragraph">The type of an event binding, which is wrapped in the <text:span text:style-name="Code (in text)">any</text:span> returned by <text:span text:style-name="Code (in text)">getByName(),</text:span> is a sequence of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.PropertyValue]</text:span> that describes the event binding.</text:p>
  <table:table table:name="Table39" table:style-name="Table39">
   <table:table-column table:style-name="Table39.A"/>
   <table:table-column table:style-name="Table39.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table39.A1" table:number-columns-spanned="2" table:value-type="string">
      <text:p text:style-name="P68">PropertyValue structs in the event binding description</text:p>
     </table:table-cell>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Table39.A2" table:value-type="string">
     <text:p text:style-name="TableCode">EventType</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table39.B2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:span text:style-name="T62">string. Can assume the values </text:span><text:span text:style-name="T36">&quot;StarBasic&quot;</text:span><text:span text:style-name="T62"> or </text:span><text:span text:style-name="T36">&quot;Script&quot;</text:span><text:span text:style-name="T62">. The event type </text:span><text:span text:style-name="T36">&quot;Script&quot; </text:span>describes the location as <text:span text:style-name="Code (in text)">URL</text:span>.<text:span text:style-name="T36"> </text:span><text:span text:style-name="T62">The event type </text:span><text:span text:style-name="T36">&quot;StarBasic&quot;</text:span><text:span text:style-name="T62"> is provided for compatibility reasons and describes the location of the macro through the properties </text:span><text:span text:style-name="T36">Library</text:span><text:span text:style-name="T62"> and </text:span><text:span text:style-name="T36">MacroName</text:span>, in addition to <text:span text:style-name="Code (in text)">URL</text:span>.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table39.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Script</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table39.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Available for the event types <text:span text:style-name="Code (in text)">Script</text:span> and <text:span text:style-name="Code (in text)">StarBasic</text:span>. Describes the location of the macro/script routine which is bound. For the URL property, a command URL is expected (see <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.AppEnv.UsingDispatch]</text:span>). [PRODUCTNAME] will execute this command when the event occurs. </text:p>
     <text:p text:style-name="TextInTable">For the event type <text:span text:style-name="Code (in text)">StarBasic</text:span>, the URL uses the <text:span text:style-name="www/ftp/email">macro:</text:span> protocol. For the event type <text:span text:style-name="Code (in text)">Script</text:span>, other protocols are possible, especially the <text:span text:style-name="www/ftp/email">script:</text:span> protocol. </text:p>
     <text:p text:style-name="TextInTable">The macro protocol has two forms:</text:p>
     <text:p text:style-name="TextInTable"><text:span text:style-name="www/ftp/email">macro:///&lt;Library&gt;.&lt;Module&gt;.&lt;Method(args)&gt;</text:span><text:a xlink:type="simple" xlink:href="macro:///MyLib/MyModule/MyMethod(args"><text:line-break/></text:a><text:span text:style-name="www/ftp/email">macro://./&lt;Library&gt;.&lt;Module&gt;.&lt;Method(args)&gt;</text:span></text:p>
     <text:p text:style-name="TextInTable">The first form points to a method in the global basic storage, while the second one points to a method embedded in the current document. <text:span text:style-name="www/ftp/email">&lt;Library&gt;.&lt;Module&gt;.&lt;Method(args)&gt; </text:span>represent the names of the library, the module and the method. Currently, for <text:span text:style-name="Code (in text)">args</text:span> only string arguments (separated by comma) are possible. If no args exist, empty brackets must be used, because the brackets are part of the scheme. An example URL could look like:</text:p>
     <text:p text:style-name="TextInTable"><text:span text:style-name="www/ftp/email">macro:///MyLib.MyModule.MyMethod(foo,bar)</text:span></text:p>
     <text:p text:style-name="TextInTable">The exact form of the <text:span text:style-name="www/ftp/email">script:</text:span> command URL protocol depends on the installed scripting module. They will be available later as additional components for [PRODUCTNAME] [OO1.1].</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table39.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Library</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table39.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Deprecated. Available for <text:span text:style-name="Code (in text)">EventType &quot;StarBasic&quot;</text:span>. <text:s/>Can assume the values <text:span text:style-name="Code (in text)">&quot;application&quot;</text:span> or empty string for the global basic storage, and <text:span text:style-name="Code (in text)">&quot;document&quot;</text:span> for the document where the code is embedded.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table39.A2" table:value-type="string">
     <text:p text:style-name="TableCode">MacroName</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table39.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">string. Deprecated. Available for <text:span text:style-name="Code (in text)">EventType &quot;StarBasic&quot;</text:span>. Describes the macro location as &lt;<text:span text:style-name="Code (in text)">Library&gt;.&lt;MyModule&gt;.&lt;MyMethod&gt;.</text:span></text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Standard"/>
  <table:table table:name="Tabelle24" table:style-name="Tabelle24">
   <table:table-column table:style-name="Tabelle24.A"/>
   <table:table-column table:style-name="Tabelle24.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle24.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note17" text:anchor-type="paragraph" svg:x="0.071cm" svg:y="0.03cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="70" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle24.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">In [PRODUCTNAME] [OO1.1] all properties (<text:span text:style-name="Code (in text)">URL</text:span>, <text:span text:style-name="Code (in text)">Library</text:span>, <text:span text:style-name="Code (in text)">MacroName</text:span>) will be returned for event bindings of type <text:span text:style-name="Code (in text)">StarBasic</text:span>, regardless if the binding was created with a <text:span text:style-name="Code (in text)">URL</text:span> property only or with the <text:span text:style-name="Code (in text)">Library</text:span> and <text:span text:style-name="Code (in text)">MacroName</text:span> property. The internal implementation does the necessary conversion. Older versions of [PRODUCTNAME] always returned only <text:span text:style-name="Code (in text)">Library</text:span> and <text:span text:style-name="Code (in text)">MacroName</text:span>, even if the binding was created with the <text:span text:style-name="Code (in text)">URL</text:span> property.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">In [PRODUCTNAME] [OO1.1] there is another important extension in the area of document events and event bindings. This version has a new service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.GlobalEventBroadcaster]</text:span> that offers the same document-event-related functionality as described previously (interfaces <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XEventBroadcaster]</text:span>, <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.XEventsSupplier]</text:span>), but it allows you to register for events that happen in any document and also allows you to set bindings for all documents that are stored in the global UI configuration of [PRODUCTNAME]. Using this services frees you from registering at every single document that has been created or loaded.</text:p>
  <text:p text:style-name="Paragraph">Though a potential listener registers for event notifications at this global service and not at any document itself, the received event source in the event notification is the <text:span text:style-name="Emphasis">document, </text:span>not the <text:span text:style-name="Code (in text)">GlobalEventBroadcaster</text:span>. The reason for this is that usually a listener contains code that works on the document, so it needs a reference to it.</text:p>
  <text:p text:style-name="Paragraph">The service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.document.GlobalEventBroadcaster]</text:span> also supports two more events that do not occur in any document but are useful for working with document events:</text:p>
  <table:table table:name="Tabelle25" table:style-name="Tabelle25">
   <table:table-column table:style-name="Tabelle25.A"/>
   <table:table-column table:style-name="Tabelle25.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle25.A1" table:number-columns-spanned="2" table:value-type="string">
      <text:p text:style-name="TableHead">Global Event Names</text:p>
     </table:table-cell>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle25.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:alphabetical-index-mark-start text:id="IMark44271916" text:key1="events"/><text:span text:style-name="Code (in text)">OnStartApp</text:span><text:alphabetical-index-mark-end text:id="IMark44271916"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle25.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Application has been started</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle25.A2" table:value-type="string">
     <text:p text:style-name="TextInTable"><text:alphabetical-index-mark-start text:id="IMark43875748" text:key1="events"/><text:span text:style-name="Code (in text)">OnCloseApp</text:span><text:alphabetical-index-mark-end text:id="IMark43875748"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle25.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Application is going to be closed. This event is fired after all documents have been closed and nobody objected to the shutdown.</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">The event source in the notifications is NULL (empty).</text:p>
  <text:p text:style-name="Paragraph">All event bindings can be seen or set in the [PRODUCTNAME] UI in the <text:span text:style-name="Buttons/Menus">Tools-Configure</text:span> dialog on <text:span text:style-name="Buttons/Menus">Events</text:span> page. Two radio buttons on the right side of the dialog toggle between <text:span text:style-name="Buttons/Menus">[PRODUCTNAME]</text:span> and <text:span text:style-name="Buttons/Menus">Document</text:span> binding. In [PRODUCTNAME] [OO1.1], you can still only bind to [PRODUCTNAME] Basic macros in the dialog. Bindings to <text:span text:style-name="www/ftp/email">script:</text:span> URLs can only be set using the API, but the dialog is at least able to display them. If, in [PRODUCTNAME] [OO1.1], a global and a document binding are set for the same event, first the global and then the document binding is executed. With older versions, only the document binding was executed, and the global binding was only executed if no document binding was set.</text:p>
  <text:h text:style-name="P69" text:level="3">Path Organization</text:h>
  <text:p text:style-name="Paragraph">The <text:alphabetical-index-mark-start text:id="IMark43887388"/>path settings service<text:alphabetical-index-mark-end text:id="IMark43887388"/> is the central service that manages the paths of [PRODUCTNAME]. Almost every component inside [PRODUCTNAME] uses one or more of the paths to access its resources located on the file system.</text:p>
  <text:p text:style-name="Paragraph">Users can customize most of the paths in [PRODUCTNAME] by choosing <text:span text:style-name="Buttons/Menus">Tools – Options – [PRODUCTNAME] – Paths</text:span>.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Path Settings</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.util.PathSettings]The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.PathSettings]</text:span> service supports a number of properties which store the [PRODUCTNAME] predefined paths. There are two different groups of properties. One group stores only a <text:alphabetical-index-mark-start text:id="IMark44271916"/>single path<text:alphabetical-index-mark-end text:id="IMark44271916"/> and the other group stores two or <text:alphabetical-index-mark text:string-value="multi paths"/>more paths - separated by a semicolon.</text:p>
  <table:table table:name="Tabelle67" table:style-name="Tabelle67">
   <table:table-column table:style-name="Tabelle67.A"/>
   <table:table-column table:style-name="Tabelle67.B"/>
   <table:table-column table:style-name="Tabelle67.C"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle67.A1" table:number-columns-spanned="3" table:value-type="string">
      <text:p text:style-name="P68">Properties of [IDL:com.sun.star.util.PathSettings]</text:p>
     </table:table-cell>
     <table:covered-table-cell/>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Addin</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directory that contains <text:alphabetical-index-mark-start text:id="IMark43887388"/>spreadsheet add-ins<text:alphabetical-index-mark-end text:id="IMark43887388"/> which use the old add-in API.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">AutoCorrect</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Multi path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directories that contain the settings for the <text:alphabetical-index-mark-start text:id="IMark44271916"/>AutoCorrect<text:alphabetical-index-mark-end text:id="IMark44271916"/> dialog. </text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">AutoText</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Multi path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directories that contain the <text:alphabetical-index-mark-start text:id="IMark43875748"/>AutoText<text:alphabetical-index-mark-end text:id="IMark43875748"/> modules. </text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Backup</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directory for storing automatic <text:alphabetical-index-mark-start text:id="IMark43887388"/>backup copies<text:alphabetical-index-mark-end text:id="IMark43887388"/> of documents.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Basic</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Multi path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the location of the Basic files that are used by the <text:alphabetical-index-mark-start text:id="IMark44271916"/>AutoPilot<text:alphabetical-index-mark-end text:id="IMark44271916"/>s.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Bitmap</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directory that contains the <text:alphabetical-index-mark-start text:id="IMark43887388"/>external icons<text:alphabetical-index-mark-end text:id="IMark43887388"/> for the <text:alphabetical-index-mark-start text:id="IMark43875748"/>toolbar<text:alphabetical-index-mark-end text:id="IMark43875748"/>s.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Config</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the location of the <text:alphabetical-index-mark-start text:id="IMark44271916"/>configuration files<text:alphabetical-index-mark-end text:id="IMark44271916"/>. This property is not visible in the [PRODUCTNAME] path options dialog and cannot be changed by users.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Dictionary</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the location of the [PRODUCTNAME] <text:s/><text:alphabetical-index-mark-start text:id="IMark43887388"/>dictionaries<text:alphabetical-index-mark-end text:id="IMark43887388"/>.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Favorite</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directory that contains the saved folder <text:alphabetical-index-mark-start text:id="IMark43875748"/>bookmarks<text:alphabetical-index-mark-end text:id="IMark43875748"/>.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Filter</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directory where the <text:alphabetical-index-mark-start text:id="IMark44271916"/>filters<text:alphabetical-index-mark-end text:id="IMark44271916"/> are stored.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Gallery</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Multi path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directories that contain the <text:alphabetical-index-mark-start text:id="IMark43887388"/>Gallery database<text:alphabetical-index-mark-end text:id="IMark43887388"/> and <text:alphabetical-index-mark-start text:id="IMark43875748"/>multimedia files<text:alphabetical-index-mark-end text:id="IMark43875748"/>. </text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Graphic</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directory that is displayed when the dialog for opening a graphic or for saving a new graphic is called.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Help</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the location of the Office <text:alphabetical-index-mark-start text:id="IMark44271916"/>help files<text:alphabetical-index-mark-end text:id="IMark44271916"/>.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Linguistic</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directory where the <text:alphabetical-index-mark-start text:id="IMark43887388"/>spellcheck<text:alphabetical-index-mark-end text:id="IMark43887388"/> files are stored.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Module</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directory where the modules are stored.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Palette</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the location of the palette files that contain <text:alphabetical-index-mark-start text:id="IMark43875748"/><text:alphabetical-index-mark text:string-value="colors (user-defined)"/>user-defined colors<text:alphabetical-index-mark-end text:id="IMark43875748"/> and <text:alphabetical-index-mark text:string-value="patterns (user-defined)"/><text:alphabetical-index-mark text:string-value="user-defined patterns"/>patterns (*.SOB and *.SOF).</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Plugin</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Multi path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directories where the <text:alphabetical-index-mark-start text:id="IMark44271916"/>Plugins<text:alphabetical-index-mark-end text:id="IMark44271916"/> are stored.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Storage</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directory where mail and news files as well as other information (for example, about FTP Server) are stored. This property is not visible in the [PRODUCTNAME] path options dialog and cannot be changed by users.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Temp</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directory for the office <text:alphabetical-index-mark-start text:id="IMark43875748"/>temp-files<text:alphabetical-index-mark-end text:id="IMark43875748"/>.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Template</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Multi path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directory for the [PRODUCTNAME] document <text:alphabetical-index-mark-start text:id="IMark43887388"/>templates<text:alphabetical-index-mark-end text:id="IMark43887388"/>.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">UIConfig</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Multi path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the location of global directories when looking for user interface configuration files. The user interface configuration is merged with the user settings that are stored in the directory specified by <text:span text:style-name="Emphasis">UserConfig</text:span>. </text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">UserConfig</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directory that contains the <text:alphabetical-index-mark-start text:id="IMark44271916"/>user settings<text:alphabetical-index-mark-end text:id="IMark44271916"/>, including the user interface configuration files for menus, toolbars, accelerators and status bars.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">UserDictionary</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the directory for the custom <text:alphabetical-index-mark text:string-value="dictionaries (custom)"/>dictionaries.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Work</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle67.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">Specifies the location of the <text:alphabetical-index-mark-start text:id="IMark43887388"/>work folder<text:alphabetical-index-mark-end text:id="IMark43887388"/>. This path can be modified according to the user&apos;s needs and can be seen in the Open or Save dialog.</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:h text:style-name="P52" text:level="5">Configuration</text:h>
  <text:p text:style-name="Paragraph">The path settings service uses the group <text:span text:style-name="Code (in text)">Path</text:span> in the <text:span text:style-name="www/ftp/email">org.Openoffice.Office.Common</text:span> branch to read and store paths. The <text:span text:style-name="Code (in text)">Current</text:span> and <text:span text:style-name="Code (in text)">Default</text:span> groups in the share layer of the configuration branch store the path settings properties. The <text:span text:style-name="Code (in text)">Current</text:span> group initialize the properties of the path settings service during startup. If the user activates the <text:span text:style-name="Buttons/Menus">Default</text:span> button in the path options dialog, the <text:span text:style-name="Code (in text)">Default</text:span> group values are copied to the current ones.</text:p>
  <table:table table:name="Tabelle68" table:style-name="Tabelle68">
   <table:table-column table:style-name="Tabelle68.A"/>
   <table:table-column table:style-name="Tabelle68.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle68.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note18" text:anchor-type="paragraph" svg:x="0.071cm" svg:y="0.03cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="80" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle68.B1" table:value-type="string">
      <text:p text:style-name="TipInTable">Note: The configuration branch separates the paths of a property with a colon (:), whereas the path settings service separates multiple paths with a semicolon (;).</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">&lt;?xml version=&apos;1.0&apos; encoding=&apos;UTF-8&apos;?&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">&lt;oor:component-schema oor:name=&quot;Common&quot; oor:package=&quot;org.openoffice.Office&quot; xml:lang=&quot;en-US&quot; xmlns:oor=&quot;http://openoffice.org/2001/registry&quot; xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://wwww.w3.org/2001/XMLSchema-instance”&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>&lt;component&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="8"/>&lt;group oor:name=&quot;Path&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>&lt;group oor:name=&quot;Current&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;OfficeInstall&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value/&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;OfficeInstallURL&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value/&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Addin&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(progpath)/addin&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;AutoCorrect&quot; oor:type=&quot;oor:string-list&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value oor:separator=&quot;:&quot;&gt;$(insturl)/share/autocorr:$(userurl)/autocorr&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;AutoText&quot; oor:type=&quot;oor:string-list&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value oor:separator=&quot;:&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="24"/>$(insturl)/share/autotext/$(vlang):$(userurl)/autotext</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Backup&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(userurl)/backup&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Basic&quot; oor:type=&quot;oor:string-list&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value oor:separator=&quot;:&quot;&gt;$(insturl)/share/basic:$(userurl)/basic&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Bitmap&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(insturl)/share/config/symbol&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Config&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(insturl)/share/config&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Dictionary&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(insturl)/share/wordbook/$(vlang)&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Favorite&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(userurl)/config/folders&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Filter&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(progpath)/filter&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Gallery&quot; oor:type=&quot;oor:string-list&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value oor:separator=&quot;:&quot;&gt;$(insturl)/share/gallery:$(userurl)/gallery&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Graphic&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(insturl)/share/gallery&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Help&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(instpath)/help&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Linguistic&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(insturl)/share/dict&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Module&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(progpath)&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Palette&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(userurl)/config&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Plugin&quot; oor:type=&quot;oor:string-list&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value oor:separator=&quot;:&quot;&gt;$(userpath)/plugin&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Storage&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(userpath)/store&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Temp&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(temp)&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Template&quot; oor:type=&quot;oor:string-list&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value oor:separator=&quot;:&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="24"/>$(insturl)/share/template/$(vlang):$(userurl)/template</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;UIConfig&quot; oor:type=&quot;oor:string-list&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value oor:separator=&quot;:&quot;/&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;UserConfig&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(userurl)/config&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;UserDictionary&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(userurl)/wordbook&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Work&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(work)&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>&lt;/group&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>&lt;group oor:name=&quot;Default&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Addin&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(progpath)/addin&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;AutoCorrect&quot; oor:type=&quot;oor:string-list&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value oor:separator=&quot;:&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="24"/>$(insturl)/share/autocorr:$(userurl)/autocorr</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;AutoText&quot; oor:type=&quot;oor:string-list&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value oor:separator=&quot;:&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="24"/>$(insturl)/share/autotext/$(vlang):$(userurl)/autotext</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Backup&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(userurl)/backup&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Basic&quot; oor:type=&quot;oor:string-list&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value oor:separator=&quot;:&quot;&gt;$(insturl)/share/basic:$(userurl)/basic&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Bitmap&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(insturl)/share/config/symbol&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Config&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(insturl)/share/config&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Dictionary&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(insturl)/share/wordbook/$(vlang)&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Favorite&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(userurl)/config/folders&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Filter&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(progpath)/filter&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Gallery&quot; oor:type=&quot;oor:string-list&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value oor:separator=&quot;:&quot;&gt;$(insturl)/share/gallery:$(userurl)/gallery&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Graphic&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(insturl)/share/gallery&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Help&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(instpath)/help&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Linguistic&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(insturl)/share/dict&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Module&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(progpath)&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Palette&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(userurl)/config&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Plugin&quot; oor:type=&quot;oor:string-list&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value oor:separator=&quot;:&quot;&gt;$(userpath)/plugin&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Temp&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(temp)&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Template&quot; oor:type=&quot;oor:string-list&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value oor:separator=&quot;:&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="24"/>$(insturl)/share/template/$(vlang):$(userurl)/template</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;UIConfig&quot; oor:type=&quot;oor:string-list&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value oor:separator=&quot;:&quot;/&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;UserConfig&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(userurl)/config&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;UserDictionary&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(userurl)/wordbook&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;prop oor:name=&quot;Work&quot; oor:type=&quot;xs:string&quot;&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="20"/>&lt;value&gt;$(work)&lt;/value&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="16"/>&lt;/prop&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>&lt;/group&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="8"/>&lt;/group&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>&lt;/component&gt;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">&lt;/oor:component-schema&gt;</text:span></text:p>
  <text:h text:style-name="Head 5" text:level="5">Accessing Path Settings</text:h>
  <text:p text:style-name="Paragraph">The path settings service is a one-instance service that supports the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.XPropertySet]</text:span>, <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.XFastPropertySet]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.XMultiPropertySet]</text:span> interfaces for access to the properties.</text:p>
  <text:p text:style-name="Paragraph">The service can be created using the service manager of [PRODUCTNAME] and the service name <text:span text:style-name="www/ftp/email">com.sun.star.util.PathSettings</text:span>. The following example creates the path settings service.</text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">import com.sun.star.lang.XMultiServiceFactory;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">import com.sun.star.uno.Exception;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">import com.sun.star.uno.XInterface;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">import com.sun.star.beans.XPropertySet</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"/></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">XPropertySet createPathSettings() {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"/></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>// Obtain Process Service Manager.</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>XMultiServiceFactory xServiceFactory = ...</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"/></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>// Create Path settings service. Needs to be done only once per process.</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>XInterface xPathSettings;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>try {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="8"/>xPathSettings <text:s/>= xServiceFactory.createInstance(&quot;com.sun.star.util.PathSettings&quot; );</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>catch (com.sun.star.uno.Exception e) {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"/></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>if (xPathSettings <text:s/>!= null)</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="8"/>return (XpropertySet) UnoRuntime.queryInterface(XPropertySet.class, xPathSettings);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>else</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="8"/>return null;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">}</text:span></text:p>
  <text:p text:style-name="Paragraph">The main interface of the path settings service is <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.XPropertySet]</text:span>. You can retrieve and write properties with this interface. It also supports getting information about the properties themselves.</text:p>
  <text:unordered-list text:style-name="L25">
   <text:list-item>
    <text:p text:style-name="P70"><text:span text:style-name="Code (in text)">com::sun::star::beans::XPropertySetInfo getPropertySetInfo();<text:line-break/></text:span>The path settings service returns an <text:span text:style-name="Code (in text)">XPropertySetInfo</text:span> interface where more information about the path properties can be retrieved. The information includes the name of the property, a handle for faster access with <text:span text:style-name="Code (in text)">XFastPropertySet</text:span>, the type of the property value and attribute values.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:unordered-list text:style-name="L26">
   <text:list-item>
    <text:p text:style-name="P71"><text:span text:style-name="Code (in text)">void setPropertyValue( [in] string aPropertyName, [in] any aValue );<text:line-break/></text:span>This function can set the path properties to a new value. The path settings service expects that a value of type <text:span text:style-name="Code (in text)">string</text:span> is provided. The string must be a correctly encoded file URL. If the path property supports multiple paths, each path must be separated by a semicolon (;). Path variables are also allowed, so long as they can be resolved to a valid file URL.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:unordered-list text:style-name="L27">
   <text:list-item>
    <text:p text:style-name="P72"><text:span text:style-name="Code (in text)">any getPropertyValue( [in] string PropertyName );<text:line-break/></text:span>This function retrieves the value of a path property. The property name must be provided and the path is returned. The path settings service always returns the path as a file URL. If the property value includes multiple paths, each path is separated by a semicolon (;).</text:p>
   </text:list-item>
  </text:unordered-list>
  <table:table table:name="Tabelle69" table:style-name="Tabelle69">
   <table:table-column table:style-name="Tabelle69.A"/>
   <table:table-column table:style-name="Tabelle69.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle69.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Note19" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="78" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle69.B1" table:value-type="string">
      <text:p text:style-name="TipInTable">Note: The path settings service always provides property values as file URLs. Properties which are marked as multi path (see table above) use a semicolon (;) as a separator for the different paths. The service also expects that a new value for a path property is provided as a file URL or has a preceding path variable, otherwise a [IDL:com.sun.star.lang.IllegalArgumentException] is thrown.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph"><text:sequence-ref text:reference-format="category-and-value" text:ref-name="refIllustration19">Illustration 6.20</text:sequence-ref> shows how the path settings, path substitution, and configuration service work together to read or <text:s/>write path properties.</text:p>
  <table:table table:name="Tabelle70" table:style-name="Tabelle70">
   <table:table-column table:style-name="Tabelle70.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle70.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr14" draw:name="Rahmen16" text:anchor-type="paragraph" svg:width="12.753cm" fo:min-height="7.329cm" draw:z-index="81">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr15" draw:name="Sequence diagram of intercation between path settings/substitution and configuration" text:anchor-type="paragraph" svg:x="-4.949cm" svg:y="0cm" svg:width="13.12cm" svg:height="15.071cm" draw:z-index="82" xlink:href="PathSettings_UML.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Sequence diagram showing the intercation between path settings/substitution and the configuration</svg:desc>
         </draw:image>Illustration <text:sequence text:ref-name="refIllustration19" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.20</text:sequence>: Interaction of path settings, path substitution and configuration</text:p>
       </draw:text-box></text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <table:table table:name="Tabelle71" table:style-name="Tabelle71">
   <table:table-column table:style-name="Tabelle71.A"/>
   <table:table-column table:style-name="Tabelle71.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle71.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr8" draw:name="Important17" text:anchor-type="paragraph" svg:x="0.071cm" svg:y="0.03cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="79" xlink:href="../important.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Pay attention to the following important text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle71.B1" table:value-type="string">
      <text:p text:style-name="TipInTable">Important: Keep in mind that the paths managed by the path settings service are vital for almost all of the functions in [PRODUCTNAME]. Entering a wrong path can result in minor malfunctions or break the complete [PRODUCTNAME] installation. Although the path settings service performs a validity check on the provided URL, this cannot prevent all problems.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The following code example uses the path settings service to retrieve and set the path properties.</text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">import com.sun.star.bridge.XUnoUrlResolver;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">import com.sun.star.uno.UnoRuntime;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">import com.sun.star.uno.XComponentContext;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">import com.sun.star.lang.XMultiComponentFactory;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">import com.sun.star.beans.XPropertySet;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">import com.sun.star.beans.PropertyValue;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"/></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">import com.sun.star.beans.UnknownPropertyException;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"/></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">/* Provides example code how to access and use the</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s/>* path pathsettings servce.</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s/>*/</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">public class PathSettingsTest extends java.lang.Object {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/></text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="3"/>/*</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>* List of predefined path variables supported by</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>* the path settings service.</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>*/</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="3"/>private static String[] predefinedPathProperties = {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Addin&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;AutoCorrect&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;AutoText&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Backup&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Basic&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Bitmap&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Config&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Dictionary&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Favorite&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Filter&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Gallery&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Graphic&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Help&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Linguistic&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Module&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Palette&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Plugin&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Storage&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Temp&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Template&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;UIConfig&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;UserConfig&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;UserDictionary&quot;,</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>&quot;Work&quot;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="3"/>};</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/></text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="3"/>/*</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>* @param args the command line arguments</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>*/</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="3"/>public static void main(String[] args) {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="8"/></text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>XComponentContext xRemoteContext = null;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>XMultiComponentFactory xRemoteServiceManager = null;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>XPropertySet xPathSettingsService = null;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="8"/></text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>try {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>// connect</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>XComponentContext xLocalContext =</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(null);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>XMultiComponentFactory xLocalServiceManager = xLocalContext.getServiceManager();</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>Object urlResolver <text:s/>= xLocalServiceManager.createInstanceWithContext(</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>&quot;com.sun.star.bridge.UnoUrlResolver&quot;, xLocalContext );</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>XUnoUrlResolver xUnoUrlResolver = (XUnoUrlResolver) UnoRuntime.queryInterface( </text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>XUnoUrlResolver.class, urlResolver );</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>Object initialObject = xUnoUrlResolver.resolve( </text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>&quot;uno:socket,host=localhost,port=2083;urp;StarOffice.ServiceManager&quot; );</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>XPropertySet xPropertySet = (XPropertySet)UnoRuntime.queryInterface(</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>XPropertySet.class, initialObject);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>Object context = xPropertySet.getPropertyValue(&quot;DefaultContext&quot;); <text:s text:c="11"/></text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>xRemoteContext = (XComponentContext)UnoRuntime.queryInterface(</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>XComponentContext.class, context);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>xRemoteServiceManager = xRemoteContext.getServiceManager();</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/></text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>Object pathSubst = xRemoteServiceManager.createInstanceWithContext(</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>&quot;com.sun.star.comp.framework.PathSettings&quot;, xRemoteContext );</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>xPathSettingsService = (XPropertySet)UnoRuntime.queryInterface(</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>XPropertySet.class, pathSubst);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/></text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>/* Work with path settings */</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>workWithPathSettings( xPathSettingsService );</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>catch (java.lang.Exception e){</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>e.printStackTrace();</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>finally {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>System.exit(0);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="3"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"/></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="3"/>/*</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>* Retrieve and set path properties from path settings service</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>* @param xPathSettingsService the path settings service</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="4"/>*/</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="3"/>public static void workWithPathSettings(XPropertySet xPathSettingsService) {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>if (xPathSettingsService != null) {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>for (int i=0; i&lt;predefinedPathProperties.length; i++) {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>try {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="15"/>/* Retrieve values for path properties from path settings service*/ </text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="15"/>Object aValue = xPathSettingsService.getPropertyValue(predefinedPathProperties[i]);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="24"/></text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="15"/>// getPropertyValue returns an Object, you have to cast it to type that you need </text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="15"/>String aPath = (String)aValue;</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="15"/>System.out.println(&quot;Property=&quot;+ predefinedPathProperties[i] + &quot; Path=&quot; + aPath);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>catch (com.sun.star.beans.UnknownPropertyException e) {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="15"/>System.out.println(&quot;UnknownPropertyException has been thrown accessing &quot;+predefinedPathProperties[i]);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>catch (com.sun.star.lang.WrappedTargetException e) {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="15"/>System.out.println(&quot;WrappedTargetException has been thrown accessing &quot;+predefinedPathProperties[i]);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/></text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>// Try to modfiy the work path property. After running this example</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>// you should see the new value of &quot;My Documents&quot; in the path options </text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>// tab page, accessible via &quot;Tools - Options – [PRODUCTNAME] - Paths&quot;. </text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>// If you want to revert the changes, you can also do it with the path tab page.</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>try {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>xPathSettingsService.setPropertyValue(&quot;Work&quot;, &quot;$(temp)&quot;);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>String aValue = (String)xPathSettingsService.getPropertyValue(&quot;Work&quot;);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>System.out.println(&quot;The work path should now be &quot; + aValue);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>catch (com.sun.star.beans.UnknownPropertyException e) {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>System.out.println(&quot;UnknownPropertyException has been thrown accessing PathSettings service&quot;);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>catch (com.sun.star.lang.WrappedTargetException e) {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>System.out.println(&quot;WrappedTargetException has been thrown accessing PathSettings service&quot;);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>catch (com.sun.star.beans.PropertyVetoException e) {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>System.out.println(&quot;PropertyVetoException has been thrown accessing PathSettings service&quot;);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>catch (com.sun.star.lang.IllegalArgumentException e) {</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="12"/>System.out.println(&quot;IllegalArgumentException has been thrown accessing PathSettings service&quot;);</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="9"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="6"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE"><text:s text:c="3"/>}</text:span></text:p>
  <text:p text:style-name="Code"><text:span text:style-name="CODE">}</text:span></text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark text:string-value="path variables"/>Path Variables</text:h>
  <text:p text:style-name="Paragraph">Path variables are used as placeholders for system-dependent paths or parts of paths which are only known during the runtime of [PRODUCTNAME]. The <text:alphabetical-index-mark-start text:id="IMark44271916"/>path substitution service<text:alphabetical-index-mark-end text:id="IMark44271916"/> <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.PathSubstitution]</text:span> - which manages all path variables of [PRODUCTNAME] - checks the runtime environment during startup and sets the values of the path variables. The path substitution service supports a number of predefined path variables. They provide information about important <text:span text:style-name="T2">paths</text:span> that [PRODUCTNAME] currently uses. They are implemented as read-only values and cannot be changed.</text:p>
  <text:p text:style-name="Paragraph">[PRODUCTNAME] is a multi-platform solution that runs on different file systems. Obviously users want <text:s/>to have a single user configuration on all workstations across all platforms in a networked installation. For example, a user <text:s/>wants to use both the Windows and Unix version of [PRODUCTNAME]. The <text:alphabetical-index-mark text:string-value="home directory"/>home directory and the <text:alphabetical-index-mark-start text:id="IMark43887388"/>working directory<text:alphabetical-index-mark-end text:id="IMark43887388"/> are located on a central file server that uses Samba to provide access for Windows systems. The user only wants to have one user installation for both systems, so that individual settings only need to be specified once. </text:p>
  <text:p text:style-name="Paragraph">The path settings service described in <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.Common.PathOrganization.Settings]</text:span> utilizes the path substitution service. In the configuration of [PRODUCTNAME], path variables describe the path settings, and these variables can be substituted by platform-specific paths during startup. That way, path substitution gives users the power to apply path settings only once, while the system takes care of the necessary platform-dependent and environment <text:span text:style-name="T2">adaptations</text:span>.</text:p>
  <text:p text:style-name="Paragraph"><text:sequence-ref text:reference-format="category-and-value" text:ref-name="refIllustration20">Illustration 6.21</text:sequence-ref> shows how a path variable can resolve the path problem that arises when you use the same user directory on different platforms.</text:p>
  <table:table table:name="Tabelle72" table:style-name="Tabelle72">
   <table:table-column table:style-name="Tabelle72.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle72.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:text-box draw:style-name="fr16" draw:name="Frame21" text:anchor-type="paragraph" svg:x="2.455cm" svg:y="0.011cm" svg:width="12.753cm" fo:min-height="7.329cm" draw:z-index="85">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr3" draw:name="Overview why path variables are useful" text:anchor-type="paragraph" svg:x="-4.949cm" svg:y="0cm" svg:width="11.92cm" svg:height="9.85cm" draw:z-index="86" xlink:href="PathSubstitution_GeneralFunction.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Overview graphic showing why path variables are useful</svg:desc>
         </draw:image>Illustration <text:sequence text:ref-name="refIllustration20" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.21</text:sequence>: Path variables solve problems in heterogeneous environments</text:p>
       </draw:text-box></text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The following sections describe predefined variables, how to define your own variables, and how to resolve path variables with respect to paths in your programs.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Predefined Variables</text:h>
  <text:p text:style-name="Paragraph">The path substitution service supports a number of predefined path variables. They provide information about the <text:span text:style-name="T2">paths</text:span> that [PRODUCTNAME] currently uses. They are implemented as read-only values and cannot be modified.</text:p>
  <text:p text:style-name="Paragraph">The predefined path variables can be separated into three distinct groups. The first group of variables specifies a <text:alphabetical-index-mark-start text:id="IMark43887388" text:key1="path"/><text:span text:style-name="T63">single path</text:span><text:alphabetical-index-mark-end text:id="IMark43887388"/>, the second group specifies a <text:alphabetical-index-mark-start text:id="IMark43875748" text:key1="path"/><text:span text:style-name="Emphasis">list of </text:span><text:span text:style-name="T64">paths</text:span><text:alphabetical-index-mark-end text:id="IMark43875748"/> that are separated by the shell or operating system dependent character, and the third group specifies only a <text:alphabetical-index-mark-start text:id="IMark44271916" text:key1="path"/><text:span text:style-name="Emphasis">part of a path</text:span><text:alphabetical-index-mark-end text:id="IMark44271916"/>.</text:p>
  <text:p text:style-name="Paragraph">All predefined variable names are case insensitive, as opposed to the user-defined variables that are described below.</text:p>
  <table:table table:name="Tabelle73" table:style-name="Tabelle73">
   <table:table-column table:style-name="Tabelle73.A"/>
   <table:table-column table:style-name="Tabelle73.B"/>
   <table:table-column table:style-name="Tabelle73.C"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle73.A1" table:number-columns-spanned="3" table:value-type="string">
      <text:p text:style-name="P68">Predefined variables supported by service [IDL:com.sun.star.util.PathSubstitution]</text:p>
     </table:table-cell>
     <table:covered-table-cell/>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:alphabetical-index-mark-start text:id="IMark43887388"/>$(home)<text:alphabetical-index-mark-end text:id="IMark43887388"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="P73">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">The absolute path to the home directory of the current user. Under Windows this depends on the specific versions: usually the <text:span text:style-name="www/ftp/email">&lt;drive&gt;:\Documents and Settings\&lt;username&gt;\Application Data</text:span> under Windows 2000/XP and <text:span text:style-name="www/ftp/email">&lt;drive&gt;:\Windows\Profiles\&lt;username&gt;\Application Data</text:span> under Windows NT and Win9x, ME with multi user support. Windows 9x and ME without multi-user support <text:span text:style-name="www/ftp/email">&lt;drive&gt;:\Windows\Application Data</text:span>. </text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:alphabetical-index-mark-start text:id="IMark43875748"/>$(inst)<text:alphabetical-index-mark-end text:id="IMark43875748"/><text:line-break/><text:alphabetical-index-mark-start text:id="IMark44271916"/>$(instpath)<text:alphabetical-index-mark-end text:id="IMark44271916"/><text:line-break/><text:alphabetical-index-mark-start text:id="IMark43887388"/>$(insturl)<text:alphabetical-index-mark-end text:id="IMark43887388"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="P73">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.C2" table:value-type="string">
     <text:p text:style-name="P73">The absolute installation path of [PRODUCTNAME]. Normally the <text:span text:style-name="www/ftp/email">share</text:span> and <text:span text:style-name="www/ftp/email">program</text:span> folders are located inside the installation folder. The <text:span text:style-name="Code (in text)">$(instpath)</text:span> and <text:span text:style-name="Code (in text)">$(insturl)</text:span> variables are aliases to <text:span text:style-name="Code (in text)">$(inst)—</text:span> they are included for downward compatibility and should not be used.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:alphabetical-index-mark-start text:id="IMark43875748"/>$(prog)<text:alphabetical-index-mark-end text:id="IMark43875748"/><text:line-break/><text:alphabetical-index-mark-start text:id="IMark44271916"/>$(progpath)<text:alphabetical-index-mark-end text:id="IMark44271916"/><text:line-break/><text:alphabetical-index-mark-start text:id="IMark43887388"/>$(progurl)<text:alphabetical-index-mark-end text:id="IMark43887388"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="P73">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">The absolute path of the program folder of [PRODUCTNAME]. Normally the executable and the shared libraries are located in this folder. <text:span text:style-name="T62">The </text:span><text:span text:style-name="T36">$(progpath)</text:span><text:span text:style-name="T62"> and </text:span><text:span text:style-name="T36">$(progurl)</text:span><text:span text:style-name="T62"> variables are aliases to </text:span><text:span text:style-name="T36">$(prog)—</text:span><text:span text:style-name="T62">they are supported for downward compatibility and should not be used.</text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:alphabetical-index-mark-start text:id="IMark43875748"/>$(temp)<text:alphabetical-index-mark-end text:id="IMark43875748"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="P73">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">The absolute path of the current temporary directory used by [PRODUCTNAME].</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:alphabetical-index-mark-start text:id="IMark44271916"/>$(user)<text:alphabetical-index-mark-end text:id="IMark44271916"/><text:line-break/><text:alphabetical-index-mark-start text:id="IMark43887388"/>$(userpath)<text:alphabetical-index-mark-end text:id="IMark43887388"/><text:line-break/><text:alphabetical-index-mark-start text:id="IMark43875748"/>$(userurl)<text:alphabetical-index-mark-end text:id="IMark43875748"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="P73">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">The absolute path to the user installation folder of [PRODUCTNAME]. <text:span text:style-name="T62">The </text:span><text:span text:style-name="T36">$(userpath)</text:span><text:span text:style-name="T62"> and </text:span><text:span text:style-name="T36">$(userurl)</text:span><text:span text:style-name="T62"> variables are aliases to </text:span><text:span text:style-name="T36">$(user)—</text:span><text:span text:style-name="T62"> they are supported for downward compatibility and should not be used.</text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:alphabetical-index-mark-start text:id="IMark44271916"/>$(work)<text:alphabetical-index-mark-end text:id="IMark44271916"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="P73">Single path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">The absolute path of the working directory of the user. Under Windows this is the <text:span text:style-name="www/ftp/email">My Documents</text:span> folder. Under Unix this is the <text:span text:style-name="www/ftp/email">home</text:span> directory of the user.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:alphabetical-index-mark-start text:id="IMark43887388"/>$(path)<text:alphabetical-index-mark-end text:id="IMark43887388"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">List of paths</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">The value of the PATH environment variable of the [PRODUCTNAME] process. The single paths are separated by a &apos;;&apos; character independent of the system.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:alphabetical-index-mark-start text:id="IMark43875748"/>$(lang)<text:alphabetical-index-mark-end text:id="IMark43875748"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="P74">Part of a path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">The country code used by [PRODUCTNAME], <text:span text:style-name="T2">see the table Mapping ISO 639/3166 to $(lang) below for examples.</text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:alphabetical-index-mark-start text:id="IMark43887388"/>$(langid)<text:alphabetical-index-mark-end text:id="IMark43887388"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="P74">Part of a path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">The language identifier used by [PRODUCTNAME]. An identifier is composed of a primary language identifier and a sublanguage identifier such as 0x0009=<text:span text:style-name="T2">English (primary language identifier)</text:span>, 0x0409=<text:span text:style-name="T2">English</text:span> US (composed language code).The language identifier is based on the Microsoft language identifiers, for further information please see:<text:line-break/><text:line-break/>Table of Language Identifiers<text:line-break/>http://msdn.microsoft.com/library/en-us/intl/nls_238z.asp<text:line-break/><text:line-break/>Primary Language Identifiers<text:line-break/>http://msdn.microsoft.com/library/en-us/intl/nls_61df.asp<text:line-break/><text:line-break/>SubLanguage Identifiers<text:line-break/>http://msdn.microsoft.com/library/en-us/intl/nls_19ir.asp</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="TableCode"><text:alphabetical-index-mark-start text:id="IMark43875748"/>$(vlang)<text:alphabetical-index-mark-end text:id="IMark43875748"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.A2" table:value-type="string">
     <text:p text:style-name="P74">Part of a path</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle73.C2" table:value-type="string">
     <text:p text:style-name="TextInTable">The language used by [PRODUCTNAME] as an English string, for example, &quot;german&quot; for a <text:span text:style-name="T2">German</text:span> version of [PRODUCTNAME]. </text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">The values of $(lang), $(langid) and $(vlang) are based on the property <text:span text:style-name="www/ftp/email">ooLocale</text:span> in the configuration branch <text:span text:style-name="www/ftp/email">org.openoffice.Setup/L10N</text:span><text:span text:style-name="T65">, that is </text:span>normally located in the <text:span text:style-name="www/ftp/email">share</text:span> directory<text:span text:style-name="www/ftp/email">.</text:span> This property follows the ISO 639-1/ISO3166 standards that define identification codes for languages and countries. The <text:span text:style-name="www/ftp/email">ooLocale</text:span> property is written by the setup application during installation time. The following are examples of table <text:span text:style-name="T2">Mapping ISO 639/3166 to $(vlang):</text:span></text:p>
  <table:table table:name="Tabelle74" table:style-name="Tabelle74">
   <table:table-column table:style-name="Tabelle74.A"/>
   <table:table-column table:style-name="Tabelle74.B"/>
   <table:table-column table:style-name="Tabelle74.C"/>
   <table:table-column table:style-name="Tabelle74.D"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle74.A1" table:number-columns-spanned="4" table:value-type="string">
      <text:p text:style-name="P68">Mapping from ISO639-1/ISO3166 to $(lang) and $(vlang)</text:p>
     </table:table-cell>
     <table:covered-table-cell/>
     <table:covered-table-cell/>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="P75">ISO 639-1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="P76">ISO 3166</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="P77">$(lang)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="P77">$(vlang)</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">ar</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">*</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="96">
     <text:p text:style-name="P78">96</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">arabic</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">ca</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">AD</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="37">
     <text:p text:style-name="P78">37</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">catalan</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">ca</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">ES</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="37">
     <text:p text:style-name="P78">37</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">catalan</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">cs</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">*</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="42">
     <text:p text:style-name="P78">42</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">czech</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">cz</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">*</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="42">
     <text:p text:style-name="P78">42</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">czech</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">da</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">DK</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="45">
     <text:p text:style-name="P78">45</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">danish</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">de</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">*</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="49">
     <text:p text:style-name="P78">49</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">german</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">el</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">*</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="30">
     <text:p text:style-name="P78">30</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">greek</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">en</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">*</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="1">
     <text:p text:style-name="P78">1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">english</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">en</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">GB</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="1">
     <text:p text:style-name="P78">1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">english_uk</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">es</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">*</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="34">
     <text:p text:style-name="P78">34</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">spanish</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">fi</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">FI</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="35">
     <text:p text:style-name="P78">35</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">finnish</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">fr</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">*</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="33">
     <text:p text:style-name="P78">33</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">french</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">he</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">*</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="97">
     <text:p text:style-name="P78">97</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">hebrew</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">hu</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">HU</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="36">
     <text:p text:style-name="P78">36</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">hungarian</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">it</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">*</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="39">
     <text:p text:style-name="P78">39</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">italian</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">ja</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">JP</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="81">
     <text:p text:style-name="P78">81</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">japanese</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">ko</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">*</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="82">
     <text:p text:style-name="P78">82</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">korean</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">nb</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">NO</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="47">
     <text:p text:style-name="P78">47</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">norwegian</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">nl</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">*</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="31">
     <text:p text:style-name="P78">31</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">dutch</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">nn</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">NO</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="47">
     <text:p text:style-name="P78">47</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">norwegian</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">NO</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="47">
     <text:p text:style-name="P78">47</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">norwegian</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">pl</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">PL</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="48">
     <text:p text:style-name="P78">48</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">polish</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">pt</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">BR</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="55">
     <text:p text:style-name="P78">55</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="P79">portuguese_brazilian</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">pt</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">PT</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="3">
     <text:p text:style-name="P78">3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">portuguese</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">ru</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">RU</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="7">
     <text:p text:style-name="P78">7</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">russian</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">sk</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">SK</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="43">
     <text:p text:style-name="P78">43</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="P79">slovak</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">sv</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">*</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="46">
     <text:p text:style-name="P78">46</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="P79">swedish</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">th</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">TH</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="66">
     <text:p text:style-name="P78">66</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="P79">thai</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">tr</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">TR</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="90">
     <text:p text:style-name="P78">90</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="P79">turkish</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">zh</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">CN</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="86">
     <text:p text:style-name="P78">86</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="P79">chinese_simplified</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">zh</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.A2" table:value-type="string">
     <text:p text:style-name="TableCode">TW</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.C3" table:value-type="float" table:value="88">
     <text:p text:style-name="P78">88</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle74.D2" table:value-type="string">
     <text:p text:style-name="P79">chinese_traditional</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5">Custom Path Variables</text:h>
  <text:h text:style-name="Head 6" text:level="6">Syntax</text:h>
  <text:p text:style-name="Paragraph">The path <text:span text:style-name="T2">substitution</text:span> service supports the definition and usage of user-defined path variables. The variable names must use this syntax:</text:p>
  <text:p text:style-name="Code">variable ::= “$(“ letter { letter | digit } “)”</text:p>
  <text:p text:style-name="Code">letter ::= &quot;A&quot;-&quot;Z&quot;|&quot;a&quot;-&quot;z&quot;</text:p>
  <text:p text:style-name="Code">digit ::= &quot;0&quot;-&quot;9&quot;</text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="T1">The user-defined variables must be defined in the configuration branch </text:span><text:span text:style-name="T66">org.openoffice.Office.Substitution. </text:span><text:span text:style-name="T1">[PRODUCTNAME] employs a rule-based system to evaluate which definition of a user-defined variable is chosen. The following sections describe the different parts of this rule-based system and the configuration settings that are required for defining new path variables.</text:span></text:p>
  <text:h text:style-name="Head 6" text:level="6">Environment Values</text:h>
  <text:p text:style-name="Paragraph">To bind a specific value to a user-defined path variable, the path substitution service uses environment values. The path <text:span text:style-name="T2">substitution</text:span> service chooses a variable definition based on the values of these <text:span text:style-name="T2">environment</text:span> parameters. The following table describes which parameters can be used:</text:p>
  <table:table table:name="Tabelle75" table:style-name="Tabelle75">
   <table:table-column table:style-name="Tabelle75.A"/>
   <table:table-column table:style-name="Tabelle75.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle75.A1" table:number-columns-spanned="2" table:value-type="string">
      <text:p text:style-name="P68"><text:span text:style-name="T2">Environment</text:span> parameters</text:p>
     </table:table-cell>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle75.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Host</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle75.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">This value can be a host name or an IP address , depending on the network configuration (DNS server available). A host name is case <text:span text:style-name="T2">insensitive and can also use the asterisk (*) wildcard to represent match zero or more characters.</text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle75.A2" table:value-type="string">
     <text:p text:style-name="TableCode">YPDomain</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle75.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">The yellow pages domain or NIS domain. The value is case <text:span text:style-name="T2">insensitive and can use the asterisk (*) wildcard to represent match zero or more characters.</text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle75.A2" table:value-type="string">
     <text:p text:style-name="TableCode">DNSDomain</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle75.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">The domain name service. The value is case <text:span text:style-name="T2">insensitive and can use the asterisk (*) wildcard to represent match zero or more characters.</text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle75.A2" table:value-type="string">
     <text:p text:style-name="TableCode">NTDomain</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle75.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Windows NT domain. The value is case <text:span text:style-name="T2">insensitive and can use the asterisk (*) wildcard to represent match zero or more characters.</text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle75.A2" table:value-type="string">
     <text:p text:style-name="TableCode">OS</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle75.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">The operating system parameter supports the following values:</text:p>
     <text:unordered-list text:style-name="L28">
      <text:list-item>
       <text:p text:style-name="P80">WINDOWS (all windows versions including Win9x, WinME, and WinXP)</text:p>
      </text:list-item>
      <text:list-item>
       <text:p text:style-name="P80">UNIX (includes LINUX and SOLARIS)</text:p>
      </text:list-item>
      <text:list-item>
       <text:p text:style-name="P80">SOLARIS</text:p>
      </text:list-item>
      <text:list-item>
       <text:p text:style-name="P80">LINUX</text:p>
      </text:list-item>
     </text:unordered-list>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:h text:style-name="Head 6" text:level="6">Rules</text:h>
  <text:p text:style-name="Paragraph">The user can define the mapping of environment parameter values to variable values. Each definition is called a <text:span text:style-name="Emphasis">rule</text:span> and all rules for a particular variable are the <text:span text:style-name="Emphasis">rule set</text:span>. You can only have one environment parameter value for each rule.</text:p>
  <text:p text:style-name="Paragraph">The following example rules specify that the user-defined variable called <text:span text:style-name="Code (in text)">devdoc</text:span> is bound to the directory <text:span text:style-name="www/ftp/email">s:\develop\documentation </text:span>if [PRODUCTNAME] is running under Windows. The second rule binds <text:span text:style-name="Code (in text)">devdoc</text:span> to <text:span text:style-name="www/ftp/email">/net/develop/documentation</text:span> if [PRODUCTNAME] is running under Solaris.</text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="Code (in text)">Variable name=devdoc<text:line-break/>Environment parameter=OS<text:line-break/>Value=file:///s:/develop/documentation</text:span></text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="Code (in text)">Variable name=devdoc<text:line-break/>Environment parameter=SOLARIS<text:line-break/>Value=file:///net/develop/documentation</text:span></text:p>
  <text:h text:style-name="Head 6" text:level="6">Analyzing User-Defined Rules</text:h>
  <text:p text:style-name="Paragraph">[PRODUCTNAME] uses matching rules to find the active rule inside a provided rule set.</text:p>
  <text:ordered-list text:style-name="L29">
   <text:list-item>
    <text:p text:style-name="P81">Tries to match with the <text:span text:style-name="Code (in text)">Host</text:span> environment parameter. If more than one rule matches—this can be possible if you use the asterisk (*) wildcard character <text:s/>- the first matching rule is applied.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P82">Tries to match with the different <text:span text:style-name="Code (in text)">Domain</text:span> parameters. There is no predefined order for the domain parameters - the first matching rule is applied.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P82">Try to match with the <text:span text:style-name="Code (in text)">OS</text:span> parameter. The specialized values have a higher priority than generic ones, for example, LINUX has a higher priority than UNIX.</text:p>
   </text:list-item>
  </text:ordered-list>
  <text:p text:style-name="P83"><text:sequence-ref text:reference-format="category-and-value" text:ref-name="refIllustration21">Illustration 6.22</text:sequence-ref> shows the analyzing and matching of user-defined rules.</text:p>
  <table:table table:name="Tabelle76" table:style-name="Tabelle76">
   <table:table-column table:style-name="Tabelle76.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle76.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr17" draw:name="Rahmen161" text:anchor-type="paragraph" svg:x="2.54cm" svg:width="12.749cm" fo:min-height="1.18cm" draw:z-index="83">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr3" draw:name="Overview of the path substitution process" text:anchor-type="paragraph" svg:x="-4.949cm" svg:y="0cm" svg:width="11.89cm" svg:height="19.091cm" draw:z-index="84" xlink:href="PathSubstitution_RuleAnalysing.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Overview graphic showing the path substitution process</svg:desc>
         </draw:image>Illustration <text:sequence text:ref-name="refIllustration21" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.22</text:sequence>: Process of the rule set analyzing</text:p>
       </draw:text-box></text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The analyzing and matching process is done whenever a rule set has changed. Afterwards the values of the user-defined path variables are set and can be retrieved using the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XStringSubstitution]</text:span>.</text:p>
  <text:h text:style-name="Head 6" text:level="6">Configuration</text:h>
  <text:p text:style-name="Paragraph">The path substitution service uses the <text:span text:style-name="www/ftp/email">org.openoffice.Office.Substitution</text:span> configuration branch for the rule set definitions, which adhere to this schema:</text:p>
  <text:p text:style-name="Code">&lt;?xml version=&apos;1.0&apos; encoding=&apos;UTF-8&apos;?&gt;</text:p>
  <text:p text:style-name="Code">&lt;oor:component-schema oor:name=&quot;Substitution&quot; oor:package=&quot;org.openoffice.Office&quot; xml:lang=&quot;en-US&quot; xmlns:oor=&quot;http://openoffice.org/2001/registry&quot; xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>&lt;templates&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>&lt;group oor:name=&quot;SharePointMapping&quot;&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>&lt;prop oor:name=&quot;Directory&quot; oor:type=&quot;xs:string&quot; oor:nillable=&quot;false&quot;/&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>&lt;group oor:name=&quot;Environment&quot;&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&lt;prop oor:name=&quot;OS&quot; oor:type=&quot;xs:string&quot;/&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&lt;prop oor:name=&quot;Host&quot; oor:type=&quot;xs:string&quot;/&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&lt;prop oor:name=&quot;DNSDomain&quot; oor:type=&quot;xs:string&quot;/&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&lt;prop oor:name=&quot;YPDomain&quot; oor:type=&quot;xs:string&quot;/&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&lt;prop oor:name=&quot;NTDomain&quot; oor:type=&quot;xs:string&quot;/&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>&lt;/group&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>&lt;/group&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>&lt;set oor:name=&quot;SharePoint&quot; oor:node-type=&quot;SharePointMapping&quot;/&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>&lt;/templates&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>&lt;component&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>&lt;set oor:name=&quot;SharePoints&quot; oor:node-type=&quot;SharePoint&quot;/&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>&lt;/component&gt;</text:p>
  <text:p text:style-name="Code">&lt;/oor:component-schema&gt;</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">SharePoints</text:span> set is the root container that store the definition of the different user-defined path variables. The <text:span text:style-name="Code (in text)">SharePoint</text:span> set uses nodes of type <text:span text:style-name="Code (in text)">SharePoint</text:span> which defines a single user-defined path variable.</text:p>
  <table:table table:name="Tabelle77" table:style-name="Tabelle77">
   <table:table-column table:style-name="Tabelle77.A"/>
   <table:table-column table:style-name="Tabelle77.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle77.A1" table:number-columns-spanned="2" table:value-type="string">
      <text:p text:style-name="TableHead">Properties of the SharePoint set nodes</text:p>
     </table:table-cell>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle77.A2" table:value-type="string">
     <text:p text:style-name="TableCode">oor:component-data</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle77.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">String. The name of the user-defined path variable. It must be unique inside the <text:span text:style-name="www/ftp/email">SharePoints</text:span> set.</text:p>
     <text:p text:style-name="TextInTable">The name must meet the requirements for path variable names, see <text:span text:style-name="ChapterRef">[CHAPTER:OfficeDev.Common.PathOrganization.Variables]</text:span>. The preceding characters “<text:span text:style-name="Code (in text)">$(</text:span>“ and the succeeding “<text:span text:style-name="Code (in text)">)</text:span>” must be omitted, for example, the node string for the path variable <text:span text:style-name="Code (in text)">$(devdoc)</text:span> must be <text:span text:style-name="Code (in text)">devdoc</text:span>.</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">A <text:span text:style-name="Code (in text)">SharePoint</text:span> set is a container for the different rules, called <text:span text:style-name="Code (in text)">SharePointMapping</text:span> in the configuration.</text:p>
  <table:table table:name="Tabelle78" table:style-name="Tabelle78">
   <table:table-column table:style-name="Tabelle78.A"/>
   <table:table-column table:style-name="Tabelle78.B"/>
   <table:table-column table:style-name="Tabelle78.C"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle78.A1" table:number-columns-spanned="3" table:value-type="string">
      <text:p text:style-name="TableHead">Properties of the SharePointMapping group</text:p>
     </table:table-cell>
     <table:covered-table-cell/>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle78.A2" table:value-type="string">
     <text:p text:style-name="TableCode">oor:component-data</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle78.B2" table:number-columns-spanned="2" table:value-type="string">
     <text:p text:style-name="TextInTable">String - must be unique inside the <text:span text:style-name="www/ftp/email">SharePoint</text:span> set, but with no additional meaning for user-defined path variables. Use a consecutive numbering scheme - even numbers are permitted.</text:p>
    </table:table-cell>
    <table:covered-table-cell/>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle78.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Directory</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle78.B2" table:number-columns-spanned="2" table:value-type="string">
     <text:p text:style-name="TextInTable">String - must be set and contain a valid and encoded file URL that represents the value of the user-defined path variable for the rule.</text:p>
    </table:table-cell>
    <table:covered-table-cell/>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle78.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Environment</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle78.B2" table:number-columns-spanned="2" table:value-type="string">
     <text:p text:style-name="TextInTable">Group - contains a set of properties that define the environment parameter that this rule must match. You can only use <text:span text:style-name="Emphasis">one</text:span> environment in a rule.</text:p>
    </table:table-cell>
    <table:covered-table-cell/>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle78.A5" table:value-type="string">
     <text:p text:style-name="TableCode"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle78.A2" table:value-type="string">
     <text:p text:style-name="TableCode">OS</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle78.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">The operating system. The following values are supported:</text:p>
     <text:unordered-list text:style-name="L30">
      <text:list-item>
       <text:p text:style-name="P84">WINDOWS = Matches all Windows OS from Win 98 and higher.</text:p>
      </text:list-item>
      <text:list-item>
       <text:p text:style-name="P84">LINUX = Matches all supported Linux systems.</text:p>
      </text:list-item>
      <text:list-item>
       <text:p text:style-name="P84">SOLARIS = Matches all supported Solaris systems.</text:p>
      </text:list-item>
      <text:list-item>
       <text:p text:style-name="P84">UNIX = Matches all supported Unix systems (Linux,Solaris)</text:p>
      </text:list-item>
     </text:unordered-list>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle78.A5" table:value-type="string">
     <text:p text:style-name="TableCode"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle78.A2" table:value-type="string">
     <text:p text:style-name="TableCode">Host</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle78.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">The host name or IP address. The name or address can include the asterisk (*) wildcard to match with zero or more characters. For example, <text:s/><text:span text:style-name="www/ftp/email">dev*.local.de</text:span> <text:s/>refers to <text:s/>all systems where the host name starts with “dev” and ends with “.local.de”</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle78.A5" table:value-type="string">
     <text:p text:style-name="TableCode"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle78.A2" table:value-type="string">
     <text:p text:style-name="TableCode">DNSDomain</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle78.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">The domain name service. The value is case <text:span text:style-name="T2">insensitive and can use the asterisk (*) wildcard for zero or more characters.</text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle78.A5" table:value-type="string">
     <text:p text:style-name="TableCode"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle78.A2" table:value-type="string">
     <text:p text:style-name="TableCode">YPDomain</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle78.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">The yellow pages domain or NIS domain. The value is case <text:span text:style-name="T2">insensitive and can use the asterisk (*) wildcard for zero or more characters.</text:span></text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Tabelle78.A2" table:value-type="string">
     <text:p text:style-name="TableCode"/>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle78.A2" table:value-type="string">
     <text:p text:style-name="TableCode">NTDomain</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabelle78.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Windows NT domain. The value is case <text:span text:style-name="T2">insensitive and can use the asterisk (*) wildcard for zero or more characters.</text:span></text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">The following example uses two rules to map a Windows and Unix specific path to the user-defined path variable <text:span text:style-name="Emphasis">MyDocuments</text:span><text:span text:style-name="T14">.</text:span></text:p>
  <text:p text:style-name="Code">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;</text:p>
  <text:p text:style-name="Code">&lt;oor:component-data oor:name=&quot;Substitution&quot; oor:context=&quot;org.openoffice.Office&quot; </text:p>
  <text:p text:style-name="Code">xsi:schemaLocation=&quot;http://openoffice.org/2001/registry component-update.xsd&quot; </text:p>
  <text:p text:style-name="Code">xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema&quot; </text:p>
  <text:p text:style-name="Code">xmlns:oor=&quot;http://openoffice.org/2001/registry&quot; </text:p>
  <text:p text:style-name="Code">xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>&lt;node oor:name=&quot;SharePoints&quot;&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>&lt;node oor:name=&quot;MyDocuments&quot; oor:op=”replace”&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>&lt;node oor:name=&quot;1&quot; oor:op=”replace”&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&lt;prop oor:name=&quot;Directory&quot;&gt;&lt;value&gt;file:///H:/documents&lt;/value&gt;&lt;/prop&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&lt;node oor:name=&quot;Environment&quot;&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="20"/>&lt;prop oor:name=&quot;OS&quot;&gt;&lt;value&gt;Windows&lt;/value&gt;&lt;/prop&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&lt;/node&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>&lt;/node&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>&lt;node oor:name=&quot;2&quot; oor:op=”replace”&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&lt;prop oor:name=&quot;Directory&quot;&gt;&lt;value&gt;file:///net/home/user/documents&lt;/value&gt;&lt;/prop&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&lt;node oor:name=&quot;Environment&quot;&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="20"/>&lt;prop oor:name=&quot;OS&quot;&gt;&lt;value&gt;UNIX&lt;/value&gt;&lt;/prop&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&lt;/node&gt; </text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>&lt;/node&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>&lt;/node&gt;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>&lt;/node&gt;</text:p>
  <text:p text:style-name="Code">&lt;/oor:component-data&gt; </text:p>
  <text:h text:style-name="Head 5" text:level="5">Resolving Path Variables</text:h>
  <text:p text:style-name="Paragraph">This section explains how to use the [PRODUCTNAME] implementation of the path substitution service. The following code snippet creates a path substitution service.</text:p>
  <text:p text:style-name="Code">import com.sun.star.lang.XMultiServiceFactory;</text:p>
  <text:p text:style-name="Code">import com.sun.star.uno.Exception;</text:p>
  <text:p text:style-name="Code">import com.sun.star.uno.XInterface;</text:p>
  <text:p text:style-name="Code">import com.sun.star.util.XStringSubstitution</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">XStringSubstitution createPathSubstitution() {</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>/////////////////////////////////////////////////////////////////////</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Obtain Process Service Manager.</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>/////////////////////////////////////////////////////////////////////</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>XMultiServiceFactory xServiceFactory = ...</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>/////////////////////////////////////////////////////////////////////</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Create Path Substitution. This needs to be done only once per process.</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>/////////////////////////////////////////////////////////////////////</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>XInterface xPathSubst;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>try {</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>xPathSubst = xServiceFactory.createInstance(</text:p>
  <text:p text:style-name="Code"><text:s text:c="11"/>&quot;com.sun.star.util.PathSubstitution&quot; );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>catch (com.sun.star.uno.Exception e) {</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>if (xPathSubst != null)</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>return (XStringSubstitution)UnoRuntime.queryInterface( </text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>XStringSubstitution.class, xPathSubst );</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>else</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>return null;</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">The service is implemented as a one-instance service and supports the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.util.XStringSubstitution]</text:span>. The interface has three methods:</text:p>
  <text:p text:style-name="MethodSignatures"><text:span text:style-name="Code (in text)">string </text:span><text:span text:style-name="MethodSignatureEmphasis">substituteVariables</text:span><text:span text:style-name="Code (in text)">( [in] string aText, [in] boolean bSubstRequired )</text:span></text:p>
  <text:p text:style-name="MethodSignatures"><text:span text:style-name="Code (in text)">string </text:span><text:span text:style-name="MethodSignatureEmphasis">reSubstituteVariables</text:span><text:span text:style-name="Code (in text)">( [in] string aText )</text:span></text:p>
  <text:p text:style-name="MethodSignatures"><text:span text:style-name="Code (in text)">string </text:span><text:span text:style-name="MethodSignatureEmphasis">getSubstituteVariableValue</text:span><text:span text:style-name="Code (in text)">( [in] string variable )</text:span></text:p>
  <text:p text:style-name="Paragraph">The method <text:span text:style-name="Code (in text)">substituteVariables()</text:span> returns a string where all known variables are replaced by their value. Unknown variables are not replaced. The argument <text:span text:style-name="Code (in text)">bSubstRequired</text:span> can be used to indicate that the client needs a full substitution—otherwise the function fails and throws a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.NoSuchElementException]</text:span>. For example: <text:span text:style-name="www/ftp/email">$(inst)/share/autotext/$(vlang)</text:span> could be substituted to <text:span text:style-name="www/ftp/email">file:///c:/OpenOffice.org1.0.2/share/autotext/english</text:span>.</text:p>
  <text:p text:style-name="Paragraph">The method <text:span text:style-name="Code (in text)">reSubstituteVariables()</text:span> returns a string where parts of the provided path <text:span text:style-name="Code (in text)">aText</text:span> are replaced by variables that represent this part of the path. If a matching variable is not found, the path is not modified.</text:p>
  <text:p text:style-name="Paragraph">The predefined variable <text:span text:style-name="Code (in text)">$(path)</text:span> is not used for substitution. Instead, it is a placeholder for the path environment variable does not have a static value during runtime. The path variables <text:span text:style-name="Code (in text)">$(lang)</text:span>, <text:span text:style-name="Code (in text)">$(langid)</text:span> and <text:span text:style-name="Code (in text)">$(vlang)</text:span>, which represent a directory or a filename in a path, only match inside or at the end of a provided path. For example: <text:span text:style-name="www/ftp/email">english</text:span> is not replaced by <text:span text:style-name="www/ftp/email">$(vlang)</text:span>, whereas <text:span text:style-name="www/ftp/email">file:///c:/english</text:span> is replaced by <text:span text:style-name="www/ftp/email">file:///c:/$(vlang)</text:span>.</text:p>
  <text:p text:style-name="Paragraph">The method <text:span text:style-name="Code (in text)">getSubstituteVariableValue()</text:span>returns the current value of the provided path variable as <text:s/>a predefined or a user-defined value. If an unknown variable name is provided, a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.NoSuchElementException]</text:span> is thrown. The argument <text:span text:style-name="Code (in text)">variable</text:span> can be provided with preceding <text:span text:style-name="Code (in text)">&quot;$(&quot;</text:span> and succeeding <text:span text:style-name="Code (in text)">&quot;)&quot;</text:span> or without them. So both <text:span text:style-name="Emphasis">$(work)</text:span> and <text:span text:style-name="Emphasis">work</text:span> can be used.</text:p>
  <text:p text:style-name="Paragraph">This code example shows how to access, substitute, and resubstitute path variables by means of the [PRODUCTNAME] API.</text:p>
  <text:p text:style-name="Code">import com.sun.star.bridge.XUnoUrlResolver;</text:p>
  <text:p text:style-name="Code">import com.sun.star.uno.UnoRuntime;</text:p>
  <text:p text:style-name="Code">import com.sun.star.uno.XComponentContext;</text:p>
  <text:p text:style-name="Code">import com.sun.star.lang.XMultiComponentFactory;</text:p>
  <text:p text:style-name="Code">import com.sun.star.beans.XPropertySet;</text:p>
  <text:p text:style-name="Code">import com.sun.star.beans.PropertyValue;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">import com.sun.star.util.XStringSubstitution;</text:p>
  <text:p text:style-name="Code">import com.sun.star.frame.TerminationVetoException;</text:p>
  <text:p text:style-name="Code">import com.sun.star.frame.XTerminateListener;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">/*</text:p>
  <text:p text:style-name="Code"><text:s/>* Provides example code how to access and use the</text:p>
  <text:p text:style-name="Code"><text:s/>* path substitution sercvice.</text:p>
  <text:p text:style-name="Code"><text:s/>*/</text:p>
  <text:p text:style-name="Code">public class PathSubstitutionTest extends java.lang.Object {</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>/*</text:p>
  <text:p text:style-name="Code"><text:s text:c="5"/>* List of predefined path variables supported by</text:p>
  <text:p text:style-name="Code"><text:s text:c="5"/>* the path substitution service.</text:p>
  <text:p text:style-name="Code"><text:s text:c="5"/>*/</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>private static String[] predefinedPathVariables = {</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>&quot;$(home)&quot;,&quot;$(inst)&quot;,&quot;$(prog)&quot;,&quot;$(temp)&quot;,&quot;$(user)&quot;,</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>&quot;$(work)&quot;,&quot;$(path)&quot;,&quot;$(lang)&quot;,&quot;$(langid)&quot;,&quot;$(vlang)&quot;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>};</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>/*</text:p>
  <text:p text:style-name="Code"><text:s text:c="5"/>* @param args the command line arguments</text:p>
  <text:p text:style-name="Code"><text:s text:c="5"/>*/</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>public static void main(String[] args) {</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>XComponentContext xRemoteContext = null;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>XMultiComponentFactory xRemoteServiceManager = null;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>XStringSubstitution xPathSubstService = null;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>try {</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>// connect</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>XComponentContext xLocalContext =</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(null);</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>XMultiComponentFactory xLocalServiceManager = xLocalContext.getServiceManager();</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>Object urlResolver <text:s/>= xLocalServiceManager.createInstanceWithContext(</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&quot;com.sun.star.bridge.UnoUrlResolver&quot;, xLocalContext );</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>XUnoUrlResolver xUnoUrlResolver = (XUnoUrlResolver) UnoRuntime.queryInterface( </text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>XUnoUrlResolver.class, urlResolver );</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>Object initialObject = xUnoUrlResolver.resolve( </text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&quot;uno:socket,host=localhost,port=2083;urp;StarOffice.ServiceManager&quot; );</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>XPropertySet xPropertySet = (XPropertySet)UnoRuntime.queryInterface(</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>XPropertySet.class, initialObject);</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>Object context = xPropertySet.getPropertyValue(&quot;DefaultContext&quot;); <text:s text:c="11"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>xRemoteContext = (XComponentContext)UnoRuntime.queryInterface(</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>XComponentContext.class, context);</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>xRemoteServiceManager = xRemoteContext.getServiceManager();</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>Object pathSubst = xRemoteServiceManager.createInstanceWithContext(</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>&quot;com.sun.star.comp.framework.PathSubstitution&quot;, xRemoteContext );</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>xPathSubstService = (XStringSubstitution)UnoRuntime.queryInterface(</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>XStringSubstitution.class, pathSubst);</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>/* Work with path variables */</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>workWithPathVariables( xPathSubstService );</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>catch (java.lang.Exception e){</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>e.printStackTrace();</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>finally {</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>System.exit(0);</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>/*</text:p>
  <text:p text:style-name="Code"><text:s text:c="5"/>* Retrieve, resubstitute path variables</text:p>
  <text:p text:style-name="Code"><text:s text:c="5"/>* @param xPathSubstService the path substitution service</text:p>
  <text:p text:style-name="Code"><text:s text:c="5"/>*/</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>public static void workWithPathVariables( XStringSubstitution xPathSubstService )</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>if ( xPathSubstService != null ) {</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>for ( int i=0; i&lt;predefinedPathVariables.length; i++ ) {</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>try {</text:p>
  <text:p text:style-name="Code"><text:s text:c="24"/>/* Retrieve values for predefined path variables */ </text:p>
  <text:p text:style-name="Code"><text:s text:c="24"/>String aPath = xPathSubstService.getSubstituteVariableValue( </text:p>
  <text:p text:style-name="Code"><text:s text:c="44"/>predefinedPathVariables[i] );</text:p>
  <text:p text:style-name="Code"><text:s text:c="24"/>System.out.println( &quot;Variable=&quot;+ predefinedPathVariables[i] + </text:p>
  <text:p text:style-name="Code"><text:s text:c="44"/>&quot; Path=&quot; + aPath );</text:p>
  <text:p text:style-name="Code"><text:s text:c="24"/></text:p>
  <text:p text:style-name="Code"><text:s text:c="24"/>/* Check resubstitute */</text:p>
  <text:p text:style-name="Code"><text:s text:c="24"/>String aValue = xPathSubstService.reSubstituteVariables( aPath );</text:p>
  <text:p text:style-name="Code"><text:s text:c="24"/>System.out.println( &quot;Path=&quot; + aPath +</text:p>
  <text:p text:style-name="Code"><text:s text:c="44"/>&quot; Variable=&quot; + aValue );</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>catch ( com.sun.star.container.NoSuchElementException e) {</text:p>
  <text:p text:style-name="Code"><text:s text:c="20"/>System.out.println( &quot;NoSuchElementExceptio has been thrown accessing&quot;</text:p>
  <text:p text:style-name="Code"><text:s text:c="40"/>+ predefinedPathVariables[i]);</text:p>
  <text:p text:style-name="Code"><text:s text:c="16"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:h text:style-name="Head 3" text:level="3">[PRODUCTNAME] <text:s/><text:alphabetical-index-mark-start text:id="IMark44371628"/>Single Sign-On API<text:alphabetical-index-mark-end text:id="IMark44371628"/></text:h>
  <text:h text:style-name="Head 4" text:level="4">Overview</text:h>
  <text:p text:style-name="Paragraph">Users of a client application that can communicate with a variety of services on a network may need to enter several passwords during a single session to access different services. This situation can be further exacerbated if the client application also requires the user to enter a password each time a particular network service is accessed during a session.</text:p>
  <text:p text:style-name="Paragraph">As most network users must authenticate to an OS at login time, it would make sense to access some of the required network services at this time as well. A solution to this problem is provided by the Single Sign-On (<text:alphabetical-index-mark text:string-value="SSO (Single Sign-On)"/>SSO) methodology, which is the ability to login in once and access several protected network services.</text:p>
  <text:p text:style-name="Paragraph">The best known SSO is the Kerberos network authentication protocol (see <text:alphabetical-index-mark-start text:id="IMark43875748"/><text:a xlink:type="simple" xlink:href="http://www.ietf.org/rfc/rfc1510.txt"><text:span text:style-name="T67">rfc1510</text:span></text:a><text:alphabetical-index-mark-end text:id="IMark43875748"/>). <text:alphabetical-index-mark-start text:id="IMark43887388"/>Kerberos<text:alphabetical-index-mark-end text:id="IMark43887388"/> functionality is commonly accessed through the Generic Security Service Application Program Interface (GSS-API, see <text:alphabetical-index-mark-start text:id="IMark44371628"/><text:a xlink:type="simple" xlink:href="http://www.ietf.org/rfc/rfc2743.txt"><text:span text:style-name="T67">rfc2743</text:span></text:a><text:alphabetical-index-mark-end text:id="IMark44371628"/>). Central to <text:alphabetical-index-mark-start text:id="IMark44271916"/>GSS-API<text:alphabetical-index-mark-end text:id="IMark44271916"/> <text:s/>is the concept of a security context, which is the &quot;state of trust&quot; that is initiated when a client (also known as<text:span text:style-name="T22"> </text:span><text:span text:style-name="Emphasis">source</text:span> or <text:span text:style-name="Emphasis">initiator</text:span>) identifies itself to a network service (also known as <text:span text:style-name="Emphasis">target</text:span> or <text:span text:style-name="Emphasis">acceptor</text:span>). If mutual authentication is supported, then the service can also authenticate itself to the client. To establish a security context, security tokens are exchanged, processed, and verified between the client and the service. The client always initiates this exchange. Once established, a security context can be used to encrypt or decrypt subsequent client-service communications.</text:p>
  <text:p text:style-name="Paragraph">The [PRODUCTNAME] SSO API is based on GSS-API. The SSO API supports the creation of security contexts on the client and the service side as well as the <text:s/>generation of the security tokens that are required for the exchange to complete the security context based authentication. The SSO API does not support the actual exchange of security tokens or the encryption or decryption of client-service communications in an established security context.</text:p>
  <text:p text:style-name="Paragraph">[PRODUCTNAME] implements SSO in two different ways to authenticate with an LDAP server for configuration purposes. The first is Kerberos based and the second is a simple non-standard &quot;cached username/password&quot; SSO. The latter is provided as a fallback to support scenarios where no Kerberos server is available.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Implementing the [PRODUCTNAME] SSO API</text:h>
  <text:p text:style-name="Paragraph">Implementing the [PRODUCTNAME] SSO API involves creating security context instances (see <text:span text:style-name="Code (in text)">XSSOInitiatorContext</text:span> and <text:span text:style-name="Code (in text)">XSSOAcceptorContext</text:span> below) and using these instances to create and process security tokens. All of the [PRODUCTNAME] SSO interfaces are available from the <text:span text:style-name="Code (in text)">::com::sun::star::auth</text:span> namespace. The major interfaces are shown in <text:sequence-ref text:reference-format="category-and-value" text:ref-name="refIllustration22">Illustration 6.23</text:sequence-ref> and described below.</text:p>
  <text:p text:style-name="TitledListHead"><text:alphabetical-index-mark-start text:id="IMark43887388"/>XSSOManagerFactory<text:alphabetical-index-mark-end text:id="IMark43887388"/></text:p>
  <text:p text:style-name="TitledListBody">Represents the starting point for interaction with the SSO API. This interface is responsible for providing <text:span text:style-name="Code (in text)">XSSOManager</text:span> (described below) instances based on the user&apos;s configured security mechanism e.g. &quot;KERBEROS&quot;.</text:p>
  <text:p text:style-name="TitledListHead"><text:alphabetical-index-mark-start text:id="IMark43875748"/>XSSOManager<text:alphabetical-index-mark-end text:id="IMark43875748"/></text:p>
  <text:p text:style-name="TitledListBody">This interface is responsible for the creation of unestablished security contexts for clients (<text:span text:style-name="Code (in text)">XSSOInitiatorContext</text:span>) and services (<text:span text:style-name="Code (in text)">XSSOAcceptorContext</text:span>). An <text:s/><text:span text:style-name="Code (in text)">XSSOManager</text:span> instance &quot;supports&quot; a single security mechanism, that is, the context instances that are created by an <text:span text:style-name="Code (in text)">XSSOManager</text:span> instance only interact with a single security mechanism implementation.</text:p>
  <text:p text:style-name="TitledListHead"><text:alphabetical-index-mark-start text:id="IMark44371628"/>XSSOInitiatorContext<text:alphabetical-index-mark-end text:id="IMark44371628"/></text:p>
  <text:p text:style-name="TitledListBody">This interface represents a client-side security context that is unestablished when it is created. A single method, <text:span text:style-name="T68">init()</text:span>, is provided so that you can <text:s/>create an initial client-side security token that can be delivered to the relevant service and for processing or validating returned service-side security tokens (if mutual authentication is supported). The expected sequence of events for this client-side security context is:</text:p>
  <text:unordered-list text:style-name="L31">
   <text:list-item>
    <text:p text:style-name="P85">The client calls <text:span text:style-name="T68">init()</text:span>, passes NULL as the parameter, receives an appropriate client-side security token in return.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P85">The client sends the security token to the relevant service.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P85">If the service successfully processes this token, the client is authenticated.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P85">If mutual authentication is not supported, the client-side authentication sequence is now complete.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P85">If mutual authentication is supported, the service sends a service-side security token to the client.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P85">The client calls <text:span text:style-name="T68">init() </text:span>a second time and passes the returned service-side security token as a parameter. If the token is successfully passed, the service is authenticated.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="TitledListHead"><text:alphabetical-index-mark-start text:id="IMark44271916"/>XSSOAcceptorContext<text:alphabetical-index-mark-end text:id="IMark44271916"/></text:p>
  <text:p text:style-name="TitledListBody">This interface represents a service-side security context that is not established when it is created. A single method, <text:span text:style-name="T68">accept()</text:span>, is provided and is responsible for processing an initial client-side security token. If mutual authentication is supported, the method also generates a service-side security token for the client. The expected sequence of events for this service-side security context is:</text:p>
  <text:unordered-list text:style-name="L32">
   <text:list-item>
    <text:p text:style-name="P86">The service receives the client-side security token.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P86">The service calls <text:span text:style-name="T68">accept()</text:span>, passes the client-side security token as a <text:s/>parameter, and if successful, the client is authenticated.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P86">If mutual authentication is not supported, the service-side authentication sequence is now complete.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P86">If mutual authentication is supported, <text:span text:style-name="T68">accept()</text:span> returns a non-zero length service-side security token.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P86">The service sends the service-side security token to the client to authenticate the service.</text:p>
   </text:list-item>
  </text:unordered-list>
  <table:table table:name="Tabelle79" table:style-name="Tabelle79">
   <table:table-column table:style-name="Tabelle79.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle79.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr2" draw:name="Rahmen17" text:anchor-type="paragraph" svg:width="12.815cm" style:rel-width="83%" fo:min-height="13.501cm" draw:z-index="87">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr10" draw:name="UML diagram of the single sign on interfaces" text:anchor-type="paragraph" svg:x="0.004cm" svg:y="0.002cm" svg:width="9.73cm" svg:height="18.159cm" draw:z-index="88" xlink:href="SSOManagerFactory.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>UML diagram showing the relations of the single sign on interfaces</svg:desc>
         </draw:image>Illustration <text:sequence text:ref-name="refIllustration22" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">6.23</text:sequence>: Major Interfaces of the [PRODUCTNAME] SSO</text:p>
       </draw:text-box></text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The following example is a sample usage of the [PRODUCTNAME] SSO API that <text:s/>provides the <text:span text:style-name="T68">authenticate()</text:span> method of the fictitious client--side <text:span text:style-name="T68">MySSO</text:span> class. For simplicity, assume that <text:span text:style-name="Code (in text)">MySSO</text:span> has the following members:</text:p>
  <text:unordered-list text:style-name="L33">
   <text:list-item>
    <text:p text:style-name="P87"><text:span text:style-name="Code (in text)">mSourceName</text:span> identifies a client-side user that needs to authenticate to a network service.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P87"><text:span text:style-name="Code (in text)">mTargetName</text:span> identifies the service to which the user needs to authenticate.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P87"><text:span text:style-name="Code (in text)">mTargetHost</text:span> identifies the network host where the service of interest is running.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Code">namespace auth<text:tab-stop/>= ::com::sun::star::auth;</text:p>
  <text:p text:style-name="Code">namespace lang<text:tab-stop/>= ::com::sun::star::lang;</text:p>
  <text:p text:style-name="Code">namespace uno<text:tab-stop/>= ::com::sun::star::uno;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">void MySSO::authenticate(void) {</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>static const rtl::OUString kSSOService( </text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>RTL_CONSTASCII_USTRINGPARAM(&quot;com.sun.star.auth.SSOManagerFactory&quot;));<text:line-break/></text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>uno::Reference&lt; lang::XMultiServiceFactory &gt; theServiceFactory =</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>::comphelper::getProcessServiceFactory();</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Create an SSO Manager Factory.</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>uno::Reference&lt; auth::XSSOManagerFactory &gt; theSSOFactory(</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>theServiceFactory-&gt;createInstance(kSSOService), uno::UNO_QUERY);</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>if (!theSSOFactory.is()) {</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>throw;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Ask the SSO Manager Factory for an SSO Manager.</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>uno::Reference&lt;auth::XSSOManager&gt; theSSOManager =</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>theSSOFactory-&gt;getSSOManager();</text:p>
  <text:p text:style-name="Code"><text:span text:style-name="T69"><text:s text:c="3"/></text:span>if (!theSSOManager.is()) {</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>throw;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Ask the SSO Manager to create an unestablished client/initiator side </text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>// security context based on user name, service name and service host.</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>uno::Reference&lt;auth::XSSOInitiatorContext&gt; theInitiatorContext =</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>theSSOManager-&gt;createInitiatorContext(mSourceName, mTargetName, mTargetHost);</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// Now create the client side security token to send to the service.</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>uno::Sequence&lt;sal_Int8&gt; theClientToken = theInitiatorContext-&gt;init(NULL);</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="4"/>// The client should now send &apos;theClientToken&apos; to the service.</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>// If mutual authentication is supported, the service will return a service</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>// side security token.</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>uno::Sequence&lt;sal_Int8&gt; theServerToken = <text:span text:style-name="T22">sendToken(theClientToken);</text:span></text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>if (theInitiatorContext-&gt;getMutual()) {</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>theInitiatorContext-&gt;init(theServerToken);</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:h text:style-name="Head 5" text:level="5">The <text:alphabetical-index-mark text:string-value="SSO password cache"/>SSO <text:alphabetical-index-mark text:string-value="password cache"/>Password Cache</text:h>
  <text:p text:style-name="Paragraph">When you implement the SSO API, you may require access to user passwords, especially if you are relying on a preexisting underlying security mechanism. If you do not know how to gain such access, you can use the [PRODUCTNAME] SSO password cache. This cache provides basic support for maintaining a list of user name or password entries. Individual entries have a default lifetime corresponding to a single user session, but can optionally exist for multiple sessions. Support is provided for adding, retrieving, and deleting cache entries. Only one entry per user name can exist in the cache at any time. If you add an entry for an existing user name, the new entry replaces the original entry.<text:line-break/><text:line-break/>The SSO password cache is represented by a single interface, namely the <text:span text:style-name="Code (in text)">XSSOPasswordCache</text:span> interface, available in the <text:span text:style-name="Code (in text)">::com::sun::star::auth</text:span> namespace.</text:p>
 </office:body>
</office:document>