| 1 | unit FormSourceCode;
|
|---|
| 2 |
|
|---|
| 3 | interface
|
|---|
| 4 |
|
|---|
| 5 | uses
|
|---|
| 6 | Classes, SysUtils, FileUtil, SynEdit, SynHighlighterIni, Forms, Controls,
|
|---|
| 7 | Graphics, Dialogs, Menus, ActnList, FormEx,
|
|---|
| 8 | SynEditHighlighter, SynHighlighterAny, SynHighlighterJava, BFHighlighter;
|
|---|
| 9 |
|
|---|
| 10 | type
|
|---|
| 11 |
|
|---|
| 12 | { TFormSourceCode }
|
|---|
| 13 |
|
|---|
| 14 | TFormSourceCode = class(TFormEx)
|
|---|
| 15 | AGenerateText: TAction;
|
|---|
| 16 | ACutToClipboard: TAction;
|
|---|
| 17 | ASelectAll: TAction;
|
|---|
| 18 | APasteFromClipboard: TAction;
|
|---|
| 19 | ACopyToClipboard: TAction;
|
|---|
| 20 | AClear: TAction;
|
|---|
| 21 | AFormatSource: TAction;
|
|---|
| 22 | AShrinkSource: TAction;
|
|---|
| 23 | AGenerateNumber: TAction;
|
|---|
| 24 | ActionList1: TActionList;
|
|---|
| 25 | MenuItem1: TMenuItem;
|
|---|
| 26 | MenuItem2: TMenuItem;
|
|---|
| 27 | MenuItem21: TMenuItem;
|
|---|
| 28 | MenuItem23: TMenuItem;
|
|---|
| 29 | MenuItem26: TMenuItem;
|
|---|
| 30 | MenuItem29: TMenuItem;
|
|---|
| 31 | MenuItem3: TMenuItem;
|
|---|
| 32 | MenuItem36: TMenuItem;
|
|---|
| 33 | MenuItem4: TMenuItem;
|
|---|
| 34 | MenuItem5: TMenuItem;
|
|---|
| 35 | MenuItem6: TMenuItem;
|
|---|
| 36 | MenuItem7: TMenuItem;
|
|---|
| 37 | Separator1: TMenuItem;
|
|---|
| 38 | PopupMenuSource: TPopupMenu;
|
|---|
| 39 | SynEditSource: TSynEdit;
|
|---|
| 40 | SynJavaSyn1: TSynJavaSyn;
|
|---|
| 41 | procedure AClearExecute(Sender: TObject);
|
|---|
| 42 | procedure ACopyToClipboardExecute(Sender: TObject);
|
|---|
| 43 | procedure ACutToClipboardExecute(Sender: TObject);
|
|---|
| 44 | procedure AFormatSourceExecute(Sender: TObject);
|
|---|
| 45 | procedure AGenerateNumberExecute(Sender: TObject);
|
|---|
| 46 | procedure AGenerateTextExecute(Sender: TObject);
|
|---|
| 47 | procedure APasteFromClipboardExecute(Sender: TObject);
|
|---|
| 48 | procedure ASelectAllExecute(Sender: TObject);
|
|---|
| 49 | procedure AShrinkSourceExecute(Sender: TObject);
|
|---|
| 50 | procedure FormCreate(Sender: TObject);
|
|---|
| 51 | procedure FormDestroy(Sender: TObject);
|
|---|
| 52 | procedure MemoSourceChange(Sender: TObject);
|
|---|
| 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 | FOnUpdateInterface: TNotifyEvent;
|
|---|
| 60 | FOnUpdateStatusBar: TNotifyEvent;
|
|---|
| 61 | public
|
|---|
| 62 | procedure UpdateTheme;
|
|---|
| 63 | property OnUpdateStatusBar: TNotifyEvent read FOnUpdateStatusBar
|
|---|
| 64 | write FOnUpdateStatusBar;
|
|---|
| 65 | property OnUpdateInterface: TNotifyEvent read FOnUpdateInterface
|
|---|
| 66 | write FOnUpdateInterface;
|
|---|
| 67 | end;
|
|---|
| 68 |
|
|---|
| 69 |
|
|---|
| 70 | implementation
|
|---|
| 71 |
|
|---|
| 72 | {$R *.lfm}
|
|---|
| 73 |
|
|---|
| 74 | uses
|
|---|
| 75 | Core, BFCodeTools;
|
|---|
| 76 |
|
|---|
| 77 | resourcestring
|
|---|
| 78 | SNumberGeneration = 'Number generation';
|
|---|
| 79 | SEnterNumber = 'Enter number';
|
|---|
| 80 | STextGeneration = 'Text generation';
|
|---|
| 81 | SEnterText = 'Enter text';
|
|---|
| 82 |
|
|---|
| 83 | { TFormSourceCode }
|
|---|
| 84 |
|
|---|
| 85 | procedure TFormSourceCode.AGenerateNumberExecute(Sender: TObject);
|
|---|
| 86 | var
|
|---|
| 87 | Number: Integer;
|
|---|
| 88 | NumberText: string;
|
|---|
| 89 | begin
|
|---|
| 90 | NumberText := InputBox(SNumberGeneration, SEnterNumber, '1');
|
|---|
| 91 | if TryStrToInt(NumberText, Number) then begin
|
|---|
| 92 | SynEditSource.SelText := GenerateNumber(Number);
|
|---|
| 93 | end;
|
|---|
| 94 | end;
|
|---|
| 95 |
|
|---|
| 96 | procedure TFormSourceCode.AGenerateTextExecute(Sender: TObject);
|
|---|
| 97 | var
|
|---|
| 98 | Text: string;
|
|---|
| 99 | begin
|
|---|
| 100 | Text := InputBox(STextGeneration, SEnterText, '');
|
|---|
| 101 | SynEditSource.SelText := GenerateText(Text);
|
|---|
| 102 | end;
|
|---|
| 103 |
|
|---|
| 104 | procedure TFormSourceCode.APasteFromClipboardExecute(Sender: TObject);
|
|---|
| 105 | begin
|
|---|
| 106 | SynEditSource.PasteFromClipboard;
|
|---|
| 107 | end;
|
|---|
| 108 |
|
|---|
| 109 | procedure TFormSourceCode.ASelectAllExecute(Sender: TObject);
|
|---|
| 110 | begin
|
|---|
| 111 | SynEditSource.SelectAll;
|
|---|
| 112 | end;
|
|---|
| 113 |
|
|---|
| 114 | procedure TFormSourceCode.AFormatSourceExecute(Sender: TObject);
|
|---|
| 115 | begin
|
|---|
| 116 | SynEditSource.Text := FormatCode(SynEditSource.Text);
|
|---|
| 117 | MemoSourceChange(nil);
|
|---|
| 118 | end;
|
|---|
| 119 |
|
|---|
| 120 | procedure TFormSourceCode.ACopyToClipboardExecute(Sender: TObject);
|
|---|
| 121 | begin
|
|---|
| 122 | SynEditSource.CopyToClipboard;
|
|---|
| 123 | end;
|
|---|
| 124 |
|
|---|
| 125 | procedure TFormSourceCode.ACutToClipboardExecute(Sender: TObject);
|
|---|
| 126 | begin
|
|---|
| 127 | SynEditSource.CutToClipboard;
|
|---|
| 128 | end;
|
|---|
| 129 |
|
|---|
| 130 | procedure TFormSourceCode.AClearExecute(Sender: TObject);
|
|---|
| 131 | begin
|
|---|
| 132 | SynEditSource.Clear;
|
|---|
| 133 | end;
|
|---|
| 134 |
|
|---|
| 135 | procedure TFormSourceCode.AShrinkSourceExecute(Sender: TObject);
|
|---|
| 136 | begin
|
|---|
| 137 | SynEditSource.Text := ShrinkCode(SynEditSource.Text);
|
|---|
| 138 | MemoSourceChange(nil);
|
|---|
| 139 | end;
|
|---|
| 140 |
|
|---|
| 141 | procedure TFormSourceCode.FormCreate(Sender: TObject);
|
|---|
| 142 | begin
|
|---|
| 143 | BFHighlighter := TSynBrainFuckHl.Create(nil);
|
|---|
| 144 | SynEditSource.Highlighter := BFHighlighter;
|
|---|
| 145 | end;
|
|---|
| 146 |
|
|---|
| 147 | procedure TFormSourceCode.FormDestroy(Sender: TObject);
|
|---|
| 148 | begin
|
|---|
| 149 | SynEditSource.Highlighter := nil;
|
|---|
| 150 | FreeAndNil(BFHighlighter);
|
|---|
| 151 | end;
|
|---|
| 152 |
|
|---|
| 153 | procedure TFormSourceCode.UpdateTheme;
|
|---|
| 154 | const
|
|---|
| 155 | clLightBlue = TColor($FF8080);
|
|---|
| 156 | clLightGreen = TColor($80FF80);
|
|---|
| 157 | clLightRed = TColor($8080FF);
|
|---|
| 158 | begin
|
|---|
| 159 | if Core.Core.ThemeManager.Theme.Name = 'Dark' then begin
|
|---|
| 160 | BFHighlighter.IoAttri.Foreground := clWhite;
|
|---|
| 161 | BFHighlighter.LoopAttri.Foreground := clLightRed;
|
|---|
| 162 | BFHighlighter.PointerAttri.Foreground := clLightBlue;
|
|---|
| 163 | BFHighlighter.MemoryAttri.Foreground := clLightGreen;
|
|---|
| 164 | end else begin
|
|---|
| 165 | BFHighlighter.IoAttri.Foreground := clBlack;
|
|---|
| 166 | BFHighlighter.LoopAttri.Foreground := clRed;
|
|---|
| 167 | BFHighlighter.PointerAttri.Foreground := clBlue;
|
|---|
| 168 | BFHighlighter.MemoryAttri.Foreground := clGreen;
|
|---|
| 169 | end;
|
|---|
| 170 | end;
|
|---|
| 171 |
|
|---|
| 172 | procedure TFormSourceCode.MemoSourceChange(Sender: TObject);
|
|---|
| 173 | begin
|
|---|
| 174 | Core.Core.Project.Modified := True;
|
|---|
| 175 | Core.Core.CurrentTarget.Compiled := False;
|
|---|
| 176 | if Assigned(FOnUpdateInterface) then
|
|---|
| 177 | OnUpdateInterface(Self);
|
|---|
| 178 | end;
|
|---|
| 179 |
|
|---|
| 180 | procedure TFormSourceCode.MemoSourceKeyUp(Sender: TObject; var Key: Word;
|
|---|
| 181 | Shift: TShiftState);
|
|---|
| 182 | begin
|
|---|
| 183 | if Assigned(FOnUpdateStatusBar) then
|
|---|
| 184 | FOnUpdateStatusBar(Self);
|
|---|
| 185 | end;
|
|---|
| 186 |
|
|---|
| 187 | procedure TFormSourceCode.MemoSourceMouseDown(Sender: TObject; Button: TMouseButton;
|
|---|
| 188 | Shift: TShiftState; X, Y: Integer);
|
|---|
| 189 | begin
|
|---|
| 190 | if Assigned(FOnUpdateStatusBar) then
|
|---|
| 191 | FOnUpdateStatusBar(Self);
|
|---|
| 192 | end;
|
|---|
| 193 |
|
|---|
| 194 | end.
|
|---|
| 195 |
|
|---|