xref: /trunk/main/helpauthoring/HelpAuthoring/Validate.xba (revision 4cb6727860852da919b3299f69ec1928beb0272d)
11ecadb57SMathias Bauer<?xml version="1.0" encoding="UTF-8"?>
21ecadb57SMathias Bauer<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
33e02b54dSAndrew Rist<!--***********************************************************
43e02b54dSAndrew Rist *
53e02b54dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
63e02b54dSAndrew Rist * or more contributor license agreements.  See the NOTICE file
73e02b54dSAndrew Rist * distributed with this work for additional information
83e02b54dSAndrew Rist * regarding copyright ownership.  The ASF licenses this file
93e02b54dSAndrew Rist * to you under the Apache License, Version 2.0 (the
103e02b54dSAndrew Rist * "License"); you may not use this file except in compliance
113e02b54dSAndrew Rist * with the License.  You may obtain a copy of the License at
123e02b54dSAndrew Rist *
133e02b54dSAndrew Rist *   http://www.apache.org/licenses/LICENSE-2.0
143e02b54dSAndrew Rist *
153e02b54dSAndrew Rist * Unless required by applicable law or agreed to in writing,
163e02b54dSAndrew Rist * software distributed under the License is distributed on an
173e02b54dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
183e02b54dSAndrew Rist * KIND, either express or implied.  See the License for the
193e02b54dSAndrew Rist * specific language governing permissions and limitations
203e02b54dSAndrew Rist * under the License.
213e02b54dSAndrew Rist *
223e02b54dSAndrew Rist ***********************************************************-->
231ecadb57SMathias Bauer<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Validate" script:language="StarBasic">
241ecadb57SMathias Bauer&apos;############################################
251ecadb57SMathias Bauer&apos;  VALIDATION ROUTINES
261ecadb57SMathias Bauer&apos;############################################
271ecadb57SMathias Bauer
281ecadb57SMathias BauerDim sSwitchType As String
291ecadb57SMathias BauerDim sCellSwitchType As String
301ecadb57SMathias BauerDim sCaseType As String
311ecadb57SMathias BauerDim sCellCaseType As String
321ecadb57SMathias BauerDim sDefaultType As String
331ecadb57SMathias BauerDim sCellDefaultType As String
341ecadb57SMathias BauerDim bDefaultSet As Boolean
351ecadb57SMathias BauerDim bCellDefaultSet As Boolean
361ecadb57SMathias BauerDim bCaseSet As Boolean
371ecadb57SMathias BauerDim bCellCaseSet As Boolean
381ecadb57SMathias BauerDim aTagsOpen(0) As String
391ecadb57SMathias BauerDim aCellTagsOpen(0) As String
401ecadb57SMathias BauerDim bWarn As Boolean
411ecadb57SMathias BauerDim bWarnEmptyPara As Boolean
421ecadb57SMathias BauerDim bWarnParaNoID As Boolean
431ecadb57SMathias Bauer
441ecadb57SMathias Bauer
451ecadb57SMathias BauerSub ValidateXHP
461ecadb57SMathias Bauer    Validate
471ecadb57SMathias BauerEnd Sub
481ecadb57SMathias Bauer
491ecadb57SMathias BauerSub Validate
501ecadb57SMathias Bauer
511ecadb57SMathias Bauer    If not IsHelpFile Then
521ecadb57SMathias Bauer        msgbox(strErr_NoHelpFile)
531ecadb57SMathias Bauer        Exit Sub
541ecadb57SMathias Bauer    End If
551ecadb57SMathias Bauer
561ecadb57SMathias Bauer    oDoc = StarDesktop.CurrentComponent
571ecadb57SMathias Bauer    sSwitchType = &quot;&quot;
581ecadb57SMathias Bauer    sCaseType = &quot;&quot;
591ecadb57SMathias Bauer    sDefaultType = &quot;&quot;
601ecadb57SMathias Bauer    bWarn = TRUE
611ecadb57SMathias Bauer    bWarnEmptyPara = TRUE
621ecadb57SMathias Bauer    bWarnParaNoID = TRUE
631ecadb57SMathias Bauer
641ecadb57SMathias Bauer    CheckMetaData(oDoc)
651ecadb57SMathias Bauer    CheckHeading(oDoc)
661ecadb57SMathias Bauer
671ecadb57SMathias Bauer    Enum = oDoc.Text.createEnumeration
681ecadb57SMathias Bauer    Do While Enum.hasMoreElements
691ecadb57SMathias Bauer
701ecadb57SMathias Bauer        TextElement = Enum.nextElement
711ecadb57SMathias Bauer        If TextElement.supportsService(&quot;com.sun.star.text.Paragraph&quot;) Then        &apos; we are a paragraph
721ecadb57SMathias Bauer
731ecadb57SMathias Bauer            CheckSwitches(TextElement)
741ecadb57SMathias Bauer            CheckParaID(TextElement)
751ecadb57SMathias Bauer            CheckParaFormat(TextElement)
761ecadb57SMathias Bauer            CheckTags(TextElement)
771ecadb57SMathias Bauer            CheckInlineTags(TextElement)
781ecadb57SMathias Bauer
791ecadb57SMathias Bauer        ElseIf  TextElement.supportsService(&quot;com.sun.star.text.TextTable&quot;) Then
801ecadb57SMathias Bauer
811ecadb57SMathias Bauer            If sSwitchType &lt;&gt; &quot;&quot; AND (sCaseType = &quot;&quot; AND sDefaultType = &quot;&quot;) Then &apos;&lt;------
821ecadb57SMathias Bauer                Terminate(&quot;Switch must be closed or case/default must be opened before a table starts.&quot;,tmpCellElement)
831ecadb57SMathias Bauer            End If
841ecadb57SMathias Bauer
851ecadb57SMathias Bauer            CheckCell(TextElement)
861ecadb57SMathias Bauer        End If
871ecadb57SMathias Bauer    Loop
881ecadb57SMathias Bauer
891ecadb57SMathias Bauer    If sCaseType &lt;&gt; &quot;&quot; Then
901ecadb57SMathias Bauer        Terminate(&quot;Previous case (&quot;+sCaseType+&quot;) not closed!&quot;,TextElement)
911ecadb57SMathias Bauer    End If
921ecadb57SMathias Bauer
931ecadb57SMathias Bauer    If sDefaultType &lt;&gt; &quot;&quot; Then
941ecadb57SMathias Bauer        Terminate(&quot;Previous default not closed!&quot;,TextElement)
951ecadb57SMathias Bauer    End If
961ecadb57SMathias Bauer
971ecadb57SMathias Bauer    If sSwitchType &lt;&gt; &quot;&quot; Then
981ecadb57SMathias Bauer        Terminate(&quot;Previous switch (&quot;+sSwitchType+&quot;) not closed!&quot;,TextElement)
991ecadb57SMathias Bauer    End If
1001ecadb57SMathias Bauer
1011ecadb57SMathias Bauer    If ubound(aTagsOpen()) &gt; 0 Then
1021ecadb57SMathias Bauer        Terminate(&quot;Element &quot;+aTagsOpen(ubound(aTagsOpen()))+&quot; not closed&quot;,TextElement)
1031ecadb57SMathias Bauer    End If
1041ecadb57SMathias Bauer
1051ecadb57SMathias Bauer    msgbox(&quot;Validation finished.&quot;)
1061ecadb57SMathias Bauer
1071ecadb57SMathias BauerEnd Sub
1081ecadb57SMathias Bauer
1091ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1101ecadb57SMathias Bauer&apos; CHECKCELL
1111ecadb57SMathias Bauer&apos; checks a table cell contents
1121ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1131ecadb57SMathias Bauer
1141ecadb57SMathias BauerSub CheckCell(TE As Object)
1151ecadb57SMathias Bauer    On Local Error Goto ERRHANDLE:
1161ecadb57SMathias Bauer
1171ecadb57SMathias Bauer    CellName = &quot;A1&quot;
1181ecadb57SMathias Bauer    Cell = TE.getCellByName(CellName)
1191ecadb57SMathias Bauer    tmpCellEnum = Cell.createEnumeration
1201ecadb57SMathias Bauer    tmpCellElement = tmpCellEnum.nextElement
1211ecadb57SMathias Bauer
1221ecadb57SMathias Bauer    Rows = TE.getRows
1231ecadb57SMathias Bauer    Cols = TE.getColumns
1241ecadb57SMathias Bauer
1251ecadb57SMathias Bauer    ReDim aCellTagsOpen(0)
1261ecadb57SMathias Bauer
1271ecadb57SMathias Bauer    For RowIndex = 1 to Rows.getCount()
1281ecadb57SMathias Bauer
1291ecadb57SMathias Bauer        For ColIndex = 1 to Cols.getCount()
1301ecadb57SMathias Bauer
1311ecadb57SMathias Bauer            CellName = Chr(64 + ColIndex) &amp; RowIndex
1321ecadb57SMathias Bauer            Cell = TE.getCellByName(CellName)
1331ecadb57SMathias Bauer            CellEnum = Cell.createEnumeration
1341ecadb57SMathias Bauer
1351ecadb57SMathias Bauer            Do While CellEnum.hasMoreElements
1361ecadb57SMathias Bauer
1371ecadb57SMathias Bauer                CellElement = CellEnum.nextElement      &apos; &lt;-- MODIFY, check closed switches within cells
1381ecadb57SMathias Bauer
1391ecadb57SMathias Bauer                If CellElement.supportsService(&quot;com.sun.star.text.Paragraph&quot;) Then
1401ecadb57SMathias Bauer                    CheckSwitchesInCell(CellElement)
1411ecadb57SMathias Bauer                    CheckParaID(CellElement)
1421ecadb57SMathias Bauer                    CheckParaFormat(CellElement)
1431ecadb57SMathias Bauer                    CheckTagsInCell(CellElement)
1441ecadb57SMathias Bauer                    CheckInlineTags(CellElement)
1451ecadb57SMathias Bauer                EndIf
1461ecadb57SMathias Bauer
1471ecadb57SMathias Bauer            Loop
1481ecadb57SMathias Bauer
1491ecadb57SMathias Bauer            If sCellCaseType &lt;&gt; &quot;&quot; Then
1501ecadb57SMathias Bauer                Terminate(&quot;Previous case (&quot;+sCellCaseType+&quot;) not closed!&quot;,CellElement)
1511ecadb57SMathias Bauer            End If
1521ecadb57SMathias Bauer
1531ecadb57SMathias Bauer            If sCellSwitchType &lt;&gt; &quot;&quot; Then
1541ecadb57SMathias Bauer                Terminate(&quot;Previous switch (&quot;+sCellSwitchType+&quot;) not closed!&quot;,CellElement)
1551ecadb57SMathias Bauer            End If
1561ecadb57SMathias Bauer
1571ecadb57SMathias Bauer            If ubound(aCellTagsOpen()) &gt; 0 Then
1581ecadb57SMathias Bauer                Terminate(&quot;Element &quot;+aCellTagsOpen(ubound(aCellTagsOpen()))+&quot; not closed&quot;,CellElement)
1591ecadb57SMathias Bauer            End If
1601ecadb57SMathias Bauer
1611ecadb57SMathias Bauer        Next
1621ecadb57SMathias Bauer    Next
1631ecadb57SMathias Bauer
1641ecadb57SMathias Bauer    ERRHANDLE:
1651ecadb57SMathias Bauer        If Err &lt;&gt; 0 Then
1661ecadb57SMathias Bauer            msgbox &quot;Error: &quot;+chr(13)+ Error$,48,&quot;D&apos;oh!&quot;
1671ecadb57SMathias Bauer        End If
1681ecadb57SMathias BauerEnd Sub
1691ecadb57SMathias Bauer
1701ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1711ecadb57SMathias Bauer&apos; CHECK PARA ID
1721ecadb57SMathias Bauer&apos; checks a paragraph for an ID
1731ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1741ecadb57SMathias Bauer
1751ecadb57SMathias BauerSub CheckParaID(TE As Object)
1761ecadb57SMathias Bauer
1771ecadb57SMathias Bauer    If Left(TE.ParaStyleName,4) = &quot;hlp_&quot; AND Not(Left(TE.ParaStyleName,8) = &quot;hlp_aux_&quot;) Then
1781ecadb57SMathias Bauer
1791ecadb57SMathias Bauer        sText = TE.GetString
1801ecadb57SMathias Bauer
1811ecadb57SMathias Bauer        If sText = &quot;&quot; Then
1821ecadb57SMathias Bauer            If bWarnEmptyPara Then
1831ecadb57SMathias Bauer                Warn(&quot;Empty Paragraph&quot;,&quot;Empty paragraphs should be avoided. Do not use empty paragraphs for formatting purpose.&quot;,TE)
1841ecadb57SMathias Bauer                bWarnEmptyPara = FALSE
1851ecadb57SMathias Bauer            End If
1861ecadb57SMathias Bauer        Else
1871ecadb57SMathias Bauer
1881ecadb57SMathias Bauer            TP = TE.createEnumeration
1891ecadb57SMathias Bauer            Ct = 0
1901ecadb57SMathias Bauer            posID = 0
1911ecadb57SMathias Bauer
1921ecadb57SMathias Bauer            While TP.hasmoreElements
1931ecadb57SMathias Bauer                Ct = Ct+1
1941ecadb57SMathias Bauer                TPE = TP.nextElement
1951ecadb57SMathias Bauer                If TPE.TextPortionType=&quot;TextField&quot; Then
1961ecadb57SMathias Bauer                    If TPE.TextField.TextFieldMaster.Name=&quot;ID&quot; Then
1971ecadb57SMathias Bauer                        posID = Ct
1981ecadb57SMathias Bauer                    End If
1991ecadb57SMathias Bauer                End If
2001ecadb57SMathias Bauer                &apos; Lets cheat and allow empty strings before the ID -- otherwise we&apos;ll get
2011ecadb57SMathias Bauer                &apos; a validation error if a paragraph starts at the top of a page after
2021ecadb57SMathias Bauer                &apos; a page break (for whatever reason)
2031ecadb57SMathias Bauer                If TPE.String = &quot;&quot; Then
2041ecadb57SMathias Bauer                    Ct = Ct-1
2051ecadb57SMathias Bauer                End If
2061ecadb57SMathias Bauer            Wend
2071ecadb57SMathias Bauer
2081ecadb57SMathias Bauer            If posID = 0 Then
2091ecadb57SMathias Bauer                If bWarnParaNoID Then
210*4cb67278Smseidel                    Warn(&quot;Paragraph has no id.&quot;,&quot;IDs will be assigned on save. You can also assign an ID using the Assign Paragraph ID menu item&quot;,TPE)
2111ecadb57SMathias Bauer                    bWarnParaNoID = FALSE
2121ecadb57SMathias Bauer                    InsertNewParaData
2131ecadb57SMathias Bauer                Else
2141ecadb57SMathias Bauer                    oCur = TE.getText.createTextCursorByRange(TE)
2151ecadb57SMathias Bauer                    thiscomponent.getcurrentcontroller.select(oCur)
2161ecadb57SMathias Bauer                    InsertNewParaData
2171ecadb57SMathias Bauer                End If
2181ecadb57SMathias Bauer            ElseIf posID &gt; 1 Then
2191ecadb57SMathias Bauer                Terminate(&quot;Paragraph ID not at the start of the paragraph. The paragraph ID must be the first element of a paragraph. Move the ID to the beginning of the paragraph&quot;,TPE)
2201ecadb57SMathias Bauer            End If
2211ecadb57SMathias Bauer
2221ecadb57SMathias Bauer        End If
2231ecadb57SMathias Bauer
2241ecadb57SMathias Bauer    End If
2251ecadb57SMathias BauerEnd Sub
2261ecadb57SMathias Bauer
2271ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2281ecadb57SMathias Bauer&apos; CHECK PARA FORMAT
2291ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2301ecadb57SMathias BauerSub CheckParaFormat(TE As Object)
2311ecadb57SMathias Bauer
2321ecadb57SMathias Bauer    sText = TE.GetString
2331ecadb57SMathias Bauer    If Left(TE.ParaStyleName,4) &lt;&gt; &quot;hlp_&quot; AND sText &lt;&gt; &quot;&quot; Then    &apos; just disregard empty paras in wrong formats
2341ecadb57SMathias Bauer        Warn(&quot;Invalid paragraph format. Contents will be lost.&quot;,_
2351ecadb57SMathias Bauer             &quot;Use only the paragraph styles starting with &quot;&quot;hlp_&quot;&quot;.&quot;+_
2361ecadb57SMathias Bauer             &quot; Paragraphs in other formats will be lost on export&quot;,TE)
2371ecadb57SMathias Bauer    End If
2381ecadb57SMathias Bauer
2391ecadb57SMathias BauerEnd Sub
2401ecadb57SMathias Bauer
2411ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2421ecadb57SMathias Bauer&apos; CHECK SWITCHES
2431ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2441ecadb57SMathias BauerSub CheckSwitches(TE As Object)
2451ecadb57SMathias Bauer
2461ecadb57SMathias Bauer    If TE.ParaStyleName=&quot;hlp_aux_switch&quot; Then                 &apos; we are a switch or case or default
2471ecadb57SMathias Bauer        sText = TE.GetString                                    &apos; get the switch contents
2481ecadb57SMathias Bauer
2491ecadb57SMathias Bauer        If Left(sText,8) = &quot;&lt;SWITCH &quot; Then                             &apos; an opening switch tag
2501ecadb57SMathias Bauer
2511ecadb57SMathias Bauer            If sSwitchType = &quot;&quot; Then                                  &apos; no other switch is open
2521ecadb57SMathias Bauer                sSwitchType = Right(sText,Len(sText)-16)
2531ecadb57SMathias Bauer                sSwitchType = Left(sSwitchType,InStr(sSwitchType,&quot;&quot;&quot;&quot;)-1)
2541ecadb57SMathias Bauer
2551ecadb57SMathias Bauer                If (sSwitchType &lt;&gt; &quot;sys&quot; AND sSwitchType &lt;&gt; &quot;appl&quot; AND sSwitchType &lt;&gt; &quot;distrib&quot;) Then
2561ecadb57SMathias Bauer                    Terminate(&quot;Unknown switch type &quot;&quot;&quot;+sSwitchType+&quot;&quot;&quot;&quot;,TE)
2571ecadb57SMathias Bauer                End If
2581ecadb57SMathias Bauer
2591ecadb57SMathias Bauer            Else
2601ecadb57SMathias Bauer                Terminate(&quot;Previous switch (&quot;+sSwitchType+&quot;) not closed!&quot;,TE)
2611ecadb57SMathias Bauer            End If
2621ecadb57SMathias Bauer
2631ecadb57SMathias Bauer        End If  &apos; OPENING SWITCH
2641ecadb57SMathias Bauer
2651ecadb57SMathias Bauer        If Left(sText,8) = &quot;&lt;/SWITCH&quot; Then                             &apos; a closing switch tag
2661ecadb57SMathias Bauer
2671ecadb57SMathias Bauer            If sSwitchType = &quot;&quot; Then                                  &apos; there was no switch open
2681ecadb57SMathias Bauer                Terminate(&quot;No switch open!&quot;,TE)
2691ecadb57SMathias Bauer            Else
2701ecadb57SMathias Bauer                If not(bCaseSet OR bDefaultSet) Then
2711ecadb57SMathias Bauer                    Terminate(&quot;Empty switch&quot;,TE)
2721ecadb57SMathias Bauer                End If
2731ecadb57SMathias Bauer
2741ecadb57SMathias Bauer                If sCaseType &lt;&gt; &quot;&quot; Then                                 &apos; there is still a case open
2751ecadb57SMathias Bauer                    Terminate(&quot;Previous case (&quot;+sCaseType+&quot;) not closed!&quot;,TE)
2761ecadb57SMathias Bauer                End If
2771ecadb57SMathias Bauer                sSwitchType = &quot;&quot;
2781ecadb57SMathias Bauer                bDefaultSet = FALSE
2791ecadb57SMathias Bauer                bCaseSet = FALSE
2801ecadb57SMathias Bauer            End If
2811ecadb57SMathias Bauer
2821ecadb57SMathias Bauer        End If  &apos; CLOSING SWITCH
2831ecadb57SMathias Bauer
2841ecadb57SMathias Bauer        If Left(sText,6) = &quot;&lt;CASE &quot; Then                               &apos; an opening case tag
2851ecadb57SMathias Bauer
2861ecadb57SMathias Bauer            If bDefaultSet Then
2871ecadb57SMathias Bauer                Terminate(&quot;No case after default allowed.&quot;,TE)
2881ecadb57SMathias Bauer            End If
2891ecadb57SMathias Bauer
2901ecadb57SMathias Bauer            If sCaseType = &quot;&quot; Then
2911ecadb57SMathias Bauer                sCaseType = Right(sText,Len(sText)-14)
2921ecadb57SMathias Bauer                sCaseType = Left(sCaseType,InStr(sCaseType,&quot;&quot;&quot;&quot;)-1)
2931ecadb57SMathias Bauer                bCaseSet = TRUE
2941ecadb57SMathias Bauer                If sSwitchType = &quot;&quot; Then
2951ecadb57SMathias Bauer                    Terminate(&quot;Case without switch&quot;,TE)
2961ecadb57SMathias Bauer                End If
2971ecadb57SMathias Bauer            Else
2981ecadb57SMathias Bauer                Terminate(&quot;Previous case (&quot;+sCaseType+&quot;) not closed!&quot;,TE)
2991ecadb57SMathias Bauer            End If
3001ecadb57SMathias Bauer
3011ecadb57SMathias Bauer        End If  &apos; OPENING CASE
3021ecadb57SMathias Bauer
3031ecadb57SMathias Bauer        If Left(sText,6) = &quot;&lt;/CASE&quot; Then                               &apos; a closing case tag
3041ecadb57SMathias Bauer
3051ecadb57SMathias Bauer            If sCaseType = &quot;&quot; Then
3061ecadb57SMathias Bauer                Terminate(&quot;No case open!&quot;,TE)
3071ecadb57SMathias Bauer            Else
3081ecadb57SMathias Bauer                sCaseType = &quot;&quot;
3091ecadb57SMathias Bauer            End If
3101ecadb57SMathias Bauer
3111ecadb57SMathias Bauer        End If  &apos; CLOSING  CASE
3121ecadb57SMathias Bauer
3131ecadb57SMathias Bauer        If Left(sText,8) = &quot;&lt;DEFAULT&quot; Then                             &apos; an opening default tag
3141ecadb57SMathias Bauer
3151ecadb57SMathias Bauer            If sCaseType = &quot;&quot; Then
3161ecadb57SMathias Bauer                If (sDefaultType &lt;&gt; &quot;&quot; OR bDefaultSet) Then
3171ecadb57SMathias Bauer                    Terminate(&quot;Multiple default not allowed.&quot;,TE)
3181ecadb57SMathias Bauer                Else
3191ecadb57SMathias Bauer                    sDefaultType = &quot;DEFAULT&quot;
3201ecadb57SMathias Bauer
3211ecadb57SMathias Bauer                    If sSwitchType = &quot;&quot; Then
3221ecadb57SMathias Bauer                        Terminate(&quot;Default without switch&quot;,TE)
3231ecadb57SMathias Bauer                    End If
3241ecadb57SMathias Bauer                End If
3251ecadb57SMathias Bauer                sDefaultType = &quot;DEFAULT&quot;
3261ecadb57SMathias Bauer                bDefaultSet = TRUE
3271ecadb57SMathias Bauer            Else
3281ecadb57SMathias Bauer                Terminate(&quot;Previous case (&quot;+sCaseType+&quot;) not closed!&quot;,TE)
3291ecadb57SMathias Bauer            End If
3301ecadb57SMathias Bauer
3311ecadb57SMathias Bauer        End If  &apos; OPENING CASE
3321ecadb57SMathias Bauer
3331ecadb57SMathias Bauer        If Left(sText,9) = &quot;&lt;/DEFAULT&quot; Then                                &apos; a closing default tag
3341ecadb57SMathias Bauer
3351ecadb57SMathias Bauer            If sDefaultType &lt;&gt; &quot;DEFAULT&quot; Then
3361ecadb57SMathias Bauer                Terminate(&quot;No default open!&quot;,TE)
3371ecadb57SMathias Bauer            Else
3381ecadb57SMathias Bauer                sDefaultType = &quot;&quot;
3391ecadb57SMathias Bauer            End If
3401ecadb57SMathias Bauer
3411ecadb57SMathias Bauer        End If  &apos; CLOSING  CASE
3421ecadb57SMathias Bauer    Else  &apos; We are not hlp_aux_switch
3431ecadb57SMathias Bauer        If (sSwitchType &lt;&gt; &quot;&quot; AND sCaseType = &quot;&quot; AND sDefaultType = &quot;&quot;) Then
3441ecadb57SMathias Bauer            Terminate(&quot;Nothing allowed between switch and case or default or /case or /default and /switch&quot;, TE)
3451ecadb57SMathias Bauer        End If
3461ecadb57SMathias Bauer    End If
3471ecadb57SMathias Bauer
3481ecadb57SMathias BauerEnd Sub
3491ecadb57SMathias Bauer
3501ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3511ecadb57SMathias Bauer&apos; CHECK SWITCHES IN A CELL
3521ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3531ecadb57SMathias BauerSub CheckSwitchesInCell(CE As Object)
3541ecadb57SMathias Bauer
3551ecadb57SMathias Bauer    If CE.ParaStyleName=&quot;hlp_aux_switch&quot; Then                 &apos; we are a switch or case or default
3561ecadb57SMathias Bauer        sText = CE.GetString                                    &apos; get the switch contents
3571ecadb57SMathias Bauer
3581ecadb57SMathias Bauer        If Left(sText,8) = &quot;&lt;SWITCH &quot; Then                             &apos; an opening switch tag
3591ecadb57SMathias Bauer
3601ecadb57SMathias Bauer            If sCellSwitchType = &quot;&quot; Then                                  &apos; no other switch is open
3611ecadb57SMathias Bauer                sCellSwitchType = Right(sText,Len(sText)-16)
3621ecadb57SMathias Bauer                sCellSwitchType = Left(sCellSwitchType,InStr(sCellSwitchType,&quot;&quot;&quot;&quot;)-1)
3631ecadb57SMathias Bauer
3641ecadb57SMathias Bauer                If (sCellSwitchType &lt;&gt; &quot;sys&quot; AND sCellSwitchType &lt;&gt; &quot;appl&quot; AND sCellSwitchType &lt;&gt; &quot;distrib&quot;) Then
3651ecadb57SMathias Bauer                    Terminate(&quot;Unknown switch type &quot;&quot;&quot;+sCellSwitchType+&quot;&quot;&quot;&quot;,CE)
3661ecadb57SMathias Bauer                End If
3671ecadb57SMathias Bauer
3681ecadb57SMathias Bauer            Else
3691ecadb57SMathias Bauer                Terminate(&quot;Previous switch (&quot;+sCellSwitchType+&quot;) not closed!&quot;,CE)
3701ecadb57SMathias Bauer            End If
3711ecadb57SMathias Bauer
3721ecadb57SMathias Bauer        End If  &apos; OPENING SWITCH
3731ecadb57SMathias Bauer
3741ecadb57SMathias Bauer        If Left(sText,8) = &quot;&lt;/SWITCH&quot; Then                             &apos; a closing switch tag
3751ecadb57SMathias Bauer
3761ecadb57SMathias Bauer            If sCellSwitchType = &quot;&quot; Then                                  &apos; there was no switch open
3771ecadb57SMathias Bauer                Terminate(&quot;No switch open!&quot;,CE)
3781ecadb57SMathias Bauer            Else
3791ecadb57SMathias Bauer                If not(bCellCaseSet OR bCellDefaultSet) Then
3801ecadb57SMathias Bauer                    Terminate(&quot;Empty switch&quot;,CE)
3811ecadb57SMathias Bauer                End If
3821ecadb57SMathias Bauer
3831ecadb57SMathias Bauer                If sCellCaseType &lt;&gt; &quot;&quot; Then                                 &apos; there is still a case open
3841ecadb57SMathias Bauer                    Terminate(&quot;Previous case (&quot;+sCellCaseType+&quot;) not closed!&quot;,CE)
3851ecadb57SMathias Bauer                End If
3861ecadb57SMathias Bauer                sCellSwitchType = &quot;&quot;
3871ecadb57SMathias Bauer                bCellDefaultSet = FALSE
3881ecadb57SMathias Bauer                bCellCaseSet = FALSE
3891ecadb57SMathias Bauer            End If
3901ecadb57SMathias Bauer
3911ecadb57SMathias Bauer        End If  &apos; CLOSING SWITCH
3921ecadb57SMathias Bauer
3931ecadb57SMathias Bauer        If Left(sText,6) = &quot;&lt;CASE &quot; Then                               &apos; an opening case tag
3941ecadb57SMathias Bauer
3951ecadb57SMathias Bauer            If bCellDefaultSet Then
3961ecadb57SMathias Bauer                Terminate(&quot;No case after default allowed.&quot;,CE)
3971ecadb57SMathias Bauer            End If
3981ecadb57SMathias Bauer
3991ecadb57SMathias Bauer            If sCellCaseType = &quot;&quot; Then
4001ecadb57SMathias Bauer                sCellCaseType = Right(sText,Len(sText)-14)
4011ecadb57SMathias Bauer                sCellCaseType = Left(sCellCaseType,InStr(sCellCaseType,&quot;&quot;&quot;&quot;)-1)
4021ecadb57SMathias Bauer                bCellCaseSet = TRUE
4031ecadb57SMathias Bauer                If sCellSwitchType = &quot;&quot; Then
4041ecadb57SMathias Bauer                    Terminate(&quot;Case without switch&quot;,CE)
4051ecadb57SMathias Bauer                End If
4061ecadb57SMathias Bauer            Else
4071ecadb57SMathias Bauer                Terminate(&quot;Previous case (&quot;+sCellCaseType+&quot;) not closed!&quot;,CE)
4081ecadb57SMathias Bauer            End If
4091ecadb57SMathias Bauer
4101ecadb57SMathias Bauer        End If  &apos; OPENING CASE
4111ecadb57SMathias Bauer
4121ecadb57SMathias Bauer        If Left(sText,6) = &quot;&lt;/CASE&quot; Then                               &apos; a closing case tag
4131ecadb57SMathias Bauer
4141ecadb57SMathias Bauer            If sCellCaseType = &quot;&quot; Then
4151ecadb57SMathias Bauer                Terminate(&quot;No case open!&quot;,CE)
4161ecadb57SMathias Bauer            Else
4171ecadb57SMathias Bauer                sCellCaseType = &quot;&quot;
4181ecadb57SMathias Bauer            End If
4191ecadb57SMathias Bauer
4201ecadb57SMathias Bauer        End If  &apos; CLOSING  CASE
4211ecadb57SMathias Bauer
4221ecadb57SMathias Bauer        If Left(sText,8) = &quot;&lt;DEFAULT&quot; Then                             &apos; an opening default tag
4231ecadb57SMathias Bauer
4241ecadb57SMathias Bauer            If sCellCaseType = &quot;&quot; Then
4251ecadb57SMathias Bauer                If (sCellDefaultType &lt;&gt; &quot;&quot; OR bCellDefaultSet) Then
4261ecadb57SMathias Bauer                    Terminate(&quot;Multiple default not allowed.&quot;,CE)
4271ecadb57SMathias Bauer                Else
4281ecadb57SMathias Bauer                    sCellDefaultType = &quot;DEFAULT&quot;
4291ecadb57SMathias Bauer
4301ecadb57SMathias Bauer                    If sCellSwitchType = &quot;&quot; Then
4311ecadb57SMathias Bauer                        Terminate(&quot;Default without switch&quot;,CE)
4321ecadb57SMathias Bauer                    End If
4331ecadb57SMathias Bauer                End If
4341ecadb57SMathias Bauer                sCellDefaultType = &quot;DEFAULT&quot;
4351ecadb57SMathias Bauer                bCellDefaultSet = TRUE
4361ecadb57SMathias Bauer            Else
4371ecadb57SMathias Bauer                Terminate(&quot;Previous case (&quot;+sCellCaseType+&quot;) not closed!&quot;,CE)
4381ecadb57SMathias Bauer            End If
4391ecadb57SMathias Bauer
4401ecadb57SMathias Bauer        End If  &apos; OPENING CASE
4411ecadb57SMathias Bauer
4421ecadb57SMathias Bauer        If Left(sText,9) = &quot;&lt;/DEFAULT&quot; Then                                &apos; a closing default tag
4431ecadb57SMathias Bauer
4441ecadb57SMathias Bauer            If sCellDefaultType &lt;&gt; &quot;DEFAULT&quot; Then
4451ecadb57SMathias Bauer                Terminate(&quot;No default open!&quot;,CE)
4461ecadb57SMathias Bauer            Else
4471ecadb57SMathias Bauer                sCellDefaultType = &quot;&quot;
4481ecadb57SMathias Bauer            End If
4491ecadb57SMathias Bauer
4501ecadb57SMathias Bauer        End If  &apos; CLOSING  CASE
4511ecadb57SMathias Bauer    Else  &apos; We are not hlp_aux_switch
4521ecadb57SMathias Bauer        If (sCellSwitchType &lt;&gt; &quot;&quot; AND sCellCaseType = &quot;&quot; AND sCellDefaultType = &quot;&quot;) Then
4531ecadb57SMathias Bauer            Terminate(&quot;Nothing allowed between switch and case or default or /case or /default and /switch&quot;, CE)
4541ecadb57SMathias Bauer        End If
4551ecadb57SMathias Bauer    End If
4561ecadb57SMathias Bauer
4571ecadb57SMathias Bauer
4581ecadb57SMathias BauerEnd Sub
4591ecadb57SMathias Bauer
4601ecadb57SMathias Bauer
4611ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4621ecadb57SMathias Bauer&apos; TERMINATE VALIDATION WITH AN ERROR MESSAGE
4631ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4641ecadb57SMathias BauerSub Terminate(sStr As String, TE As Object)
4651ecadb57SMathias Bauer
4661ecadb57SMathias Bauer    oCur = TE.getText.createTextCursorByRange(TE)
4671ecadb57SMathias Bauer    thiscomponent.getcurrentcontroller.select(oCur)
4681ecadb57SMathias Bauer    msgbox sStr,48,&quot;D&apos;oh!&quot;
4691ecadb57SMathias Bauer    Stop
4701ecadb57SMathias Bauer
4711ecadb57SMathias BauerEnd Sub
4721ecadb57SMathias Bauer
4731ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4741ecadb57SMathias Bauer&apos; SHOW A WARNING
4751ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4761ecadb57SMathias BauerSub Warn(sWarn As String, sSolv As String, Optional TE As Object)
4771ecadb57SMathias Bauer
4781ecadb57SMathias Bauer    If bWarn Then
4791ecadb57SMathias Bauer        BasicLibraries.LoadLibrary(&quot;HelpAuthoring&quot;)
4801ecadb57SMathias Bauer        oDialog = LoadDialog(&quot;HelpAuthoring&quot;, &quot;dlgWarn&quot;)
4811ecadb57SMathias Bauer        oTxtWarn = oDialog.GetControl(&quot;txtWarning&quot;)
4821ecadb57SMathias Bauer        oTxtWarn.Text = sWarn
4831ecadb57SMathias Bauer        oTxtSolv = oDialog.GetControl(&quot;txtSolution&quot;)
4841ecadb57SMathias Bauer        oTxtSolv.Text = sSolv
4851ecadb57SMathias Bauer
4861ecadb57SMathias Bauer        If not(IsMissing(TE)) Then
4871ecadb57SMathias Bauer            oCur = TE.getText.createTextCursorByRange(TE)
4881ecadb57SMathias Bauer            thiscomponent.getcurrentcontroller.select(oCur)
4891ecadb57SMathias Bauer        End If
4901ecadb57SMathias Bauer
4911ecadb57SMathias Bauer        If oDialog.Execute() = 1 Then
4921ecadb57SMathias Bauer            oCbWarn = oDialog.GetControl(&quot;cbWarn&quot;)
4931ecadb57SMathias Bauer            If oCbWarn.State = 1 Then
4941ecadb57SMathias Bauer                bWarn = FALSE
4951ecadb57SMathias Bauer            End If
4961ecadb57SMathias Bauer            Exit Sub
4971ecadb57SMathias Bauer        Else
4981ecadb57SMathias Bauer            Stop
4991ecadb57SMathias Bauer        End If
5001ecadb57SMathias Bauer    End If
5011ecadb57SMathias BauerEnd Sub
5021ecadb57SMathias Bauer
5031ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5041ecadb57SMathias Bauer&apos; CHECK DOCUMENT META DATA
5051ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5061ecadb57SMathias BauerSub CheckMetaData(oDoc As Object)
5071ecadb57SMathias Bauer
5081ecadb57SMathias Bauer    sTopicID = oDoc.DocumentInfo.GetUserFieldValue(1)
5091ecadb57SMathias Bauer
5101ecadb57SMathias Bauer    If sTopicID &lt;&gt; AlphaNum(sTopicID) OR sTopicID=&quot;&quot; Then
5111ecadb57SMathias Bauer        sTopicID = &quot;topic_&quot;+CreateID &apos; create a topic id
5121ecadb57SMathias Bauer    End If
5131ecadb57SMathias Bauer
5141ecadb57SMathias Bauer    oDoc.DocumentInfo.SetUserFieldValue(1,sTopicID)
5151ecadb57SMathias Bauer    sCreated = oDoc.DocumentInfo.GetUserFieldValue(2)
5161ecadb57SMathias Bauer    sEdited = oDoc.DocumentInfo.GetUserFieldValue(3)
5171ecadb57SMathias Bauer    sTitle = oDoc.DocumentInfo.Title
5181ecadb57SMathias Bauer
5191ecadb57SMathias Bauer    If sTitle=&quot;&quot; OR sTitle=&quot;&lt;Set Topic Title&gt;&quot; Then
5201ecadb57SMathias Bauer        Enum = document.Text.createEnumeration
5211ecadb57SMathias Bauer        Do While Enum.hasMoreElements
5221ecadb57SMathias Bauer            TextElement = Enum.nextElement
5231ecadb57SMathias Bauer            If TextElement.supportsService(&quot;com.sun.star.text.Paragraph&quot;) Then
5241ecadb57SMathias Bauer                If Left(TextElement.ParaStyleName,8)=&quot;hlp_head&quot; Then
5251ecadb57SMathias Bauer                    Enum2 = TextElement.createEnumeration
5261ecadb57SMathias Bauer                    While Enum2.hasMoreElements
5271ecadb57SMathias Bauer                        TextPortion = Enum2.nextElement
5281ecadb57SMathias Bauer                        If Not(TextPortion.TextPortionType=&quot;TextField&quot;) Then
5291ecadb57SMathias Bauer                            strg = strg + TextPortion.String
5301ecadb57SMathias Bauer                        End If
5311ecadb57SMathias Bauer                    Wend
5321ecadb57SMathias Bauer                    document.DocumentInfo.Title = strg
5331ecadb57SMathias Bauer                    Exit Do
5341ecadb57SMathias Bauer                End If
5351ecadb57SMathias Bauer            End If
5361ecadb57SMathias Bauer        Loop
5371ecadb57SMathias Bauer    End If
5381ecadb57SMathias Bauer
5391ecadb57SMathias Bauer    sIndex = oDoc.DocumentInfo.GetUserFieldValue(0)
5401ecadb57SMathias Bauer
5411ecadb57SMathias BauerEnd Sub
5421ecadb57SMathias Bauer
5431ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5441ecadb57SMathias Bauer&apos; CHECK IF HEADING EXISTS
5451ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5461ecadb57SMathias BauerSub CheckHeading(oDoc As Object)
5471ecadb57SMathias Bauer
5481ecadb57SMathias BauerEnd Sub
5491ecadb57SMathias Bauer
5501ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5511ecadb57SMathias Bauer&apos; CHECK FOR CORRECT INLINE TAGS
5521ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5531ecadb57SMathias BauerSub CheckInlineTags(TE As Object)
5541ecadb57SMathias Bauer
5551ecadb57SMathias Bauer
5561ecadb57SMathias Bauer
5571ecadb57SMathias Bauer    If Left(TE.ParaStyleName,4)=&quot;hlp_&quot; AND (Left(TE.ParaStyleName,8)&lt;&gt;&quot;hlp_aux_&quot; OR TE.ParaStyleName=&quot;hlp_aux_bookmark&quot;) Then
5581ecadb57SMathias Bauer
5591ecadb57SMathias Bauer        Dim aTokens(0) As Object
5601ecadb57SMathias Bauer        Dim aInlineTagsOpen(0) As String
5611ecadb57SMathias Bauer        TP = TE.createEnumeration
5621ecadb57SMathias Bauer
5631ecadb57SMathias Bauer        While TP.hasmoreElements
5641ecadb57SMathias Bauer            sDim = ubound(aTokens())+1
5651ecadb57SMathias Bauer            ReDim Preserve aTokens(sDim) As Object
5661ecadb57SMathias Bauer            aTokens(sDim) = TP.nextElement
5671ecadb57SMathias Bauer        Wend
5681ecadb57SMathias Bauer
5691ecadb57SMathias Bauer        For i=1 to ubound(aTokens())
5701ecadb57SMathias Bauer            Token = aTokens(i)
5711ecadb57SMathias Bauer
5721ecadb57SMathias Bauer            If Token.supportsService(&quot;com.sun.star.text.TextField&quot;) Then
5731ecadb57SMathias Bauer                sTag = Token.TextField.TextFieldMaster.Name
5741ecadb57SMathias Bauer
5751ecadb57SMathias Bauer                If Right(sTag,1)=&quot;_&quot; Then   &apos; a tag starts
5761ecadb57SMathias Bauer
5771ecadb57SMathias Bauer                    sTagName = Left(sTag,Len(sTag)-1)
5781ecadb57SMathias Bauer
5791ecadb57SMathias Bauer                    &apos; check for forbidden tags in paragraphs
5801ecadb57SMathias Bauer                    sTagFormat = TagFormatIsCorrect(sTagName, TE.ParaStyleName)
5811ecadb57SMathias Bauer                    If sTagFormat &lt;&gt; &quot;&quot; Then
5821ecadb57SMathias Bauer                        Terminate(sTagName+&quot; element has wrong paragraph style (&quot;+TE.ParaStyleName+&quot;).&quot;+chr(13)+&quot;Must be &quot;+sTagFormat,Token)
5831ecadb57SMathias Bauer                    End If
5841ecadb57SMathias Bauer
5851ecadb57SMathias Bauer                    sDim = ubound(aInlineTagsOpen())+1
5861ecadb57SMathias Bauer                    Redim Preserve aInlineTagsOpen(sDim) as String
5871ecadb57SMathias Bauer                    aInlineTagsOpen(sDim)=sTagName
5881ecadb57SMathias Bauer
5891ecadb57SMathias Bauer                ElseIf Left(sTag,1)=&quot;_&quot; Then  &apos; a tag ends, all other cases are empty tags
5901ecadb57SMathias Bauer
5911ecadb57SMathias Bauer                    sTagName = Right(sTag,Len(sTag)-1)
5921ecadb57SMathias Bauer
5931ecadb57SMathias Bauer                    &apos; check for forbidden tags in paragraphs
5941ecadb57SMathias Bauer                    sTagFormat = TagFormatIsCorrect(sTagName, TE.ParaStyleName)
5951ecadb57SMathias Bauer                    If sTagFormat &lt;&gt; &quot;&quot; Then
5961ecadb57SMathias Bauer                        Terminate(sTagName+&quot; element has wrong paragraph style (&quot;+TE.ParaStyleName+&quot;).&quot;+chr(13)+&quot;Must be &quot;+sTagFormat,Token)
5971ecadb57SMathias Bauer                    End If
5981ecadb57SMathias Bauer
5991ecadb57SMathias Bauer                    If ubound(aInlineTagsOpen()) &gt; 0 Then
6001ecadb57SMathias Bauer                        If aInlineTagsOpen(ubound(aInlineTagsOpen())) &lt;&gt; sTagName Then
6011ecadb57SMathias Bauer                            Terminate(&quot;Inline Element &quot;+aInlineTagsOpen(ubound(aInlineTagsOpen()))+&quot; not closed&quot;,Token)
6021ecadb57SMathias Bauer                        End If
6031ecadb57SMathias Bauer                        sDim = ubound(aInlineTagsOpen())-1
6041ecadb57SMathias Bauer                    Else
6051ecadb57SMathias Bauer                        Terminate(&quot;No opening tag for &quot;+sTagName,Token)
6061ecadb57SMathias Bauer                    End If
6071ecadb57SMathias Bauer                    Redim Preserve aInlineTagsOpen(sDim) as String
6081ecadb57SMathias Bauer
6091ecadb57SMathias Bauer                Else &apos; empty tag
6101ecadb57SMathias Bauer                    sTagName = sTag
6111ecadb57SMathias Bauer                    sTagFormat = TagFormatIsCorrect(sTagName, TE.ParaStyleName)
6121ecadb57SMathias Bauer                    If sTagFormat &lt;&gt; &quot;&quot; Then
6131ecadb57SMathias Bauer                        Terminate(sTagName+&quot; element has wrong paragraph style (&quot;+TE.ParaStyleName+&quot;).&quot;+chr(13)+&quot;Must be &quot;+sTagFormat,Token)
6141ecadb57SMathias Bauer                    End If
6151ecadb57SMathias Bauer
6161ecadb57SMathias Bauer                EndIf
6171ecadb57SMathias Bauer            ElseIf (i &gt; 1) AND (Trim(Token.String) &lt;&gt; &quot;&quot;) Then
6181ecadb57SMathias Bauer                If aInlineTagsOpen(ubound(aInlineTagsOpen())) = &quot;SWITCHINLINE&quot; Then
6191ecadb57SMathias Bauer                    Terminate(&quot;No text allowed here.&quot;,Token)
6201ecadb57SMathias Bauer                End If
6211ecadb57SMathias Bauer            End If
6221ecadb57SMathias Bauer        Next
6231ecadb57SMathias Bauer
6241ecadb57SMathias Bauer    If ubound(aInlineTagsOpen()) &gt; 0 Then
6251ecadb57SMathias Bauer        Terminate(&quot;Inline Element &quot;+aInlineTagsOpen(ubound(aInlineTagsOpen()))+&quot; not closed&quot;,Token)
6261ecadb57SMathias Bauer    End If
6271ecadb57SMathias Bauer
6281ecadb57SMathias Bauer    End If
6291ecadb57SMathias BauerEnd Sub
6301ecadb57SMathias Bauer
6311ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6321ecadb57SMathias Bauer&apos; CHECK FOR CORRECT TAGS
6331ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6341ecadb57SMathias BauerSub CheckTags(TE As Object)
6351ecadb57SMathias Bauer    If (Left(TE.ParaStyleName,8) = &quot;hlp_aux_&quot; AND TE.ParaStyleName &lt;&gt; &quot;hlp_aux_bookmark&quot;) Then
6361ecadb57SMathias Bauer
6371ecadb57SMathias Bauer    TP = TE.createEnumeration
6381ecadb57SMathias Bauer
6391ecadb57SMathias Bauer    While TP.hasmoreElements
6401ecadb57SMathias Bauer        TPE = TP.nextElement
6411ecadb57SMathias Bauer
6421ecadb57SMathias Bauer        If TPE.supportsService(&quot;com.sun.star.text.TextField&quot;) Then
6431ecadb57SMathias Bauer            sTag = TPE.TextField.TextFieldMaster.Name
6441ecadb57SMathias Bauer            If Right(sTag,1)=&quot;_&quot; Then   &apos; a tag starts
6451ecadb57SMathias Bauer
6461ecadb57SMathias Bauer                sTagName = Left(sTag,Len(sTag)-1)
6471ecadb57SMathias Bauer                sDim = ubound(aTagsOpen())+1
6481ecadb57SMathias Bauer                Redim Preserve aTagsOpen(sDim) as String
6491ecadb57SMathias Bauer                aTagsOpen(sDim)=sTagName
6501ecadb57SMathias Bauer
6511ecadb57SMathias Bauer            ElseIf Left(sTag,1)=&quot;_&quot; Then  &apos; a tag ends, all other cases are empty tags
6521ecadb57SMathias Bauer
6531ecadb57SMathias Bauer                sTagName = Right(sTag,Len(sTag)-1)
6541ecadb57SMathias Bauer                If ubound(aTagsOpen()) &gt; 0 Then
6551ecadb57SMathias Bauer                    If aTagsOpen(ubound(aTagsOpen())) &lt;&gt; sTagName Then
6561ecadb57SMathias Bauer                        Terminate(&quot;No close tag for &quot;+aTagsOpen(ubound(aTagsOpen())),TPE)
6571ecadb57SMathias Bauer                    Else
6581ecadb57SMathias Bauer                        sDim = ubound(aTagsOpen())-1
6591ecadb57SMathias Bauer                    End If
6601ecadb57SMathias Bauer                Else
6611ecadb57SMathias Bauer                    Terminate(&quot;No opening tag for &quot;+sTagName,TPE)
6621ecadb57SMathias Bauer                End If
6631ecadb57SMathias Bauer                Redim Preserve aTagsOpen(sDim) as String
6641ecadb57SMathias Bauer
6651ecadb57SMathias Bauer            Else &apos; empty tags
6661ecadb57SMathias Bauer
6671ecadb57SMathias Bauer            EndIf
6681ecadb57SMathias Bauer        End If
6691ecadb57SMathias Bauer    Wend
6701ecadb57SMathias Bauer    End If
6711ecadb57SMathias BauerEnd Sub
6721ecadb57SMathias Bauer
6731ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6741ecadb57SMathias Bauer&apos; CHECK FOR CORRECT TAGS IN A TABLE CELL
6751ecadb57SMathias Bauer&apos;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6761ecadb57SMathias BauerSub CheckTagsInCell(CE As Object)
6771ecadb57SMathias Bauer    If (Left(CE.ParaStyleName,8) = &quot;hlp_aux_&quot; AND CE.ParaStyleName &lt;&gt; &quot;hlp_aux_bookmark&quot;) Then
6781ecadb57SMathias Bauer
6791ecadb57SMathias Bauer    CP = CE.createEnumeration
6801ecadb57SMathias Bauer
6811ecadb57SMathias Bauer    While CP.hasmoreElements
6821ecadb57SMathias Bauer        CPE = CP.nextElement
6831ecadb57SMathias Bauer
6841ecadb57SMathias Bauer        If CPE.supportsService(&quot;com.sun.star.text.TextField&quot;) Then
6851ecadb57SMathias Bauer            sTag = CPE.TextField.TextFieldMaster.Name
6861ecadb57SMathias Bauer            If Right(sTag,1)=&quot;_&quot; Then   &apos; a tag starts
6871ecadb57SMathias Bauer
6881ecadb57SMathias Bauer                sTagName = Left(sTag,Len(sTag)-1)
6891ecadb57SMathias Bauer                sDim = ubound(aCellTagsOpen())+1
6901ecadb57SMathias Bauer                Redim Preserve aCellTagsOpen(sDim) as String
6911ecadb57SMathias Bauer                aCellTagsOpen(sDim)=sTagName
6921ecadb57SMathias Bauer
6931ecadb57SMathias Bauer            ElseIf Left(sTag,1)=&quot;_&quot; Then  &apos; a tag ends, all other cases are empty tags
6941ecadb57SMathias Bauer
6951ecadb57SMathias Bauer                sTagName = Right(sTag,Len(sTag)-1)
6961ecadb57SMathias Bauer                If ubound(aCellTagsOpen()) &gt; 0 Then
6971ecadb57SMathias Bauer                    If aCellTagsOpen(ubound(aCellTagsOpen())) &lt;&gt; sTagName Then
6981ecadb57SMathias Bauer                        Terminate(&quot;No close tag for &quot;+aCellTagsOpen(ubound(aCellTagsOpen())),CPE)
6991ecadb57SMathias Bauer                    Else
7001ecadb57SMathias Bauer                        sDim = ubound(aCellTagsOpen())-1
7011ecadb57SMathias Bauer                    End If
7021ecadb57SMathias Bauer                Else
7031ecadb57SMathias Bauer                    Terminate(&quot;No opening tag for &quot;+sTagName,CPE)
7041ecadb57SMathias Bauer                End If
7051ecadb57SMathias Bauer                Redim Preserve aCellTagsOpen(sDim) as String
7061ecadb57SMathias Bauer
7071ecadb57SMathias Bauer            EndIf
7081ecadb57SMathias Bauer        End If
7091ecadb57SMathias Bauer    Wend
7101ecadb57SMathias Bauer    End If
7111ecadb57SMathias BauerEnd Sub
7121ecadb57SMathias Bauer
7131ecadb57SMathias Bauer</script:module>
714