home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
sibylft1.zip
/
DOC.DAT
/
DOC
/
SPCC
/
EDITORS.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1997-04-07
|
27KB
|
612 lines
{╔══════════════════════════════════════════════════════════════════════════╗
║ ║
║ Sibyl Portable Component Classes ║
║ ║
║ Copyright (c) 1995,97 SpeedSoft Germany, All rights reserved. ║
║ ║
╚══════════════════════════════════════════════════════════════════════════╝}
UNIT Editors;
INTERFACE
{$IFDEF OS2}
USES PMWin;
{$ENDIF}
{$IFDEF WIN95}
USES WinUser;
{$ENDIF}
USES Messages,Dos,SysUtils,Classes,Forms,StdCtrls,Dialogs;
CONST
NormalChars : SET OF CHAR = ['0'..'9','A'..'Z','a'..'z','_',
'ä','Ä','ö','Ö','ü','Ü','ß'];
StringLength = 255;
ciNormal = 0;
ciBookMark0 = 1;
ciBookMarkMask = 1 + 2 + 4 + 8;
ciSelected = 16;
{codes for TColorArray}
fgcPlainText = 0;
bgcPlainText = 1;
fgcMarkedBlock = 2;
bgcMarkedBlock = 3;
fgcSearchMatch = 4;
bgcSearchMatch = 5;
fgcRightMargin = 6;
kbPreCtrlK = kb_Ctrl + 8192;
kbPreCtrlQ = kb_Ctrl + 16384;
kbPreCtrlO = kb_Ctrl + 32768;
kbPreCtrlU = kb_Ctrl + 65536;
{Ctrl-K Codes}
kbCtrlKA = kbPreCtrlK + kb_Char + 97;
kbCtrlKB = kbPreCtrlK + kb_Char + 98;
kbCtrlKC = kbPreCtrlK + kb_Char + 99;
kbCtrlKD = kbPreCtrlK + kb_Char + 100;
kbCtrlKE = kbPreCtrlK + kb_Char + 101;
kbCtrlKF = kbPreCtrlK + kb_Char + 102;
kbCtrlKG = kbPreCtrlK + kb_Char + 103;
kbCtrlKH = kbPreCtrlK + kb_Char + 104;
kbCtrlKI = kbPreCtrlK + kb_Char + 105;
kbCtrlKJ = kbPreCtrlK + kb_Char + 106;
kbCtrlKK = kbPreCtrlK + kb_Char + 107;
kbCtrlKL = kbPreCtrlK + kb_Char + 108;
kbCtrlKM = kbPreCtrlK + kb_Char + 109;
kbCtrlKN = kbPreCtrlK + kb_Char + 110;
kbCtrlKO = kbPreCtrlK + kb_Char + 111;
kbCtrlKP = kbPreCtrlK + kb_Char + 112;
kbCtrlKQ = kbPreCtrlK + kb_Char + 113;
kbCtrlKR = kbPreCtrlK + kb_Char + 114;
kbCtrlKS = kbPreCtrlK + kb_Char + 115;
kbCtrlKT = kbPreCtrlK + kb_Char + 116;
kbCtrlKU = kbPreCtrlK + kb_Char + 117;
kbCtrlKV = kbPreCtrlK + kb_Char + 118;
kbCtrlKW = kbPreCtrlK + kb_Char + 119;
kbCtrlKX = kbPreCtrlK + kb_Char + 120;
kbCtrlKY = kbPreCtrlK + kb_Char + 121;
kbCtrlKZ = kbPreCtrlK + kb_Char + 122;
{Ctrl-Q Codes}
kbCtrlQA = kbPreCtrlQ + kb_Char + 97;
kbCtrlQB = kbPreCtrlQ + kb_Char + 98;
kbCtrlQC = kbPreCtrlQ + kb_Char + 99;
kbCtrlQD = kbPreCtrlQ + kb_Char + 100;
kbCtrlQE = kbPreCtrlQ + kb_Char + 101;
kbCtrlQF = kbPreCtrlQ + kb_Char + 102;
kbCtrlQG = kbPreCtrlQ + kb_Char + 103;
kbCtrlQH = kbPreCtrlQ + kb_Char + 104;
kbCtrlQI = kbPreCtrlQ + kb_Char + 105;
kbCtrlQJ = kbPreCtrlQ + kb_Char + 106;
kbCtrlQK = kbPreCtrlQ + kb_Char + 107;
kbCtrlQL = kbPreCtrlQ + kb_Char + 108;
kbCtrlQM = kbPreCtrlQ + kb_Char + 109;
kbCtrlQN = kbPreCtrlQ + kb_Char + 110;
kbCtrlQO = kbPreCtrlQ + kb_Char + 111;
kbCtrlQP = kbPreCtrlQ + kb_Char + 112;
kbCtrlQQ = kbPreCtrlQ + kb_Char + 113;
kbCtrlQR = kbPreCtrlQ + kb_Char + 114;
kbCtrlQS = kbPreCtrlQ + kb_Char + 115;
kbCtrlQT = kbPreCtrlQ + kb_Char + 116;
kbCtrlQU = kbPreCtrlQ + kb_Char + 117;
kbCtrlQV = kbPreCtrlQ + kb_Char + 118;
kbCtrlQW = kbPreCtrlQ + kb_Char + 119;
kbCtrlQX = kbPreCtrlQ + kb_Char + 120;
kbCtrlQY = kbPreCtrlQ + kb_Char + 121;
kbCtrlQZ = kbPreCtrlQ + kb_Char + 122;
kbCtrlShiftP = kb_Ctrl + kb_Shift + kb_Char + 80;
kbCtrlShiftR = kb_Ctrl + kb_Shift + kb_Char + 82;
kbCtrlShiftS = kb_Ctrl + kb_Shift + kb_Char + 83;
kbCtrlShiftI = kb_Ctrl + kb_Shift + kb_Char + 73;
kbCtrlShiftU = kb_Ctrl + kb_Shift + kb_Char + 85;
kbCtrlShiftY = kb_Ctrl + kb_Shift + kb_Char + 89;
kbCtrlShiftZ = kb_Ctrl + kb_Shift + kb_Char + 90;
kbCtrlSlash = kb_Ctrl + kb_Shift + kb_Char + 47;
kbCtrlBackSlash = kb_Ctrl + kb_Shift + kb_Char + 92;
kbCtrlShiftCLeft = kb_Ctrl + kb_Shift + kbCLeft;
kbCtrlShiftCRight = kb_Ctrl + kb_Shift + kbCRight;
kbCtrlShiftHome = kb_Ctrl + kb_Shift + kbHome;
kbCtrlShiftEnd = kb_Ctrl + kb_Shift + kbEnd;
kbCtrlShiftPageUp = kb_Ctrl + kb_Shift + kbPageUp;
kbCtrlShiftPageDown = kb_Ctrl + kb_Shift + kbPageDown;
kbCtrlAltShiftCLeft = kb_Ctrl + kb_Alt + kb_Shift + kbCLeft;
kbCtrlAltShiftCRight= kb_Ctrl + kb_Alt + kb_Shift + kbCRight;
kbCtrlAltShiftHome = kb_Ctrl + kb_Alt + kb_Shift + kbHome;
kbCtrlAltShiftEnd = kb_Ctrl + kb_Alt + kb_Shift + kbEnd;
kbCtrlAltShiftPageUp= kb_Ctrl + kb_Alt + kb_Shift + kbPageUp;
kbCtrlAltShiftPageDown = kb_Ctrl + kb_Alt + kb_Shift + kbPageDown;
kbAltShiftBkSp = kb_Alt + kb_Shift + kbBkSp;
kbAltShiftCLeft = kb_Alt + kb_Shift + kbCLeft;
kbAltShiftCRight = kb_Alt + kb_Shift + kbCRight;
kbAltShiftCUp = kb_Alt + kb_Shift + kbCUp;
kbAltShiftCDown = kb_Alt + kb_Shift + kbCDown;
kbAltShiftPageUp = kb_Alt + kb_Shift + kbPageUp;
kbAltShiftPageDown = kb_Alt + kb_Shift + kbPageDown;
kbAltShiftHome = kb_Alt + kb_Shift + kbHome;
kbAltShiftEnd = kb_Alt + kb_Shift + kbEnd;
kbCtrlOC = kbPreCtrlO + kb_Char + 99;
kbCtrlOK = kbPreCtrlO + kb_Char + 107;
kbCtrlOU = kbPreCtrlO + kb_Char + 117;
kbCtrlK0 = kbPreCtrlK + kb_Char + 48;
kbCtrlK9 = kbPreCtrlK + kb_Char + 57;
kbCtrlQ0 = kbPreCtrlQ + kb_Char + 48;
kbCtrlQ9 = kbPreCtrlQ + kb_Char + 57;
kbCtrlU0 = kbPreCtrlU + kb_Char + 48;
kbCtrlU9 = kbPreCtrlU + kb_Char + 57;
kbCtrlUU = kbPreCtrlU + kb_Char + 117;
TYPE
PLine=^TLine;
TLine=RECORD
prev: PLine;
zk: PSTRING;
flag: LONGWORD;
add: LONGWORD;
next: PLine;
END;
TColorTable=ARRAY[0..255] OF TColor;
TColorIndex=RECORD
Fgc: BYTE;
Bgc: BYTE;
END;
TColorArray=ARRAY[1..StringLength] OF TColorIndex;
TEditorPos=RECORD
Y: LONGINT;
X: INTEGER;
END;
TLineX=RECORD
Line: PLine;
X: INTEGER;
END;
TICB=RECORD {Internal Clipboard}
First: TLineX;
Last: TLineX;
END;
TUndoGroup=(ugNoGroup,ugGroup,ugCursorMove,
ugInsertChar,ugOverwriteChar,ugDeleteChar,ugBackspaceChar,
ugDeleteActLine,ugDeleteRightWord,ugBlockLeft,ugBlockRight,
ugBreakLine,ugEnter,ugTabulator,
ugInsertLine,ugDeleteLine,ugReplaceLine);
PUndo=^TUndo;
TUndo=RECORD
Memory: BOOLEAN;
EventType: TUndoGroup;
Modified: BOOLEAN;
ICBFL: LONGINT;
ICBFX: INTEGER;
ICBLL: LONGINT;
ICBLX: INTEGER;
FFileCursor: TEditorPos;
FrameBegin: LONGINT;
FrameEnd: LONGINT;
FirstUndoLine: PLine;
LastUndoLine: PLine;
Lines: LONGINT;
END;
{$M+}
TEditOpt=SET OF (eoCreateBackups,eoAppendBAK,eoAutoIndent,
eoUnindent,eoUndoGroups,eoCursorClimb,
eoPersistentBlocks,eoOverwriteBlock,
eoAutoSave,eo2ClickLine,eoSmartTabs,eoHomeFirstWord);
TKeystrokeMap=(kmWordStar,kmCUA,kmDefault{,kmBrief,kmEpsilon});
{$M-}
TCursorShape=(csUnderline,csVertical);
TSelectMode=(smNonInklusiveBlock,smColumnBlock);
TICBPosition=SET OF (ipBeforeICBFirst,ipAfterICBFirst,ipWithinICB,
ipBeforeICBLast,ipAfterICBLast);
TFindAction=(faNothing,faFind,faReplace,faIncSearch);
TFindReplace=RECORD
find: STRING;
replace: STRING;
direction: TFindDirection;
origin: TFindOrigin;
scope: TFindScope;
options: TFindOptions;
confirm: BOOLEAN;
replall: BOOLEAN;
END;
TEditor=CLASS(TForm)
PRIVATE
FCaret: TCaret;
FOldCaption: STRING;
FKeyMap: TKeystrokeMap;
FInsertMode: BOOLEAN;
FReadOnly: BOOLEAN;
FModified: BOOLEAN;
FUntitled: BOOLEAN;
FEditOpt: TEditOpt;
FTabSize: INTEGER;
FCountLines: LONGINT;
FBottomScrollBar: TScrollBar;
FRightScrollBar: TScrollBar;
ClientArea: TRect;
IgnoreRedraw: INTEGER;
FWinSize: TPoint;
FFileCursor: TEditorPos;
FScrCursor: TEditorPos;
FFirstLine: PLine;
FLastLine: PLine;
FActLine: PLine;
FTopScreenLine: PLine;
WLactivated: BOOLEAN;
FWorkLine: STRING;
ICB: TICB;
ICBVisible: BOOLEAN;
MaxUndo: LONGINT;
KeyRepeat: INTEGER;
FPreCtrl: TKeyCode;
BookMarkX: ARRAY[1..10] OF INTEGER;
HadFocus: INTEGER;
IncSearchList: TList;
IncSearchText: STRING;
FindICB: TICB;
FMask: STRING;
FSelColor: TColor;
FSelBackColor: TColor;
FFoundColor: TColor;
FFoundBackColor: TColor;
FWrapLineColor: TColor;
FSaveEvents: INTEGER;
FEventsCounter: INTEGER;
WrapLineX: INTEGER;
ScrOffsX: INTEGER;
FFileName: STRING;
FMacroList: TList;
FRecording: BOOLEAN;
FPlaying: BOOLEAN;
FCursorShape: TCursorShape;
FSelectMode: TSelectMode;
FWordWrap: BOOLEAN;
FWordWrapColumn: INTEGER;
FFindReplace: TFindReplace;
FLastFind: TFindAction;
FBorderWidth: LONGINT;
FCtl3D: BOOLEAN;
FUndoList: TList;
FRedoList: TList;
FTempFileName: STRING;
FDragRect: TRect;
IsDBCSFont: BOOLEAN;
PROCEDURE CalcSizes;
PROCEDURE SetFont(NewFont:TFont);OVERRIDE;
PROCEDURE SetCtl3D(Value:BOOLEAN);
PROCEDURE SetKeyMap(km:TKeystrokeMap);
PROCEDURE SetInsertMode(im:BOOLEAN);
PROCEDURE ToggleInsertMode;
PROCEDURE SetEditOpt(eo:TEditOpt);
PROCEDURE SetTabSize(ts:INTEGER);
PROCEDURE SetSaveEvents(cnt:INTEGER);
PROCEDURE SetLastUndoGroup(ug:TUndoGroup);
FUNCTION GetLastUndoGroup:TUndoGroup;
PROCEDURE SetCursorShape(cs:TCursorShape);
PROCEDURE SetSelectMode(sm:TSelectMode);
PROCEDURE SetWordWrap(wrap:BOOLEAN);
PROCEDURE SetWordWrapColumn(column:INTEGER);
FUNCTION GetUndoCount:LONGINT;
FUNCTION GetRedoCount:LONGINT;
{Basic Structure}
FUNCTION _Index2PLine(y:LONGINT):PLine;
FUNCTION _PLine2Index(pl:PLine):LONGINT;
FUNCTION _PLine2PString(pl:PLine):PSTRING;
FUNCTION _Connect(pl1,pl2:PLine):BOOLEAN;
FUNCTION _CountLines(pl1,pl2:PLine):LONGINT;
{Undo/Redo}
FUNCTION _CountUndoLines(FirstL,LastL:PLine):LONGINT;
PROCEDURE _StoreUndoCursor(List:TList);
FUNCTION _CopyUndoLines(FirstL,LastL:PLine):LONGINT;
FUNCTION _MoveUndoLines(List:TList;FirstL,LastL:PLine):LONGINT;
PROCEDURE _CreateUndoEvent(List:TList;U:PUndo);
PROCEDURE _UpdateLastUndoEvent(List:TList;Index:LONGINT);
PROCEDURE _FreeUndoEvent(List:TObject;Item:POINTER);
PROCEDURE _SetMaxUndo(cnt:LONGINT);
{WorkLine Manipulation}
PROCEDURE _ReadWorkLine;
PROCEDURE _WriteWorkLine;
FUNCTION _WriteString(x:INTEGER; s:STRING):BOOLEAN;
FUNCTION _InsertString(x:INTEGER; s:STRING):BOOLEAN;
FUNCTION _DeleteString(x,cx:INTEGER):BOOLEAN;
FUNCTION _ReadString(pl:PLine; x,cx:INTEGER):STRING;
PROCEDURE _Set(y:LONGINT;CONST s:STRING);
FUNCTION _Get(y:LONGINT):STRING;
FUNCTION _FindBookMark(i:BYTE):PLine;
FUNCTION _FindNextTab(pl:PLine; x:INTEGER):INTEGER;
{Insert/Delete Lines}
FUNCTION _InsertLine(pl:PLine):PLine;
FUNCTION _DeleteLine(pl:PLine):PLine;
{Text Block Operations}
FUNCTION _GetFileText(s:STRING; VAR p:POINTER; VAR Len:LONGINT):BOOLEAN;
FUNCTION _GetEditorText(VAR p:POINTER; VAR Len:LONGINT):BOOLEAN;
FUNCTION _GetEditorBlock(VAR p:POINTER; VAR Len:LONGINT):BOOLEAN;
PROCEDURE _InsertText(p:POINTER; Len:LONGINT; marknew:BOOLEAN);
{Caret Movement}
FUNCTION _HorizMove:BOOLEAN;
FUNCTION _GotoPosition(p:TEditorPos):BOOLEAN;
FUNCTION _CursorDown:BOOLEAN;
FUNCTION _CursorUp:BOOLEAN;
FUNCTION _CursorRight:BOOLEAN;
FUNCTION _CursorLeft:BOOLEAN;
FUNCTION _CursorHome:BOOLEAN;
FUNCTION _CursorEnd:BOOLEAN;
FUNCTION _CursorPageDown:BOOLEAN;
FUNCTION _CursorPageUp:BOOLEAN;
FUNCTION _CursorRollUp:BOOLEAN;
FUNCTION _CursorRollDown:BOOLEAN;
FUNCTION _CursorWordRight:BOOLEAN;
FUNCTION _CursorWordLeft:BOOLEAN;
{Selection}
FUNCTION _ICBExist:BOOLEAN;
FUNCTION _ICBPersistent:BOOLEAN;
FUNCTION _ICBOverwrite:BOOLEAN;
FUNCTION _ICBClearICB:BOOLEAN;
FUNCTION _ICBClearMark:BOOLEAN;
FUNCTION _ICBSetMark:BOOLEAN;
FUNCTION _ICBDeleteICB:BOOLEAN;
PROCEDURE _ICBCheckX;
PROCEDURE _ICBSetBegin(pl:PLine; x:INTEGER);
PROCEDURE _ICBSetEnd(pl:PLine; x:INTEGER);
FUNCTION _ICBPos(pl:PLine; x:INTEGER):TICBPosition;
{Extend Selection}
FUNCTION _ICBActPos:TLineX;
FUNCTION _ICBExtSetICB:BOOLEAN;
FUNCTION _ICBExtCorrectICB:BOOLEAN;
FUNCTION _ICBExtCorrectICB2:BOOLEAN;
FUNCTION _ICBTestIEW(VAR y1,y2:INTEGER):BOOLEAN;
{ClipBoard}
FUNCTION _SetClipBoardText(p:POINTER; Len:LONGINT):BOOLEAN;
FUNCTION _GetClipBoardText(VAR p:POINTER; VAR Len:LONGINT):BOOLEAN;
PROTECTED
IndentRect: TRect;
PROCEDURE SetupComponent;OVERRIDE;
PROCEDURE SetupShow;OVERRIDE;
FUNCTION CloseQuery:BOOLEAN;OVERRIDE;
PROCEDURE CharEvent(VAR Msg:TWMChar;VAR ch:CHAR;RepeatCount:BYTE);OVERRIDE;
PROCEDURE ScanEvent(VAR Msg:TWMChar;VAR Keycode:TKeyCode;RepeatCount:BYTE);OVERRIDE;
PROCEDURE SetFocus;OVERRIDE;
PROCEDURE KillFocus;OVERRIDE;
PROCEDURE Resize;OVERRIDE;
PROCEDURE MouseDown(Button:TMouseButton;ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
PROCEDURE MouseUp(Button:TMouseButton;ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
PROCEDURE MouseMove(ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
PROCEDURE MouseDblClick(Button:TMouseButton;ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
PROCEDURE Scroll(Sender:TScrollBar;ScrollCode:TScrollCode;VAR ScrollPos:LONGINT);OVERRIDE;
PROCEDURE CanDrag(X,Y:LONGINT;VAR Accept:BOOLEAN);OVERRIDE;
PROCEDURE DoStartDrag(VAR DragData:TDragDropData);OVERRIDE;
PROCEDURE DoEndDrag(Target:TObject; X,Y:LONGINT);OVERRIDE;
PROCEDURE DragOver(Source:TObject;X,Y:LONGINT;State:TDragState;VAR Accept:BOOLEAN);OVERRIDE;
PROCEDURE SetSliderValues;
PROCEDURE SetSliderPosition;
PROCEDURE FlushWorkLine;
FUNCTION GetCursorFromMouse(pt:TPoint):TEditorPos;
FUNCTION GetMouseFromCursor(pos:TEditorPos):TPoint;
{Caret Movement}
PROCEDURE cmCursorDown;
PROCEDURE cmCursorUp;
PROCEDURE cmCursorRight;
PROCEDURE cmCursorLeft;
PROCEDURE cmCursorHome;
PROCEDURE cmCursorEnd;
PROCEDURE cmCursorPageDown;
PROCEDURE cmCursorPageUp;
PROCEDURE cmCursorRollUp;
PROCEDURE cmCursorRollDown;
PROCEDURE cmCursorWordRight;
PROCEDURE cmCursorWordLeft;
PROCEDURE cmCursorFileBegin;
PROCEDURE cmCursorFileEnd;
PROCEDURE cmCursorPageHome;
PROCEDURE cmCursorPageEnd;
{Selection}
PROCEDURE cmICBExtLeft;
PROCEDURE cmICBExtRight;
PROCEDURE cmICBExtUp;
PROCEDURE cmICBExtDown;
PROCEDURE cmICBExtPageUp;
PROCEDURE cmICBExtPageDown;
PROCEDURE cmICBExtHome;
PROCEDURE cmICBExtEnd;
PROCEDURE cmICBExtWordLeft;
PROCEDURE cmICBExtWordRight;
PROCEDURE cmICBExtFileBegin;
PROCEDURE cmICBExtFileEnd;
PROCEDURE cmICBExtPageBegin;
PROCEDURE cmICBExtPageEnd;
{ICB Edit}
PROCEDURE cmICBReadBlock;VIRTUAL;
PROCEDURE cmICBWriteBlock;VIRTUAL;
PROCEDURE cmICBMoveLeft;VIRTUAL;
PROCEDURE cmICBMoveRight;VIRTUAL;
PROCEDURE cmICBCopyBlock;VIRTUAL;
PROCEDURE cmICBMoveBlock;VIRTUAL;
PROCEDURE cmICBDeleteBlock;VIRTUAL;
PROCEDURE cmICBUpcaseBlock;VIRTUAL;
PROCEDURE cmICBLowcaseBlock;VIRTUAL;
PROCEDURE cmICBUpcaseWord;VIRTUAL;
PROCEDURE cmICBLowcaseWord;VIRTUAL;
PROCEDURE cmToggleCase;VIRTUAL;
{Edit}
PROCEDURE cmBreakLine;VIRTUAL;
PROCEDURE cmDeleteLine;VIRTUAL;
PROCEDURE cmDeleteLineEnd;VIRTUAL;
PROCEDURE cmDeleteRightWord;VIRTUAL;
PROCEDURE cmDeleteLeftWord;VIRTUAL;
PROCEDURE cmTabulator;VIRTUAL;
PROCEDURE cmPrevTabulator;VIRTUAL;
PROCEDURE cmDeleteChar;VIRTUAL;
PROCEDURE cmBackSpace;VIRTUAL;
PROCEDURE cmEnter;VIRTUAL;
PROCEDURE cmFindText;VIRTUAL;
PROCEDURE cmReplaceText;VIRTUAL;
PROCEDURE cmSearchTextAgain;VIRTUAL;
PROCEDURE cmIncrementalSearch;VIRTUAL;
PROCEDURE cmRecordMacro;VIRTUAL;
PROCEDURE cmPlayMacro;VIRTUAL;
{Overwrite this methods for personal use}
FUNCTION GetReadOnly:BOOLEAN;VIRTUAL;
PROCEDURE SetReadOnly(Value:BOOLEAN);VIRTUAL;
PROCEDURE SetModified(Value:BOOLEAN);VIRTUAL;
PROCEDURE UpdateEditorState;VIRTUAL;
PROCEDURE SetStateMessage(CONST s:STRING);VIRTUAL;
PROCEDURE SetErrorMessage(CONST s:STRING);VIRTUAL;
FUNCTION SetQueryMessage(CONST s:STRING;Typ:TMsgDlgType;Buttons:TMsgDlgButtons):TMsgDlgReturn;VIRTUAL;
FUNCTION SetConfirmMessage:TMsgDlgReturn;VIRTUAL;
FUNCTION UpdateLineColorFlag(pl:PLine):BOOLEAN;VIRTUAL;
PROCEDURE SetLineColorFlag(pl1,pl2:PLine);VIRTUAL;
PROCEDURE CalcLineColor(pl:PLine;VAR LineColor:TColorArray);VIRTUAL;
PROCEDURE InvalidateScreenLine(ScrY:INTEGER);VIRTUAL;
PROCEDURE InvalidateWorkLine;VIRTUAL;
PROCEDURE InvalidateEditor(y1,y2:INTEGER);VIRTUAL;
PROCEDURE SetScreenCursor;VIRTUAL;
FUNCTION QueryConvertPos(VAR pos:TPoint):BOOLEAN;OVERRIDE;
PROCEDURE SetIncSearchText(s:STRING);VIRTUAL;
FUNCTION SaveToFile(CONST FName:STRING):BOOLEAN;VIRTUAL;
FUNCTION TestSaveAsName(CONST FName:STRING):TMsgDlgReturn;VIRTUAL;
PROCEDURE FileNameChange(CONST OldName,NewName:STRING);VIRTUAL;
PROCEDURE TestAutoSave;VIRTUAL;
PROCEDURE SetFileName(CONST FName:STRING);VIRTUAL;
PROCEDURE SetAvailabeFileTypes(CFOD:TOpenDialog);VIRTUAL;
FUNCTION EmulateWordStar(VAR KeyCode,PreControl:TKeyCode):BOOLEAN;VIRTUAL;
FUNCTION EmulateCUA(VAR KeyCode,PreControl:TKeyCode):BOOLEAN;VIRTUAL;
FUNCTION EmulateDefault(VAR KeyCode,PreControl:TKeyCode):BOOLEAN;VIRTUAL;
PROCEDURE SetColorEntry(ColorIndex:INTEGER;NewColor:TColor);VIRTUAL;
FUNCTION GetColorEntry(ColorIndex:INTEGER):TColor;VIRTUAL;
PROPERTY FirstLine:PLine read FFirstLine;
PROPERTY LastLine:PLine read FLastLine;
PROPERTY ActLine:PLine read FActLine;
PROPERTY TopScreenLine:PLine read FTopScreenLine;
PROPERTY Indices[pl:PLine]:LONGINT read _PLine2Index;
PROPERTY PLines[Index:LONGINT]:PLine read _Index2PLine;
PROPERTY PStrings[pl:PLine]:PString read _PLine2PString;
PROPERTY LastUndoGroup:TUndoGroup read GetLastUndoGroup write SetLastUndoGroup;
PROPERTY MacroList:TList read FMacroList write FMacroList;
PROPERTY MacroRecording:BOOLEAN read FRecording;
PROPERTY MacroPlaying:BOOLEAN read FPlaying;
PROPERTY LastFind:TFindAction read FLastFind write FLastFind;
PUBLIC
DESTRUCTOR Destroy;OVERRIDE;
PROCEDURE BeginUpdate;
PROCEDURE EndUpdate;
PROCEDURE DragDrop(Source:TObject;X,Y:LONGINT);OVERRIDE;
PROCEDURE Redraw(CONST rc:TRect);OVERRIDE;
FUNCTION LoadFile(CONST FName:STRING):BOOLEAN;VIRTUAL;
FUNCTION SaveFile:BOOLEAN;VIRTUAL;
FUNCTION SaveFileAs(CONST FName:STRING):BOOLEAN;VIRTUAL;
FUNCTION LoadFromStream(Stream:TStream):BOOLEAN;
FUNCTION SaveToStream(Stream:TStream):BOOLEAN;
FUNCTION InsertLine(y:LONGINT;CONST s:STRING):LONGINT;
FUNCTION DeleteLine(y:LONGINT):LONGINT;
FUNCTION AppendLine(CONST s:STRING):LONGINT;
FUNCTION ReplaceLine(y:LONGINT;CONST s:STRING):LONGINT;
PROCEDURE SetSelectionStart(p:TEditorPos);
PROCEDURE SetSelectionEnd(p:TEditorPos);
FUNCTION GetSelectionStart(VAR p:TEditorPos):BOOLEAN;
FUNCTION GetSelectionEnd(VAR p:TEditorPos):BOOLEAN;
PROCEDURE SelectLine(p:TEditorPos);
PROCEDURE SelectWord(p:TEditorPos);
PROCEDURE SelectAll;
PROCEDURE DeselectAll;
PROCEDURE HideSelection;
PROCEDURE ShowSelection;
PROCEDURE DeleteSelection;
PROCEDURE GotoPosition(pos:TEditorPos);
FUNCTION SetBookMark(i:BYTE; p:TEditorPos):BOOLEAN;
FUNCTION GetBookMark(i:BYTE;VAR p:TEditorPos):BOOLEAN;
FUNCTION GotoBookMark(i:BYTE):BOOLEAN;
FUNCTION ClearBookMark(i:BYTE):BOOLEAN;
FUNCTION ClearAllBookMarks:BOOLEAN;
FUNCTION GetChar(p:TEditorPos):CHAR;
FUNCTION GetWord(p:TEditorPos):STRING;
FUNCTION GetTextAfterWord(p:TEditorPos):STRING;
FUNCTION GetPartialText(y1,x1,y2,x2:LONGINT;VAR p:POINTER; VAR Len:LONGINT):BOOLEAN;
FUNCTION GetText(VAR p:POINTER; VAR Len:LONGINT; selected:BOOLEAN):BOOLEAN;
PROCEDURE SetText(p:POINTER; Len:LONGINT; select:BOOLEAN);
FUNCTION FindTextPos(find:STRING; direct:TFindDirection; origin:TFindOrigin;
scope:TFindScope; opt:TFindOptions; VAR pt:TEditorPos):BOOLEAN;
FUNCTION FindText(CONST find:STRING; direct:TFindDirection; origin:TFindOrigin;
scope:TFindScope; opt:TFindOptions):BOOLEAN;
FUNCTION ReplaceText(CONST find,replace:STRING; direct:TFindDirection;
origin:TFindOrigin;scope:TFindScope;opt:TFindOptions;
confirm:BOOLEAN;replaceall:BOOLEAN):BOOLEAN;
PROCEDURE Undo;
PROCEDURE Redo;
PROCEDURE ClearUndo;
PROCEDURE ClearRedo;
PROCEDURE CutToClipBoard;VIRTUAL;
PROCEDURE CopyToClipBoard;VIRTUAL;
FUNCTION PasteFromClipBoard:BOOLEAN;VIRTUAL;
FUNCTION InsertFromFile(s:STRING):BOOLEAN;VIRTUAL;
PROCEDURE SearchTextAgain;
PROCEDURE FindTextDlg;
PROCEDURE ReplaceTextDlg;
PROPERTY FileName:STRING read FFileName write SetFileName;
PROPERTY CountLines:LONGINT read FCountLines;
PROPERTY Lines[Index:LONGINT]:STRING read _Get write _Set; default;
PROPERTY CursorPos:TEditorPos read FFileCursor write GotoPosition;
PROPERTY OffsetPos:TEditorPos read FScrCursor;
PROPERTY MaxUndoEvents:LONGINT read MaxUndo write _SetMaxUndo;
PROPERTY UndoCount:LONGINT read GetUndoCount;
PROPERTY RedoCount:LONGINT read GetRedoCount;
PROPERTY AutoSaveEvents:INTEGER read FSaveEvents write SetSaveEvents;
PROPERTY BottomScrollBar:TScrollBar read FBottomScrollBar write FBottomScrollBar;
PROPERTY RightScrollBar:TScrollBar read FRightScrollBar write FRightScrollBar;
PROPERTY Mask:STRING read FMask write FMask;
PROPERTY Selected:BOOLEAN read _ICBExist;
PROPERTY Columns:LONGINT read FWinSize.X;
PROPERTY Rows:LONGINT read FWinSize.Y;
PROPERTY ColorEntry[ColorIndex:INTEGER]:TColor read GetColorEntry write SetColorEntry;
PROPERTY CursorShape:TCursorShape read FCursorShape write SetCursorShape;
PROPERTY SelectMode:TSelectMode read FSelectMode write SetSelectMode;
PROPERTY WordWrap:BOOLEAN read FWordWrap write SetWordWrap;
PROPERTY WordWrapColumn:INTEGER read FWordWrapColumn write SetWordWrapColumn;
PROPERTY InsertMode:BOOLEAN read FInsertMode write SetInsertMode;
PROPERTY Modified:BOOLEAN read FModified write SetModified;
PROPERTY Untitled:BOOLEAN read FUntitled write FUntitled;
PROPERTY ReadOnly:BOOLEAN read GetReadOnly write SetReadOnly;
PUBLISHED
PROPERTY KeystrokeMap:TKeystrokeMap read FKeyMap write SetKeyMap;
PROPERTY EditOptions:TEditOpt read FEditOpt write SetEditOpt;
PROPERTY TabSize:INTEGER read FTabSize write SetTabSize;
PROPERTY Ctl3D:BOOLEAN read FCtl3D write SetCtl3D;
END;
TEditorClass=CLASS OF TEditor;
FUNCTION CheckWordsOnly(pl:PLine; VAR i:INTEGER; CONST s:STRING):BOOLEAN;
FUNCTION GetDefaultExt(Mask:STRING):STRING;
FUNCTION EditorPos(Line:LONGINT;Column:INTEGER):TEditorPos;
IMPLEMENTATION