85 lines
2.0 KiB
Plaintext
85 lines
2.0 KiB
Plaintext
{
|
|
Russian 866 codepage support
|
|
}
|
|
|
|
unit Edit;
|
|
|
|
{ Global variables }
|
|
var
|
|
CodePage866Item: TMenuItem;
|
|
DoWordWrapItem: TMenuItem;
|
|
|
|
{ function NewItem(const ACaption: string; AShortCut: TShortCut; AChecked, AEnabled: Boolean; AOnClick: TNotifyEvent; hCtx: Word; const AName: string): TMenuItem; }
|
|
|
|
procedure InitEdit;
|
|
var
|
|
miEdit: TMenuItem;
|
|
begin
|
|
miEdit := MainWindow.FindComponent('miEdit');
|
|
|
|
CodePage866Item := NewItem('Convert From Code Page &866', 0, False, True, 0, nil {ignored - always must be nil}, 'miCodePage866');
|
|
CodePage866Item.OnClick := CodePage866Click;
|
|
miEdit.Add(CodePage866Item);
|
|
|
|
DoWordWrapItem := NewItem('Format Word Wrap', 0, False, True, 0, nil {ignored - always must be nil}, 'miDoWordWrap');
|
|
DoWordWrapItem.OnClick := DoWordWrapClick;
|
|
miEdit.Add(DoWordWrapItem);
|
|
end;
|
|
|
|
procedure CodePage866Click(Sender: TObject);
|
|
begin
|
|
Editor.Lines.Text := Dos2WinRes(Editor.Lines.Text);
|
|
end;
|
|
|
|
procedure DoWordWrapClick(Sender: TObject);
|
|
var
|
|
i: Integer;
|
|
S: string;
|
|
VC: Integer;
|
|
EN: Integer;
|
|
StatusBar: TStatusBar;
|
|
T: string;
|
|
begin
|
|
i := 0;
|
|
VC := Editor.VisibleColCount - 1;
|
|
StatusBar := MainWindow.FindComponent('StatusBar');
|
|
T := StatusBar.Panels.Items[0].Text;
|
|
while i <= Editor.Lines.Count - 1 do
|
|
begin
|
|
StatusBar.Panels.Items[0].Text := IntToStr(i / Editor.Lines.Count * 100) + '%';
|
|
StatusBar.Update;
|
|
S := Editor.Lines.Strings[i];
|
|
if Length(S) > VC then
|
|
begin
|
|
Editor.Lines.Delete(i);
|
|
while Length(S) > VC do
|
|
begin
|
|
EN := FindEndOfLine(S, VC);
|
|
Editor.Lines.Insert(i, Copy(S, 1, EN));
|
|
S := Copy(S, EN + 1, 1000000);
|
|
i := i + 1;
|
|
end;
|
|
Editor.Lines.Insert(i, S);
|
|
end;
|
|
i := i + 1;
|
|
end;
|
|
StatusBar.Panels.Items[0].Text := T;
|
|
end;
|
|
|
|
function FindEndOfLine(S: string; P: Integer): Integer;
|
|
var
|
|
i: Integer;
|
|
V: Integer;
|
|
begin
|
|
Result := P;
|
|
for i := 0 to P - 1 do
|
|
begin
|
|
V := P - i;
|
|
if S[V] = ' ' then Break;
|
|
end;
|
|
if V > 1 then
|
|
Result := V;
|
|
end;
|
|
|
|
end.
|