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<!--***********************************************************
4*4fec54abSmseidel *
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
12*4fec54abSmseidel *
133e02b54dSAndrew Rist *   http://www.apache.org/licenses/LICENSE-2.0
14*4fec54abSmseidel *
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.
21*4fec54abSmseidel *
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
56*4fec54abSmseidel	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)
66*4fec54abSmseidel
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
72*4fec54abSmseidel
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
87*4fec54abSmseidel	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
100*4fec54abSmseidel
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
104*4fec54abSmseidel
1051ecadb57SMathias Bauer	msgbox(&quot;Validation finished.&quot;)
106*4fec54abSmseidel
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:
116*4fec54abSmseidel
1171ecadb57SMathias Bauer	CellName = &quot;A1&quot;
1181ecadb57SMathias Bauer	Cell = TE.getCellByName(CellName)
1191ecadb57SMathias Bauer	tmpCellEnum = Cell.createEnumeration
1201ecadb57SMathias Bauer	tmpCellElement = tmpCellEnum.nextElement
121*4fec54abSmseidel
1221ecadb57SMathias Bauer	Rows = TE.getRows
1231ecadb57SMathias Bauer	Cols = TE.getColumns
1241ecadb57SMathias Bauer
1251ecadb57SMathias Bauer	ReDim aCellTagsOpen(0)
126*4fec54abSmseidel
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
148*4fec54abSmseidel
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
156*4fec54abSmseidel
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
160*4fec54abSmseidel
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
180*4fec54abSmseidel
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*4fec54abSmseidel	 				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
264*4fec54abSmseidel
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
273*4fec54abSmseidel
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
281*4fec54abSmseidel
2821ecadb57SMathias Bauer		End If  &apos; CLOSING SWITCH
283*4fec54abSmseidel
2841ecadb57SMathias Bauer		If Left(sText,6) = &quot;&lt;CASE &quot; Then								&apos; an opening case tag
285*4fec54abSmseidel
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
302*4fec54abSmseidel
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
312*4fec54abSmseidel
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;
320*4fec54abSmseidel
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
332*4fec54abSmseidel
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
346*4fec54abSmseidel	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
373*4fec54abSmseidel
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
382*4fec54abSmseidel
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
390*4fec54abSmseidel
3911ecadb57SMathias Bauer		End If  &apos; CLOSING SWITCH
392*4fec54abSmseidel
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
411*4fec54abSmseidel
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
421*4fec54abSmseidel
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;
429*4fec54abSmseidel
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
441*4fec54abSmseidel
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
455*4fec54abSmseidel	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)
467*4fec54abSmseidel	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)
488*4fec54abSmseidel			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)
540*4fec54abSmseidel
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
555*4fec54abSmseidel
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
558*4fec54abSmseidel
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)
571*4fec54abSmseidel
5721ecadb57SMathias Bauer			If Token.supportsService(&quot;com.sun.star.text.TextField&quot;) Then
5731ecadb57SMathias Bauer				sTag = Token.TextField.TextFieldMaster.Name
574*4fec54abSmseidel
5751ecadb57SMathias Bauer				If Right(sTag,1)=&quot;_&quot; Then   &apos; a tag starts
576*4fec54abSmseidel
5771ecadb57SMathias Bauer					sTagName = Left(sTag,Len(sTag)-1)
578*4fec54abSmseidel
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
584*4fec54abSmseidel
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
590*4fec54abSmseidel
5911ecadb57SMathias Bauer					sTagName = Right(sTag,Len(sTag)-1)
592*4fec54abSmseidel
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
598*4fec54abSmseidel
5991ecadb57SMathias Bauer					If ubound(aInlineTagsOpen()) &gt; 0 Then
6001ecadb57SMathias Bauer						If aInlineTagsOpen(ubound(aInlineTagsOpen())) &lt;&gt; sTagName Then
601*4fec54abSmseidel							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
608*4fec54abSmseidel
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
615*4fec54abSmseidel
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
622*4fec54abSmseidel		Next
623*4fec54abSmseidel
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
627*4fec54abSmseidel
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
645*4fec54abSmseidel
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
650*4fec54abSmseidel
6511ecadb57SMathias Bauer			ElseIf Left(sTag,1)=&quot;_&quot; Then  &apos; a tag ends, all other cases are empty tags
652*4fec54abSmseidel
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
666*4fec54abSmseidel
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
687*4fec54abSmseidel
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
692*4fec54abSmseidel
6931ecadb57SMathias Bauer			ElseIf Left(sTag,1)=&quot;_&quot; Then  &apos; a tag ends, all other cases are empty tags
694*4fec54abSmseidel
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
7133e02b54dSAndrew Rist</script:module>
714