Skip to content

Commit 57ff5b3

Browse files
committed
Lape update
1 parent 176da91 commit 57ff5b3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+1424
-1269
lines changed

DocGen/rundocgen.simba

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
var
2+
p: TRunningProcessPiped;
3+
s: String;
4+
begin
5+
p := StartProcessPiped('python.exe', ['-u', 'docgen.py'], 'DocGen');
6+
while p.Running do
7+
begin
8+
s := p.ReadString;
9+
if (s <> '') then
10+
WriteLn(s);
11+
Sleep(100);
12+
end;
13+
p.Free();
14+
15+
WriteLn('Link: "' + PathNormalize('DocGen/build/index.html') + '"');
16+
end;

DocGen/source/tutorials/Targets.rst

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,23 @@ You can declare as many TTarget variables as you like, all with different target
2424
begin
2525
MyOtherTarget.SetWindow(12345); // some window handle
2626
WriteLn MyOtherTarget.CountColor($0000FF, 10); // Count a red color, with 10 tolerance.
27-
end;
27+
end;
28+
29+
----
30+
31+
Searching on a image
32+
====================
33+
34+
:code:`TImage` has basic :code:`FindColor` and :code:`FindImage` methods however if you need the full finder methods you can do:
35+
36+
.. code-block::
37+
var MyTarget: TTarget;
38+
39+
MyTarget.SetImage(MyImage);
40+
Edges := MyTarget.FindEdges(5);
41+
42+
Or use the :code:`TImage.Target` property which returns a :code:`TTarget` already targeted to the image.
43+
44+
.. code-block::
45+
46+
Edges := MyImage.Target.FindEdges(5);

Source/ide/codetools/simba.ide_codetools_arrayhelpers.pas

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,6 @@ interface
1414
simba.base, simba.ide_codetools_parser;
1515

1616
const
17-
HELPERS_STRING: TStringArray = (
18-
'property <ArrayName>.Length: Integer;',
19-
'property <ArrayName>.First: <ArrayElementType>;',
20-
'property <ArrayName>.Last: <ArrayElementType>;',
21-
'property <ArrayName>.Pop: <ArrayElementType>;',
22-
'procedure <ArrayName>.SetLength(NewLength: Integer);',
23-
'function <ArrayName>.Copy: <ArrayName>;',
24-
'function <ArrayName>.Copy(StartIndex: Integer; Count: Integer = High(Integer)): <ArrayName>;',
25-
'procedure <ArrayName>.Delete(StartIndex: Integer; Count: Integer = High(Integer));',
26-
'function <ArrayName>.Remove(Value: <ArrayElementType>): <ArrayElementType>;',
27-
'function <ArrayName>.RandomValue: <ArrayElementType>;',
28-
'procedure <ArrayName>.Reverse;',
29-
'function <ArrayName>.Reversed: <ArrayName>;',
30-
'procedure <ArrayName>.Clear;'
31-
);
32-
3317
HELPERS_DYNARRAY: TStringArray = (
3418
'property <ArrayName>.Length: Integer;',
3519
'property <ArrayName>.Low: Integer;',
@@ -57,19 +41,17 @@ interface
5741
'function <ArrayName>.Sorted(CompareFunc: function(constref L, R: <ArrayElementType>): Integer): <ArrayDef>;',
5842
'function <ArrayName>.Sorted(Weights: TIntegerArray; LowToHigh: Boolean): <ArrayDef>;',
5943
'function <ArrayName>.Copy: <ArrayDef>;',
60-
'function <ArrayName>.Copy(StartIndex: Integer; Count: Integer = High(Integer)): <ArrayDef>;',
61-
'function <ArrayName>.RandomValue: <ArrayElementType>;',
44+
'function <ArrayName>.CopyRange(StartIndex, EndIndex: Integer): <ArrayDef>;',
45+
'function <ArrayName>.Random: <ArrayElementType>;',
6246
'function <ArrayName>.Reversed: <ArrayDef>;',
6347
'function <ArrayName>.Slice(Start, Stop, Step: Integer): <ArrayDef>;',
6448
'function <ArrayName>.Remove(Value: <ArrayElementType>): <ArrayElementType>;',
65-
'procedure <ArrayName>.Delete(Index: Integer; Count: Integer = High(Integer));',
49+
'function <ArrayName>.DeleteIndex(Index: Integer; Count: Integer): <ArrayElementType>;',
50+
'procedure <ArrayName>.DeleteRange(StartIndex, EndIndex: Integer);',
6651
'procedure <ArrayName>.Insert(Item: <ArrayElementType>; Index: Integer);',
6752
'procedure <ArrayName>.SetLength(NewLength: Integer);',
68-
'function <ArrayName>.RandomValue: <ArrayElementType>;',
6953
'procedure <ArrayName>.Reverse;',
7054
'procedure <ArrayName>.Clear;',
71-
'procedure <ArrayName>.Append(Value: <ArrayElementType>);',
72-
'procedure <ArrayName>.Extend(Value: <ArrayDef>);',
7355
'function <ArrayName>.Equals(Other: <ArrayDef>): Boolean;',
7456
'function <ArrayName>.Intersection(Other: <ArrayDef>): <ArrayDef>;',
7557
'function <ArrayName>.Difference(Other: <ArrayDef>): <ArrayDef>;',
@@ -143,14 +125,7 @@ function GetArrayHelpers(Decl: TDeclaration): TDeclarationArray;
143125
ElementType := Decl.Items.GetTextOfClass(TDeclaration_VarType);
144126
if (ElementType <> '') then
145127
Parser := Get(HELPERS_DYNARRAY, IfThen(Decl.Name <> '', Decl.Name, 'array'), ElementType, IfThen(Decl.Name <> '', Decl.Name, 'array of ' + ElementType));
146-
end
147-
else if (Decl is TDeclaration_TypeAlias) then
148-
case UpperCase(Decl.Name) of
149-
'STRING': Parser := Get(HELPERS_STRING, 'String', 'Char', 'String');
150-
'ANSISTRING': Parser := Get(HELPERS_STRING, 'AnsiString', 'Char', 'AnsiString');
151-
'WIDESTRING': Parser := Get(HELPERS_STRING, 'WideString', 'WideChar', 'WideString');
152-
'UNICODESTRING': Parser := Get(HELPERS_STRING, 'UnicodeString', 'UnicodeChar', 'UnicodeString');
153-
end;
128+
end;
154129

155130
if (Parser <> nil) then
156131
Result := Parser.Items.ToArray

Source/ide/codetools/simba.ide_codetools_generics.pas

Lines changed: 65 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,18 @@ interface
4848
'procedure <HeapName>.Clear; external;' + LineEnding +
4949
'function <HeapName>.ToString: String; external;' + LineEnding;
5050

51+
ARRAYBUFFER_METHODS =
52+
'property <ArrayBufferName>.Count: Integer; external;' + LineEnding +
53+
'property <ArrayBufferName>.Items: array of <ValueType>; external;' + LineEnding +
54+
'property <ArrayBufferName>.First: <ValueType>; external;' + LineEnding +
55+
'property <ArrayBufferName>.Last: <ValueType>; external;' + LineEnding +
56+
'property <ArrayBufferName>.Pop: <ValueType>; external;' + LineEnding +
57+
'property <ArrayBufferName>.ToArray: array of <ValueType>; external;' + LineEnding +
58+
'procedure <ArrayBufferName>.Add(Value: <ValueType>); overload; external;' + LineEnding +
59+
'procedure <ArrayBufferName>.Add(Values: array of <ValueType>); overload; external;' + LineEnding +
60+
'procedure <ArrayBufferName>.Clear; external;' + LineEnding +
61+
'function <ArrayBufferName>.ToString: String; external;' + LineEnding;
62+
5163
function GetGeneric(Decl: TDeclaration): TDeclarationArray;
5264

5365
implementation
@@ -57,7 +69,7 @@ implementation
5769

5870
function GetGeneric(Decl: TDeclaration): TDeclarationArray;
5971

60-
function RunStrMap(Name, Key, Value: String): TCodeParser;
72+
function RunStrMap(Name, Value: String): TCodeParser;
6173
var
6274
I: Integer;
6375
Methods, FileName: String;
@@ -68,12 +80,12 @@ function GetGeneric(Decl: TDeclaration): TDeclarationArray;
6880
Exit(GenericParsers[I]);
6981

7082
Methods := STRINGMAP_METHODS;
71-
Methods := Methods.Replace('<MapName>', Name);
72-
Methods := Methods.Replace('<KeyType>', Key);
83+
Methods := Methods.Replace('<MapName>', IfThen(Name <> '', Name, 'TStringMap'));
84+
Methods := Methods.Replace('<KeyType>', 'String');
7385
Methods := Methods.Replace('<ValueType>', Value);
7486

7587
Result := TCodeParser.Create();
76-
Result.SetScript(Methods);
88+
Result.SetScript(Methods, FileName);
7789
Result.Run();
7890

7991
GenericParsers.Add(Result);
@@ -90,12 +102,12 @@ function GetGeneric(Decl: TDeclaration): TDeclarationArray;
90102
Exit(GenericParsers[I]);
91103

92104
Methods := MAP_METHODS;
93-
Methods := Methods.Replace('<MapName>', Name);
105+
Methods := Methods.Replace('<MapName>', IfThen(Name <> '', Name, 'TMap'));
94106
Methods := Methods.Replace('<KeyType>', Key);
95107
Methods := Methods.Replace('<ValueType>', Value);
96108

97109
Result := TCodeParser.Create();
98-
Result.SetScript(Methods);
110+
Result.SetScript(Methods, FileName);
99111
Result.Run();
100112

101113
GenericParsers.Add(Result);
@@ -112,51 +124,68 @@ function GetGeneric(Decl: TDeclaration): TDeclarationArray;
112124
Exit(GenericParsers[I]);
113125

114126
Methods := HEAP_METHODS;
115-
Methods := Methods.Replace('<HeapName>', Name);
127+
Methods := Methods.Replace('<HeapName>', IfThen(Name <> '', Name, 'THeap'));
128+
Methods := Methods.Replace('<ValueType>', Value);
129+
130+
Result := TCodeParser.Create();
131+
Result.SetScript(Methods, FileName);
132+
Result.Run();
133+
134+
GenericParsers.Add(Result);
135+
end;
136+
137+
function RunArrayBuffer(Name, Value: String): TCodeParser;
138+
var
139+
I: Integer;
140+
Methods, FileName: String;
141+
begin
142+
FileName := '!GenericArrayBuffer::' + Name + '::' + Value;
143+
for I := 0 to GenericParsers.Count - 1 do
144+
if (GenericParsers[I].Lexer.FileName = FileName) then
145+
Exit(GenericParsers[I]);
146+
147+
Methods := ARRAYBUFFER_METHODS;
148+
Methods := Methods.Replace('<ArrayBufferName>', IfThen(Name <> '', Name, 'TArrayBuffer'));
116149
Methods := Methods.Replace('<ValueType>', Value);
117150

118151
Result := TCodeParser.Create();
119-
Result.SetScript(Methods);
152+
Result.SetScript(Methods, FileName);
120153
Result.Run();
121154

122155
GenericParsers.Add(Result);
123156
end;
124157

125158
var
126159
Parser: TCodeParser;
160+
Typ: TDeclaration;
127161
Params: TDeclarationArray;
128-
Name, Kind: String;
129162
begin
130163
Parser := nil;
131164

132-
if (Decl is TDeclaration_TypeFakeGeneric) then
165+
if (Decl is TDeclaration_TypeGeneric) then
133166
begin
134-
Kind := Decl.Items.GetTextOfClass(TDeclaration_Identifier);
135-
Name := Decl.Name;
136-
if (Name = '') then
137-
Name := Kind;
138-
139-
case LowerCase(Kind) of
140-
'stringmap':
141-
begin
142-
Params := Decl.Items.GetByClass(TDeclaration_Parameter, True, True);
143-
if Length(Params) = 1 then
144-
Parser := RunStrMap(Name, 'String', Params[0].Name);
145-
end;
146-
147-
'map':
148-
begin
149-
Params := Decl.Items.GetByClass(TDeclaration_Parameter, True, True);
150-
if Length(Params) = 2 then
151-
Parser := RunMap(Name, Params[0].Name, Params[1].Name);
152-
end;
153-
154-
'heap':
155-
begin
156-
Params := Decl.Items.GetByClass(TDeclaration_Parameter, True, True);
157-
if Length(Params) = 1 then
158-
Parser := RunHeap(Name, Params[0].Name);
159-
end;
167+
Typ := TDeclaration_TypeGeneric(Decl).Typ;
168+
Params := TDeclaration_TypeGeneric(Decl).Params;
169+
170+
if (Typ <> nil) and (Length(Params) > 0) then
171+
begin
172+
case UpperCase(Typ.Text) of
173+
'TSTRINGMAP':
174+
if (Length(Params) = 1) then
175+
Parser := RunStrMap(Decl.Name, Params[0].Text);
176+
177+
'TMAP':
178+
if (Length(Params) = 2) then
179+
Parser := RunMap(Decl.Name, Params[0].Text, Params[1].Text);
180+
181+
'THEAP':
182+
if (Length(Params) = 1) then
183+
Parser := RunHeap(Decl.Name, Params[0].Text);
184+
185+
'TARRAYBUFFER':
186+
if (Length(Params) = 1) then
187+
Parser := RunArrayBuffer(Decl.Name, Params[0].Text);
188+
end;
160189
end;
161190
end;
162191

Source/ide/codetools/simba.ide_codetools_parser.pas

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,17 @@ TDeclaration_Type = class(TDeclaration)
170170
function GetHeader: String; override;
171171
end;
172172

173+
TDeclaration_GenericSpecialize = class(TDeclaration);
174+
TDeclaration_GenericParam = class(TDeclaration);
175+
TDeclaration_TypeGeneric = class(TDeclaration_Type)
176+
protected
177+
function GetTyp: TDeclaration;
178+
function GetParams: TDeclarationArray;
179+
public
180+
property Typ: TDeclaration read GetTyp;
181+
property Params: TDeclarationArray read GetParams;
182+
end;
183+
173184
TDeclaration_TypeRecord = class(TDeclaration_Type)
174185
protected
175186
FFields: TDeclarationCache;
@@ -247,7 +258,6 @@ TDeclaration_TypeMethod = class(TDeclaration_Type)
247258
property Method: TDeclaration_Method read GetMethod;
248259
end;
249260

250-
TDeclaration_TypeFakeGeneric = class(TDeclaration_Type);
251261
TDeclaration_TypeNativeMethod = class(TDeclaration_Type);
252262

253263
TDeclaration_TypeRange = class(TDeclaration_Type);
@@ -473,6 +483,11 @@ TCodeParser = class(TPasParser)
473483
procedure TypeDeclaration; override;
474484
procedure TypeName; override;
475485

486+
// types - generics
487+
procedure GenericType; override;
488+
procedure GenericSpecialize; override;
489+
procedure GenericParam; override;
490+
476491
// types - alias
477492
procedure TypeAlias; override;
478493

@@ -492,8 +507,6 @@ TCodeParser = class(TPasParser)
492507
// types - native
493508
procedure NativeType; override;
494509

495-
procedure FakeGenericType; override;
496-
497510
// types = record
498511
procedure UnionType; override;
499512
procedure RecordType; override;
@@ -1010,6 +1023,16 @@ function TDeclaration_Type.GetHeader: String;
10101023
Result := FHeader;
10111024
end;
10121025

1026+
function TDeclaration_TypeGeneric.GetTyp: TDeclaration;
1027+
begin
1028+
Result := FItems.GetByClassFirst(TDeclaration_GenericSpecialize);
1029+
end;
1030+
1031+
function TDeclaration_TypeGeneric.GetParams: TDeclarationArray;
1032+
begin
1033+
Result := FItems.GetByClass(TDeclaration_GenericParam);
1034+
end;
1035+
10131036
function TDeclaration_EnumElement.GetName: string;
10141037
begin
10151038
if FName.IsNull then
@@ -1713,6 +1736,27 @@ procedure TCodeParser.TypeName;
17131736
inherited;
17141737
end;
17151738

1739+
procedure TCodeParser.GenericType;
1740+
begin
1741+
PushStack(TDeclaration_TypeGeneric);
1742+
inherited;
1743+
PopStack();
1744+
end;
1745+
1746+
procedure TCodeParser.GenericSpecialize;
1747+
begin
1748+
PushStack(TDeclaration_GenericSpecialize);
1749+
inherited;
1750+
PopStack();
1751+
end;
1752+
1753+
procedure TCodeParser.GenericParam;
1754+
begin
1755+
PushStack(TDeclaration_GenericParam);
1756+
inherited;
1757+
PopStack();
1758+
end;
1759+
17161760
procedure TCodeParser.TypeCopy;
17171761
begin
17181762
PushStack(TDeclaration_TypeCopy);
@@ -1726,7 +1770,7 @@ procedure TCodeParser.PointerType;
17261770
begin
17271771
PushStack(TDeclaration_TypePointer);
17281772
PushStack(TDeclaration_VarType);
1729-
inherited PointerType();
1773+
inherited;
17301774
PopStack();
17311775
PopStack();
17321776
end;
@@ -1897,13 +1941,6 @@ procedure TCodeParser.NativeType;
18971941
PopStack();
18981942
end;
18991943

1900-
procedure TCodeParser.FakeGenericType;
1901-
begin
1902-
PushStack(TDeclaration_TypeFakeGeneric);
1903-
inherited;
1904-
PopStack();
1905-
end;
1906-
19071944
procedure TCodeParser.RecordType;
19081945
begin
19091946
PushStack(TDeclaration_TypeRecord);

0 commit comments

Comments
 (0)