1 <?xml version=
"1.0" encoding=
"UTF-8"?>
2 <!DOCTYPE script:module PUBLIC
"-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
3 <script:module xmlns:
script=
"http://openoffice.org/2000/script" script:
name=
"SF_Root" script:
language=
"StarBasic" script:
moduleType=
"normal">REM =======================================================================================================================
4 REM === The ScriptForge library and its associated libraries are part of the LibreOffice project. ===
5 REM === Full documentation is available on https://help.libreoffice.org/ ===
6 REM =======================================================================================================================
14 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
15 ''' SF_Root
16 ''' =======
17 ''' FOR INTERNAL USE ONLY
18 ''' Singleton class holding all persistent variables shared
19 ''' by all the modules of the ScriptForge library
20 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
22 REM ============================================================= PRIVATE MEMBERS
25 Private [Me] As Object
26 Private [_Parent] As Object
27 Private ObjectType As String
' Must be
"ROOT
"
28 Private MainFunction As String
' Name of method or property called by user script
29 Private MainFunctionArgs As String
' Syntax of method called by user script
30 Private StackLevel As Integer
' Depth of calls between internal methods
32 ' Error management
33 Private ErrorHandler As Boolean
' True = error handling active, False = internal debugging
34 Private ConsoleLines() As Variant
' Array of messages displayable in console
35 Private ConsoleDialog As Object
' SFDialogs.Dialog object
36 Private ConsoleControl As Object
' SFDialogs.DialogControl object
37 Private DisplayEnabled As Boolean
' When True, display of console or error messages is allowed
38 Private StopWhenError As Boolean
' When True, process stops after error
> "WARNING
"
39 Private TriggeredByPython As Boolean
' When True, the actual user script is a Python script
40 Private DebugMode As Boolean
' When True, log enter/exit each official Sub
42 ' Progress and status bars
43 Private ProgressBarDialog As Object
' SFDialogs.Dialog object
44 Private ProgressBarText As Object
' SFDialogs.DialogControl object
45 Private ProgressBarBar As Object
' SFDialogs.DialogControl object
46 Private Statusbar As Object
48 ' Services management
49 Private ServicesList As Variant
' Dictionary of provided services
51 ' Usual UNO services
52 Private FunctionAccess As Object
' com.sun.star.sheet.FunctionAccess
53 Private PathSettings As Object
' com.sun.star.util.PathSettings
54 Private PathSubstitution As Object
' com.sun.star.util.PathSubstitution
55 Private ScriptProvider As Object
' com.sun.star.script.provider.MasterScriptProviderFactory
56 Private SystemShellExecute As Object
' com.sun.star.system.SystemShellExecute
57 Private CoreReflection As Object
' com.sun.star.reflection.CoreReflection
58 Private DispatchHelper As Object
' com.sun.star.frame.DispatchHelper
59 Private TextSearch As Object
' com.sun.star.util.TextSearch
60 Private SearchOptions As Object
' com.sun.star.util.SearchOptions
61 Private SystemLocale As Object
' com.sun.star.lang.Locale
62 Private OfficeLocale As Object
' com.sun.star.lang.Locale
63 Private FormatLocale As Object
' com.sun.star.lang.Locale
64 Private LocaleData As Object
' com.sun.star.i18n.LocaleData
65 Private CalendarImpl As Object
' com.sun.star.i18n.CalendarImpl
66 Private Number2Text As Object
' com.sun.star.linguistic2.NumberText
67 Private PrinterServer As Object
' com.sun.star.awt.PrinterServer
68 Private CharacterClass As Object
' com.sun.star.i18n.CharacterClassification
69 Private FileAccess As Object
' com.sun.star.ucb.SimpleFileAccess
70 Private FilterFactory As Object
' com.sun.star.document.FilterFactory
71 Private FolderPicker As Object
' com.sun.star.ui.dialogs.FolderPicker
72 Private FilePicker As Object
' com.sun.star.ui.dialogs.FilePicker
73 Private URLTransformer As Object
' com.sun.star.util.URLTransformer
74 Private Introspection As Object
' com.sun.star.beans.Introspection
75 Private BrowseNodeFactory As Object
' com.sun.star.script.browse.BrowseNodeFactory
76 Private DatabaseContext As Object
' com.sun.star.sdb.DatabaseContext
77 Private ConfigurationProvider _
78 As Object
' com.sun.star.configuration.ConfigurationProvider
79 Private PackageProvider As Object
' com.sun.star.comp.deployment.PackageInformationProvider
80 Private MailService As Object
' com.sun.star.system.SimpleCommandMail or com.sun.star.system.SimpleSystemMail
81 Private GraphicExportFilter As Object
' com.sun.star.drawing.GraphicExportFilter
82 Private Toolkit As Object
' com.sun.star.awt.Toolkit
84 ' Specific persistent services objects or properties
85 Private FileSystemNaming As String
' If
"SYS
", file and folder naming is based on operating system notation
86 Private PythonHelper As String
' File name of Python helper functions (stored in $(inst)/share/Scripts/python)
87 Private PythonHelper2 As String
' Alternate Python helper file name for test purposes
88 Private LocalizedInterface As Object
' ScriptForge own L10N service
89 Private OSName As String
' WIN, LINUX, MACOS
90 Private SFDialogs As Variant
' Persistent storage for the SFDialogs library
91 Private SFForms As Variant
' Persistent storage for the SF_Form class in the SFDocuments library
92 Private PythonStorage As Variant
' Persistent storage for the objects created and processed in Python
93 Private PythonPermanent As Long
' Number of permanent entries in PythonStorage containing standard module objects
95 REM ====================================================== CONSTRUCTOR/DESTRUCTOR
97 REM -----------------------------------------------------------------------------
98 Private Sub Class_Initialize()
100 Set [_Parent] = Nothing
101 ObjectType =
"ROOT
"
102 MainFunction =
""
103 MainFunctionArgs =
""
106 ConsoleLines = Array()
107 Set ConsoleDialog = Nothing
108 Set ConsoleControl = Nothing
109 DisplayEnabled = True
111 TriggeredByPython = False
113 Set ProgressBarDialog = Nothing
114 Set ProgressBarText = Nothing
115 Set progressBarBar = Nothing
116 Set Statusbar = Nothing
118 Set FunctionAccess = Nothing
119 Set PathSettings = Nothing
120 Set PathSubstitution = Nothing
121 Set ScriptProvider = Nothing
122 Set SystemShellExecute = Nothing
123 Set CoreReflection = Nothing
124 Set DispatchHelper = Nothing
125 Set TextSearch = Nothing
126 Set SearchOptions = Nothing
127 Set SystemLocale = Nothing
128 Set OfficeLocale = Nothing
129 Set FormatLocale = Nothing
130 Set LocaleData = Nothing
131 Set CalendarImpl = Nothing
132 Set Number2Text = Nothing
133 Set PrinterServer = Nothing
134 Set CharacterClass = Nothing
135 Set FileAccess = Nothing
136 Set FilterFactory = Nothing
137 Set FolderPicker = Nothing
138 Set FilePicker = Nothing
139 Set URLTransformer = Nothing
140 Set Introspection = Nothing
141 FileSystemNaming =
"ANY
"
142 PythonHelper =
"ScriptForgeHelper.py
"
143 PythonHelper2 =
""
144 Set LocalizedInterface = Nothing
145 Set BrowseNodeFactory = Nothing
146 Set DatabaseContext = Nothing
147 Set ConfigurationProvider = Nothing
148 Set PackageProvider = Nothing
149 Set MailService = Nothing
150 Set GraphicExportFilter = Nothing
151 Set Toolkit = Nothing
152 OSName =
""
155 PythonStorage = Empty
157 End Sub
' ScriptForge.SF_Root Constructor
159 REM -----------------------------------------------------------------------------
160 Private Sub Class_Terminate()
161 Call Class_Initialize()
162 End Sub
' ScriptForge.SF_Root Destructor
164 REM -----------------------------------------------------------------------------
165 Public Function Dispose() As Variant
166 Call Class_Terminate()
167 Set Dispose = Nothing
168 End Function
' ScriptForge.SF_Root Explicit destructor
170 REM =========================================================== PRIVATE FUNCTIONS
172 REM -----------------------------------------------------------------------------
173 Public Sub _AddToConsole(ByVal psLine As String)
174 ''' Add a new line to the console
175 ''' TAB characters are expanded before the insertion of the line
176 ''' NB: Array redimensioning of a member of an object must be done in the class module
177 ''' Args:
178 ''' psLine: the line to add
180 Dim lConsole As Long
' UBound of ConsoleLines
181 Dim sLine As String
' Alias of psLine
183 ' Resize ConsoleLines
184 lConsole = UBound(ConsoleLines)
185 If lConsole
< 0 Then
186 ReDim ConsoleLines(
0)
188 ReDim Preserve ConsoleLines(
0 To lConsole +
1)
191 ' Add a timestamp to the line and insert it (without date)
192 sLine = Mid(SF_Utils._Repr(Now()),
12)
& " -
> " & psLine
193 ConsoleLines(lConsole +
1) = sLine
195 ' Add the new line to the actual (probably non-modal) console, if active
196 If Not IsNull(ConsoleDialog) Then
197 If ConsoleDialog._IsStillAlive(False) Then
' False to not raise an error
198 If IsNull(ConsoleControl) Then Set ConsoleControl = ConsoleDialog.Controls(SF_Exception.CONSOLENAME)
' Should not happen ...
199 ConsoleControl.WriteLine(sLine)
203 End Sub
' ScriptForge.SF_Root._AddToConsole
205 REM -----------------------------------------------------------------------------
206 Public Function _AddToPythonStorage(ByRef poObject As Object) As Long
207 ''' Insert a newly created object in the Python persistent storage
208 ''' and return the index of the used entry
209 ''' The persistent storage is a simple array of objects
210 ''' Args:
211 ''' poObject: the object to insert
213 Dim lIndex As Long
' Return value
214 Dim lSize As Long
' UBound of the persistent storage
219 If IsNull(poObject) Then Exit Function
220 On Local Error GoTo Finally
221 lSize = UBound(PythonStorage)
224 ' Can an empty entry be reused ?
225 For i = PythonPermanent +
1 To lSize
226 If IsNull(PythonStorage(i)) Then
232 ' Resize Python storage if no empty space
233 If lIndex
< 0 Then
235 ReDim Preserve PythonStorage(
0 To lSize)
239 ' Insert new object
240 Set PythonStorage(lIndex) = poObject
243 _AddToPythonStorage = lIndex
245 End Function
' ScriptForge.SF_Root._AddToPythonStorage
247 REM ------------------------------------------------------------------------------
248 Public Function _GetLocalizedInterface() As Object
249 ''' Returns the LN object instance related to the ScriptForge internal localization
250 ''' If not yet done, load it from the shipped po files
251 ''' Makes that the localized user interface is loaded only when needed
254 If IsNull(LocalizedInterface) Then _LoadLocalizedInterface()
257 Set _GetLocalizedInterface = LocalizedInterface
259 End Function
' ScriptForge.SF_Root._GetLocalizedInterface
261 REM -----------------------------------------------------------------------------
262 Public Sub _InitPythonStorage()
263 ''' Make PythonStorage an array
264 ''' In prevision to an abundant use of those objects in Python, hardcode to optimize the performance and memory :
265 ''' Initialize the first entries with the standard module objects located in the ScriptForge library
268 If Not IsArray(PythonStorage) Then
270 PythonStorage = Array()
271 ReDim PythonStorage(
0 To PythonPermanent)
272 ' Initialize each entry
273 PythonStorage(
0) = ScriptForge.SF_Array
274 PythonStorage(
1) = ScriptForge.SF_Exception
275 PythonStorage(
2) = ScriptForge.SF_FileSystem
276 PythonStorage(
3) = ScriptForge.SF_Platform
277 PythonStorage(
4) = ScriptForge.SF_Region
278 PythonStorage(
5) = ScriptForge.SF_Services
279 PythonStorage(
6) = ScriptForge.SF_Session
280 PythonStorage(
7) = ScriptForge.SF_String
281 PythonStorage(
8) = ScriptForge.SF_UI
286 End Sub
' ScriptForge.SF_Root._InitPythonStorage
288 REM -----------------------------------------------------------------------------
289 Public Sub _LoadLocalizedInterface(Optional ByVal psMode As String)
290 ''' Build the user interface in a persistent L10N object
291 ''' Executed - only once - at first request of a label inside the LocalizedInterface dictionary
292 ''' Args:
293 ''' psMode: ADDTEXT =
> the (english) labels are loaded from code below
294 ''' POFILE =
> the localized labels are loaded from a PO file
295 ''' the name of the file is
"la.po
" where la = language part of locale
296 ''' (fallback to ADDTEXT mode if file does not exist)
298 Dim sInstallFolder As String
' ScriptForge installation directory
299 Dim sPOFolder As String
' Folder containing the PO files
300 Dim sPOFile As String
' PO File to load
301 Dim sLocale As String
' Locale
303 If ErrorHandler Then On Local Error GoTo Catch
306 'TODO: Modify default value
307 If IsMissing(psMode) Then psMode =
"POFILE
"
309 If psMode =
"POFILE
" Then
' Use this mode in production
310 ' Build the po file name
312 sInstallFolder = ._SFInstallFolder()
' ScriptForge installation folder
313 sLocale = SF_Utils._GetUNOService(
"OfficeLocale
").Language
314 sPOFolder = .BuildPath(sInstallFolder,
"po
")
315 sPOFile = .BuildPath(sPOFolder, sLocale
& ".po
")
316 If sLocale =
"en
" Then
' LocalizedInterface loaded by code i.o. read from po file
317 psMode =
"ADDTEXT
"
318 ElseIf Not .FileExists(sPOFile) Then
' File not found =
> load texts from code below
319 psMode =
"ADDTEXT
"
321 Set LocalizedInterface = CreateScriptService(
"L10N
", sPOFolder, sLocale)
326 If psMode =
"ADDTEXT
" Then
' Use this mode in development to prepare a new POT file
327 Set LocalizedInterface = CreateScriptService(
"L10N
")
328 With LocalizedInterface
329 ' SF_Exception.Raise
330 .AddText( Context :=
"ERRORNUMBER
" _
331 , MsgId :=
"Error %
1" _
332 , Comment :=
"Title in error message box\n
" _
333 & "%
1: an error number
" _
335 .AddText( Context :=
"ERRORLOCATION
" _
336 , MsgId :=
"Location : %
1" _
337 , Comment :=
"Error message box\n
" _
338 & "%
1: a line number
" _
340 .AddText( Context :=
"LONGERRORDESC
" _
341 , MsgId :=
"Error %
1 - Location = %
2 - Description = %
3" _
342 , Comment :=
"Logfile record
" _
344 .AddText( Context :=
"STOPEXECUTION
" _
345 , MsgId :=
"THE EXECUTION IS CANCELLED.
" _
346 , Comment :=
"Any blocking error message
" _
348 .AddText( Context :=
"NEEDMOREHELP
" _
349 , MsgId :=
"Do you want to receive more information about the
'%
1' method ?
" _
350 , Comment :=
"Any blocking error message\n
" _
351 & "%
1: a method name
" _
353 ' SF_Exception.RaiseAbort
354 .AddText( Context :=
"INTERNALERROR
" _
355 , MsgId :=
"The ScriptForge library has crashed. The reason is unknown.\n
" _
356 & "Maybe a bug that could be reported on\n
" _
357 & "\thttps://bugs.documentfoundation.org/\n\n
" _
358 & "More details : \n\n
" _
359 , Comment :=
"SF_Exception.RaiseAbort error message
" _
361 ' SF_Utils._Validate
362 .AddText( Context :=
"VALIDATESOURCE
" _
363 , MsgId :=
"Library : \t%
1\nService : \t%
2\nMethod : \t%
3" _
364 , Comment :=
"SF_Utils._Validate error message\n
" _
365 & "%
1: probably ScriptForge\n
" _
366 & "%
2: service or module name\n
" _
367 & "%
3: property or method name where the error occurred
" _
369 .AddText( Context :=
"VALIDATEARGS
" _
370 , MsgId :=
"Arguments: %
1" _
371 , Comment :=
"SF_Utils._Validate error message\n
" _
372 & "%
1: list of arguments of the method
" _
374 .AddText( Context :=
"VALIDATEERROR
" _
375 , MsgId :=
"A serious error has been detected in your code on argument : « %
1 ».
" _
376 , Comment :=
"SF_Utils._Validate error message\n
" _
377 & "%
1: Wrong argument name
" _
379 .AddText( Context :=
"VALIDATIONRULES
" _
380 , MsgId :=
"\tValidation rules :
", Comment :=
"SF_Utils.Validate error message
" _
382 .AddText( Context :=
"VALIDATETYPES
" _
383 , MsgId :=
"\t\t« %
1 » must have next type (or one of next types) : %
2" _
384 , Comment :=
"SF_Utils._Validate error message\n
" _
385 & "%
1: Wrong argument name\n
" _
386 & "%
2: Comma separated list of allowed types
" _
388 .AddText( Context :=
"VALIDATEVALUES
" _
389 , MsgId :=
"\t\t« %
1 » must contain one of next values : %
2" _
390 , Comment :=
"SF_Utils._Validate error message\n
" _
391 & "%
1: Wrong argument name\n
" _
392 & "%
2: Comma separated list of allowed values
" _
394 .AddText( Context :=
"VALIDATEREGEX
" _
395 , MsgId :=
"\t\t« %
1 » must match next regular expression : %
2" _
396 , Comment :=
"SF_Utils._Validate error message\n
" _
397 & "%
1: Wrong argument name\n
" _
398 & "%
2: A regular expression
" _
400 .AddText( Context :=
"VALIDATECLASS
" _
401 , MsgId :=
"\t\t« %
1 » must be a Basic object of class : %
2" _
402 , Comment :=
"SF_Utils._Validate error message\n
" _
403 & "%
1: Wrong argument name\n
" _
404 & "%
2: The name of a Basic class
" _
406 .AddText( Context :=
"VALIDATEACTUAL
" _
407 , MsgId :=
"The actual value of « %
1 » is :
'%
2'" _
408 , Comment :=
"SF_Utils._Validate error message\n
" _
409 & "%
1: Wrong argument name\n
" _
410 & "%
2: The value of the argument as a string
" _
412 .AddText( Context :=
"VALIDATEMISSING
" _
413 , MsgId :=
"The « %
1 » argument is mandatory, yet it is missing.
" _
414 , Comment :=
"SF_Utils._Validate error message\n
" _
415 & "%
1: Wrong argument name
" _
417 ' SF_Utils._ValidateArray
418 .AddText( Context :=
"VALIDATEARRAY
" _
419 , MsgId :=
"\t\t« %
1 » must be an array.
" _
420 , Comment :=
"SF_Utils._ValidateArray error message\n
" _
421 & "%
1: Wrong argument name
" _
423 .AddText( Context :=
"VALIDATEDIMS
" _
424 , MsgId :=
"\t\t« %
1 » must have exactly %
2 dimension(s).
" _
425 , Comment :=
"SF_Utils._ValidateArray error message\n
" _
426 & "%
1: Wrong argument name\n
" _
427 & "%
2: Number of dimensions of the array
" _
429 .AddText( Context :=
"VALIDATEALLTYPES
" _
430 , MsgId :=
"\t\t« %
1 » must have all elements of the same type : %
2" _
431 , Comment :=
"SF_Utils._ValidateArray error message\n
" _
432 & "%
1: Wrong argument name\n
" _
433 & "%
2: Either one single type or
'String, Date, Numeric
'" _
435 .AddText( Context :=
"VALIDATENOTNULL
" _
436 , MsgId :=
"\t\t« %
1 » must not contain any NULL or EMPTY elements.
" _
437 , Comment :=
"SF_Utils._ValidateArray error message\n
" _
438 & "%
1: Wrong argument name\n
" _
439 & "NULL and EMPTY should not be translated
" _
441 ' SF_Utils._ValidateFile
442 .AddText( Context :=
"VALIDATEFILE
" _
443 , MsgId :=
"\t\t« %
1 » must be of type String.
" _
444 , Comment :=
"SF_Utils._ValidateFile error message\n
" _
445 & "%
1: Wrong argument name\n
" _
446 & "'String
' should not be translated
" _
448 .AddText( Context :=
"VALIDATEFILESYS
" _
449 , MsgId :=
"\t\t« %
1 » must be a valid file or folder name expressed in the operating system native notation.
" _
450 , Comment :=
"SF_Utils._ValidateFile error message\n
" _
451 & "%
1: Wrong argument name
" _
453 .AddText( Context :=
"VALIDATEFILEURL
" _
454 , MsgId :=
"\t\t« %
1 » must be a valid file or folder name expressed in the portable URL notation.
" _
455 , Comment :=
"SF_Utils._ValidateFile error message\n
" _
456 & "%
1: Wrong argument name\n
" _
457 & "'URL
' should not be translated
" _
459 .AddText( Context :=
"VALIDATEFILEANY
" _
460 , MsgId :=
"\t\t« %
1 » must be a valid file or folder name.
" _
461 , Comment :=
"SF_Utils._ValidateFile error message\n
" _
462 & "%
1: Wrong argument name
" _
464 .AddText( Context :=
"VALIDATEWILDCARD
" _
465 , MsgId :=
"\t\t« %
1 » may contain one or more wildcard characters (?, *) in its last path component only.
" _
466 , Comment :=
"SF_Utils._ValidateFile error message\n
" _
467 & "%
1: Wrong argument name\n
" _
468 & "'(?, *)
' is to be left as is
" _
470 ' SF_Array.RangeInit
471 .AddText( Context :=
"ARRAYSEQUENCE
" _
472 , MsgId :=
"The respective values of
'From
',
'UpTo
' and
'ByStep
' are incoherent.\n\n
" _
473 & "\t« From » = %
1\n
" _
474 & "\t« UpTo » = %
2\n
" _
475 & "\t« ByStep » = %
3" _
476 , Comment :=
"SF_Array.RangeInit error message\n
" _
477 & "%
1, %
2, %
3: Numeric values\n
" _
478 & "'From
',
'UpTo
',
'ByStep
' should not be translated
" _
480 ' SF_Array.AppendColumn, AppendRow, PrependColumn, PrependRow
481 .AddText( Context :=
"ARRAYINSERT
" _
482 , MsgId :=
"The array and the vector to insert have incompatible sizes.\n\n
" _
483 & "\t« Array_2D » = %
2\n
" _
484 & "\t« %
1 » = %
3" _
485 , Comment :=
"SF_Array.AppendColumn (...) error message\n
" _
486 & "%
1:
'Column
' or
'Row
' of a matrix\n
" _
487 & "%
2, %
3: array contents\n
" _
488 & "'Array_2D
' should not be translated
" _
490 ' SF_Array.ExtractColumn, ExtractRow
491 .AddText( Context :=
"ARRAYINDEX1
" _
492 , MsgId :=
"The given index does not fit within the bounds of the array.\n\n
" _
493 & "\t« Array_2D » = %
2\n
" _
494 & "\t« %
1 » = %
3" _
495 , Comment :=
"SF_Array.ExtractColumn (...) error message\n
" _
496 & "%
1:
'Column
' or
'Row
' of a matrix\n
" _
497 & "%
2, %
3: array contents\n
" _
498 & "'Array_2D
' should not be translated
" _
500 ' SF_Array.ExtractColumn, ExtractRow
501 .AddText( Context :=
"ARRAYINDEX2
" _
502 , MsgId :=
"The given slice limits do not fit within the bounds of the array.\n\n
" _
503 & "\t« Array_1D » = %
1\n
" _
504 & "\t« From » = %
2\n
" _
505 & "\t« UpTo » = %
3" _
506 , Comment :=
"SF_Array.ExtractColumn (...) error message\n
" _
507 & "%
1:
'Column
' or
'Row
' of a matrix\n
" _
508 & "%
2, %
3: array contents\n
" _
509 & "'Array_1D
',
'From
' and
'UpTo
' should not be translated
" _
511 ' SF_Array.ImportFromCSVFile
512 .AddText( Context :=
"CSVPARSING
" _
513 , MsgId :=
"The given file could not be parsed as a valid CSV file.\n\n
" _
514 & "\t« File name » = %
1\n
" _
515 & "\tLine number = %
2\n
" _
516 & "\tContent = %
3" _
517 , Comment :=
"SF_Array.ImportFromCSVFile error message\n
" _
518 & "%
1: a file name\n
" _
519 & "%
2: numeric\n
" _
520 & "%
3: a long string
" _
522 ' SF_Dictionary.Add/ReplaceKey
523 .AddText( Context :=
"DUPLICATEKEY
" _
524 , MsgId :=
"The insertion of a new key
" _
525 & "into a dictionary failed because the key already exists.\n
" _
526 & "Note that the comparison between keys is NOT case-sensitive.\n\n
" _
527 & "« %
1 » = %
2" _
528 , Comment :=
"SF_Dictionary Add/ReplaceKey error message\n
" _
529 & "%
1: An identifier
" _
530 & "%
2: a (potentially long) string
" _
532 ' SF_Dictionary.Remove/ReplaceKey/ReplaceItem
533 .AddText( Context :=
"UNKNOWNKEY
" _
534 , MsgId :=
"The requested key does not exist in the dictionary.\n\n
" _
535 & "« %
1 » = %
2" _
536 , Comment :=
"SF_Dictionary Remove/ReplaceKey/ReplaceItem error message\n
" _
537 & "%
1: An identifier
" _
538 & "%
2: a (potentially long) string
" _
540 ' SF_Dictionary.Add/ReplaceKey
541 .AddText( Context :=
"INVALIDKEY
" _
542 , MsgId :=
"The insertion or the update of an entry
" _
543 & "into a dictionary failed because the given key contains only spaces.
" _
544 , Comment :=
"SF_Dictionary Add/ReplaceKey error message\n
" _
546 ' SF_FileSystem.CopyFile/MoveFile/DeleteFile/CreateScriptService(
"L10N
")
547 .AddText( Context :=
"UNKNOWNFILE
" _
548 , MsgId :=
"The given file could not be found on your system.\n\n
" _
549 & "« %
1 » = %
2" _
550 , Comment :=
"SF_FileSystem copy/move/delete error message\n
" _
551 & "%
1: An identifier\n
" _
552 & "%
2: A file name
" _
554 ' SF_FileSystem.CopyFolder/MoveFolder/DeleteFolder/Files/SubFolders
555 .AddText( Context :=
"UNKNOWNFOLDER
" _
556 , MsgId :=
"The given folder could not be found on your system.\n\n
" _
557 & "« %
1 » = %
2" _
558 , Comment :=
"SF_FileSystem copy/move/delete error message\n
" _
559 & "%
1: An identifier\n
" _
560 & "%
2: A folder name
" _
562 ' SF_FileSystem.CopyFile/MoveFolder/DeleteFile
563 .AddText( Context :=
"NOTAFILE
" _
564 , MsgId :=
"« %
1 » contains the name of an existing folder, not that of a file.\n\n
" _
565 & "« %
1 » = %
2" _
566 , Comment :=
"SF_FileSystem copy/move/delete error message\n
" _
567 & "%
1: An identifier\n
" _
568 & "%
2: A file name
" _
570 ' SF_FileSystem.CopyFolder/MoveFolder/DeleteFolder/Files/SubFolders
571 .AddText( Context :=
"NOTAFOLDER
" _
572 , MsgId :=
"« %
1 » contains the name of an existing file, not that of a folder.\n\n
" _
573 & "« %
1 » = %
2" _
574 , Comment :=
"SF_FileSystem copy/move/delete error message\n
" _
575 & "%
1: An identifier\n
" _
576 & "%
2: A folder name
" _
578 ' SF_FileSystem.Copy+Move/File+Folder/CreateTextFile/OpenTextFile
579 .AddText( Context :=
"OVERWRITE
" _
580 , MsgId :=
"You tried to create a new file which already exists. Overwriting it has been rejected.\n\n
" _
581 & "« %
1 » = %
2" _
582 , Comment :=
"SF_FileSystem copy/move/... error message\n
" _
583 & "%
1: An identifier\n
" _
584 & "%
2: A file name
" _
586 ' SF_FileSystem.Copy+Move+Delete/File+Folder
587 .AddText( Context :=
"READONLY
" _
588 , MsgId :=
"Copying or moving a file to a destination which has its read-only attribute set, or deleting such a file or folder is forbidden.\n\n
" _
589 & "« %
1 » = %
2" _
590 , Comment :=
"SF_FileSystem copy/move/delete error message\n
" _
591 & "%
1: An identifier\n
" _
592 & "%
2: A file name
" _
594 ' SF_FileSystem.Copy+Move+Delete/File+Folder
595 .AddText( Context :=
"NOFILEMATCH
" _
596 , MsgId :=
"When « %
1 » contains wildcards. at least one file or folder must match the given filter. Otherwise the operation is rejected.\n\n
" _
597 & "« %
1 » = %
2" _
598 , Comment :=
"SF_FileSystem copy/move/delete error message\n
" _
599 & "%
1: An identifier\n
" _
600 & "%
2: A file or folder name with wildcards
" _
602 ' SF_FileSystem.CreateFolder
603 .AddText( Context :=
"FOLDERCREATION
" _
604 , MsgId :=
"« %
1 » contains the name of an existing file or an existing folder. The operation is rejected.\n\n
" _
605 & "« %
1 » = %
2" _
606 , Comment :=
"SF_FileSystem CreateFolder error message\n
" _
607 & "%
1: An identifier\n
" _
608 & "%
2: A file or folder name
" _
610 ' SF_Services.CreateScriptService
611 .AddText( Context :=
"UNKNOWNSERVICE
" _
612 , MsgId :=
"No service named
'%
4' has been registered for the library
'%
3'.\n\n
" _
613 & "« %
1 » = %
2" _
614 , Comment :=
"SF_Services.CreateScriptService error message\n
" _
615 & "%
1: An identifier\n
" _
616 & "%
2: A string\n
" _
617 & "%
3: A Basic library name\n
" _
618 & "%
4: A service (
1 word) name
" _
620 ' SF_Services.CreateScriptService
621 .AddText( Context :=
"SERVICESNOTLOADED
" _
622 , MsgId :=
"The library
'%
3' and its services could not been loaded.\n
" _
623 & "The reason is unknown.\n
" _
624 & "However, checking the
'%
3.SF_Services.RegisterScriptServices()
' function and its return value can be a good starting point.\n\n
" _
625 & "« %
1 » = %
2" _
626 , Comment :=
"SF_Services.CreateScriptService error message\n
" _
627 & "%
1: An identifier\n
" _
628 & "%
2: A string\n
" _
629 & "%
3: A Basic library name
" _
631 ' SF_Session.ExecuteCalcFunction
632 .AddText( Context :=
"CALCFUNC
" _
633 , MsgId :=
"The Calc
'%
1' function encountered an error. Either the given function does not exist or its arguments are invalid.
" _
634 , Comment :=
"SF_Session.ExecuteCalcFunction error message\n
" _
635 & "'Calc
' should not be translated
" _
637 ' SF_Session._GetScript
638 .AddText( Context :=
"NOSCRIPT
" _
639 , MsgId :=
"The requested %
1 script could not be located in the given libraries and modules.\n
" _
640 & "« %
2 » = %
3\n
" _
641 & "« %
4 » = %
5" _
642 , Comment :=
"SF_Session._GetScript error message\n
" _
643 & "%
1:
'Basic
' or
'Python
'\n
" _
644 & "%
2: An identifier\n
" _
645 & "%
3: A string\n
" _
646 & "%
4: An identifier\n
" _
647 & "%
5: A string
" _
649 ' SF_Session.ExecuteBasicScript
650 .AddText( Context :=
"SCRIPTEXEC
" _
651 , MsgId :=
"An exception occurred during the execution of the Basic script.\n
" _
652 & "Cause: %
3\n
" _
653 & "« %
1 » = %
2" _
654 , Comment :=
"SF_Session.ExecuteBasicScript error message\n
" _
655 & "%
1: An identifier\n
" _
656 & "%
2: A string\n
" _
657 & "%
3: A (long) string
" _
659 ' SF_Session.SendMail
660 .AddText( Context :=
"WRONGEMAIL
" _
661 , MsgId :=
"One of the email addresses has been found invalid.\n
" _
662 & "Invalid mail = « %
1 »
" _
663 , Comment :=
"SF_Session.SendMail error message\n
" _
664 & "%
1 = a mail address
" _
666 ' SF_Session.SendMail
667 .AddText( Context :=
"SENDMAIL
" _
668 , MsgId :=
"The message could not be sent due to a system error.\n
" _
669 & "A possible cause is that LibreOffice could not find any mail client.
" _
670 , Comment :=
"SF_Session.SendMail error message
" _
672 ' SF_TextStream._IsFileOpen
673 .AddText( Context :=
"FILENOTOPEN
" _
674 , MsgId :=
"The requested file operation could not be executed because the file was closed previously.\n\n
" _
675 & "File name =
'%
1'" _
676 , Comment :=
"SF_TextStream._IsFileOpen error message\n
" _
677 & "%
1: A file name
" _
679 ' SF_TextStream._IsFileOpen
680 .AddText( Context :=
"FILEOPENMODE
" _
681 , MsgId :=
"The requested file operation could not be executed because it is incompatible with the mode in which the file was opened.\n\n
" _
682 & "File name =
'%
1'\n
" _
683 & "Open mode = %
2" _
684 , Comment :=
"SF_TextStream._IsFileOpen error message\n
" _
685 & "%
1: A file name\n
" _
686 & "%
2: READ, WRITE or APPEND
" _
688 ' SF_TextStream.ReadLine, ReadAll, SkipLine
689 .AddText( Context :=
"ENDOFFILE
" _
690 , MsgId :=
"The requested file read operation could not be completed because an unexpected end-of-file was encountered.\n\n
" _
691 & "File name =
'%
1'" _
692 , Comment :=
"SF_TextStream.ReadLine/ReadAll/SkipLine error message\n
" _
693 & "%
1: A file name
" _
695 ' SF_UI.Document
696 .AddText( Context :=
"DOCUMENT
" _
697 , MsgId :=
"The requested document could not be found.\n\n
" _
698 & "%
1 =
'%
2'" _
699 , Comment :=
"SF_UI.GetDocument error message\n
" _
700 & "%
1: An identifier\n
" _
701 & "%
2: A string
" _
704 .AddText( Context :=
"DOCUMENTCREATION
" _
705 , MsgId :=
"The creation of a new document failed.\n
" _
706 & "Something must be wrong with some arguments.\n\n
" _
707 & "Either the document type is unknown, or no template file was given,\n
" _
708 & "or the given template file was not found on your system.\n\n
" _
709 & "%
1 =
'%
2'\n
" _
710 & "%
3 =
'%
4'" _
711 , Comment :=
"SF_UI.GetDocument error message\n
" _
712 & "%
1: An identifier\n
" _
713 & "%
2: A string\n
" _
714 & "%
3: An identifier\n
" _
715 & "%
4: A string
" _
717 ' SF_UI.OpenDocument
718 .AddText( Context :=
"DOCUMENTOPEN
" _
719 , MsgId :=
"The opening of the document failed.\n
" _
720 & "Something must be wrong with some arguments.\n\n
" _
721 & "Either the file does not exist, or the password is wrong, or the given filter is invalid.\n\n
" _
722 & "%
1 =
'%
2'\n
" _
723 & "%
3 =
'%
4'\n
" _
724 & "%
5 =
'%
6'" _
725 , Comment :=
"SF_UI.OpenDocument error message\n
" _
726 & "%
1: An identifier\n
" _
727 & "%
2: A string\n
" _
728 & "%
3: An identifier\n
" _
729 & "%
4: A string\n
" _
730 & "%
5: An identifier\n
" _
731 & "%
6: A string
" _
733 ' SF_UI.OpenBaseDocument
734 .AddText( Context :=
"BASEDOCUMENTOPEN
" _
735 , MsgId :=
"The opening of the Base document failed.\n
" _
736 & "Something must be wrong with some arguments.\n\n
" _
737 & "Either the file does not exist, or the file is not registered under the given name.\n\n
" _
738 & "%
1 =
'%
2'\n
" _
739 & "%
3 =
'%
4'" _
740 , Comment :=
"SF_UI.OpenDocument error message\n
" _
741 & "%
1: An identifier\n
" _
742 & "%
2: A string\n
" _
743 & "%
3: An identifier\n
" _
744 & "%
4: A string
" _
746 ' SF_Document._IsStillAlive
747 .AddText( Context :=
"DOCUMENTDEAD
" _
748 , MsgId :=
"The requested action could not be executed because the document was closed inadvertently.\n\n
" _
749 & "The concerned document is
'%
1'" _
750 , Comment :=
"SF_Document._IsStillAlive error message\n
" _
751 & "%
1: A file name
" _
753 ' SF_Document.Save
754 .AddText( Context :=
"DOCUMENTSAVE
" _
755 , MsgId :=
"The document could not be saved.\n
" _
756 & "Either the document has been opened read-only, or the destination file has a read-only attribute set,
" _
757 & "or the file where to save to is undefined.\n\n
" _
758 & "%
1 =
'%
2'" _
759 , Comment :=
"SF_Document.SaveAs error message\n
" _
760 & "%
1: An identifier\n
" _
761 & "%
2: A file name\n
" _
763 ' SF_Document.SaveAs
764 .AddText( Context :=
"DOCUMENTSAVEAS
" _
765 , MsgId :=
"The document could not be saved.\n
" _
766 & "Either the document must not be overwritten, or the destination file has a read-only attribute set,
" _
767 & "or the given filter is invalid.\n\n
" _
768 & "%
1 =
'%
2'\n
" _
769 & "%
3 = %
4\n
" _
770 & "%
5 =
'%
6'" _
771 , Comment :=
"SF_Document.SaveAs error message\n
" _
772 & "%
1: An identifier\n
" _
773 & "%
2: A file name\n
" _
774 & "%
3: An identifier\n
" _
775 & "%
4: True or False\n
" _
776 & "%
5: An identifier\n
" _
777 & "%
6: A string
" _
779 ' SF_Document.any update
780 .AddText( Context :=
"DOCUMENTREADONLY
" _
781 , MsgId :=
"You tried to edit a document which is not modifiable. The document has not been changed.\n\n
" _
782 & "« %
1 » = %
2" _
783 , Comment :=
"SF_Document any update\n
" _
784 & "%
1: An identifier\n
" _
785 & "%
2: A file name
" _
787 ' SF_Base.GetDatabase
788 .AddText( Context :=
"DBCONNECT
" _
789 , MsgId :=
"The database related to the actual Base document could not be retrieved.\n
" _
790 & "Check the connection/login parameters.\n\n
" _
791 & "« %
1 » =
'%
2'\n
" _
792 & "« %
3 » =
'%
4'\n
" _
793 & "« Document » = %
5" _
794 , Comment :=
"SF_Base GetDatabase\n
" _
795 & "%
1: An identifier\n
" _
796 & "%
2: A user name\n
" _
797 & "%
3: An identifier\n
" _
798 & "%
4: A password\n
" _
799 & "%
5: A file name
" _
801 ' SF_Calc._ParseAddress (sheet)
802 .AddText( Context :=
"CALCADDRESS1
" _
803 , MsgId :=
"The given address does not correspond with a valid sheet name.\n\n
" _
804 & "« %
1 » = %
2\n
" _
805 & "« %
3 » = %
4" _
806 , Comment :=
"SF_Calc _ParseAddress (sheet)\n
" _
807 & "%
1: An identifier\n
" _
808 & "%
2: A string\n
" _
809 & "%
3: An identifier\n
" _
810 & "%
4: A file name
" _
812 ' SF_Calc._ParseAddress (range)
813 .AddText( Context :=
"CALCADDRESS2
" _
814 , MsgId :=
"The given address does not correspond with a valid range of cells.\n\n
" _
815 & "« %
1 » = %
2\n
" _
816 & "« %
3 » = %
4" _
817 , Comment :=
"SF_Calc _ParseAddress (range)\n
" _
818 & "%
1: An identifier\n
" _
819 & "%
2: A string\n
" _
820 & "%
3: An identifier\n
" _
821 & "%
4: A file name
" _
823 ' SF_Calc.InsertSheet
824 .AddText( Context :=
"DUPLICATESHEET
" _
825 , MsgId :=
"There exists already in the document a sheet with the same name.\n\n
" _
826 & "« %
1 » = %
2\n
" _
827 & "« %
3 » = %
4" _
828 , Comment :=
"SF_Calc InsertSheet\n
" _
829 & "%
1: An identifier\n
" _
830 & "%
2: A string\n
" _
831 & "%
3: An identifier\n
" _
832 & "%
4: A file name
" _
834 ' SF_Calc.Offset
835 .AddText( Context :=
"OFFSETADDRESS
" _
836 , MsgId :=
"The computed range falls beyond the sheet boundaries or is meaningless.\n\n
" _
837 & "« %
1 » = %
2\n
" _
838 & "« %
3 » = %
4\n
" _
839 & "« %
5 » = %
6\n
" _
840 & "« %
7 » = %
8\n
" _
841 & "« %
9 » = %
10\n
" _
842 & "« %
11 » = %
12" _
843 , Comment :=
"SF_Calc Offset\n
" _
844 & "%
1: An identifier\n
" _
845 & "%
2: A Calc reference\n
" _
846 & "%
3: An identifier\n
" _
847 & "%
4: A number\n
" _
848 & "%
5: An identifier\n
" _
849 & "%
6: A number\n
" _
850 & "%
7: An identifier\n
" _
851 & "%
8: A number\n
" _
852 & "%
9: An identifier\n
" _
853 & "%
10: A number\n
" _
854 & "%
11: An identifier\n
" _
855 & "%
12: A file name
" _
857 ' SF_Calc.CreateChart
858 .AddText( Context :=
"DUPLICATECHART
" _
859 , MsgId :=
"A chart with the same name exists already in the sheet.\n\n
" _
860 & "« %
1 » = %
2\n
" _
861 & "« %
3 » = %
4\n
" _
862 & "« %
5 » = %
6\n
" _
863 , Comment :=
"SF_Calc CreateChart\n
" _
864 & "%
1: An identifier\n
" _
865 & "%
2: A string\n
" _
866 & "%
3: An identifier\n
" _
867 & "%
4: A string\n
" _
868 & "%
5: An identifier\n
" _
869 & "%
6: A file name
" _
871 ' SF_Calc.ExportRangeToFile
872 .AddText( Context :=
"RANGEEXPORT
" _
873 , MsgId :=
"The given range could not be exported.\n
" _
874 & "Either the destination file must not be overwritten, or it has a read-only attribute set.\n\n
" _
875 & "%
1 =
'%
2'\n
" _
876 & "%
3 = %
4" _
877 , Comment :=
"SF_Calc.ExportRangeToFile error message\n
" _
878 & "%
1: An identifier\n
" _
879 & "%
2: A file name\n
" _
880 & "%
3: An identifier\n
" _
881 & "%
4: True or False\n
" _
883 ' SF_Chart.ExportToFile
884 .AddText( Context :=
"CHARTEXPORT
" _
885 , MsgId :=
"The chart could not be exported.\n
" _
886 & "Either the destination file must not be overwritten, or it has a read-only attribute set.\n\n
" _
887 & "%
1 =
'%
2'\n
" _
888 & "%
3 = %
4" _
889 , Comment :=
"SF_Chart.ExportToFile error message\n
" _
890 & "%
1: An identifier\n
" _
891 & "%
2: A file name\n
" _
892 & "%
3: An identifier\n
" _
893 & "%
4: True or False\n
" _
895 ' SF_Form._IsStillAlive
896 .AddText( Context :=
"FORMDEAD
" _
897 , MsgId :=
"The requested action could not be executed because the form is not open or the document was closed inadvertently.\n\n
" _
898 & "The concerned form is
'%
1' in document
'%
2'.
" _
899 , Comment :=
"SF_Dialog._IsStillAlive error message\n
" _
900 & "%
1: An identifier
" _
901 & "%
2: A file name
" _
904 .AddText( Context :=
"CALCFORMNOTFOUND
" _
905 , MsgId :=
"The requested form could not be found in the Calc sheet. The given index is off-limits.\n\n
" _
906 & "The concerned Calc document is
'%
3'.\n\n
" _
907 & "The name of the sheet =
'%
2'\n
" _
908 & "The index = %
1.
" _
909 , Comment :=
"SF_Form determination\n
" _
910 & "%
1: A number\n
" _
911 & "%
2: A sheet name\n
" _
912 & "%
3: A file name
" _
914 ' SF_Document.Forms
915 .AddText( Context :=
"WRITERFORMNOTFOUND
" _
916 , MsgId :=
"The requested form could not be found in the Writer document. The given index is off-limits.\n\n
" _
917 & "The concerned Writer document is
'%
2'.\n\n
" _
918 & "The index = %
1.
" _
919 , Comment :=
"SF_Form determination\n
" _
920 & "%
1: A number\n
" _
921 & "%
2: A file name
" _
924 .AddText( Context :=
"BASEFORMNOTFOUND
" _
925 , MsgId :=
"The requested form could not be found in the form document
'%
2'. The given index is off-limits.\n\n
" _
926 & "The concerned Base document is
'%
3'.\n\n
" _
927 & "The index = %
1.
" _
928 , Comment :=
"SF_Form determination\n
" _
929 & "%
1: A number\n
" _
930 & "%
2: A string\n
" _
931 & "%
3: A file name
" _
933 ' SF_Form.Subforms
934 .AddText( Context :=
"SUBFORMNOTFOUND
" _
935 , MsgId :=
"The requested subform could not be found below the given main form.\n\n
" _
936 & "The main form =
'%
2'.\n
" _
937 & "The subform =
'%
1'.
" _
938 , Comment :=
"SF_Form determination\n
" _
939 & "%
1: A form name\n
" _
940 & "%
2: A form name
" _
942 ' SF_FormControl._SetProperty
943 .AddText( Context :=
"FORMCONTROLTYPE
" _
944 , MsgId :=
"The control
'%
1' in form
'%
2' is of type
'%
3'.\n
" _
945 & "The property or method
'%
4' is not applicable on that type of form controls.
" _
946 , Comment :=
"SF_FormControl property setting\n
" _
947 & "%
1: An identifier\n
" _
948 & "%
2: An identifier\n
" _
949 & "%
3: A string\n
" _
950 & "%
4: An identifier
" _
952 ' SF_Dialog._NewDialog
953 .AddText( Context :=
"DIALOGNOTFOUND
" _
954 , MsgId :=
"The requested dialog could not be located in the given container or library.\n
" _
955 & "« %
1 » = %
2\n
" _
956 & "« %
3 » = %
4\n
" _
957 & "« %
5 » = %
6\n
" _
958 & "« %
7 » = %
8" _
959 , Comment :=
"SF_Dialog creation\n
" _
960 & "%
1: An identifier\n
" _
961 & "%
2: A string\n
" _
962 & "%
3: An identifier\n
" _
963 & "%
4: A file name\n
" _
964 & "%
5: An identifier\n
" _
965 & "%
6: A string\n
" _
966 & "%
7: An identifier\n
" _
967 & "%
8: A string
" _
969 ' SF_Dialog._IsStillAlive
970 .AddText( Context :=
"DIALOGDEAD
" _
971 , MsgId :=
"The requested action could not be executed because the dialog was closed inadvertently.\n\n
" _
972 & "The concerned dialog is
'%
1'.
" _
973 , Comment :=
"SF_Dialog._IsStillAlive error message\n
" _
974 & "%
1: An identifier
" _
976 ' SF_DialogControl._SetProperty
977 .AddText( Context :=
"CONTROLTYPE
" _
978 , MsgId :=
"The control
'%
1' in dialog
'%
2' is of type
'%
3'.\n
" _
979 & "The property or method
'%
4' is not applicable on that type of dialog controls.
" _
980 , Comment :=
"SF_DialogControl property setting\n
" _
981 & "%
1: An identifier\n
" _
982 & "%
2: An identifier\n
" _
983 & "%
3: A string\n
" _
984 & "%
4: An identifier
" _
986 ' SF_DialogControl.WriteLine
987 .AddText( Context :=
"TEXTFIELD
" _
988 , MsgId :=
"The control
'%
1' in dialog
'%
2' is not a multiline text field.\n
" _
989 & "The requested method could not be executed.
" _
990 , Comment :=
"SF_DialogControl add line in textbox\n
" _
991 & "%
1: An identifier\n
" _
992 & "%
2: An identifier
" _
994 ' SF_Dialog.SetPageManager
995 .AddText( Context :=
"PAGEMANAGER
" _
996 , MsgId :=
"The Page Manager could not be setup due to inconsistent arguments.\n\n
" _
997 & " %
1 : « %
2 »\n
" _
998 & " %
3 : « %
4 »\n
" _
999 & " %
5 : « %
6 »
" _
1000 , Comment :=
"SF_Dialog Page Manager setting\n
" _
1001 & "%
1: An identifier\n
" _
1002 & "%
2: A list of names separated by commas\n
" _
1003 & "%
3: An identifier\n
" _
1004 & "%
4: A list of names separated by commas\n
" _
1005 & "%
5: An identifier\n
" _
1006 & "%
6: A list of names separated by commas
" _
1008 ' SF_Database.RunSql
1009 .AddText( Context :=
"DBREADONLY
" _
1010 , MsgId :=
"The database has been opened in read-only mode.\n
" _
1011 & "The
'%
1' method must not be executed in this context.
" _
1012 , Comment :=
"SF_Database when running update SQL statement\n
" _
1013 & "%
1: The concerned method
" _
1015 ' SF_Database._ExecuteSql
1016 .AddText( Context :=
"SQLSYNTAX
" _
1017 , MsgId :=
"An SQL statement could not be interpreted or executed by the database system.\n
" _
1018 & "Check its syntax, table and/or field names, ...\n\n
" _
1019 & "SQL Statement : « %
1 »
" _
1020 , Comment :=
"SF_Database can
't interpret SQL statement\n
" _
1021 & "%
1: The statement
" _
1023 ' SF_Exception.PythonShell (Python only)
1024 .AddText( Context :=
"PYTHONSHELL
" _
1025 , MsgId :=
"The APSO extension could not be located in your LibreOffice installation.
" _
1026 , Comment :=
"SF_Exception.PythonShell error message
" _
1027 & "APSO: to leave unchanged
" _
1029 ' SFUnitTests._NewUnitTest
1030 .AddText( Context :=
"UNITTESTLIBRARY
" _
1031 , MsgId :=
"The requested library could not be located.\n
" _
1032 & "The UnitTest service has not been initialized.\n\n
" _
1033 & "Library name : « %
1 »
" _
1034 , Comment :=
"SFUnitTest could not locate the library gven as argument\n
" _
1035 & "%
1: The name of the library
" _
1037 ' SFUnitTests.SF_UnitTest
1038 .AddText( Context :=
"UNITTESTMETHOD
" _
1039 , MsgId :=
"The method
'%
1' is unexpected in the current context.\n
" _
1040 & "The UnitTest service cannot proceed further with the on-going test.
" _
1041 , Comment :=
"SFUnitTest finds a RunTest() call in a inappropriate location\n
" _
1042 & "%
1: The name of a method
" _
1051 End Sub
' ScriptForge.SF_Root._LoadLocalizedInterface
1053 REM -----------------------------------------------------------------------------
1054 Public Function _Repr() As String
1055 ''' Convert the unique SF_Root instance to a readable string, typically for debugging purposes (DebugPrint ...)
1056 ''' Args:
1057 ''' Return:
1058 ''' "[Root] (MainFunction: xxx, Console: yyy lines, ServicesList)
"
1060 Dim sRoot As String
' Return value
1061 Const cstRoot =
"[Root] (
"
1063 sRoot = cstRoot
& "MainFunction:
" & MainFunction
& ", Console:
" & UBound(ConsoleLines) +
1 & " lines
" _
1064 & ", Libraries:
" & SF_Utils._Repr(ServicesList.Keys) _
1069 End Function
' ScriptForge.SF_Root._Repr
1071 REM -----------------------------------------------------------------------------
1072 Public Sub _StackReset()
1073 ''' Reset private members after a fatal/abort error to leave
1074 ''' a stable persistent storage after an unwanted interrupt
1076 MainFunction =
""
1077 MainFunctionArgs =
""
1079 TriggeredByPython = False
1081 End Sub
' ScriptForge.SF_Root._StackReset
1083 REM ================================================== END OF SCRIPTFORGE.SF_ROOT