source: tags/1.0.0/Forms/UFormSourceCode.pas

Last change on this file was 97, checked in by chronos, 6 years ago
  • Added: Syntax highlighting.
File size: 5.9 KB
Line 
1unit UFormSourceCode;
2
3{$mode delphi}
4
5interface
6
7uses
8 Classes, SysUtils, FileUtil, SynEdit, SynHighlighterIni, Forms, Controls,
9 Graphics, Dialogs, StdCtrls, Menus, ActnList, strutils, SynEditTypes,
10 SynEditHighlighter, SynHighlighterAny, SynHighlighterJava, UBFHighlighter;
11
12type
13
14 { TFormSourceCode }
15
16 TFormSourceCode = class(TForm)
17 ACutToClipboard: TAction;
18 ASelectAll: TAction;
19 APasteFromClipboard: TAction;
20 ACopyToClipboard: TAction;
21 AClear: TAction;
22 AFormatSource: TAction;
23 AShrinkSource: TAction;
24 AGenerateNumber: TAction;
25 ActionList1: TActionList;
26 MenuItem1: TMenuItem;
27 MenuItem2: TMenuItem;
28 MenuItem21: TMenuItem;
29 MenuItem23: TMenuItem;
30 MenuItem26: TMenuItem;
31 MenuItem29: TMenuItem;
32 MenuItem3: TMenuItem;
33 MenuItem36: TMenuItem;
34 MenuItem4: TMenuItem;
35 MenuItem5: TMenuItem;
36 MenuItem6: TMenuItem;
37 PopupMenuSource: TPopupMenu;
38 SynEdit1: TSynEdit;
39 SynJavaSyn1: TSynJavaSyn;
40 procedure AClearExecute(Sender: TObject);
41 procedure ACopyToClipboardExecute(Sender: TObject);
42 procedure ACutToClipboardExecute(Sender: TObject);
43 procedure AFormatSourceExecute(Sender: TObject);
44 procedure AGenerateNumberExecute(Sender: TObject);
45 procedure APasteFromClipboardExecute(Sender: TObject);
46 procedure ASelectAllExecute(Sender: TObject);
47 procedure AShrinkSourceExecute(Sender: TObject);
48 procedure FormCreate(Sender: TObject);
49 procedure MemoSourceChange(Sender: TObject);
50 procedure MemoSourceKeyDown(Sender: TObject; var Key: Word;
51 Shift: TShiftState);
52 procedure MemoSourceKeyPress(Sender: TObject; var Key: char);
53 procedure MemoSourceKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState
54 );
55 procedure MemoSourceMouseDown(Sender: TObject; Button: TMouseButton;
56 Shift: TShiftState; X, Y: Integer);
57 private
58 BFHighlighter: TSynBrainFuckHl;
59 public
60 procedure UpdateInterface;
61 procedure UpdateTheme;
62 end;
63
64var
65 FormSourceCode: TFormSourceCode;
66
67
68implementation
69
70{$R *.lfm}
71
72uses
73 UCore, UFormMain;
74
75resourcestring
76 SNumberGeneration = 'Number generation';
77 SEnterNumber = 'Enter number';
78
79
80{ TFormSourceCode }
81
82procedure TFormSourceCode.AGenerateNumberExecute(Sender: TObject);
83var
84 NumberText: string;
85 Number: Integer;
86 I: Integer;
87begin
88 NumberText := InputBox(SNumberGeneration, SEnterNumber, '1');
89 if TryStrToInt(NumberText, Number) then begin
90 NumberText := '';
91 for I := 0 to Number - 1 do
92 NumberText := NumberText + '+';
93 SynEdit1.SelText := NumberText;
94 end;
95end;
96
97procedure TFormSourceCode.APasteFromClipboardExecute(Sender: TObject);
98begin
99 SynEdit1.PasteFromClipboard;
100end;
101
102procedure TFormSourceCode.ASelectAllExecute(Sender: TObject);
103begin
104 SynEdit1.SelectAll;
105end;
106
107procedure TFormSourceCode.AFormatSourceExecute(Sender: TObject);
108var
109 Source: string;
110 NewSource: string;
111 Indent: Integer;
112 I: Integer;
113const
114 IndentText = ' ';
115begin
116 Source := SynEdit1.Text;
117 NewSource := '';
118 Indent := 0;
119 for I := 1 to Length(Source) do begin
120 if Source[I] = '[' then begin
121 NewSource := NewSource + LineEnding + DupeString(IndentText, Indent) + Source[I] + LineEnding ;
122 Inc(Indent);
123 NewSource := NewSource + DupeString(IndentText, Indent);
124 end
125 else if Source[I] = ']' then begin
126 Dec(Indent);
127 NewSource := NewSource + LineEnding + DupeString(IndentText, Indent) + Source[I] + LineEnding + DupeString(IndentText, Indent);
128 end
129 else if Ord(Source[I]) > $20 then
130 NewSource := NewSource + Source[I];
131 end;
132 SynEdit1.Text := NewSource;
133end;
134
135procedure TFormSourceCode.ACopyToClipboardExecute(Sender: TObject);
136begin
137 SynEdit1.CopyToClipboard;
138end;
139
140procedure TFormSourceCode.ACutToClipboardExecute(Sender: TObject);
141begin
142 SynEdit1.CutToClipboard;
143end;
144
145procedure TFormSourceCode.AClearExecute(Sender: TObject);
146begin
147 SynEdit1.Clear;
148end;
149
150procedure TFormSourceCode.AShrinkSourceExecute(Sender: TObject);
151var
152 Source: string;
153 Pos: Integer;
154 I: Integer;
155begin
156 Source := SynEdit1.Text;
157 Pos := 1;
158 for I := 1 to Length(Source) do begin
159 if Source[I] > ' ' then begin
160 Source[Pos] := Source[I];
161 Inc(Pos);
162 end;
163 end;
164 SetLength(Source, Pos - 1);
165 SynEdit1.Text := Source;
166end;
167
168procedure TFormSourceCode.FormCreate(Sender: TObject);
169begin
170 BFHighlighter := TSynBrainFuckHl.Create(nil);
171 SynEdit1.Highlighter := BFHighlighter;
172end;
173
174procedure TFormSourceCode.UpdateInterface;
175begin
176
177end;
178
179procedure TFormSourceCode.UpdateTheme;
180const
181 clLightBlue = TColor($FF8080);
182 clLightGreen = TColor($80FF80);
183 clLightRed = TColor($8080FF);
184begin
185 if Core.ThemeManager.Theme.Name = 'Dark' then begin
186 BFHighlighter.IoAttri.Foreground := clWhite;
187 BFHighlighter.LoopAttri.Foreground := clLightRed;
188 BFHighlighter.PointerAttri.Foreground := clLightBlue;
189 BFHighlighter.MemoryAttri.Foreground := clLightGreen;
190 end else begin
191 BFHighlighter.IoAttri.Foreground := clBlack;
192 BFHighlighter.LoopAttri.Foreground := clRed;
193 BFHighlighter.PointerAttri.Foreground := clBlue;
194 BFHighlighter.MemoryAttri.Foreground := clGreen;
195 end;
196end;
197
198procedure TFormSourceCode.MemoSourceChange(Sender: TObject);
199begin
200 Core.Project.Modified := True;
201 Core.CurrentTarget.Compiled := False;
202 FormMain.UpdateInterface;
203end;
204
205procedure TFormSourceCode.MemoSourceKeyDown(Sender: TObject; var Key: Word;
206 Shift: TShiftState);
207begin
208end;
209
210procedure TFormSourceCode.MemoSourceKeyPress(Sender: TObject; var Key: char);
211begin
212end;
213
214procedure TFormSourceCode.MemoSourceKeyUp(Sender: TObject; var Key: Word;
215 Shift: TShiftState);
216begin
217 FormMain.UpdateStatusBar;
218end;
219
220procedure TFormSourceCode.MemoSourceMouseDown(Sender: TObject; Button: TMouseButton;
221 Shift: TShiftState; X, Y: Integer);
222begin
223 FormMain.UpdateStatusBar;
224end;
225
226
227end.
228
Note: See TracBrowser for help on using the repository browser.