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="Helpers" script:language="StarBasic">&apos; *** MODULE HELPERS ***
4*1ecadb57SMathias Bauer
5*1ecadb57SMathias Bauer&apos;=======================================================
6*1ecadb57SMathias Bauer&apos; Main
7*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
8*1ecadb57SMathias Bauer&apos; Ensure that necessary library functions are available
9*1ecadb57SMathias Bauer&apos;=======================================================
10*1ecadb57SMathias BauerSub Main
11*1ecadb57SMathias Bauer	GlobalScope.BasicLibraries.loadLibrary(&quot;Tools&quot;)
12*1ecadb57SMathias BauerEnd Sub
13*1ecadb57SMathias Bauer
14*1ecadb57SMathias Bauer&apos;=======================================================
15*1ecadb57SMathias Bauer&apos; ShowProp
16*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
17*1ecadb57SMathias Bauer&apos; Displays a dialog that shows the properties and
18*1ecadb57SMathias Bauer&apos; the methods of an object. Used for debugging.
19*1ecadb57SMathias Bauer&apos;=======================================================
20*1ecadb57SMathias BauerSub ShowProp(Elem As Object)
21*1ecadb57SMathias Bauer	dim oDialog As Object
22*1ecadb57SMathias Bauer
23*1ecadb57SMathias Bauer	BasicLibraries.LoadLibrary(&quot;HelpAuthoring&quot;)
24*1ecadb57SMathias Bauer	oDialog = LoadDialog(&quot;HelpAuthoring&quot;, &quot;dlgObjProp&quot;)
25*1ecadb57SMathias Bauer	oDialogModel = oDialog.Model
26*1ecadb57SMathias Bauer
27*1ecadb57SMathias Bauer	oTxtProp = oDialog.GetControl(&quot;txtProp&quot;)
28*1ecadb57SMathias Bauer	oTxtProp.Text = Join(Split(Elem.dbg_properties,&quot;;&quot;),chr(13))
29*1ecadb57SMathias Bauer
30*1ecadb57SMathias Bauer	oTxtMeth = oDialog.GetControl(&quot;txtMeth&quot;)
31*1ecadb57SMathias Bauer	oTxtMeth.Text = Join(Split(Elem.dbg_methods,&quot;;&quot;),chr(13))
32*1ecadb57SMathias Bauer
33*1ecadb57SMathias Bauer	oTxtInt = oDialog.GetControl(&quot;txtInt&quot;)
34*1ecadb57SMathias Bauer	oTxtInt.Text = Join(Split(Elem.dbg_supportedInterfaces,&quot;;&quot;),chr(13))
35*1ecadb57SMathias Bauer
36*1ecadb57SMathias Bauer	oDialog.Execute()
37*1ecadb57SMathias Bauer	oDialog.dispose
38*1ecadb57SMathias BauerEnd Sub
39*1ecadb57SMathias Bauer
40*1ecadb57SMathias Bauer&apos;=======================================================
41*1ecadb57SMathias Bauer&apos; AlphaNum
42*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
43*1ecadb57SMathias Bauer&apos; Removes all invalid characters from a string
44*1ecadb57SMathias Bauer&apos;=======================================================
45*1ecadb57SMathias BauerFunction AlphaNum(Strg As String)
46*1ecadb57SMathias Bauer	dim OutStrg As String
47*1ecadb57SMathias Bauer	dim sValid As String
48*1ecadb57SMathias Bauer
49*1ecadb57SMathias Bauer	sValid = &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789&quot;
50*1ecadb57SMathias Bauer
51*1ecadb57SMathias Bauer	For i=1 to Len(Strg)
52*1ecadb57SMathias Bauer		If (Instr(sValid,LCase(Mid(Strg,i,1)))) Then
53*1ecadb57SMathias Bauer			OutStrg = OutStrg + Mid(Strg,i,1)
54*1ecadb57SMathias Bauer		End If
55*1ecadb57SMathias Bauer	Next i
56*1ecadb57SMathias Bauer	AlphaNum = OutStrg
57*1ecadb57SMathias BauerEnd Function
58*1ecadb57SMathias Bauer
59*1ecadb57SMathias Bauer&apos;=======================================================
60*1ecadb57SMathias Bauer&apos; Replace
61*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
62*1ecadb57SMathias Bauer&apos; Replaces a character with another character in a string
63*1ecadb57SMathias Bauer&apos;=======================================================
64*1ecadb57SMathias BauerFunction Replace(txt As String, ReplaceFrom As String, ReplaceTo As String)
65*1ecadb57SMathias Bauer	dim OutStr As String
66*1ecadb57SMathias Bauer	For i=1 to len(txt)
67*1ecadb57SMathias Bauer		If LCase(mid(txt,i,1))=ReplaceFrom Then
68*1ecadb57SMathias Bauer			OutStr = OutStr + ReplaceTo
69*1ecadb57SMathias Bauer		Else
70*1ecadb57SMathias Bauer			OutStr = OutStr + mid(txt,i,1)
71*1ecadb57SMathias Bauer		End If
72*1ecadb57SMathias Bauer	Next i
73*1ecadb57SMathias Bauer	Replace = OutStr
74*1ecadb57SMathias BauerEnd Function
75*1ecadb57SMathias Bauer
76*1ecadb57SMathias Bauer
77*1ecadb57SMathias Bauer&apos;=======================================================
78*1ecadb57SMathias Bauer&apos; ReplaceAll
79*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
80*1ecadb57SMathias Bauer&apos; Replaces a character with another character in a string
81*1ecadb57SMathias Bauer&apos;=======================================================
82*1ecadb57SMathias BauerFunction ReplaceAll(txt As String, ReplaceFrom As String, ReplaceTo As String)
83*1ecadb57SMathias Bauer	dim OutStr As String
84*1ecadb57SMathias Bauer	For i=1 to len(txt)
85*1ecadb57SMathias Bauer	    bFound = 0
86*1ecadb57SMathias Bauer		For j=1 to len(ReplaceFrom)
87*1ecadb57SMathias Bauer			If LCase(mid(txt,i,1))=LCase(mid(ReplaceFrom,j,1)) Then
88*1ecadb57SMathias Bauer				bFound = 1
89*1ecadb57SMathias Bauer				OutStr = OutStr + ReplaceTo
90*1ecadb57SMathias Bauer				j = len(ReplaceFrom)
91*1ecadb57SMathias Bauer			End If
92*1ecadb57SMathias Bauer		Next j
93*1ecadb57SMathias Bauer		If bFound=0 Then
94*1ecadb57SMathias Bauer			OutStr = OutStr + mid(txt,i,1)
95*1ecadb57SMathias Bauer		End If
96*1ecadb57SMathias Bauer	Next i
97*1ecadb57SMathias Bauer	ReplaceAll = OutStr
98*1ecadb57SMathias BauerEnd Function
99*1ecadb57SMathias Bauer
100*1ecadb57SMathias Bauer
101*1ecadb57SMathias Bauer
102*1ecadb57SMathias Bauer&apos;=======================================================
103*1ecadb57SMathias Bauer&apos; CreateID
104*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
105*1ecadb57SMathias Bauer&apos; Creates a numerical randomized ID
106*1ecadb57SMathias Bauer&apos;=======================================================
107*1ecadb57SMathias BauerFunction CreateID
108*1ecadb57SMathias Bauer	sDate = ReplaceAll(Date,&quot;/:. \&quot;,&quot;&quot;)
109*1ecadb57SMathias Bauer    sTime = ReplaceAll(Time,&quot;/:. \AMP&quot;,&quot;&quot;)
110*1ecadb57SMathias Bauer	Randomize
111*1ecadb57SMathias Bauer	CreateID = sDate + sTime + Int(Rnd * 100)
112*1ecadb57SMathias BauerEnd Function
113*1ecadb57SMathias Bauer
114*1ecadb57SMathias Bauer&apos;=======================================================
115*1ecadb57SMathias Bauer&apos; InsertTag
116*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
117*1ecadb57SMathias Bauer&apos; Inserts an inline tag (element) in the document at the
118*1ecadb57SMathias Bauer&apos; current cursor position. It also sets the character
119*1ecadb57SMathias Bauer&apos; format to hlp_aux_tag
120*1ecadb57SMathias Bauer&apos;=======================================================
121*1ecadb57SMathias BauerSub InsertTag (Element As String, Content As String)
122*1ecadb57SMathias Bauer	dim document   as object
123*1ecadb57SMathias Bauer	dim dispatcher as object
124*1ecadb57SMathias Bauer
125*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
126*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
127*1ecadb57SMathias Bauer
128*1ecadb57SMathias Bauer	dim args(5) as new com.sun.star.beans.PropertyValue
129*1ecadb57SMathias Bauer	args(0).Name = &quot;Type&quot;
130*1ecadb57SMathias Bauer	args(0).Value = 8
131*1ecadb57SMathias Bauer	args(1).Name = &quot;SubType&quot;
132*1ecadb57SMathias Bauer	args(1).Value = 1
133*1ecadb57SMathias Bauer	args(2).Name = &quot;Name&quot;
134*1ecadb57SMathias Bauer	args(2).Value = Element
135*1ecadb57SMathias Bauer	args(3).Name = &quot;Content&quot;
136*1ecadb57SMathias Bauer	args(3).Value = Content
137*1ecadb57SMathias Bauer	args(4).Name = &quot;Format&quot;
138*1ecadb57SMathias Bauer	args(4).Value = -1
139*1ecadb57SMathias Bauer	args(5).Name = &quot;Separator&quot;
140*1ecadb57SMathias Bauer	args(5).Value = &quot; &quot;
141*1ecadb57SMathias Bauer	SetCharStyle(&quot;hlp_aux_tag&quot;)
142*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:InsertField&quot;, &quot;&quot;, 0, args())
143*1ecadb57SMathias Bauer	SetCharStyle(&quot;Default&quot;)
144*1ecadb57SMathias BauerEnd Sub
145*1ecadb57SMathias Bauer
146*1ecadb57SMathias Bauer&apos;=======================================================
147*1ecadb57SMathias Bauer&apos; INSERTTAGCR
148*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
149*1ecadb57SMathias Bauer&apos; Inserts a tag (element) in the document at the
150*1ecadb57SMathias Bauer&apos; current cursor position in its own newly created paragraph.
151*1ecadb57SMathias Bauer&apos; It also sets the character format to hlp_aux_tag and
152*1ecadb57SMathias Bauer&apos; the paragraph to the specified value (should start with hlp_)
153*1ecadb57SMathias Bauer&apos;=======================================================
154*1ecadb57SMathias BauerSub InsertTagCR (Element As String, Content As String, Style As String)
155*1ecadb57SMathias Bauer	dim document   as object
156*1ecadb57SMathias Bauer	dim dispatcher as object
157*1ecadb57SMathias Bauer
158*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
159*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
160*1ecadb57SMathias Bauer
161*1ecadb57SMathias Bauer	dim args(5) as new com.sun.star.beans.PropertyValue
162*1ecadb57SMathias Bauer	args(0).Name = &quot;Type&quot;
163*1ecadb57SMathias Bauer	args(0).Value = 8
164*1ecadb57SMathias Bauer	args(1).Name = &quot;SubType&quot;
165*1ecadb57SMathias Bauer	args(1).Value = 1
166*1ecadb57SMathias Bauer	args(2).Name = &quot;Name&quot;
167*1ecadb57SMathias Bauer	args(2).Value = Element
168*1ecadb57SMathias Bauer	args(3).Name = &quot;Content&quot;
169*1ecadb57SMathias Bauer	args(3).Value = Content
170*1ecadb57SMathias Bauer	args(4).Name = &quot;Format&quot;
171*1ecadb57SMathias Bauer	args(4).Value = -1
172*1ecadb57SMathias Bauer	args(5).Name = &quot;Separator&quot;
173*1ecadb57SMathias Bauer	args(5).Value = &quot; &quot;
174*1ecadb57SMathias Bauer
175*1ecadb57SMathias Bauer	CR
176*1ecadb57SMathias Bauer	goUp(1)
177*1ecadb57SMathias Bauer	SetParaStyle(Style)
178*1ecadb57SMathias Bauer	SetCharStyle(&quot;hlp_aux_tag&quot;)
179*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:InsertField&quot;, &quot;&quot;, 0, args())
180*1ecadb57SMathias Bauer	SetCharStyle(&quot;Default&quot;)
181*1ecadb57SMathias Bauer	goDown(1)
182*1ecadb57SMathias BauerEnd Sub
183*1ecadb57SMathias Bauer
184*1ecadb57SMathias Bauer&apos;=======================================================
185*1ecadb57SMathias Bauer&apos; InsertField
186*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
187*1ecadb57SMathias Bauer&apos; Inserts a field in the document at the
188*1ecadb57SMathias Bauer&apos; current cursor position.
189*1ecadb57SMathias Bauer&apos;=======================================================
190*1ecadb57SMathias BauerSub InsertField(Field as String, Content as String)
191*1ecadb57SMathias Bauer	dim document   as object
192*1ecadb57SMathias Bauer	dim dispatcher as object
193*1ecadb57SMathias Bauer
194*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
195*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
196*1ecadb57SMathias Bauer
197*1ecadb57SMathias Bauer	dim args(5) as new com.sun.star.beans.PropertyValue
198*1ecadb57SMathias Bauer	args(0).Name = &quot;Type&quot;
199*1ecadb57SMathias Bauer	args(0).Value = 8
200*1ecadb57SMathias Bauer	args(1).Name = &quot;SubType&quot;
201*1ecadb57SMathias Bauer	args(1).Value = 1
202*1ecadb57SMathias Bauer	args(2).Name = &quot;Name&quot;
203*1ecadb57SMathias Bauer	args(2).Value = Field
204*1ecadb57SMathias Bauer	args(3).Name = &quot;Content&quot;
205*1ecadb57SMathias Bauer	args(3).Value = Content
206*1ecadb57SMathias Bauer	args(4).Name = &quot;Format&quot;
207*1ecadb57SMathias Bauer	args(4).Value = -1
208*1ecadb57SMathias Bauer	args(5).Name = &quot;Separator&quot;
209*1ecadb57SMathias Bauer	args(5).Value = &quot; &quot;
210*1ecadb57SMathias Bauer
211*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:InsertField&quot;, &quot;&quot;, 0, args())
212*1ecadb57SMathias BauerEnd Sub
213*1ecadb57SMathias Bauer
214*1ecadb57SMathias Bauer&apos;=======================================================
215*1ecadb57SMathias Bauer&apos; GoUp
216*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
217*1ecadb57SMathias Bauer&apos; Simulates the CursorUp key
218*1ecadb57SMathias Bauer&apos;=======================================================
219*1ecadb57SMathias BauerSub goUp(Count As Integer, Optional bSelect As Boolean)
220*1ecadb57SMathias Bauer	dim document   as object
221*1ecadb57SMathias Bauer	dim dispatcher as object
222*1ecadb57SMathias Bauer
223*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
224*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
225*1ecadb57SMathias Bauer
226*1ecadb57SMathias Bauer	dim args(1) as new com.sun.star.beans.PropertyValue
227*1ecadb57SMathias Bauer	args(0).Name = &quot;Count&quot;
228*1ecadb57SMathias Bauer	args(0).Value = Count
229*1ecadb57SMathias Bauer	args(1).Name = &quot;Select&quot;
230*1ecadb57SMathias Bauer	If IsMissing(bSelect) Then
231*1ecadb57SMathias Bauer		args(1).Value = false
232*1ecadb57SMathias Bauer	Else
233*1ecadb57SMathias Bauer		args(1).Value = bSelect
234*1ecadb57SMathias Bauer	End If
235*1ecadb57SMathias Bauer
236*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:GoUp&quot;, &quot;&quot;, 0, args())
237*1ecadb57SMathias BauerEnd Sub
238*1ecadb57SMathias Bauer
239*1ecadb57SMathias Bauer&apos;=======================================================
240*1ecadb57SMathias Bauer&apos; GoDown
241*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
242*1ecadb57SMathias Bauer&apos; Simulates the CursorDown key
243*1ecadb57SMathias Bauer&apos;=======================================================
244*1ecadb57SMathias BauerSub goDown(Count As Integer, Optional bSelect As Boolean)
245*1ecadb57SMathias Bauer	dim document   as object
246*1ecadb57SMathias Bauer	dim dispatcher as object
247*1ecadb57SMathias Bauer
248*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
249*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
250*1ecadb57SMathias Bauer
251*1ecadb57SMathias Bauer	dim args(1) as new com.sun.star.beans.PropertyValue
252*1ecadb57SMathias Bauer	args(0).Name = &quot;Count&quot;
253*1ecadb57SMathias Bauer	args(0).Value = Count
254*1ecadb57SMathias Bauer	args(1).Name = &quot;Select&quot;
255*1ecadb57SMathias Bauer	If IsMissing(bSelect) Then
256*1ecadb57SMathias Bauer		args(1).Value = false
257*1ecadb57SMathias Bauer	Else
258*1ecadb57SMathias Bauer		args(1).Value = bSelect
259*1ecadb57SMathias Bauer	End If
260*1ecadb57SMathias Bauer
261*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:GoDown&quot;, &quot;&quot;, 0, args())
262*1ecadb57SMathias BauerEnd Sub
263*1ecadb57SMathias Bauer
264*1ecadb57SMathias Bauer
265*1ecadb57SMathias Bauer&apos;=======================================================
266*1ecadb57SMathias Bauer&apos; GoRight
267*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
268*1ecadb57SMathias Bauer&apos; Simulates the CursorRight key
269*1ecadb57SMathias Bauer&apos;=======================================================
270*1ecadb57SMathias BauerSub goRight(Count As Integer, Optional bSelect As Boolean)
271*1ecadb57SMathias Bauer	dim document   as object
272*1ecadb57SMathias Bauer	dim dispatcher as object
273*1ecadb57SMathias Bauer
274*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
275*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
276*1ecadb57SMathias Bauer
277*1ecadb57SMathias Bauer	dim args(1) as new com.sun.star.beans.PropertyValue
278*1ecadb57SMathias Bauer	args(0).Name = &quot;Count&quot;
279*1ecadb57SMathias Bauer	args(0).Value = Count
280*1ecadb57SMathias Bauer	args(1).Name = &quot;Select&quot;
281*1ecadb57SMathias Bauer	If IsMissing(bSelect) Then
282*1ecadb57SMathias Bauer		args(1).Value = false
283*1ecadb57SMathias Bauer	Else
284*1ecadb57SMathias Bauer		args(1).Value = bSelect
285*1ecadb57SMathias Bauer	End If
286*1ecadb57SMathias Bauer
287*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:GoRight&quot;, &quot;&quot;, 0, args())
288*1ecadb57SMathias BauerEnd Sub
289*1ecadb57SMathias Bauer
290*1ecadb57SMathias Bauer&apos;=======================================================
291*1ecadb57SMathias Bauer&apos; GoLeft
292*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
293*1ecadb57SMathias Bauer&apos; Simulates the CursorLeft key
294*1ecadb57SMathias Bauer&apos;=======================================================
295*1ecadb57SMathias BauerSub goLeft(Count As Integer, optional bSelect As boolean)
296*1ecadb57SMathias Bauer	dim document   as object
297*1ecadb57SMathias Bauer	dim dispatcher as object
298*1ecadb57SMathias Bauer
299*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
300*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
301*1ecadb57SMathias Bauer
302*1ecadb57SMathias Bauer	dim args(1) as new com.sun.star.beans.PropertyValue
303*1ecadb57SMathias Bauer	args(0).Name = &quot;Count&quot;
304*1ecadb57SMathias Bauer	args(0).Value = Count
305*1ecadb57SMathias Bauer	args(1).Name = &quot;Select&quot;
306*1ecadb57SMathias Bauer	If IsMissing(bSelect) Then
307*1ecadb57SMathias Bauer		args(1).Value = false
308*1ecadb57SMathias Bauer	Else
309*1ecadb57SMathias Bauer		args(1).Value = bSelect
310*1ecadb57SMathias Bauer	End If
311*1ecadb57SMathias Bauer
312*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:GoLeft&quot;, &quot;&quot;, 0, args())
313*1ecadb57SMathias BauerEnd Sub
314*1ecadb57SMathias Bauer
315*1ecadb57SMathias Bauer&apos;=======================================================
316*1ecadb57SMathias Bauer&apos; CR
317*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
318*1ecadb57SMathias Bauer&apos; Inserts a Carriage Return (a new paragraph)
319*1ecadb57SMathias Bauer&apos;=======================================================
320*1ecadb57SMathias BauerSub CR
321*1ecadb57SMathias Bauer	dim document   as object
322*1ecadb57SMathias Bauer	dim dispatcher as object
323*1ecadb57SMathias Bauer
324*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
325*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
326*1ecadb57SMathias Bauer
327*1ecadb57SMathias Bauer	oSel = thiscomponent.getcurrentcontroller.getselection
328*1ecadb57SMathias Bauer	oCur = oSel(0).getText.createTextCursorByRange(oSel(0))
329*1ecadb57SMathias Bauer	oCur.gotoEndOfParagraph(0)
330*1ecadb57SMathias Bauer	thiscomponent.getcurrentcontroller.select(oCur)
331*1ecadb57SMathias Bauer
332*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:InsertPara&quot;, &quot;&quot;, 0, Array())
333*1ecadb57SMathias BauerEnd Sub
334*1ecadb57SMathias Bauer
335*1ecadb57SMathias Bauer&apos;=======================================================
336*1ecadb57SMathias Bauer&apos; CR_before
337*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
338*1ecadb57SMathias Bauer&apos; Inserts a Carriage Return (a new paragraph) before the current para
339*1ecadb57SMathias Bauer&apos;=======================================================
340*1ecadb57SMathias BauerSub CR_before
341*1ecadb57SMathias Bauer	dim document   as object
342*1ecadb57SMathias Bauer	dim dispatcher as object
343*1ecadb57SMathias Bauer
344*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
345*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
346*1ecadb57SMathias Bauer
347*1ecadb57SMathias Bauer	oSel = thiscomponent.getcurrentcontroller.getselection
348*1ecadb57SMathias Bauer	oCur = oSel(0).getText.createTextCursorByRange(oSel(0))
349*1ecadb57SMathias Bauer	oCur.gotoStartOfParagraph(0)
350*1ecadb57SMathias Bauer	thiscomponent.getcurrentcontroller.select(oCur)
351*1ecadb57SMathias Bauer
352*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:InsertPara&quot;, &quot;&quot;, 0, Array())
353*1ecadb57SMathias BauerEnd Sub
354*1ecadb57SMathias Bauer
355*1ecadb57SMathias Bauer&apos;=======================================================
356*1ecadb57SMathias Bauer&apos; LF
357*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
358*1ecadb57SMathias Bauer&apos; Inserts a line feed (manual line break)
359*1ecadb57SMathias Bauer&apos;=======================================================
360*1ecadb57SMathias Bauersub LF
361*1ecadb57SMathias Bauer	dim document   as object
362*1ecadb57SMathias Bauer	dim dispatcher as object
363*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
364*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
365*1ecadb57SMathias Bauer
366*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:InsertLinebreak&quot;, &quot;&quot;, 0, Array())
367*1ecadb57SMathias Bauerend sub
368*1ecadb57SMathias Bauer
369*1ecadb57SMathias Bauer&apos;=======================================================
370*1ecadb57SMathias Bauer&apos; SetParaStyle
371*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
372*1ecadb57SMathias Bauer&apos; Sets the para style to the given value
373*1ecadb57SMathias Bauer&apos;=======================================================
374*1ecadb57SMathias BauerSub SetParaStyle(StyleName As String)
375*1ecadb57SMathias Bauer	dim document   as object
376*1ecadb57SMathias Bauer	dim dispatcher as object
377*1ecadb57SMathias Bauer
378*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
379*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
380*1ecadb57SMathias Bauer
381*1ecadb57SMathias Bauer	dim args(1) as new com.sun.star.beans.PropertyValue
382*1ecadb57SMathias Bauer	args(0).Name = &quot;Template&quot;
383*1ecadb57SMathias Bauer	args(0).Value = StyleName
384*1ecadb57SMathias Bauer	args(1).Name = &quot;Family&quot;
385*1ecadb57SMathias Bauer	args(1).Value = 2
386*1ecadb57SMathias Bauer
387*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:StyleApply&quot;, &quot;&quot;, 0, args())
388*1ecadb57SMathias Bauerend Sub
389*1ecadb57SMathias Bauer
390*1ecadb57SMathias Bauer&apos;=======================================================
391*1ecadb57SMathias Bauer&apos; SetCharStyle
392*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
393*1ecadb57SMathias Bauer&apos; Sets the character style to the given value
394*1ecadb57SMathias Bauer&apos;=======================================================
395*1ecadb57SMathias BauerSub SetCharStyle(StyleName As String)
396*1ecadb57SMathias Bauer	dim document   as object
397*1ecadb57SMathias Bauer	dim dispatcher as object
398*1ecadb57SMathias Bauer
399*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
400*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
401*1ecadb57SMathias Bauer
402*1ecadb57SMathias Bauer	dim args(1) as new com.sun.star.beans.PropertyValue
403*1ecadb57SMathias Bauer	args(0).Name = &quot;Template&quot;
404*1ecadb57SMathias Bauer	args(0).Value = StyleName
405*1ecadb57SMathias Bauer	args(1).Name = &quot;Family&quot;
406*1ecadb57SMathias Bauer	args(1).Value = 1
407*1ecadb57SMathias Bauer
408*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:StyleApply&quot;, &quot;&quot;, 0, args())
409*1ecadb57SMathias Bauerend Sub
410*1ecadb57SMathias Bauer
411*1ecadb57SMathias Bauer&apos;=======================================================
412*1ecadb57SMathias Bauer&apos; InsertNewParaData
413*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
414*1ecadb57SMathias Bauer&apos; Inserts a new ID for the paragraph
415*1ecadb57SMathias Bauer&apos;=======================================================
416*1ecadb57SMathias BauerSub InsertNewParaData
417*1ecadb57SMathias Bauer
418*1ecadb57SMathias Bauer		If not IsHelpFile Then
419*1ecadb57SMathias Bauer		msgbox(strErr_NoHelpFile)
420*1ecadb57SMathias Bauer		Exit Sub
421*1ecadb57SMathias Bauer	End If
422*1ecadb57SMathias Bauer
423*1ecadb57SMathias Bauer	oSel = thiscomponent.getcurrentcontroller.getselection
424*1ecadb57SMathias Bauer	oCur = oSel(0).getText.createTextCursorByRange(oSel(0))
425*1ecadb57SMathias Bauer
426*1ecadb57SMathias Bauer	arParaData = GetParaData
427*1ecadb57SMathias Bauer	sID = arParaData(0)
428*1ecadb57SMathias Bauer	slocalize = arParaData(1)
429*1ecadb57SMathias Bauer	sMsg = arParaData(2)
430*1ecadb57SMathias Bauer
431*1ecadb57SMathias Bauer	If sMsg &lt;&gt; &quot;&quot; Then
432*1ecadb57SMathias Bauer		msgbox &quot;Cannot assign paragraph id:&quot;+chr(13)+sMsg,48,&quot;Error&quot;
433*1ecadb57SMathias Bauer		Exit Sub
434*1ecadb57SMathias Bauer	End If
435*1ecadb57SMathias Bauer
436*1ecadb57SMathias Bauer	If sID &lt;&gt; &quot;&quot; Then
437*1ecadb57SMathias Bauer		msgbox &quot;Paragraph already has an ID.&quot;+chr(13)+&quot;If you want to assign a new ID delete the existing one first.&quot;,48,&quot;Error&quot;
438*1ecadb57SMathias Bauer		Exit Sub
439*1ecadb57SMathias Bauer	End If
440*1ecadb57SMathias Bauer
441*1ecadb57SMathias Bauer	oCur.gotoStartOfParagraph(0)
442*1ecadb57SMathias Bauer
443*1ecadb57SMathias Bauer	If (Left(oCur.ParaStyleName,8) = &quot;hlp_head&quot;) Then
444*1ecadb57SMathias Bauer		id = &quot;hd_id&quot; + CreateID
445*1ecadb57SMathias Bauer		thiscomponent.getcurrentcontroller.select(oCur)
446*1ecadb57SMathias Bauer		MetaData = id
447*1ecadb57SMathias Bauer		SetCharStyle(&quot;hlp_aux_parachanged&quot;)
448*1ecadb57SMathias Bauer		InsertField(&quot;ID&quot;,MetaData)
449*1ecadb57SMathias Bauer		SetCharStyle(&quot;Default&quot;)
450*1ecadb57SMathias Bauer	Else
451*1ecadb57SMathias Bauer		id = &quot;par_id&quot; + CreateID
452*1ecadb57SMathias Bauer		thiscomponent.getcurrentcontroller.select(oCur)
453*1ecadb57SMathias Bauer		MetaData = id
454*1ecadb57SMathias Bauer		SetCharStyle(&quot;hlp_aux_parachanged&quot;)
455*1ecadb57SMathias Bauer		InsertField(&quot;ID&quot;,MetaData)
456*1ecadb57SMathias Bauer		SetCharStyle(&quot;Default&quot;)
457*1ecadb57SMathias Bauer	End If
458*1ecadb57SMathias Bauer
459*1ecadb57SMathias Bauer
460*1ecadb57SMathias BauerEnd Sub
461*1ecadb57SMathias Bauer
462*1ecadb57SMathias Bauer&apos;=======================================================
463*1ecadb57SMathias Bauer&apos; LoadDialog
464*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
465*1ecadb57SMathias Bauer&apos; Loads a BASIC dialog
466*1ecadb57SMathias Bauer&apos;=======================================================
467*1ecadb57SMathias BauerFunction LoadDialog(Libname as String, DialogName as String, Optional oLibContainer)
468*1ecadb57SMathias Bauer	Dim oLib as Object
469*1ecadb57SMathias Bauer	Dim oLibDialog as Object
470*1ecadb57SMathias Bauer	Dim oRuntimeDialog as Object
471*1ecadb57SMathias Bauer
472*1ecadb57SMathias Bauer	If IsMissing(oLibContainer ) then
473*1ecadb57SMathias Bauer		oLibContainer = DialogLibraries
474*1ecadb57SMathias Bauer	End If
475*1ecadb57SMathias Bauer
476*1ecadb57SMathias Bauer	oLibContainer.LoadLibrary(LibName)
477*1ecadb57SMathias Bauer	oLib = oLibContainer.GetByName(Libname)
478*1ecadb57SMathias Bauer	oLibDialog = oLib.GetByName(DialogName)
479*1ecadb57SMathias Bauer	oRuntimeDialog = CreateUnoDialog(oLibDialog)
480*1ecadb57SMathias Bauer	LoadDialog() = oRuntimeDialog
481*1ecadb57SMathias BauerEnd Function
482*1ecadb57SMathias Bauer
483*1ecadb57SMathias Bauer&apos;=======================================================
484*1ecadb57SMathias Bauer&apos; Surprise
485*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
486*1ecadb57SMathias Bauer&apos; D&apos;oh
487*1ecadb57SMathias Bauer&apos;=======================================================
488*1ecadb57SMathias BauerSub Surprise
489*1ecadb57SMathias Bauer	msgbox &quot;This function is unsupported.&quot;+chr(13)+&quot;If you know how to implement this -- go ahead!&quot;,0,&quot;D&apos;oh!&quot;
490*1ecadb57SMathias BauerEnd Sub
491*1ecadb57SMathias Bauer
492*1ecadb57SMathias Bauer&apos;=======================================================
493*1ecadb57SMathias Bauer&apos; InsertNote
494*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
495*1ecadb57SMathias Bauer&apos; Inserts a note (annotation) at the current position
496*1ecadb57SMathias Bauer&apos;=======================================================
497*1ecadb57SMathias Bauersub InsertNote(Content As String)
498*1ecadb57SMathias Bauer	dim document   as object
499*1ecadb57SMathias Bauer	dim dispatcher as object
500*1ecadb57SMathias Bauer
501*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
502*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
503*1ecadb57SMathias Bauer
504*1ecadb57SMathias Bauer	dim args(2) as new com.sun.star.beans.PropertyValue
505*1ecadb57SMathias Bauer	args(0).Name = &quot;Text&quot;
506*1ecadb57SMathias Bauer	args(0).Value = Content
507*1ecadb57SMathias Bauer	args(1).Name = &quot;Author&quot;
508*1ecadb57SMathias Bauer	args(1).Value = &quot;Help Tooling - DO NOT EDIT&quot;
509*1ecadb57SMathias Bauer	args(2).Name = &quot;Date&quot;
510*1ecadb57SMathias Bauer	args(2).Value = &quot;02/27/2004&quot;
511*1ecadb57SMathias Bauer
512*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:InsertAnnotation&quot;, &quot;&quot;, 0, args())
513*1ecadb57SMathias Bauerend sub
514*1ecadb57SMathias Bauer
515*1ecadb57SMathias Bauer&apos;=======================================================
516*1ecadb57SMathias Bauer&apos; InsertText
517*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
518*1ecadb57SMathias Bauer&apos; Inserts a string at the current position
519*1ecadb57SMathias Bauer&apos;=======================================================
520*1ecadb57SMathias BauerSub InsertText(strg As String)
521*1ecadb57SMathias Bauer	oSel = thiscomponent.getcurrentcontroller.getselection
522*1ecadb57SMathias Bauer	oCur = oSel(0).getText.createTextCursorByRange(oSel(0))
523*1ecadb57SMathias Bauer	oCur.String = strg
524*1ecadb57SMathias BauerEnd Sub
525*1ecadb57SMathias Bauer
526*1ecadb57SMathias Bauer&apos;=======================================================
527*1ecadb57SMathias Bauer&apos; ParaIsEmpty
528*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
529*1ecadb57SMathias Bauer&apos; Evaluates if a paragraph is empty.
530*1ecadb57SMathias Bauer&apos;=======================================================
531*1ecadb57SMathias BauerFunction ParaIsEmpty
532*1ecadb57SMathias Bauer	oSel = thiscomponent.getcurrentcontroller.getselection
533*1ecadb57SMathias Bauer	oCur = oSel(0).getText.createTextCursorByRange(oSel(0))
534*1ecadb57SMathias Bauer	oCur.gotoStartOfParagraph(0)
535*1ecadb57SMathias Bauer	ParaIsEmpty = oCur.IsEndOfParagraph
536*1ecadb57SMathias BauerEnd Function
537*1ecadb57SMathias Bauer
538*1ecadb57SMathias Bauer&apos;=======================================================
539*1ecadb57SMathias Bauer&apos; IsInBookmark
540*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
541*1ecadb57SMathias Bauer&apos; Evaluates if the cursor is inside a &lt;bookmark&gt; &lt;/bookmark&gt; element
542*1ecadb57SMathias Bauer&apos;=======================================================
543*1ecadb57SMathias BauerFunction IsInBookmark
544*1ecadb57SMathias Bauer	oSel = thiscomponent.getcurrentcontroller.getselection
545*1ecadb57SMathias Bauer	oCur = oSel(0).getText.createTextCursorByRange(oSel(0))
546*1ecadb57SMathias Bauer
547*1ecadb57SMathias Bauer	If ((oCur.ParaStyleName = &quot;hlp_aux_bookmark&quot;) AND (not(oCur.IsEndOfParagraph))) Then
548*1ecadb57SMathias Bauer		oCur.GotoStartOfParagraph(0)
549*1ecadb57SMathias Bauer		oCur.GotoEndOfParagraph(1)
550*1ecadb57SMathias Bauer		sText = Left(oCur.GetString,Instr(oCur.GetString,&quot;&quot;&quot; id=&quot;&quot;&quot;)-1)
551*1ecadb57SMathias Bauer		sText = Right(sText,Len(sText)-InStr(sText,&quot;&quot;&quot;&quot;))
552*1ecadb57SMathias Bauer		Select Case Left(sText,3)
553*1ecadb57SMathias Bauer			Case &quot;ind&quot;
554*1ecadb57SMathias Bauer				IsInBookmark = 1
555*1ecadb57SMathias Bauer			Case &quot;hid&quot;
556*1ecadb57SMathias Bauer				IsInBookmark = 2
557*1ecadb57SMathias Bauer			Case &quot;con&quot;
558*1ecadb57SMathias Bauer				IsInBookmark = 3
559*1ecadb57SMathias Bauer			Case Else
560*1ecadb57SMathias Bauer				IsInBookmark = 0
561*1ecadb57SMathias Bauer		End Select
562*1ecadb57SMathias Bauer	Else
563*1ecadb57SMathias Bauer		IsInBookmark = 0
564*1ecadb57SMathias Bauer	End If
565*1ecadb57SMathias BauerEnd Function
566*1ecadb57SMathias Bauer
567*1ecadb57SMathias Bauer&apos;=======================================================
568*1ecadb57SMathias Bauer&apos; IsInTable
569*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
570*1ecadb57SMathias Bauer&apos; Evaluates if the cursor is in a table
571*1ecadb57SMathias Bauer&apos;=======================================================
572*1ecadb57SMathias BauerFunction IsInTable
573*1ecadb57SMathias Bauer	oSel = thiscomponent.getcurrentcontroller.getselection
574*1ecadb57SMathias Bauer	oCur = oSel(0).getText.createTextCursorByRange(oSel(0))
575*1ecadb57SMathias Bauer
576*1ecadb57SMathias Bauer	IsInTable = (VarType(oCur.TextTable) &lt;&gt; 0)
577*1ecadb57SMathias BauerEnd Function
578*1ecadb57SMathias Bauer
579*1ecadb57SMathias Bauer&apos;=======================================================
580*1ecadb57SMathias Bauer&apos; InsertLink
581*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
582*1ecadb57SMathias Bauer&apos; Inserts a hyperlink at the current position
583*1ecadb57SMathias Bauer&apos;=======================================================
584*1ecadb57SMathias BauerSub InsertLink(sPath As String, sText As String, sName As String)
585*1ecadb57SMathias Bauer	dim document   as object
586*1ecadb57SMathias Bauer	dim dispatcher as object
587*1ecadb57SMathias Bauer
588*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
589*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
590*1ecadb57SMathias Bauer
591*1ecadb57SMathias Bauer	dim args(4) as new com.sun.star.beans.PropertyValue
592*1ecadb57SMathias Bauer	args(0).Name = &quot;Hyperlink.Text&quot;
593*1ecadb57SMathias Bauer	args(0).Value = sText
594*1ecadb57SMathias Bauer	args(1).Name = &quot;Hyperlink.URL&quot;
595*1ecadb57SMathias Bauer	args(1).Value = sPath
596*1ecadb57SMathias Bauer	args(2).Name = &quot;Hyperlink.Target&quot;
597*1ecadb57SMathias Bauer	args(2).Value = &quot;&quot;
598*1ecadb57SMathias Bauer	args(3).Name = &quot;Hyperlink.Name&quot;
599*1ecadb57SMathias Bauer	args(3).Value = sName
600*1ecadb57SMathias Bauer	args(4).Name = &quot;Hyperlink.Type&quot;
601*1ecadb57SMathias Bauer	args(4).Value = 1
602*1ecadb57SMathias Bauer
603*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:SetHyperlink&quot;, &quot;&quot;, 0, args())
604*1ecadb57SMathias Bauer	args(0).Name = &quot;Count&quot;
605*1ecadb57SMathias Bauer	args(0).Value = 1
606*1ecadb57SMathias Bauer	args(1).Name = &quot;Select&quot;
607*1ecadb57SMathias Bauer	args(1).Value = false
608*1ecadb57SMathias Bauer
609*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:GoRight&quot;, &quot;&quot;, 0, args())
610*1ecadb57SMathias Bauer
611*1ecadb57SMathias BauerEnd Sub
612*1ecadb57SMathias Bauer
613*1ecadb57SMathias Bauer&apos;=======================================================
614*1ecadb57SMathias Bauer&apos; AssignMissingIDs
615*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
616*1ecadb57SMathias Bauer&apos; Assigns IDs to elements that miss them
617*1ecadb57SMathias Bauer&apos;=======================================================
618*1ecadb57SMathias BauerSub AssignMissingIDs
619*1ecadb57SMathias Bauer&apos; NOT IMPLEMENTED YET
620*1ecadb57SMathias Bauerend sub
621*1ecadb57SMathias Bauer
622*1ecadb57SMathias Bauer&apos;=======================================================
623*1ecadb57SMathias Bauer&apos; CreateTable
624*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
625*1ecadb57SMathias Bauer&apos; Creates a new table
626*1ecadb57SMathias Bauer&apos;=======================================================
627*1ecadb57SMathias BauerSub CreateTable(nRows as Integer, nCols as Integer, sID as String)
628*1ecadb57SMathias Bauer	dim document   as object
629*1ecadb57SMathias Bauer	dim dispatcher as object
630*1ecadb57SMathias Bauer
631*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
632*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
633*1ecadb57SMathias Bauer
634*1ecadb57SMathias Bauer	dim args1(3) as new com.sun.star.beans.PropertyValue
635*1ecadb57SMathias Bauer	args1(0).Name = &quot;TableName&quot;
636*1ecadb57SMathias Bauer	args1(0).Value = sID
637*1ecadb57SMathias Bauer	args1(1).Name = &quot;Columns&quot;
638*1ecadb57SMathias Bauer	args1(1).Value = nCols
639*1ecadb57SMathias Bauer	args1(2).Name = &quot;Rows&quot;
640*1ecadb57SMathias Bauer	args1(2).Value = nRows
641*1ecadb57SMathias Bauer	args1(3).Name = &quot;Flags&quot;
642*1ecadb57SMathias Bauer	args1(3).Value = 9
643*1ecadb57SMathias Bauer
644*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:InsertTable&quot;, &quot;&quot;, 0, args1())
645*1ecadb57SMathias Bauer
646*1ecadb57SMathias Bauer	args1(0).Name = &quot;TopBottomMargin.TopMargin&quot;
647*1ecadb57SMathias Bauer	args1(0).Value = 500
648*1ecadb57SMathias Bauer	args1(1).Name = &quot;TopBottomMargin.BottomMargin&quot;
649*1ecadb57SMathias Bauer	args1(1).Value = 0
650*1ecadb57SMathias Bauer	args1(2).Name = &quot;TopBottomMargin.TopRelMargin&quot;
651*1ecadb57SMathias Bauer	args1(2).Value = 100
652*1ecadb57SMathias Bauer	args1(3).Name = &quot;TopBottomMargin.BottomRelMargin&quot;
653*1ecadb57SMathias Bauer	args1(3).Value = 100
654*1ecadb57SMathias Bauer
655*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:TopBottomMargin&quot;, &quot;&quot;, 0, args1())
656*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:SelectAll&quot;, &quot;&quot;, 0, Array())
657*1ecadb57SMathias Bauer	SetParaStyle(&quot;hlp_tablecontent&quot;)
658*1ecadb57SMathias Bauer	GoDown(1)
659*1ecadb57SMathias Bauerend Sub
660*1ecadb57SMathias Bauer
661*1ecadb57SMathias Bauer&apos;=======================================================
662*1ecadb57SMathias Bauer&apos; IsBlockImage
663*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
664*1ecadb57SMathias Bauer&apos; Evaluates if the cursor is in a paragraph with
665*1ecadb57SMathias Bauer&apos; a block image (image in its own paragraph)
666*1ecadb57SMathias Bauer&apos;=======================================================
667*1ecadb57SMathias BauerFunction IsBlockImage
668*1ecadb57SMathias Bauer	oSel = thiscomponent.getcurrentcontroller.getselection
669*1ecadb57SMathias Bauer	oCur = oSel(0).getText.createTextCursorByRange(oSel(0))
670*1ecadb57SMathias Bauer	oCur.gotoStartOfParagraph(0)
671*1ecadb57SMathias Bauer	oCur.gotoEndOfParagraph(1)
672*1ecadb57SMathias Bauer	sStr = Right(oCur.String,Len(oCur.String)-InStr(oCur.String,&quot; &quot;))  &apos;string must start with &lt;IMG and end with IMG with no &lt;IMG in between
673*1ecadb57SMathias Bauer	IsBlockImage = (not(Left(sStr,4)=&quot;IMG&gt;&quot;) AND (Right(sStr,6)=&quot;&lt;/IMG&gt;&quot;))
674*1ecadb57SMathias BauerEnd Function
675*1ecadb57SMathias Bauer
676*1ecadb57SMathias Bauer&apos;=======================================================
677*1ecadb57SMathias Bauer&apos; HasCaption
678*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
679*1ecadb57SMathias Bauer&apos; Evaluates if the current image has a caption element
680*1ecadb57SMathias Bauer&apos;=======================================================
681*1ecadb57SMathias BauerFunction HasCaption
682*1ecadb57SMathias Bauer	oSel = thiscomponent.getcurrentcontroller.getselection
683*1ecadb57SMathias Bauer	If oSel.ImplementationName = &quot;SwXTextGraphicObject&quot; Then
684*1ecadb57SMathias Bauer		oCur = oSel(0).getAnchor.getText.createTextCursorByRange(oSel(0).getAnchor)
685*1ecadb57SMathias Bauer	Else
686*1ecadb57SMathias Bauer		oCur = oSel(0).getText.createTextCursorByRange(oSel(0))
687*1ecadb57SMathias Bauer	End If
688*1ecadb57SMathias Bauer	oCur.gotoStartOfParagraph(0)
689*1ecadb57SMathias Bauer	oCur.gotoEndOfParagraph(1)
690*1ecadb57SMathias Bauer	HasCaption = (InStr(oCur.String,&quot;&lt;IMGCAPTION&quot;)&gt;0)
691*1ecadb57SMathias BauerEnd Function
692*1ecadb57SMathias Bauer
693*1ecadb57SMathias Bauer&apos;=======================================================
694*1ecadb57SMathias Bauer&apos; GetImageID
695*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
696*1ecadb57SMathias Bauer&apos; Returns the ID of an image at the cursor position
697*1ecadb57SMathias Bauer&apos;=======================================================
698*1ecadb57SMathias BauerFunction GetImageID
699*1ecadb57SMathias Bauer	oSel = thiscomponent.getcurrentcontroller.getselection
700*1ecadb57SMathias Bauer	If oSel.ImplementationName = &quot;SwXTextGraphicObject&quot; Then
701*1ecadb57SMathias Bauer		oCur = oSel(0).getAnchor.getText.createTextCursorByRange(oSel(0).getAnchor)
702*1ecadb57SMathias Bauer	Else
703*1ecadb57SMathias Bauer		oCur = oSel(0).getText.createTextCursorByRange(oSel(0))
704*1ecadb57SMathias Bauer	End If
705*1ecadb57SMathias Bauer	oCur.gotoStartOfParagraph(0)
706*1ecadb57SMathias Bauer	oCur.gotoEndOfParagraph(1)
707*1ecadb57SMathias Bauer	sStr = Right(oCur.String,Len(oCur.String)-(InStr(oCur.String,&quot;IMG ID=&quot;&quot;&quot;)+7))
708*1ecadb57SMathias Bauer	GetImageID = Left(sStr,InStr(sStr,&quot;&quot;&quot;&gt;&quot;)+1)  &apos;string must start with &lt;IMG and end with IMG with no &lt;IMG in between
709*1ecadb57SMathias BauerEnd Function
710*1ecadb57SMathias Bauer
711*1ecadb57SMathias Bauer&apos;=======================================================
712*1ecadb57SMathias Bauer&apos; SelAll
713*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
714*1ecadb57SMathias Bauer&apos; Selects everything
715*1ecadb57SMathias Bauer&apos;=======================================================
716*1ecadb57SMathias BauerSub SelAll
717*1ecadb57SMathias Bauer	dim document   as object
718*1ecadb57SMathias Bauer	dim dispatcher as object
719*1ecadb57SMathias Bauer
720*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
721*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
722*1ecadb57SMathias Bauer
723*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:SelectAll&quot;, &quot;&quot;, 0, Array())
724*1ecadb57SMathias BauerEnd Sub
725*1ecadb57SMathias Bauer
726*1ecadb57SMathias Bauer&apos;=======================================================
727*1ecadb57SMathias Bauer&apos; GetParaData
728*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
729*1ecadb57SMathias Bauer&apos; Returns the Paragraph ID and localization status
730*1ecadb57SMathias Bauer&apos;=======================================================
731*1ecadb57SMathias BauerFunction GetParaData
732*1ecadb57SMathias Bauer	arParaData = Array(&quot;&quot;,&quot;&quot;,&quot;&quot;) &apos; ID, localize, #message
733*1ecadb57SMathias Bauer
734*1ecadb57SMathias Bauer	oSel = thiscomponent.getcurrentcontroller.getselection
735*1ecadb57SMathias Bauer	oCur = oSel(0).getText.createTextCursorByRange(oSel(0))
736*1ecadb57SMathias Bauer	oCur.gotoStartOfParagraph(0)
737*1ecadb57SMathias Bauer	oCur.gotoEndOfParagraph(1)
738*1ecadb57SMathias Bauer	sID = &quot;&quot;
739*1ecadb57SMathias Bauer	Enum = oCur.createEnumeration
740*1ecadb57SMathias Bauer	Fd = FALSE
741*1ecadb57SMathias Bauer
742*1ecadb57SMathias Bauer
743*1ecadb57SMathias Bauer	TE = Enum.nextElement
744*1ecadb57SMathias Bauer
745*1ecadb57SMathias Bauer	TP = TE.createEnumeration
746*1ecadb57SMathias Bauer	Ct = 0
747*1ecadb57SMathias Bauer	posID = 0
748*1ecadb57SMathias Bauer
749*1ecadb57SMathias Bauer	Do While TP.hasmoreElements
750*1ecadb57SMathias Bauer		Ct = Ct+1
751*1ecadb57SMathias Bauer		TPE = TP.nextElement
752*1ecadb57SMathias Bauer		If TPE.TextPortionType=&quot;TextField&quot; Then
753*1ecadb57SMathias Bauer			If TPE.TextField.TextFieldMaster.Name=&quot;ID&quot; Then
754*1ecadb57SMathias Bauer				sID = TPE.TextField.Content
755*1ecadb57SMathias Bauer				Fd = TRUE
756*1ecadb57SMathias Bauer				Exit Do
757*1ecadb57SMathias Bauer			End If
758*1ecadb57SMathias Bauer		End If
759*1ecadb57SMathias Bauer		If TPE.String = &quot;&quot; Then
760*1ecadb57SMathias Bauer			Ct = Ct-1
761*1ecadb57SMathias Bauer		End If
762*1ecadb57SMathias Bauer	Loop
763*1ecadb57SMathias Bauer
764*1ecadb57SMathias Bauer	If ((Left(oCur.ParaStyleName,8) = &quot;hlp_aux_&quot;) or (Left(oCur.ParaStyleName,4) &lt;&gt; &quot;hlp_&quot;)) Then
765*1ecadb57SMathias Bauer		arParaData(2)=&quot;Invalid Paragraph Style&quot;
766*1ecadb57SMathias Bauer		GetParaData = arParaData
767*1ecadb57SMathias Bauer		Exit Function
768*1ecadb57SMathias Bauer	End If
769*1ecadb57SMathias Bauer
770*1ecadb57SMathias Bauer	If sID = &quot;&quot; Then
771*1ecadb57SMathias Bauer		GetParaData = arParaData
772*1ecadb57SMathias Bauer		Exit Function
773*1ecadb57SMathias Bauer	End If
774*1ecadb57SMathias Bauer
775*1ecadb57SMathias Bauer	If Right(sID,7) = &quot;_NOL10N&quot; Then
776*1ecadb57SMathias Bauer		arParaData(0) = Left(sID,Len(sID)-7)
777*1ecadb57SMathias Bauer		arParaData(1) = &quot;no&quot;
778*1ecadb57SMathias Bauer	Else
779*1ecadb57SMathias Bauer		arParaData(0) = sID
780*1ecadb57SMathias Bauer		arParaData(1) = &quot;yes&quot;
781*1ecadb57SMathias Bauer	End If
782*1ecadb57SMathias Bauer
783*1ecadb57SMathias Bauer	GetParaData = arParaData
784*1ecadb57SMathias BauerEnd Function
785*1ecadb57SMathias Bauer
786*1ecadb57SMathias Bauer&apos;=======================================================
787*1ecadb57SMathias Bauer&apos; SetsParaData
788*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
789*1ecadb57SMathias Bauer&apos; Sets the Paragraph ID and localization status
790*1ecadb57SMathias Bauer&apos;=======================================================
791*1ecadb57SMathias Bauer
792*1ecadb57SMathias BauerSub SetParaData(sID as String, sLocalize as String)
793*1ecadb57SMathias Bauer
794*1ecadb57SMathias Bauer	oSel = thiscomponent.getcurrentcontroller.getselection
795*1ecadb57SMathias Bauer	oCur = oSel(0).getText.createTextCursorByRange(oSel(0))
796*1ecadb57SMathias Bauer	oCur.gotoStartOfParagraph(0)
797*1ecadb57SMathias Bauer	oCur.gotoEndOfParagraph(1)
798*1ecadb57SMathias Bauer	Enum = oCur.createEnumeration
799*1ecadb57SMathias Bauer	Fd = FALSE
800*1ecadb57SMathias Bauer
801*1ecadb57SMathias Bauer
802*1ecadb57SMathias Bauer	Do While Enum.hasMoreElements
803*1ecadb57SMathias Bauer		TE = Enum.nextElement
804*1ecadb57SMathias Bauer
805*1ecadb57SMathias Bauer		TP = TE.createEnumeration
806*1ecadb57SMathias Bauer		Ct = 0
807*1ecadb57SMathias Bauer		posID = 0
808*1ecadb57SMathias Bauer
809*1ecadb57SMathias Bauer		Do While TP.hasmoreElements
810*1ecadb57SMathias Bauer			Ct = Ct+1
811*1ecadb57SMathias Bauer			TPE = TP.nextElement
812*1ecadb57SMathias Bauer			If TPE.TextPortionType=&quot;TextField&quot; Then
813*1ecadb57SMathias Bauer				If TPE.TextField.TextFieldMaster.Name=&quot;ID&quot; Then
814*1ecadb57SMathias Bauer					posID = Ct
815*1ecadb57SMathias Bauer					If sLocalize = &quot;no&quot; Then
816*1ecadb57SMathias Bauer						TPE.TextField.Content = sID+&quot;_NOL10N&quot;
817*1ecadb57SMathias Bauer						TPE.TextField.IsVisible = TRUE
818*1ecadb57SMathias Bauer					ElseIf sLocalize = &quot;yes&quot; Then
819*1ecadb57SMathias Bauer						TPE.TextField.Content = sID
820*1ecadb57SMathias Bauer						TPE.TextField.IsVisible = TRUE
821*1ecadb57SMathias Bauer					Else
822*1ecadb57SMathias Bauer						msgbox &quot;Unknown localization parameter: &quot;+sLocalize,0,&quot;Error&quot;
823*1ecadb57SMathias Bauer					End If
824*1ecadb57SMathias Bauer					Fd = TRUE
825*1ecadb57SMathias Bauer					Exit Do
826*1ecadb57SMathias Bauer				End If
827*1ecadb57SMathias Bauer			End If
828*1ecadb57SMathias Bauer			If TPE.String = &quot;&quot; Then
829*1ecadb57SMathias Bauer				Ct = Ct-1
830*1ecadb57SMathias Bauer			End If
831*1ecadb57SMathias Bauer		Loop
832*1ecadb57SMathias Bauer		If Fd Then
833*1ecadb57SMathias Bauer			Exit Do
834*1ecadb57SMathias Bauer		End If
835*1ecadb57SMathias Bauer	Loop
836*1ecadb57SMathias Bauer
837*1ecadb57SMathias Bauer	oCur.TextField.update
838*1ecadb57SMathias Bauer	UpdateFields
839*1ecadb57SMathias Bauer
840*1ecadb57SMathias BauerEnd Sub
841*1ecadb57SMathias Bauer
842*1ecadb57SMathias Bauer
843*1ecadb57SMathias Bauer&apos;=======================================================
844*1ecadb57SMathias Bauer&apos; IsInList
845*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
846*1ecadb57SMathias Bauer&apos; Evaluates if the cursor is inside a list (ordered or unordered)
847*1ecadb57SMathias Bauer&apos;=======================================================
848*1ecadb57SMathias BauerFunction IsInList
849*1ecadb57SMathias Bauer	oSel = thiscomponent.getcurrentcontroller.getselection
850*1ecadb57SMathias Bauer	oCur = oSel(0).getText.createTextCursorByRange(oSel(0))
851*1ecadb57SMathias Bauer	If oCur.NumberingStyleName = &quot;&quot;  Then
852*1ecadb57SMathias Bauer		IsInList = false
853*1ecadb57SMathias Bauer	ElseIf oCur.NumberingRules.NumberingIsOutline = true Then
854*1ecadb57SMathias Bauer		IsInList = false
855*1ecadb57SMathias Bauer	Else
856*1ecadb57SMathias Bauer		IsInList = true
857*1ecadb57SMathias Bauer	End If
858*1ecadb57SMathias BauerEnd Function
859*1ecadb57SMathias Bauer
860*1ecadb57SMathias Bauer&apos;=======================================================
861*1ecadb57SMathias Bauer&apos; TagFormatIsCorrect
862*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
863*1ecadb57SMathias Bauer&apos; Checks for correct paragraph format for tags
864*1ecadb57SMathias Bauer&apos;=======================================================
865*1ecadb57SMathias BauerFunction TagFormatIsCorrect(sTN As String, sPS As String)
866*1ecadb57SMathias Bauer
867*1ecadb57SMathias Bauer	arTag = Array(&quot;BOOKMARK&quot;,&quot;SORT&quot;,&quot;SECTION&quot;,&quot;SWITCH&quot;,&quot;CASE&quot;,&quot;DEFAULT&quot;)
868*1ecadb57SMathias Bauer	arTagFormat = Array(&quot;hlp_aux_bookmark&quot;,&quot;hlp_aux_sort&quot;,&quot;hlp_aux_section&quot;,&quot;hlp_aux_switch&quot;,&quot;hlp_aux_switch&quot;,&quot;hlp_aux_switch&quot;)
869*1ecadb57SMathias Bauer
870*1ecadb57SMathias Bauer	For n=0 to ubound(arTag)
871*1ecadb57SMathias Bauer		If (sTN = arTag(n) AND sPS &lt;&gt; arTagFormat(n)) Then
872*1ecadb57SMathias Bauer			TagFormatIsCorrect = arTagFormat(n)
873*1ecadb57SMathias Bauer			Exit Function
874*1ecadb57SMathias Bauer		End If
875*1ecadb57SMathias Bauer		TagFormatIsCorrect = &quot;&quot;
876*1ecadb57SMathias Bauer	Next n
877*1ecadb57SMathias Bauer
878*1ecadb57SMathias BauerEnd Function
879*1ecadb57SMathias Bauer
880*1ecadb57SMathias Bauer&apos;=======================================================
881*1ecadb57SMathias Bauer&apos; GetFilePath
882*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
883*1ecadb57SMathias Bauer&apos; look for the &quot;text/...&quot; part of the file name and separate it
884*1ecadb57SMathias Bauer&apos;=======================================================
885*1ecadb57SMathias BauerFunction GetFilePath(fname As String)
886*1ecadb57SMathias Bauer
887*1ecadb57SMathias Bauer	i = 1
888*1ecadb57SMathias Bauer	Do
889*1ecadb57SMathias Bauer		If (Mid(fname,i,5) = &quot;text/&quot;) Then
890*1ecadb57SMathias Bauer			Strg = Mid(fname,i,Len(fname)-i+1)
891*1ecadb57SMathias Bauer			Exit Do
892*1ecadb57SMathias Bauer		Else
893*1ecadb57SMathias Bauer			i = i+1
894*1ecadb57SMathias Bauer			Strg = fname
895*1ecadb57SMathias Bauer		End If
896*1ecadb57SMathias Bauer	Loop While (i+5 &lt; Len(fname))
897*1ecadb57SMathias Bauer	GetFilePath = Strg
898*1ecadb57SMathias BauerEnd Function
899*1ecadb57SMathias Bauer
900*1ecadb57SMathias Bauer&apos;=======================================================
901*1ecadb57SMathias Bauer&apos; OpenGraphics
902*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
903*1ecadb57SMathias Bauer&apos; Calls the graphic open dialog for inserting an image
904*1ecadb57SMathias Bauer&apos;=======================================================
905*1ecadb57SMathias BauerFunction OpenGraphics(oDoc As Object)
906*1ecadb57SMathias BauerDim ListAny(0) as Long
907*1ecadb57SMathias BauerDim oStoreProperties(0) as New com.sun.star.beans.PropertyValue
908*1ecadb57SMathias Bauer	GlobalScope.BasicLibraries.loadLibrary(&quot;Tools&quot;)
909*1ecadb57SMathias Bauer	ListAny(0) = com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE
910*1ecadb57SMathias Bauer&apos;	ListAny(0) = com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_LINK_PREVIEW_IMAGE_TEMPLATE
911*1ecadb57SMathias Bauer	oFileDialog = CreateUnoService(&quot;com.sun.star.ui.dialogs.FilePicker&quot;)
912*1ecadb57SMathias Bauer	oFileDialog.Initialize(ListAny())
913*1ecadb57SMathias Bauer
914*1ecadb57SMathias Bauer	sLastImgDir = ReadConfig(&quot;LastImgDir&quot;)
915*1ecadb57SMathias Bauer	If sLastImgDir &lt;&gt; &quot;&quot; Then
916*1ecadb57SMathias Bauer		oFileDialog.setDisplayDirectory(sLastImgDir)
917*1ecadb57SMathias Bauer	End If
918*1ecadb57SMathias Bauer
919*1ecadb57SMathias Bauer	oMasterKey = GetRegistryKeyContent(&quot;org.openoffice.TypeDetection.Types/&quot;)
920*1ecadb57SMathias Bauer	oTypes() = oMasterKey.Types
921*1ecadb57SMathias Bauer
922*1ecadb57SMathias Bauer	oFileDialog.AppendFilter(oTypes.GetByName(&quot;gif_Graphics_Interchange&quot;).UIName, &quot;*.gif&quot;)
923*1ecadb57SMathias Bauer	oFileDialog.AppendFilter(oTypes.GetByName(&quot;png_Portable_Network_Graphic&quot;).UIName, &quot;*.png&quot;)
924*1ecadb57SMathias Bauer
925*1ecadb57SMathias Bauer	oFileDialog.SetTitle(&quot;Insert Image&quot;)
926*1ecadb57SMathias Bauer	iAccept = oFileDialog.Execute()
927*1ecadb57SMathias Bauer	If iAccept = 1 Then
928*1ecadb57SMathias Bauer		sPath = oFileDialog.Files(0)
929*1ecadb57SMathias Bauer		WriteConfig(&quot;LastImgDir&quot;,oFileDialog.getDisplayDirectory)
930*1ecadb57SMathias Bauer		UIFilterName = oFileDialog.GetCurrentFilter()
931*1ecadb57SMathias Bauer		OpenGraphics = oFileDialog.Files(0)
932*1ecadb57SMathias Bauer	Else
933*1ecadb57SMathias Bauer		OpenGraphics = &quot;&quot;
934*1ecadb57SMathias Bauer	End If
935*1ecadb57SMathias Bauer	oFileDialog.Dispose()
936*1ecadb57SMathias BauerEnd Function
937*1ecadb57SMathias Bauer
938*1ecadb57SMathias Bauer&apos;=======================================================
939*1ecadb57SMathias Bauer&apos; WriteConfig
940*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
941*1ecadb57SMathias Bauer&apos; Reads a parameter value from the config file
942*1ecadb57SMathias Bauer&apos;=======================================================
943*1ecadb57SMathias BauerFunction ReadConfig(Parm As String)
944*1ecadb57SMathias Bauer	oPath = createUNOService(&quot;com.sun.star.util.PathSettings&quot;)
945*1ecadb57SMathias Bauer	filename = oPath.UserConfig+&quot;/helpauthoring.cfg&quot;
946*1ecadb57SMathias Bauer	iNumber = Freefile
947*1ecadb57SMathias Bauer	bFound = false
948*1ecadb57SMathias Bauer	If FileExists(filename) Then
949*1ecadb57SMathias Bauer		Open filename For Input As iNumber
950*1ecadb57SMathias Bauer		Do While (not eof(iNumber) AND not(bFound))
951*1ecadb57SMathias Bauer			Line Input #iNumber, sLine
952*1ecadb57SMathias Bauer			If InStr(sLine, &quot;=&quot;) &gt; 0 Then
953*1ecadb57SMathias Bauer				arLine = split(sLine,&quot;=&quot;)
954*1ecadb57SMathias Bauer				If arLine(0) = Parm Then
955*1ecadb57SMathias Bauer					sResult = arLine(1)
956*1ecadb57SMathias Bauer					bFound = true
957*1ecadb57SMathias Bauer				End If
958*1ecadb57SMathias Bauer			End If
959*1ecadb57SMathias Bauer		Loop
960*1ecadb57SMathias Bauer		Close #iNumber
961*1ecadb57SMathias Bauer		If bFound Then
962*1ecadb57SMathias Bauer			ReadConfig = sResult
963*1ecadb57SMathias Bauer		Else
964*1ecadb57SMathias Bauer			ReadConfig = &quot;&quot;
965*1ecadb57SMathias Bauer		End If
966*1ecadb57SMathias Bauer	Else
967*1ecadb57SMathias Bauer		ReadConfig = &quot;&quot;
968*1ecadb57SMathias Bauer	End If
969*1ecadb57SMathias BauerEnd Function
970*1ecadb57SMathias Bauer
971*1ecadb57SMathias Bauer
972*1ecadb57SMathias Bauer&apos;=======================================================
973*1ecadb57SMathias Bauer&apos; WriteConfig
974*1ecadb57SMathias Bauer&apos;-------------------------------------------------------
975*1ecadb57SMathias Bauer&apos; Writes a parameter/value pair to the config file
976*1ecadb57SMathias Bauer&apos;=======================================================
977*1ecadb57SMathias BauerFunction WriteConfig(Parm As String, Value As String)
978*1ecadb57SMathias Bauer	Dim arLines(0) As String
979*1ecadb57SMathias Bauer	bFound = false
980*1ecadb57SMathias Bauer	oPath = createUNOService(&quot;com.sun.star.util.PathSettings&quot;)
981*1ecadb57SMathias Bauer	filename = oPath.UserConfig+&quot;/helpauthoring.cfg&quot;
982*1ecadb57SMathias Bauer	iNumber = Freefile
983*1ecadb57SMathias Bauer	If FileExists(filename) Then
984*1ecadb57SMathias Bauer
985*1ecadb57SMathias Bauer		Open filename For Input As iNumber
986*1ecadb57SMathias Bauer		Do While (not eof(iNumber))
987*1ecadb57SMathias Bauer			Line Input #iNumber, sLine
988*1ecadb57SMathias Bauer			If InStr(sLine, &quot;=&quot;) &gt; 0 Then
989*1ecadb57SMathias Bauer				sDim = ubound(arLines())+1
990*1ecadb57SMathias Bauer				ReDim Preserve arLines(sDim)
991*1ecadb57SMathias Bauer				arLines(sDim) = sLine
992*1ecadb57SMathias Bauer			End If
993*1ecadb57SMathias Bauer		Loop
994*1ecadb57SMathias Bauer		Close #iNumber
995*1ecadb57SMathias Bauer
996*1ecadb57SMathias Bauer		nLine = 1
997*1ecadb57SMathias Bauer		Do While (nLine &lt;= ubound(arLines())) and (not bFound)
998*1ecadb57SMathias Bauer			arLine = split(arLines(nLine),&quot;=&quot;)
999*1ecadb57SMathias Bauer			If arLine(0) = Parm Then
1000*1ecadb57SMathias Bauer				arLines(nLine) = Parm+&quot;=&quot;+Value
1001*1ecadb57SMathias Bauer				bFound = true
1002*1ecadb57SMathias Bauer			End If
1003*1ecadb57SMathias Bauer			nLine = nLine +1
1004*1ecadb57SMathias Bauer		Loop
1005*1ecadb57SMathias Bauer
1006*1ecadb57SMathias Bauer		nLine = 1
1007*1ecadb57SMathias Bauer		Open filename For Output As iNumber
1008*1ecadb57SMathias Bauer		Do While (nLine &lt;= ubound(arLines()))
1009*1ecadb57SMathias Bauer			Print #iNumber, arLines(nLine)
1010*1ecadb57SMathias Bauer			nLine = nLine + 1
1011*1ecadb57SMathias Bauer		Loop
1012*1ecadb57SMathias Bauer		If (not bFound) Then
1013*1ecadb57SMathias Bauer			Print #iNumber, Parm+&quot;=&quot;+Value
1014*1ecadb57SMathias Bauer		End If
1015*1ecadb57SMathias Bauer		Close #iNumber
1016*1ecadb57SMathias Bauer
1017*1ecadb57SMathias Bauer	Else
1018*1ecadb57SMathias Bauer		Open filename For Output As iNumber
1019*1ecadb57SMathias Bauer		Print #iNumber, Parm+&quot;=&quot;+Value
1020*1ecadb57SMathias Bauer		Close #iNumber
1021*1ecadb57SMathias Bauer	End If
1022*1ecadb57SMathias BauerEnd Function
1023*1ecadb57SMathias Bauer
1024*1ecadb57SMathias BauerFunction GetRelPath(sPath As String)
1025*1ecadb57SMathias Bauer	sHelpPrefix = ReadConfig(&quot;HelpPrefix&quot;)
1026*1ecadb57SMathias Bauer	If sHelpPrefix = &quot;&quot; Then
1027*1ecadb57SMathias Bauer		sHelpPrefix = SetDocumentRoot
1028*1ecadb57SMathias Bauer	End If
1029*1ecadb57SMathias Bauer	GetRelPath = Right(sPath, Len(sPath)-(InStr(sPath,sHelpPrefix) + Len(sHelpPrefix)-1))
1030*1ecadb57SMathias BauerEnd Function
1031*1ecadb57SMathias Bauer
1032*1ecadb57SMathias BauerFunction SetDocumentRoot
1033*1ecadb57SMathias Bauer	sHelpPrefix = ReadConfig(&quot;HelpPrefix&quot;)
1034*1ecadb57SMathias Bauer	oFolderDialog = CreateUnoService(&quot;com.sun.star.ui.dialogs.FolderPicker&quot;)
1035*1ecadb57SMathias Bauer	oFolderDialog.SetTitle(&quot;Select Document Root Folder&quot;)
1036*1ecadb57SMathias Bauer	If sHelpPrefix &gt; &quot;&quot; Then
1037*1ecadb57SMathias Bauer		oFolderDialog.setDisplayDirectory(sHelpPrefix)
1038*1ecadb57SMathias Bauer	End If
1039*1ecadb57SMathias Bauer	iAccept = oFolderDialog.Execute()
1040*1ecadb57SMathias Bauer
1041*1ecadb57SMathias Bauer	If iAccept = 1 Then
1042*1ecadb57SMathias Bauer		sHelpPrefix = oFolderDialog.getDirectory + &quot;/&quot;
1043*1ecadb57SMathias Bauer		WriteConfig(&quot;HelpPrefix&quot;,sHelpPrefix)
1044*1ecadb57SMathias Bauer	End If
1045*1ecadb57SMathias Bauer
1046*1ecadb57SMathias Bauer	SetDocumentRoot = sHelpPrefix
1047*1ecadb57SMathias BauerEnd Function
1048*1ecadb57SMathias Bauer
1049*1ecadb57SMathias BauerFunction MakeAbsPath(sPath As String)
1050*1ecadb57SMathias Bauer
1051*1ecadb57SMathias Bauer	sHelpPrefix = ReadConfig(&quot;HelpPrefix&quot;)
1052*1ecadb57SMathias Bauer	If sHelpPrefix = &quot;&quot; Then
1053*1ecadb57SMathias Bauer		sHelpPrefix = SetDocumentRoot
1054*1ecadb57SMathias Bauer	End If
1055*1ecadb57SMathias Bauer
1056*1ecadb57SMathias Bauer	If Right(sPath,4) &lt;&gt; &quot;.xhp&quot; Then
1057*1ecadb57SMathias Bauer		sPath=sPath+&quot;.xhp&quot;
1058*1ecadb57SMathias Bauer	End If
1059*1ecadb57SMathias Bauer	MakeAbsPath = sHelpPrefix+sPath
1060*1ecadb57SMathias BauerEnd Function
1061*1ecadb57SMathias Bauer
1062*1ecadb57SMathias Bauer
1063*1ecadb57SMathias BauerSub UpdateFields
1064*1ecadb57SMathias Bauer	dim document   as object
1065*1ecadb57SMathias Bauer	dim dispatcher as object
1066*1ecadb57SMathias Bauer	document   = ThisComponent.CurrentController.Frame
1067*1ecadb57SMathias Bauer	dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
1068*1ecadb57SMathias Bauer
1069*1ecadb57SMathias Bauer	dispatcher.executeDispatch(document, &quot;.uno:UpdateFields&quot;, &quot;&quot;, 0, Array())
1070*1ecadb57SMathias BauerEnd Sub
1071*1ecadb57SMathias Bauer
1072*1ecadb57SMathias BauerFunction IsHelpFile
1073*1ecadb57SMathias Bauer	document = StarDesktop.CurrentComponent
1074*1ecadb57SMathias Bauer	IsHelpFile = (Right(GetFilePath(document.URL),4)=&quot;.xhp&quot;)
1075*1ecadb57SMathias BauerEnd Function
1076*1ecadb57SMathias Bauer
1077*1ecadb57SMathias BauerFunction GetUserFieldNumber(fn as String)
1078*1ecadb57SMathias Bauer	fnum = -1
1079*1ecadb57SMathias Bauer	For a=0 to document.DocumentInfo.getUserFieldCount - 1
1080*1ecadb57SMathias Bauer		If document.DocumentInfo.getUserFieldName(a) = fn Then
1081*1ecadb57SMathias Bauer			fnum = a
1082*1ecadb57SMathias Bauer			Exit for
1083*1ecadb57SMathias Bauer		End If
1084*1ecadb57SMathias Bauer	Next a
1085*1ecadb57SMathias Bauer	GetUserFieldNumber = fnum
1086*1ecadb57SMathias BauerEnd Function
1087*1ecadb57SMathias Bauer</script:module>