Hi,
I need the opinion of you experts:
I have now made the update to UE2023.
Unfortunately, I do not like the new appearance of the block comment at all (optics!!!).
I have therefore written a small program that creates script and function headers with fixed (adjustable) width ==> see code
On execution it is queried whether 1. = script header or 2. = function header.
Script header:
Checks if 1st line contains '// @Engine=WebView2': if yes then insert head in line 2.
Script name is entered automatically (if saved at least once). see '<==' in code.
Enters the current date (function taken here from the forum). (German format). see '<==' in the code.
Path without file name is determined and entered.
Function header:
is inserted at cursor position. Thus on the 1. line of the function. The line is searched for the function name
and entered complete with parameter list. see '<==' in the code.
The parameter list is read and evaluated and for each parameter a separate line is created and the corresponding parameter is entered.
and the corresponding parameter is entered. see '<==' in the code.
Enters the current date (function taken here from the forum). (German format). see '<==' in the code.
What do you think of it ? I would be grateful for any suggestions for optimization.
But !!! Keep in mind I am a beginner in Javascript.
Be merciful
Greetings Frank
PS: The german comments in the code could not be translated, sorry!
I need the opinion of you experts:
I have now made the update to UE2023.
Unfortunately, I do not like the new appearance of the block comment at all (optics!!!).
I have therefore written a small program that creates script and function headers with fixed (adjustable) width ==> see code
On execution it is queried whether 1. = script header or 2. = function header.
Script header:
Checks if 1st line contains '// @Engine=WebView2': if yes then insert head in line 2.
Script name is entered automatically (if saved at least once). see '<==' in code.
Enters the current date (function taken here from the forum). (German format). see '<==' in the code.
Path without file name is determined and entered.
Function header:
is inserted at cursor position. Thus on the 1. line of the function. The line is searched for the function name
and entered complete with parameter list. see '<==' in the code.
The parameter list is read and evaluated and for each parameter a separate line is created and the corresponding parameter is entered.
and the corresponding parameter is entered. see '<==' in the code.
Enters the current date (function taken here from the forum). (German format). see '<==' in the code.
Code: Select all
// ===================================================================================================
// Scriptname : Header mit Datum.js <==
// Aufgabe :
// Beschreibung :
// Author : Frank Schulze
// Datum : 01.05.2023 <==
// Pfad : G:\Eigene Dateien\UltraEdit\scripts\ <==
// ===================================================================================================
var _ue = UltraEdit;
var _thisDoc$ = _ue.activeDocument;
var _con = _ue.outputWindow;
var _selRow$ = "";
var _date$ = "";
var _comment$ = "";
var _result = 0;
var _nCursorPos = 0;
var _bolFunc = false;
const _length = 102;
if (_ue.document.length > 0) // wenn mind. 1 Datei geöffnet ist
{
if (_ue.columnMode == true) // wenn Spaltenmodus aktiv,
{
_result = _ue.getString("Blockmodus aktiv !!!\r\n" + // Info und Auswahl
"(1) = auschalten\r\n" +
"(2) = Abbrechen",1);
if (_result == 1) // wenn '1' (ausschalten)
_ue.columnModeOff() // ausschalten
else if (_result == 2) // wenn '2' (Abbrechen)
Stop; // Programmende
}
_thisDoc$.gotoLine(_thisDoc$.currentLineNum,1); // Cursor an den Zeilenanfang setzen und
_nCursorPos = _thisDoc$.currentPos; // Position merken
_result = _ue.getString("(1) = Header für Sciptköpfe\r\n" + // Abfrage
"(2) = Header für Funktionen\r\n" +
"(Stop) = Abbrechen",1);
if (_result.toLowerCase() == 'stop') // wenn 'Stop'
{
stop; // abbrechen
}
else if (_result == 1) // wenn '1' (Headerkopf)
{
var _Path = _thisDoc$.path.replace(/(.*[\\\/])(.+).+/, '$1'); // Pfad extrahieren
var _FileName = _thisDoc$.path.replace(/^.*[\\\/]/, ''); // Dateinamen extrahieren
_thisDoc$.top(); // Pos1 der Datei
_thisDoc$.findReplace.multiline=true;
_thisDoc$.findReplace.regExp=true;
_thisDoc$.findReplace.find('^// *@.*View2'); // nach WebView2 suchen
if (_thisDoc$.isFound()) // wenn gefunden
{
_con.write(_thisDoc$.currentLineNum + '');
if (_thisDoc$.currentLineNum == 1) // in Zeile 1
_thisDoc$.gotoLine(2,1); // dann unterhalb einfügen
else
_thisDoc$.gotoLine(1,1); // ansonsten in Zeile 1 einfügen
}
else
_thisDoc$.gotoLine(1,1); // ansonsten in Zeile 1 einfügen
_comment$ = "// "; // obere Kopflinie
_comment$ = fn_fillTrailingChars(_comment$ , _comment$.length, _length,'=');
_thisDoc$.write(_comment$); // und ins Dokument eintragen
_comment$ = "// Scriptname : " + _FileName; // Scriptname mit <==> Filename
_comment$ = fn_fillTrailingChars(_comment$ , _comment$.length, _length,' ');
_thisDoc$.write(_comment$);
_comment$ = "// Aufgabe : "; // Aufgabe
_comment$ = fn_fillTrailingChars(_comment$ , _comment$.length, _length,' ');
_thisDoc$.write(_comment$);
_comment$ = "// Beschreibung : "; // Beschreibung
_comment$ = fn_fillTrailingChars(_comment$ , _comment$.length, _length,' ');
_thisDoc$.write(_comment$);
_comment$ = "// Author : Frank Schulze"; // Author
_comment$ = fn_fillTrailingChars(_comment$ , _comment$.length, _length,' ');
_thisDoc$.write(_comment$);
_comment$ = "// Datum : " + fn_createDate(); // Datum mit <==> Erstellungsdatum
_comment$ = fn_fillTrailingChars(_comment$ , _comment$.length, _length,' ');
_thisDoc$.write(_comment$);
_comment$ = "// Pfad : " + _Path; // Pfad mit <==> Pfad
_comment$ = fn_fillTrailingChars(_comment$ , _comment$.length, _length,' ');
_thisDoc$.write(_comment$);
}
else if (_result == 2) // wenn '2' (Funktionskopf)
{
_thisDoc$.selectLine(); // Zeile markieren
_selRow$ = _thisDoc$.selection; // und sichern
_thisDoc$.gotoPos(_nCursorPos); // zur alten Pos. zurückkehren (hebt Markierung wieder auf)
_comment$ = "// ";
_comment$ = fn_fillTrailingChars(_comment$ , _comment$.length, _length,'=');
_thisDoc$.write(_comment$);
getFuncName(_selRow$); // <==> erstellt Functionname und event. nötige Parameterabschnitte
_comment$ = "// Aufgabe : "; // Aufgabe
_comment$ = fn_fillTrailingChars(_comment$ , _comment$.length, _length,' ');
_thisDoc$.write(_comment$);
if (_bolFunc) // wenn Funktion, dann Rückgabe berücksichtigen
{
_comment$ = "// Rückgabe : ";
_comment$ = fn_fillTrailingChars(_comment$ , _comment$.length, _length,' ');
_thisDoc$.write(_comment$);
} ;
_comment$ = "// Author : Frank Schulze";
_comment$ = fn_fillTrailingChars(_comment$ , _comment$.length, _length,' ');
_thisDoc$.write(_comment$);
_comment$ = "// Datum : " + fn_createDate();
_comment$ = fn_fillTrailingChars(_comment$ , _comment$.length, _length,' ');
_thisDoc$.write(_comment$);
}
_comment$ = "// "; // untere Kopflinie
_comment$ = fn_fillTrailingChars(_comment$ , _comment$.length, _length,'=');
_thisDoc$.write(_comment$);
_thisDoc$.gotoPos(_nCursorPos);
}
// ===================================================================================================
// Funktion : fn_createDate() <==
// Aufgabe :
// Rückgabe : fertiges Datum (german)
// Author : ??
// Datum : ??.??.????
// ===================================================================================================
function fn_createDate()
{
var currentDate = new Date();
currentDate.setDate(currentDate.getDate());
var d = currentDate.getDay()
var dt = currentDate.getDate();
dt = (dt < 10 ? '0' : '') + dt;
var m = currentDate.getMonth() + 1;
m = (m < 10 ? '0' : '') + m;
var year = currentDate.getFullYear();
var mn = currentDate.getMinutes();
mn = (mn < 10 ? '0' : '') + mn;
var hr = currentDate.getHours();
hr = (hr < 10 ? '0' : '') + hr;
var _strDate = dt + "." + m + "." + year;
return _strDate;
}
// ===================================================================================================
// Funktion : fn_fillTrailingChars(_comment$, _startCol, _numChars, _char$) <==
// Parameter 1 : _comment$ = bisheriger 'Vorstring' <==
// Parameter 2 : _startCol = Startposition (ab Ende des 'Vorstrings') <==
// Parameter 3 : _numChars = Anzahl Spalten insgesamt <==
// Parameter 4 : _char$ = Füllzeichen <==
// Aufgabe : erstellt Kommentarblöcke mit fester einstellbarer Breite
// Rückgabe : fertige Kommentarzeile
// Author : Frank Schulze
// Datum : 19.04.2023 <==
// ===================================================================================================
function fn_fillTrailingChars(_comment$, _startCol, _numChars, _char$)
{
for (_startCol; _startCol < _numChars; _startCol++) // Schleife: von akt. Pos. bis max. Spalte
{
_comment$ += _char$; // mit angegebenen Zeiche auffüllen
}
_comment$ = _comment$ + '\r\n'; // zum Schluss noch ein Zeilenende anhängen
return _comment$; // fertigen String an Funktion zurückgeben
}
// ===================================================================================================
// Funktion : getFuncName(_Row$) <==
// Parameter 1 : _Row$ = String mit der akt. Zeile <==
// Aufgabe :
// Author : Frank Schulze
// Datum : 29.04.2023 <==
// ===================================================================================================
function getFuncName(_Row$)
{
const _obj = /(function\W+)(\w+) ?\((.*)\)/.exec(_Row$); // prüft, ob ein Funktionsnamen gefunden werden kann
// und erstellt ein neues Objekt wenn ja
var _found$ = "";
if (_obj == null) // nicht gefunden ?
{
_found$ = "nicht gefunden !"; // Fehlermeldung generieren
_con.write(_found$); // und ausgeben
}
else // sonst
{
var _Parameter$ = _obj[3]; // Parameterstring sichern
_found$ = _obj[0].substring(9,_obj[0].length); // gefundenen Funktionsnamen sichern
if (_found$.match(/^fn.+/) != null) _bolFunc=true; // wenn fn
_comment$ = "// Funktion : " + _found$;
_comment$ = fn_fillTrailingChars(_comment$, _comment$.length, _length, ' ');
_thisDoc$.write(_comment$);
_con.write(_Parameter$ + '+' + _found$);
if (_Parameter$ != "") prepareParameter(_Parameter$); // wenn Parameter vorhanden, <==>
}
}
// ===================================================================================================
// Funktion : prepareParameter(_Parameter$) <==
// Parameter 1 : _Parameter$ = <==
// Aufgabe :
// Author : Frank Schulze
// Datum : 30.04.2023 <==
// ===================================================================================================
function prepareParameter(_Parameter$)
{
var i = 0;
var _ParamList$ = "";
var _tmpSplit$ = _Parameter$.split(','); // Parameterstring bei vorhandenem Komma teilen
var _numParam = _tmpSplit$.length; // Anz. Parameter ermitteln
while (i < _numParam) // Schleife für Anzahl
{
_ParamList$ = _tmpSplit$[i];
_ParamList$ += ' = ';
_comment$ = "// Parameter " + (i + 1) + " : " + _ParamList$.trim();
_comment$ = fn_fillTrailingChars(_comment$, _comment$.length, _length, ' ');
_thisDoc$.write(_comment$);
i++;
}
}
But !!! Keep in mind I am a beginner in Javascript.
Be merciful
Greetings Frank
PS: The german comments in the code could not be translated, sorry!
(Translated with DeepL)
Win11 (64bit) 23H2 - UE 2024.0.0.35 64bit
Win11 (64bit) 23H2 - UE 2024.0.0.35 64bit