1*1ecadb57SMathias Bauer<?xml version="1.0" encoding="UTF-8"?> 2*1ecadb57SMathias Bauer<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd"> 3*1ecadb57SMathias Bauer<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Validate" script:language="StarBasic"> 4*1ecadb57SMathias Bauer'############################################ 5*1ecadb57SMathias Bauer' VALIDATION ROUTINES 6*1ecadb57SMathias Bauer' 7*1ecadb57SMathias Bauer' May, 19 2004 - fpe 8*1ecadb57SMathias Bauer'############################################ 9*1ecadb57SMathias Bauer 10*1ecadb57SMathias BauerDim sSwitchType As String 11*1ecadb57SMathias BauerDim sCellSwitchType As String 12*1ecadb57SMathias BauerDim sCaseType As String 13*1ecadb57SMathias BauerDim sCellCaseType As String 14*1ecadb57SMathias BauerDim sDefaultType As String 15*1ecadb57SMathias BauerDim sCellDefaultType As String 16*1ecadb57SMathias BauerDim bDefaultSet As Boolean 17*1ecadb57SMathias BauerDim bCellDefaultSet As Boolean 18*1ecadb57SMathias BauerDim bCaseSet As Boolean 19*1ecadb57SMathias BauerDim bCellCaseSet As Boolean 20*1ecadb57SMathias BauerDim aTagsOpen(0) As String 21*1ecadb57SMathias BauerDim aCellTagsOpen(0) As String 22*1ecadb57SMathias BauerDim bWarn As Boolean 23*1ecadb57SMathias BauerDim bWarnEmptyPara As Boolean 24*1ecadb57SMathias BauerDim bWarnParaNoID As Boolean 25*1ecadb57SMathias Bauer 26*1ecadb57SMathias Bauer 27*1ecadb57SMathias BauerSub ValidateXHP 28*1ecadb57SMathias Bauer Validate 29*1ecadb57SMathias BauerEnd Sub 30*1ecadb57SMathias Bauer 31*1ecadb57SMathias BauerSub Validate 32*1ecadb57SMathias Bauer 33*1ecadb57SMathias Bauer If not IsHelpFile Then 34*1ecadb57SMathias Bauer msgbox(strErr_NoHelpFile) 35*1ecadb57SMathias Bauer Exit Sub 36*1ecadb57SMathias Bauer End If 37*1ecadb57SMathias Bauer 38*1ecadb57SMathias Bauer oDoc = StarDesktop.CurrentComponent 39*1ecadb57SMathias Bauer sSwitchType = "" 40*1ecadb57SMathias Bauer sCaseType = "" 41*1ecadb57SMathias Bauer sDefaultType = "" 42*1ecadb57SMathias Bauer bWarn = TRUE 43*1ecadb57SMathias Bauer bWarnEmptyPara = TRUE 44*1ecadb57SMathias Bauer bWarnParaNoID = TRUE 45*1ecadb57SMathias Bauer 46*1ecadb57SMathias Bauer CheckMetaData(oDoc) 47*1ecadb57SMathias Bauer CheckHeading(oDoc) 48*1ecadb57SMathias Bauer 49*1ecadb57SMathias Bauer Enum = oDoc.Text.createEnumeration 50*1ecadb57SMathias Bauer Do While Enum.hasMoreElements 51*1ecadb57SMathias Bauer 52*1ecadb57SMathias Bauer TextElement = Enum.nextElement 53*1ecadb57SMathias Bauer If TextElement.supportsService("com.sun.star.text.Paragraph") Then ' we are a paragraph 54*1ecadb57SMathias Bauer 55*1ecadb57SMathias Bauer CheckSwitches(TextElement) 56*1ecadb57SMathias Bauer CheckParaID(TextElement) 57*1ecadb57SMathias Bauer CheckParaFormat(TextElement) 58*1ecadb57SMathias Bauer CheckTags(TextElement) 59*1ecadb57SMathias Bauer CheckInlineTags(TextElement) 60*1ecadb57SMathias Bauer 61*1ecadb57SMathias Bauer ElseIf TextElement.supportsService("com.sun.star.text.TextTable") Then 62*1ecadb57SMathias Bauer 63*1ecadb57SMathias Bauer If sSwitchType <> "" AND (sCaseType = "" AND sDefaultType = "") Then '<------ 64*1ecadb57SMathias Bauer Terminate("Switch must be closed or case/default must be opened before a table starts.",tmpCellElement) 65*1ecadb57SMathias Bauer End If 66*1ecadb57SMathias Bauer 67*1ecadb57SMathias Bauer CheckCell(TextElement) 68*1ecadb57SMathias Bauer End If 69*1ecadb57SMathias Bauer Loop 70*1ecadb57SMathias Bauer 71*1ecadb57SMathias Bauer If sCaseType <> "" Then 72*1ecadb57SMathias Bauer Terminate("Previous case ("+sCaseType+") not closed!",TextElement) 73*1ecadb57SMathias Bauer End If 74*1ecadb57SMathias Bauer 75*1ecadb57SMathias Bauer If sDefaultType <> "" Then 76*1ecadb57SMathias Bauer Terminate("Previous default not closed!",TextElement) 77*1ecadb57SMathias Bauer End If 78*1ecadb57SMathias Bauer 79*1ecadb57SMathias Bauer If sSwitchType <> "" Then 80*1ecadb57SMathias Bauer Terminate("Previous switch ("+sSwitchType+") not closed!",TextElement) 81*1ecadb57SMathias Bauer End If 82*1ecadb57SMathias Bauer 83*1ecadb57SMathias Bauer If ubound(aTagsOpen()) > 0 Then 84*1ecadb57SMathias Bauer Terminate("Element "+aTagsOpen(ubound(aTagsOpen()))+" not closed",TextElement) 85*1ecadb57SMathias Bauer End If 86*1ecadb57SMathias Bauer 87*1ecadb57SMathias Bauer msgbox("Validation finished.") 88*1ecadb57SMathias Bauer 89*1ecadb57SMathias BauerEnd Sub 90*1ecadb57SMathias Bauer 91*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 92*1ecadb57SMathias Bauer' CHECKCELL 93*1ecadb57SMathias Bauer' checks a table cell contents 94*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 95*1ecadb57SMathias Bauer 96*1ecadb57SMathias BauerSub CheckCell(TE As Object) 97*1ecadb57SMathias Bauer On Local Error Goto ERRHANDLE: 98*1ecadb57SMathias Bauer 99*1ecadb57SMathias Bauer CellName = "A1" 100*1ecadb57SMathias Bauer Cell = TE.getCellByName(CellName) 101*1ecadb57SMathias Bauer tmpCellEnum = Cell.createEnumeration 102*1ecadb57SMathias Bauer tmpCellElement = tmpCellEnum.nextElement 103*1ecadb57SMathias Bauer 104*1ecadb57SMathias Bauer Rows = TE.getRows 105*1ecadb57SMathias Bauer Cols = TE.getColumns 106*1ecadb57SMathias Bauer 107*1ecadb57SMathias Bauer ReDim aCellTagsOpen(0) 108*1ecadb57SMathias Bauer 109*1ecadb57SMathias Bauer For RowIndex = 1 to Rows.getCount() 110*1ecadb57SMathias Bauer 111*1ecadb57SMathias Bauer For ColIndex = 1 to Cols.getCount() 112*1ecadb57SMathias Bauer 113*1ecadb57SMathias Bauer CellName = Chr(64 + ColIndex) & RowIndex 114*1ecadb57SMathias Bauer Cell = TE.getCellByName(CellName) 115*1ecadb57SMathias Bauer CellEnum = Cell.createEnumeration 116*1ecadb57SMathias Bauer 117*1ecadb57SMathias Bauer Do While CellEnum.hasMoreElements 118*1ecadb57SMathias Bauer 119*1ecadb57SMathias Bauer CellElement = CellEnum.nextElement ' <-- MODIFY, check closed switches within cells 120*1ecadb57SMathias Bauer 121*1ecadb57SMathias Bauer If CellElement.supportsService("com.sun.star.text.Paragraph") Then 122*1ecadb57SMathias Bauer CheckSwitchesInCell(CellElement) 123*1ecadb57SMathias Bauer CheckParaID(CellElement) 124*1ecadb57SMathias Bauer CheckParaFormat(CellElement) 125*1ecadb57SMathias Bauer CheckTagsInCell(CellElement) 126*1ecadb57SMathias Bauer CheckInlineTags(CellElement) 127*1ecadb57SMathias Bauer EndIf 128*1ecadb57SMathias Bauer 129*1ecadb57SMathias Bauer Loop 130*1ecadb57SMathias Bauer 131*1ecadb57SMathias Bauer If sCellCaseType <> "" Then 132*1ecadb57SMathias Bauer Terminate("Previous case ("+sCellCaseType+") not closed!",CellElement) 133*1ecadb57SMathias Bauer End If 134*1ecadb57SMathias Bauer 135*1ecadb57SMathias Bauer If sCellSwitchType <> "" Then 136*1ecadb57SMathias Bauer Terminate("Previous switch ("+sCellSwitchType+") not closed!",CellElement) 137*1ecadb57SMathias Bauer End If 138*1ecadb57SMathias Bauer 139*1ecadb57SMathias Bauer If ubound(aCellTagsOpen()) > 0 Then 140*1ecadb57SMathias Bauer Terminate("Element "+aCellTagsOpen(ubound(aCellTagsOpen()))+" not closed",CellElement) 141*1ecadb57SMathias Bauer End If 142*1ecadb57SMathias Bauer 143*1ecadb57SMathias Bauer Next 144*1ecadb57SMathias Bauer Next 145*1ecadb57SMathias Bauer 146*1ecadb57SMathias Bauer ERRHANDLE: 147*1ecadb57SMathias Bauer If Err <> 0 Then 148*1ecadb57SMathias Bauer msgbox "Error: "+chr(13)+ Error$,48,"D'oh!" 149*1ecadb57SMathias Bauer End If 150*1ecadb57SMathias BauerEnd Sub 151*1ecadb57SMathias Bauer 152*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 153*1ecadb57SMathias Bauer' CHECK PARA ID 154*1ecadb57SMathias Bauer' checks a paragraph for an ID 155*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 156*1ecadb57SMathias Bauer 157*1ecadb57SMathias BauerSub CheckParaID(TE As Object) 158*1ecadb57SMathias Bauer 159*1ecadb57SMathias Bauer If Left(TE.ParaStyleName,4) = "hlp_" AND Not(Left(TE.ParaStyleName,8) = "hlp_aux_") Then 160*1ecadb57SMathias Bauer 161*1ecadb57SMathias Bauer sText = TE.GetString 162*1ecadb57SMathias Bauer 163*1ecadb57SMathias Bauer If sText = "" Then 164*1ecadb57SMathias Bauer If bWarnEmptyPara Then 165*1ecadb57SMathias Bauer Warn("Empty Paragraph","Empty paragraphs should be avoided. Do not use empty paragraphs for formatting purpose.",TE) 166*1ecadb57SMathias Bauer bWarnEmptyPara = FALSE 167*1ecadb57SMathias Bauer End If 168*1ecadb57SMathias Bauer Else 169*1ecadb57SMathias Bauer 170*1ecadb57SMathias Bauer TP = TE.createEnumeration 171*1ecadb57SMathias Bauer Ct = 0 172*1ecadb57SMathias Bauer posID = 0 173*1ecadb57SMathias Bauer 174*1ecadb57SMathias Bauer While TP.hasmoreElements 175*1ecadb57SMathias Bauer Ct = Ct+1 176*1ecadb57SMathias Bauer TPE = TP.nextElement 177*1ecadb57SMathias Bauer If TPE.TextPortionType="TextField" Then 178*1ecadb57SMathias Bauer If TPE.TextField.TextFieldMaster.Name="ID" Then 179*1ecadb57SMathias Bauer posID = Ct 180*1ecadb57SMathias Bauer End If 181*1ecadb57SMathias Bauer End If 182*1ecadb57SMathias Bauer ' Lets cheat and allow empty strings before the ID -- otherwise we'll get 183*1ecadb57SMathias Bauer ' a validation error if a paragraph starts at the top of a page after 184*1ecadb57SMathias Bauer ' a page break (for whatever reason) 185*1ecadb57SMathias Bauer If TPE.String = "" Then 186*1ecadb57SMathias Bauer Ct = Ct-1 187*1ecadb57SMathias Bauer End If 188*1ecadb57SMathias Bauer Wend 189*1ecadb57SMathias Bauer 190*1ecadb57SMathias Bauer If posID = 0 Then 191*1ecadb57SMathias Bauer If bWarnParaNoID Then 192*1ecadb57SMathias Bauer Warn("Paragraph has no id.","IDs will be assigned on safe. You can also assign an ID using the Assign Paragraph ID menu item",TPE) 193*1ecadb57SMathias Bauer bWarnParaNoID = FALSE 194*1ecadb57SMathias Bauer InsertNewParaData 195*1ecadb57SMathias Bauer Else 196*1ecadb57SMathias Bauer oCur = TE.getText.createTextCursorByRange(TE) 197*1ecadb57SMathias Bauer thiscomponent.getcurrentcontroller.select(oCur) 198*1ecadb57SMathias Bauer InsertNewParaData 199*1ecadb57SMathias Bauer End If 200*1ecadb57SMathias Bauer ElseIf posID > 1 Then 201*1ecadb57SMathias Bauer Terminate("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",TPE) 202*1ecadb57SMathias Bauer End If 203*1ecadb57SMathias Bauer 204*1ecadb57SMathias Bauer End If 205*1ecadb57SMathias Bauer 206*1ecadb57SMathias Bauer End If 207*1ecadb57SMathias BauerEnd Sub 208*1ecadb57SMathias Bauer 209*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 210*1ecadb57SMathias Bauer' CHECK PARA FORMAT 211*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 212*1ecadb57SMathias BauerSub CheckParaFormat(TE As Object) 213*1ecadb57SMathias Bauer 214*1ecadb57SMathias Bauer sText = TE.GetString 215*1ecadb57SMathias Bauer If Left(TE.ParaStyleName,4) <> "hlp_" AND sText <> "" Then ' just disregard empty paras in wrong formats 216*1ecadb57SMathias Bauer Warn("Invalid paragraph format. Contents will be lost.",_ 217*1ecadb57SMathias Bauer "Use only the paragraph styles starting with ""hlp_""."+_ 218*1ecadb57SMathias Bauer " Paragraphs in other formats will be lost on export",TE) 219*1ecadb57SMathias Bauer End If 220*1ecadb57SMathias Bauer 221*1ecadb57SMathias BauerEnd Sub 222*1ecadb57SMathias Bauer 223*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 224*1ecadb57SMathias Bauer' CHECK SWITCHES 225*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 226*1ecadb57SMathias BauerSub CheckSwitches(TE As Object) 227*1ecadb57SMathias Bauer 228*1ecadb57SMathias Bauer If TE.ParaStyleName="hlp_aux_switch" Then ' we are a switch or case or default 229*1ecadb57SMathias Bauer sText = TE.GetString ' get the switch contents 230*1ecadb57SMathias Bauer 231*1ecadb57SMathias Bauer If Left(sText,8) = "<SWITCH " Then ' an opening switch tag 232*1ecadb57SMathias Bauer 233*1ecadb57SMathias Bauer If sSwitchType = "" Then ' no other switch is open 234*1ecadb57SMathias Bauer sSwitchType = Right(sText,Len(sText)-16) 235*1ecadb57SMathias Bauer sSwitchType = Left(sSwitchType,InStr(sSwitchType,"""")-1) 236*1ecadb57SMathias Bauer 237*1ecadb57SMathias Bauer If (sSwitchType <> "sys" AND sSwitchType <> "appl" AND sSwitchType <> "distrib") Then 238*1ecadb57SMathias Bauer Terminate("Unknown switch type """+sSwitchType+"""",TE) 239*1ecadb57SMathias Bauer End If 240*1ecadb57SMathias Bauer 241*1ecadb57SMathias Bauer Else 242*1ecadb57SMathias Bauer Terminate("Previous switch ("+sSwitchType+") not closed!",TE) 243*1ecadb57SMathias Bauer End If 244*1ecadb57SMathias Bauer 245*1ecadb57SMathias Bauer End If ' OPENING SWITCH 246*1ecadb57SMathias Bauer 247*1ecadb57SMathias Bauer If Left(sText,8) = "</SWITCH" Then ' a closing switch tag 248*1ecadb57SMathias Bauer 249*1ecadb57SMathias Bauer If sSwitchType = "" Then ' there was no switch open 250*1ecadb57SMathias Bauer Terminate("No switch open!",TE) 251*1ecadb57SMathias Bauer Else 252*1ecadb57SMathias Bauer If not(bCaseSet OR bDefaultSet) Then 253*1ecadb57SMathias Bauer Terminate("Empty switch",TE) 254*1ecadb57SMathias Bauer End If 255*1ecadb57SMathias Bauer 256*1ecadb57SMathias Bauer If sCaseType <> "" Then ' there is still a case open 257*1ecadb57SMathias Bauer Terminate("Previous case ("+sCaseType+") not closed!",TE) 258*1ecadb57SMathias Bauer End If 259*1ecadb57SMathias Bauer sSwitchType = "" 260*1ecadb57SMathias Bauer bDefaultSet = FALSE 261*1ecadb57SMathias Bauer bCaseSet = FALSE 262*1ecadb57SMathias Bauer End If 263*1ecadb57SMathias Bauer 264*1ecadb57SMathias Bauer End If ' CLOSING SWITCH 265*1ecadb57SMathias Bauer 266*1ecadb57SMathias Bauer If Left(sText,6) = "<CASE " Then ' an opening case tag 267*1ecadb57SMathias Bauer 268*1ecadb57SMathias Bauer If bDefaultSet Then 269*1ecadb57SMathias Bauer Terminate("No case after default allowed.",TE) 270*1ecadb57SMathias Bauer End If 271*1ecadb57SMathias Bauer 272*1ecadb57SMathias Bauer If sCaseType = "" Then 273*1ecadb57SMathias Bauer sCaseType = Right(sText,Len(sText)-14) 274*1ecadb57SMathias Bauer sCaseType = Left(sCaseType,InStr(sCaseType,"""")-1) 275*1ecadb57SMathias Bauer bCaseSet = TRUE 276*1ecadb57SMathias Bauer If sSwitchType = "" Then 277*1ecadb57SMathias Bauer Terminate("Case without switch",TE) 278*1ecadb57SMathias Bauer End If 279*1ecadb57SMathias Bauer Else 280*1ecadb57SMathias Bauer Terminate("Previous case ("+sCaseType+") not closed!",TE) 281*1ecadb57SMathias Bauer End If 282*1ecadb57SMathias Bauer 283*1ecadb57SMathias Bauer End If ' OPENING CASE 284*1ecadb57SMathias Bauer 285*1ecadb57SMathias Bauer If Left(sText,6) = "</CASE" Then ' a closing case tag 286*1ecadb57SMathias Bauer 287*1ecadb57SMathias Bauer If sCaseType = "" Then 288*1ecadb57SMathias Bauer Terminate("No case open!",TE) 289*1ecadb57SMathias Bauer Else 290*1ecadb57SMathias Bauer sCaseType = "" 291*1ecadb57SMathias Bauer End If 292*1ecadb57SMathias Bauer 293*1ecadb57SMathias Bauer End If ' CLOSING CASE 294*1ecadb57SMathias Bauer 295*1ecadb57SMathias Bauer If Left(sText,8) = "<DEFAULT" Then ' an opening default tag 296*1ecadb57SMathias Bauer 297*1ecadb57SMathias Bauer If sCaseType = "" Then 298*1ecadb57SMathias Bauer If (sDefaultType <> "" OR bDefaultSet) Then 299*1ecadb57SMathias Bauer Terminate("Multiple default not allowed.",TE) 300*1ecadb57SMathias Bauer Else 301*1ecadb57SMathias Bauer sDefaultType = "DEFAULT" 302*1ecadb57SMathias Bauer 303*1ecadb57SMathias Bauer If sSwitchType = "" Then 304*1ecadb57SMathias Bauer Terminate("Default without switch",TE) 305*1ecadb57SMathias Bauer End If 306*1ecadb57SMathias Bauer End If 307*1ecadb57SMathias Bauer sDefaultType = "DEFAULT" 308*1ecadb57SMathias Bauer bDefaultSet = TRUE 309*1ecadb57SMathias Bauer Else 310*1ecadb57SMathias Bauer Terminate("Previous case ("+sCaseType+") not closed!",TE) 311*1ecadb57SMathias Bauer End If 312*1ecadb57SMathias Bauer 313*1ecadb57SMathias Bauer End If ' OPENING CASE 314*1ecadb57SMathias Bauer 315*1ecadb57SMathias Bauer If Left(sText,9) = "</DEFAULT" Then ' a closing default tag 316*1ecadb57SMathias Bauer 317*1ecadb57SMathias Bauer If sDefaultType <> "DEFAULT" Then 318*1ecadb57SMathias Bauer Terminate("No default open!",TE) 319*1ecadb57SMathias Bauer Else 320*1ecadb57SMathias Bauer sDefaultType = "" 321*1ecadb57SMathias Bauer End If 322*1ecadb57SMathias Bauer 323*1ecadb57SMathias Bauer End If ' CLOSING CASE 324*1ecadb57SMathias Bauer Else ' We are not hlp_aux_switch 325*1ecadb57SMathias Bauer If (sSwitchType <> "" AND sCaseType = "" AND sDefaultType = "") Then 326*1ecadb57SMathias Bauer Terminate("Nothing allowed between switch and case or default or /case or /default and /switch", TE) 327*1ecadb57SMathias Bauer End If 328*1ecadb57SMathias Bauer End If 329*1ecadb57SMathias Bauer 330*1ecadb57SMathias BauerEnd Sub 331*1ecadb57SMathias Bauer 332*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 333*1ecadb57SMathias Bauer' CHECK SWITCHES IN A CELL 334*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 335*1ecadb57SMathias BauerSub CheckSwitchesInCell(CE As Object) 336*1ecadb57SMathias Bauer 337*1ecadb57SMathias Bauer If CE.ParaStyleName="hlp_aux_switch" Then ' we are a switch or case or default 338*1ecadb57SMathias Bauer sText = CE.GetString ' get the switch contents 339*1ecadb57SMathias Bauer 340*1ecadb57SMathias Bauer If Left(sText,8) = "<SWITCH " Then ' an opening switch tag 341*1ecadb57SMathias Bauer 342*1ecadb57SMathias Bauer If sCellSwitchType = "" Then ' no other switch is open 343*1ecadb57SMathias Bauer sCellSwitchType = Right(sText,Len(sText)-16) 344*1ecadb57SMathias Bauer sCellSwitchType = Left(sCellSwitchType,InStr(sCellSwitchType,"""")-1) 345*1ecadb57SMathias Bauer 346*1ecadb57SMathias Bauer If (sCellSwitchType <> "sys" AND sCellSwitchType <> "appl" AND sCellSwitchType <> "distrib") Then 347*1ecadb57SMathias Bauer Terminate("Unknown switch type """+sCellSwitchType+"""",CE) 348*1ecadb57SMathias Bauer End If 349*1ecadb57SMathias Bauer 350*1ecadb57SMathias Bauer Else 351*1ecadb57SMathias Bauer Terminate("Previous switch ("+sCellSwitchType+") not closed!",CE) 352*1ecadb57SMathias Bauer End If 353*1ecadb57SMathias Bauer 354*1ecadb57SMathias Bauer End If ' OPENING SWITCH 355*1ecadb57SMathias Bauer 356*1ecadb57SMathias Bauer If Left(sText,8) = "</SWITCH" Then ' a closing switch tag 357*1ecadb57SMathias Bauer 358*1ecadb57SMathias Bauer If sCellSwitchType = "" Then ' there was no switch open 359*1ecadb57SMathias Bauer Terminate("No switch open!",CE) 360*1ecadb57SMathias Bauer Else 361*1ecadb57SMathias Bauer If not(bCellCaseSet OR bCellDefaultSet) Then 362*1ecadb57SMathias Bauer Terminate("Empty switch",CE) 363*1ecadb57SMathias Bauer End If 364*1ecadb57SMathias Bauer 365*1ecadb57SMathias Bauer If sCellCaseType <> "" Then ' there is still a case open 366*1ecadb57SMathias Bauer Terminate("Previous case ("+sCellCaseType+") not closed!",CE) 367*1ecadb57SMathias Bauer End If 368*1ecadb57SMathias Bauer sCellSwitchType = "" 369*1ecadb57SMathias Bauer bCellDefaultSet = FALSE 370*1ecadb57SMathias Bauer bCellCaseSet = FALSE 371*1ecadb57SMathias Bauer End If 372*1ecadb57SMathias Bauer 373*1ecadb57SMathias Bauer End If ' CLOSING SWITCH 374*1ecadb57SMathias Bauer 375*1ecadb57SMathias Bauer If Left(sText,6) = "<CASE " Then ' an opening case tag 376*1ecadb57SMathias Bauer 377*1ecadb57SMathias Bauer If bCellDefaultSet Then 378*1ecadb57SMathias Bauer Terminate("No case after default allowed.",CE) 379*1ecadb57SMathias Bauer End If 380*1ecadb57SMathias Bauer 381*1ecadb57SMathias Bauer If sCellCaseType = "" Then 382*1ecadb57SMathias Bauer sCellCaseType = Right(sText,Len(sText)-14) 383*1ecadb57SMathias Bauer sCellCaseType = Left(sCellCaseType,InStr(sCellCaseType,"""")-1) 384*1ecadb57SMathias Bauer bCellCaseSet = TRUE 385*1ecadb57SMathias Bauer If sCellSwitchType = "" Then 386*1ecadb57SMathias Bauer Terminate("Case without switch",CE) 387*1ecadb57SMathias Bauer End If 388*1ecadb57SMathias Bauer Else 389*1ecadb57SMathias Bauer Terminate("Previous case ("+sCellCaseType+") not closed!",CE) 390*1ecadb57SMathias Bauer End If 391*1ecadb57SMathias Bauer 392*1ecadb57SMathias Bauer End If ' OPENING CASE 393*1ecadb57SMathias Bauer 394*1ecadb57SMathias Bauer If Left(sText,6) = "</CASE" Then ' a closing case tag 395*1ecadb57SMathias Bauer 396*1ecadb57SMathias Bauer If sCellCaseType = "" Then 397*1ecadb57SMathias Bauer Terminate("No case open!",CE) 398*1ecadb57SMathias Bauer Else 399*1ecadb57SMathias Bauer sCellCaseType = "" 400*1ecadb57SMathias Bauer End If 401*1ecadb57SMathias Bauer 402*1ecadb57SMathias Bauer End If ' CLOSING CASE 403*1ecadb57SMathias Bauer 404*1ecadb57SMathias Bauer If Left(sText,8) = "<DEFAULT" Then ' an opening default tag 405*1ecadb57SMathias Bauer 406*1ecadb57SMathias Bauer If sCellCaseType = "" Then 407*1ecadb57SMathias Bauer If (sCellDefaultType <> "" OR bCellDefaultSet) Then 408*1ecadb57SMathias Bauer Terminate("Multiple default not allowed.",CE) 409*1ecadb57SMathias Bauer Else 410*1ecadb57SMathias Bauer sCellDefaultType = "DEFAULT" 411*1ecadb57SMathias Bauer 412*1ecadb57SMathias Bauer If sCellSwitchType = "" Then 413*1ecadb57SMathias Bauer Terminate("Default without switch",CE) 414*1ecadb57SMathias Bauer End If 415*1ecadb57SMathias Bauer End If 416*1ecadb57SMathias Bauer sCellDefaultType = "DEFAULT" 417*1ecadb57SMathias Bauer bCellDefaultSet = TRUE 418*1ecadb57SMathias Bauer Else 419*1ecadb57SMathias Bauer Terminate("Previous case ("+sCellCaseType+") not closed!",CE) 420*1ecadb57SMathias Bauer End If 421*1ecadb57SMathias Bauer 422*1ecadb57SMathias Bauer End If ' OPENING CASE 423*1ecadb57SMathias Bauer 424*1ecadb57SMathias Bauer If Left(sText,9) = "</DEFAULT" Then ' a closing default tag 425*1ecadb57SMathias Bauer 426*1ecadb57SMathias Bauer If sCellDefaultType <> "DEFAULT" Then 427*1ecadb57SMathias Bauer Terminate("No default open!",CE) 428*1ecadb57SMathias Bauer Else 429*1ecadb57SMathias Bauer sCellDefaultType = "" 430*1ecadb57SMathias Bauer End If 431*1ecadb57SMathias Bauer 432*1ecadb57SMathias Bauer End If ' CLOSING CASE 433*1ecadb57SMathias Bauer Else ' We are not hlp_aux_switch 434*1ecadb57SMathias Bauer If (sCellSwitchType <> "" AND sCellCaseType = "" AND sCellDefaultType = "") Then 435*1ecadb57SMathias Bauer Terminate("Nothing allowed between switch and case or default or /case or /default and /switch", CE) 436*1ecadb57SMathias Bauer End If 437*1ecadb57SMathias Bauer End If 438*1ecadb57SMathias Bauer 439*1ecadb57SMathias Bauer 440*1ecadb57SMathias BauerEnd Sub 441*1ecadb57SMathias Bauer 442*1ecadb57SMathias Bauer 443*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 444*1ecadb57SMathias Bauer' TERMINATE VALIDATION WITH AN ERROR MESSAGE 445*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 446*1ecadb57SMathias BauerSub Terminate(sStr As String, TE As Object) 447*1ecadb57SMathias Bauer 448*1ecadb57SMathias Bauer oCur = TE.getText.createTextCursorByRange(TE) 449*1ecadb57SMathias Bauer thiscomponent.getcurrentcontroller.select(oCur) 450*1ecadb57SMathias Bauer msgbox sStr,48,"D'oh!" 451*1ecadb57SMathias Bauer Stop 452*1ecadb57SMathias Bauer 453*1ecadb57SMathias BauerEnd Sub 454*1ecadb57SMathias Bauer 455*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 456*1ecadb57SMathias Bauer' SHOW A WARNING 457*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 458*1ecadb57SMathias BauerSub Warn(sWarn As String, sSolv As String, Optional TE As Object) 459*1ecadb57SMathias Bauer 460*1ecadb57SMathias Bauer If bWarn Then 461*1ecadb57SMathias Bauer BasicLibraries.LoadLibrary("HelpAuthoring") 462*1ecadb57SMathias Bauer oDialog = LoadDialog("HelpAuthoring", "dlgWarn") 463*1ecadb57SMathias Bauer oTxtWarn = oDialog.GetControl("txtWarning") 464*1ecadb57SMathias Bauer oTxtWarn.Text = sWarn 465*1ecadb57SMathias Bauer oTxtSolv = oDialog.GetControl("txtSolution") 466*1ecadb57SMathias Bauer oTxtSolv.Text = sSolv 467*1ecadb57SMathias Bauer 468*1ecadb57SMathias Bauer If not(IsMissing(TE)) Then 469*1ecadb57SMathias Bauer oCur = TE.getText.createTextCursorByRange(TE) 470*1ecadb57SMathias Bauer thiscomponent.getcurrentcontroller.select(oCur) 471*1ecadb57SMathias Bauer End If 472*1ecadb57SMathias Bauer 473*1ecadb57SMathias Bauer If oDialog.Execute() = 1 Then 474*1ecadb57SMathias Bauer oCbWarn = oDialog.GetControl("cbWarn") 475*1ecadb57SMathias Bauer If oCbWarn.State = 1 Then 476*1ecadb57SMathias Bauer bWarn = FALSE 477*1ecadb57SMathias Bauer End If 478*1ecadb57SMathias Bauer Exit Sub 479*1ecadb57SMathias Bauer Else 480*1ecadb57SMathias Bauer Stop 481*1ecadb57SMathias Bauer End If 482*1ecadb57SMathias Bauer End If 483*1ecadb57SMathias BauerEnd Sub 484*1ecadb57SMathias Bauer 485*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 486*1ecadb57SMathias Bauer' CHECK DOCUMENT META DATA 487*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 488*1ecadb57SMathias BauerSub CheckMetaData(oDoc As Object) 489*1ecadb57SMathias Bauer 490*1ecadb57SMathias Bauer sTopicID = oDoc.DocumentInfo.GetUserFieldValue(1) 491*1ecadb57SMathias Bauer 492*1ecadb57SMathias Bauer If sTopicID <> AlphaNum(sTopicID) OR sTopicID="" Then 493*1ecadb57SMathias Bauer sTopicID = "topic_"+CreateID ' create a topic id 494*1ecadb57SMathias Bauer End If 495*1ecadb57SMathias Bauer 496*1ecadb57SMathias Bauer oDoc.DocumentInfo.SetUserFieldValue(1,sTopicID) 497*1ecadb57SMathias Bauer sCreated = oDoc.DocumentInfo.GetUserFieldValue(2) 498*1ecadb57SMathias Bauer sEdited = oDoc.DocumentInfo.GetUserFieldValue(3) 499*1ecadb57SMathias Bauer sTitle = oDoc.DocumentInfo.Title 500*1ecadb57SMathias Bauer 501*1ecadb57SMathias Bauer If sTitle="" OR sTitle="<Set Topic Title>" Then 502*1ecadb57SMathias Bauer Enum = document.Text.createEnumeration 503*1ecadb57SMathias Bauer Do While Enum.hasMoreElements 504*1ecadb57SMathias Bauer TextElement = Enum.nextElement 505*1ecadb57SMathias Bauer If TextElement.supportsService("com.sun.star.text.Paragraph") Then 506*1ecadb57SMathias Bauer If Left(TextElement.ParaStyleName,8)="hlp_head" Then 507*1ecadb57SMathias Bauer Enum2 = TextElement.createEnumeration 508*1ecadb57SMathias Bauer While Enum2.hasMoreElements 509*1ecadb57SMathias Bauer TextPortion = Enum2.nextElement 510*1ecadb57SMathias Bauer If Not(TextPortion.TextPortionType="TextField") Then 511*1ecadb57SMathias Bauer strg = strg + TextPortion.String 512*1ecadb57SMathias Bauer End If 513*1ecadb57SMathias Bauer Wend 514*1ecadb57SMathias Bauer document.DocumentInfo.Title = strg 515*1ecadb57SMathias Bauer Exit Do 516*1ecadb57SMathias Bauer End If 517*1ecadb57SMathias Bauer End If 518*1ecadb57SMathias Bauer Loop 519*1ecadb57SMathias Bauer End If 520*1ecadb57SMathias Bauer 521*1ecadb57SMathias Bauer sIndex = oDoc.DocumentInfo.GetUserFieldValue(0) 522*1ecadb57SMathias Bauer 523*1ecadb57SMathias BauerEnd Sub 524*1ecadb57SMathias Bauer 525*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 526*1ecadb57SMathias Bauer' CHECK IF HEADING EXISTS 527*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 528*1ecadb57SMathias BauerSub CheckHeading(oDoc As Object) 529*1ecadb57SMathias Bauer 530*1ecadb57SMathias BauerEnd Sub 531*1ecadb57SMathias Bauer 532*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 533*1ecadb57SMathias Bauer' CHECK FOR CORRECT INLINE TAGS 534*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 535*1ecadb57SMathias BauerSub CheckInlineTags(TE As Object) 536*1ecadb57SMathias Bauer 537*1ecadb57SMathias Bauer 538*1ecadb57SMathias Bauer 539*1ecadb57SMathias Bauer If Left(TE.ParaStyleName,4)="hlp_" AND (Left(TE.ParaStyleName,8)<>"hlp_aux_" OR TE.ParaStyleName="hlp_aux_bookmark") Then 540*1ecadb57SMathias Bauer 541*1ecadb57SMathias Bauer Dim aTokens(0) As Object 542*1ecadb57SMathias Bauer Dim aInlineTagsOpen(0) As String 543*1ecadb57SMathias Bauer TP = TE.createEnumeration 544*1ecadb57SMathias Bauer 545*1ecadb57SMathias Bauer While TP.hasmoreElements 546*1ecadb57SMathias Bauer sDim = ubound(aTokens())+1 547*1ecadb57SMathias Bauer ReDim Preserve aTokens(sDim) As Object 548*1ecadb57SMathias Bauer aTokens(sDim) = TP.nextElement 549*1ecadb57SMathias Bauer Wend 550*1ecadb57SMathias Bauer 551*1ecadb57SMathias Bauer For i=1 to ubound(aTokens()) 552*1ecadb57SMathias Bauer Token = aTokens(i) 553*1ecadb57SMathias Bauer 554*1ecadb57SMathias Bauer If Token.supportsService("com.sun.star.text.TextField") Then 555*1ecadb57SMathias Bauer sTag = Token.TextField.TextFieldMaster.Name 556*1ecadb57SMathias Bauer 557*1ecadb57SMathias Bauer If Right(sTag,1)="_" Then ' a tag starts 558*1ecadb57SMathias Bauer 559*1ecadb57SMathias Bauer sTagName = Left(sTag,Len(sTag)-1) 560*1ecadb57SMathias Bauer 561*1ecadb57SMathias Bauer ' check for forbidden tags in paragraphs 562*1ecadb57SMathias Bauer sTagFormat = TagFormatIsCorrect(sTagName, TE.ParaStyleName) 563*1ecadb57SMathias Bauer If sTagFormat <> "" Then 564*1ecadb57SMathias Bauer Terminate(sTagName+" element has wrong paragraph style ("+TE.ParaStyleName+")."+chr(13)+"Must be "+sTagFormat,Token) 565*1ecadb57SMathias Bauer End If 566*1ecadb57SMathias Bauer 567*1ecadb57SMathias Bauer sDim = ubound(aInlineTagsOpen())+1 568*1ecadb57SMathias Bauer Redim Preserve aInlineTagsOpen(sDim) as String 569*1ecadb57SMathias Bauer aInlineTagsOpen(sDim)=sTagName 570*1ecadb57SMathias Bauer 571*1ecadb57SMathias Bauer ElseIf Left(sTag,1)="_" Then ' a tag ends, all other cases are empty tags 572*1ecadb57SMathias Bauer 573*1ecadb57SMathias Bauer sTagName = Right(sTag,Len(sTag)-1) 574*1ecadb57SMathias Bauer 575*1ecadb57SMathias Bauer ' check for forbidden tags in paragraphs 576*1ecadb57SMathias Bauer sTagFormat = TagFormatIsCorrect(sTagName, TE.ParaStyleName) 577*1ecadb57SMathias Bauer If sTagFormat <> "" Then 578*1ecadb57SMathias Bauer Terminate(sTagName+" element has wrong paragraph style ("+TE.ParaStyleName+")."+chr(13)+"Must be "+sTagFormat,Token) 579*1ecadb57SMathias Bauer End If 580*1ecadb57SMathias Bauer 581*1ecadb57SMathias Bauer If ubound(aInlineTagsOpen()) > 0 Then 582*1ecadb57SMathias Bauer If aInlineTagsOpen(ubound(aInlineTagsOpen())) <> sTagName Then 583*1ecadb57SMathias Bauer Terminate("Inline Element "+aInlineTagsOpen(ubound(aInlineTagsOpen()))+" not closed",Token) 584*1ecadb57SMathias Bauer End If 585*1ecadb57SMathias Bauer sDim = ubound(aInlineTagsOpen())-1 586*1ecadb57SMathias Bauer Else 587*1ecadb57SMathias Bauer Terminate("No opening tag for "+sTagName,Token) 588*1ecadb57SMathias Bauer End If 589*1ecadb57SMathias Bauer Redim Preserve aInlineTagsOpen(sDim) as String 590*1ecadb57SMathias Bauer 591*1ecadb57SMathias Bauer Else ' empty tag 592*1ecadb57SMathias Bauer sTagName = sTag 593*1ecadb57SMathias Bauer sTagFormat = TagFormatIsCorrect(sTagName, TE.ParaStyleName) 594*1ecadb57SMathias Bauer If sTagFormat <> "" Then 595*1ecadb57SMathias Bauer Terminate(sTagName+" element has wrong paragraph style ("+TE.ParaStyleName+")."+chr(13)+"Must be "+sTagFormat,Token) 596*1ecadb57SMathias Bauer End If 597*1ecadb57SMathias Bauer 598*1ecadb57SMathias Bauer EndIf 599*1ecadb57SMathias Bauer ElseIf (i > 1) AND (Trim(Token.String) <> "") Then 600*1ecadb57SMathias Bauer If aInlineTagsOpen(ubound(aInlineTagsOpen())) = "SWITCHINLINE" Then 601*1ecadb57SMathias Bauer Terminate("No text allowed here.",Token) 602*1ecadb57SMathias Bauer End If 603*1ecadb57SMathias Bauer End If 604*1ecadb57SMathias Bauer Next 605*1ecadb57SMathias Bauer 606*1ecadb57SMathias Bauer If ubound(aInlineTagsOpen()) > 0 Then 607*1ecadb57SMathias Bauer Terminate("Inline Element "+aInlineTagsOpen(ubound(aInlineTagsOpen()))+" not closed",Token) 608*1ecadb57SMathias Bauer End If 609*1ecadb57SMathias Bauer 610*1ecadb57SMathias Bauer End If 611*1ecadb57SMathias BauerEnd Sub 612*1ecadb57SMathias Bauer 613*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 614*1ecadb57SMathias Bauer' CHECK FOR CORRECT TAGS 615*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 616*1ecadb57SMathias BauerSub CheckTags(TE As Object) 617*1ecadb57SMathias Bauer If (Left(TE.ParaStyleName,8) = "hlp_aux_" AND TE.ParaStyleName <> "hlp_aux_bookmark") Then 618*1ecadb57SMathias Bauer 619*1ecadb57SMathias Bauer TP = TE.createEnumeration 620*1ecadb57SMathias Bauer 621*1ecadb57SMathias Bauer While TP.hasmoreElements 622*1ecadb57SMathias Bauer TPE = TP.nextElement 623*1ecadb57SMathias Bauer 624*1ecadb57SMathias Bauer If TPE.supportsService("com.sun.star.text.TextField") Then 625*1ecadb57SMathias Bauer sTag = TPE.TextField.TextFieldMaster.Name 626*1ecadb57SMathias Bauer If Right(sTag,1)="_" Then ' a tag starts 627*1ecadb57SMathias Bauer 628*1ecadb57SMathias Bauer sTagName = Left(sTag,Len(sTag)-1) 629*1ecadb57SMathias Bauer sDim = ubound(aTagsOpen())+1 630*1ecadb57SMathias Bauer Redim Preserve aTagsOpen(sDim) as String 631*1ecadb57SMathias Bauer aTagsOpen(sDim)=sTagName 632*1ecadb57SMathias Bauer 633*1ecadb57SMathias Bauer ElseIf Left(sTag,1)="_" Then ' a tag ends, all other cases are empty tags 634*1ecadb57SMathias Bauer 635*1ecadb57SMathias Bauer sTagName = Right(sTag,Len(sTag)-1) 636*1ecadb57SMathias Bauer If ubound(aTagsOpen()) > 0 Then 637*1ecadb57SMathias Bauer If aTagsOpen(ubound(aTagsOpen())) <> sTagName Then 638*1ecadb57SMathias Bauer Terminate("No close tag for "+aTagsOpen(ubound(aTagsOpen())),TPE) 639*1ecadb57SMathias Bauer Else 640*1ecadb57SMathias Bauer sDim = ubound(aTagsOpen())-1 641*1ecadb57SMathias Bauer End If 642*1ecadb57SMathias Bauer Else 643*1ecadb57SMathias Bauer Terminate("No opening tag for "+sTagName,TPE) 644*1ecadb57SMathias Bauer End If 645*1ecadb57SMathias Bauer Redim Preserve aTagsOpen(sDim) as String 646*1ecadb57SMathias Bauer 647*1ecadb57SMathias Bauer Else ' empty tags 648*1ecadb57SMathias Bauer 649*1ecadb57SMathias Bauer EndIf 650*1ecadb57SMathias Bauer End If 651*1ecadb57SMathias Bauer Wend 652*1ecadb57SMathias Bauer End If 653*1ecadb57SMathias BauerEnd Sub 654*1ecadb57SMathias Bauer 655*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 656*1ecadb57SMathias Bauer' CHECK FOR CORRECT TAGS IN A TABLE CELL 657*1ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 658*1ecadb57SMathias BauerSub CheckTagsInCell(CE As Object) 659*1ecadb57SMathias Bauer If (Left(CE.ParaStyleName,8) = "hlp_aux_" AND CE.ParaStyleName <> "hlp_aux_bookmark") Then 660*1ecadb57SMathias Bauer 661*1ecadb57SMathias Bauer CP = CE.createEnumeration 662*1ecadb57SMathias Bauer 663*1ecadb57SMathias Bauer While CP.hasmoreElements 664*1ecadb57SMathias Bauer CPE = CP.nextElement 665*1ecadb57SMathias Bauer 666*1ecadb57SMathias Bauer If CPE.supportsService("com.sun.star.text.TextField") Then 667*1ecadb57SMathias Bauer sTag = CPE.TextField.TextFieldMaster.Name 668*1ecadb57SMathias Bauer If Right(sTag,1)="_" Then ' a tag starts 669*1ecadb57SMathias Bauer 670*1ecadb57SMathias Bauer sTagName = Left(sTag,Len(sTag)-1) 671*1ecadb57SMathias Bauer sDim = ubound(aCellTagsOpen())+1 672*1ecadb57SMathias Bauer Redim Preserve aCellTagsOpen(sDim) as String 673*1ecadb57SMathias Bauer aCellTagsOpen(sDim)=sTagName 674*1ecadb57SMathias Bauer 675*1ecadb57SMathias Bauer ElseIf Left(sTag,1)="_" Then ' a tag ends, all other cases are empty tags 676*1ecadb57SMathias Bauer 677*1ecadb57SMathias Bauer sTagName = Right(sTag,Len(sTag)-1) 678*1ecadb57SMathias Bauer If ubound(aCellTagsOpen()) > 0 Then 679*1ecadb57SMathias Bauer If aCellTagsOpen(ubound(aCellTagsOpen())) <> sTagName Then 680*1ecadb57SMathias Bauer Terminate("No close tag for "+aCellTagsOpen(ubound(aCellTagsOpen())),CPE) 681*1ecadb57SMathias Bauer Else 682*1ecadb57SMathias Bauer sDim = ubound(aCellTagsOpen())-1 683*1ecadb57SMathias Bauer End If 684*1ecadb57SMathias Bauer Else 685*1ecadb57SMathias Bauer Terminate("No opening tag for "+sTagName,CPE) 686*1ecadb57SMathias Bauer End If 687*1ecadb57SMathias Bauer Redim Preserve aCellTagsOpen(sDim) as String 688*1ecadb57SMathias Bauer 689*1ecadb57SMathias Bauer EndIf 690*1ecadb57SMathias Bauer End If 691*1ecadb57SMathias Bauer Wend 692*1ecadb57SMathias Bauer End If 693*1ecadb57SMathias BauerEnd Sub 694*1ecadb57SMathias Bauer 695*1ecadb57SMathias Bauer</script:module>