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*de6e4772Smseidel * 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*de6e4772Smseidel * 133e02b54dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 14*de6e4772Smseidel * 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*de6e4772Smseidel * 223e02b54dSAndrew Rist ***********************************************************--> 231ecadb57SMathias Bauer<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Validate" script:language="StarBasic"> 241ecadb57SMathias Bauer'############################################ 251ecadb57SMathias Bauer' VALIDATION ROUTINES 261ecadb57SMathias Bauer'############################################ 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*de6e4772Smseidel oDoc = StarDesktop.CurrentComponent 571ecadb57SMathias Bauer sSwitchType = "" 581ecadb57SMathias Bauer sCaseType = "" 591ecadb57SMathias Bauer sDefaultType = "" 601ecadb57SMathias Bauer bWarn = TRUE 611ecadb57SMathias Bauer bWarnEmptyPara = TRUE 621ecadb57SMathias Bauer bWarnParaNoID = TRUE 631ecadb57SMathias Bauer 641ecadb57SMathias Bauer CheckMetaData(oDoc) 651ecadb57SMathias Bauer CheckHeading(oDoc) 66*de6e4772Smseidel 671ecadb57SMathias Bauer Enum = oDoc.Text.createEnumeration 681ecadb57SMathias Bauer Do While Enum.hasMoreElements 691ecadb57SMathias Bauer 701ecadb57SMathias Bauer TextElement = Enum.nextElement 711ecadb57SMathias Bauer If TextElement.supportsService("com.sun.star.text.Paragraph") Then ' we are a paragraph 72*de6e4772Smseidel 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("com.sun.star.text.TextTable") Then 801ecadb57SMathias Bauer 811ecadb57SMathias Bauer If sSwitchType <> "" AND (sCaseType = "" AND sDefaultType = "") Then '<------ 821ecadb57SMathias Bauer Terminate("Switch must be closed or case/default must be opened before a table starts.",tmpCellElement) 831ecadb57SMathias Bauer End If 841ecadb57SMathias Bauer 851ecadb57SMathias Bauer CheckCell(TextElement) 861ecadb57SMathias Bauer End If 87*de6e4772Smseidel Loop 881ecadb57SMathias Bauer 891ecadb57SMathias Bauer If sCaseType <> "" Then 901ecadb57SMathias Bauer Terminate("Previous case ("+sCaseType+") not closed!",TextElement) 911ecadb57SMathias Bauer End If 921ecadb57SMathias Bauer 931ecadb57SMathias Bauer If sDefaultType <> "" Then 941ecadb57SMathias Bauer Terminate("Previous default not closed!",TextElement) 951ecadb57SMathias Bauer End If 961ecadb57SMathias Bauer 971ecadb57SMathias Bauer If sSwitchType <> "" Then 981ecadb57SMathias Bauer Terminate("Previous switch ("+sSwitchType+") not closed!",TextElement) 991ecadb57SMathias Bauer End If 100*de6e4772Smseidel 1011ecadb57SMathias Bauer If ubound(aTagsOpen()) > 0 Then 1021ecadb57SMathias Bauer Terminate("Element "+aTagsOpen(ubound(aTagsOpen()))+" not closed",TextElement) 1031ecadb57SMathias Bauer End If 104*de6e4772Smseidel 1051ecadb57SMathias Bauer msgbox("Validation finished.") 106*de6e4772Smseidel 1071ecadb57SMathias BauerEnd Sub 1081ecadb57SMathias Bauer 1091ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1101ecadb57SMathias Bauer' CHECKCELL 1111ecadb57SMathias Bauer' checks a table cell contents 1121ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1131ecadb57SMathias Bauer 1141ecadb57SMathias BauerSub CheckCell(TE As Object) 1151ecadb57SMathias Bauer On Local Error Goto ERRHANDLE: 116*de6e4772Smseidel 1171ecadb57SMathias Bauer CellName = "A1" 1181ecadb57SMathias Bauer Cell = TE.getCellByName(CellName) 1191ecadb57SMathias Bauer tmpCellEnum = Cell.createEnumeration 1201ecadb57SMathias Bauer tmpCellElement = tmpCellEnum.nextElement 121*de6e4772Smseidel 1221ecadb57SMathias Bauer Rows = TE.getRows 1231ecadb57SMathias Bauer Cols = TE.getColumns 1241ecadb57SMathias Bauer 1251ecadb57SMathias Bauer ReDim aCellTagsOpen(0) 126*de6e4772Smseidel 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) & 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 ' <-- MODIFY, check closed switches within cells 1381ecadb57SMathias Bauer 1391ecadb57SMathias Bauer If CellElement.supportsService("com.sun.star.text.Paragraph") 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*de6e4772Smseidel 1491ecadb57SMathias Bauer If sCellCaseType <> "" Then 1501ecadb57SMathias Bauer Terminate("Previous case ("+sCellCaseType+") not closed!",CellElement) 1511ecadb57SMathias Bauer End If 1521ecadb57SMathias Bauer 1531ecadb57SMathias Bauer If sCellSwitchType <> "" Then 1541ecadb57SMathias Bauer Terminate("Previous switch ("+sCellSwitchType+") not closed!",CellElement) 1551ecadb57SMathias Bauer End If 156*de6e4772Smseidel 1571ecadb57SMathias Bauer If ubound(aCellTagsOpen()) > 0 Then 1581ecadb57SMathias Bauer Terminate("Element "+aCellTagsOpen(ubound(aCellTagsOpen()))+" not closed",CellElement) 1591ecadb57SMathias Bauer End If 160*de6e4772Smseidel 1611ecadb57SMathias Bauer Next 1621ecadb57SMathias Bauer Next 1631ecadb57SMathias Bauer 1641ecadb57SMathias Bauer ERRHANDLE: 1651ecadb57SMathias Bauer If Err <> 0 Then 1661ecadb57SMathias Bauer msgbox "Error: "+chr(13)+ Error$,48,"D'oh!" 1671ecadb57SMathias Bauer End If 1681ecadb57SMathias BauerEnd Sub 1691ecadb57SMathias Bauer 1701ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1711ecadb57SMathias Bauer' CHECK PARA ID 1721ecadb57SMathias Bauer' checks a paragraph for an ID 1731ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1741ecadb57SMathias Bauer 1751ecadb57SMathias BauerSub CheckParaID(TE As Object) 1761ecadb57SMathias Bauer 1771ecadb57SMathias Bauer If Left(TE.ParaStyleName,4) = "hlp_" AND Not(Left(TE.ParaStyleName,8) = "hlp_aux_") Then 1781ecadb57SMathias Bauer 1791ecadb57SMathias Bauer sText = TE.GetString 180*de6e4772Smseidel 1811ecadb57SMathias Bauer If sText = "" Then 1821ecadb57SMathias Bauer If bWarnEmptyPara Then 1831ecadb57SMathias Bauer Warn("Empty Paragraph","Empty paragraphs should be avoided. Do not use empty paragraphs for formatting purpose.",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="TextField" Then 1961ecadb57SMathias Bauer If TPE.TextField.TextFieldMaster.Name="ID" Then 1971ecadb57SMathias Bauer posID = Ct 1981ecadb57SMathias Bauer End If 1991ecadb57SMathias Bauer End If 2001ecadb57SMathias Bauer ' Lets cheat and allow empty strings before the ID -- otherwise we'll get 2011ecadb57SMathias Bauer ' a validation error if a paragraph starts at the top of a page after 2021ecadb57SMathias Bauer ' a page break (for whatever reason) 2031ecadb57SMathias Bauer If TPE.String = "" 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*de6e4772Smseidel Warn("Paragraph has no id.","IDs will be assigned on save. You can also assign an ID using the Assign Paragraph ID menu item",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 > 1 Then 2191ecadb57SMathias 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) 2201ecadb57SMathias Bauer End If 2211ecadb57SMathias Bauer 2221ecadb57SMathias Bauer End If 2231ecadb57SMathias Bauer 2241ecadb57SMathias Bauer End If 2251ecadb57SMathias BauerEnd Sub 2261ecadb57SMathias Bauer 2271ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2281ecadb57SMathias Bauer' CHECK PARA FORMAT 2291ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2301ecadb57SMathias BauerSub CheckParaFormat(TE As Object) 2311ecadb57SMathias Bauer 2321ecadb57SMathias Bauer sText = TE.GetString 2331ecadb57SMathias Bauer If Left(TE.ParaStyleName,4) <> "hlp_" AND sText <> "" Then ' just disregard empty paras in wrong formats 2341ecadb57SMathias Bauer Warn("Invalid paragraph format. Contents will be lost.",_ 2351ecadb57SMathias Bauer "Use only the paragraph styles starting with ""hlp_""."+_ 2361ecadb57SMathias Bauer " Paragraphs in other formats will be lost on export",TE) 2371ecadb57SMathias Bauer End If 2381ecadb57SMathias Bauer 2391ecadb57SMathias BauerEnd Sub 2401ecadb57SMathias Bauer 2411ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2421ecadb57SMathias Bauer' CHECK SWITCHES 2431ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2441ecadb57SMathias BauerSub CheckSwitches(TE As Object) 2451ecadb57SMathias Bauer 2461ecadb57SMathias Bauer If TE.ParaStyleName="hlp_aux_switch" Then ' we are a switch or case or default 2471ecadb57SMathias Bauer sText = TE.GetString ' get the switch contents 2481ecadb57SMathias Bauer 2491ecadb57SMathias Bauer If Left(sText,8) = "<SWITCH " Then ' an opening switch tag 2501ecadb57SMathias Bauer 2511ecadb57SMathias Bauer If sSwitchType = "" Then ' no other switch is open 2521ecadb57SMathias Bauer sSwitchType = Right(sText,Len(sText)-16) 2531ecadb57SMathias Bauer sSwitchType = Left(sSwitchType,InStr(sSwitchType,"""")-1) 2541ecadb57SMathias Bauer 2551ecadb57SMathias Bauer If (sSwitchType <> "sys" AND sSwitchType <> "appl" AND sSwitchType <> "distrib") Then 2561ecadb57SMathias Bauer Terminate("Unknown switch type """+sSwitchType+"""",TE) 2571ecadb57SMathias Bauer End If 2581ecadb57SMathias Bauer 2591ecadb57SMathias Bauer Else 2601ecadb57SMathias Bauer Terminate("Previous switch ("+sSwitchType+") not closed!",TE) 2611ecadb57SMathias Bauer End If 2621ecadb57SMathias Bauer 2631ecadb57SMathias Bauer End If ' OPENING SWITCH 264*de6e4772Smseidel 2651ecadb57SMathias Bauer If Left(sText,8) = "</SWITCH" Then ' a closing switch tag 2661ecadb57SMathias Bauer 2671ecadb57SMathias Bauer If sSwitchType = "" Then ' there was no switch open 2681ecadb57SMathias Bauer Terminate("No switch open!",TE) 2691ecadb57SMathias Bauer Else 2701ecadb57SMathias Bauer If not(bCaseSet OR bDefaultSet) Then 2711ecadb57SMathias Bauer Terminate("Empty switch",TE) 2721ecadb57SMathias Bauer End If 273*de6e4772Smseidel 2741ecadb57SMathias Bauer If sCaseType <> "" Then ' there is still a case open 2751ecadb57SMathias Bauer Terminate("Previous case ("+sCaseType+") not closed!",TE) 2761ecadb57SMathias Bauer End If 2771ecadb57SMathias Bauer sSwitchType = "" 2781ecadb57SMathias Bauer bDefaultSet = FALSE 2791ecadb57SMathias Bauer bCaseSet = FALSE 2801ecadb57SMathias Bauer End If 281*de6e4772Smseidel 2821ecadb57SMathias Bauer End If ' CLOSING SWITCH 283*de6e4772Smseidel 2841ecadb57SMathias Bauer If Left(sText,6) = "<CASE " Then ' an opening case tag 285*de6e4772Smseidel 2861ecadb57SMathias Bauer If bDefaultSet Then 2871ecadb57SMathias Bauer Terminate("No case after default allowed.",TE) 2881ecadb57SMathias Bauer End If 2891ecadb57SMathias Bauer 2901ecadb57SMathias Bauer If sCaseType = "" Then 2911ecadb57SMathias Bauer sCaseType = Right(sText,Len(sText)-14) 2921ecadb57SMathias Bauer sCaseType = Left(sCaseType,InStr(sCaseType,"""")-1) 2931ecadb57SMathias Bauer bCaseSet = TRUE 2941ecadb57SMathias Bauer If sSwitchType = "" Then 2951ecadb57SMathias Bauer Terminate("Case without switch",TE) 2961ecadb57SMathias Bauer End If 2971ecadb57SMathias Bauer Else 2981ecadb57SMathias Bauer Terminate("Previous case ("+sCaseType+") not closed!",TE) 2991ecadb57SMathias Bauer End If 3001ecadb57SMathias Bauer 3011ecadb57SMathias Bauer End If ' OPENING CASE 302*de6e4772Smseidel 3031ecadb57SMathias Bauer If Left(sText,6) = "</CASE" Then ' a closing case tag 3041ecadb57SMathias Bauer 3051ecadb57SMathias Bauer If sCaseType = "" Then 3061ecadb57SMathias Bauer Terminate("No case open!",TE) 3071ecadb57SMathias Bauer Else 3081ecadb57SMathias Bauer sCaseType = "" 3091ecadb57SMathias Bauer End If 3101ecadb57SMathias Bauer 3111ecadb57SMathias Bauer End If ' CLOSING CASE 312*de6e4772Smseidel 3131ecadb57SMathias Bauer If Left(sText,8) = "<DEFAULT" Then ' an opening default tag 3141ecadb57SMathias Bauer 3151ecadb57SMathias Bauer If sCaseType = "" Then 3161ecadb57SMathias Bauer If (sDefaultType <> "" OR bDefaultSet) Then 3171ecadb57SMathias Bauer Terminate("Multiple default not allowed.",TE) 3181ecadb57SMathias Bauer Else 3191ecadb57SMathias Bauer sDefaultType = "DEFAULT" 320*de6e4772Smseidel 3211ecadb57SMathias Bauer If sSwitchType = "" Then 3221ecadb57SMathias Bauer Terminate("Default without switch",TE) 3231ecadb57SMathias Bauer End If 3241ecadb57SMathias Bauer End If 3251ecadb57SMathias Bauer sDefaultType = "DEFAULT" 3261ecadb57SMathias Bauer bDefaultSet = TRUE 3271ecadb57SMathias Bauer Else 3281ecadb57SMathias Bauer Terminate("Previous case ("+sCaseType+") not closed!",TE) 3291ecadb57SMathias Bauer End If 3301ecadb57SMathias Bauer 3311ecadb57SMathias Bauer End If ' OPENING CASE 332*de6e4772Smseidel 3331ecadb57SMathias Bauer If Left(sText,9) = "</DEFAULT" Then ' a closing default tag 3341ecadb57SMathias Bauer 3351ecadb57SMathias Bauer If sDefaultType <> "DEFAULT" Then 3361ecadb57SMathias Bauer Terminate("No default open!",TE) 3371ecadb57SMathias Bauer Else 3381ecadb57SMathias Bauer sDefaultType = "" 3391ecadb57SMathias Bauer End If 3401ecadb57SMathias Bauer 3411ecadb57SMathias Bauer End If ' CLOSING CASE 3421ecadb57SMathias Bauer Else ' We are not hlp_aux_switch 3431ecadb57SMathias Bauer If (sSwitchType <> "" AND sCaseType = "" AND sDefaultType = "") Then 3441ecadb57SMathias Bauer Terminate("Nothing allowed between switch and case or default or /case or /default and /switch", TE) 3451ecadb57SMathias Bauer End If 346*de6e4772Smseidel End If 3471ecadb57SMathias Bauer 3481ecadb57SMathias BauerEnd Sub 3491ecadb57SMathias Bauer 3501ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3511ecadb57SMathias Bauer' CHECK SWITCHES IN A CELL 3521ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3531ecadb57SMathias BauerSub CheckSwitchesInCell(CE As Object) 3541ecadb57SMathias Bauer 3551ecadb57SMathias Bauer If CE.ParaStyleName="hlp_aux_switch" Then ' we are a switch or case or default 3561ecadb57SMathias Bauer sText = CE.GetString ' get the switch contents 3571ecadb57SMathias Bauer 3581ecadb57SMathias Bauer If Left(sText,8) = "<SWITCH " Then ' an opening switch tag 3591ecadb57SMathias Bauer 3601ecadb57SMathias Bauer If sCellSwitchType = "" Then ' no other switch is open 3611ecadb57SMathias Bauer sCellSwitchType = Right(sText,Len(sText)-16) 3621ecadb57SMathias Bauer sCellSwitchType = Left(sCellSwitchType,InStr(sCellSwitchType,"""")-1) 3631ecadb57SMathias Bauer 3641ecadb57SMathias Bauer If (sCellSwitchType <> "sys" AND sCellSwitchType <> "appl" AND sCellSwitchType <> "distrib") Then 3651ecadb57SMathias Bauer Terminate("Unknown switch type """+sCellSwitchType+"""",CE) 3661ecadb57SMathias Bauer End If 3671ecadb57SMathias Bauer 3681ecadb57SMathias Bauer Else 3691ecadb57SMathias Bauer Terminate("Previous switch ("+sCellSwitchType+") not closed!",CE) 3701ecadb57SMathias Bauer End If 3711ecadb57SMathias Bauer 3721ecadb57SMathias Bauer End If ' OPENING SWITCH 373*de6e4772Smseidel 3741ecadb57SMathias Bauer If Left(sText,8) = "</SWITCH" Then ' a closing switch tag 3751ecadb57SMathias Bauer 3761ecadb57SMathias Bauer If sCellSwitchType = "" Then ' there was no switch open 3771ecadb57SMathias Bauer Terminate("No switch open!",CE) 3781ecadb57SMathias Bauer Else 3791ecadb57SMathias Bauer If not(bCellCaseSet OR bCellDefaultSet) Then 3801ecadb57SMathias Bauer Terminate("Empty switch",CE) 3811ecadb57SMathias Bauer End If 382*de6e4772Smseidel 3831ecadb57SMathias Bauer If sCellCaseType <> "" Then ' there is still a case open 3841ecadb57SMathias Bauer Terminate("Previous case ("+sCellCaseType+") not closed!",CE) 3851ecadb57SMathias Bauer End If 3861ecadb57SMathias Bauer sCellSwitchType = "" 3871ecadb57SMathias Bauer bCellDefaultSet = FALSE 3881ecadb57SMathias Bauer bCellCaseSet = FALSE 3891ecadb57SMathias Bauer End If 390*de6e4772Smseidel 3911ecadb57SMathias Bauer End If ' CLOSING SWITCH 392*de6e4772Smseidel 3931ecadb57SMathias Bauer If Left(sText,6) = "<CASE " Then ' an opening case tag 3941ecadb57SMathias Bauer 3951ecadb57SMathias Bauer If bCellDefaultSet Then 3961ecadb57SMathias Bauer Terminate("No case after default allowed.",CE) 3971ecadb57SMathias Bauer End If 3981ecadb57SMathias Bauer 3991ecadb57SMathias Bauer If sCellCaseType = "" Then 4001ecadb57SMathias Bauer sCellCaseType = Right(sText,Len(sText)-14) 4011ecadb57SMathias Bauer sCellCaseType = Left(sCellCaseType,InStr(sCellCaseType,"""")-1) 4021ecadb57SMathias Bauer bCellCaseSet = TRUE 4031ecadb57SMathias Bauer If sCellSwitchType = "" Then 4041ecadb57SMathias Bauer Terminate("Case without switch",CE) 4051ecadb57SMathias Bauer End If 4061ecadb57SMathias Bauer Else 4071ecadb57SMathias Bauer Terminate("Previous case ("+sCellCaseType+") not closed!",CE) 4081ecadb57SMathias Bauer End If 4091ecadb57SMathias Bauer 4101ecadb57SMathias Bauer End If ' OPENING CASE 411*de6e4772Smseidel 4121ecadb57SMathias Bauer If Left(sText,6) = "</CASE" Then ' a closing case tag 4131ecadb57SMathias Bauer 4141ecadb57SMathias Bauer If sCellCaseType = "" Then 4151ecadb57SMathias Bauer Terminate("No case open!",CE) 4161ecadb57SMathias Bauer Else 4171ecadb57SMathias Bauer sCellCaseType = "" 4181ecadb57SMathias Bauer End If 4191ecadb57SMathias Bauer 4201ecadb57SMathias Bauer End If ' CLOSING CASE 421*de6e4772Smseidel 4221ecadb57SMathias Bauer If Left(sText,8) = "<DEFAULT" Then ' an opening default tag 4231ecadb57SMathias Bauer 4241ecadb57SMathias Bauer If sCellCaseType = "" Then 4251ecadb57SMathias Bauer If (sCellDefaultType <> "" OR bCellDefaultSet) Then 4261ecadb57SMathias Bauer Terminate("Multiple default not allowed.",CE) 4271ecadb57SMathias Bauer Else 4281ecadb57SMathias Bauer sCellDefaultType = "DEFAULT" 429*de6e4772Smseidel 4301ecadb57SMathias Bauer If sCellSwitchType = "" Then 4311ecadb57SMathias Bauer Terminate("Default without switch",CE) 4321ecadb57SMathias Bauer End If 4331ecadb57SMathias Bauer End If 4341ecadb57SMathias Bauer sCellDefaultType = "DEFAULT" 4351ecadb57SMathias Bauer bCellDefaultSet = TRUE 4361ecadb57SMathias Bauer Else 4371ecadb57SMathias Bauer Terminate("Previous case ("+sCellCaseType+") not closed!",CE) 4381ecadb57SMathias Bauer End If 4391ecadb57SMathias Bauer 4401ecadb57SMathias Bauer End If ' OPENING CASE 441*de6e4772Smseidel 4421ecadb57SMathias Bauer If Left(sText,9) = "</DEFAULT" Then ' a closing default tag 4431ecadb57SMathias Bauer 4441ecadb57SMathias Bauer If sCellDefaultType <> "DEFAULT" Then 4451ecadb57SMathias Bauer Terminate("No default open!",CE) 4461ecadb57SMathias Bauer Else 4471ecadb57SMathias Bauer sCellDefaultType = "" 4481ecadb57SMathias Bauer End If 4491ecadb57SMathias Bauer 4501ecadb57SMathias Bauer End If ' CLOSING CASE 4511ecadb57SMathias Bauer Else ' We are not hlp_aux_switch 4521ecadb57SMathias Bauer If (sCellSwitchType <> "" AND sCellCaseType = "" AND sCellDefaultType = "") Then 4531ecadb57SMathias Bauer Terminate("Nothing allowed between switch and case or default or /case or /default and /switch", CE) 4541ecadb57SMathias Bauer End If 455*de6e4772Smseidel End If 4561ecadb57SMathias Bauer 4571ecadb57SMathias Bauer 4581ecadb57SMathias BauerEnd Sub 4591ecadb57SMathias Bauer 4601ecadb57SMathias Bauer 4611ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4621ecadb57SMathias Bauer' TERMINATE VALIDATION WITH AN ERROR MESSAGE 4631ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4641ecadb57SMathias BauerSub Terminate(sStr As String, TE As Object) 4651ecadb57SMathias Bauer 4661ecadb57SMathias Bauer oCur = TE.getText.createTextCursorByRange(TE) 467*de6e4772Smseidel thiscomponent.getcurrentcontroller.select(oCur) 4681ecadb57SMathias Bauer msgbox sStr,48,"D'oh!" 4691ecadb57SMathias Bauer Stop 4701ecadb57SMathias Bauer 4711ecadb57SMathias BauerEnd Sub 4721ecadb57SMathias Bauer 4731ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4741ecadb57SMathias Bauer' SHOW A WARNING 4751ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4761ecadb57SMathias BauerSub Warn(sWarn As String, sSolv As String, Optional TE As Object) 4771ecadb57SMathias Bauer 4781ecadb57SMathias Bauer If bWarn Then 4791ecadb57SMathias Bauer BasicLibraries.LoadLibrary("HelpAuthoring") 4801ecadb57SMathias Bauer oDialog = LoadDialog("HelpAuthoring", "dlgWarn") 4811ecadb57SMathias Bauer oTxtWarn = oDialog.GetControl("txtWarning") 4821ecadb57SMathias Bauer oTxtWarn.Text = sWarn 4831ecadb57SMathias Bauer oTxtSolv = oDialog.GetControl("txtSolution") 4841ecadb57SMathias Bauer oTxtSolv.Text = sSolv 4851ecadb57SMathias Bauer 4861ecadb57SMathias Bauer If not(IsMissing(TE)) Then 4871ecadb57SMathias Bauer oCur = TE.getText.createTextCursorByRange(TE) 488*de6e4772Smseidel thiscomponent.getcurrentcontroller.select(oCur) 4891ecadb57SMathias Bauer End If 4901ecadb57SMathias Bauer 4911ecadb57SMathias Bauer If oDialog.Execute() = 1 Then 4921ecadb57SMathias Bauer oCbWarn = oDialog.GetControl("cbWarn") 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'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5041ecadb57SMathias Bauer' CHECK DOCUMENT META DATA 5051ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5061ecadb57SMathias BauerSub CheckMetaData(oDoc As Object) 5071ecadb57SMathias Bauer 5081ecadb57SMathias Bauer sTopicID = oDoc.DocumentInfo.GetUserFieldValue(1) 5091ecadb57SMathias Bauer 5101ecadb57SMathias Bauer If sTopicID <> AlphaNum(sTopicID) OR sTopicID="" Then 5111ecadb57SMathias Bauer sTopicID = "topic_"+CreateID ' 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="" OR sTitle="<Set Topic Title>" Then 5201ecadb57SMathias Bauer Enum = document.Text.createEnumeration 5211ecadb57SMathias Bauer Do While Enum.hasMoreElements 5221ecadb57SMathias Bauer TextElement = Enum.nextElement 5231ecadb57SMathias Bauer If TextElement.supportsService("com.sun.star.text.Paragraph") Then 5241ecadb57SMathias Bauer If Left(TextElement.ParaStyleName,8)="hlp_head" Then 5251ecadb57SMathias Bauer Enum2 = TextElement.createEnumeration 5261ecadb57SMathias Bauer While Enum2.hasMoreElements 5271ecadb57SMathias Bauer TextPortion = Enum2.nextElement 5281ecadb57SMathias Bauer If Not(TextPortion.TextPortionType="TextField") 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*de6e4772Smseidel 5411ecadb57SMathias BauerEnd Sub 5421ecadb57SMathias Bauer 5431ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5441ecadb57SMathias Bauer' CHECK IF HEADING EXISTS 5451ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5461ecadb57SMathias BauerSub CheckHeading(oDoc As Object) 5471ecadb57SMathias Bauer 5481ecadb57SMathias BauerEnd Sub 5491ecadb57SMathias Bauer 5501ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5511ecadb57SMathias Bauer' CHECK FOR CORRECT INLINE TAGS 5521ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5531ecadb57SMathias BauerSub CheckInlineTags(TE As Object) 5541ecadb57SMathias Bauer 555*de6e4772Smseidel 5561ecadb57SMathias Bauer 5571ecadb57SMathias Bauer If Left(TE.ParaStyleName,4)="hlp_" AND (Left(TE.ParaStyleName,8)<>"hlp_aux_" OR TE.ParaStyleName="hlp_aux_bookmark") Then 558*de6e4772Smseidel 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*de6e4772Smseidel 5721ecadb57SMathias Bauer If Token.supportsService("com.sun.star.text.TextField") Then 5731ecadb57SMathias Bauer sTag = Token.TextField.TextFieldMaster.Name 574*de6e4772Smseidel 5751ecadb57SMathias Bauer If Right(sTag,1)="_" Then ' a tag starts 576*de6e4772Smseidel 5771ecadb57SMathias Bauer sTagName = Left(sTag,Len(sTag)-1) 578*de6e4772Smseidel 5791ecadb57SMathias Bauer ' check for forbidden tags in paragraphs 5801ecadb57SMathias Bauer sTagFormat = TagFormatIsCorrect(sTagName, TE.ParaStyleName) 5811ecadb57SMathias Bauer If sTagFormat <> "" Then 5821ecadb57SMathias Bauer Terminate(sTagName+" element has wrong paragraph style ("+TE.ParaStyleName+")."+chr(13)+"Must be "+sTagFormat,Token) 5831ecadb57SMathias Bauer End If 584*de6e4772Smseidel 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)="_" Then ' a tag ends, all other cases are empty tags 590*de6e4772Smseidel 5911ecadb57SMathias Bauer sTagName = Right(sTag,Len(sTag)-1) 592*de6e4772Smseidel 5931ecadb57SMathias Bauer ' check for forbidden tags in paragraphs 5941ecadb57SMathias Bauer sTagFormat = TagFormatIsCorrect(sTagName, TE.ParaStyleName) 5951ecadb57SMathias Bauer If sTagFormat <> "" Then 5961ecadb57SMathias Bauer Terminate(sTagName+" element has wrong paragraph style ("+TE.ParaStyleName+")."+chr(13)+"Must be "+sTagFormat,Token) 5971ecadb57SMathias Bauer End If 598*de6e4772Smseidel 5991ecadb57SMathias Bauer If ubound(aInlineTagsOpen()) > 0 Then 6001ecadb57SMathias Bauer If aInlineTagsOpen(ubound(aInlineTagsOpen())) <> sTagName Then 601*de6e4772Smseidel Terminate("Inline Element "+aInlineTagsOpen(ubound(aInlineTagsOpen()))+" not closed",Token) 6021ecadb57SMathias Bauer End If 6031ecadb57SMathias Bauer sDim = ubound(aInlineTagsOpen())-1 6041ecadb57SMathias Bauer Else 6051ecadb57SMathias Bauer Terminate("No opening tag for "+sTagName,Token) 6061ecadb57SMathias Bauer End If 6071ecadb57SMathias Bauer Redim Preserve aInlineTagsOpen(sDim) as String 608*de6e4772Smseidel 6091ecadb57SMathias Bauer Else ' empty tag 6101ecadb57SMathias Bauer sTagName = sTag 6111ecadb57SMathias Bauer sTagFormat = TagFormatIsCorrect(sTagName, TE.ParaStyleName) 6121ecadb57SMathias Bauer If sTagFormat <> "" Then 6131ecadb57SMathias Bauer Terminate(sTagName+" element has wrong paragraph style ("+TE.ParaStyleName+")."+chr(13)+"Must be "+sTagFormat,Token) 6141ecadb57SMathias Bauer End If 615*de6e4772Smseidel 6161ecadb57SMathias Bauer EndIf 6171ecadb57SMathias Bauer ElseIf (i > 1) AND (Trim(Token.String) <> "") Then 6181ecadb57SMathias Bauer If aInlineTagsOpen(ubound(aInlineTagsOpen())) = "SWITCHINLINE" Then 6191ecadb57SMathias Bauer Terminate("No text allowed here.",Token) 6201ecadb57SMathias Bauer End If 6211ecadb57SMathias Bauer End If 622*de6e4772Smseidel Next 623*de6e4772Smseidel 6241ecadb57SMathias Bauer If ubound(aInlineTagsOpen()) > 0 Then 6251ecadb57SMathias Bauer Terminate("Inline Element "+aInlineTagsOpen(ubound(aInlineTagsOpen()))+" not closed",Token) 6261ecadb57SMathias Bauer End If 627*de6e4772Smseidel 6281ecadb57SMathias Bauer End If 6291ecadb57SMathias BauerEnd Sub 6301ecadb57SMathias Bauer 6311ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6321ecadb57SMathias Bauer' CHECK FOR CORRECT TAGS 6331ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6341ecadb57SMathias BauerSub CheckTags(TE As Object) 6351ecadb57SMathias Bauer If (Left(TE.ParaStyleName,8) = "hlp_aux_" AND TE.ParaStyleName <> "hlp_aux_bookmark") 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("com.sun.star.text.TextField") Then 6431ecadb57SMathias Bauer sTag = TPE.TextField.TextFieldMaster.Name 6441ecadb57SMathias Bauer If Right(sTag,1)="_" Then ' a tag starts 645*de6e4772Smseidel 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*de6e4772Smseidel 6511ecadb57SMathias Bauer ElseIf Left(sTag,1)="_" Then ' a tag ends, all other cases are empty tags 652*de6e4772Smseidel 6531ecadb57SMathias Bauer sTagName = Right(sTag,Len(sTag)-1) 6541ecadb57SMathias Bauer If ubound(aTagsOpen()) > 0 Then 6551ecadb57SMathias Bauer If aTagsOpen(ubound(aTagsOpen())) <> sTagName Then 6561ecadb57SMathias Bauer Terminate("No close tag for "+aTagsOpen(ubound(aTagsOpen())),TPE) 6571ecadb57SMathias Bauer Else 6581ecadb57SMathias Bauer sDim = ubound(aTagsOpen())-1 6591ecadb57SMathias Bauer End If 6601ecadb57SMathias Bauer Else 6611ecadb57SMathias Bauer Terminate("No opening tag for "+sTagName,TPE) 6621ecadb57SMathias Bauer End If 6631ecadb57SMathias Bauer Redim Preserve aTagsOpen(sDim) as String 6641ecadb57SMathias Bauer 6651ecadb57SMathias Bauer Else ' empty tags 666*de6e4772Smseidel 6671ecadb57SMathias Bauer EndIf 6681ecadb57SMathias Bauer End If 6691ecadb57SMathias Bauer Wend 6701ecadb57SMathias Bauer End If 6711ecadb57SMathias BauerEnd Sub 6721ecadb57SMathias Bauer 6731ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6741ecadb57SMathias Bauer' CHECK FOR CORRECT TAGS IN A TABLE CELL 6751ecadb57SMathias Bauer'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6761ecadb57SMathias BauerSub CheckTagsInCell(CE As Object) 6771ecadb57SMathias Bauer If (Left(CE.ParaStyleName,8) = "hlp_aux_" AND CE.ParaStyleName <> "hlp_aux_bookmark") 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("com.sun.star.text.TextField") Then 6851ecadb57SMathias Bauer sTag = CPE.TextField.TextFieldMaster.Name 6861ecadb57SMathias Bauer If Right(sTag,1)="_" Then ' a tag starts 687*de6e4772Smseidel 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*de6e4772Smseidel 6931ecadb57SMathias Bauer ElseIf Left(sTag,1)="_" Then ' a tag ends, all other cases are empty tags 694*de6e4772Smseidel 6951ecadb57SMathias Bauer sTagName = Right(sTag,Len(sTag)-1) 6961ecadb57SMathias Bauer If ubound(aCellTagsOpen()) > 0 Then 6971ecadb57SMathias Bauer If aCellTagsOpen(ubound(aCellTagsOpen())) <> sTagName Then 6981ecadb57SMathias Bauer Terminate("No close tag for "+aCellTagsOpen(ubound(aCellTagsOpen())),CPE) 6991ecadb57SMathias Bauer Else 7001ecadb57SMathias Bauer sDim = ubound(aCellTagsOpen())-1 7011ecadb57SMathias Bauer End If 7021ecadb57SMathias Bauer Else 7031ecadb57SMathias Bauer Terminate("No opening tag for "+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