//********************************************************************* //* Quote_Correction 2020-06-04 * //* >> OnBeforeSavingMessage << * //* * //* Dieses Script versucht nach bestem Gewissen das Quoting eines * //* Artikels und / oder einer Mail zu korrigieren * //* * //* Funktionalitaet: [x] neutral * //* [ ] nur Basis_Modul * //* [ ] nur Pathfinder * //* * //* Datum : 10.11.2006; ueberarbeitet am: 04.06.2020 * //* Autoren : Thomas Barghahn * //* * //* DateiName : _i_OBSaveM_Quote_Correction.ds * //* Einbindung: {$I _i_OBSaveM_Quote_Correction.ds} * //* Aufruf : Not_Error := Quote_Correction (Not_Error, Message, * //* IsEmail, Error_Func); * //********************************************************************* procedure Init_QuoteCorrection ( var ChangeInEmails : Boolean; var ChangeInNews : Boolean ); begin //{-------------------------------------------------------------------} //{ Anwenderspezifische Einstellungen } //{-------------------------------------------------------------------} // change quoting in emails and/or postings // set 'true' or 'false' ChangeInEmails := true; ChangeInNews := true; //{-------------------------------------------------------------------} //{ Ende der Einstellungen } //{-------------------------------------------------------------------} end; //{===================================================================} //{ !!! Ab hier bitte nichts mehr ändern !!! } //{===================================================================} //--[ START Function Quote_Correction ]--------------------------------- Function Quote_Correction (fbkResult : Boolean; Message : TStringlist; IsEmail : boolean; Error_Func : String) : Boolean; var i, k, H_Lines, MaxInt : integer; ChangeInEmails : Boolean; ChangeInNews : Boolean; EventSwitch , Control : Boolean; Q_Str, Quote_Space : String; rf : TReplaceFlags; Space_String : String; Space_Counter : Byte; // WString : WideString; begin // Rückgabewert entsprechend vorheriger Scriptprobleme setzen Result := fbkResult; // Wenn bereits irgendein Script einen Fehler verursacht hat, // dann muss der User benachrichtigt werden If not Result Then begin WriteToLog ('==== ANFANG =======================================' ,4); WriteToLog ('Script *** Quote_Correction *** wird weiterhin ausgefuehrt' ,4); WriteToLog ('Script ' + Error_Func + ' hat diese WARNUNG verursacht!' ,4); WriteToLog ('==== ENDE =========================================' ,4); end; If Message.Count > 0 then begin rf := [rfReplaceAll]; MaxInt := 2147483647; Control := False; H_Lines := 0; Init_QuoteCorrection ( ChangeInEmails, ChangeInNews ); if ((IsEmail=true) and (ChangeInEmails=true)) or ((IsEmail=false) and (ChangeInNews=true)) then begin while Message.Strings[H_Lines] <> '' do begin H_Lines := H_Lines + 1; end; Try For i := H_Lines + 1 to ( Message.Count - 1 ) do begin Space_Counter := 0; Quote_Space := ' '; Space_String := ''; Q_Str := ''; k := 1; Message.Strings[i] := TrimRight(Message.Strings[i]); if length (Message.Strings[i]) > length (TrimLeft (Message.Strings[i])) then begin Space_String := copy (Message.Strings[i], 1, length (Message.Strings[i]) - length (TrimLeft (Message.Strings[i]))); Message.Strings[i] := TrimLeft (Message.Strings[i]); end; // if if (copy ( Message.Strings[i], 1, 1 ) = '>') or (copy ( Message.Strings[i], 1, 1 ) = '|') then begin Message.Strings[i] := StringReplace ( Message.Strings[i], '> >', '>>', rf); Message.Strings[i] := StringReplace ( Message.Strings[i], '| |', '||', rf); end; // if If Message.Strings[i] = '--' then Message.Strings[i] := '-- '; If Message.Strings[i] = '-- ' then Break; if (pos('>',Message.Strings[i]) = 1) or (pos(':',Message.Strings[i]) = 1) then begin If Control = True then WriteToLog (IntToStr(length ( Message.Strings[i])) + ' ++1++',3); repeat EventSwitch := True; if (( Message.Strings[i][k] ) = '>') or (( Message.Strings[i][k] ) = '|') or (( Message.Strings[i][k] ) = ' ') then begin Q_Str := Q_Str + Message.Strings[i][k]; If Message.Strings[i][k] = ' ' then Space_Counter := Space_Counter + 1 else Space_Counter := 0; If Control = True then WriteToLog (Q_Str + ' ' + IntToStr(k) + ' ++2++', 3); EventSwitch := false; end; // if k := k + 1; until ( k = length ( Message.Strings[i]) + 1) or ( EventSwitch = true ) or (Space_Counter = 2); k := k - 1; If Control = True then WriteToLog ('Ich bin hier k=' + IntToStr(k), 3); If ( length ( Message.Strings[i] ) = k) and ((( Message.Strings[i][k] ) = '>') or (( Message.Strings[i][k] ) = '|') or (( Message.Strings[i][k] ) = ' ')) then begin Message.Strings[i] := ''; Q_Str := ''; Quote_Space := ''; end; If length ( Message.Strings[i] ) >= k then begin Message.Strings[i] := copy ( Message.Strings[i], k, MaxInt); If Control = True then WriteToLog ( Message.Strings[i] + ' ++3++', 3); end; Q_Str := StringReplace ( Q_Str, ' ', '', rf); Q_Str := StringReplace ( Q_Str, '>|', '> |', rf); Message.Strings[i] := Q_Str + Quote_Space + Message.Strings[i]; If pos (':', Q_Str) > 0 then begin Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': -)', ' :-)', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': -|', ' :-|', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': -]', ' :-]', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': -[', ' :-[', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': )', ' :)', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': Þ', ' :Þ', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': o)', ' :o)', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': -(', ' :-(', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': -O', ' :-O', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': -P', ' :-P', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': -/', ' :-/', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': -\', ' :-\', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': o(', ' :o(', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': ´-)', ' :´-)', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': ´-(', ' :´-(', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': -D', ' :-D', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': *)', ' :*)', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': )', ' :)', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': ]', ' :]', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': }', ' :}', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': (', ' :(', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': -p', ' :-p', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': -b', ' :-b', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': x)', ' :x)', rf)); Message.Strings[i] := TrimLeft (StringReplace ( Message.Strings[i], ': ->', ' :->', rf)); end; // if If Control = True then WriteToLog ( Message.Strings[i] + ' ++4++', 3); end; // if If (length (Message.Strings[i]) + length (Space_String)) > length (Space_String) then Message.Strings[i] := Space_String + Message.Strings[i] else Message.Strings[i] := ''; end; // for Except // Bei Problemen den User benachrichtigen. begin WriteToLog ('FEHLER im Script *** Quote_Correction ***' ,4); WriteToLog ('From : ' + GetHeader('From: ', Message), 4); WriteToLog ('Newsgroups : ' + GetHeader('Newsgroups: ', Message), 4); WriteToLog ('Date : ' + GetHeader('Date: ', Message), 4); WriteToLog ('Message-ID : ' + GetHeader('Message-ID: ', Message), 4); Error_Func := '*** Quote_Correction ***'; Result := false; end; // Except end; // Try ... Except end; // if end; // if end; // Function //--[ ENDE Function Quote_Correction ]----------------------------------