Changeset 206


Ignore:
Timestamp:
Apr 20, 2020, 10:23:44 AM (4 years ago)
Author:
chronos
Message:
  • Added: C# code generator.
Location:
branches/interpreter2
Files:
6 added
6 edited

Legend:

Unmodified
Added
Removed
  • branches/interpreter2/UFormMain.lfm

    r204 r206  
    55  Width = 1418
    66  Caption = 'Interpreter'
    7   ClientHeight = 925
     7  ClientHeight = 891
    88  ClientWidth = 1418
    99  DesignTimePPI = 144
     10  Menu = MainMenu1
    1011  OnActivate = FormActivate
    1112  OnClose = FormClose
     
    1314  OnShow = FormShow
    1415  LCLVersion = '2.0.2.0'
    15   object MemoLog: TMemo
    16     Left = 24
    17     Height = 127
    18     Top = 776
    19     Width = 1359
    20     ReadOnly = True
    21     ScrollBars = ssAutoBoth
    22     TabOrder = 0
    23   end
    2416  object MemoOutput: TMemo
    2517    Left = 712
     
    3022    ParentFont = False
    3123    ScrollBars = ssAutoBoth
    32     TabOrder = 1
    33   end
    34   object ButtonCompile: TButton
    35     Left = 24
    36     Height = 38
    37     Top = 18
    38     Width = 113
    39     Caption = 'Compile'
    40     OnClick = ButtonCompileClick
    41     TabOrder = 2
    42   end
    43   object Label1: TLabel
    44     Left = 24
    45     Height = 26
    46     Top = 744
    47     Width = 89
    48     Caption = 'Messages:'
    49     ParentColor = False
     24    TabOrder = 0
    5025  end
    5126  object Label2: TLabel
     
    5732    ParentColor = False
    5833  end
    59   object ButtonRun: TButton
    60     Left = 152
    61     Height = 38
    62     Top = 18
    63     Width = 113
    64     Caption = 'Run'
    65     OnClick = ButtonRunClick
    66     TabOrder = 3
     34  object PanelMessages: TPanel
     35    Left = 0
     36    Height = 131
     37    Top = 760
     38    Width = 1418
     39    Align = alBottom
     40    BevelOuter = bvNone
     41    TabOrder = 1
    6742  end
    68   inline SynEditSource: TSynEdit
    69     Left = 24
    70     Height = 673
    71     Top = 64
    72     Width = 672
    73     Font.Height = -20
    74     Font.Name = 'Liberation Mono'
    75     Font.Pitch = fpFixed
    76     Font.Quality = fqNonAntialiased
    77     ParentColor = False
    78     ParentFont = False
    79     TabOrder = 4
    80     Gutter.Width = 85
    81     Gutter.MouseActions = <>
    82     RightGutter.Width = 0
    83     RightGutter.MouseActions = <>
    84     Highlighter = SynFreePascalSyn1
    85     Keystrokes = <   
    86       item
    87         Command = ecUp
    88         ShortCut = 38
    89       end   
    90       item
    91         Command = ecSelUp
    92         ShortCut = 8230
    93       end   
    94       item
    95         Command = ecScrollUp
    96         ShortCut = 16422
    97       end   
    98       item
    99         Command = ecDown
    100         ShortCut = 40
    101       end   
    102       item
    103         Command = ecSelDown
    104         ShortCut = 8232
    105       end   
    106       item
    107         Command = ecScrollDown
    108         ShortCut = 16424
    109       end   
    110       item
    111         Command = ecLeft
    112         ShortCut = 37
    113       end   
    114       item
    115         Command = ecSelLeft
    116         ShortCut = 8229
    117       end   
    118       item
    119         Command = ecWordLeft
    120         ShortCut = 16421
    121       end   
    122       item
    123         Command = ecSelWordLeft
    124         ShortCut = 24613
    125       end   
    126       item
    127         Command = ecRight
    128         ShortCut = 39
    129       end   
    130       item
    131         Command = ecSelRight
    132         ShortCut = 8231
    133       end   
    134       item
    135         Command = ecWordRight
    136         ShortCut = 16423
    137       end   
    138       item
    139         Command = ecSelWordRight
    140         ShortCut = 24615
    141       end   
    142       item
    143         Command = ecPageDown
    144         ShortCut = 34
    145       end   
    146       item
    147         Command = ecSelPageDown
    148         ShortCut = 8226
    149       end   
    150       item
    151         Command = ecPageBottom
    152         ShortCut = 16418
    153       end   
    154       item
    155         Command = ecSelPageBottom
    156         ShortCut = 24610
    157       end   
    158       item
    159         Command = ecPageUp
    160         ShortCut = 33
    161       end   
    162       item
    163         Command = ecSelPageUp
    164         ShortCut = 8225
    165       end   
    166       item
    167         Command = ecPageTop
    168         ShortCut = 16417
    169       end   
    170       item
    171         Command = ecSelPageTop
    172         ShortCut = 24609
    173       end   
    174       item
    175         Command = ecLineStart
    176         ShortCut = 36
    177       end   
    178       item
    179         Command = ecSelLineStart
    180         ShortCut = 8228
    181       end   
    182       item
    183         Command = ecEditorTop
    184         ShortCut = 16420
    185       end   
    186       item
    187         Command = ecSelEditorTop
    188         ShortCut = 24612
    189       end   
    190       item
    191         Command = ecLineEnd
    192         ShortCut = 35
    193       end   
    194       item
    195         Command = ecSelLineEnd
    196         ShortCut = 8227
    197       end   
    198       item
    199         Command = ecEditorBottom
    200         ShortCut = 16419
    201       end   
    202       item
    203         Command = ecSelEditorBottom
    204         ShortCut = 24611
    205       end   
    206       item
    207         Command = ecToggleMode
    208         ShortCut = 45
    209       end   
    210       item
    211         Command = ecCopy
    212         ShortCut = 16429
    213       end   
    214       item
    215         Command = ecPaste
    216         ShortCut = 8237
    217       end   
    218       item
    219         Command = ecDeleteChar
    220         ShortCut = 46
    221       end   
    222       item
    223         Command = ecCut
    224         ShortCut = 8238
    225       end   
    226       item
    227         Command = ecDeleteLastChar
    228         ShortCut = 8
    229       end   
    230       item
    231         Command = ecDeleteLastChar
    232         ShortCut = 8200
    233       end   
    234       item
    235         Command = ecDeleteLastWord
    236         ShortCut = 16392
    237       end   
    238       item
    239         Command = ecUndo
    240         ShortCut = 32776
    241       end   
    242       item
    243         Command = ecRedo
    244         ShortCut = 40968
    245       end   
    246       item
    247         Command = ecLineBreak
    248         ShortCut = 13
    249       end   
    250       item
    251         Command = ecSelectAll
    252         ShortCut = 16449
    253       end   
    254       item
    255         Command = ecCopy
    256         ShortCut = 16451
    257       end   
    258       item
    259         Command = ecBlockIndent
    260         ShortCut = 24649
    261       end   
    262       item
    263         Command = ecLineBreak
    264         ShortCut = 16461
    265       end   
    266       item
    267         Command = ecInsertLine
    268         ShortCut = 16462
    269       end   
    270       item
    271         Command = ecDeleteWord
    272         ShortCut = 16468
    273       end   
    274       item
    275         Command = ecBlockUnindent
    276         ShortCut = 24661
    277       end   
    278       item
    279         Command = ecPaste
    280         ShortCut = 16470
    281       end   
    282       item
    283         Command = ecCut
    284         ShortCut = 16472
    285       end   
    286       item
    287         Command = ecDeleteLine
    288         ShortCut = 16473
    289       end   
    290       item
    291         Command = ecDeleteEOL
    292         ShortCut = 24665
    293       end   
    294       item
    295         Command = ecUndo
    296         ShortCut = 16474
    297       end   
    298       item
    299         Command = ecRedo
    300         ShortCut = 24666
    301       end   
    302       item
    303         Command = ecGotoMarker0
    304         ShortCut = 16432
    305       end   
    306       item
    307         Command = ecGotoMarker1
    308         ShortCut = 16433
    309       end   
    310       item
    311         Command = ecGotoMarker2
    312         ShortCut = 16434
    313       end   
    314       item
    315         Command = ecGotoMarker3
    316         ShortCut = 16435
    317       end   
    318       item
    319         Command = ecGotoMarker4
    320         ShortCut = 16436
    321       end   
    322       item
    323         Command = ecGotoMarker5
    324         ShortCut = 16437
    325       end   
    326       item
    327         Command = ecGotoMarker6
    328         ShortCut = 16438
    329       end   
    330       item
    331         Command = ecGotoMarker7
    332         ShortCut = 16439
    333       end   
    334       item
    335         Command = ecGotoMarker8
    336         ShortCut = 16440
    337       end   
    338       item
    339         Command = ecGotoMarker9
    340         ShortCut = 16441
    341       end   
    342       item
    343         Command = ecSetMarker0
    344         ShortCut = 24624
    345       end   
    346       item
    347         Command = ecSetMarker1
    348         ShortCut = 24625
    349       end   
    350       item
    351         Command = ecSetMarker2
    352         ShortCut = 24626
    353       end   
    354       item
    355         Command = ecSetMarker3
    356         ShortCut = 24627
    357       end   
    358       item
    359         Command = ecSetMarker4
    360         ShortCut = 24628
    361       end   
    362       item
    363         Command = ecSetMarker5
    364         ShortCut = 24629
    365       end   
    366       item
    367         Command = ecSetMarker6
    368         ShortCut = 24630
    369       end   
    370       item
    371         Command = ecSetMarker7
    372         ShortCut = 24631
    373       end   
    374       item
    375         Command = ecSetMarker8
    376         ShortCut = 24632
    377       end   
    378       item
    379         Command = ecSetMarker9
    380         ShortCut = 24633
    381       end   
    382       item
    383         Command = EcFoldLevel1
    384         ShortCut = 41009
    385       end   
    386       item
    387         Command = EcFoldLevel2
    388         ShortCut = 41010
    389       end   
    390       item
    391         Command = EcFoldLevel3
    392         ShortCut = 41011
    393       end   
    394       item
    395         Command = EcFoldLevel4
    396         ShortCut = 41012
    397       end   
    398       item
    399         Command = EcFoldLevel5
    400         ShortCut = 41013
    401       end   
    402       item
    403         Command = EcFoldLevel6
    404         ShortCut = 41014
    405       end   
    406       item
    407         Command = EcFoldLevel7
    408         ShortCut = 41015
    409       end   
    410       item
    411         Command = EcFoldLevel8
    412         ShortCut = 41016
    413       end   
    414       item
    415         Command = EcFoldLevel9
    416         ShortCut = 41017
    417       end   
    418       item
    419         Command = EcFoldLevel0
    420         ShortCut = 41008
    421       end   
    422       item
    423         Command = EcFoldCurrent
    424         ShortCut = 41005
    425       end   
    426       item
    427         Command = EcUnFoldCurrent
    428         ShortCut = 41003
    429       end   
    430       item
    431         Command = EcToggleMarkupWord
    432         ShortCut = 32845
    433       end   
    434       item
    435         Command = ecNormalSelect
    436         ShortCut = 24654
    437       end   
    438       item
    439         Command = ecColumnSelect
    440         ShortCut = 24643
    441       end   
    442       item
    443         Command = ecLineSelect
    444         ShortCut = 24652
    445       end   
    446       item
    447         Command = ecTab
    448         ShortCut = 9
    449       end   
    450       item
    451         Command = ecShiftTab
    452         ShortCut = 8201
    453       end   
    454       item
    455         Command = ecMatchBracket
    456         ShortCut = 24642
    457       end   
    458       item
    459         Command = ecColSelUp
    460         ShortCut = 40998
    461       end   
    462       item
    463         Command = ecColSelDown
    464         ShortCut = 41000
    465       end   
    466       item
    467         Command = ecColSelLeft
    468         ShortCut = 40997
    469       end   
    470       item
    471         Command = ecColSelRight
    472         ShortCut = 40999
    473       end   
    474       item
    475         Command = ecColSelPageDown
    476         ShortCut = 40994
    477       end   
    478       item
    479         Command = ecColSelPageBottom
    480         ShortCut = 57378
    481       end   
    482       item
    483         Command = ecColSelPageUp
    484         ShortCut = 40993
    485       end   
    486       item
    487         Command = ecColSelPageTop
    488         ShortCut = 57377
    489       end   
    490       item
    491         Command = ecColSelLineStart
    492         ShortCut = 40996
    493       end   
    494       item
    495         Command = ecColSelLineEnd
    496         ShortCut = 40995
    497       end   
    498       item
    499         Command = ecColSelEditorTop
    500         ShortCut = 57380
    501       end   
    502       item
    503         Command = ecColSelEditorBottom
    504         ShortCut = 57379
    505       end>
    506     MouseActions = <>
    507     MouseTextActions = <>
    508     MouseSelActions = <>
    509     VisibleSpecialChars = [vscSpace, vscTabAtLast]
    510     SelectedColor.BackPriority = 50
    511     SelectedColor.ForePriority = 50
    512     SelectedColor.FramePriority = 50
    513     SelectedColor.BoldPriority = 50
    514     SelectedColor.ItalicPriority = 50
    515     SelectedColor.UnderlinePriority = 50
    516     SelectedColor.StrikeOutPriority = 50
    517     BracketHighlightStyle = sbhsBoth
    518     BracketMatchColor.Background = clNone
    519     BracketMatchColor.Foreground = clNone
    520     BracketMatchColor.Style = [fsBold]
    521     FoldedCodeColor.Background = clNone
    522     FoldedCodeColor.Foreground = clGray
    523     FoldedCodeColor.FrameColor = clGray
    524     MouseLinkColor.Background = clNone
    525     MouseLinkColor.Foreground = clBlue
    526     LineHighlightColor.Background = clNone
    527     LineHighlightColor.Foreground = clNone
    528     inline SynLeftGutterPartList1: TSynGutterPartList
    529       object SynGutterMarks1: TSynGutterMarks
    530         Width = 36
    531         MouseActions = <>
     43  object PanelSource: TPanel
     44    Left = 0
     45    Height = 698
     46    Top = 96
     47    Width = 704
     48    Align = alCustom
     49    BevelOuter = bvNone
     50    TabOrder = 2
     51  end
     52  object MainMenu1: TMainMenu
     53    left = 790
     54    top = 753
     55    object MenuItemFile: TMenuItem
     56      Caption = 'File'
     57      object MenuItem6: TMenuItem
     58        Action = AExit
    53259      end
    533       object SynGutterLineNumber1: TSynGutterLineNumber
    534         Width = 25
    535         MouseActions = <>
    536         MarkupInfo.Background = clBtnFace
    537         MarkupInfo.Foreground = clNone
    538         DigitCount = 2
    539         ShowOnlyLineNumbersMultiplesOf = 1
    540         ZeroStart = False
    541         LeadingZeros = False
     60    end
     61    object MenuItemGenerate: TMenuItem
     62      Caption = 'Generate'
     63      object MenuItem1: TMenuItem
     64        Action = AGeneratePascal
    54265      end
    543       object SynGutterChanges1: TSynGutterChanges
    544         Width = 6
    545         MouseActions = <>
    546         ModifiedColor = 59900
    547         SavedColor = clGreen
     66      object MenuItem2: TMenuItem
     67        Action = AGeneratePhp
    54868      end
    549       object SynGutterSeparator1: TSynGutterSeparator
    550         Width = 3
    551         MouseActions = <>
    552         MarkupInfo.Background = clWhite
    553         MarkupInfo.Foreground = clGray
     69      object MenuItem3: TMenuItem
     70        Action = AGenerateCSharp
    55471      end
    555       object SynGutterCodeFolding1: TSynGutterCodeFolding
    556         Width = 15
    557         MouseActions = <>
    558         MarkupInfo.Background = clNone
    559         MarkupInfo.Foreground = clGray
    560         MouseActionsExpanded = <>
    561         MouseActionsCollapsed = <>
     72    end
     73    object MenuItemRun: TMenuItem
     74      Caption = 'Run'
     75      object MenuItem4: TMenuItem
     76        Action = ARun
     77      end
     78      object MenuItem5: TMenuItem
     79        Action = ACompile
    56280      end
    56381    end
    56482  end
    565   object ButtonGenerate: TButton
    566     Left = 288
    567     Height = 38
    568     Top = 18
    569     Width = 113
    570     Caption = 'Generate'
    571     OnClick = ButtonGenerateClick
    572     TabOrder = 5
    573   end
    574   object ButtonGenerate1: TButton
    575     Left = 416
    576     Height = 38
    577     Top = 18
    578     Width = 145
    579     Caption = 'Generate PHP'
    580     OnClick = ButtonGenerate1Click
    581     TabOrder = 6
    582   end
    583   object SynFreePascalSyn1: TSynFreePascalSyn
    584     Enabled = False
    585     CompilerMode = pcmObjFPC
    586     NestedComments = True
    587     left = 608
    588     top = 128
     83  object ActionList1: TActionList
     84    left = 901
     85    top = 759
     86    object AGeneratePascal: TAction
     87      Caption = 'Generate Pascal'
     88      OnExecute = AGeneratePascalExecute
     89    end
     90    object AGeneratePhp: TAction
     91      Caption = 'Generate PHP'
     92      OnExecute = AGeneratePhpExecute
     93    end
     94    object AGenerateCSharp: TAction
     95      Caption = 'Generate C#'
     96      OnExecute = AGenerateCSharpExecute
     97    end
     98    object ARun: TAction
     99      Caption = 'Run'
     100      OnExecute = ARunExecute
     101    end
     102    object ACompile: TAction
     103      Caption = 'Compile'
     104      OnExecute = ACompileExecute
     105    end
     106    object AExit: TAction
     107      Caption = 'Exit'
     108      OnExecute = AExitExecute
     109    end
    589110  end
    590111end
  • branches/interpreter2/UFormMain.pas

    r205 r206  
    77uses
    88  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Menus,
    9   ActnList, SynHighlighterPas, SynEdit, USource;
     9  ActnList, ExtCtrls, SynHighlighterPas, SynEdit, USource;
    1010
    1111type
     
    1414
    1515  TFormMain = class(TForm)
    16     ButtonCompile: TButton;
    17     ButtonGenerate1: TButton;
    18     ButtonRun: TButton;
    19     ButtonGenerate: TButton;
    20     Label1: TLabel;
     16    ACompile: TAction;
     17    AExit: TAction;
     18    ARun: TAction;
     19    AGenerateCSharp: TAction;
     20    AGeneratePhp: TAction;
     21    AGeneratePascal: TAction;
     22    ActionList1: TActionList;
    2123    Label2: TLabel;
    22     MemoLog: TMemo;
     24    MainMenu1: TMainMenu;
    2325    MemoOutput: TMemo;
    24     SynEditSource: TSynEdit;
    25     SynFreePascalSyn1: TSynFreePascalSyn;
    26     procedure ButtonCompileClick(Sender: TObject);
    27     procedure ButtonGenerate1Click(Sender: TObject);
    28     procedure ButtonGenerateClick(Sender: TObject);
    29     procedure ButtonRunClick(Sender: TObject);
     26    MenuItem1: TMenuItem;
     27    MenuItem2: TMenuItem;
     28    MenuItem3: TMenuItem;
     29    MenuItem4: TMenuItem;
     30    MenuItem5: TMenuItem;
     31    MenuItem6: TMenuItem;
     32    MenuItemRun: TMenuItem;
     33    MenuItemGenerate: TMenuItem;
     34    MenuItemFile: TMenuItem;
     35    PanelSource: TPanel;
     36    PanelMessages: TPanel;
     37    procedure ACompileExecute(Sender: TObject);
     38    procedure AExitExecute(Sender: TObject);
     39    procedure AGenerateCSharpExecute(Sender: TObject);
     40    procedure AGeneratePascalExecute(Sender: TObject);
     41    procedure AGeneratePhpExecute(Sender: TObject);
     42    procedure ARunExecute(Sender: TObject);
    3043    procedure FormActivate(Sender: TObject);
    3144    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
     
    3851    procedure InterpreterError(Pos: TPoint; Text: string);
    3952    procedure UpdateInterface;
     53    procedure DockForm(Form: TForm; DockSite: TWinControl);
    4054  public
    4155
     
    5165
    5266uses
    53   UParser, UExecutor, UGeneratorPascal, UGeneratorPhp;
     67  UParser, UExecutor, UGeneratorPascal, UGeneratorPhp, UFormMessages, UFormSource,
     68  UGeneratorCSharp;
    5469
    5570{ TFormMain }
     
    5974  if not Initialized then begin
    6075    Initialized := True;
    61     SynEditSource.Lines.LoadFromFile('Test.pas');
    62     ButtonRun.Click;
     76    FormSource.SynEditSource.Lines.LoadFromFile('Test.pas');
     77    ARun.Execute;
    6378  end;
    6479end;
     
    7691procedure TFormMain.FormShow(Sender: TObject);
    7792begin
     93  DockForm(FormMessages, PanelMessages);
     94  DockForm(FormSource, PanelSource);
    7895  UpdateInterface;
    7996end;
    8097
    81 procedure TFormMain.ButtonRunClick(Sender: TObject);
     98procedure TFormMain.AExitExecute(Sender: TObject);
     99begin
     100  Close;
     101end;
     102
     103procedure TFormMain.ACompileExecute(Sender: TObject);
     104var
     105  Parser: TParser;
     106begin
     107  FormMessages.Clear;
     108  Parser := TParser.Create;
     109  Parser.OnError := InterpreterError;
     110  Parser.Source := FormSource.SynEditSource.Lines.Text;
     111  Parser.Parse;
     112  if Assigned(Prog) then Prog.Free;
     113  Prog := Parser.Prog;
     114  Parser.Free;
     115  UpdateInterface;
     116end;
     117
     118procedure TFormMain.AGenerateCSharpExecute(Sender: TObject);
     119var
     120  Generator: TGeneratorCSharp;
     121begin
     122  ACompile.Execute;
     123  MemoOutput.Lines.Clear;
     124  if Assigned(Prog) then begin
     125    Generator := TGeneratorCSharp.Create;
     126    Generator.Prog := Prog;
     127    Generator.Generate;
     128    MemoOutput.Lines.Text := Generator.Output;
     129    Generator.Free;
     130    MemoOutput.Lines.SaveToFile('Generated' + DirectorySeparator + 'Test.cs');
     131  end;
     132end;
     133
     134procedure TFormMain.AGeneratePascalExecute(Sender: TObject);
     135var
     136  Generator: TGeneratorPascal;
     137begin
     138  ACompile.Execute;
     139  MemoOutput.Lines.Clear;
     140  if Assigned(Prog) then begin
     141    Generator := TGeneratorPascal.Create;
     142    Generator.Prog := Prog;
     143    Generator.Generate;
     144    MemoOutput.Lines.Text := Generator.Output;
     145    Generator.Free;
     146    MemoOutput.Lines.SaveToFile('Generated' + DirectorySeparator + 'Test.pas');
     147  end;
     148end;
     149
     150procedure TFormMain.AGeneratePhpExecute(Sender: TObject);
     151var
     152  Generator: TGeneratorPhp;
     153begin
     154  ACompile.Execute;
     155  MemoOutput.Lines.Clear;
     156  if Assigned(Prog) then begin
     157    Generator := TGeneratorPhp.Create;
     158    Generator.Prog := Prog;
     159    Generator.Generate;
     160    MemoOutput.Lines.Text := Generator.Output;
     161    Generator.Free;
     162    MemoOutput.Lines.SaveToFile('Generated' + DirectorySeparator + 'Test.php');
     163  end;
     164end;
     165
     166procedure TFormMain.ARunExecute(Sender: TObject);
    82167var
    83168  Executor: TExecutor;
    84169begin
    85   ButtonCompile.Click;
     170  ACompile.Execute;
    86171  MemoOutput.Lines.Clear;
    87172  if Assigned(Prog) then begin
     
    94179end;
    95180
    96 procedure TFormMain.ButtonCompileClick(Sender: TObject);
    97 var
    98   Parser: TParser;
    99 begin
    100   MemoLog.Lines.Clear;
    101   Parser := TParser.Create;
    102   Parser.OnError := InterpreterError;
    103   Parser.Source := SynEditSource.Lines.Text;
    104   Parser.Parse;
    105   if Assigned(Prog) then Prog.Free;
    106   Prog := Parser.Prog;
    107   Parser.Free;
    108   UpdateInterface;
    109 end;
    110 
    111 procedure TFormMain.ButtonGenerate1Click(Sender: TObject);
    112 var
    113   Generator: TGeneratorPhp;
    114 begin
    115   ButtonCompile.Click;
    116   MemoOutput.Lines.Clear;
    117   if Assigned(Prog) then begin
    118     Generator := TGeneratorPhp.Create;
    119     Generator.Prog := Prog;
    120     Generator.Generate;
    121     MemoOutput.Lines.Text := Generator.Output;
    122     Generator.Free;
    123   end;
    124 end;
    125 
    126 procedure TFormMain.ButtonGenerateClick(Sender: TObject);
    127 var
    128   Generator: TGeneratorPascal;
    129 begin
    130   ButtonCompile.Click;
    131   MemoOutput.Lines.Clear;
    132   if Assigned(Prog) then begin
    133     Generator := TGeneratorPascal.Create;
    134     Generator.Prog := Prog;
    135     Generator.Generate;
    136     MemoOutput.Lines.Text := Generator.Output;
    137     Generator.Free;
    138   end;
    139 end;
    140 
    141181procedure TFormMain.InterpreterError(Pos: TPoint; Text: string);
    142182begin
    143   MemoLog.Lines.Add('[' + IntToStr(Pos.X) + ', ' + IntToStr(Pos.Y) + '] ' + Text);
     183  FormMessages.AddLine('[' + IntToStr(Pos.X) + ', ' + IntToStr(Pos.Y) + '] ' + Text);
    144184end;
    145185
    146186procedure TFormMain.UpdateInterface;
    147187begin
    148   ButtonRun.Enabled := Assigned(Prog);
     188end;
     189
     190procedure TFormMain.DockForm(Form: TForm; DockSite: TWinControl);
     191begin
     192  Form.ManualDock(DockSite, nil, alClient);
     193  Form.Align := alClient;
     194  Form.Show;
    149195end;
    150196
  • branches/interpreter2/UGenerator.pas

    r205 r206  
    2424
    2525procedure TGenerator.SetIndent(AValue: Integer);
     26var
     27  ToRemove: string;
     28  RemoveIndex: Integer;
    2629begin
    2730  if FIndent = AValue then Exit;
     
    3033  end else
    3134  if AValue < FIndent then begin
    32     Output := Copy(Output, 1, Length(Output) - (FIndent - AValue) * 2);
     35    RemoveIndex := Length(Output) - (FIndent - AValue) * 2;
     36    ToRemove := Copy(Output, RemoveIndex + 1, MaxInt);
     37    if ToRemove = DupeString('  ', FIndent - AValue) then
     38      Output := Copy(Output, 1, RemoveIndex);
    3339  end;
    3440  FIndent := AValue;
  • branches/interpreter2/UGeneratorPhp.pas

    r205 r206  
    190190  GenerateBlockConst(ParentBlock, Block);
    191191  GenerateBlockFunctions(ParentBlock, Block);
    192   if Block.BeginEnd.Commands.Count > 0 then
     192  if Block.BeginEnd.Commands.Count > 0 then begin
    193193    GenerateBeginEnd(ParentBlock, Block.BeginEnd);
     194    AddTextLine;
     195  end;
    194196end;
    195197
  • branches/interpreter2/interpreter.lpi

    r205 r206  
    2525          <SearchPaths>
    2626            <IncludeFiles Value="$(ProjOutDir)"/>
     27            <OtherUnitFiles Value="Forms"/>
    2728            <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)-$(BuildMode)"/>
    2829          </SearchPaths>
     
    7172      </Item2>
    7273    </RequiredPackages>
    73     <Units Count="10">
     74    <Units Count="13">
    7475      <Unit0>
    7576        <Filename Value="interpreter.lpr"/>
     
    115116        <IsPartOfProject Value="True"/>
    116117      </Unit9>
     118      <Unit10>
     119        <Filename Value="UGeneratorCSharp.pas"/>
     120        <IsPartOfProject Value="True"/>
     121      </Unit10>
     122      <Unit11>
     123        <Filename Value="Forms/UFormMessages.pas"/>
     124        <IsPartOfProject Value="True"/>
     125        <ComponentName Value="FormMessages"/>
     126        <ResourceBaseClass Value="Form"/>
     127      </Unit11>
     128      <Unit12>
     129        <Filename Value="Forms/UFormSource.pas"/>
     130        <IsPartOfProject Value="True"/>
     131        <ComponentName Value="FormSource"/>
     132        <ResourceBaseClass Value="Form"/>
     133      </Unit12>
    117134    </Units>
    118135  </ProjectOptions>
     
    124141    <SearchPaths>
    125142      <IncludeFiles Value="$(ProjOutDir)"/>
     143      <OtherUnitFiles Value="Forms"/>
    126144      <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)-$(BuildMode)"/>
    127145    </SearchPaths>
  • branches/interpreter2/interpreter.lpr

    r205 r206  
    99  Interfaces, SysUtils, // this includes the LCL widgetset
    1010  Forms, UFormMain, UParser, UTokenizer, USource, UExecutor, UInterpreter,
    11   UGeneratorPascal, UGeneratorPhp, UGenerator
     11  UGeneratorPascal, UGeneratorPhp, UGenerator, UGeneratorCSharp, UFormMessages,
     12  UFormSource
    1213  { you can add units after this };
    1314
     
    2829  Application.Initialize;
    2930  Application.CreateForm(TFormMain, FormMain);
     31  Application.CreateForm(TFormMessages, FormMessages);
     32  Application.CreateForm(TFormSource, FormSource);
    3033  Application.Run;
    3134end.
Note: See TracChangeset for help on using the changeset viewer.