Worker thread

This commit is contained in:
AlekXL
2019-04-13 14:18:08 +03:00
parent ea85f9f607
commit df3d508d1d
9 changed files with 2194 additions and 1133 deletions

View File

@@ -1,419 +1,549 @@
unit AG.PascalTokenizer;
{$IFDEF FPC}
{$MODE Delphi}
{$ENDIF}
interface
uses
{$IFDEF FPC}
SysUtils,Classes
{$ELSE}
System.Generics.Collections,System.SysUtils,System.Classes
{$ENDIF};
uses
SysUtils, Classes, IniFiles, SyncObjs, Generics.Collections;
{$IFDEF FPC}
{$mode Delphi}
{$ENDIF}
type
TAGTokenizerPos = record
x, y: integer;
end;
type
TAGTokenizerPos = record
x, y: integer;
end;
TAGToken = record
Text: string;
&begin, &end: TAGTokenizerPos;
ended: boolean;
{$IFNDEF FPC}constructor Create(Text: string; &begin, &end: TAGTokenizerPos;ended:boolean);{$ENDIF}
end;
TAGToken = record
Text:string;
&begin, &end: TAGTokenizerPos;
ended: boolean;
procedure Make(const Text:string;&begin, &end: TAGTokenizerPos;ended: boolean);
end;
TAGPasTokenizer = class
strict protected
s: TStrings;
y: integer;
x: integer;
function DoReadable():boolean;
function IsReadable():boolean;
function NextReadable():boolean;
procedure SkipSpaces();
function GetPos():TAGTokenizerPos;
procedure SetPos(pos:TAGTokenizerPos);
public
ended: boolean;
function GetNext(): TAGToken;
// procedure read_next();
constructor Create(input:TStrings);
property Pos:TAGTokenizerPos read GetPos write SetPos;
end;
TAGPasTokenizer = class
strict protected
FStrings: TStrings;
FLineIx: integer;
x: integer;
function DoReadable(): boolean;
function IsReadable(): boolean;
function NextReadable(): boolean;
procedure SkipSpaces();
function GetPos(): TAGTokenizerPos;
procedure SetPos(pos: TAGTokenizerPos);
public
ended: boolean;
function GetNext(): TAGToken;
// procedure read_next();
constructor Create(input: TStrings);
property pos: TAGTokenizerPos read GetPos write SetPos;
end;
{$IFNDEF FPC}
TAGPasTokenizerStack=class
strict protected
type
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;
TAGPasTokenizerStack = class
strict protected
type
GetCall = function(Tokenizer: TAGPasTokenizer): TAGToken of object;
{TAGPasTokenizerParallelStack=class(TAGPasTokenizerStack)
strict protected
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;
end; }
{$ENDIF}
var
Stack: TQueue<TAGToken>;
Tokenizer: TAGPasTokenizer;
Get: GetCall;
IsEnd: boolean;
function GetLast(): TAGToken;virtual;
function GetWithComments(Tokenizer: TAGPasTokenizer): TAGToken;
function GetWithoutComments(Tokenizer: TAGPasTokenizer): TAGToken;
destructor Destroy;override;
protected
function GetCachedCount: integer;inline;
public
constructor Create(input: TStrings;GetComments: boolean = True);
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;
function IsName(s: string): boolean;
function IsString(s: string): boolean;
TAGPasTokenizerParallelStack = class(TAGPasTokenizerStack)
strict protected
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
{$IFNDEF FPC}
constructor TAGToken.Create(Text: string; &begin, &end: TAGTokenizerPos;
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
procedure TAGToken.Make(const Text:string;&begin, &end: TAGTokenizerPos;ended:
boolean);
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);
end;
Result:=True;
end;
function IsString(s: string):boolean;
begin
Result:=s.StartsWith(#39);
end;
function TAGPasTokenizer.DoReadable(): boolean;
begin
if not IsReadable() then
function TAGPasTokenizer.IsReadable(): boolean;
begin
if (y + 1 = s.Count) then
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();
Result := x <= length(FStrings[FLineIx])+ fix;
end;
end;
function TAGPasTokenizer.GetPos(): TAGTokenizerPos;
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
function TAGPasTokenizer.NextReadable(): boolean;
begin
line:=s[y];
now_sym:=line[x];
l:=length(line);
if x<>l+Fix then
next_sym:=line[x+1]
else
next_sym:=#0;
if ml='' then
inc(x);
Result := DoReadable();
end;
procedure TAGPasTokenizer.SkipSpaces();
begin
DoReadable();
if not ended then
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
if next_sym='/' then
if now_sym = '/' then
begin
for i:=x to l+Fix do
ss:=ss+line[i];
x:=l+Fix;
break;
end;
end
else if now_sym='{' then
begin
ml:='}';
ss:=now_sym;
last_i0:=y;
end
else if now_sym='(' then
begin
if next_sym='*' then
if next_sym = '/' then
begin
ss := Copy(line, x, l);
x := l + 1 + fix;
break;
end;
end
else if now_sym = '{' then
begin
ml:=')';
inc(x);
last_i0:=y;
ss:=now_sym+next_sym;
ml := '}';
ss := now_sym;
last_i0 := FLineIx;
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
else
begin
ss:='(';
inc(x);
break;
if SYMS1.Contains(now_sym)then
begin
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
else
begin
if SYMS1.Contains(now_sym)then
while last_i0 <> FLineIx do
begin
ss:=now_sym;
inc(x);
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;
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;
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
begin
while last_i0<>y do
begin
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;
Result := Get(Tokenizer);
Stack.Enqueue(Result);
end;
NextReadable();
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);
begin
s:=input;
y:=0;
x:=1+fix;
ended:=False;
SkipSpaces;
end;
function TAGPasTokenizerStack.GetWithComments(
Tokenizer: TAGPasTokenizer): TAGToken;
begin
Result := Tokenizer.GetNext;
end;
{$IFNDEF FPC}
{TAGPasTokenizerStack}
function TAGPasTokenizerStack.GetWithoutComments(
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;
begin
if Stack.Count<>0 then
Result:=Stack.Peek
else
begin
Result:=Get(Tokenizer);
Stack.Push(Result);
end;
end;
constructor TAGPasTokenizerStack.Create(input: TStrings;
GetComments: boolean = True);
begin
Stack := TQueue<TAGToken>.Create();
Tokenizer := TAGPasTokenizer.Create(input);
function TAGPasTokenizerStack.IsEnded():Boolean;
begin
if GetComments then
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);
begin
Stack:=TStack<TAGToken>.Create();
Tokenizer:=TAGPasTokenizer.Create(input);
if GetComments then
Get:=function(Tokenizer:TAGPasTokenizer):TAGToken
begin
Result:=Tokenizer.GetNext;
end
else
Get:=function(Tokenizer:TAGPasTokenizer):TAGToken
begin
while True do
begin
Result:=Tokenizer.GetNext;
if Result.ended or not IsComment(Result.Text) then
break;
end;
function TAGPasTokenizerStack.Pop(): TAGToken;
begin
if Stack.Count > 0 then
Result := Stack.Dequeue
else
Result := Get(Tokenizer);
IsEnd := Result.ended;
end;
{ TAGPasTokenizerParallelStack }
function TAGPasTokenizerParallelStack.AddTokenToStack(): boolean;
var tkn: TAGToken;
begin
FStackLock.Enter;
tkn := Get(Tokenizer);
Result := tkn.ended;
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;
FreeAndNil(FWorker);
FreeAndNil(FSignal);
end;
procedure TAGPasTokenizerStack.Push(t:TAGToken);
begin
Stack.Push(t);
end;
function TAGPasTokenizerParallelStack.GetLast: TAGToken;
begin
FStackLock.Enter;
try
Result := inherited GetLast();
finally
FStackLock.Leave;
end;
end;
function TAGPasTokenizerStack.Pop():TAGToken;
begin
if Stack.Count<>0 then
Result:=Stack.Pop
else
Result:=Get(Tokenizer);
end;
function TAGPasTokenizerParallelStack.Pop: TAGToken;
var
doReplentishStack, wasRead: boolean;
begin
{$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
SYMS2 := {$IFDEF FPC}TStringList{$ELSE}TList<string>{$ENDIF}.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 := 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('>>');
finalization
FreeAndNil(SYMS2);
end.

View File

@@ -23,6 +23,8 @@ type
[Test]
procedure Test4;
[Test]
procedure TestParallel;
[Test]
procedure Test5;
// Test with TestCase Atribute to supply parameters.
end;
@@ -107,6 +109,23 @@ begin
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
TDUnitX.RegisterTestFixture(TMyTestObject);
end.

View File

@@ -1,7 +1,7 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{D45A1419-D0B2-4C03-89FD-530EF21B4F7D}</ProjectGuid>
<ProjectVersion>18.4</ProjectVersion>
<ProjectVersion>18.6</ProjectVersion>
<MainSource>Tests.dpr</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
@@ -18,21 +18,6 @@
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='iOSDevice32' and '$(Base)'=='true') or '$(Base_iOSDevice32)'!=''">
<Base_iOSDevice32>true</Base_iOSDevice32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='iOSDevice64' and '$(Base)'=='true') or '$(Base_iOSDevice64)'!=''">
<Base_iOSDevice64>true</Base_iOSDevice64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='iOSSimulator' and '$(Base)'=='true') or '$(Base_iOSSimulator)'!=''">
<Base_iOSSimulator>true</Base_iOSSimulator>
<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>
@@ -94,48 +79,7 @@
<AUP_WRITE_CALENDAR>true</AUP_WRITE_CALENDAR>
<AUP_WRITE_EXTERNAL_STORAGE>true</AUP_WRITE_EXTERNAL_STORAGE>
<AUP_READ_PHONE_STATE>true</AUP_READ_PHONE_STATE>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_iOSDevice32)'!=''">
<iPhone_AppIcon60>$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png</iPhone_AppIcon60>
<iPhone_AppIcon120>$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png</iPhone_AppIcon120>
<iPhone_Spotlight40>$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png</iPhone_Spotlight40>
<iPhone_Spotlight80>$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png</iPhone_Spotlight80>
<iPad_SpotLight40>$(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png</iPad_SpotLight40>
<iPad_SpotLight80>$(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png</iPad_SpotLight80>
<iPad_AppIcon76>$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png</iPad_AppIcon76>
<iPad_AppIcon152>$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png</iPad_AppIcon152>
<iPad_Launch768x1024>$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png</iPad_Launch768x1024>
<iPad_Launch1024x768>$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png</iPad_Launch1024x768>
<iPad_Launch1536x2048>$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png</iPad_Launch1536x2048>
<iPad_Launch2048x1536>$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png</iPad_Launch2048x1536>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_iOSDevice64)'!=''">
<iPhone_AppIcon60>$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png</iPhone_AppIcon60>
<iPhone_AppIcon120>$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png</iPhone_AppIcon120>
<iPhone_Spotlight40>$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png</iPhone_Spotlight40>
<iPhone_Spotlight80>$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png</iPhone_Spotlight80>
<iPad_SpotLight40>$(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png</iPad_SpotLight40>
<iPad_SpotLight80>$(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png</iPad_SpotLight80>
<iPad_AppIcon76>$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png</iPad_AppIcon76>
<iPad_AppIcon152>$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png</iPad_AppIcon152>
<iPad_Launch768x1024>$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png</iPad_Launch768x1024>
<iPad_Launch1024x768>$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png</iPad_Launch1024x768>
<iPad_Launch1536x2048>$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png</iPad_Launch1536x2048>
<iPad_Launch2048x1536>$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png</iPad_Launch2048x1536>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_iOSSimulator)'!=''">
<iPhone_AppIcon60>$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png</iPhone_AppIcon60>
<iPhone_AppIcon120>$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png</iPhone_AppIcon120>
<iPhone_Spotlight40>$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png</iPhone_Spotlight40>
<iPhone_Spotlight80>$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png</iPhone_Spotlight80>
<iPad_SpotLight40>$(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png</iPad_SpotLight40>
<iPad_SpotLight80>$(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png</iPad_SpotLight80>
<iPad_AppIcon76>$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png</iPad_AppIcon76>
<iPad_AppIcon152>$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png</iPad_AppIcon152>
<iPad_Launch768x1024>$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png</iPad_Launch768x1024>
<iPad_Launch1024x768>$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png</iPad_Launch1024x768>
<iPad_Launch1536x2048>$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png</iPad_Launch1536x2048>
<iPad_Launch2048x1536>$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png</iPad_Launch2048x1536>
<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_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
@@ -168,7 +112,7 @@
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="MainTest.pas"/>
<DCCReference Include="..\AG.PascalTokeniser.pas"/>
<DCCReference Include="..\AG.PascalTokenizer.pas"/>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
@@ -191,14 +135,18 @@
</Source>
</Delphi.Personality>
<Deployment Version="3">
<DeployFile LocalName="Win32\Debug\Tests.exe" Configuration="Debug" Class="ProjectOutput"/>
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<DeployFile LocalName="$(BDS)\Redist\osx64\libcgsqlite3.dylib" Class="DependencyModule">
<Platform Name="OSX64">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
@@ -207,17 +155,22 @@
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="Win32\Debug\Tests.exe" Configuration="Debug" Class="ProjectOutput"/>
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgsqlite3.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>0</Operation>
</Platform>
</DeployClass>
@@ -227,6 +180,12 @@
<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>
@@ -263,6 +222,12 @@
<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>
@@ -339,6 +304,10 @@
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
@@ -348,6 +317,10 @@
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.dll;.bpl</Extensions>
@@ -370,6 +343,10 @@
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.bpl</Extensions>
@@ -391,6 +368,9 @@
<Platform Name="OSX32">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX64">
<Operation>0</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
@@ -501,6 +481,7 @@
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXDebug"/>
<DeployClass Name="ProjectOSXEntitlements"/>
<DeployClass Name="ProjectOSXInfoPList"/>
<DeployClass Name="ProjectOSXResource">
@@ -508,6 +489,10 @@
<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">
@@ -529,6 +514,9 @@
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
@@ -568,15 +556,11 @@
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
</Deployment>
<Platforms>
<Platform value="Android">False</Platform>
<Platform value="iOSDevice32">False</Platform>
<Platform value="iOSDevice64">False</Platform>
<Platform value="iOSSimulator">False</Platform>
<Platform value="Linux64">False</Platform>
<Platform value="OSX32">False</Platform>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>

74
Demo/Demo.dpr Normal file
View 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
View 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
View 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
View 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>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="10"/>
<Version Value="11"/>
<PathDelim Value="\"/>
<General>
<SessionStorage Value="InProjectDir"/>
@@ -17,9 +17,10 @@
<Version Value="2"/>
</PublishOptions>
<RunParams>
<local>
<FormatVersion Value="1"/>
</local>
<FormatVersion Value="2"/>
<Modes Count="1">
<Mode0 Name="default"/>
</Modes>
</RunParams>
<RequiredPackages Count="3">
<Item1>

View File

@@ -2,7 +2,7 @@
<CONFIG>
<ProjectSession>
<PathDelim Value="\"/>
<Version Value="10"/>
<Version Value="11"/>
<BuildModes Active="Default"/>
<Units Count="5">
<Unit0>
@@ -27,8 +27,8 @@
<IsPartOfProject Value="True"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="2"/>
<TopLine Value="232"/>
<CursorPos X="13" Y="242"/>
<TopLine Value="200"/>
<CursorPos X="6" Y="216"/>
<UsageCount Value="20"/>
<Loaded Value="True"/>
</Unit2>
@@ -51,124 +51,128 @@
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="191" TopLine="171"/>
<Caret Line="189" TopLine="171"/>
</Position1>
<Position2>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="192" TopLine="171"/>
<Caret Line="190" TopLine="171"/>
</Position2>
<Position3>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="193" TopLine="171"/>
<Caret Line="191" TopLine="171"/>
</Position3>
<Position4>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="196" TopLine="171"/>
<Caret Line="192" TopLine="171"/>
</Position4>
<Position5>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="295" TopLine="278"/>
<Caret Line="193" TopLine="171"/>
</Position5>
<Position6>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="300" TopLine="278"/>
<Caret Line="196" TopLine="171"/>
</Position6>
<Position7>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="312" TopLine="284"/>
<Caret Line="295" TopLine="278"/>
</Position7>
<Position8>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="189" TopLine="171"/>
<Caret Line="300" TopLine="278"/>
</Position8>
<Position9>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="190" TopLine="171"/>
<Caret Line="312" TopLine="284"/>
</Position9>
<Position10>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="191" TopLine="171"/>
<Caret Line="189" TopLine="171"/>
</Position10>
<Position11>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="192" TopLine="171"/>
<Caret Line="190" TopLine="171"/>
</Position11>
<Position12>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="193" TopLine="171"/>
<Caret Line="191" TopLine="171"/>
</Position12>
<Position13>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="196" TopLine="171"/>
<Caret Line="192" TopLine="171"/>
</Position13>
<Position14>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="295" TopLine="278"/>
<Caret Line="193" TopLine="171"/>
</Position14>
<Position15>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="300" TopLine="278"/>
<Caret Line="196" TopLine="171"/>
</Position15>
<Position16>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="312" TopLine="284"/>
<Caret Line="295" Column="7" TopLine="278"/>
</Position16>
<Position17>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="189" TopLine="171"/>
<Filename Value="testcase1.pas"/>
<Caret Line="28" Column="11" TopLine="4"/>
</Position17>
<Position18>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="190" TopLine="171"/>
<Filename Value="testcase1.pas"/>
<Caret Line="29" Column="15" TopLine="4"/>
</Position18>
<Position19>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="191" TopLine="171"/>
<Caret Line="295" Column="9"/>
</Position19>
<Position20>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="192" TopLine="171"/>
<Caret Line="313" Column="20" TopLine="299"/>
</Position20>
<Position21>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="193" TopLine="171"/>
<Filename Value="testcase1.pas"/>
<Caret Line="23" Column="12" TopLine="8"/>
</Position21>
<Position22>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="196" TopLine="171"/>
<Caret Line="110" Column="34" TopLine="106"/>
</Position22>
<Position23>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="295" Column="7" TopLine="278"/>
<Caret Line="86" Column="32" TopLine="72"/>
</Position23>
<Position24>
<Filename Value="testcase1.pas"/>
<Caret Line="28" Column="11" TopLine="4"/>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="218" Column="37" TopLine="150"/>
</Position24>
<Position25>
<Filename Value="testcase1.pas"/>
<Caret Line="29" Column="15" TopLine="4"/>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="21" Column="7" TopLine="8"/>
</Position25>
<Position26>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="295" Column="9"/>
<Caret Line="9" Column="2"/>
</Position26>
<Position27>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="313" Column="20" TopLine="299"/>
<Caret Line="21" Column="40" TopLine="5"/>
</Position27>
<Position28>
<Filename Value="testcase1.pas"/>
<Caret Line="23" Column="12" TopLine="8"/>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="20" Column="7" TopLine="8"/>
</Position28>
<Position29>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="110" Column="34" TopLine="106"/>
<Caret Line="21" Column="7" TopLine="8"/>
</Position29>
<Position30>
<Filename Value="..\AG.PascalTokenizer.pas"/>
<Caret Line="86" Column="32" TopLine="72"/>
<Caret Line="5" Column="13"/>
</Position30>
</JumpHistory>
<RunParams>
<FormatVersion Value="2"/>
<Modes Count="0" ActiveMode="default"/>
</RunParams>
</ProjectSession>
</CONFIG>