@@ -1,419 +1,549 @@
|
|||||||
unit AG.PascalTokenizer;
|
unit AG.PascalTokenizer;
|
||||||
|
{$IFDEF FPC}
|
||||||
|
{$MODE Delphi}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
{$IFDEF FPC}
|
SysUtils, Classes, IniFiles, SyncObjs, Generics.Collections;
|
||||||
SysUtils,Classes
|
|
||||||
{$ELSE}
|
|
||||||
System.Generics.Collections,System.SysUtils,System.Classes
|
|
||||||
{$ENDIF};
|
|
||||||
|
|
||||||
{$IFDEF FPC}
|
|
||||||
{$mode Delphi}
|
|
||||||
{$ENDIF}
|
|
||||||
|
|
||||||
type
|
type
|
||||||
TAGTokenizerPos = record
|
TAGTokenizerPos = record
|
||||||
x, y: integer;
|
x, y: integer;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TAGToken = record
|
TAGToken = record
|
||||||
Text: string;
|
Text:string;
|
||||||
&begin, &end: TAGTokenizerPos;
|
&begin, &end: TAGTokenizerPos;
|
||||||
ended: boolean;
|
ended: boolean;
|
||||||
{$IFNDEF FPC}constructor Create(Text: string; &begin, &end: TAGTokenizerPos;ended:boolean);{$ENDIF}
|
procedure Make(const Text:string;&begin, &end: TAGTokenizerPos;ended: boolean);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TAGPasTokenizer = class
|
TAGPasTokenizer = class
|
||||||
strict protected
|
strict protected
|
||||||
s: TStrings;
|
FStrings: TStrings;
|
||||||
y: integer;
|
FLineIx: integer;
|
||||||
x: integer;
|
x: integer;
|
||||||
function DoReadable():boolean;
|
function DoReadable(): boolean;
|
||||||
function IsReadable():boolean;
|
function IsReadable(): boolean;
|
||||||
function NextReadable():boolean;
|
function NextReadable(): boolean;
|
||||||
procedure SkipSpaces();
|
procedure SkipSpaces();
|
||||||
function GetPos():TAGTokenizerPos;
|
function GetPos(): TAGTokenizerPos;
|
||||||
procedure SetPos(pos:TAGTokenizerPos);
|
procedure SetPos(pos: TAGTokenizerPos);
|
||||||
public
|
public
|
||||||
ended: boolean;
|
ended: boolean;
|
||||||
function GetNext(): TAGToken;
|
function GetNext(): TAGToken;
|
||||||
// procedure read_next();
|
// procedure read_next();
|
||||||
constructor Create(input:TStrings);
|
constructor Create(input: TStrings);
|
||||||
property Pos:TAGTokenizerPos read GetPos write SetPos;
|
property pos: TAGTokenizerPos read GetPos write SetPos;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{$IFNDEF FPC}
|
TAGPasTokenizerStack = class
|
||||||
TAGPasTokenizerStack=class
|
strict protected
|
||||||
strict protected
|
type
|
||||||
type
|
GetCall = function(Tokenizer: TAGPasTokenizer): TAGToken of object;
|
||||||
GetCall=reference to function(Tokenizer:TAGPasTokenizer):TAGToken;
|
|
||||||
var
|
|
||||||
Stack:TStack<TAGToken>;
|
|
||||||
Tokenizer:TAGPasTokenizer;
|
|
||||||
Get:GetCall;
|
|
||||||
function GetLast():TAGToken;
|
|
||||||
function IsEnded():Boolean;
|
|
||||||
public
|
|
||||||
constructor Create(input:TStrings;GetComments:boolean=True);
|
|
||||||
procedure Push(t:TAGToken);
|
|
||||||
function Pop():TAGToken;
|
|
||||||
property Last:TAGToken read GetLast write Push;
|
|
||||||
property Ended:Boolean read IsEnded;
|
|
||||||
end;
|
|
||||||
|
|
||||||
{TAGPasTokenizerParallelStack=class(TAGPasTokenizerStack)
|
var
|
||||||
strict protected
|
Stack: TQueue<TAGToken>;
|
||||||
var
|
Tokenizer: TAGPasTokenizer;
|
||||||
Stack:TStack<TAGToken>;
|
Get: GetCall;
|
||||||
Tokenizer:TAGPasTokenizer;
|
IsEnd: boolean;
|
||||||
Get:GetCall;
|
function GetLast(): TAGToken;virtual;
|
||||||
function GetLast():TAGToken;
|
function GetWithComments(Tokenizer: TAGPasTokenizer): TAGToken;
|
||||||
function IsEnded():Boolean;
|
function GetWithoutComments(Tokenizer: TAGPasTokenizer): TAGToken;
|
||||||
public
|
destructor Destroy;override;
|
||||||
constructor Create(input:TStrings;GetComments:boolean=True);
|
protected
|
||||||
procedure Push(t:TAGToken);
|
function GetCachedCount: integer;inline;
|
||||||
function Pop():TAGToken;
|
public
|
||||||
end; }
|
constructor Create(input: TStrings;GetComments: boolean = True);
|
||||||
{$ENDIF}
|
procedure Push(const t: TAGToken);virtual;
|
||||||
|
function Pop(): TAGToken;virtual;
|
||||||
|
property Last: TAGToken read GetLast write Push;
|
||||||
|
property ended: boolean read IsEnd;
|
||||||
|
end;
|
||||||
|
|
||||||
function IsComment(s: string): boolean;
|
TAGPasTokenizerParallelStack = class(TAGPasTokenizerStack)
|
||||||
function IsName(s: string): boolean;
|
strict protected
|
||||||
function IsString(s: string): boolean;
|
type
|
||||||
|
TWorkerThread = class(TThread)
|
||||||
|
strict protected
|
||||||
|
FStack: TAGPasTokenizerParallelStack;
|
||||||
|
procedure Execute;override;
|
||||||
|
public
|
||||||
|
Idling: boolean;
|
||||||
|
constructor Create(const Stack: TAGPasTokenizerParallelStack);
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
FWorker: TWorkerThread;
|
||||||
|
FStackLock: TCriticalSection;
|
||||||
|
function AddTokenToStack: boolean;
|
||||||
|
function GetLast(): TAGToken;override;
|
||||||
|
procedure EnsureThreadDone();
|
||||||
|
destructor Destroy;override;
|
||||||
|
protected
|
||||||
|
FStackHalfMax: integer;
|
||||||
|
FSignal: TEvent;
|
||||||
|
procedure Push(const t: TAGToken);override;
|
||||||
|
public
|
||||||
|
constructor Create(const input: TStrings;GetComments: boolean = True;
|
||||||
|
stackMax: integer = 1000);
|
||||||
|
function Pop(): TAGToken;override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function IsComment(s:string): boolean;
|
||||||
|
function IsName(s:string): boolean;
|
||||||
|
function IsString(const s:string): boolean;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
{$IFNDEF FPC}
|
procedure TAGToken.Make(const Text:string;&begin, &end: TAGTokenizerPos;ended:
|
||||||
constructor TAGToken.Create(Text: string; &begin, &end: TAGTokenizerPos;
|
boolean);
|
||||||
ended: boolean);
|
|
||||||
begin
|
|
||||||
Self.Text := Text;
|
|
||||||
Self.&begin := &begin;
|
|
||||||
Self.&end := &end;
|
|
||||||
Self.ended := ended;
|
|
||||||
end;
|
|
||||||
{$ENDIF}
|
|
||||||
|
|
||||||
const
|
|
||||||
SYMS1 = '()[]/|\@#=><:;,.$+-*^';
|
|
||||||
SPACES = #12#10#13#9#11' ';
|
|
||||||
NO_NAME_SYMS = SYMS1 + SPACES + '{}';
|
|
||||||
CHARS_ID0 = '&abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_';
|
|
||||||
CHARS_ID = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_';
|
|
||||||
fix = {$IFDEF NEXTGEN}-1{$ELSE}0{$ENDIF};
|
|
||||||
|
|
||||||
var
|
|
||||||
SYMS2:{$IFDEF FPC}TStringList{$ELSE}TList<string>{$ENDIF}; // array[0..8]of string=();
|
|
||||||
|
|
||||||
function IsComment(s:string):boolean;
|
|
||||||
begin
|
|
||||||
Result:=(s.startswith('{') or s.startswith('(*') or s.startswith('//'));
|
|
||||||
end;
|
|
||||||
|
|
||||||
function IsName(s:string):boolean;
|
|
||||||
var
|
|
||||||
i: integer;
|
|
||||||
begin
|
|
||||||
if length(s) <= 0 then
|
|
||||||
Exit(False);
|
|
||||||
if s = '&' then
|
|
||||||
Exit(False);
|
|
||||||
if not CHARS_ID0.Contains(s[1 + fix]) then
|
|
||||||
Exit(False);
|
|
||||||
for i := 1 to length(s) do
|
|
||||||
begin
|
begin
|
||||||
if not CHARS_ID.Contains(s[i]) then
|
Self.Text := Text;
|
||||||
|
Self.&begin := &begin;
|
||||||
|
Self.&end := &end;
|
||||||
|
Self.ended := ended;
|
||||||
|
end;
|
||||||
|
|
||||||
|
const
|
||||||
|
SYMS1 = '()[]/|\@#=><:;,.$+-*^';
|
||||||
|
SPACES = #12#10#13#9#11' ';
|
||||||
|
NO_NAME_SYMS = SYMS1 + SPACES + '{}';
|
||||||
|
CHARS_ID0 = '&abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_';
|
||||||
|
CHARS_ID = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_';
|
||||||
|
fix = {$IFDEF NEXTGEN}-1{$ELSE}0{$ENDIF};
|
||||||
|
|
||||||
|
var
|
||||||
|
SYMS2: THashedStringList;
|
||||||
|
|
||||||
|
function IsComment(s:string): boolean;
|
||||||
|
begin
|
||||||
|
Result :=(s.startswith('{')or s.startswith('(*')or s.startswith('//'));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function IsName(s:string): boolean;
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
begin
|
||||||
|
if length(s)<= 0 then
|
||||||
|
Exit(False);
|
||||||
|
if s = '&' then
|
||||||
|
Exit(False);
|
||||||
|
if not CHARS_ID0.Contains(s[1 + fix])then
|
||||||
|
Exit(False);
|
||||||
|
for i := 1 to length(s)do
|
||||||
|
begin
|
||||||
|
if not CHARS_ID.Contains(s[i])then
|
||||||
|
Exit(False);
|
||||||
|
end;
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function IsString(const s:string): boolean;
|
||||||
|
begin
|
||||||
|
Result := s.startswith(#39);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TAGPasTokenizer.DoReadable(): boolean;
|
||||||
|
begin
|
||||||
|
if not IsReadable()then
|
||||||
|
begin
|
||||||
|
if(FLineIx + 1 = FStrings.Count)then
|
||||||
|
ended := True
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
inc(FLineIx);
|
||||||
|
x := 1 + fix;
|
||||||
|
while FStrings[FLineIx]<= '' do
|
||||||
|
begin
|
||||||
|
if FLineIx + 1 = FStrings.Count then
|
||||||
|
begin
|
||||||
|
ended := True;
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
inc(FLineIx);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
Exit(True);
|
||||||
|
end
|
||||||
|
else
|
||||||
Exit(False);
|
Exit(False);
|
||||||
end;
|
end;
|
||||||
Result:=True;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function IsString(s: string):boolean;
|
function TAGPasTokenizer.IsReadable(): boolean;
|
||||||
begin
|
|
||||||
Result:=s.StartsWith(#39);
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TAGPasTokenizer.DoReadable(): boolean;
|
|
||||||
begin
|
|
||||||
if not IsReadable() then
|
|
||||||
begin
|
begin
|
||||||
if (y + 1 = s.Count) then
|
Result := x <= length(FStrings[FLineIx])+ fix;
|
||||||
ended := True
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
inc(y);
|
|
||||||
x := 1+Fix;
|
|
||||||
while s[y]='' do
|
|
||||||
begin
|
|
||||||
if y + 1 = s.Count then
|
|
||||||
begin
|
|
||||||
ended := True;
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
inc(y);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
Exit(True);
|
|
||||||
end
|
|
||||||
else
|
|
||||||
Exit(False);
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TAGPasTokenizer.IsReadable(): boolean;
|
|
||||||
begin
|
|
||||||
Exit(length(s[y])+1+Fix > x);
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TAGPasTokenizer.NextReadable(): boolean;
|
|
||||||
begin
|
|
||||||
inc(x);
|
|
||||||
Result := DoReadable();
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TAGPasTokenizer.SkipSpaces();
|
|
||||||
begin
|
|
||||||
DoReadable();
|
|
||||||
if not ended then
|
|
||||||
begin
|
|
||||||
while SPACES.Contains(s[y][x]) do
|
|
||||||
NextReadable();
|
|
||||||
end;
|
end;
|
||||||
end;
|
|
||||||
|
|
||||||
function TAGPasTokenizer.GetPos(): TAGTokenizerPos;
|
function TAGPasTokenizer.NextReadable(): boolean;
|
||||||
begin
|
|
||||||
Result.x := x;
|
|
||||||
Result.y := y;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TAGPasTokenizer.SetPos(pos:TAGTokenizerPos);
|
|
||||||
begin
|
|
||||||
y:=Pos.x;
|
|
||||||
x:=Pos.y;
|
|
||||||
ended:=False;
|
|
||||||
DoReadable();
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TAGPasTokenizer.GetNext(): TAGToken;
|
|
||||||
var
|
|
||||||
l,i,last_i0:integer;
|
|
||||||
ml,ss,line:string;
|
|
||||||
now_sym,next_sym:char;
|
|
||||||
f{$IFDEF FPC},ff{$ENDIF}:boolean;
|
|
||||||
begin_pos:TAGTokenizerPos;
|
|
||||||
begin
|
|
||||||
ml:='';
|
|
||||||
ss:='';
|
|
||||||
f:=True;
|
|
||||||
begin_pos:=GetPos();
|
|
||||||
while f and not ended do
|
|
||||||
begin
|
begin
|
||||||
line:=s[y];
|
inc(x);
|
||||||
now_sym:=line[x];
|
Result := DoReadable();
|
||||||
l:=length(line);
|
end;
|
||||||
if x<>l+Fix then
|
|
||||||
next_sym:=line[x+1]
|
procedure TAGPasTokenizer.SkipSpaces();
|
||||||
else
|
begin
|
||||||
next_sym:=#0;
|
DoReadable();
|
||||||
if ml='' then
|
if not ended then
|
||||||
begin
|
begin
|
||||||
if now_sym='/' then
|
while SPACES.Contains(FStrings[FLineIx][x])do
|
||||||
|
NextReadable();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TAGPasTokenizer.GetPos(): TAGTokenizerPos;
|
||||||
|
begin
|
||||||
|
Result.x := x;
|
||||||
|
Result.y := FLineIx;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TAGPasTokenizer.SetPos(pos: TAGTokenizerPos);
|
||||||
|
begin
|
||||||
|
FLineIx := pos.x;
|
||||||
|
x := pos.y;
|
||||||
|
ended := False;
|
||||||
|
DoReadable();
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TAGPasTokenizer.GetNext(): TAGToken;
|
||||||
|
var
|
||||||
|
l, last_i0: integer;
|
||||||
|
ml, ss, line:string;
|
||||||
|
now_sym, next_sym: char;
|
||||||
|
f: boolean;
|
||||||
|
begin_pos: TAGTokenizerPos;
|
||||||
|
begin
|
||||||
|
ml := '';
|
||||||
|
ss := '';
|
||||||
|
f := True;
|
||||||
|
begin_pos := GetPos();
|
||||||
|
while f and not ended do
|
||||||
|
begin
|
||||||
|
line := FStrings[FLineIx];
|
||||||
|
now_sym := line[x];
|
||||||
|
l := length(line);
|
||||||
|
if x < l + fix then
|
||||||
|
next_sym := line[x + 1]
|
||||||
|
else
|
||||||
|
next_sym := #0;
|
||||||
|
|
||||||
|
if ml = '' then
|
||||||
begin
|
begin
|
||||||
if next_sym='/' then
|
if now_sym = '/' then
|
||||||
begin
|
begin
|
||||||
for i:=x to l+Fix do
|
if next_sym = '/' then
|
||||||
ss:=ss+line[i];
|
begin
|
||||||
x:=l+Fix;
|
ss := Copy(line, x, l);
|
||||||
break;
|
x := l + 1 + fix;
|
||||||
end;
|
break;
|
||||||
end
|
end;
|
||||||
else if now_sym='{' then
|
end
|
||||||
begin
|
else if now_sym = '{' then
|
||||||
ml:='}';
|
|
||||||
ss:=now_sym;
|
|
||||||
last_i0:=y;
|
|
||||||
end
|
|
||||||
else if now_sym='(' then
|
|
||||||
begin
|
|
||||||
if next_sym='*' then
|
|
||||||
begin
|
begin
|
||||||
ml:=')';
|
ml := '}';
|
||||||
inc(x);
|
ss := now_sym;
|
||||||
last_i0:=y;
|
last_i0 := FLineIx;
|
||||||
ss:=now_sym+next_sym;
|
end
|
||||||
|
else if now_sym = '(' then
|
||||||
|
begin
|
||||||
|
if next_sym = '*' then
|
||||||
|
begin
|
||||||
|
ml := ')';
|
||||||
|
inc(x);
|
||||||
|
last_i0 := FLineIx;
|
||||||
|
ss := now_sym + next_sym;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
ss := '(';
|
||||||
|
inc(x);
|
||||||
|
break;
|
||||||
|
end;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
ss:='(';
|
if SYMS1.Contains(now_sym)then
|
||||||
inc(x);
|
begin
|
||||||
break;
|
ss := now_sym;
|
||||||
|
inc(x);
|
||||||
|
if SYMS2.IndexOf(now_sym + next_sym)<>-1 then begin
|
||||||
|
inc(x);
|
||||||
|
ss := ss + next_sym;
|
||||||
|
end;
|
||||||
|
break;
|
||||||
|
end
|
||||||
|
else if now_sym = #39 then
|
||||||
|
begin
|
||||||
|
ss := #39;
|
||||||
|
inc(x);
|
||||||
|
if next_sym <> '' then
|
||||||
|
begin
|
||||||
|
ss := ss + next_sym;
|
||||||
|
while line[x]<> #39 do
|
||||||
|
begin
|
||||||
|
inc(x);
|
||||||
|
if not IsReadable()then
|
||||||
|
begin
|
||||||
|
dec(x);
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
ss := ss + line[x];
|
||||||
|
end;
|
||||||
|
inc(x);
|
||||||
|
end;
|
||||||
|
break;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
while not NO_NAME_SYMS.Contains(line[x])do
|
||||||
|
begin
|
||||||
|
ss := ss + line[x];
|
||||||
|
inc(x);
|
||||||
|
if not IsReadable()then
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
break;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
if SYMS1.Contains(now_sym)then
|
while last_i0 <> FLineIx do
|
||||||
begin
|
begin
|
||||||
ss:=now_sym;
|
ss := ss + #10;
|
||||||
inc(x);
|
inc(last_i0);
|
||||||
if SYMS2.
|
|
||||||
{$IFDEF FPC}
|
|
||||||
IndexOf(now_sym+next_sym)<>-1
|
|
||||||
{$ELSE}
|
|
||||||
Contains(now_sym+next_sym)
|
|
||||||
{$ENDIF}then
|
|
||||||
begin
|
|
||||||
inc(x);
|
|
||||||
ss:=ss+next_sym;
|
|
||||||
end;
|
|
||||||
break;
|
|
||||||
end
|
|
||||||
else if now_sym=#39 then
|
|
||||||
begin
|
|
||||||
ss:=#39;
|
|
||||||
inc(x);
|
|
||||||
if next_sym<>'' then
|
|
||||||
begin
|
|
||||||
ss:=ss+next_sym;
|
|
||||||
while line[x] <> #39 do
|
|
||||||
begin
|
|
||||||
inc(x);
|
|
||||||
if not IsReadable() then
|
|
||||||
begin
|
|
||||||
dec(x);
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
ss:=ss+line[x];
|
|
||||||
end;
|
|
||||||
inc(x);
|
|
||||||
end;
|
|
||||||
break;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
while not NO_NAME_SYMS.Contains(line[x]) do
|
|
||||||
begin
|
|
||||||
ss:=ss+line[x];
|
|
||||||
inc(x);
|
|
||||||
if not IsReadable() then
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
break;
|
|
||||||
end;
|
end;
|
||||||
|
ss := ss + now_sym;
|
||||||
|
if now_sym = ml then
|
||||||
|
if ml = '}' then
|
||||||
|
begin
|
||||||
|
inc(x);
|
||||||
|
break;
|
||||||
|
end
|
||||||
|
else if(x <> 0)and(line[x - 1]= '*')then
|
||||||
|
begin
|
||||||
|
inc(x);
|
||||||
|
break;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end
|
NextReadable();
|
||||||
|
end;
|
||||||
|
Result.Make(ss, begin_pos, GetPos, ended);
|
||||||
|
SkipSpaces;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TAGPasTokenizer.Create(input: TStrings);
|
||||||
|
begin
|
||||||
|
FStrings := input;
|
||||||
|
FLineIx := 0;
|
||||||
|
x := 1 + fix;
|
||||||
|
ended := False;
|
||||||
|
SkipSpaces;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TAGPasTokenizerStack }
|
||||||
|
|
||||||
|
destructor TAGPasTokenizerStack.Destroy;
|
||||||
|
begin
|
||||||
|
FreeAndNil(Stack);
|
||||||
|
FreeAndNil(Tokenizer);
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TAGPasTokenizerStack.GetCachedCount: integer;
|
||||||
|
begin
|
||||||
|
Result := Stack.Count
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TAGPasTokenizerStack.GetLast(): TAGToken;
|
||||||
|
begin
|
||||||
|
if Stack.Count <> 0 then
|
||||||
|
Result := Stack.Peek
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
while last_i0<>y do
|
Result := Get(Tokenizer);
|
||||||
begin
|
Stack.Enqueue(Result);
|
||||||
ss:=ss+#10;
|
|
||||||
inc(last_i0);
|
|
||||||
end;
|
|
||||||
ss:=ss+now_sym;
|
|
||||||
if now_sym=ml then
|
|
||||||
if ml='}' then
|
|
||||||
begin
|
|
||||||
inc(x);
|
|
||||||
break;
|
|
||||||
end
|
|
||||||
else if(x<>0)and(line[x-1]='*')then
|
|
||||||
begin
|
|
||||||
inc(x);
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
NextReadable();
|
|
||||||
end;
|
end;
|
||||||
{$IFDEF FPC}
|
|
||||||
Result.Text:=ss;
|
|
||||||
Result.&begin:=begin_pos;
|
|
||||||
Result.&end:=GetPos;
|
|
||||||
Result.ended:=ended;
|
|
||||||
{$ELSE}
|
|
||||||
Result:=TAGToken.Create(ss,begin_pos,GetPos,ended);
|
|
||||||
{$ENDIF}
|
|
||||||
SkipSpaces;
|
|
||||||
end;
|
|
||||||
|
|
||||||
constructor TAGPasTokenizer.Create(input:TStrings);
|
function TAGPasTokenizerStack.GetWithComments(
|
||||||
begin
|
Tokenizer: TAGPasTokenizer): TAGToken;
|
||||||
s:=input;
|
begin
|
||||||
y:=0;
|
Result := Tokenizer.GetNext;
|
||||||
x:=1+fix;
|
end;
|
||||||
ended:=False;
|
|
||||||
SkipSpaces;
|
|
||||||
end;
|
|
||||||
|
|
||||||
{$IFNDEF FPC}
|
function TAGPasTokenizerStack.GetWithoutComments(
|
||||||
{TAGPasTokenizerStack}
|
Tokenizer: TAGPasTokenizer): TAGToken;
|
||||||
|
var done: boolean;
|
||||||
|
begin
|
||||||
|
repeat
|
||||||
|
Result := Tokenizer.GetNext;
|
||||||
|
until Result.ended or not IsComment(Result.Text);
|
||||||
|
IsEnd := Result.ended;
|
||||||
|
end;
|
||||||
|
|
||||||
function TAGPasTokenizerStack.GetLast():TAGToken;
|
constructor TAGPasTokenizerStack.Create(input: TStrings;
|
||||||
begin
|
GetComments: boolean = True);
|
||||||
if Stack.Count<>0 then
|
begin
|
||||||
Result:=Stack.Peek
|
Stack := TQueue<TAGToken>.Create();
|
||||||
else
|
Tokenizer := TAGPasTokenizer.Create(input);
|
||||||
begin
|
|
||||||
Result:=Get(Tokenizer);
|
|
||||||
Stack.Push(Result);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TAGPasTokenizerStack.IsEnded():Boolean;
|
if GetComments then
|
||||||
begin
|
Get := GetWithComments
|
||||||
|
else
|
||||||
|
Get := GetWithoutComments;
|
||||||
|
end;
|
||||||
|
|
||||||
end;
|
procedure TAGPasTokenizerStack.Push(const t: TAGToken);
|
||||||
|
begin
|
||||||
|
Stack.Enqueue(t);
|
||||||
|
end;
|
||||||
|
|
||||||
constructor TAGPasTokenizerStack.Create(input:TStrings;GetComments:boolean=True);
|
function TAGPasTokenizerStack.Pop(): TAGToken;
|
||||||
begin
|
begin
|
||||||
Stack:=TStack<TAGToken>.Create();
|
if Stack.Count > 0 then
|
||||||
Tokenizer:=TAGPasTokenizer.Create(input);
|
Result := Stack.Dequeue
|
||||||
if GetComments then
|
else
|
||||||
Get:=function(Tokenizer:TAGPasTokenizer):TAGToken
|
Result := Get(Tokenizer);
|
||||||
begin
|
IsEnd := Result.ended;
|
||||||
Result:=Tokenizer.GetNext;
|
end;
|
||||||
end
|
|
||||||
else
|
{ TAGPasTokenizerParallelStack }
|
||||||
Get:=function(Tokenizer:TAGPasTokenizer):TAGToken
|
|
||||||
begin
|
function TAGPasTokenizerParallelStack.AddTokenToStack(): boolean;
|
||||||
while True do
|
var tkn: TAGToken;
|
||||||
begin
|
begin
|
||||||
Result:=Tokenizer.GetNext;
|
FStackLock.Enter;
|
||||||
if Result.ended or not IsComment(Result.Text) then
|
tkn := Get(Tokenizer);
|
||||||
break;
|
Result := tkn.ended;
|
||||||
end;
|
Stack.Enqueue(tkn);
|
||||||
|
FStackLock.Leave;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TAGPasTokenizerParallelStack.Create(const input: TStrings;
|
||||||
|
GetComments:
|
||||||
|
boolean = True;stackMax: integer = 1000);
|
||||||
|
begin
|
||||||
|
inherited Create(input, GetComments);
|
||||||
|
FStackHalfMax := stackMax shr 1;
|
||||||
|
FStackLock := TCriticalSection.Create();
|
||||||
|
FSignal := TEvent.Create(nil, False, True, 'ag_tkn_work_signal');
|
||||||
|
FWorker := TWorkerThread.Create(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TAGPasTokenizerParallelStack.Destroy;
|
||||||
|
begin
|
||||||
|
EnsureThreadDone();
|
||||||
|
FreeAndNil(FStackLock);
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TAGPasTokenizerParallelStack.EnsureThreadDone;
|
||||||
|
begin
|
||||||
|
if not FWorker.Terminated then begin
|
||||||
|
FWorker.Terminate;
|
||||||
|
FSignal.SetEvent();// stop idling
|
||||||
|
FWorker.WaitFor();
|
||||||
end;
|
end;
|
||||||
end;
|
FreeAndNil(FWorker);
|
||||||
|
FreeAndNil(FSignal);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TAGPasTokenizerStack.Push(t:TAGToken);
|
function TAGPasTokenizerParallelStack.GetLast: TAGToken;
|
||||||
begin
|
begin
|
||||||
Stack.Push(t);
|
FStackLock.Enter;
|
||||||
end;
|
try
|
||||||
|
Result := inherited GetLast();
|
||||||
|
finally
|
||||||
|
FStackLock.Leave;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
function TAGPasTokenizerStack.Pop():TAGToken;
|
function TAGPasTokenizerParallelStack.Pop: TAGToken;
|
||||||
begin
|
var
|
||||||
if Stack.Count<>0 then
|
doReplentishStack, wasRead: boolean;
|
||||||
Result:=Stack.Pop
|
begin
|
||||||
else
|
|
||||||
Result:=Get(Tokenizer);
|
|
||||||
end;
|
|
||||||
|
|
||||||
{$ENDIF}
|
FStackLock.Enter;
|
||||||
|
|
||||||
|
wasRead := Stack.Count > 0;
|
||||||
|
if wasRead then
|
||||||
|
Result := Stack.Dequeue
|
||||||
|
else
|
||||||
|
Result := Get(Tokenizer);
|
||||||
|
|
||||||
|
doReplentishStack := FWorker.Idling and(Stack.Count < FStackHalfMax);
|
||||||
|
FStackLock.Leave;
|
||||||
|
|
||||||
|
IsEnd := Result.ended;
|
||||||
|
if doReplentishStack then
|
||||||
|
FSignal.SetEvent;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TAGPasTokenizerParallelStack.Push(const t: TAGToken);
|
||||||
|
begin
|
||||||
|
FStackLock.Enter;
|
||||||
|
try
|
||||||
|
inherited Push(t);
|
||||||
|
finally
|
||||||
|
FStackLock.Leave;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TAGPasTokenizerParallelStack.TWorkerThread }
|
||||||
|
|
||||||
|
constructor TAGPasTokenizerParallelStack.TWorkerThread.Create(const Stack:
|
||||||
|
TAGPasTokenizerParallelStack);
|
||||||
|
begin
|
||||||
|
FStack := Stack;
|
||||||
|
inherited Create(False, 4 * 4096);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TAGPasTokenizerParallelStack.TWorkerThread.Execute;
|
||||||
|
var Count: integer;
|
||||||
|
isDone: boolean;
|
||||||
|
max: integer;
|
||||||
|
begin
|
||||||
|
Count := FStack.GetCachedCount;
|
||||||
|
max := FStack.FStackHalfMax * 2;
|
||||||
|
repeat
|
||||||
|
isDone := FStack.AddTokenToStack();
|
||||||
|
inc(Count);
|
||||||
|
while not Terminated and(Count >= max)do begin
|
||||||
|
Count := FStack.GetCachedCount();// fetch real count
|
||||||
|
if Count < max then
|
||||||
|
break;
|
||||||
|
Idling := True;
|
||||||
|
FStack.FSignal.WaitFor(1000);
|
||||||
|
Count := FStack.GetCachedCount();
|
||||||
|
end;
|
||||||
|
Idling := False;
|
||||||
|
until Terminated or isDone or FStack.ended;
|
||||||
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
SYMS2 := {$IFDEF FPC}TStringList{$ELSE}TList<string>{$ENDIF}.Create();
|
|
||||||
SYMS2.Add('>=');
|
SYMS2 := THashedStringList.Create();
|
||||||
SYMS2.Add('<=');
|
SYMS2.Add('>=');
|
||||||
SYMS2.Add('<>');
|
SYMS2.Add('<=');
|
||||||
SYMS2.Add(':=');
|
SYMS2.Add('<>');
|
||||||
SYMS2.Add('..');
|
SYMS2.Add(':=');
|
||||||
SYMS2.Add('-=');
|
SYMS2.Add('..');
|
||||||
SYMS2.Add('+=');
|
SYMS2.Add('-=');
|
||||||
SYMS2.Add('/=');
|
SYMS2.Add('+=');
|
||||||
SYMS2.Add('*=');
|
SYMS2.Add('/=');
|
||||||
SYMS2.Add('**');
|
SYMS2.Add('*=');
|
||||||
SYMS2.Add('><');
|
SYMS2.Add('**');
|
||||||
SYMS2.Add('(.');
|
SYMS2.Add('><');
|
||||||
SYMS2.Add('.)');
|
SYMS2.Add('(.');
|
||||||
SYMS2.Add('<<');
|
SYMS2.Add('.)');
|
||||||
SYMS2.Add('>>');
|
SYMS2.Add('<<');
|
||||||
|
SYMS2.Add('>>');
|
||||||
|
finalization
|
||||||
|
FreeAndNil(SYMS2);
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ type
|
|||||||
[Test]
|
[Test]
|
||||||
procedure Test4;
|
procedure Test4;
|
||||||
[Test]
|
[Test]
|
||||||
|
procedure TestParallel;
|
||||||
|
[Test]
|
||||||
procedure Test5;
|
procedure Test5;
|
||||||
// Test with TestCase Atribute to supply parameters.
|
// Test with TestCase Atribute to supply parameters.
|
||||||
end;
|
end;
|
||||||
@@ -107,6 +109,23 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TMyTestObject.TestParallel;
|
||||||
|
var
|
||||||
|
input:TStrings;
|
||||||
|
tokenizer:TAGPasTokenizerStack;
|
||||||
|
token:TAGToken;
|
||||||
|
begin
|
||||||
|
input:= TStringList.Create();
|
||||||
|
input.LoadFromFile('..\..\MainTest.pas');
|
||||||
|
tokenizer:=TAGPasTokenizerParallelStack.Create(input);
|
||||||
|
token.ended:=False;
|
||||||
|
while not token.ended do
|
||||||
|
begin
|
||||||
|
token:=tokenizer.Pop;
|
||||||
|
TDUnitX.CurrentRunner.Log(TLogLevel.Information, token.Text);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
TDUnitX.RegisterTestFixture(TMyTestObject);
|
TDUnitX.RegisterTestFixture(TMyTestObject);
|
||||||
end.
|
end.
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
74
Demo/Demo.dpr
Normal file
74
Demo/Demo.dpr
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
program Demo;
|
||||||
|
|
||||||
|
{$IFDEF FPC}
|
||||||
|
{$MODE Delphi}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$APPTYPE CONSOLE}
|
||||||
|
|
||||||
|
{$R *.res}
|
||||||
|
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IF not defined(FPC)}
|
||||||
|
FastMM4,
|
||||||
|
{$endif}
|
||||||
|
SysUtils,
|
||||||
|
Classes,
|
||||||
|
AG.PascalTokenizer in '../AG.PascalTokenizer.pas';
|
||||||
|
|
||||||
|
procedure Test(sList:TStrings; toStream:TStream; sync: boolean);
|
||||||
|
var tokenStack: TAGPasTokenizerStack;
|
||||||
|
s:UnicodeString;
|
||||||
|
begin
|
||||||
|
|
||||||
|
tokenStack := nil;
|
||||||
|
try
|
||||||
|
if sync then
|
||||||
|
tokenStack := TAGPasTokenizerStack.Create(sList)
|
||||||
|
else
|
||||||
|
tokenStack:= TAGPasTokenizerParallelStack.Create(sList);
|
||||||
|
|
||||||
|
while not tokenStack.ended do begin
|
||||||
|
s := tokenStack.Pop.Text+#10;
|
||||||
|
toStream.Write(Pointer(s)^, Length(s)*2);
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
FreeAndNil(tokenStack);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var start: Cardinal;
|
||||||
|
sList: TStringList;
|
||||||
|
sw:TFileStream;
|
||||||
|
begin
|
||||||
|
TObject.Create();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
try
|
||||||
|
sList := TStringList.Create();
|
||||||
|
try
|
||||||
|
sList.LoadFromFile('c:\prosoft\RIO\source\rtl\common\System.Classes.pas');
|
||||||
|
sw:=TFileStream.Create('tokens1.txt', fmCreate or fmOpenWrite);
|
||||||
|
|
||||||
|
start := TThread.GetTickCount;
|
||||||
|
Test(sList,sw, true);
|
||||||
|
|
||||||
|
start := TThread.GetTickCount - start;
|
||||||
|
Writeln('Sync Done in ', start, ' ms');
|
||||||
|
sw.Free;
|
||||||
|
sw:=TFileStream.Create('tokens2.txt', fmCreate or fmOpenWrite);
|
||||||
|
start := TThread.GetTickCount;
|
||||||
|
Test(sList,sw, false);
|
||||||
|
|
||||||
|
start := TThread.GetTickCount - start;
|
||||||
|
sw.Free;
|
||||||
|
Writeln('Sync Done in ', start, ' ms');
|
||||||
|
|
||||||
|
finally
|
||||||
|
sList.Free;
|
||||||
|
end;
|
||||||
|
except
|
||||||
|
on E: Exception do
|
||||||
|
Writeln(E.ClassName, ': ', E.Message);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
653
Demo/Demo.dproj
Normal file
653
Demo/Demo.dproj
Normal file
@@ -0,0 +1,653 @@
|
|||||||
|
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ProjectGuid>{94826175-AD0E-484E-AC0F-26CA7E737527}</ProjectGuid>
|
||||||
|
<ProjectVersion>18.6</ProjectVersion>
|
||||||
|
<FrameworkType>None</FrameworkType>
|
||||||
|
<MainSource>Demo.dpr</MainSource>
|
||||||
|
<Base>True</Base>
|
||||||
|
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||||
|
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||||
|
<TargetedPlatforms>1</TargetedPlatforms>
|
||||||
|
<AppType>Console</AppType>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
|
||||||
|
<Base_Android>true</Base_Android>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||||
|
<Base_Win32>true</Base_Win32>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
|
||||||
|
<Base_Win64>true</Base_Win64>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
|
||||||
|
<Cfg_1>true</Cfg_1>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
|
||||||
|
<Cfg_1_Win32>true</Cfg_1_Win32>
|
||||||
|
<CfgParent>Cfg_1</CfgParent>
|
||||||
|
<Cfg_1>true</Cfg_1>
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
|
||||||
|
<Cfg_2>true</Cfg_2>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Base)'!=''">
|
||||||
|
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
|
||||||
|
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
|
||||||
|
<DCC_E>false</DCC_E>
|
||||||
|
<DCC_N>false</DCC_N>
|
||||||
|
<DCC_S>false</DCC_S>
|
||||||
|
<DCC_F>false</DCC_F>
|
||||||
|
<DCC_K>false</DCC_K>
|
||||||
|
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
|
||||||
|
<SanitizedProjectName>Demo</SanitizedProjectName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Base_Android)'!=''">
|
||||||
|
<DCC_UsePackage>DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;DataSnapFireDAC;tethering;bindcompfmx;FmxTeeUI;FireDACIBDriver;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage)</DCC_UsePackage>
|
||||||
|
<Android_LauncherIcon36>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png</Android_LauncherIcon36>
|
||||||
|
<Android_LauncherIcon48>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png</Android_LauncherIcon48>
|
||||||
|
<Android_LauncherIcon72>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png</Android_LauncherIcon72>
|
||||||
|
<Android_LauncherIcon96>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png</Android_LauncherIcon96>
|
||||||
|
<Android_LauncherIcon144>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png</Android_LauncherIcon144>
|
||||||
|
<Android_SplashImage426>$(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png</Android_SplashImage426>
|
||||||
|
<Android_SplashImage470>$(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png</Android_SplashImage470>
|
||||||
|
<Android_SplashImage640>$(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png</Android_SplashImage640>
|
||||||
|
<Android_SplashImage960>$(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png</Android_SplashImage960>
|
||||||
|
<EnabledSysJars>android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services-ads-7.0.0.dex.jar;google-play-services-analytics-7.0.0.dex.jar;google-play-services-base-7.0.0.dex.jar;google-play-services-gcm-7.0.0.dex.jar;google-play-services-identity-7.0.0.dex.jar;google-play-services-maps-7.0.0.dex.jar;google-play-services-panorama-7.0.0.dex.jar;google-play-services-plus-7.0.0.dex.jar;google-play-services-wallet-7.0.0.dex.jar</EnabledSysJars>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||||
|
<DCC_UsePackage>DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;emsclientfiredac;DataSnapFireDAC;svnui;tethering;JvGlobus;FireDACADSDriver;JvPluginSystem;DBXMSSQLDriver;JvMM;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;JvBands;vcldb;bindcompfmx;svn;JvJans;DBXOracleDriver;JvNet;inetdb;JvAppFrm;VirtualTreesDR;FmxTeeUI;emsedge;JvDotNetCtrls;FireDACIBDriver;fmx;fmxdae;JvWizards;FireDACDBXDriver;dbexpress;IndyCore;vclx;JvPageComps;dsnap;DataSnapCommon;emsclient;FireDACCommon;JvDB;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;JclDeveloperTools;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;JvCmp;JvHMI;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;OverbyteIcsD103Run;bindcompdbx;IndyIPCommon;JvCustom;vcl;DBXSybaseASEDriver;IndyIPServer;JvXPCtrls;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;GrtPanelPackage;Jcl;JvCore;emshosting;JvCrypt;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;JvDlgs;JvRuntimeDesign;JvManagedThreads;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;JvTimeFramework;DBXSybaseASADriver;CustomIPTransport;vcldsnap;JvSystem;JvStdCtrls;FrameViewerXE9;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;SynEdit_R;TeeUI;JvDocking;dbxcds;VclSmp;JvPascalInterpreter;adortl;FireDACODBCDriver;JclVcl;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;JvControls;JvPrintPreview;JclContainers;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
|
||||||
|
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||||
|
<BT_BuildType>Debug</BT_BuildType>
|
||||||
|
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||||
|
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||||
|
<DCC_ConsoleTarget>true</DCC_ConsoleTarget>
|
||||||
|
<UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44>
|
||||||
|
<UWP_DelphiLogo150>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png</UWP_DelphiLogo150>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Base_Win64)'!=''">
|
||||||
|
<DCC_UsePackage>DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;emsclientfiredac;DataSnapFireDAC;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;VirtualTreesDR;FmxTeeUI;emsedge;FireDACIBDriver;fmx;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;OverbyteIcsD103Run;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;SynEdit_R;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
|
||||||
|
<DCC_ConsoleTarget>true</DCC_ConsoleTarget>
|
||||||
|
<UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44>
|
||||||
|
<UWP_DelphiLogo150>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png</UWP_DelphiLogo150>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||||
|
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
|
||||||
|
<DCC_DebugDCUs>true</DCC_DebugDCUs>
|
||||||
|
<DCC_Optimize>false</DCC_Optimize>
|
||||||
|
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
|
||||||
|
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
|
||||||
|
<DCC_RemoteDebug>true</DCC_RemoteDebug>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
|
||||||
|
<DCC_RemoteDebug>false</DCC_RemoteDebug>
|
||||||
|
<ILINK_MapFileType>DetailedSegments</ILINK_MapFileType>
|
||||||
|
<DCC_MapFile>3</DCC_MapFile>
|
||||||
|
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||||
|
<Manifest_File>(None)</Manifest_File>
|
||||||
|
<DCC_Define>FullDebugModeWhenDLLAvailable;$(DCC_Define)</DCC_Define>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||||
|
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
|
||||||
|
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
|
||||||
|
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
|
||||||
|
<DCC_DebugInformation>0</DCC_DebugInformation>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<DelphiCompile Include="$(MainSource)">
|
||||||
|
<MainSource>MainSource</MainSource>
|
||||||
|
</DelphiCompile>
|
||||||
|
<DCCReference Include="..\AG.PascalTokenizer.pas"/>
|
||||||
|
<BuildConfiguration Include="Release">
|
||||||
|
<Key>Cfg_2</Key>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
</BuildConfiguration>
|
||||||
|
<BuildConfiguration Include="Base">
|
||||||
|
<Key>Base</Key>
|
||||||
|
</BuildConfiguration>
|
||||||
|
<BuildConfiguration Include="Debug">
|
||||||
|
<Key>Cfg_1</Key>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
</BuildConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<ProjectExtensions>
|
||||||
|
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
|
||||||
|
<Borland.ProjectType>Application</Borland.ProjectType>
|
||||||
|
<BorlandProject>
|
||||||
|
<Delphi.Personality>
|
||||||
|
<Source>
|
||||||
|
<Source Name="MainSource">Demo.dpr</Source>
|
||||||
|
</Source>
|
||||||
|
<Excluded_Packages>
|
||||||
|
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k260.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
|
||||||
|
<Excluded_Packages Name="$(BDSBIN)\bcbofficexp260.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
|
||||||
|
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k260.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||||
|
<Excluded_Packages Name="$(BDSBIN)\dclofficexp260.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||||
|
</Excluded_Packages>
|
||||||
|
</Delphi.Personality>
|
||||||
|
<Deployment Version="3">
|
||||||
|
<DeployFile LocalName="$(BDS)\Redist\osx64\libcgsqlite3.dylib" Class="DependencyModule">
|
||||||
|
<Platform Name="OSX64">
|
||||||
|
<Overwrite>true</Overwrite>
|
||||||
|
</Platform>
|
||||||
|
</DeployFile>
|
||||||
|
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<Overwrite>true</Overwrite>
|
||||||
|
</Platform>
|
||||||
|
</DeployFile>
|
||||||
|
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Overwrite>true</Overwrite>
|
||||||
|
</Platform>
|
||||||
|
</DeployFile>
|
||||||
|
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Overwrite>true</Overwrite>
|
||||||
|
</Platform>
|
||||||
|
</DeployFile>
|
||||||
|
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgsqlite3.dylib" Class="DependencyModule">
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<Overwrite>true</Overwrite>
|
||||||
|
</Platform>
|
||||||
|
</DeployFile>
|
||||||
|
<DeployFile LocalName="Win32\Debug\Demo.exe" Configuration="Debug" Class="ProjectOutput">
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<RemoteName>Demo.exe</RemoteName>
|
||||||
|
<Overwrite>true</Overwrite>
|
||||||
|
</Platform>
|
||||||
|
</DeployFile>
|
||||||
|
<DeployClass Name="AdditionalDebugSymbols">
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidClassesDexFile">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>classes</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidFileProvider">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\xml</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidGDBServer">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidLibnativeArmeabiFile">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>library\lib\armeabi</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidLibnativeMipsFile">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>library\lib\mips</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidServiceOutput">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidSplashImageDef">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidSplashStyles">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\values</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidSplashStylesV21">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\values-v21</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_DefaultAppIcon">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_LauncherIcon144">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_LauncherIcon36">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-ldpi</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_LauncherIcon48">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-mdpi</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_LauncherIcon72">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-hdpi</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_LauncherIcon96">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-xhdpi</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_SplashImage426">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-small</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_SplashImage470">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-normal</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_SplashImage640">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-large</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_SplashImage960">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-xlarge</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="DebugSymbols">
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="DependencyFramework">
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.framework</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX64">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.framework</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="DependencyModule">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX64">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
<Extensions>.dll;.bpl</Extensions>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Required="true" Name="DependencyPackage">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX64">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
<Extensions>.bpl</Extensions>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="File">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\Resources\StartUp\</RemoteDir>
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX64">
|
||||||
|
<RemoteDir>Contents\Resources\StartUp\</RemoteDir>
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="iPad_Launch1024">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="iPad_Launch1536">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="iPad_Launch2048">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="iPad_Launch768">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="iPhone_Launch320">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="iPhone_Launch640">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="iPhone_Launch640x1136">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectAndroidManifest">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectiOSDeviceDebug">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectiOSDeviceResourceRules">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectiOSEntitlements">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<RemoteDir>..\</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<RemoteDir>..\</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectiOSInfoPList">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectiOSResource">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectOSXDebug">
|
||||||
|
<Platform Name="OSX64">
|
||||||
|
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectOSXEntitlements">
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>..\</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX64">
|
||||||
|
<RemoteDir>..\</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectOSXInfoPList">
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX64">
|
||||||
|
<RemoteDir>Contents</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectOSXResource">
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\Resources</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX64">
|
||||||
|
<RemoteDir>Contents\Resources</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Required="true" Name="ProjectOutput">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Linux64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX64">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectUWPManifest">
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="UWP_DelphiLogo150">
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<RemoteDir>Assets</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win64">
|
||||||
|
<RemoteDir>Assets</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="UWP_DelphiLogo44">
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<RemoteDir>Assets</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win64">
|
||||||
|
<RemoteDir>Assets</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
|
||||||
|
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||||
|
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
||||||
|
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
|
||||||
|
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||||
|
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/>
|
||||||
|
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
||||||
|
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME).app"/>
|
||||||
|
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
||||||
|
</Deployment>
|
||||||
|
<Platforms>
|
||||||
|
<Platform value="Android">False</Platform>
|
||||||
|
<Platform value="Win32">True</Platform>
|
||||||
|
<Platform value="Win64">False</Platform>
|
||||||
|
</Platforms>
|
||||||
|
</BorlandProject>
|
||||||
|
<ProjectFileVersion>12</ProjectFileVersion>
|
||||||
|
</ProjectExtensions>
|
||||||
|
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
|
||||||
|
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
|
||||||
|
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
|
||||||
|
</Project>
|
||||||
73
Demo/Demo.lpi
Normal file
73
Demo/Demo.lpi
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<General>
|
||||||
|
<Flags>
|
||||||
|
<MainUnitHasUsesSectionForAllUnits Value="False"/>
|
||||||
|
<MainUnitHasCreateFormStatements Value="False"/>
|
||||||
|
<MainUnitHasTitleStatement Value="False"/>
|
||||||
|
<MainUnitHasScaledStatement Value="False"/>
|
||||||
|
</Flags>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="Demo"/>
|
||||||
|
<UseAppBundle Value="False"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
</General>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="Default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
<UseFileFilters Value="True"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<FormatVersion Value="2"/>
|
||||||
|
<Modes Count="0"/>
|
||||||
|
</RunParams>
|
||||||
|
<RequiredPackages Count="1">
|
||||||
|
<Item1>
|
||||||
|
<PackageName Value="LCL"/>
|
||||||
|
</Item1>
|
||||||
|
</RequiredPackages>
|
||||||
|
<Units Count="2">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="Demo.dpr"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
<Unit1>
|
||||||
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit1>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value=".."/>
|
||||||
|
<OtherUnitFiles Value=".."/>
|
||||||
|
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<Parsing>
|
||||||
|
<SyntaxOptions>
|
||||||
|
<SyntaxMode Value="delphi"/>
|
||||||
|
</SyntaxOptions>
|
||||||
|
</Parsing>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<Exceptions Count="3">
|
||||||
|
<Item1>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item3>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
||||||
123
Demo/Demo.lps
Normal file
123
Demo/Demo.lps
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectSession>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<BuildModes Active="Default"/>
|
||||||
|
<Units Count="5">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="Demo.dpr"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<IsVisibleTab Value="True"/>
|
||||||
|
<CursorPos X="11" Y="13"/>
|
||||||
|
<UsageCount Value="20"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
<DefaultSyntaxHighlighter Value="Delphi"/>
|
||||||
|
</Unit0>
|
||||||
|
<Unit1>
|
||||||
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<EditorIndex Value="2"/>
|
||||||
|
<CursorPos X="7" Y="23"/>
|
||||||
|
<UsageCount Value="20"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
<DefaultSyntaxHighlighter Value="Delphi"/>
|
||||||
|
</Unit1>
|
||||||
|
<Unit2>
|
||||||
|
<Filename Value="..\..\..\..\pro\fpcsrc\packages\fcl-base\src\syncobjs.pp"/>
|
||||||
|
<EditorIndex Value="3"/>
|
||||||
|
<TopLine Value="124"/>
|
||||||
|
<CursorPos X="25" Y="137"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit2>
|
||||||
|
<Unit3>
|
||||||
|
<Filename Value="..\..\..\..\pro\fpcsrc\rtl\objpas\classes\classesh.inc"/>
|
||||||
|
<EditorIndex Value="1"/>
|
||||||
|
<TopLine Value="964"/>
|
||||||
|
<CursorPos X="57" Y="977"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit3>
|
||||||
|
<Unit4>
|
||||||
|
<Filename Value="..\FPCTests\fpcunitproject1.lpr"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<WindowIndex Value="-1"/>
|
||||||
|
<TopLine Value="-1"/>
|
||||||
|
<CursorPos X="-1" Y="-1"/>
|
||||||
|
<UsageCount Value="20"/>
|
||||||
|
<DefaultSyntaxHighlighter Value="Delphi"/>
|
||||||
|
</Unit4>
|
||||||
|
</Units>
|
||||||
|
<JumpHistory Count="13" HistoryIndex="12">
|
||||||
|
<Position1>
|
||||||
|
<Filename Value="Demo.dpr"/>
|
||||||
|
<Caret Line="13" Column="3"/>
|
||||||
|
</Position1>
|
||||||
|
<Position2>
|
||||||
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
|
<Caret Line="27" Column="11" TopLine="5"/>
|
||||||
|
</Position2>
|
||||||
|
<Position3>
|
||||||
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
|
<Caret Line="55" Column="16" TopLine="42"/>
|
||||||
|
</Position3>
|
||||||
|
<Position4>
|
||||||
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
|
<Caret Line="8" Column="6"/>
|
||||||
|
</Position4>
|
||||||
|
<Position5>
|
||||||
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
|
<Caret Line="68" Column="30" TopLine="56"/>
|
||||||
|
</Position5>
|
||||||
|
<Position6>
|
||||||
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
|
<Caret Line="88" Column="30" TopLine="78"/>
|
||||||
|
</Position6>
|
||||||
|
<Position7>
|
||||||
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
|
<Caret Line="410" Column="45" TopLine="398"/>
|
||||||
|
</Position7>
|
||||||
|
<Position8>
|
||||||
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
|
<Caret Line="453" Column="5" TopLine="441"/>
|
||||||
|
</Position8>
|
||||||
|
<Position9>
|
||||||
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
|
<Caret Line="6" Column="41"/>
|
||||||
|
</Position9>
|
||||||
|
<Position10>
|
||||||
|
<Filename Value="Demo.dpr"/>
|
||||||
|
<Caret Line="46" Column="26" TopLine="35"/>
|
||||||
|
</Position10>
|
||||||
|
<Position11>
|
||||||
|
<Filename Value="Demo.dpr"/>
|
||||||
|
<Caret Line="30" Column="29" TopLine="8"/>
|
||||||
|
</Position11>
|
||||||
|
<Position12>
|
||||||
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
|
<Caret Line="23" Column="7"/>
|
||||||
|
</Position12>
|
||||||
|
<Position13>
|
||||||
|
<Filename Value="Demo.dpr"/>
|
||||||
|
<Caret Line="13" Column="8"/>
|
||||||
|
</Position13>
|
||||||
|
</JumpHistory>
|
||||||
|
<RunParams>
|
||||||
|
<FormatVersion Value="2"/>
|
||||||
|
<Modes Count="0" ActiveMode=""/>
|
||||||
|
</RunParams>
|
||||||
|
</ProjectSession>
|
||||||
|
<SkipCheckLCLInterfaces Value="True"/>
|
||||||
|
<Debugging>
|
||||||
|
<BreakPoints Count="1">
|
||||||
|
<Item1>
|
||||||
|
<Kind Value="bpkSource"/>
|
||||||
|
<WatchScope Value="wpsLocal"/>
|
||||||
|
<WatchKind Value="wpkWrite"/>
|
||||||
|
<Source Value="Demo.dpr"/>
|
||||||
|
<Line Value="73"/>
|
||||||
|
</Item1>
|
||||||
|
</BreakPoints>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<CONFIG>
|
<CONFIG>
|
||||||
<ProjectOptions>
|
<ProjectOptions>
|
||||||
<Version Value="10"/>
|
<Version Value="11"/>
|
||||||
<PathDelim Value="\"/>
|
<PathDelim Value="\"/>
|
||||||
<General>
|
<General>
|
||||||
<SessionStorage Value="InProjectDir"/>
|
<SessionStorage Value="InProjectDir"/>
|
||||||
@@ -17,9 +17,10 @@
|
|||||||
<Version Value="2"/>
|
<Version Value="2"/>
|
||||||
</PublishOptions>
|
</PublishOptions>
|
||||||
<RunParams>
|
<RunParams>
|
||||||
<local>
|
<FormatVersion Value="2"/>
|
||||||
<FormatVersion Value="1"/>
|
<Modes Count="1">
|
||||||
</local>
|
<Mode0 Name="default"/>
|
||||||
|
</Modes>
|
||||||
</RunParams>
|
</RunParams>
|
||||||
<RequiredPackages Count="3">
|
<RequiredPackages Count="3">
|
||||||
<Item1>
|
<Item1>
|
||||||
|
|||||||
@@ -1,174 +1,178 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<CONFIG>
|
<CONFIG>
|
||||||
<ProjectSession>
|
<ProjectSession>
|
||||||
<PathDelim Value="\"/>
|
<PathDelim Value="\"/>
|
||||||
<Version Value="10"/>
|
<Version Value="11"/>
|
||||||
<BuildModes Active="Default"/>
|
<BuildModes Active="Default"/>
|
||||||
<Units Count="5">
|
<Units Count="5">
|
||||||
<Unit0>
|
<Unit0>
|
||||||
<Filename Value="fpcunitproject1.lpr"/>
|
<Filename Value="fpcunitproject1.lpr"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<CursorPos X="60" Y="13"/>
|
<CursorPos X="60" Y="13"/>
|
||||||
<UsageCount Value="20"/>
|
<UsageCount Value="20"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit0>
|
</Unit0>
|
||||||
<Unit1>
|
<Unit1>
|
||||||
<Filename Value="testcase1.pas"/>
|
<Filename Value="testcase1.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="TestCase1"/>
|
<UnitName Value="TestCase1"/>
|
||||||
<EditorIndex Value="1"/>
|
<EditorIndex Value="1"/>
|
||||||
<TopLine Value="13"/>
|
<TopLine Value="13"/>
|
||||||
<CursorPos X="23" Y="31"/>
|
<CursorPos X="23" Y="31"/>
|
||||||
<UsageCount Value="20"/>
|
<UsageCount Value="20"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit1>
|
</Unit1>
|
||||||
<Unit2>
|
<Unit2>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<IsVisibleTab Value="True"/>
|
<IsVisibleTab Value="True"/>
|
||||||
<EditorIndex Value="2"/>
|
<EditorIndex Value="2"/>
|
||||||
<TopLine Value="232"/>
|
<TopLine Value="200"/>
|
||||||
<CursorPos X="13" Y="242"/>
|
<CursorPos X="6" Y="216"/>
|
||||||
<UsageCount Value="20"/>
|
<UsageCount Value="20"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit2>
|
</Unit2>
|
||||||
<Unit3>
|
<Unit3>
|
||||||
<Filename Value="C:\lazarus\components\fpcunit\guitestrunner.pas"/>
|
<Filename Value="C:\lazarus\components\fpcunit\guitestrunner.pas"/>
|
||||||
<UnitName Value="GuiTestRunner"/>
|
<UnitName Value="GuiTestRunner"/>
|
||||||
<EditorIndex Value="-1"/>
|
<EditorIndex Value="-1"/>
|
||||||
<TopLine Value="44"/>
|
<TopLine Value="44"/>
|
||||||
<CursorPos X="12" Y="54"/>
|
<CursorPos X="12" Y="54"/>
|
||||||
<UsageCount Value="10"/>
|
<UsageCount Value="10"/>
|
||||||
</Unit3>
|
</Unit3>
|
||||||
<Unit4>
|
<Unit4>
|
||||||
<Filename Value="C:\lazarus\fpc\3.0.4\source\rtl\objpas\classes\classesh.inc"/>
|
<Filename Value="C:\lazarus\fpc\3.0.4\source\rtl\objpas\classes\classesh.inc"/>
|
||||||
<EditorIndex Value="-1"/>
|
<EditorIndex Value="-1"/>
|
||||||
<TopLine Value="715"/>
|
<TopLine Value="715"/>
|
||||||
<CursorPos X="47" Y="732"/>
|
<CursorPos X="47" Y="732"/>
|
||||||
<UsageCount Value="10"/>
|
<UsageCount Value="10"/>
|
||||||
</Unit4>
|
</Unit4>
|
||||||
</Units>
|
</Units>
|
||||||
<JumpHistory Count="30" HistoryIndex="29">
|
<JumpHistory Count="30" HistoryIndex="29">
|
||||||
<Position1>
|
<Position1>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="191" TopLine="171"/>
|
<Caret Line="189" TopLine="171"/>
|
||||||
</Position1>
|
</Position1>
|
||||||
<Position2>
|
<Position2>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="192" TopLine="171"/>
|
<Caret Line="190" TopLine="171"/>
|
||||||
</Position2>
|
</Position2>
|
||||||
<Position3>
|
<Position3>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="193" TopLine="171"/>
|
<Caret Line="191" TopLine="171"/>
|
||||||
</Position3>
|
</Position3>
|
||||||
<Position4>
|
<Position4>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="196" TopLine="171"/>
|
<Caret Line="192" TopLine="171"/>
|
||||||
</Position4>
|
</Position4>
|
||||||
<Position5>
|
<Position5>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="295" TopLine="278"/>
|
<Caret Line="193" TopLine="171"/>
|
||||||
</Position5>
|
</Position5>
|
||||||
<Position6>
|
<Position6>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="300" TopLine="278"/>
|
<Caret Line="196" TopLine="171"/>
|
||||||
</Position6>
|
</Position6>
|
||||||
<Position7>
|
<Position7>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="312" TopLine="284"/>
|
<Caret Line="295" TopLine="278"/>
|
||||||
</Position7>
|
</Position7>
|
||||||
<Position8>
|
<Position8>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="189" TopLine="171"/>
|
<Caret Line="300" TopLine="278"/>
|
||||||
</Position8>
|
</Position8>
|
||||||
<Position9>
|
<Position9>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="190" TopLine="171"/>
|
<Caret Line="312" TopLine="284"/>
|
||||||
</Position9>
|
</Position9>
|
||||||
<Position10>
|
<Position10>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="191" TopLine="171"/>
|
<Caret Line="189" TopLine="171"/>
|
||||||
</Position10>
|
</Position10>
|
||||||
<Position11>
|
<Position11>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="192" TopLine="171"/>
|
<Caret Line="190" TopLine="171"/>
|
||||||
</Position11>
|
</Position11>
|
||||||
<Position12>
|
<Position12>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="193" TopLine="171"/>
|
<Caret Line="191" TopLine="171"/>
|
||||||
</Position12>
|
</Position12>
|
||||||
<Position13>
|
<Position13>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="196" TopLine="171"/>
|
<Caret Line="192" TopLine="171"/>
|
||||||
</Position13>
|
</Position13>
|
||||||
<Position14>
|
<Position14>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="295" TopLine="278"/>
|
<Caret Line="193" TopLine="171"/>
|
||||||
</Position14>
|
</Position14>
|
||||||
<Position15>
|
<Position15>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="300" TopLine="278"/>
|
<Caret Line="196" TopLine="171"/>
|
||||||
</Position15>
|
</Position15>
|
||||||
<Position16>
|
<Position16>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="312" TopLine="284"/>
|
<Caret Line="295" Column="7" TopLine="278"/>
|
||||||
</Position16>
|
</Position16>
|
||||||
<Position17>
|
<Position17>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="testcase1.pas"/>
|
||||||
<Caret Line="189" TopLine="171"/>
|
<Caret Line="28" Column="11" TopLine="4"/>
|
||||||
</Position17>
|
</Position17>
|
||||||
<Position18>
|
<Position18>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="testcase1.pas"/>
|
||||||
<Caret Line="190" TopLine="171"/>
|
<Caret Line="29" Column="15" TopLine="4"/>
|
||||||
</Position18>
|
</Position18>
|
||||||
<Position19>
|
<Position19>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="191" TopLine="171"/>
|
<Caret Line="295" Column="9"/>
|
||||||
</Position19>
|
</Position19>
|
||||||
<Position20>
|
<Position20>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="192" TopLine="171"/>
|
<Caret Line="313" Column="20" TopLine="299"/>
|
||||||
</Position20>
|
</Position20>
|
||||||
<Position21>
|
<Position21>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="testcase1.pas"/>
|
||||||
<Caret Line="193" TopLine="171"/>
|
<Caret Line="23" Column="12" TopLine="8"/>
|
||||||
</Position21>
|
</Position21>
|
||||||
<Position22>
|
<Position22>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="196" TopLine="171"/>
|
<Caret Line="110" Column="34" TopLine="106"/>
|
||||||
</Position22>
|
</Position22>
|
||||||
<Position23>
|
<Position23>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="295" Column="7" TopLine="278"/>
|
<Caret Line="86" Column="32" TopLine="72"/>
|
||||||
</Position23>
|
</Position23>
|
||||||
<Position24>
|
<Position24>
|
||||||
<Filename Value="testcase1.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="28" Column="11" TopLine="4"/>
|
<Caret Line="218" Column="37" TopLine="150"/>
|
||||||
</Position24>
|
</Position24>
|
||||||
<Position25>
|
<Position25>
|
||||||
<Filename Value="testcase1.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="29" Column="15" TopLine="4"/>
|
<Caret Line="21" Column="7" TopLine="8"/>
|
||||||
</Position25>
|
</Position25>
|
||||||
<Position26>
|
<Position26>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="295" Column="9"/>
|
<Caret Line="9" Column="2"/>
|
||||||
</Position26>
|
</Position26>
|
||||||
<Position27>
|
<Position27>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="313" Column="20" TopLine="299"/>
|
<Caret Line="21" Column="40" TopLine="5"/>
|
||||||
</Position27>
|
</Position27>
|
||||||
<Position28>
|
<Position28>
|
||||||
<Filename Value="testcase1.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="23" Column="12" TopLine="8"/>
|
<Caret Line="20" Column="7" TopLine="8"/>
|
||||||
</Position28>
|
</Position28>
|
||||||
<Position29>
|
<Position29>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="110" Column="34" TopLine="106"/>
|
<Caret Line="21" Column="7" TopLine="8"/>
|
||||||
</Position29>
|
</Position29>
|
||||||
<Position30>
|
<Position30>
|
||||||
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
<Filename Value="..\AG.PascalTokenizer.pas"/>
|
||||||
<Caret Line="86" Column="32" TopLine="72"/>
|
<Caret Line="5" Column="13"/>
|
||||||
</Position30>
|
</Position30>
|
||||||
</JumpHistory>
|
</JumpHistory>
|
||||||
</ProjectSession>
|
<RunParams>
|
||||||
</CONFIG>
|
<FormatVersion Value="2"/>
|
||||||
|
<Modes Count="0" ActiveMode="default"/>
|
||||||
|
</RunParams>
|
||||||
|
</ProjectSession>
|
||||||
|
</CONFIG>
|
||||||
|
|||||||
Reference in New Issue
Block a user