mirror of https://gitlab.com/basile.b/dexed.git
r15
This commit is contained in:
parent
24fba590fa
commit
f548ea152e
|
@ -723,6 +723,7 @@ var
|
||||||
err: PLexError;
|
err: PLexError;
|
||||||
tkIndex: NativeInt;
|
tkIndex: NativeInt;
|
||||||
pareCnt, curlCnt, squaCnt: NativeInt;
|
pareCnt, curlCnt, squaCnt: NativeInt;
|
||||||
|
pareLeft, curlLeft, squaLeft: boolean;
|
||||||
procedure addError(const aMsg: string);
|
procedure addError(const aMsg: string);
|
||||||
begin
|
begin
|
||||||
err := new(PLexError);
|
err := new(PLexError);
|
||||||
|
@ -738,11 +739,12 @@ begin
|
||||||
pareCnt := 0;
|
pareCnt := 0;
|
||||||
curlCnt := 0;
|
curlCnt := 0;
|
||||||
squaCnt := 0;
|
squaCnt := 0;
|
||||||
|
pareLeft:= False;
|
||||||
|
curlLeft:= False;
|
||||||
|
squaLeft:= False;
|
||||||
|
|
||||||
for tk in aTokenList do
|
for tk in aTokenList do
|
||||||
begin
|
begin
|
||||||
|
|
||||||
// token index
|
|
||||||
Inc(tkIndex);
|
Inc(tkIndex);
|
||||||
|
|
||||||
// brackets count
|
// brackets count
|
||||||
|
@ -758,12 +760,21 @@ begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// only for the first occurence
|
// only for the first occurence
|
||||||
if pareCnt = -1 then
|
if not pareLeft then if pareCnt = -1 then
|
||||||
|
begin
|
||||||
addError('a left parenthesis is missing');
|
addError('a left parenthesis is missing');
|
||||||
if curlCnt = -1 then
|
pareLeft := true;
|
||||||
|
end;
|
||||||
|
if not curlLeft then if curlCnt = -1 then
|
||||||
|
begin
|
||||||
addError('a left curly bracket is missing');
|
addError('a left curly bracket is missing');
|
||||||
if squaCnt = -1 then
|
curlLeft := true;
|
||||||
|
end;
|
||||||
|
if not squaLeft then if squaCnt = -1 then
|
||||||
|
begin
|
||||||
addError('a left square bracket is missing');
|
addError('a left square bracket is missing');
|
||||||
|
squaLeft := true;
|
||||||
|
end;
|
||||||
|
|
||||||
// at the end
|
// at the end
|
||||||
if (tkIndex = aTokenList.Count-1) then
|
if (tkIndex = aTokenList.Count-1) then
|
||||||
|
@ -801,9 +812,9 @@ _preSeq:
|
||||||
if old1.data = tk.data then
|
if old1.data = tk.data then
|
||||||
addError('keyword is duplicated');
|
addError('keyword is duplicated');
|
||||||
|
|
||||||
// needs negative numbr to be tokenized correctly: ... = -1; '-' is currently token as an operator.
|
if tk.data <> '&' then // ident = &ident
|
||||||
if (old1.kind = ltkOperator) and (tk.kind = ltkOperator) then
|
if (old1.kind = ltkOperator) and (tk.kind = ltkOperator) then
|
||||||
addError('operator rhs cannot be an operator');
|
addError('operator rhs cannot be an operator');
|
||||||
|
|
||||||
if (old1.kind = ltkNumber) and (tk.kind = ltkNumber) then
|
if (old1.kind = ltkNumber) and (tk.kind = ltkNumber) then
|
||||||
addError('symbol or operator expected after number');
|
addError('symbol or operator expected after number');
|
||||||
|
|
|
@ -23,9 +23,13 @@ type
|
||||||
protected
|
protected
|
||||||
procedure UpdateByDelay; override;
|
procedure UpdateByDelay; override;
|
||||||
private
|
private
|
||||||
// http://bugs.freepascal.org/view.php?id=26329
|
|
||||||
fKeyChanged: boolean;
|
fKeyChanged: boolean;
|
||||||
|
|
||||||
|
// http://bugs.freepascal.org/view.php?id=26329
|
||||||
fSyncEdit: TSynPluginSyncroEdit;
|
fSyncEdit: TSynPluginSyncroEdit;
|
||||||
|
|
||||||
|
tokLst: TLexTokenList;
|
||||||
|
errLst: TLexErrorList;
|
||||||
procedure memoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
procedure memoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||||
procedure memoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
procedure memoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||||||
procedure memoChange(Sender: TObject);
|
procedure memoChange(Sender: TObject);
|
||||||
|
@ -37,6 +41,7 @@ type
|
||||||
procedure identifierToD2Syn(const aMemo: TCESynMemo);
|
procedure identifierToD2Syn(const aMemo: TCESynMemo);
|
||||||
public
|
public
|
||||||
constructor create(aOwner: TComponent); override;
|
constructor create(aOwner: TComponent); override;
|
||||||
|
destructor destroy; override;
|
||||||
procedure addEditor;
|
procedure addEditor;
|
||||||
procedure removeEditor(const aIndex: NativeInt);
|
procedure removeEditor(const aIndex: NativeInt);
|
||||||
procedure focusedEditorChanged;
|
procedure focusedEditorChanged;
|
||||||
|
@ -59,6 +64,10 @@ var
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
fID := 'ID_EDIT';
|
fID := 'ID_EDIT';
|
||||||
|
//
|
||||||
|
tokLst := TLexTokenList.Create;
|
||||||
|
errLst := TLexErrorList.Create;
|
||||||
|
//
|
||||||
fSyncEdit := TSynPluginSyncroEdit.Create(self);
|
fSyncEdit := TSynPluginSyncroEdit.Create(self);
|
||||||
bmp := TBitmap.Create;
|
bmp := TBitmap.Create;
|
||||||
try
|
try
|
||||||
|
@ -70,6 +79,13 @@ begin
|
||||||
DockMaster.GetAnchorSite(Self).Name := ID;
|
DockMaster.GetAnchorSite(Self).Name := ID;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
destructor TCEEditorWidget.destroy;
|
||||||
|
begin
|
||||||
|
tokLst.Free;
|
||||||
|
errLst.Free;
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
function TCEEditorWidget.getEditorCount: NativeInt;
|
function TCEEditorWidget.getEditorCount: NativeInt;
|
||||||
begin
|
begin
|
||||||
result := pageControl.PageCount;
|
result := pageControl.PageCount;
|
||||||
|
@ -197,8 +213,6 @@ const
|
||||||
modstr: array[boolean] of string = ('...', 'MODIFIED');
|
modstr: array[boolean] of string = ('...', 'MODIFIED');
|
||||||
var
|
var
|
||||||
ed: TCESynMemo;
|
ed: TCESynMemo;
|
||||||
tokLst: TLexTokenList;
|
|
||||||
errLst: TLexErrorList;
|
|
||||||
err: TLexError;
|
err: TLexError;
|
||||||
begin
|
begin
|
||||||
ed := getCurrentEditor;
|
ed := getCurrentEditor;
|
||||||
|
@ -213,24 +227,15 @@ begin
|
||||||
begin
|
begin
|
||||||
mainForm.docChangeNotify(Self, editorIndex);
|
mainForm.docChangeNotify(Self, editorIndex);
|
||||||
|
|
||||||
mainForm.MessageWidget.List.Clear;
|
mainForm.MessageWidget.Clear;
|
||||||
tokLst := TLexTokenList.Create;
|
lex( ed.Lines.Text, tokLst );
|
||||||
errLst := TLexErrorList.Create;
|
checkSyntaxicErrors( tokLst, errLst);
|
||||||
try
|
for err in errLst do
|
||||||
lex( ed.Lines.Text, tokLst );
|
mainForm.MessageWidget.addMessage(format(
|
||||||
checkSyntaxicErrors( tokLst, errLst);
|
'%s (@line:%4.d @char:%.4d)',[err.msg, err.position.y, err.position.x]));
|
||||||
|
mainForm.MessageWidget.scrollToBack;
|
||||||
for err in errLst do
|
tokLst.Clear;
|
||||||
mainForm.MessageWidget.addMessage(format(
|
errLst.Clear;
|
||||||
'%s (@line:%4.d @char:%.4d)',[err.msg, err.position.y, err.position.x]));
|
|
||||||
|
|
||||||
mainForm.MessageWidget.scrollToBack;
|
|
||||||
|
|
||||||
finally
|
|
||||||
tokLst.Free;
|
|
||||||
errLst.Free;
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
end;
|
end;
|
||||||
fKeyChanged := false;
|
fKeyChanged := false;
|
||||||
|
|
|
@ -177,8 +177,6 @@ type
|
||||||
procedure actProjSourceExecute(Sender: TObject);
|
procedure actProjSourceExecute(Sender: TObject);
|
||||||
procedure actEdUnIndentExecute(Sender: TObject);
|
procedure actEdUnIndentExecute(Sender: TObject);
|
||||||
procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
|
procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
|
||||||
procedure FormResize(Sender: TObject);
|
|
||||||
procedure FormShow(Sender: TObject);
|
|
||||||
private
|
private
|
||||||
fUpdateCount: NativeInt;
|
fUpdateCount: NativeInt;
|
||||||
fProject: TCEProject;
|
fProject: TCEProject;
|
||||||
|
@ -497,14 +495,6 @@ begin
|
||||||
//
|
//
|
||||||
srcLst.Clear;
|
srcLst.Clear;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEMainForm.FormShow(Sender: TObject);
|
|
||||||
begin
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCEMainForm.FormResize(Sender: TObject);
|
|
||||||
begin
|
|
||||||
end;
|
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION file ******************************************************************}
|
{$REGION file ******************************************************************}
|
||||||
|
|
|
@ -5,8 +5,8 @@ unit ce_messages;
|
||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, Forms, Controls, Graphics, Dialogs,
|
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, ComCtrls,
|
||||||
ExtCtrls, ComCtrls, ce_widget, ActnList, Menus, clipbrd, AnchorDocking;
|
ce_widget, ActnList, Menus, clipbrd, AnchorDocking, ce_project, ce_synmemo;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ type
|
||||||
fActSaveMsg: TAction;
|
fActSaveMsg: TAction;
|
||||||
fActCopyMsg: TAction;
|
fActCopyMsg: TAction;
|
||||||
fActSelAll: TAction;
|
fActSelAll: TAction;
|
||||||
|
fProject: TCEProject;
|
||||||
procedure actClearExecute(Sender: TObject);
|
procedure actClearExecute(Sender: TObject);
|
||||||
procedure actSaveMsgExecute(Sender: TObject);
|
procedure actSaveMsgExecute(Sender: TObject);
|
||||||
procedure actCopyMsgExecute(Sender: TObject);
|
procedure actCopyMsgExecute(Sender: TObject);
|
||||||
|
@ -35,6 +36,14 @@ type
|
||||||
function contextName: string; override;
|
function contextName: string; override;
|
||||||
function contextActionCount: integer; override;
|
function contextActionCount: integer; override;
|
||||||
function contextAction(index: integer): TAction; override;
|
function contextAction(index: integer): TAction; override;
|
||||||
|
//
|
||||||
|
procedure projNew(const aProject: TCEProject); override;
|
||||||
|
procedure projClose(const aProject: TCEProject); override;
|
||||||
|
//
|
||||||
|
procedure docFocused(const aDoc: TCESynMemo); override;
|
||||||
|
procedure docClose(const aDoc: TCESynMemo); override;
|
||||||
|
//
|
||||||
|
procedure Clear;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
PTCEMessageItem = ^TCEMessageItem;
|
PTCEMessageItem = ^TCEMessageItem;
|
||||||
|
@ -144,6 +153,33 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCEMessagesWidget.projNew(const aProject: TCEProject);
|
||||||
|
begin
|
||||||
|
fProject := aProject;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEMessagesWidget.projClose(const aProject: TCEProject);
|
||||||
|
begin
|
||||||
|
if fProject = aProject then
|
||||||
|
actClearExecute(nil);
|
||||||
|
fProject := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEMessagesWidget.docFocused(const aDoc: TCESynMemo);
|
||||||
|
begin
|
||||||
|
Clear;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEMessagesWidget.docClose(const aDoc: TCESynMemo);
|
||||||
|
begin
|
||||||
|
Clear;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEMessagesWidget.Clear;
|
||||||
|
begin
|
||||||
|
actClearExecute(nil);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCEMessagesWidget.actClearExecute(Sender: TObject);
|
procedure TCEMessagesWidget.actClearExecute(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
List.Clear;
|
List.Clear;
|
||||||
|
|
|
@ -35,10 +35,10 @@ type
|
||||||
procedure UpdateByEvent; override;
|
procedure UpdateByEvent; override;
|
||||||
public
|
public
|
||||||
constructor create(aOwner: TComponent); override;
|
constructor create(aOwner: TComponent); override;
|
||||||
|
//
|
||||||
procedure projNew(const aProject: TCEProject); override;
|
procedure projNew(const aProject: TCEProject); override;
|
||||||
procedure projChange(const aProject: TCEProject); override;
|
procedure projChange(const aProject: TCEProject); override;
|
||||||
procedure projClose(const aProject: TCEProject); override;
|
procedure projClose(const aProject: TCEProject); override;
|
||||||
property project: TCEProject read fProj;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
Loading…
Reference in New Issue