json serialization : client & server

base64 encoded support + tests
new tests for schema parsers : complex type extending simple type

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@303 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2007-12-29 00:58:19 +00:00
parent b5310c5151
commit 4ac8b874cf
36 changed files with 3567 additions and 866 deletions

View File

@ -1284,7 +1284,7 @@ begin
StackTop().CreateInnerBuffer(dtInt64U)^.Int64U := int64UData; StackTop().CreateInnerBuffer(dtInt64U)^.Int64U := int64UData;
end; end;
{$ENDIF} {$ENDIF}
tkClass : tkClass, tkRecord :
begin begin
raise EBinaryFormatterException.Create('Inner Scope value must be a "simple type" value.'); raise EBinaryFormatterException.Create('Inner Scope value must be a "simple type" value.');
end; end;
@ -1502,7 +1502,7 @@ begin
tkAString tkAString
{$ENDIF} : string(AData) := dataBuffer^.StrData^.Data; {$ENDIF} : string(AData) := dataBuffer^.StrData^.Data;
tkClass : raise EBinaryFormatterException.Create('Inner Scope value must be a "simple type" value.'); tkClass, tkRecord : raise EBinaryFormatterException.Create('Inner Scope value must be a "simple type" value.');
{$IFDEF FPC} {$IFDEF FPC}
tkBool : Boolean(AData) := dataBuffer^.BoolData; tkBool : Boolean(AData) := dataBuffer^.BoolData;
{$ENDIF} {$ENDIF}

File diff suppressed because it is too large Load Diff

View File

@ -270,6 +270,34 @@ type
property Data : string read FData write FData; property Data : string read FData write FData;
end; end;
{ TBase64StringRemotable }
TBase64StringRemotable = class(TAbstractSimpleRemotable)
private
FBinaryData : string;
private
function GetEncodedString : string;
procedure SetEncodedString(const AValue : string);
public
class procedure Save(
AObject : TBaseRemotable;
AStore : IFormatterBase;
const AName : string;
const ATypeInfo : PTypeInfo
);override;
class procedure Load(
var AObject : TObject;
AStore : IFormatterBase;
var AName : string;
const ATypeInfo : PTypeInfo
);override;
procedure Assign(Source: TPersistent); override;
function Equal(const ACompareTo : TBaseRemotable) : Boolean;override;
property BinaryData : string read FBinaryData write FBinaryData;
property EncodedString : string read GetEncodedString write SetEncodedString;
end;
{ TBaseDateRemotable } { TBaseDateRemotable }
TBaseDateRemotable = class(TAbstractSimpleRemotable) TBaseDateRemotable = class(TAbstractSimpleRemotable)
@ -551,6 +579,23 @@ type
property Value : string read FValue write FValue; property Value : string read FValue write FValue;
end; end;
{ TBase64StringExtRemotable }
TBase64StringExtRemotable = class(TBaseComplexSimpleContentRemotable)
private
FBinaryData : string;
private
function GetEncodedString() : string;
procedure SetEncodedString(const AValue : string);
protected
class procedure SaveValue(AObject : TBaseRemotable; AStore : IFormatterBase);override;
class procedure LoadValue(var AObject : TObject; AStore : IFormatterBase);override;
public
function Equal(const ACompareTo : TBaseRemotable) : Boolean;override;
property BinaryData : string read FBinaryData write FBinaryData;
property EncodedString : string read GetEncodedString write SetEncodedString;
end;
{ TComplexBooleanContentRemotable } { TComplexBooleanContentRemotable }
TComplexBooleanContentRemotable = class(TBaseComplexSimpleContentRemotable) TComplexBooleanContentRemotable = class(TBaseComplexSimpleContentRemotable)
@ -1267,7 +1312,7 @@ var
{$ENDIF HAS_FORMAT_SETTINGS} {$ENDIF HAS_FORMAT_SETTINGS}
implementation implementation
uses imp_utils, record_rtti; uses imp_utils, record_rtti, basex_encode;
type type
PObject = ^TObject; PObject = ^TObject;
@ -5222,6 +5267,105 @@ begin
end; end;
end; end;
{ TBase64StringRemotable }
function TBase64StringRemotable.GetEncodedString() : string;
begin
Result := Base64Encode(BinaryData);
end;
procedure TBase64StringRemotable.SetEncodedString(const AValue : string);
begin
BinaryData := Base64Decode(AValue,[xoDecodeIgnoreIllegalChar]);
end;
class procedure TBase64StringRemotable.Save(
AObject : TBaseRemotable;
AStore : IFormatterBase;
const AName : string;
const ATypeInfo : PTypeInfo
);
var
buffer : string;
begin
if ( AObject <> nil ) then
buffer := TBase64StringRemotable(AObject).BinaryData
else
buffer := '';
AStore.Put(AName,TypeInfo(string),buffer);
end;
class procedure TBase64StringRemotable.Load(
var AObject : TObject;
AStore : IFormatterBase;
var AName : string;
const ATypeInfo : PTypeInfo
);
var
buffer : string;
begin
buffer := '';
AStore.Get(TypeInfo(string),AName,buffer);
if ( AObject = nil ) then
AObject := Create();
TBase64StringRemotable(AObject).EncodedString := buffer;
end;
procedure TBase64StringRemotable.Assign(Source : TPersistent);
begin
if Assigned(Source) then begin
if Source.InheritsFrom(TBase64StringRemotable) then
Self.BinaryData := TBase64StringRemotable(Source).BinaryData
else
inherited Assign(Source);
end else begin
BinaryData := '';
end;
end;
function TBase64StringRemotable.Equal(const ACompareTo : TBaseRemotable) : Boolean;
begin
Result := Assigned(ACompareTo) and
ACompareTo.InheritsFrom(TBase64StringRemotable) and
( TBase64StringRemotable(ACompareTo).BinaryData = Self.BinaryData );
end;
{ TBase64StringExtRemotable }
function TBase64StringExtRemotable.GetEncodedString() : string;
begin
Result := Base64Encode(BinaryData);
end;
procedure TBase64StringExtRemotable.SetEncodedString(const AValue : string);
begin
BinaryData := Base64Decode(AValue,[xoDecodeIgnoreIllegalChar]);
end;
class procedure TBase64StringExtRemotable.SaveValue(AObject : TBaseRemotable; AStore : IFormatterBase);
var
s : string;
begin
s := (AObject as TBase64StringExtRemotable).EncodedString;
AStore.PutScopeInnerValue(TypeInfo(string),s);
end;
class procedure TBase64StringExtRemotable.LoadValue(var AObject : TObject; AStore : IFormatterBase);
var
s : string;
begin
s := '';
AStore.GetScopeInnerValue(TypeInfo(string),s);
(AObject as TBase64StringExtRemotable).EncodedString := s;
end;
function TBase64StringExtRemotable.Equal(const ACompareTo : TBaseRemotable) : Boolean;
begin
Result := Assigned(ACompareTo) and
ACompareTo.InheritsFrom(TBase64StringExtRemotable) and
( TBase64StringExtRemotable(ACompareTo).BinaryData = Self.BinaryData );
end;
initialization initialization
{$IFDEF HAS_FORMAT_SETTINGS} {$IFDEF HAS_FORMAT_SETTINGS}
{$IFDEF FPC} {$IFDEF FPC}

175
wst/trunk/basex_encode.pas Normal file
View File

@ -0,0 +1,175 @@
{ This file is part of the Web Service Toolkit
Copyright (c) 2006, 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
{$INCLUDE wst_global.inc}
{$RANGECHECKS OFF}
unit basex_encode;
interface
uses
SysUtils, wst_types;
type
EBaseXException = class(Exception);
EBase64Exception = class(EBaseXException);
TBaseXOption = ( xoDecodeIgnoreIllegalChar );
TBaseXOptions = set of TBaseXOption;
function Base64Encode(const ALength : PtrInt; const AInBuffer) : string;overload;
function Base64Encode(const AInBuffer : string) : string;overload;
function Base64Decode(const AInBuffer : string; const AOptions : TBaseXOptions = [xoDecodeIgnoreIllegalChar]) : string;
resourcestring
s_InvalidEncodedData = 'Invalid encoded data.';
s_IllegalChar = 'Illegal character for that encoding : %s.';
implementation
const
Base64_CHAR_TABLE : array[0..63] of char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
IM = 255; INVALID_MARKER = IM;
Base64_CHAR_INDEX_TABLE : array[Byte] of Byte = (
IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,
IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,
IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,62,IM,IM,IM,63,
52,53,54,55,56,57,58,59,60,61,IM,IM,IM,00,IM,IM,
IM,00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,
15,16,17,18,19,20,21,22,23,24,25,IM,IM,IM,IM,IM,
IM,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
41,42,43,44,45,46,47,48,49,50,51,IM,IM,IM,IM,IM,
IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,
IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,
IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,
IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,
IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,
IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,
IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,
IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM,IM
);
Base64_CHAR_SET = ['A'..'Z','a'..'z','0'..'9','+','/'];
function Base64Encode(const ALength : PtrInt; const AInBuffer) : string;
var
locBuffer : PByte;
locCopied, locBlockCount, i, locAtualLen : PtrInt;
locInQuantom : array[0..2] of Byte;
locOutQuantom : array[0..3] of Char;
begin
Result := '';
if ( ALength > 0 ) then begin
locBuffer := @AInBuffer;
locBlockCount := ALength div 3;
SetLength(Result,(locBlockCount + 1 ) * 4);
locAtualLen := 0;
for i := 1 to locBlockCount do begin
Move(locBuffer^,locInQuantom[0],3);
Inc(locBuffer,3);
locOutQuantom[0] := Base64_CHAR_TABLE[( locInQuantom[0] shr 2 )];
locOutQuantom[1] := Base64_CHAR_TABLE[( ( locInQuantom[0] and 3 ) shl 4 ) or ( locInQuantom[1] shr 4 )];
locOutQuantom[2] := Base64_CHAR_TABLE[( ( locInQuantom[1] and 15 ) shl 2 ) or ( locInQuantom[2] shr 6 )];
locOutQuantom[3] := Base64_CHAR_TABLE[( locInQuantom[2] and 63 )];
Move(locOutQuantom[0],Result[locAtualLen + 1],4);
Inc(locAtualLen,4);
end;
locCopied := ALength mod 3;
if ( locCopied > 0 ) then begin
case locCopied of
1 :
begin
Move(locBuffer^,locInQuantom[0],1);
locInQuantom[1] := 0;
locOutQuantom[0] := Base64_CHAR_TABLE[( locInQuantom[0] shr 2 )];
locOutQuantom[1] := Base64_CHAR_TABLE[( ( locInQuantom[0] and 3 ) shl 4 ) or ( locInQuantom[1] shr 4 )];
locOutQuantom[2] := '=';
locOutQuantom[3] := '=';
end;
2 :
begin
Move(locBuffer^,locInQuantom[0],2);
locInQuantom[2] := 0;
locOutQuantom[0] := Base64_CHAR_TABLE[( locInQuantom[0] shr 2 )];
locOutQuantom[1] := Base64_CHAR_TABLE[( ( locInQuantom[0] and 3 ) shl 4 ) or ( locInQuantom[1] shr 4 )];
locOutQuantom[2] := Base64_CHAR_TABLE[( ( locInQuantom[1] and 15 ) shl 2 ) or ( locInQuantom[2] shr 6 )];
locOutQuantom[3] := '=';
end;
end;
Move(locOutQuantom[0],Result[locAtualLen + 1],4);
Inc(locAtualLen,4);
end;
SetLength(Result,locAtualLen);
end;
end;
function Base64Encode(const AInBuffer : string) : string;
begin
if ( Length(AInBuffer) = 0 ) then
Result := ''
else
Result := Base64Encode(Length(AInBuffer),AInBuffer[1]);
end;
function Base64Decode(const AInBuffer : string; const AOptions : TBaseXOptions) : string;
var
locBuffer : PByte;
locInLen, locInIndex, i, locPadded : PtrInt;
locOutQuantom : array[0..2] of Byte;
locInQuantom : array[0..3] of Byte;
ok : Boolean;
locAtualLen : PtrInt;
locInValue : Byte;
locFailOnIllegalChar : Boolean;
begin
if ( AInBuffer = '' ) then begin
Result := '';
end else begin
locInIndex := 0;
locAtualLen := 0;
locPadded := 0;
locInLen := Length(AInBuffer);
SetLength(Result,locInLen);
locBuffer := @(AInBuffer[1]);
locFailOnIllegalChar := not ( xoDecodeIgnoreIllegalChar in AOptions );
while ( locInIndex < locInLen ) do begin
for i := 0 to 3 do begin
ok := False;
while ( locInIndex <= locInLen ) do begin
locInValue := Base64_CHAR_INDEX_TABLE[locBuffer^];
Inc(locBuffer);
Inc(locInIndex);
if ( locInValue <> INVALID_MARKER ) then begin
locInQuantom[i] := locInValue;
if ( locBuffer^ = Byte('=') ) then begin
Inc(locPadded);
end;
ok := True;
Break;
end else begin
if locFailOnIllegalChar then
raise EBase64Exception.Create(s_InvalidEncodedData);
end;
end;
if not ok then
raise EBase64Exception.CreateFmt(s_IllegalChar,[Char(locBuffer^)]);
end;
locOutQuantom[0] := ( locInQuantom[0] shl 2 ) or ( locInQuantom[1] shr 4 );
locOutQuantom[1] := ( locInQuantom[1] shl 4 ) or ( locInQuantom[2] shr 2 );
locOutQuantom[2] := ( locInQuantom[2] shl 6 ) or ( locInQuantom[3] );
Move(locOutQuantom[0],Result[locAtualLen + 1],3 - locPadded);
Inc(locAtualLen,3 - locPadded);
end;
SetLength(Result,locAtualLen);
end;
end;
end.

View File

@ -0,0 +1,203 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
{$INCLUDE wst_global.inc}
unit json_formatter;
interface
uses
Classes, SysUtils, TypInfo,
base_service_intf, service_intf, imp_utils,
base_json_formatter, fpjson;
type
{$M+}
{ TJsonRpcFormatter }
TJsonRpcFormatter = class(TJsonRpcBaseFormatter,IFormatterClient)
private
FPropMngr : IPropertyManager;
FCallProcedureName : string;
FCallTarget : string;
protected
public
function GetPropertyManager():IPropertyManager;
procedure BeginCall(
const AProcName,
ATarget : string;
ACallContext : ICallContext
);
procedure EndCall();
procedure BeginCallRead(ACallContext : ICallContext);
function GetCallProcedureName():string;
function GetCallTarget():string;
end;
{ TJsonRpcCallMaker }
TJsonRpcCallMaker = class(TSimpleFactoryItem,ICallMaker)
Private
FPropMngr : IPropertyManager;
Public
constructor Create();override;
destructor Destroy();override;
function GetPropertyManager():IPropertyManager;
procedure MakeCall(
ASerializer : IFormatterClient;
ATransport : ITransport
);
End;
procedure RegisterJsonProtocol();
implementation
{ TJsonRpcFormatter }
function TJsonRpcFormatter.GetPropertyManager() : IPropertyManager;
begin
If Not Assigned(FPropMngr) Then
FPropMngr := TPublishedPropertyManager.Create(Self);
Result := FPropMngr;
end;
procedure TJsonRpcFormatter.BeginCall(
const AProcName, ATarget : string;
ACallContext : ICallContext
);
begin
FCallProcedureName := AProcName;
FCallTarget := ATarget;
BeginObject('',Nil);
Put(s_json_method,TypeInfo(string),FCallProcedureName);
BeginArray(s_json_params,Nil,nil,[0,0],asScoped);
end;
procedure TJsonRpcFormatter.EndCall();
begin
EndScope(); // params
EndScope(); // Root object
end;
procedure TJsonRpcFormatter.BeginCallRead(ACallContext : ICallContext);
Var
errCode, errMsg : string;
e : EJsonRpcException;
elt : TJSONData;
remoteErr : TJSONObject;
i : PtrInt;
begin
ClearStack();
PushStack(GetRootData(),stObject);
elt := GetRootData().Elements[s_json_error];
if Assigned(elt) and elt.InheritsFrom(TJSONObject) then begin
remoteErr := TJSONObject(elt);
i := remoteErr.IndexOfName(s_json_code);
if ( i > -1 ) then
errCode := remoteErr.Items[i].AsString
else
errCode := '';
i := remoteErr.IndexOfName(s_json_message);
if ( i > -1 ) then
errMsg := remoteErr.Items[i].AsString
else
errMsg := '';
e := EJsonRpcException.Create(errMsg);
e.FaultCode := errCode;
e.FaultString := errMsg;
raise e;
end;
end;
function TJsonRpcFormatter.GetCallProcedureName() : string;
begin
Result := FCallProcedureName;
end;
function TJsonRpcFormatter.GetCallTarget() : string;
begin
Result := FCallTarget;
end;
{ TJsonRpcCallMaker }
constructor TJsonRpcCallMaker.Create();
begin
FPropMngr := TPublishedPropertyManager.Create(Self);
end;
destructor TJsonRpcCallMaker.Destroy();
begin
FPropMngr := Nil;
inherited Destroy();
end;
function TJsonRpcCallMaker.GetPropertyManager() : IPropertyManager;
begin
Result:= FPropMngr;
end;
procedure TJsonRpcCallMaker.MakeCall(
ASerializer : IFormatterClient;
ATransport : ITransport
);
var
rqt, rsps : TMemoryStream;
propMngr : IPropertyManager;
begin
Assert(Assigned(ASerializer));
Assert(Assigned(ATransport));
propMngr := ATransport.GetPropertyManager();
propMngr.SetProperty(
s_json_ContentType,
s_json
);
propMngr.SetProperty(
sFORMAT,
s_json
);
rsps := Nil;
rqt := TMemoryStream.Create();
Try
rsps := TMemoryStream.Create();
ASerializer.SaveToStream(rqt);
rqt.Position := 0;
ATransport.SendAndReceive(rqt,rsps);
rqt.Clear();
rsps.Position := 0;
ASerializer.Clear();
ASerializer.LoadFromStream(rsps);
Finally
rsps.Free();
rqt.Free();
End;
end;
procedure RegisterJsonProtocol();
begin
GetFormaterRegistry().Register(
s_json,
TSimpleItemFactory.Create(TJsonRpcFormatter) as IItemFactory,
TSimpleItemFactory.Create(TJsonRpcCallMaker) as IItemFactory
);
end;
Initialization
RegisterJsonProtocol();
end.

View File

@ -124,6 +124,10 @@ begin
SetLength(strBuff,ARequest.Size); SetLength(strBuff,ARequest.Size);
ARequest.Position := 0; ARequest.Position := 0;
ARequest.Read(strBuff[1],Length(strBuff)); ARequest.Read(strBuff[1],Length(strBuff));
{$IFDEF WST_DBG}
if IsConsole then
WriteLn(strBuff);
{$ENDIF WST_DBG}
wrtr.WriteStr(strBuff); wrtr.WriteStr(strBuff);
buffStream.Position := 0; buffStream.Position := 0;
wrtr.WriteInt32S(buffStream.Size-4); wrtr.WriteInt32S(buffStream.Size-4);
@ -139,15 +143,15 @@ begin
AResponse.Size := 0; AResponse.Size := 0;
AResponse.CopyFrom(buffStream,0); AResponse.CopyFrom(buffStream,0);
AResponse.Position := 0; AResponse.Position := 0;
{$IFDEF WST_DBG} {$IFDEF WST_DBG}
i := AResponse.Position; i := AResponse.Position;
SetLength(s,AResponse.Size); SetLength(s,AResponse.Size);
AResponse.Read(s[1],AResponse.Size); AResponse.Read(s[1],AResponse.Size);
if IsConsole then if IsConsole then
WriteLn(s) WriteLn(s)
else {else
ShowMessage(s); ShowMessage(s);}
{$ENDIF WST_DBG} {$ENDIF WST_DBG}
finally finally
buffStream.Free(); buffStream.Free();
end; end;

View File

@ -2,7 +2,7 @@
<CONFIG> <CONFIG>
<ProjectOptions> <ProjectOptions>
<PathDelim Value="\"/> <PathDelim Value="\"/>
<Version Value="5"/> <Version Value="6"/>
<General> <General>
<Flags> <Flags>
<MainUnitHasUsesSectionForAllUnits Value="False"/> <MainUnitHasUsesSectionForAllUnits Value="False"/>
@ -12,7 +12,7 @@
<MainUnit Value="0"/> <MainUnit Value="0"/>
<IconPath Value=".\"/> <IconPath Value=".\"/>
<TargetFileExt Value=".exe"/> <TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="7"/> <ActiveEditorIndexAtStart Value="6"/>
</General> </General>
<VersionInfo> <VersionInfo>
<ProjectVersion Value=""/> <ProjectVersion Value=""/>
@ -58,7 +58,7 @@
<UnitName Value="base_service_intf"/> <UnitName Value="base_service_intf"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="10"/> <EditorIndex Value="9"/>
<UsageCount Value="63"/> <UsageCount Value="63"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit2> </Unit2>
@ -67,7 +67,7 @@
<UnitName Value="metadata_wsdl"/> <UnitName Value="metadata_wsdl"/>
<CursorPos X="80" Y="80"/> <CursorPos X="80" Y="80"/>
<TopLine Value="66"/> <TopLine Value="66"/>
<EditorIndex Value="11"/> <EditorIndex Value="10"/>
<UsageCount Value="64"/> <UsageCount Value="64"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit3> </Unit3>
@ -83,7 +83,7 @@
<UnitName Value="user_service_intf_imp"/> <UnitName Value="user_service_intf_imp"/>
<CursorPos X="1" Y="17"/> <CursorPos X="1" Y="17"/>
<TopLine Value="44"/> <TopLine Value="44"/>
<EditorIndex Value="7"/> <EditorIndex Value="6"/>
<UsageCount Value="61"/> <UsageCount Value="61"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit5> </Unit5>
@ -92,7 +92,7 @@
<UnitName Value="user_service_intf_binder"/> <UnitName Value="user_service_intf_binder"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="5"/> <EditorIndex Value="4"/>
<UsageCount Value="47"/> <UsageCount Value="47"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit6> </Unit6>
@ -102,7 +102,7 @@
<UnitName Value="user_service_intf"/> <UnitName Value="user_service_intf"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="8"/> <EditorIndex Value="7"/>
<UsageCount Value="83"/> <UsageCount Value="83"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit7> </Unit7>
@ -111,7 +111,7 @@
<UnitName Value="metadata_repository"/> <UnitName Value="metadata_repository"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="7"/> <TopLine Value="7"/>
<EditorIndex Value="12"/> <EditorIndex Value="11"/>
<UsageCount Value="64"/> <UsageCount Value="64"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit8> </Unit8>
@ -127,7 +127,7 @@
<UnitName Value="server_service_intf"/> <UnitName Value="server_service_intf"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="6"/> <EditorIndex Value="5"/>
<UsageCount Value="63"/> <UsageCount Value="63"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit10> </Unit10>
@ -339,7 +339,7 @@
<UnitName Value="user_service_intf_proxy"/> <UnitName Value="user_service_intf_proxy"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="9"/> <EditorIndex Value="8"/>
<UsageCount Value="28"/> <UsageCount Value="28"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit42> </Unit42>
@ -441,7 +441,7 @@
<UnitName Value="indy_tcp_server"/> <UnitName Value="indy_tcp_server"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="4"/> <EditorIndex Value="3"/>
<UsageCount Value="31"/> <UsageCount Value="31"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit55> </Unit55>
@ -575,9 +575,7 @@
<UnitName Value="user_service_intf_proxy"/> <UnitName Value="user_service_intf_proxy"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="3"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit74> </Unit74>
<Unit75> <Unit75>
<Filename Value="user_service_intf_binder.pas"/> <Filename Value="user_service_intf_binder.pas"/>
@ -587,12 +585,7 @@
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit75> </Unit75>
</Units> </Units>
<JumpHistory Count="1" HistoryIndex="0"> <JumpHistory Count="0" HistoryIndex="-1"/>
<Position1>
<Filename Value="..\user_service_intf_imp.pas"/>
<Caret Line="51" Column="60" TopLine="32"/>
</Position1>
</JumpHistory>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
<Version Value="5"/> <Version Value="5"/>

View File

@ -2,12 +2,12 @@
<CONFIG> <CONFIG>
<ProjectOptions> <ProjectOptions>
<PathDelim Value="\"/> <PathDelim Value="\"/>
<Version Value="5"/> <Version Value="6"/>
<General> <General>
<MainUnit Value="0"/> <MainUnit Value="0"/>
<IconPath Value=".\"/> <IconPath Value=".\"/>
<TargetFileExt Value=".exe"/> <TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="4"/> <ActiveEditorIndexAtStart Value="3"/>
</General> </General>
<VersionInfo> <VersionInfo>
<ProjectVersion Value=""/> <ProjectVersion Value=""/>
@ -25,13 +25,13 @@
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
</local> </local>
</RunParams> </RunParams>
<Units Count="9"> <Units Count="13">
<Unit0> <Unit0>
<Filename Value="lib_server.lpr"/> <Filename Value="lib_server.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="lib_server"/> <UnitName Value="lib_server"/>
<CursorPos X="49" Y="35"/> <CursorPos X="19" Y="22"/>
<TopLine Value="7"/> <TopLine Value="19"/>
<EditorIndex Value="0"/> <EditorIndex Value="0"/>
<UsageCount Value="28"/> <UsageCount Value="28"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@ -41,7 +41,7 @@
<UnitName Value="library_server_intf"/> <UnitName Value="library_server_intf"/>
<CursorPos X="32" Y="91"/> <CursorPos X="32" Y="91"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="2"/> <EditorIndex Value="6"/>
<UsageCount Value="13"/> <UsageCount Value="13"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit1> </Unit1>
@ -50,7 +50,7 @@
<UnitName Value="user_service_intf_imp"/> <UnitName Value="user_service_intf_imp"/>
<CursorPos X="43" Y="179"/> <CursorPos X="43" Y="179"/>
<TopLine Value="157"/> <TopLine Value="157"/>
<EditorIndex Value="5"/> <EditorIndex Value="9"/>
<UsageCount Value="13"/> <UsageCount Value="13"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit2> </Unit2>
@ -59,7 +59,7 @@
<UnitName Value="rtti_filters"/> <UnitName Value="rtti_filters"/>
<CursorPos X="53" Y="43"/> <CursorPos X="53" Y="43"/>
<TopLine Value="184"/> <TopLine Value="184"/>
<EditorIndex Value="7"/> <EditorIndex Value="11"/>
<UsageCount Value="13"/> <UsageCount Value="13"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit3> </Unit3>
@ -67,26 +67,26 @@
<Filename Value="..\user_service_intf_binder.pas"/> <Filename Value="..\user_service_intf_binder.pas"/>
<UnitName Value="user_service_intf_binder"/> <UnitName Value="user_service_intf_binder"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="64"/> <TopLine Value="1"/>
<EditorIndex Value="1"/> <EditorIndex Value="5"/>
<UsageCount Value="13"/> <UsageCount Value="13"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit4> </Unit4>
<Unit5> <Unit5>
<Filename Value="..\..\base_service_intf.pas"/> <Filename Value="..\..\base_service_intf.pas"/>
<UnitName Value="base_service_intf"/> <UnitName Value="base_service_intf"/>
<CursorPos X="52" Y="4125"/> <CursorPos X="3" Y="133"/>
<TopLine Value="4118"/> <TopLine Value="119"/>
<EditorIndex Value="6"/> <EditorIndex Value="10"/>
<UsageCount Value="13"/> <UsageCount Value="13"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit5> </Unit5>
<Unit6> <Unit6>
<Filename Value="..\..\semaphore.pas"/> <Filename Value="..\..\semaphore.pas"/>
<UnitName Value="semaphore"/> <UnitName Value="semaphore"/>
<CursorPos X="1" Y="140"/> <CursorPos X="1" Y="137"/>
<TopLine Value="111"/> <TopLine Value="113"/>
<EditorIndex Value="4"/> <EditorIndex Value="8"/>
<UsageCount Value="13"/> <UsageCount Value="13"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit6> </Unit6>
@ -95,7 +95,7 @@
<UnitName Value="cursor_intf"/> <UnitName Value="cursor_intf"/>
<CursorPos X="2" Y="13"/> <CursorPos X="2" Y="13"/>
<TopLine Value="34"/> <TopLine Value="34"/>
<EditorIndex Value="3"/> <EditorIndex Value="7"/>
<UsageCount Value="11"/> <UsageCount Value="11"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit7> </Unit7>
@ -106,6 +106,42 @@
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit8> </Unit8>
<Unit9>
<Filename Value="..\..\server_service_json.pas"/>
<UnitName Value="server_service_json"/>
<CursorPos X="104" Y="54"/>
<TopLine Value="34"/>
<EditorIndex Value="3"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit9>
<Unit10>
<Filename Value="..\..\base_json_formatter.pas"/>
<UnitName Value="base_json_formatter"/>
<CursorPos X="48" Y="177"/>
<TopLine Value="163"/>
<EditorIndex Value="4"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit10>
<Unit11>
<Filename Value="..\..\server_service_soap.pas"/>
<UnitName Value="server_service_soap"/>
<CursorPos X="95" Y="200"/>
<TopLine Value="177"/>
<EditorIndex Value="1"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit11>
<Unit12>
<Filename Value="..\..\base_soap_formatter.pas"/>
<UnitName Value="base_soap_formatter"/>
<CursorPos X="57" Y="129"/>
<TopLine Value="115"/>
<EditorIndex Value="2"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit12>
</Units> </Units>
<JumpHistory Count="0" HistoryIndex="-1"/> <JumpHistory Count="0" HistoryIndex="-1"/>
</ProjectOptions> </ProjectOptions>

View File

@ -19,7 +19,7 @@ uses
base_service_intf, base_service_intf,
server_service_intf, server_service_intf,
server_service_soap, server_binary_formatter, server_service_xmlrpc, server_service_soap, server_binary_formatter, server_service_xmlrpc, server_service_json,
metadata_repository, metadata_wsdl, metadata_repository, metadata_wsdl,
metadata_service, metadata_service_binder, metadata_service_imp, metadata_service, metadata_service_binder, metadata_service_imp,
library_base_intf, library_server_intf, library_base_intf, library_server_intf,
@ -36,6 +36,7 @@ begin
Server_service_RegisterBinaryFormat(); Server_service_RegisterBinaryFormat();
Server_service_RegisterSoapFormat(); Server_service_RegisterSoapFormat();
Server_service_RegisterXmlRpcFormat(); Server_service_RegisterXmlRpcFormat();
Server_service_RegisterJsonFormat();
RegisterUserServiceImplementationFactory(); RegisterUserServiceImplementationFactory();
Server_service_RegisterUserServiceService(); Server_service_RegisterUserServiceService();

View File

@ -2,7 +2,7 @@
<CONFIG> <CONFIG>
<ProjectOptions> <ProjectOptions>
<PathDelim Value="\"/> <PathDelim Value="\"/>
<Version Value="5"/> <Version Value="6"/>
<General> <General>
<Flags> <Flags>
<MainUnitHasUsesSectionForAllUnits Value="False"/> <MainUnitHasUsesSectionForAllUnits Value="False"/>
@ -12,7 +12,7 @@
<MainUnit Value="0"/> <MainUnit Value="0"/>
<IconPath Value=".\"/> <IconPath Value=".\"/>
<TargetFileExt Value=".exe"/> <TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="10"/> <ActiveEditorIndexAtStart Value="2"/>
</General> </General>
<VersionInfo> <VersionInfo>
<ProjectVersion Value=""/> <ProjectVersion Value=""/>
@ -30,13 +30,13 @@
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
</local> </local>
</RunParams> </RunParams>
<Units Count="60"> <Units Count="65">
<Unit0> <Unit0>
<Filename Value="tcp_server.pas"/> <Filename Value="tcp_server.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="tcp_server"/> <UnitName Value="tcp_server"/>
<CursorPos X="22" Y="37"/> <CursorPos X="25" Y="30"/>
<TopLine Value="27"/> <TopLine Value="18"/>
<EditorIndex Value="0"/> <EditorIndex Value="0"/>
<UsageCount Value="89"/> <UsageCount Value="89"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@ -79,9 +79,7 @@
<UnitName Value="server_service_soap"/> <UnitName Value="server_service_soap"/>
<CursorPos X="33" Y="21"/> <CursorPos X="33" Y="21"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="4"/>
<UsageCount Value="31"/> <UsageCount Value="31"/>
<Loaded Value="True"/>
</Unit6> </Unit6>
<Unit7> <Unit7>
<Filename Value="..\..\server_binary_formatter.pas"/> <Filename Value="..\..\server_binary_formatter.pas"/>
@ -122,9 +120,9 @@
<Unit12> <Unit12>
<Filename Value="..\..\base_service_intf.pas"/> <Filename Value="..\..\base_service_intf.pas"/>
<UnitName Value="base_service_intf"/> <UnitName Value="base_service_intf"/>
<CursorPos X="13" Y="1199"/> <CursorPos X="1" Y="2470"/>
<TopLine Value="1"/> <TopLine Value="2456"/>
<EditorIndex Value="8"/> <EditorIndex Value="11"/>
<UsageCount Value="33"/> <UsageCount Value="33"/>
<Bookmarks Count="1"> <Bookmarks Count="1">
<Item0 X="19" Y="545" ID="0"/> <Item0 X="19" Y="545" ID="0"/>
@ -148,9 +146,11 @@
<Unit15> <Unit15>
<Filename Value="..\user_service_intf_binder.pas"/> <Filename Value="..\user_service_intf_binder.pas"/>
<UnitName Value="user_service_intf_binder"/> <UnitName Value="user_service_intf_binder"/>
<CursorPos X="48" Y="34"/> <CursorPos X="1" Y="82"/>
<TopLine Value="11"/> <TopLine Value="68"/>
<EditorIndex Value="8"/>
<UsageCount Value="39"/> <UsageCount Value="39"/>
<Loaded Value="True"/>
</Unit15> </Unit15>
<Unit16> <Unit16>
<Filename Value="..\user_service_intf.wst"/> <Filename Value="..\user_service_intf.wst"/>
@ -212,9 +212,9 @@
<Unit25> <Unit25>
<Filename Value="..\..\server_service_intf.pas"/> <Filename Value="..\..\server_service_intf.pas"/>
<UnitName Value="server_service_intf"/> <UnitName Value="server_service_intf"/>
<CursorPos X="5" Y="18"/> <CursorPos X="1" Y="500"/>
<TopLine Value="72"/> <TopLine Value="486"/>
<EditorIndex Value="5"/> <EditorIndex Value="6"/>
<UsageCount Value="17"/> <UsageCount Value="17"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit25> </Unit25>
@ -227,9 +227,9 @@
<Unit27> <Unit27>
<Filename Value="..\user_service_intf_imp.pas"/> <Filename Value="..\user_service_intf_imp.pas"/>
<UnitName Value="user_service_intf_imp"/> <UnitName Value="user_service_intf_imp"/>
<CursorPos X="60" Y="51"/> <CursorPos X="1" Y="212"/>
<TopLine Value="28"/> <TopLine Value="198"/>
<EditorIndex Value="1"/> <EditorIndex Value="5"/>
<UsageCount Value="41"/> <UsageCount Value="41"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit27> </Unit27>
@ -245,7 +245,7 @@
<UnitName Value="base_soap_formatter"/> <UnitName Value="base_soap_formatter"/>
<CursorPos X="24" Y="967"/> <CursorPos X="24" Y="967"/>
<TopLine Value="325"/> <TopLine Value="325"/>
<EditorIndex Value="6"/> <EditorIndex Value="9"/>
<UsageCount Value="12"/> <UsageCount Value="12"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit29> </Unit29>
@ -293,18 +293,20 @@
<Unit36> <Unit36>
<Filename Value="..\..\synapse_tcp_server.pas"/> <Filename Value="..\..\synapse_tcp_server.pas"/>
<UnitName Value="synapse_tcp_server"/> <UnitName Value="synapse_tcp_server"/>
<CursorPos X="35" Y="92"/> <CursorPos X="1" Y="1"/>
<TopLine Value="74"/> <TopLine Value="50"/>
<EditorIndex Value="3"/> <EditorIndex Value="1"/>
<UsageCount Value="21"/> <UsageCount Value="21"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit36> </Unit36>
<Unit37> <Unit37>
<Filename Value="..\..\semaphore.pas"/> <Filename Value="..\..\semaphore.pas"/>
<UnitName Value="semaphore"/> <UnitName Value="semaphore"/>
<CursorPos X="1" Y="140"/> <CursorPos X="5" Y="119"/>
<TopLine Value="30"/> <TopLine Value="113"/>
<EditorIndex Value="14"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit37> </Unit37>
<Unit38> <Unit38>
<Filename Value="..\..\wst.inc"/> <Filename Value="..\..\wst.inc"/>
@ -337,7 +339,7 @@
<UnitName Value="server_service_xmlrpc"/> <UnitName Value="server_service_xmlrpc"/>
<CursorPos X="26" Y="57"/> <CursorPos X="26" Y="57"/>
<TopLine Value="21"/> <TopLine Value="21"/>
<EditorIndex Value="7"/> <EditorIndex Value="10"/>
<UsageCount Value="40"/> <UsageCount Value="40"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit42> </Unit42>
@ -372,7 +374,7 @@
<UnitName Value="server_listener"/> <UnitName Value="server_listener"/>
<CursorPos X="21" Y="15"/> <CursorPos X="21" Y="15"/>
<TopLine Value="6"/> <TopLine Value="6"/>
<EditorIndex Value="10"/> <EditorIndex Value="13"/>
<UsageCount Value="13"/> <UsageCount Value="13"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit47> </Unit47>
@ -443,7 +445,7 @@
<UnitName Value="imp_utils"/> <UnitName Value="imp_utils"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="10"/> <TopLine Value="10"/>
<EditorIndex Value="9"/> <EditorIndex Value="12"/>
<UsageCount Value="12"/> <UsageCount Value="12"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit57> </Unit57>
@ -458,12 +460,174 @@
<UnitName Value="config_objects"/> <UnitName Value="config_objects"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="10"/>
</Unit59>
<Unit60>
<Filename Value="..\..\server_service_json.pas"/>
<UnitName Value="server_service_json"/>
<CursorPos X="1" Y="120"/>
<TopLine Value="2"/>
<EditorIndex Value="2"/> <EditorIndex Value="2"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit59> </Unit60>
<Unit61>
<Filename Value="..\..\..\..\..\..\..\lazarus\others_package\synapse\blcksock.pas"/>
<UnitName Value="blcksock"/>
<CursorPos X="1" Y="2407"/>
<TopLine Value="2393"/>
<UsageCount Value="10"/>
</Unit61>
<Unit62>
<Filename Value="..\..\..\..\..\..\..\lazarus\fpc\2.2.1\source\packages\fcl-json\src\fpjson.pp"/>
<UnitName Value="fpjson"/>
<CursorPos X="30" Y="1324"/>
<TopLine Value="1323"/>
<EditorIndex Value="4"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit62>
<Unit63>
<Filename Value="..\..\base_json_formatter.pas"/>
<UnitName Value="base_json_formatter"/>
<CursorPos X="1" Y="1073"/>
<TopLine Value="1059"/>
<EditorIndex Value="3"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit63>
<Unit64>
<Filename Value="..\..\server_service_imputils.pas"/>
<UnitName Value="server_service_imputils"/>
<CursorPos X="1" Y="88"/>
<TopLine Value="74"/>
<EditorIndex Value="7"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit64>
</Units> </Units>
<JumpHistory Count="0" HistoryIndex="-1"/> <JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="..\user_service_intf_imp.pas"/>
<Caret Line="211" Column="1" TopLine="197"/>
</Position1>
<Position2>
<Filename Value="..\user_service_intf_imp.pas"/>
<Caret Line="212" Column="1" TopLine="198"/>
</Position2>
<Position3>
<Filename Value="..\user_service_intf_binder.pas"/>
<Caret Line="80" Column="1" TopLine="66"/>
</Position3>
<Position4>
<Filename Value="..\..\server_service_intf.pas"/>
<Caret Line="792" Column="1" TopLine="765"/>
</Position4>
<Position5>
<Filename Value="..\..\server_service_intf.pas"/>
<Caret Line="686" Column="1" TopLine="672"/>
</Position5>
<Position6>
<Filename Value="..\..\server_service_intf.pas"/>
<Caret Line="687" Column="1" TopLine="673"/>
</Position6>
<Position7>
<Filename Value="..\..\server_service_intf.pas"/>
<Caret Line="693" Column="1" TopLine="679"/>
</Position7>
<Position8>
<Filename Value="..\..\server_service_intf.pas"/>
<Caret Line="695" Column="1" TopLine="681"/>
</Position8>
<Position9>
<Filename Value="..\user_service_intf_binder.pas"/>
<Caret Line="82" Column="1" TopLine="68"/>
</Position9>
<Position10>
<Filename Value="..\..\server_service_intf.pas"/>
<Caret Line="479" Column="1" TopLine="465"/>
</Position10>
<Position11>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="5386" Column="1" TopLine="5359"/>
</Position11>
<Position12>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="2460" Column="1" TopLine="2446"/>
</Position12>
<Position13>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="2461" Column="1" TopLine="2447"/>
</Position13>
<Position14>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="2462" Column="1" TopLine="2448"/>
</Position14>
<Position15>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="2463" Column="1" TopLine="2449"/>
</Position15>
<Position16>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="2470" Column="1" TopLine="2456"/>
</Position16>
<Position17>
<Filename Value="..\..\server_service_intf.pas"/>
<Caret Line="498" Column="1" TopLine="484"/>
</Position17>
<Position18>
<Filename Value="..\..\server_service_imputils.pas"/>
<Caret Line="108" Column="1" TopLine="86"/>
</Position18>
<Position19>
<Filename Value="..\..\server_service_imputils.pas"/>
<Caret Line="86" Column="1" TopLine="72"/>
</Position19>
<Position20>
<Filename Value="..\..\server_service_imputils.pas"/>
<Caret Line="87" Column="1" TopLine="73"/>
</Position20>
<Position21>
<Filename Value="..\..\server_service_imputils.pas"/>
<Caret Line="88" Column="1" TopLine="74"/>
</Position21>
<Position22>
<Filename Value="..\..\server_service_intf.pas"/>
<Caret Line="499" Column="1" TopLine="485"/>
</Position22>
<Position23>
<Filename Value="..\..\server_service_intf.pas"/>
<Caret Line="500" Column="1" TopLine="486"/>
</Position23>
<Position24>
<Filename Value="..\..\server_service_json.pas"/>
<Caret Line="173" Column="1" TopLine="149"/>
</Position24>
<Position25>
<Filename Value="..\..\base_json_formatter.pas"/>
<Caret Line="1071" Column="1" TopLine="1057"/>
</Position25>
<Position26>
<Filename Value="..\..\base_json_formatter.pas"/>
<Caret Line="1072" Column="1" TopLine="1058"/>
</Position26>
<Position27>
<Filename Value="..\..\base_json_formatter.pas"/>
<Caret Line="1073" Column="1" TopLine="1059"/>
</Position27>
<Position28>
<Filename Value="..\..\server_service_json.pas"/>
<Caret Line="109" Column="57" TopLine="89"/>
</Position28>
<Position29>
<Filename Value="..\..\server_service_json.pas"/>
<Caret Line="120" Column="1" TopLine="106"/>
</Position29>
<Position30>
<Filename Value="tcp_server.pas"/>
<Caret Line="30" Column="25" TopLine="18"/>
</Position30>
</JumpHistory>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
<Version Value="5"/> <Version Value="5"/>

View File

@ -24,7 +24,7 @@ uses
{$ENDIF}{$ENDIF} {$ENDIF}{$ENDIF}
{$ENDIF} {$ENDIF}
Classes, SysUtils, Classes, SysUtils,
base_service_intf, server_service_soap, base_service_intf, server_service_soap, server_service_json,
base_binary_formatter, server_binary_formatter, base_binary_formatter, server_binary_formatter,
metadata_service, metadata_service_imp, metadata_service_binder, metadata_service, metadata_service_imp, metadata_service_binder,
server_listener , synapse_tcp_server, server_listener , synapse_tcp_server,
@ -39,6 +39,7 @@ begin
Server_service_RegisterBinaryFormat(); Server_service_RegisterBinaryFormat();
Server_service_RegisterSoapFormat(); Server_service_RegisterSoapFormat();
Server_service_RegisterXmlRpcFormat(); Server_service_RegisterXmlRpcFormat();
Server_service_RegisterJsonFormat();
RegisterWSTMetadataServiceImplementationFactory(); RegisterWSTMetadataServiceImplementationFactory();
//Server_service_RegisterWSTMetadataServiceService(); //Server_service_RegisterWSTMetadataServiceService();

View File

@ -2,7 +2,7 @@
<CONFIG> <CONFIG>
<ProjectOptions> <ProjectOptions>
<PathDelim Value="\"/> <PathDelim Value="\"/>
<Version Value="5"/> <Version Value="6"/>
<General> <General>
<Flags> <Flags>
<MainUnitHasUsesSectionForAllUnits Value="False"/> <MainUnitHasUsesSectionForAllUnits Value="False"/>
@ -12,7 +12,7 @@
<MainUnit Value="0"/> <MainUnit Value="0"/>
<IconPath Value=".\"/> <IconPath Value=".\"/>
<TargetFileExt Value=".exe"/> <TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="0"/> <ActiveEditorIndexAtStart Value="3"/>
</General> </General>
<VersionInfo> <VersionInfo>
<ProjectVersion Value=""/> <ProjectVersion Value=""/>
@ -30,13 +30,13 @@
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
</local> </local>
</RunParams> </RunParams>
<Units Count="45"> <Units Count="48">
<Unit0> <Unit0>
<Filename Value="user_client_console.pas"/> <Filename Value="user_client_console.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="user_client_console"/> <UnitName Value="user_client_console"/>
<CursorPos X="44" Y="147"/> <CursorPos X="73" Y="8"/>
<TopLine Value="136"/> <TopLine Value="1"/>
<EditorIndex Value="0"/> <EditorIndex Value="0"/>
<UsageCount Value="82"/> <UsageCount Value="82"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@ -44,27 +44,27 @@
<Unit1> <Unit1>
<Filename Value="..\user_service_intf_proxy.pas"/> <Filename Value="..\user_service_intf_proxy.pas"/>
<UnitName Value="user_service_intf_proxy"/> <UnitName Value="user_service_intf_proxy"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="65"/>
<TopLine Value="1"/> <TopLine Value="51"/>
<EditorIndex Value="7"/> <EditorIndex Value="9"/>
<UsageCount Value="33"/> <UsageCount Value="33"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit1> </Unit1>
<Unit2> <Unit2>
<Filename Value="..\..\synapse_tcp_protocol.pas"/> <Filename Value="..\..\synapse_tcp_protocol.pas"/>
<UnitName Value="synapse_tcp_protocol"/> <UnitName Value="synapse_tcp_protocol"/>
<CursorPos X="1" Y="23"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="15"/> <EditorIndex Value="17"/>
<UsageCount Value="40"/> <UsageCount Value="40"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit2> </Unit2>
<Unit3> <Unit3>
<Filename Value="..\..\service_intf.pas"/> <Filename Value="..\..\service_intf.pas"/>
<UnitName Value="service_intf"/> <UnitName Value="service_intf"/>
<CursorPos X="51" Y="34"/> <CursorPos X="1" Y="251"/>
<TopLine Value="21"/> <TopLine Value="237"/>
<EditorIndex Value="13"/> <EditorIndex Value="15"/>
<UsageCount Value="36"/> <UsageCount Value="36"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit3> </Unit3>
@ -73,7 +73,7 @@
<UnitName Value="user_service_intf"/> <UnitName Value="user_service_intf"/>
<CursorPos X="53" Y="11"/> <CursorPos X="53" Y="11"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="8"/> <EditorIndex Value="10"/>
<UsageCount Value="32"/> <UsageCount Value="32"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit4> </Unit4>
@ -94,9 +94,9 @@
<Unit7> <Unit7>
<Filename Value="..\..\library_protocol.pas"/> <Filename Value="..\..\library_protocol.pas"/>
<UnitName Value="library_protocol"/> <UnitName Value="library_protocol"/>
<CursorPos X="1" Y="137"/> <CursorPos X="5" Y="165"/>
<TopLine Value="19"/> <TopLine Value="138"/>
<EditorIndex Value="2"/> <EditorIndex Value="3"/>
<UsageCount Value="28"/> <UsageCount Value="28"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit7> </Unit7>
@ -142,7 +142,7 @@
<UnitName Value="synapse_http_protocol"/> <UnitName Value="synapse_http_protocol"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="13"/> <TopLine Value="13"/>
<EditorIndex Value="12"/> <EditorIndex Value="14"/>
<UsageCount Value="22"/> <UsageCount Value="22"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit14> </Unit14>
@ -162,9 +162,9 @@
<Unit17> <Unit17>
<Filename Value="..\..\library_imp_utils.pas"/> <Filename Value="..\..\library_imp_utils.pas"/>
<UnitName Value="library_imp_utils"/> <UnitName Value="library_imp_utils"/>
<CursorPos X="1" Y="187"/> <CursorPos X="1" Y="1"/>
<TopLine Value="170"/> <TopLine Value="89"/>
<EditorIndex Value="3"/> <EditorIndex Value="5"/>
<UsageCount Value="13"/> <UsageCount Value="13"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit17> </Unit17>
@ -177,9 +177,9 @@
<Unit19> <Unit19>
<Filename Value="..\..\semaphore.pas"/> <Filename Value="..\..\semaphore.pas"/>
<UnitName Value="semaphore"/> <UnitName Value="semaphore"/>
<CursorPos X="1" Y="140"/> <CursorPos X="1" Y="137"/>
<TopLine Value="110"/> <TopLine Value="113"/>
<EditorIndex Value="6"/> <EditorIndex Value="8"/>
<UsageCount Value="13"/> <UsageCount Value="13"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit19> </Unit19>
@ -203,7 +203,7 @@
<UnitName Value="binary_formatter"/> <UnitName Value="binary_formatter"/>
<CursorPos X="20" Y="21"/> <CursorPos X="20" Y="21"/>
<TopLine Value="12"/> <TopLine Value="12"/>
<EditorIndex Value="14"/> <EditorIndex Value="16"/>
<UsageCount Value="33"/> <UsageCount Value="33"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit22> </Unit22>
@ -308,7 +308,7 @@
<UnitName Value="indy_http_protocol"/> <UnitName Value="indy_http_protocol"/>
<CursorPos X="1" Y="16"/> <CursorPos X="1" Y="16"/>
<TopLine Value="109"/> <TopLine Value="109"/>
<EditorIndex Value="11"/> <EditorIndex Value="13"/>
<UsageCount Value="18"/> <UsageCount Value="18"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit37> </Unit37>
@ -322,18 +322,16 @@
<Unit39> <Unit39>
<Filename Value="..\..\ics_tcp_protocol.pas"/> <Filename Value="..\..\ics_tcp_protocol.pas"/>
<UnitName Value="ics_tcp_protocol"/> <UnitName Value="ics_tcp_protocol"/>
<CursorPos X="5" Y="41"/> <CursorPos X="1" Y="1"/>
<TopLine Value="26"/> <TopLine Value="1"/>
<EditorIndex Value="1"/>
<UsageCount Value="17"/> <UsageCount Value="17"/>
<Loaded Value="True"/>
</Unit39> </Unit39>
<Unit40> <Unit40>
<Filename Value="..\..\ics_http_protocol.pas"/> <Filename Value="..\..\ics_http_protocol.pas"/>
<UnitName Value="ics_http_protocol"/> <UnitName Value="ics_http_protocol"/>
<CursorPos X="1" Y="25"/> <CursorPos X="1" Y="25"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="10"/> <EditorIndex Value="12"/>
<UsageCount Value="17"/> <UsageCount Value="17"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit40> </Unit40>
@ -342,7 +340,7 @@
<UnitName Value="same_process_protocol"/> <UnitName Value="same_process_protocol"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="13"/> <TopLine Value="13"/>
<EditorIndex Value="9"/> <EditorIndex Value="11"/>
<UsageCount Value="17"/> <UsageCount Value="17"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit41> </Unit41>
@ -359,9 +357,9 @@
<Unit43> <Unit43>
<Filename Value="..\..\binary_streamer.pas"/> <Filename Value="..\..\binary_streamer.pas"/>
<UnitName Value="binary_streamer"/> <UnitName Value="binary_streamer"/>
<CursorPos X="21" Y="15"/> <CursorPos X="1" Y="270"/>
<TopLine Value="1"/> <TopLine Value="256"/>
<EditorIndex Value="5"/> <EditorIndex Value="7"/>
<UsageCount Value="13"/> <UsageCount Value="13"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit43> </Unit43>
@ -370,12 +368,51 @@
<UnitName Value="library_base_intf"/> <UnitName Value="library_base_intf"/>
<CursorPos X="25" Y="17"/> <CursorPos X="25" Y="17"/>
<TopLine Value="5"/> <TopLine Value="5"/>
<EditorIndex Value="4"/> <EditorIndex Value="6"/>
<UsageCount Value="13"/> <UsageCount Value="13"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit44> </Unit44>
<Unit45>
<Filename Value="..\..\json_formatter.pas"/>
<UnitName Value="json_formatter"/>
<CursorPos X="1" Y="123"/>
<TopLine Value="109"/>
<EditorIndex Value="1"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit45>
<Unit46>
<Filename Value="..\..\base_json_formatter.pas"/>
<UnitName Value="base_json_formatter"/>
<CursorPos X="69" Y="1105"/>
<TopLine Value="1088"/>
<EditorIndex Value="2"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit46>
<Unit47>
<Filename Value="..\..\wst_global.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="4"/>
<EditorIndex Value="4"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit47>
</Units> </Units>
<JumpHistory Count="0" HistoryIndex="-1"/> <JumpHistory Count="3" HistoryIndex="2">
<Position1>
<Filename Value="..\..\library_protocol.pas"/>
<Caret Line="120" Column="8" TopLine="117"/>
</Position1>
<Position2>
<Filename Value="..\..\library_protocol.pas"/>
<Caret Line="16" Column="3" TopLine="1"/>
</Position2>
<Position3>
<Filename Value="..\..\library_protocol.pas"/>
<Caret Line="1" Column="2" TopLine="1"/>
</Position3>
</JumpHistory>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
<Version Value="5"/> <Version Value="5"/>
@ -392,7 +429,7 @@
</CodeGeneration> </CodeGeneration>
<Linking> <Linking>
<Debugging> <Debugging>
<UseLineInfoUnit Value="False"/> <GenerateDebugInfo Value="True"/>
</Debugging> </Debugging>
<LinkSmart Value="True"/> <LinkSmart Value="True"/>
</Linking> </Linking>
@ -401,7 +438,7 @@
</Other> </Other>
</CompilerOptions> </CompilerOptions>
<Debugging> <Debugging>
<BreakPoints Count="4"> <BreakPoints Count="6">
<Item1> <Item1>
<Source Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/> <Source Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
<Line Value="230"/> <Line Value="230"/>
@ -418,6 +455,14 @@
<Source Value="..\..\ws_helper\wsdl2pas_imp.pas"/> <Source Value="..\..\ws_helper\wsdl2pas_imp.pas"/>
<Line Value="606"/> <Line Value="606"/>
</Item4> </Item4>
<Item5>
<Source Value="..\..\json_formatter.pas"/>
<Line Value="184"/>
</Item5>
<Item6>
<Source Value="..\user_service_intf_proxy.pas"/>
<Line Value="65"/>
</Item6>
</BreakPoints> </BreakPoints>
<Watches Count="2"> <Watches Count="2">
<Item1> <Item1>

View File

@ -5,8 +5,8 @@ program user_client_console;
uses uses
Classes, SysUtils, TypInfo, {$IFDEF WINDOWS}ActiveX,{$ENDIF} Classes, SysUtils, TypInfo, {$IFDEF WINDOWS}ActiveX,{$ENDIF}
user_service_intf_proxy, user_service_intf_proxy,
same_process_protocol, synapse_tcp_protocol, synapse_http_protocol, library_protocol, ics_tcp_protocol, ics_http_protocol, same_process_protocol, synapse_tcp_protocol, synapse_http_protocol, library_protocol,
soap_formatter, binary_formatter, soap_formatter, binary_formatter, json_formatter,
user_service_intf, xmlrpc_formatter; user_service_intf, xmlrpc_formatter;
var var
@ -135,19 +135,20 @@ end;
type type
TTransportType = ( ttLibrary, ttTCP, ttHTTP ); TTransportType = ( ttLibrary, ttTCP, ttHTTP );
TFormatType = ( ftBinary, ftSoap, ftXmlRPC ); TFormatType = ( ftBinary, ftSoap, ftXmlRPC, ftJSON );
var var
TransportType : TTransportType; TransportType : TTransportType;
FormatValue : TFormatType; FormatValue : TFormatType;
procedure CreateProxy(); procedure CreateProxy();
const ADDRESS_MAP : array[TTransportType] of string = ( const ADDRESS_MAP : array[TTransportType] of string = (
'LIB:FileName=..\library_server\lib_server.dll;target=UserService', 'LIB:FileName=..\library_server\lib_server.dll;target=UserService',
//'LIB:FileName=C:\Programmes\D7\etatcivil\partages\wst\samples\library_server\lib_server.dll;target=UserService',
//'TCP:Address=172.16.82.31;Port=1234;target=UserService', //'TCP:Address=172.16.82.31;Port=1234;target=UserService',
'TCP:Address=127.0.0.1;Port=1234;target=UserService', 'TCP:Address=127.0.0.1;Port=1234;target=UserService',
'http:Address=http://127.0.0.1:8888/wst/services/lib_server/UserService' 'http:Address=http://127.0.0.1:8888/wst/services/lib_server/UserService'
//'http:Address=http://127.0.0.1:8000/services/UserService' //'http:Address=http://127.0.0.1:8000/services/UserService'
); );
FORMAT_MAP : array[TFormatType] of string =( 'binary', 'soap', 'xmlrpc' ); FORMAT_MAP : array[TFormatType] of string =( 'binary', 'soap', 'xmlrpc', 'json' );
var var
buff : string; buff : string;
begin begin
@ -196,6 +197,7 @@ begin
WriteLn(); WriteLn();
WriteLn('Select a messaging format : '); WriteLn('Select a messaging format : ');
WriteLn(' B : binary ( binary_formatter.pas )'); WriteLn(' B : binary ( binary_formatter.pas )');
WriteLn(' J : JSON ( json_formatter.pas )');
WriteLn(' S : soap ( soap_formatter.pas )'); WriteLn(' S : soap ( soap_formatter.pas )');
WriteLn(' X : XmlRpc ( xmlrpc_formatter.pas )'); WriteLn(' X : XmlRpc ( xmlrpc_formatter.pas )');
WriteLn(); WriteLn();
@ -203,9 +205,10 @@ begin
while True do begin while True do begin
ReadLn(buff); ReadLn(buff);
buff := UpperCase(Trim(buff)); buff := UpperCase(Trim(buff));
if ( Length(buff) > 0 ) and ( buff[1] in ['B','S', 'X'] ) then begin if ( Length(buff) > 0 ) and ( buff[1] in ['B', 'J', 'S', 'X'] ) then begin
case buff[1] of case buff[1] of
'B' : FormatValue := ftBinary; 'B' : FormatValue := ftBinary;
'J' : FormatValue := ftJSON;
'S' : FormatValue := ftSoap; 'S' : FormatValue := ftSoap;
'X' : FormatValue := ftXmlRPC; 'X' : FormatValue := ftXmlRPC;
end; end;

View File

@ -2,7 +2,7 @@
This unit has been produced by ws_helper. This unit has been produced by ws_helper.
Input unit name : "user_service_intf". Input unit name : "user_service_intf".
This unit name : "user_service_intf". This unit name : "user_service_intf".
Date : "26/08/2007 01:03:09". Date : "29/12/2007 00:43:35".
} }
unit user_service_intf; unit user_service_intf;
{$IFDEF FPC} {$IFDEF FPC}

View File

@ -2,7 +2,7 @@
This unit has been produced by ws_helper. This unit has been produced by ws_helper.
Input unit name : "user_service_intf". Input unit name : "user_service_intf".
This unit name : "user_service_intf_binder". This unit name : "user_service_intf_binder".
Date : "26/08/2007 01:03:09". Date : "29/12/2007 00:43:35".
} }
unit user_service_intf_binder; unit user_service_intf_binder;
{$IFDEF FPC} {$mode objfpc}{$H+} {$ENDIF} {$IFDEF FPC} {$mode objfpc}{$H+} {$ENDIF}

View File

@ -2,7 +2,7 @@
This unit has been produced by ws_helper. This unit has been produced by ws_helper.
Input unit name : "user_service_intf". Input unit name : "user_service_intf".
This unit name : "user_service_intf_proxy". This unit name : "user_service_intf_proxy".
Date : "26/08/2007 01:03:09". Date : "29/12/2007 00:43:35".
} }
Unit user_service_intf_proxy; Unit user_service_intf_proxy;

View File

@ -0,0 +1,180 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
{$INCLUDE wst_global.inc}
unit server_service_json;
interface
uses
Classes, SysUtils, TypInfo,
base_service_intf, server_service_intf,
fpjson, base_json_formatter;
type
{ TJsonRpcFormatter }
TJsonRpcFormatter = class(TJsonRpcBaseFormatter,IFormatterBase,IFormatterResponse)
Private
FCallProcedureName : string;
FCallTarget : string;
FIDObject : TJSONData;
Protected
procedure BeginCallResponse(Const AProcName,ATarget:string);
procedure EndCallResponse();
procedure BeginCallRead(ACallContext : ICallContext);
function GetCallProcedureName():String;
function GetCallTarget():String;
procedure BeginExceptionList(
const AErrorCode : string;
const AErrorMsg : string
);
procedure EndExceptionList();
public
destructor Destroy();override;
end;
procedure Server_service_RegisterJsonFormat();
implementation
uses jsonparser;
procedure Server_service_RegisterJsonFormat();
begin
GetFormatterRegistry().Register(s_json,s_json_ContentType,TSimpleItemFactory.Create(TJsonRpcFormatter) as IItemFactory);
end;
function Clone(const AValue : TJSONData) : TJSONData;
var
locParser : TJSONParser;
begin
if Assigned(AValue) then begin
case AValue.JSONType() of
jtNumber :
begin
if ( TJSONNumber(AValue).NumberType() = ntInteger ) then
Result := TJSONIntegerNumber.Create(AValue.AsInteger)
else
Result := TJSONFloatNumber.Create(AValue.AsFloat);
end;
jtString : Result := TJSONString.Create(AValue.AsString);
jtBoolean : Result := TJSONBoolean.Create(AValue.AsBoolean);
jtNull : Result := TJSONNull.Create();
jtArray,
jtObject :
begin
locParser := TJSONParser.Create(AValue.AsJSON);
try
Result := locParser.Parse();
finally
locParser.Free();
end;
end;
else
raise Exception.Create('Invalid JSON object type.');
end;
end else begin
Result := nil;
end;
end;
{ TJsonRpcFormatter }
procedure TJsonRpcFormatter.BeginCallResponse(const AProcName, ATarget : string);
begin
Clear();
BeginObject('',nil);
end;
procedure TJsonRpcFormatter.EndCallResponse();
var
locRoot : TJSONObject;
begin
locRoot := GetRootData();
locRoot.Elements[s_json_error] := TJSONNull.Create();
if Assigned(FIDObject) then begin
locRoot.Elements[s_json_id] := FIDObject;
FIDObject := nil;
end else begin
locRoot.Elements[s_json_id] := TJSONNull.Create();
end;
EndScope();
end;
procedure TJsonRpcFormatter.BeginCallRead(ACallContext : ICallContext);
var
nameBuffer, strBuffer : string;
rootObj : TJSONObject;
i : PtrInt;
begin
ClearStack();
FreeAndNil(FIDObject);
rootObj := GetRootData();
PushStack(rootObj,stObject);
nameBuffer := s_json_method;
Get(TypeInfo(string),nameBuffer,FCallProcedureName);
i := rootObj.IndexOfName(s_json_id);
if ( i > -1 ) then
FIDObject := Clone(rootObj);
nameBuffer := s_json_params;
BeginArrayRead(nameBuffer,nil,asScoped,'');
end;
function TJsonRpcFormatter.GetCallProcedureName() : String;
begin
Result := FCallProcedureName;
end;
function TJsonRpcFormatter.GetCallTarget() : String;
begin
Result := FCallTarget;
end;
procedure TJsonRpcFormatter.BeginExceptionList(
const AErrorCode : string;
const AErrorMsg : string
);
var
locRoot, locError : TJSONObject;
begin
Clear();
BeginObject('',nil);
locRoot := GetRootData();
locRoot.Elements[s_json_result] := TJSONNull.Create();
locError := TJSONObject.Create();
locRoot.Elements[s_json_error] := locError;
locError.Add(s_json_name,'');
locError.Add(s_json_code,StrToIntDef(AErrorCode,0));
locError.Add(s_json_message,AErrorMsg);
if Assigned(FIDObject) then begin
locRoot.Elements[s_json_id] := FIDObject;
FIDObject := nil;
end else begin
locRoot.Elements[s_json_id] := TJSONNull.Create();
end;
end;
procedure TJsonRpcFormatter.EndExceptionList();
begin
EndScope();
end;
destructor TJsonRpcFormatter.Destroy();
begin
FreeAndNil(FIDObject);
inherited Destroy();
end;
end.

View File

@ -11,7 +11,9 @@ uses
test_support in '..\test_support.pas', test_support in '..\test_support.pas',
test_utilities in '..\test_utilities.pas', test_utilities in '..\test_utilities.pas',
testformatter_unit in '..\testformatter_unit.pas', testformatter_unit in '..\testformatter_unit.pas',
base_service_intf in '..\..\..\base_service_intf.pas'; base_service_intf in '..\..\..\base_service_intf.pas',
basex_encode in '..\..\..\basex_encode.pas',
test_basex_encode in '..\test_basex_encode.pas';
{$R *.res} {$R *.res}

View File

@ -0,0 +1,38 @@
<?xml version="1.0"?>
<definitions name="wst_test"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="library1"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="urn:wst-test">
<types>
<xsd:schema xmlns:n="urn:wst-test"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:wst-test">
<xsd:complexType name="TClassSampleType">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="intField" type="xsd:int">
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name="TClassSampleTypeA">
<xsd:simpleContent>
<xsd:extension base="xsd:base64Binary">
<xsd:attribute name="floatField" type="xsd:float">
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:schema>
</types>
</definitions>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:n="urn:wst-test"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:wst-test">
<xsd:complexType name="TClassSampleType">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="intField" type="xsd:int">
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name="TClassSampleTypeA">
<xsd:simpleContent>
<xsd:extension base="xsd:base64Binary">
<xsd:attribute name="floatField" type="xsd:float">
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:schema>

View File

@ -0,0 +1,159 @@
{ This file is part of the Web Service Toolkit
Copyright (c) 2006, 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
{$INCLUDE wst_global.inc}
unit test_basex_encode;
interface
uses
Classes, SysUtils,
{$IFDEF FPC}
fpcunit, testregistry,
{$ELSE}
TestFrameWork,
{$ENDIF}
TypInfo,
wst_types, basex_encode;
type
TTest_Base64 = class(TTestCase)
protected
procedure Check_Encode(const AIn, AExpect : string);
procedure Check_Decode(const AIn, AExpect : string; const AOptions : TBaseXOptions = [xoDecodeIgnoreIllegalChar]);
published
procedure Encode_empty();
procedure Encode_f();
procedure Encode_fo();
procedure Encode_foo();
procedure Encode_foob();
procedure Encode_fooba();
procedure Encode_foobar();
procedure Decode_f();
procedure Decode_fo();
procedure Decode_foo();
procedure Decode_foob();
procedure Decode_fooba();
procedure Decode_foobar();
procedure Decode_illegal_char();
end;
implementation
{ TTest_Base64 }
procedure TTest_Base64.Check_Decode(const AIn, AExpect: string; const AOptions : TBaseXOptions);
var
locRes : string;
begin
locRes := Base64Decode(AIn,AOptions);
CheckEquals(AExpect,locRes);
end;
procedure TTest_Base64.Check_Encode(const AIn, AExpect: string);
var
locRes : string;
begin
locRes := Base64Encode(AIn);
CheckEquals(AExpect,locRes);
end;
procedure TTest_Base64.Decode_f();
begin
Check_Decode('Zg==','f');
end;
procedure TTest_Base64.Decode_fo();
begin
Check_Decode('Zm8=','fo');
end;
procedure TTest_Base64.Decode_foo();
begin
Check_Decode('Zm9v','foo');
end;
procedure TTest_Base64.Decode_foob();
begin
Check_Decode('Zm9vYg==','foob');
end;
procedure TTest_Base64.Decode_fooba();
begin
Check_Decode('Zm9vYmE=','fooba');
end;
procedure TTest_Base64.Decode_foobar();
begin
Check_Decode('Zm9vYmFy','foobar');
end;
procedure TTest_Base64.Decode_illegal_char();
var
ok : Boolean;
begin
ok := False;
try
Check_Decode('Zm9'#200'vY' + sLineBreak + 'm'#0'Fy','foobar',[]);
except
on e : EBase64Exception do
ok := True;
end;
CheckEquals(True,ok);
Check_Decode('Zm9'#200'vY' + sLineBreak + 'm'#0'Fy','foobar',[xoDecodeIgnoreIllegalChar]);
end;
procedure TTest_Base64.Encode_empty();
begin
Check_Encode('','');
end;
procedure TTest_Base64.Encode_f();
begin
Check_Encode('f','Zg==');
end;
procedure TTest_Base64.Encode_fo();
begin
Check_Encode('fo','Zm8=');
end;
procedure TTest_Base64.Encode_foo();
begin
Check_Encode('foo','Zm9v');
end;
procedure TTest_Base64.Encode_foob();
begin
Check_Encode('foob','Zm9vYg==');
end;
procedure TTest_Base64.Encode_fooba();
begin
Check_Encode('fooba','Zm9vYmE=');
end;
procedure TTest_Base64.Encode_foobar();
var
a, b : string;
begin
a := 'foobar';
b := 'Zm9vYmFy';
Check_Encode(a,b);
//Check_Encode('foobar','Zm9vYmFy');
end;
initialization
RegisterTest('Encoding',TTest_Base64.Suite);
end.

View File

@ -36,6 +36,7 @@ type
function LoadComplexType_Class_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_Class_Schema() : TwstPasTreeContainer;virtual;abstract;
function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract;
function LoadComplexType_Class_Extend_Simple_Schema() : TwstPasTreeContainer;virtual;abstract;
function LoadComplexType_Record_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_Record_Schema() : TwstPasTreeContainer;virtual;abstract;
function LoadComplexType_Record_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_Record_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract;
@ -51,6 +52,7 @@ type
procedure ComplexType_Class(); procedure ComplexType_Class();
procedure ComplexType_Class_Embedded(); procedure ComplexType_Class_Embedded();
procedure ComplexType_Class_Extend_Simple_Schema();
procedure ComplexType_Record(); procedure ComplexType_Record();
procedure ComplexType_Record_Embedded(); procedure ComplexType_Record_Embedded();
@ -73,6 +75,7 @@ type
function LoadComplexType_Class_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Class_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Class_Extend_Simple_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Record_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Record_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Record_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Record_Embedded_Schema() : TwstPasTreeContainer;override;
@ -95,6 +98,7 @@ type
function LoadComplexType_Class_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Class_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Class_Extend_Simple_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Record_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Record_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Record_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Record_Embedded_Schema() : TwstPasTreeContainer;override;
@ -113,6 +117,7 @@ const
x_complexType_SampleArrayItemType = 'TArrayItemType'; x_complexType_SampleArrayItemType = 'TArrayItemType';
x_complexType_SampleDerivedType = 'TClassSampleDerivedType'; x_complexType_SampleDerivedType = 'TClassSampleDerivedType';
x_complexType_SampleClassType = 'TClassSampleType'; x_complexType_SampleClassType = 'TClassSampleType';
x_complexType_SampleClassTypeA = 'TClassSampleTypeA';
x_complexType_SampleClassTypeAll = 'TClassSampleTypeAll'; x_complexType_SampleClassTypeAll = 'TClassSampleTypeAll';
x_complexType_SampleClass = 'TClassSample'; x_complexType_SampleClass = 'TClassSample';
@ -123,6 +128,7 @@ const
x_complexType_array_sequence = 'complex_array_sequence'; x_complexType_array_sequence = 'complex_array_sequence';
x_complexType_array_sequence_embedded = 'complex_array_sequence_embedded'; x_complexType_array_sequence_embedded = 'complex_array_sequence_embedded';
x_complexType_class = 'complex_class'; x_complexType_class = 'complex_class';
x_complexType_extend_simple = 'complex_class_extend_simple';
x_complexType_class_embedded = 'complex_class_embedded'; x_complexType_class_embedded = 'complex_class_embedded';
x_complexType_record = 'complex_record'; x_complexType_record = 'complex_record';
x_complexType_record_embedded = 'complex_record_embedded'; x_complexType_record_embedded = 'complex_record_embedded';
@ -544,6 +550,75 @@ begin
end; end;
end; end;
procedure TTest_CustomXsdParser.ComplexType_Class_Extend_Simple_Schema();
var
tr : TwstPasTreeContainer;
clsType : TPasClassType;
procedure CheckProperty(const AName,ATypeName : string; const AFieldType : TPropertyType);
var
prp : TPasProperty;
begin
prp := FindMember(clsType,AName) as TPasProperty;
CheckNotNull(prp);
CheckEquals(AName,prp.Name);
CheckEquals(AName,tr.GetExternalName(prp));
CheckNotNull(prp.VarType);
CheckEquals(ATypeName,tr.GetExternalName(prp.VarType));
CheckEquals(PropertyType_Att[AFieldType],tr.IsAttributeProperty(prp));
end;
var
mdl : TPasModule;
ls : TList;
elt : TPasElement;
aliasType : TPasAliasType;
i : Integer;
prpLs : TList;
begin
prpLs := TList.Create();
try
tr := LoadComplexType_Class_Extend_Simple_Schema();
mdl := tr.FindModule(x_targetNamespace);
CheckNotNull(mdl);
CheckEquals(x_complexType_extend_simple,mdl.Name);
CheckEquals(x_targetNamespace,tr.GetExternalName(mdl));
ls := mdl.InterfaceSection.Declarations;
CheckEquals(2,ls.Count);
elt := tr.FindElement(x_complexType_SampleClassType);
CheckNotNull(elt,x_complexType_SampleClassType);
CheckEquals(x_complexType_SampleClassType,elt.Name);
CheckEquals(x_complexType_SampleClassType,tr.GetExternalName(elt));
CheckIs(elt,TPasClassType);
clsType := elt as TPasClassType;
prpLs.Clear();
for i := 0 to Pred(clsType.Members.Count) do begin
if TPasElement(clsType.Members[i]).InheritsFrom(TPasProperty) then
prpLs.Add(clsType.Members[i]);
end;
CheckEquals(1,prpLs.Count);
CheckProperty(x_intField,'int',ptAttribute);
elt := tr.FindElement(x_complexType_SampleClassTypeA);
CheckNotNull(elt,x_complexType_SampleClassTypeA);
CheckEquals(x_complexType_SampleClassTypeA,elt.Name);
CheckEquals(x_complexType_SampleClassTypeA,tr.GetExternalName(elt));
CheckIs(elt,TPasClassType);
clsType := elt as TPasClassType;
prpLs.Clear();
for i := 0 to Pred(clsType.Members.Count) do begin
if TPasElement(clsType.Members[i]).InheritsFrom(TPasProperty) then
prpLs.Add(clsType.Members[i]);
end;
CheckEquals(1,prpLs.Count);
CheckProperty(x_floatField,'float',ptAttribute);
finally
FreeAndNil(prpLs);
end;
end;
procedure TTest_CustomXsdParser.ComplexType_Record(); procedure TTest_CustomXsdParser.ComplexType_Record();
var var
tr : TwstPasTreeContainer; tr : TwstPasTreeContainer;
@ -950,6 +1025,11 @@ begin
Result := ParseDoc(x_complexType_class_embedded); Result := ParseDoc(x_complexType_class_embedded);
end; end;
function TTest_XsdParser.LoadComplexType_Class_Extend_Simple_Schema( ) : TwstPasTreeContainer;
begin
Result := ParseDoc(x_complexType_extend_simple);
end;
function TTest_XsdParser.LoadComplexType_Record_Schema(): TwstPasTreeContainer; function TTest_XsdParser.LoadComplexType_Record_Schema(): TwstPasTreeContainer;
begin begin
Result := ParseDoc(x_complexType_record); Result := ParseDoc(x_complexType_record);
@ -1023,6 +1103,11 @@ begin
Result := ParseDoc(x_complexType_class_embedded); Result := ParseDoc(x_complexType_class_embedded);
end; end;
function TTest_WsdlParser.LoadComplexType_Class_Extend_Simple_Schema() : TwstPasTreeContainer;
begin
Result := ParseDoc(x_complexType_extend_simple);
end;
function TTest_WsdlParser.LoadComplexType_Record_Schema(): TwstPasTreeContainer; function TTest_WsdlParser.LoadComplexType_Record_Schema(): TwstPasTreeContainer;
begin begin
Result := ParseDoc(x_complexType_record); Result := ParseDoc(x_complexType_record);

View File

@ -331,8 +331,27 @@ type
procedure Equal(); procedure Equal();
end; end;
{ TTest_TBase64StringRemotable }
TTest_TBase64StringRemotable = class(TTestCase)
published
procedure test_Assign();
procedure Equal();
procedure SetBinaryData();
procedure SetEncodedString();
end;
{ TTest_TBase64StringExtRemotable }
TTest_TBase64StringExtRemotable = class(TTestCase)
published
procedure Equal();
procedure SetBinaryData();
procedure SetEncodedString();
end;
implementation implementation
uses Math; uses Math, basex_encode;
function RandomValue(const AMaxlen: Integer): ansistring; function RandomValue(const AMaxlen: Integer): ansistring;
var var
@ -2291,6 +2310,214 @@ begin
end; end;
end; end;
{ TTest_TBase64StringRemotable }
procedure TTest_TBase64StringRemotable.test_Assign();
const ITER = 100;
var
i : Integer;
a, b : TBase64StringRemotable;
begin
b := nil;
a := TBase64StringRemotable.Create();
try
b := TBase64StringRemotable.Create();
for i := 1 to ITER do begin
a.BinaryData := RandomValue(Random(500));
b.Assign(a);
CheckEquals(a.BinaryData, b.BinaryData);
CheckEquals(a.EncodedString, b.EncodedString);
end;
finally
FreeAndNil(b);
FreeAndNil(a);
end;
end;
procedure TTest_TBase64StringRemotable.Equal();
const ITER = 100;
var
i : Integer;
a, b : TBase64StringRemotable;
c : TClass_A;
begin
c := nil;
b := nil;
a := TBase64StringRemotable.Create();
try
b := TBase64StringRemotable.Create();
CheckEquals(False, a.Equal(nil));
c := TClass_A.Create();
CheckEquals(False, a.Equal(c));
a.BinaryData := 'wst';
b.BinaryData := 'azerty';
CheckEquals(False, a.Equal(b));
CheckEquals(False, b.Equal(a));
for i := 1 to ITER do begin
a.BinaryData := RandomValue(Random(500));
b.BinaryData := a.BinaryData;
CheckEquals(True, a.Equal(b));
CheckEquals(True, b.Equal(a));
end;
finally
FreeAndNil(c);
FreeAndNil(b);
FreeAndNil(a);
end;
end;
procedure TTest_TBase64StringRemotable.SetBinaryData();
const ITER = 100;
var
i : Integer;
a : TBase64StringRemotable;
s, es : string;
begin
a := TBase64StringRemotable.Create();
try
s := ''; es := Base64Encode(s);
a.BinaryData := s;
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
for i := 1 to ITER do begin
s := RandomValue(Random(500)); es := Base64Encode(s);
a.BinaryData := s;
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
end;
finally
FreeAndNil(a);
end;
end;
procedure TTest_TBase64StringRemotable.SetEncodedString();
const ITER = 100;
var
i : Integer;
a : TBase64StringRemotable;
s, es : string;
begin
a := TBase64StringRemotable.Create();
try
s := ''; es := Base64Encode(s);
a.EncodedString := es;
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
for i := 1 to ITER do begin
s := RandomValue(Random(500)); es := Base64Encode(s);
a.EncodedString := es;
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
end;
finally
FreeAndNil(a);
end;
end;
{ TTest_TBase64StringExtRemotable }
procedure TTest_TBase64StringExtRemotable.Equal();
const ITER = 100;
var
i : Integer;
a, b : TBase64StringExtRemotable;
c : TClass_A;
begin
c := nil;
b := nil;
a := TBase64StringExtRemotable.Create();
try
b := TBase64StringExtRemotable.Create();
CheckEquals(False, a.Equal(nil));
c := TClass_A.Create();
CheckEquals(False, a.Equal(c));
a.BinaryData := 'wst';
b.BinaryData := 'azerty';
CheckEquals(False, a.Equal(b));
CheckEquals(False, b.Equal(a));
for i := 1 to ITER do begin
a.BinaryData := RandomValue(Random(500));
b.BinaryData := a.BinaryData;
CheckEquals(True, a.Equal(b));
CheckEquals(True, b.Equal(a));
end;
finally
FreeAndNil(c);
FreeAndNil(b);
FreeAndNil(a);
end;
end;
procedure TTest_TBase64StringExtRemotable.SetBinaryData();
const ITER = 100;
var
i : Integer;
a : TBase64StringExtRemotable;
s, es : string;
begin
a := TBase64StringExtRemotable.Create();
try
s := ''; es := Base64Encode(s);
a.BinaryData := s;
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
for i := 1 to ITER do begin
s := RandomValue(Random(500)); es := Base64Encode(s);
a.BinaryData := s;
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
end;
finally
FreeAndNil(a);
end;
end;
procedure TTest_TBase64StringExtRemotable.SetEncodedString();
const ITER = 100;
var
i : Integer;
a : TBase64StringExtRemotable;
s, es : string;
begin
a := TBase64StringExtRemotable.Create();
try
s := ''; es := Base64Encode(s);
a.EncodedString := es;
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
for i := 1 to ITER do begin
s := RandomValue(Random(500)); es := Base64Encode(s);
a.EncodedString := es;
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
CheckEquals(s,a.BinaryData);
CheckEquals(es,a.EncodedString);
end;
finally
FreeAndNil(a);
end;
end;
initialization initialization
RegisterTest('Support',TTest_TBaseComplexRemotable.Suite); RegisterTest('Support',TTest_TBaseComplexRemotable.Suite);
RegisterTest('Support',TTest_TStringBufferRemotable.Suite); RegisterTest('Support',TTest_TStringBufferRemotable.Suite);
@ -2317,5 +2544,8 @@ initialization
RegisterTest('Support',TTest_TBaseObjectArrayRemotable.Suite); RegisterTest('Support',TTest_TBaseObjectArrayRemotable.Suite);
RegisterTest('Support',TTest_TBase64StringRemotable.Suite);
RegisterTest('Support',TTest_TBase64StringExtRemotable.Suite);
end. end.

View File

@ -24,7 +24,11 @@ uses
TestFrameWork, ActiveX, TestFrameWork, ActiveX,
{$ENDIF} {$ENDIF}
TypInfo, TypInfo,
base_service_intf, wst_types, server_service_intf, service_intf; base_service_intf, wst_types, server_service_intf, service_intf
{$IFDEF FPC}
, fpjson, jsonparser, base_json_formatter, json_formatter, server_service_json
{$ENDIF}
;
type type
@ -340,6 +344,7 @@ type
TTestFormatter = class(TTestFormatterSimpleType) TTestFormatter = class(TTestFormatterSimpleType)
protected protected
class function GetFormaterName() : string;virtual;abstract; class function GetFormaterName() : string;virtual;abstract;
class function SupportNamedArrayItem() : Boolean;virtual;
published published
procedure Test_Int_WithClass; procedure Test_Int_WithClass;
@ -410,6 +415,7 @@ type
TTestSOAPFormatter= class(TTestFormatter) TTestSOAPFormatter= class(TTestFormatter)
protected protected
class function GetFormaterName() : string;override; class function GetFormaterName() : string;override;
class function SupportNamedArrayItem() : Boolean;override;
function CreateFormatter(ARootType : PTypeInfo):IFormatterBase;override; function CreateFormatter(ARootType : PTypeInfo):IFormatterBase;override;
published published
procedure test_WriteBuffer(); procedure test_WriteBuffer();
@ -439,6 +445,18 @@ type
procedure test_WriteBuffer(); procedure test_WriteBuffer();
end; end;
{ TTestJsonRpcFormatter }
TTestJsonRpcFormatter= class(TTestFormatter)
protected
class function GetFormaterName() : string;override;
function CreateFormatter(ARootType : PTypeInfo):IFormatterBase;override;
function Support_ComplextType_with_SimpleContent():Boolean;override;
function Support_nil():Boolean;override;
published
//procedure test_WriteBuffer();
end;
{ TTestArray } { TTestArray }
TTestArray= class(TTestCase) TTestArray= class(TTestCase)
@ -508,6 +526,17 @@ type
procedure ExceptBlock_client(); procedure ExceptBlock_client();
end; end;
{ TTest_JsonRpcFormatterExceptionBlock }
TTest_JsonRpcFormatterExceptionBlock = class(TTestCase)
protected
function CreateFormatter():IFormatterResponse;
function CreateFormatterClient():IFormatterClient;
published
procedure ExceptBlock_server();
procedure ExceptBlock_client();
end;
{ TTest_TStringBufferRemotable } { TTest_TStringBufferRemotable }
TTest_TStringBufferRemotable = class(TTestCase) TTest_TStringBufferRemotable = class(TTestCase)
@ -1185,6 +1214,11 @@ begin
End; End;
end; end;
class function TTestFormatter.SupportNamedArrayItem() : Boolean;
begin
Result := False;
end;
procedure TTestFormatter.Test_Int_WithClass; procedure TTestFormatter.Test_Int_WithClass;
Var Var
f : IFormatterBase; f : IFormatterBase;
@ -1370,7 +1404,7 @@ begin
f.EndScope(); f.EndScope();
s := TMemoryStream.Create(); s := TMemoryStream.Create();
f.SaveToStream(s); s.SaveToFile(ClassName + '.txt'); f.SaveToStream(s); s.SaveToFile(ClassName + '.Test_CplxInt64SimpleContent_WithClass.txt');
FreeAndNil(a); FreeAndNil(a);
a := TClass_CplxSimpleContent.Create(); a := TClass_CplxSimpleContent.Create();
@ -2896,7 +2930,7 @@ begin
f.BeginObject('Root',TypeInfo(TClass_A)); f.BeginObject('Root',TypeInfo(TClass_A));
f.Put('a',TypeInfo(TClass_A),a); f.Put('a',TypeInfo(TClass_A),a);
f.Put('b',TypeInfo(TClass_A),b); f.Put('b',TypeInfo(TClass_A),b);
f.Put('intv',TypeInfo(TArrayOfStringRemotable),intv); f.Put('intv',TypeInfo(TArrayOfStringRemotableSample),intv);
f.EndScope(); f.EndScope();
s := TMemoryStream.Create(); s := TMemoryStream.Create();
@ -2906,7 +2940,7 @@ begin
FreeAndNil(intv); FreeAndNil(intv);
ls := TStringList.Create(); ls := TStringList.Create();
f := CreateFormatter(TypeInfo(TClass_A)); f := CreateFormatter(TypeInfo(TClass_A)); s.SaveToFile(ClassName + '.test_GetScopeItemNames.xml');
s.Position := 0; s.Position := 0;
f.LoadFromStream(s); f.LoadFromStream(s);
x := 'Root'; x := 'Root';
@ -2936,7 +2970,8 @@ begin
x := 'intv'; x := 'intv';
f.BeginArrayRead(x,TypeInfo(TArrayOfStringRemotableSample),asScoped,'OI'); f.BeginArrayRead(x,TypeInfo(TArrayOfStringRemotableSample),asScoped,'OI');
CheckEquals(3, f.GetScopeItemNames(ls), 'GetScopeItemNames.Count(intv)'); CheckEquals(3, f.GetScopeItemNames(ls), 'GetScopeItemNames.Count(intv)');
//Check( ls.IndexOf('OI') >= 0 ); if SupportNamedArrayItem() then
Check( ls.IndexOf('OI') >= 0, 'Named item' );
f.EndScopeRead(); f.EndScopeRead();
f.EndScopeRead(); f.EndScopeRead();
@ -3016,6 +3051,11 @@ begin
Result := 'SOAP'; Result := 'SOAP';
end; end;
class function TTestSOAPFormatter.SupportNamedArrayItem() : Boolean;
begin
Result := True;
end;
procedure TTestSOAPFormatter.test_WriteBuffer(); procedure TTestSOAPFormatter.test_WriteBuffer();
const const
s_XML_BUFFER = s_XML_BUFFER =
@ -4204,6 +4244,116 @@ begin
end; end;
end; end;
{ TTestJsonRpcFormatter }
class function TTestJsonRpcFormatter.GetFormaterName() : string;
begin
Result := 'json';
end;
function TTestJsonRpcFormatter.CreateFormatter(ARootType : PTypeInfo) : IFormatterBase;
begin
{$IFDEF FPC}
Result := TJsonRpcBaseFormatter.Create();
Result.BeginObject('root',nil);
{$ENDIF}
end;
function TTestJsonRpcFormatter.Support_ComplextType_with_SimpleContent() : Boolean;
begin
Result := True;
end;
function TTestJsonRpcFormatter.Support_nil() : Boolean;
begin
Result := False;
end;
{ TTest_JsonRpcFormatterExceptionBlock }
function TTest_JsonRpcFormatterExceptionBlock.CreateFormatter() : IFormatterResponse;
begin
Result := server_service_json.TJsonRpcFormatter.Create() as IFormatterResponse;
end;
function TTest_JsonRpcFormatterExceptionBlock.CreateFormatterClient() : IFormatterClient;
begin
{$IFDEF FPC}
Result := json_formatter.TJsonRpcFormatter.Create() as IFormatterClient;
{$ENDIF}
end;
procedure TTest_JsonRpcFormatterExceptionBlock.ExceptBlock_server();
const VAL_CODE = '1210'; VAL_MSG = 'This is a sample exception message.';
var
f : IFormatterResponse;
strm : TMemoryStream;
locParser : TJSONParser;
root, errorNodeObj : TJSONObject;
errorNode, tmpNode : TJSONData;
excpt_code, excpt_msg : string;
begin
root := nil;
f := CreateFormatter();
f.BeginExceptionList(VAL_CODE,VAL_MSG);
f.EndExceptionList();
locParser := nil;
strm := TMemoryStream.Create();
try
f.SaveToStream(strm); strm.SaveToFile('TTest_JsonRpcFormatterExceptionBlock.ExceptBlock_server.txt');
strm.Position := 0;
locParser := TJSONParser.Create(strm);
root := locParser.Parse() as TJSONObject;
Check(Assigned(root));
errorNode := root.Elements[s_json_error];
Check(Assigned(errorNode),'Error');
Check(errorNode.JSONType() = jtObject);
errorNodeObj := errorNode as TJSONObject;
Check(errorNodeObj.IndexOfName(s_json_code) >= 0, s_json_code);
Check(errorNodeObj.IndexOfName(s_json_message) >= 0, s_json_message);
excpt_code := errorNodeObj.Elements[s_json_code].AsString;
excpt_msg := errorNodeObj.Elements[s_json_message].AsString;
CheckEquals(VAL_CODE,excpt_code,'faultCode');
CheckEquals(VAL_MSG,excpt_msg,'faultString');
finally
locParser.Free();
FreeAndNil(strm);
root.Free();
end;
end;
procedure TTest_JsonRpcFormatterExceptionBlock.ExceptBlock_client();
const
VAL_CODE = '1210'; VAL_MSG = 'This is a sample exception message.';
VAL_STREAM = '{ "result" : null, "error" : { "code" : ' + VAL_CODE + ', "message" : "' + VAL_MSG + '" } }';
var
f : IFormatterClient;
strm : TStringStream;
excpt_code, excpt_msg : string;
begin
excpt_code := '';
excpt_msg := '';
f := CreateFormatterClient();
strm := TStringStream.Create(VAL_STREAM);
try
strm.Position := 0;
f.LoadFromStream(strm);
try
f.BeginCallRead(nil);
Check(False,'BeginCallRead() should raise an exception.');
except
on e : EJsonRpcException do begin
excpt_code := e.FaultCode;
excpt_msg := e.FaultString;
end;
end;
CheckEquals(VAL_CODE,excpt_code,'faultCode');
CheckEquals(VAL_MSG,excpt_msg,'faultString');
finally
FreeAndNil(strm);
end;
end;
initialization initialization
RegisterStdTypes(); RegisterStdTypes();
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TTestEnum),'TTestEnum').RegisterExternalPropertyName('teOne', '1'); GetTypeRegistry().Register(sXSD_NS,TypeInfo(TTestEnum),'TTestEnum').RegisterExternalPropertyName('teOne', '1');
@ -4254,35 +4404,23 @@ initialization
RegisterAttributeProperty(TypeInfo(TTestSmallRecord),'fieldWord'); RegisterAttributeProperty(TypeInfo(TTestSmallRecord),'fieldWord');
RegisterAttributeProperty(TypeInfo(TTestRecord),'fieldWord'); RegisterAttributeProperty(TypeInfo(TTestRecord),'fieldWord');
RegisterTest('Support',TTestArray.Suite);
RegisterTest('Serializer',TTestSOAPFormatter.Suite);
RegisterTest('Serializer',TTestBinaryFormatter.Suite);
RegisterTest('Support',TTest_TBaseComplexRemotable.Suite);
RegisterTest('Serializer',TTestSOAPFormatterAttributes.Suite);
RegisterTest('Serializer',TTestBinaryFormatterAttributes.Suite);
RegisterTest('Serializer',TTestXmlRpcFormatterAttributes.Suite);
RegisterTest('Serializer',TTestXmlRpcFormatter.Suite);
RegisterTest('Serializer',TTest_SoapFormatterExceptionBlock.Suite);
RegisterTest('Serializer',TTest_XmlRpcFormatterExceptionBlock.Suite);
RegisterTest('Serializer',TTest_BinaryFormatterExceptionBlock.Suite);
RegisterTest('Serializer',TTest_TStringBufferRemotable.Suite);
{$IFDEF FPC} {$IFDEF FPC}
RegisterTest(TTestArray); RegisterTest('Serializer',TTestJsonRpcFormatter.Suite);
RegisterTest(TTestSOAPFormatter); RegisterTest('Serializer',TTest_JsonRpcFormatterExceptionBlock.Suite);
RegisterTest(TTestBinaryFormatter);
RegisterTest(TTest_TBaseComplexRemotable);
RegisterTest(TTestSOAPFormatterAttributes);
RegisterTest(TTestBinaryFormatterAttributes);
RegisterTest(TTestXmlRpcFormatterAttributes);
RegisterTest(TTestXmlRpcFormatter);
RegisterTest(TTest_SoapFormatterExceptionBlock);
RegisterTest(TTest_XmlRpcFormatterExceptionBlock);
RegisterTest(TTest_BinaryFormatterExceptionBlock);
RegisterTest(TTest_TStringBufferRemotable);
{$ELSE}
RegisterTest(TTestArray.Suite);
RegisterTest(TTestSOAPFormatter.Suite);
RegisterTest(TTestBinaryFormatter.Suite);
RegisterTest(TTest_TBaseComplexRemotable.Suite);
RegisterTest(TTestSOAPFormatterAttributes.Suite);
RegisterTest(TTestBinaryFormatterAttributes.Suite);
RegisterTest(TTestXmlRpcFormatterAttributes.Suite);
RegisterTest(TTestXmlRpcFormatter.Suite);
RegisterTest(TTest_SoapFormatterExceptionBlock.Suite);
RegisterTest(TTest_XmlRpcFormatterExceptionBlock.Suite);
RegisterTest(TTest_BinaryFormatterExceptionBlock.Suite);
RegisterTest(TTest_TStringBufferRemotable.Suite);
{$ENDIF} {$ENDIF}
end. end.

View File

@ -7,7 +7,7 @@
<MainUnit Value="0"/> <MainUnit Value="0"/>
<IconPath Value="./"/> <IconPath Value="./"/>
<TargetFileExt Value=".exe"/> <TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="12"/> <ActiveEditorIndexAtStart Value="6"/>
</General> </General>
<PublishOptions> <PublishOptions>
<Version Value="2"/> <Version Value="2"/>
@ -27,7 +27,7 @@
<PackageName Value="FPCUnitTestRunner"/> <PackageName Value="FPCUnitTestRunner"/>
</Item1> </Item1>
</RequiredPackages> </RequiredPackages>
<Units Count="53"> <Units Count="47">
<Unit0> <Unit0>
<Filename Value="wst_test_suite.lpr"/> <Filename Value="wst_test_suite.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -40,12 +40,12 @@
<Filename Value="testformatter_unit.pas"/> <Filename Value="testformatter_unit.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="testformatter_unit"/> <UnitName Value="testformatter_unit"/>
<CursorPos X="27" Y="1293"/> <CursorPos X="17" Y="3717"/>
<TopLine Value="1291"/> <TopLine Value="3715"/>
<EditorIndex Value="0"/> <EditorIndex Value="0"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Bookmarks Count="1"> <Bookmarks Count="1">
<Item0 X="17" Y="1099" ID="3"/> <Item0 X="17" Y="1128" ID="3"/>
</Bookmarks> </Bookmarks>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit1> </Unit1>
@ -53,16 +53,18 @@
<Filename Value="..\..\server_service_soap.pas"/> <Filename Value="..\..\server_service_soap.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="server_service_soap"/> <UnitName Value="server_service_soap"/>
<CursorPos X="8" Y="182"/> <CursorPos X="3" Y="83"/>
<TopLine Value="161"/> <TopLine Value="81"/>
<EditorIndex Value="2"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit2> </Unit2>
<Unit3> <Unit3>
<Filename Value="..\..\soap_formatter.pas"/> <Filename Value="..\..\soap_formatter.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="soap_formatter"/> <UnitName Value="soap_formatter"/>
<CursorPos X="41" Y="31"/> <CursorPos X="1" Y="260"/>
<TopLine Value="17"/> <TopLine Value="246"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@ -71,21 +73,23 @@
<Filename Value="..\..\base_binary_formatter.pas"/> <Filename Value="..\..\base_binary_formatter.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="base_binary_formatter"/> <UnitName Value="base_binary_formatter"/>
<CursorPos X="46" Y="1584"/> <CursorPos X="24" Y="27"/>
<TopLine Value="1579"/> <TopLine Value="7"/>
<EditorIndex Value="10"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit4> </Unit4>
<Unit5> <Unit5>
<Filename Value="..\..\base_service_intf.pas"/> <Filename Value="..\..\base_service_intf.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="base_service_intf"/> <UnitName Value="base_service_intf"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="4086"/>
<TopLine Value="1"/> <TopLine Value="4072"/>
<EditorIndex Value="10"/> <EditorIndex Value="13"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Bookmarks Count="2"> <Bookmarks Count="2">
<Item0 X="33" Y="1156" ID="0"/> <Item0 X="33" Y="1201" ID="0"/>
<Item1 X="5" Y="1210" ID="1"/> <Item1 X="5" Y="1255" ID="1"/>
</Bookmarks> </Bookmarks>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit5> </Unit5>
@ -93,9 +97,9 @@
<Filename Value="..\..\base_soap_formatter.pas"/> <Filename Value="..\..\base_soap_formatter.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="base_soap_formatter"/> <UnitName Value="base_soap_formatter"/>
<CursorPos X="20" Y="1658"/> <CursorPos X="3" Y="37"/>
<TopLine Value="1649"/> <TopLine Value="23"/>
<EditorIndex Value="2"/> <EditorIndex Value="7"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit6> </Unit6>
@ -103,9 +107,9 @@
<Filename Value="..\..\binary_formatter.pas"/> <Filename Value="..\..\binary_formatter.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="binary_formatter"/> <UnitName Value="binary_formatter"/>
<CursorPos X="35" Y="33"/> <CursorPos X="9" Y="177"/>
<TopLine Value="14"/> <TopLine Value="169"/>
<EditorIndex Value="4"/> <EditorIndex Value="9"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit7> </Unit7>
@ -113,20 +117,19 @@
<Filename Value="..\..\binary_streamer.pas"/> <Filename Value="..\..\binary_streamer.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="binary_streamer"/> <UnitName Value="binary_streamer"/>
<CursorPos X="95" Y="90"/> <CursorPos X="1" Y="14"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Bookmarks Count="1">
<Item0 X="38" Y="487" ID="2"/>
</Bookmarks>
</Unit8> </Unit8>
<Unit9> <Unit9>
<Filename Value="..\..\server_binary_formatter.pas"/> <Filename Value="..\..\server_binary_formatter.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="server_binary_formatter"/> <UnitName Value="server_binary_formatter"/>
<CursorPos X="9" Y="123"/> <CursorPos X="1" Y="24"/>
<TopLine Value="27"/> <TopLine Value="12"/>
<EditorIndex Value="3"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit9> </Unit9>
<Unit10> <Unit10>
<Filename Value="..\..\metadata_repository.pas"/> <Filename Value="..\..\metadata_repository.pas"/>
@ -158,12 +161,10 @@
<UnitName Value="parserdefs"/> <UnitName Value="parserdefs"/>
<CursorPos X="1" Y="1024"/> <CursorPos X="1" Y="1024"/>
<TopLine Value="1010"/> <TopLine Value="1010"/>
<EditorIndex Value="5"/>
<UsageCount Value="202"/> <UsageCount Value="202"/>
<Bookmarks Count="1"> <Bookmarks Count="1">
<Item0 X="18" Y="1133" ID="2"/> <Item0 X="18" Y="1133" ID="2"/>
</Bookmarks> </Bookmarks>
<Loaded Value="True"/>
</Unit13> </Unit13>
<Unit14> <Unit14>
<Filename Value="..\..\metadata_wsdl.pas"/> <Filename Value="..\..\metadata_wsdl.pas"/>
@ -182,309 +183,323 @@
<UsageCount Value="203"/> <UsageCount Value="203"/>
</Unit15> </Unit15>
<Unit16> <Unit16>
<Filename Value="..\..\service_intf.pas"/>
<UnitName Value="service_intf"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="7"/>
</Unit16>
<Unit17>
<Filename Value="test_parserdef.pas"/> <Filename Value="test_parserdef.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="test_parserdef"/> <UnitName Value="test_parserdef"/>
<CursorPos X="93" Y="76"/> <CursorPos X="93" Y="76"/>
<TopLine Value="11"/> <TopLine Value="11"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
</Unit17> </Unit16>
<Unit18> <Unit17>
<Filename Value="..\..\base_xmlrpc_formatter.pas"/> <Filename Value="..\..\base_xmlrpc_formatter.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="base_xmlrpc_formatter"/> <UnitName Value="base_xmlrpc_formatter"/>
<CursorPos X="1" Y="1"/> <CursorPos X="14" Y="1589"/>
<TopLine Value="1"/> <TopLine Value="1587"/>
<EditorIndex Value="5"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
</Unit18> <Loaded Value="True"/>
<Unit19> </Unit17>
<Unit18>
<Filename Value="..\..\ws_helper\pascal_parser_intf.pas"/> <Filename Value="..\..\ws_helper\pascal_parser_intf.pas"/>
<UnitName Value="pascal_parser_intf"/> <UnitName Value="pascal_parser_intf"/>
<CursorPos X="3" Y="174"/> <CursorPos X="62" Y="217"/>
<TopLine Value="165"/> <TopLine Value="200"/>
<UsageCount Value="59"/> <EditorIndex Value="14"/>
</Unit19> <UsageCount Value="98"/>
<Unit20> <Loaded Value="True"/>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-xml\src\dom.pp"/> </Unit18>
<UnitName Value="DOM"/> <Unit19>
<CursorPos X="38" Y="225"/>
<TopLine Value="203"/>
<UsageCount Value="6"/>
</Unit20>
<Unit21>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-base\src\inc\contnrs.pp"/>
<UnitName Value="contnrs"/>
<CursorPos X="3" Y="1376"/>
<TopLine Value="1370"/>
<UsageCount Value="6"/>
</Unit21>
<Unit22>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpash.inc"/>
<CursorPos X="8" Y="142"/>
<TopLine Value="197"/>
<UsageCount Value="6"/>
</Unit22>
<Unit23>
<Filename Value="..\..\wst_fpc_xml.pas"/> <Filename Value="..\..\wst_fpc_xml.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="wst_fpc_xml"/> <UnitName Value="wst_fpc_xml"/>
<CursorPos X="65" Y="85"/> <CursorPos X="65" Y="85"/>
<TopLine Value="56"/> <TopLine Value="56"/>
<UsageCount Value="201"/> <UsageCount Value="201"/>
</Unit23> </Unit19>
<Unit24> <Unit20>
<Filename Value="test_utilities.pas"/> <Filename Value="test_utilities.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="test_utilities"/> <UnitName Value="test_utilities"/>
<CursorPos X="59" Y="740"/> <CursorPos X="59" Y="740"/>
<TopLine Value="714"/> <TopLine Value="711"/>
<EditorIndex Value="11"/> <EditorIndex Value="15"/>
<UsageCount Value="207"/> <UsageCount Value="207"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit24> </Unit20>
<Unit25> <Unit21>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\DUnitCompatibleInterface.inc"/>
<CursorPos X="21" Y="9"/>
<TopLine Value="1"/>
<UsageCount Value="2"/>
</Unit25>
<Unit26>
<Filename Value="..\..\server_service_xmlrpc.pas"/> <Filename Value="..\..\server_service_xmlrpc.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="server_service_xmlrpc"/> <UnitName Value="server_service_xmlrpc"/>
<CursorPos X="38" Y="33"/> <CursorPos X="38" Y="33"/>
<TopLine Value="27"/> <TopLine Value="27"/>
<UsageCount Value="214"/> <UsageCount Value="214"/>
</Unit26> </Unit21>
<Unit27> <Unit22>
<Filename Value="test_parsers.pas"/> <Filename Value="test_parsers.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="test_parsers"/> <UnitName Value="test_parsers"/>
<CursorPos X="50" Y="24"/> <CursorPos X="33" Y="1106"/>
<TopLine Value="1"/> <TopLine Value="1106"/>
<EditorIndex Value="7"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/> </Unit22>
</Unit27> <Unit23>
<Unit28>
<Filename Value="..\..\ws_helper\xsd_parser.pas"/> <Filename Value="..\..\ws_helper\xsd_parser.pas"/>
<UnitName Value="xsd_parser"/> <UnitName Value="xsd_parser"/>
<CursorPos X="17" Y="190"/> <CursorPos X="1" Y="1"/>
<TopLine Value="188"/> <TopLine Value="1"/>
<UsageCount Value="35"/> <UsageCount Value="58"/>
</Unit28> </Unit23>
<Unit29> <Unit24>
<Filename Value="..\..\ws_helper\parserutils.pas"/> <Filename Value="..\..\ws_helper\parserutils.pas"/>
<UnitName Value="parserutils"/> <UnitName Value="parserutils"/>
<CursorPos X="98" Y="94"/> <CursorPos X="98" Y="94"/>
<TopLine Value="71"/> <TopLine Value="71"/>
<UsageCount Value="27"/> <UsageCount Value="20"/>
</Unit29> </Unit24>
<Unit30> <Unit25>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-fpcunit\src\testregistry.pp"/>
<UnitName Value="testregistry"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="18"/>
<UsageCount Value="2"/>
</Unit30>
<Unit31>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-fpcunit\src\fpcunit.pp"/>
<UnitName Value="fpcunit"/>
<CursorPos X="33" Y="438"/>
<TopLine Value="431"/>
<UsageCount Value="5"/>
</Unit31>
<Unit32>
<Filename Value="..\..\ws_helper\ws_parser_imp.pas"/> <Filename Value="..\..\ws_helper\ws_parser_imp.pas"/>
<UnitName Value="ws_parser_imp"/> <UnitName Value="ws_parser_imp"/>
<CursorPos X="14" Y="91"/> <CursorPos X="71" Y="386"/>
<TopLine Value="77"/> <TopLine Value="363"/>
<UsageCount Value="34"/> <UsageCount Value="57"/>
</Unit32> </Unit25>
<Unit33> <Unit26>
<Filename Value="..\..\ws_helper\wsdl_generator.pas"/> <Filename Value="..\..\ws_helper\wsdl_generator.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="wsdl_generator"/> <UnitName Value="wsdl_generator"/>
<CursorPos X="27" Y="146"/> <CursorPos X="27" Y="146"/>
<TopLine Value="124"/> <TopLine Value="124"/>
<UsageCount Value="219"/> <UsageCount Value="219"/>
</Unit33> </Unit26>
<Unit34> <Unit27>
<Filename Value="..\..\ws_helper\xsd_generator.pas"/> <Filename Value="..\..\ws_helper\xsd_generator.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="xsd_generator"/> <UnitName Value="xsd_generator"/>
<CursorPos X="3" Y="81"/> <CursorPos X="3" Y="81"/>
<TopLine Value="261"/> <TopLine Value="261"/>
<EditorIndex Value="6"/>
<UsageCount Value="202"/> <UsageCount Value="202"/>
<Loaded Value="True"/> </Unit27>
</Unit34> <Unit28>
<Unit35>
<Filename Value="..\..\ws_helper\xsd_consts.pas"/> <Filename Value="..\..\ws_helper\xsd_consts.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="xsd_consts"/> <UnitName Value="xsd_consts"/>
<CursorPos X="8" Y="78"/> <CursorPos X="8" Y="78"/>
<TopLine Value="51"/> <TopLine Value="51"/>
<UsageCount Value="201"/> <UsageCount Value="201"/>
</Unit35> </Unit28>
<Unit36> <Unit29>
<Filename Value="..\..\ws_helper\wsdl_parser.pas"/> <Filename Value="..\..\ws_helper\wsdl_parser.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="wsdl_parser"/> <UnitName Value="wsdl_parser"/>
<CursorPos X="28" Y="845"/> <CursorPos X="49" Y="21"/>
<TopLine Value="835"/> <TopLine Value="1"/>
<UsageCount Value="135"/> <UsageCount Value="200"/>
</Unit36> </Unit29>
<Unit37> <Unit30>
<Filename Value="..\..\base_json_formatter.pas"/> <Filename Value="..\..\base_json_formatter.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="base_json_formatter"/> <UnitName Value="base_json_formatter"/>
<CursorPos X="7" Y="383"/> <CursorPos X="22" Y="23"/>
<TopLine Value="367"/> <TopLine Value="1"/>
<EditorIndex Value="8"/> <EditorIndex Value="11"/>
<UsageCount Value="188"/> <UsageCount Value="237"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit37> </Unit30>
<Unit38> <Unit31>
<Filename Value="..\..\fcl-json\src\fpjson.pp"/> <Filename Value="..\..\fcl-json\src\fpjson.pp"/>
<UnitName Value="fpjson"/> <UnitName Value="fpjson"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="330"/> <TopLine Value="330"/>
<UsageCount Value="42"/> <UsageCount Value="35"/>
</Unit38> </Unit31>
<Unit39> <Unit32>
<Filename Value="..\..\wst_types.pas"/>
<UnitName Value="wst_types"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="13"/>
<UsageCount Value="6"/>
</Unit39>
<Unit40>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\systemh.inc"/>
<CursorPos X="3" Y="389"/>
<TopLine Value="375"/>
<UsageCount Value="6"/>
</Unit40>
<Unit41>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\xmlwrite.pp"/>
<UnitName Value="XMLWrite"/>
<CursorPos X="9" Y="609"/>
<TopLine Value="586"/>
<UsageCount Value="6"/>
</Unit41>
<Unit42>
<Filename Value="..\..\library_imp_utils.pas"/> <Filename Value="..\..\library_imp_utils.pas"/>
<UnitName Value="library_imp_utils"/> <UnitName Value="library_imp_utils"/>
<CursorPos X="82" Y="43"/> <CursorPos X="92" Y="21"/>
<TopLine Value="19"/> <TopLine Value="1"/>
<EditorIndex Value="13"/> <EditorIndex Value="17"/>
<UsageCount Value="67"/> <UsageCount Value="100"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit42> </Unit32>
<Unit43> <Unit33>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-xml\src\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="22" Y="351"/>
<TopLine Value="336"/>
<UsageCount Value="1"/>
</Unit43>
<Unit44>
<Filename Value="test_support.pas"/> <Filename Value="test_support.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="test_support"/> <UnitName Value="test_support"/>
<CursorPos X="1" Y="1"/> <CursorPos X="3" Y="109"/>
<TopLine Value="1"/> <TopLine Value="95"/>
<EditorIndex Value="12"/> <EditorIndex Value="16"/>
<UsageCount Value="107"/> <UsageCount Value="188"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit44> </Unit33>
<Unit45> <Unit34>
<Filename Value="..\..\..\..\..\..\..\lazarus\fpc\2.2.1\source\packages\fcl-fpcunit\src\testutils.pp"/>
<UnitName Value="testutils"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="14"/>
<UsageCount Value="3"/>
</Unit45>
<Unit46>
<Filename Value="..\..\..\..\..\..\..\lazarus\fpc\2.2.1\source\packages\fcl-fpcunit\src\DUnitCompatibleInterface.inc"/>
<CursorPos X="21" Y="9"/>
<TopLine Value="1"/>
<UsageCount Value="3"/>
</Unit46>
<Unit47>
<Filename Value="..\..\..\..\..\..\..\lazarus\fpc\2.2.1\source\packages\fcl-fpcunit\src\fpcunit.pp"/> <Filename Value="..\..\..\..\..\..\..\lazarus\fpc\2.2.1\source\packages\fcl-fpcunit\src\fpcunit.pp"/>
<UnitName Value="fpcunit"/> <UnitName Value="fpcunit"/>
<CursorPos X="1" Y="446"/> <CursorPos X="1" Y="446"/>
<TopLine Value="432"/> <TopLine Value="432"/>
<UsageCount Value="7"/> <UsageCount Value="9"/>
</Unit47> </Unit34>
<Unit48> <Unit35>
<Filename Value="..\..\..\..\..\..\..\lazarus\fpc\2.2.1\source\rtl\objpas\math.pp"/>
<UnitName Value="math"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="59"/>
<UsageCount Value="3"/>
</Unit48>
<Unit49>
<Filename Value="..\..\..\..\..\..\..\lazarus\fpc\2.2.1\source\rtl\objpas\typinfo.pp"/> <Filename Value="..\..\..\..\..\..\..\lazarus\fpc\2.2.1\source\rtl\objpas\typinfo.pp"/>
<UnitName Value="typinfo"/> <UnitName Value="typinfo"/>
<CursorPos X="19" Y="270"/> <CursorPos X="20" Y="38"/>
<TopLine Value="256"/> <TopLine Value="24"/>
<UsageCount Value="8"/> <UsageCount Value="8"/>
</Unit49> </Unit35>
<Unit50> <Unit36>
<Filename Value="..\..\xmlrpc_formatter.pas"/> <Filename Value="..\..\xmlrpc_formatter.pas"/>
<UnitName Value="xmlrpc_formatter"/> <UnitName Value="xmlrpc_formatter"/>
<CursorPos X="1" Y="169"/> <CursorPos X="1" Y="169"/>
<TopLine Value="155"/> <TopLine Value="155"/>
<EditorIndex Value="3"/> <EditorIndex Value="8"/>
<UsageCount Value="30"/> <UsageCount Value="70"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit50> </Unit36>
<Unit51> <Unit37>
<Filename Value="..\..\..\..\..\..\..\lazarus\fpc\2.2.1\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="15" Y="344"/>
<TopLine Value="330"/>
<UsageCount Value="7"/>
</Unit51>
<Unit52>
<Filename Value="..\..\..\..\..\..\..\lazarus\fpc\2.2.1\source\packages\fcl-json\src\fpjson.pp"/> <Filename Value="..\..\..\..\..\..\..\lazarus\fpc\2.2.1\source\packages\fcl-json\src\fpjson.pp"/>
<UnitName Value="fpjson"/> <UnitName Value="fpjson"/>
<CursorPos X="3" Y="265"/> <CursorPos X="17" Y="312"/>
<TopLine Value="320"/> <TopLine Value="317"/>
<EditorIndex Value="9"/> <EditorIndex Value="12"/>
<UsageCount Value="29"/> <UsageCount Value="69"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit52> </Unit37>
<Unit38>
<Filename Value="..\..\basex_encode.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="basex_encode"/>
<CursorPos X="45" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="101"/>
</Unit38>
<Unit39>
<Filename Value="test_basex_encode.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="test_basex_encode"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="101"/>
</Unit39>
<Unit40>
<Filename Value="..\..\..\..\..\..\..\lazarus\fpc\2.2.1\source\packages\fcl-json\src\jsonparser.pp"/>
<UnitName Value="jsonparser"/>
<CursorPos X="35" Y="22"/>
<TopLine Value="6"/>
<UsageCount Value="15"/>
</Unit40>
<Unit41>
<Filename Value="..\..\..\..\..\..\..\lazarus\fpc\2.2.1\source\packages\fcl-fpcunit\src\testregistry.pp"/>
<UnitName Value="testregistry"/>
<CursorPos X="11" Y="32"/>
<TopLine Value="24"/>
<UsageCount Value="8"/>
</Unit41>
<Unit42>
<Filename Value="..\..\wst_global.inc"/>
<CursorPos X="22" Y="17"/>
<TopLine Value="1"/>
<UsageCount Value="8"/>
</Unit42>
<Unit43>
<Filename Value="..\..\..\..\..\..\..\lazarus\fpc\2.2.1\source\packages\fcl-base\src\inc\contnrs.pp"/>
<UnitName Value="contnrs"/>
<CursorPos X="3" Y="1403"/>
<TopLine Value="1398"/>
<UsageCount Value="9"/>
</Unit43>
<Unit44>
<Filename Value="..\..\..\..\..\..\..\lazarus\fpc\2.2.1\source\packages\fcl-json\src\jsonscanner.pp"/>
<UnitName Value="jsonscanner"/>
<CursorPos X="11" Y="258"/>
<TopLine Value="210"/>
<UsageCount Value="10"/>
</Unit44>
<Unit45>
<Filename Value="..\..\json_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="json_formatter"/>
<CursorPos X="3" Y="66"/>
<TopLine Value="43"/>
<EditorIndex Value="6"/>
<UsageCount Value="34"/>
<Loaded Value="True"/>
</Unit45>
<Unit46>
<Filename Value="..\..\server_service_json.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="server_service_json"/>
<CursorPos X="60" Y="54"/>
<TopLine Value="40"/>
<EditorIndex Value="4"/>
<UsageCount Value="30"/>
<Loaded Value="True"/>
</Unit46>
</Units> </Units>
<JumpHistory Count="5" HistoryIndex="4"> <JumpHistory Count="16" HistoryIndex="15">
<Position1> <Position1>
<Filename Value="test_support.pas"/> <Filename Value="..\..\server_binary_formatter.pas"/>
<Caret Line="927" Column="13" TopLine="908"/> <Caret Line="135" Column="45" TopLine="113"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="test_support.pas"/> <Filename Value="..\..\json_formatter.pas"/>
<Caret Line="2149" Column="5" TopLine="2117"/> <Caret Line="52" Column="3" TopLine="50"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="test_support.pas"/> <Filename Value="..\..\server_service_json.pas"/>
<Caret Line="2156" Column="27" TopLine="2146"/> <Caret Line="56" Column="49" TopLine="45"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="..\..\base_service_intf.pas"/> <Filename Value="..\..\server_service_json.pas"/>
<Caret Line="4591" Column="12" TopLine="4577"/> <Caret Line="57" Column="46" TopLine="36"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="test_support.pas"/> <Filename Value="..\..\server_service_json.pas"/>
<Caret Line="2111" Column="1" TopLine="2104"/> <Caret Line="21" Column="16" TopLine="4"/>
</Position5> </Position5>
<Position6>
<Filename Value="..\..\json_formatter.pas"/>
<Caret Line="165" Column="6" TopLine="151"/>
</Position6>
<Position7>
<Filename Value="..\..\json_formatter.pas"/>
<Caret Line="166" Column="11" TopLine="145"/>
</Position7>
<Position8>
<Filename Value="..\..\binary_formatter.pas"/>
<Caret Line="177" Column="9" TopLine="169"/>
</Position8>
<Position9>
<Filename Value="testformatter_unit.pas"/>
<Caret Line="3717" Column="17" TopLine="3715"/>
</Position9>
<Position10>
<Filename Value="..\..\soap_formatter.pas"/>
<Caret Line="240" Column="8" TopLine="223"/>
</Position10>
<Position11>
<Filename Value="..\..\json_formatter.pas"/>
<Caret Line="29" Column="35" TopLine="7"/>
</Position11>
<Position12>
<Filename Value="..\..\server_service_json.pas"/>
<Caret Line="21" Column="16" TopLine="4"/>
</Position12>
<Position13>
<Filename Value="..\..\soap_formatter.pas"/>
<Caret Line="271" Column="14" TopLine="246"/>
</Position13>
<Position14>
<Filename Value="..\..\json_formatter.pas"/>
<Caret Line="170" Column="11" TopLine="157"/>
</Position14>
<Position15>
<Filename Value="..\..\json_formatter.pas"/>
<Caret Line="194" Column="48" TopLine="174"/>
</Position15>
<Position16>
<Filename Value="..\..\json_formatter.pas"/>
<Caret Line="189" Column="34" TopLine="174"/>
</Position16>
</JumpHistory> </JumpHistory>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>

View File

@ -17,7 +17,8 @@ uses
metadata_generator, parserdefs, server_service_intf, metadata_wsdl, metadata_generator, parserdefs, server_service_intf, metadata_wsdl,
test_parserdef, base_xmlrpc_formatter, wst_fpc_xml, test_utilities, test_parserdef, base_xmlrpc_formatter, wst_fpc_xml, test_utilities,
server_service_xmlrpc, test_parsers, wsdl_generator, xsd_generator, server_service_xmlrpc, test_parsers, wsdl_generator, xsd_generator,
xsd_consts, base_json_formatter, wsdl_parser, test_support; xsd_consts, base_json_formatter, wsdl_parser, test_support, basex_encode,
test_basex_encode, json_formatter, server_service_json;
Const Const
ShortOpts = 'alh'; ShortOpts = 'alh';

View File

@ -155,6 +155,7 @@ var
sym : TPasElement; sym : TPasElement;
modulList, decList : TList; modulList, decList : TList;
mdl : TPasModule; mdl : TPasModule;
ok : Boolean;
begin begin
modulList := AContainer.Package.Modules; modulList := AContainer.Package.Modules;
for i := 0 to Pred(modulList.Count) do begin for i := 0 to Pred(modulList.Count) do begin
@ -174,7 +175,8 @@ begin
) and ) and
( not sym.InheritsFrom(TPasNativeSimpleType) ) ( not sym.InheritsFrom(TPasNativeSimpleType) )
then begin then begin
if ( ALs.IndexOfObject(sym) = -1 ) then begin ok := ( not sym.InheritsFrom(TPasNativeClassType) ) or sym.InheritsFrom(TPasNativeSimpleContentClassType);
if ok and ( ALs.IndexOfObject(sym) = -1 ) then begin
ALs.AddObject(AContainer.GetExternalName(sym),sym); ALs.AddObject(AContainer.GetExternalName(sym),sym);
end; end;
end; end;
@ -237,6 +239,7 @@ var
i : Integer; i : Integer;
prp : TPasProperty; prp : TPasProperty;
extName : string; extName : string;
ancestorType : TPasElement;
begin begin
edtName.Text := ''; edtName.Text := '';
edtProp.Clear(); edtProp.Clear();
@ -252,7 +255,17 @@ begin
end; end;
if Assigned(FObject.AncestorType) then begin if Assigned(FObject.AncestorType) then begin
//edtParent.ItemIndex := edtParent.Items.IndexOfObject(FObject.AncestorType); //edtParent.ItemIndex := edtParent.Items.IndexOfObject(FObject.AncestorType);
edtParent.ItemIndex := edtParent.Items.IndexOfObject(FSymbolTable.FindElement(FSymbolTable.GetExternalName(FObject.AncestorType))); ancestorType := FObject.AncestorType;
if ancestorType.InheritsFrom(TPasUnresolvedTypeRef) then begin
ancestorType := FSymbolTable.FindElement(FSymbolTable.GetExternalName(ancestorType));
end;
if Assigned(ancestorType) then begin
if ancestorType.InheritsFrom(TPasNativeSimpleType) then
ancestorType := TPasNativeSimpleType(ancestorType).ExtendableType
else if ancestorType.InheritsFrom(TPasNativeClassType) and Assigned(TPasNativeClassType(ancestorType).ExtendableType) then
ancestorType := TPasNativeClassType(ancestorType).ExtendableType;
end;
edtParent.ItemIndex := edtParent.Items.IndexOfObject(ancestorType);
end; end;
end else begin end else begin
Self.Caption := 'New'; Self.Caption := 'New';
@ -277,9 +290,9 @@ begin
trueParent := GetUltimeType(trueParent); trueParent := GetUltimeType(trueParent);
end; end;
if trueParent.InheritsFrom(TPasNativeSimpleType) and if trueParent.InheritsFrom(TPasNativeSimpleType) and
Assigned(TPasNativeSimpleType(trueParent).BoxedType) Assigned(TPasNativeSimpleType(trueParent).ExtendableType)
then begin then begin
trueParent := TPasNativeSimpleType(trueParent).BoxedType; trueParent := TPasNativeSimpleType(trueParent).ExtendableType;
end; end;
end else begin end else begin
trueParent := nil; trueParent := nil;

View File

@ -91,17 +91,17 @@ object fPropEdit: TfPropEdit
end end
object edtAttribute: TCheckBox object edtAttribute: TCheckBox
Left = 20 Left = 20
Height = 13 Height = 19
Top = 170 Top = 170
Width = 101 Width = 107
Caption = 'Attribute Property' Caption = 'Attribute Property'
TabOrder = 2 TabOrder = 2
end end
object edtOptional: TCheckBox object edtOptional: TCheckBox
Left = 20 Left = 20
Height = 13 Height = 19
Top = 218 Top = 218
Width = 105 Width = 111
Caption = 'Optional property' Caption = 'Optional property'
Font.Style = [fsItalic] Font.Style = [fsItalic]
TabOrder = 3 TabOrder = 3

View File

@ -25,9 +25,9 @@ LazarusResources.Add('TfPropEdit','FORMDATA',[
+#5'Width'#3#16#1#16'AutoCompleteText'#11#22'cbactEndOfLineComplete'#20'cbact' +#5'Width'#3#16#1#16'AutoCompleteText'#11#22'cbactEndOfLineComplete'#20'cbact'
+'SearchAscending'#0#10'ItemHeight'#2#13#9'MaxLength'#2#0#5'Style'#7#14'csDro' +'SearchAscending'#0#10'ItemHeight'#2#13#9'MaxLength'#2#0#5'Style'#7#14'csDro'
+'pDownList'#8'TabOrder'#2#1#0#0#9'TCheckBox'#12'edtAttribute'#4'Left'#2#20#6 +'pDownList'#8'TabOrder'#2#1#0#0#9'TCheckBox'#12'edtAttribute'#4'Left'#2#20#6
+'Height'#2#13#3'Top'#3#170#0#5'Width'#2'e'#7'Caption'#6#18'Attribute Propert' +'Height'#2#19#3'Top'#3#170#0#5'Width'#2'k'#7'Caption'#6#18'Attribute Propert'
+'y'#8'TabOrder'#2#2#0#0#9'TCheckBox'#11'edtOptional'#4'Left'#2#20#6'Height'#2 +'y'#8'TabOrder'#2#2#0#0#9'TCheckBox'#11'edtOptional'#4'Left'#2#20#6'Height'#2
+#13#3'Top'#3#218#0#5'Width'#2'i'#7'Caption'#6#17'Optional property'#10'Font.' +#19#3'Top'#3#218#0#5'Width'#2'o'#7'Caption'#6#17'Optional property'#10'Font.'
+'Style'#11#8'fsItalic'#0#8'TabOrder'#2#3#0#0#0#0#11'TActionList'#11'ActionLi' +'Style'#11#8'fsItalic'#0#8'TabOrder'#2#3#0#0#0#0#11'TActionList'#11'ActionLi'
+'st1'#4'left'#2'h'#3'top'#2'h'#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'#18'D' +'st1'#4'left'#2'h'#3'top'#2'h'#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'#18'D'
+'isableIfNoHandler'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'#7#11'actOK' +'isableIfNoHandler'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'#7#11'actOK'

View File

@ -134,6 +134,14 @@ var
begin begin
edtName.Text := ''; edtName.Text := '';
edtType.Clear(); edtType.Clear();
if Assigned(FClassObject) and
FClassObject.InheritsFrom(TPasClassType) and
Assigned(TPasClassType(FClassObject).AncestorType) and
TPasClassType(FClassObject).AncestorType.InheritsFrom(TPasNativeSimpleContentClassType)
then begin
edtAttribute.Checked := True;
edtAttribute.Enabled := False;
end;
edtType.Items.BeginUpdate(); edtType.Items.BeginUpdate();
try try
edtType.Items.Clear(); edtType.Items.Clear();

View File

@ -1,7 +1,7 @@
object fWstTypeLibraryEdit: TfWstTypeLibraryEdit object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
Left = 84 Left = 166
Height = 644 Height = 644
Top = 315 Top = 209
Width = 833 Width = 833
HorzScrollBar.Page = 832 HorzScrollBar.Page = 832
VertScrollBar.Page = 623 VertScrollBar.Page = 623
@ -78,9 +78,11 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
PopupMenu = PopupMenu2 PopupMenu = PopupMenu2
TabOrder = 0 TabOrder = 0
BookMarkOptions.Xoffset = 81 BookMarkOptions.Xoffset = 81
BookMarkOptions.OnChange = nil
Gutter.DigitCount = 5 Gutter.DigitCount = 5
Gutter.ShowLineNumbers = True Gutter.ShowLineNumbers = True
Gutter.ShowCodeFolding = True Gutter.ShowCodeFolding = True
Gutter.OnChange = nil
Gutter.CodeFoldingWidth = 14 Gutter.CodeFoldingWidth = 14
Highlighter = SynPasSyn1 Highlighter = SynPasSyn1
Keystrokes = < Keystrokes = <
@ -405,12 +407,11 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
ShortCut = 24642 ShortCut = 24642
end> end>
ReadOnly = True ReadOnly = True
SelectedColor.OnChange = nil
end end
end end
object tsWSDL: TTabSheet object tsWSDL: TTabSheet
Caption = '&WSDL' Caption = '&WSDL'
ClientHeight = 573
ClientWidth = 501
object srcWSDL: TSynEdit object srcWSDL: TSynEdit
Height = 573 Height = 573
Width = 501 Width = 501
@ -424,7 +425,9 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
PopupMenu = PopupMenu2 PopupMenu = PopupMenu2
TabOrder = 0 TabOrder = 0
BookMarkOptions.Xoffset = 54 BookMarkOptions.Xoffset = 54
BookMarkOptions.OnChange = nil
Gutter.ShowLineNumbers = True Gutter.ShowLineNumbers = True
Gutter.OnChange = nil
Gutter.CodeFoldingWidth = 14 Gutter.CodeFoldingWidth = 14
Highlighter = SynXMLSyn1 Highlighter = SynXMLSyn1
Keystrokes = < Keystrokes = <
@ -749,12 +752,11 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
ShortCut = 24642 ShortCut = 24642
end> end>
ReadOnly = True ReadOnly = True
SelectedColor.OnChange = nil
end end
end end
object tsProxy: TTabSheet object tsProxy: TTabSheet
Caption = '&Proxy' Caption = '&Proxy'
ClientHeight = 573
ClientWidth = 501
object srcProxy: TSynEdit object srcProxy: TSynEdit
Height = 573 Height = 573
Width = 501 Width = 501
@ -768,11 +770,9 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
PopupMenu = PopupMenu2 PopupMenu = PopupMenu2
TabOrder = 0 TabOrder = 0
BookMarkOptions.Xoffset = 81 BookMarkOptions.Xoffset = 81
BookMarkOptions.OnChange = nil
Gutter.DigitCount = 5 Gutter.DigitCount = 5
Gutter.ShowLineNumbers = True Gutter.ShowLineNumbers = True
Gutter.ShowCodeFolding = True Gutter.ShowCodeFolding = True
Gutter.OnChange = nil
Gutter.CodeFoldingWidth = 14 Gutter.CodeFoldingWidth = 14
Highlighter = SynPasSyn1 Highlighter = SynPasSyn1
Keystrokes = < Keystrokes = <
@ -1097,13 +1097,10 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
ShortCut = 24642 ShortCut = 24642
end> end>
ReadOnly = True ReadOnly = True
SelectedColor.OnChange = nil
end end
end end
object tsImp: TTabSheet object tsImp: TTabSheet
Caption = 'Im&plementation Skeleton' Caption = 'Im&plementation Skeleton'
ClientHeight = 573
ClientWidth = 501
object srcImp: TSynEdit object srcImp: TSynEdit
Height = 573 Height = 573
Width = 501 Width = 501
@ -1117,11 +1114,9 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
PopupMenu = PopupMenu2 PopupMenu = PopupMenu2
TabOrder = 0 TabOrder = 0
BookMarkOptions.Xoffset = 81 BookMarkOptions.Xoffset = 81
BookMarkOptions.OnChange = nil
Gutter.DigitCount = 5 Gutter.DigitCount = 5
Gutter.ShowLineNumbers = True Gutter.ShowLineNumbers = True
Gutter.ShowCodeFolding = True Gutter.ShowCodeFolding = True
Gutter.OnChange = nil
Gutter.CodeFoldingWidth = 14 Gutter.CodeFoldingWidth = 14
Highlighter = SynPasSyn1 Highlighter = SynPasSyn1
Keystrokes = < Keystrokes = <
@ -1446,13 +1441,10 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
ShortCut = 24642 ShortCut = 24642
end> end>
ReadOnly = True ReadOnly = True
SelectedColor.OnChange = nil
end end
end end
object tsBinder: TTabSheet object tsBinder: TTabSheet
Caption = '&Binder' Caption = '&Binder'
ClientHeight = 573
ClientWidth = 501
object srcBinder: TSynEdit object srcBinder: TSynEdit
Height = 573 Height = 573
Width = 501 Width = 501
@ -1466,12 +1458,10 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
PopupMenu = PopupMenu2 PopupMenu = PopupMenu2
TabOrder = 0 TabOrder = 0
BookMarkOptions.Xoffset = 81 BookMarkOptions.Xoffset = 81
BookMarkOptions.OnChange = nil
Gutter.AutoSize = True Gutter.AutoSize = True
Gutter.DigitCount = 5 Gutter.DigitCount = 5
Gutter.ShowLineNumbers = True Gutter.ShowLineNumbers = True
Gutter.ShowCodeFolding = True Gutter.ShowCodeFolding = True
Gutter.OnChange = nil
Gutter.CodeFoldingWidth = 14 Gutter.CodeFoldingWidth = 14
Highlighter = SynPasSyn1 Highlighter = SynPasSyn1
Keystrokes = < Keystrokes = <
@ -1796,13 +1786,10 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
ShortCut = 24642 ShortCut = 24642
end> end>
ReadOnly = True ReadOnly = True
SelectedColor.OnChange = nil
end end
end end
object tsLog: TTabSheet object tsLog: TTabSheet
Caption = '&Log' Caption = '&Log'
ClientHeight = 573
ClientWidth = 501
object mmoLog: TMemo object mmoLog: TMemo
Height = 573 Height = 573
Width = 501 Width = 501
@ -1865,6 +1852,10 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
Action = actRefreshView Action = actRefreshView
OnClick = actRefreshViewExecute OnClick = actRefreshViewExecute
end end
object MenuItem50: TMenuItem
Action = actSearch
OnClick = actSearchExecute
end
object MenuItem29: TMenuItem object MenuItem29: TMenuItem
Caption = '-' Caption = '-'
end end
@ -1935,6 +1926,7 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
Caption = 'Exit' Caption = 'Exit'
DisableIfNoHandler = True DisableIfNoHandler = True
OnExecute = actExitExecute OnExecute = actExitExecute
ShortCut = 16499
end end
object actExport: TAction object actExport: TAction
Caption = 'Save generated files ...' Caption = 'Save generated files ...'
@ -1968,11 +1960,13 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
Caption = '&Refresh Views' Caption = '&Refresh Views'
DisableIfNoHandler = True DisableIfNoHandler = True
OnExecute = actRefreshViewExecute OnExecute = actRefreshViewExecute
ShortCut = 116
end end
object actNewFile: TAction object actNewFile: TAction
Caption = 'New File' Caption = 'New File'
DisableIfNoHandler = True DisableIfNoHandler = True
OnExecute = actNewFileExecute OnExecute = actNewFileExecute
ShortCut = 16462
end end
object actCompoundCreate: TAction object actCompoundCreate: TAction
Caption = 'Create Class Type' Caption = 'Create Class Type'
@ -2021,6 +2015,13 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
DisableIfNoHandler = True DisableIfNoHandler = True
OnExecute = actRecordCreateExecute OnExecute = actRecordCreateExecute
end end
object actSearch: TAction
Caption = 'Search'
DisableIfNoHandler = True
OnExecute = actSearchExecute
OnUpdate = actSearchUpdate
ShortCut = 16454
end
end end
object OD: TOpenDialog object OD: TOpenDialog
Title = 'Ouvrir un fichier existant' Title = 'Ouvrir un fichier existant'
@ -2113,6 +2114,10 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
Action = actRefreshView Action = actRefreshView
OnClick = actRefreshViewExecute OnClick = actRefreshViewExecute
end end
object MenuItem49: TMenuItem
Action = actSearch
OnClick = actSearchExecute
end
object MenuItem19: TMenuItem object MenuItem19: TMenuItem
Caption = '-' Caption = '-'
end end
@ -2157,4 +2162,10 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
left = 466 left = 466
top = 252 top = 252
end end
object FD: TFindDialog
Title = 'Search'
OnFind = FDFind
left = 576
top = 143
end
end end

View File

@ -1,15 +1,15 @@
{ Ceci est un fichier ressource g�n�r� automatiquement par Lazarus } { Ceci est un fichier ressource g�n�r� automatiquement par Lazarus }
LazarusResources.Add('TfWstTypeLibraryEdit','FORMDATA',[ LazarusResources.Add('TfWstTypeLibraryEdit','FORMDATA',[
'TPF0'#20'TfWstTypeLibraryEdit'#19'fWstTypeLibraryEdit'#4'Left'#2'T'#6'Height' 'TPF0'#20'TfWstTypeLibraryEdit'#19'fWstTypeLibraryEdit'#4'Left'#3#166#0#6'Hei'
+#3#132#2#3'Top'#3';'#1#5'Width'#3'A'#3#18'HorzScrollBar.Page'#3'@'#3#18'Vert' +'ght'#3#132#2#3'Top'#3#209#0#5'Width'#3'A'#3#18'HorzScrollBar.Page'#3'@'#3#18
+'ScrollBar.Page'#3'o'#2#13'ActiveControl'#7#9'trvSchema'#7'Caption'#6'+[Web ' +'VertScrollBar.Page'#3'o'#2#13'ActiveControl'#7#9'trvSchema'#7'Caption'#6'+['
+'Services Toolkit ] Type Library Editor'#12'ClientHeight'#3'p'#2#11'ClientWi' +'Web Services Toolkit ] Type Library Editor'#12'ClientHeight'#3'p'#2#11'Clie'
+'dth'#3'A'#3#4'Menu'#7#9'MainMenu1'#7'OnClose'#7#9'FormClose'#6'OnShow'#7#8 +'ntWidth'#3'A'#3#4'Menu'#7#9'MainMenu1'#7'OnClose'#7#9'FormClose'#6'OnShow'#7
+'FormShow'#8'Position'#7#15'poDesktopCenter'#0#10'TStatusBar'#2'SB'#6'Height' +#8'FormShow'#8'Position'#7#15'poDesktopCenter'#0#10'TStatusBar'#2'SB'#6'Heig'
+#2#23#3'Top'#3'Y'#2#5'Width'#3'A'#3#6'Panels'#14#1#5'Width'#3','#1#0#1#5'Wid' +'ht'#2#23#3'Top'#3'Y'#2#5'Width'#3'A'#3#6'Panels'#14#1#5'Width'#3','#1#0#1#5
+'th'#2'2'#0#0#11'SimplePanel'#8#0#0#6'TPanel'#6'Panel1'#6'Height'#3'Y'#2#5'W' +'Width'#2'2'#0#0#11'SimplePanel'#8#0#0#6'TPanel'#6'Panel1'#6'Height'#3'Y'#2#5
+'idth'#3':'#1#5'Align'#7#6'alLeft'#12'ClientHeight'#3'Y'#2#11'ClientWidth'#3 +'Width'#3':'#1#5'Align'#7#6'alLeft'#12'ClientHeight'#3'Y'#2#11'ClientWidth'#3
+':'#1#8'TabOrder'#2#0#0#9'TTreeView'#9'trvSchema'#4'Left'#2#1#6'Height'#3'W' +':'#1#8'TabOrder'#2#0#0#9'TTreeView'#9'trvSchema'#4'Left'#2#1#6'Height'#3'W'
+#2#3'Top'#2#1#5'Width'#3'8'#1#5'Align'#7#8'alClient'#17'DefaultItemHeight'#2 +#2#3'Top'#2#1#5'Width'#3'8'#1#5'Align'#7#8'alClient'#17'DefaultItemHeight'#2
+#15#9'PopupMenu'#7#10'PopupMenu1'#8'TabOrder'#2#0#0#0#0#6'TPanel'#6'Panel2'#4 +#15#9'PopupMenu'#7#10'PopupMenu1'#8'TabOrder'#2#0#0#0#0#6'TPanel'#6'Panel2'#4
@ -22,17 +22,166 @@ LazarusResources.Add('TfWstTypeLibraryEdit','FORMDATA',[
+'='#2#5'Width'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHA' +'='#2#5'Width'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHA'
+'RSET'#10'Font.Color'#7#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'#6#7'Co' +'RSET'#10'Font.Color'#7#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'#6#7'Co'
+'urier'#10'Font.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'Popu' +'urier'#10'Font.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'Popu'
+'pMenu2'#8'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'Q'#17'Gutter.DigitCou' +'pMenu2'#8'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'Q'#24'BookMarkOptions'
+'nt'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gutter.ShowCodeFolding'#9#23'Gutter' +'.OnChange'#13#17'Gutter.DigitCount'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gut'
+'.CodeFoldingWidth'#2#14#11'Highlighter'#7#10'SynPasSyn1'#10'Keystrokes'#14#1 +'ter.ShowCodeFolding'#9#15'Gutter.OnChange'#13#23'Gutter.CodeFoldingWidth'#2
+#7'Command'#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7 +#14#11'Highlighter'#7#10'SynPasSyn1'#10'Keystrokes'#14#1#7'Command'#2#3#8'Sh'
+'Command'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7 +'ortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Command'#3#211#0#8
+'Command'#2'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1 +'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Command'#2'h'#8'S'
+#7'Command'#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7 +'hortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1#7'Command'#2#1#8
+'Command'#2#5#8'ShortCut'#3'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7 +'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7'Command'#2#5#8'S'
+'Command'#2#2#8'ShortCut'#2''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1#7 +'hortCut'#3'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7'Command'#2#2#8'S'
+'Command'#2#6#8'ShortCut'#3'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7 +'hortCut'#2''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1#7'Command'#2#6#8
+'Command'#2#10#8'ShortCut'#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7 +'ShortCut'#3'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7'Command'#2#10
+#8'ShortCut'#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7'Command'#2#14#8
+'ShortCut'#3'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7'Command'#2#9#8
+'ShortCut'#2'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'Command'#2#13#8
+'ShortCut'#3'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7'Command'#2#7#8
+'ShortCut'#2'$'#0#1#7'Command'#2'k'#8'ShortCut'#3'$ '#0#1#7'Command'#2#15#8
+'ShortCut'#3'$@'#0#1#7'Command'#2's'#8'ShortCut'#3'$`'#0#1#7'Command'#2#8#8
+'ShortCut'#2'#'#0#1#7'Command'#2'l'#8'ShortCut'#3'# '#0#1#7'Command'#2#16#8
+'ShortCut'#3'#@'#0#1#7'Command'#2't'#8'ShortCut'#3'#`'#0#1#7'Command'#3#223#0
+#8'ShortCut'#2'-'#0#1#7'Command'#3#201#0#8'ShortCut'#3'-@'#0#1#7'Command'#3
+'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2'.'#0#1#7'Comman'
+'d'#3'['#2#8'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCut'#2#8#0#1#7'Co'
+'mmand'#3#245#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'ShortCut'#3#8'@'
+#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command'#3'Z'#2#8'Short'
+'Cut'#4#8#160#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7'Command'#3
+#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@'#0#1#7'Comm'
+'and'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3'M@'#0#1#7
+'Command'#3#254#1#8'ShortCut'#3'N@'#0#1#7'Command'#3#247#1#8'ShortCut'#3'T@'
+#0#1#7'Command'#3'c'#2#8'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8'ShortCut'#3
+'V@'#0#1#7'Command'#3'['#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251#1#8'ShortC'
+'ut'#3'Y@'#0#1#7'Command'#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command'#3'Y'#2#8
+'ShortCut'#3'Z@'#0#1#7'Command'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Command'#3'-'
+#1#8'ShortCut'#3'0@'#0#1#7'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7'Command'#3
+'/'#1#8'ShortCut'#3'2@'#0#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0#1#7'Comman'
+'d'#3'1'#1#8'ShortCut'#3'4@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5@'#0#1#7'C'
+'ommand'#3'3'#1#8'ShortCut'#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut'#3'7@'#0#1
+#7'Command'#3'5'#1#8'ShortCut'#3'8@'#0#1#7'Command'#3'6'#1#8'ShortCut'#3'9@'
+#0#1#7'Command'#3'_'#1#8'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8'ShortCut'#3
+'1`'#0#1#7'Command'#3'a'#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b'#1#8'ShortCu'
+'t'#3'3`'#0#1#7'Command'#3'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3'd'#1#8'Sh'
+'ortCut'#3'5`'#0#1#7'Command'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Command'#3'f'#1
+#8'ShortCut'#3'7`'#0#1#7'Command'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'Command'#3
+'h'#1#8'ShortCut'#3'9`'#0#1#7'Command'#3#231#0#8'ShortCut'#3'N`'#0#1#7'Comma'
,'nd'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3'L`'#0#1#7
+'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'#3#9' '#0#1
+#7'Command'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#22'SelectedColor.OnC'
+'hange'#13#0#0#0#9'TTabSheet'#6'tsWSDL'#7'Caption'#6#5'&WSDL'#0#8'TSynEdit'#7
+'srcWSDL'#6'Height'#3'='#2#5'Width'#3#245#1#5'Align'#7#8'alClient'#12'Font.C'
+'harSet'#7#12'ANSI_CHARSET'#10'Font.Color'#7#7'clBlack'#11'Font.Height'#2#233
+#9'Font.Name'#6#7'Courier'#10'Font.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'P'
+'opupMenu'#7#10'PopupMenu2'#8'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'6'
+#24'BookMarkOptions.OnChange'#13#22'Gutter.ShowLineNumbers'#9#15'Gutter.OnCh'
+'ange'#13#23'Gutter.CodeFoldingWidth'#2#14#11'Highlighter'#7#10'SynXMLSyn1'
+#10'Keystrokes'#14#1#7'Command'#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'S'
+'hortCut'#3'& '#0#1#7'Command'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8
+'ShortCut'#2'('#0#1#7'Command'#2'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0
+#8'ShortCut'#3'(@'#0#1#7'Command'#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2'e'#8
+'ShortCut'#3'% '#0#1#7'Command'#2#5#8'ShortCut'#3'%@'#0#1#7'Command'#2'i'#8
+'ShortCut'#3'%`'#0#1#7'Command'#2#2#8'ShortCut'#2''''#0#1#7'Command'#2'f'#8
+'ShortCut'#3''' '#0#1#7'Command'#2#6#8'ShortCut'#3'''@'#0#1#7'Command'#2'j'#8
+'ShortCut'#3'''`'#0#1#7'Command'#2#10#8'ShortCut'#2'"'#0#1#7'Command'#2'n'#8
+'ShortCut'#3'" '#0#1#7'Command'#2#14#8'ShortCut'#3'"@'#0#1#7'Command'#2'r'#8
+'ShortCut'#3'"`'#0#1#7'Command'#2#9#8'ShortCut'#2'!'#0#1#7'Command'#2'm'#8'S'
+'hortCut'#3'! '#0#1#7'Command'#2#13#8'ShortCut'#3'!@'#0#1#7'Command'#2'q'#8
+'ShortCut'#3'!`'#0#1#7'Command'#2#7#8'ShortCut'#2'$'#0#1#7'Command'#2'k'#8'S'
+'hortCut'#3'$ '#0#1#7'Command'#2#15#8'ShortCut'#3'$@'#0#1#7'Command'#2's'#8
+'ShortCut'#3'$`'#0#1#7'Command'#2#8#8'ShortCut'#2'#'#0#1#7'Command'#2'l'#8'S'
+'hortCut'#3'# '#0#1#7'Command'#2#16#8'ShortCut'#3'#@'#0#1#7'Command'#2't'#8
+'ShortCut'#3'#`'#0#1#7'Command'#3#223#0#8'ShortCut'#2'-'#0#1#7'Command'#3#201
+#0#8'ShortCut'#3'-@'#0#1#7'Command'#3'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3
+#246#1#8'ShortCut'#2'.'#0#1#7'Command'#3'['#2#8'ShortCut'#3'. '#0#1#7'Comman'
+'d'#3#245#1#8'ShortCut'#2#8#0#1#7'Command'#3#245#1#8'ShortCut'#3#8' '#0#1#7
+'Command'#3#248#1#8'ShortCut'#3#8'@'#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8
+#128#0#0#0#1#7'Command'#3'Z'#2#8'ShortCut'#4#8#160#0#0#0#1#7'Command'#3#253#1
+#8'ShortCut'#2#13#0#1#7'Command'#3#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3
+#201#0#8'ShortCut'#3'C@'#0#1#7'Command'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Comma'
+'nd'#3#253#1#8'ShortCut'#3'M@'#0#1#7'Command'#3#254#1#8'ShortCut'#3'N@'#0#1#7
+'Command'#3#247#1#8'ShortCut'#3'T@'#0#1#7'Command'#3'c'#2#8'ShortCut'#3'U`'#0
+#1#7'Command'#3'\'#2#8'ShortCut'#3'V@'#0#1#7'Command'#3'['#2#8'ShortCut'#3'X'
+'@'#0#1#7'Command'#3#251#1#8'ShortCut'#3'Y@'#0#1#7'Command'#3#250#1#8'ShortC'
+'ut'#3'Y`'#0#1#7'Command'#3'Y'#2#8'ShortCut'#3'Z@'#0#1#7'Command'#3'Z'#2#8'S'
+'hortCut'#3'Z`'#0#1#7'Command'#3'-'#1#8'ShortCut'#3'0@'#0#1#7'Command'#3'.'#1
+#8'ShortCut'#3'1@'#0#1#7'Command'#3'/'#1#8'ShortCut'#3'2@'#0#1#7'Command'#3
+'0'#1#8'ShortCut'#3'3@'#0#1#7'Command'#3'1'#1#8'ShortCut'#3'4@'#0#1#7'Comman'
+'d'#3'2'#1#8'ShortCut'#3'5@'#0#1#7'Command'#3'3'#1#8'ShortCut'#3'6@'#0#1#7'C'
+'ommand'#3'4'#1#8'ShortCut'#3'7@'#0#1#7'Command'#3'5'#1#8'ShortCut'#3'8@'#0#1
+#7'Command'#3'6'#1#8'ShortCut'#3'9@'#0#1#7'Command'#3'_'#1#8'ShortCut'#3'0`'
+#0#1#7'Command'#3'`'#1#8'ShortCut'#3'1`'#0#1#7'Command'#3'a'#1#8'ShortCut'#3
+'2`'#0#1#7'Command'#3'b'#1#8'ShortCut'#3'3`'#0#1#7'Command'#3'c'#1#8'ShortCu'
+'t'#3'4`'#0#1#7'Command'#3'd'#1#8'ShortCut'#3'5`'#0#1#7'Command'#3'e'#1#8'Sh'
+'ortCut'#3'6`'#0#1#7'Command'#3'f'#1#8'ShortCut'#3'7`'#0#1#7'Command'#3'g'#1
+#8'ShortCut'#3'8`'#0#1#7'Command'#3'h'#1#8'ShortCut'#3'9`'#0#1#7'Command'#3
+#231#0#8'ShortCut'#3'N`'#0#1#7'Command'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Comm'
+'and'#3#233#0#8'ShortCut'#3'L`'#0#1#7'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7
+'Command'#3'e'#2#8'ShortCut'#3#9' '#0#1#7'Command'#3#250#0#8'ShortCut'#3'B`'
+#0#0#8'ReadOnly'#9#22'SelectedColor.OnChange'#13#0#0#0#9'TTabSheet'#7'tsProx'
+'y'#7'Caption'#6#6'&Proxy'#0#8'TSynEdit'#8'srcProxy'#6'Height'#3'='#2#5'Widt'
+'h'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'Fo'
+'nt.Color'#7#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'#6#7'Courier'#10'F'
+'ont.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'PopupMenu2'#8'T'
+'abOrder'#2#0#23'BookMarkOptions.Xoffset'#2'Q'#17'Gutter.DigitCount'#2#5#22
+'Gutter.ShowLineNumbers'#9#22'Gutter.ShowCodeFolding'#9#23'Gutter.CodeFoldin'
+'gWidth'#2#14#11'Highlighter'#7#10'SynPasSyn1'#10'Keystrokes'#14#1#7'Command'
+#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Command'#3
+#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Command'#2
+'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1#7'Command'
+#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7'Command'#2
,#5#8'ShortCut'#3'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7'Command'#2#2
+#8'ShortCut'#2''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1#7'Command'#2#6
+#8'ShortCut'#3'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7'Command'#2
+#10#8'ShortCut'#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7'Command'#2
+#14#8'ShortCut'#3'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7'Command'#2
+#9#8'ShortCut'#2'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'Command'#2#13
+#8'ShortCut'#3'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7'Command'#2#7#8
+'ShortCut'#2'$'#0#1#7'Command'#2'k'#8'ShortCut'#3'$ '#0#1#7'Command'#2#15#8
+'ShortCut'#3'$@'#0#1#7'Command'#2's'#8'ShortCut'#3'$`'#0#1#7'Command'#2#8#8
+'ShortCut'#2'#'#0#1#7'Command'#2'l'#8'ShortCut'#3'# '#0#1#7'Command'#2#16#8
+'ShortCut'#3'#@'#0#1#7'Command'#2't'#8'ShortCut'#3'#`'#0#1#7'Command'#3#223#0
+#8'ShortCut'#2'-'#0#1#7'Command'#3#201#0#8'ShortCut'#3'-@'#0#1#7'Command'#3
+'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2'.'#0#1#7'Comman'
+'d'#3'['#2#8'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCut'#2#8#0#1#7'Co'
+'mmand'#3#245#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'ShortCut'#3#8'@'
+#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command'#3'Z'#2#8'Short'
+'Cut'#4#8#160#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7'Command'#3
+#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@'#0#1#7'Comm'
+'and'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3'M@'#0#1#7
+'Command'#3#254#1#8'ShortCut'#3'N@'#0#1#7'Command'#3#247#1#8'ShortCut'#3'T@'
+#0#1#7'Command'#3'c'#2#8'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8'ShortCut'#3
+'V@'#0#1#7'Command'#3'['#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251#1#8'ShortC'
+'ut'#3'Y@'#0#1#7'Command'#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command'#3'Y'#2#8
+'ShortCut'#3'Z@'#0#1#7'Command'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Command'#3'-'
+#1#8'ShortCut'#3'0@'#0#1#7'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7'Command'#3
+'/'#1#8'ShortCut'#3'2@'#0#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0#1#7'Comman'
+'d'#3'1'#1#8'ShortCut'#3'4@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5@'#0#1#7'C'
+'ommand'#3'3'#1#8'ShortCut'#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut'#3'7@'#0#1
+#7'Command'#3'5'#1#8'ShortCut'#3'8@'#0#1#7'Command'#3'6'#1#8'ShortCut'#3'9@'
+#0#1#7'Command'#3'_'#1#8'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8'ShortCut'#3
+'1`'#0#1#7'Command'#3'a'#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b'#1#8'ShortCu'
+'t'#3'3`'#0#1#7'Command'#3'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3'd'#1#8'Sh'
+'ortCut'#3'5`'#0#1#7'Command'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Command'#3'f'#1
+#8'ShortCut'#3'7`'#0#1#7'Command'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'Command'#3
+'h'#1#8'ShortCut'#3'9`'#0#1#7'Command'#3#231#0#8'ShortCut'#3'N`'#0#1#7'Comma'
+'nd'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3'L`'#0#1#7
+'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'#3#9' '#0#1
+#7'Command'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#0#0#0#9'TTabSheet'#5
+'tsImp'#7'Caption'#6#24'Im&plementation Skeleton'#0#8'TSynEdit'#6'srcImp'#6
+'Height'#3'='#2#5'Width'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12
+'ANSI_CHARSET'#10'Font.Color'#7#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'
+#6#7'Courier'#10'Font.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10
+'PopupMenu2'#8'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'Q'#17'Gutter.Digi'
+'tCount'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gutter.ShowCodeFolding'#9#23'Gu'
+'tter.CodeFoldingWidth'#2#14#11'Highlighter'#7#10'SynPasSyn1'#10'Keystrokes'
+#14#1#7'Command'#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0
+#1#7'Command'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0
+#1#7'Command'#2'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'
+#0#1#7'Command'#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0
+#1#7'Command'#2#5#8'ShortCut'#3'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1
+#7'Command'#2#2#8'ShortCut'#2''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1
+#7'Command'#2#6#8'ShortCut'#3'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1
+#7'Command'#2#10#8'ShortCut'#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7
+'Command'#2#14#8'ShortCut'#3'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7 +'Command'#2#14#8'ShortCut'#3'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7
+'Command'#2#9#8'ShortCut'#2'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'C' +'Command'#2#9#8'ShortCut'#2'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'C'
+'ommand'#2#13#8'ShortCut'#3'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7 +'ommand'#2#13#8'ShortCut'#3'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7
@ -44,56 +193,7 @@ LazarusResources.Add('TfWstTypeLibraryEdit','FORMDATA',[
+#1#7'Command'#3'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2 +#1#7'Command'#3'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2
+'.'#0#1#7'Command'#3'['#2#8'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCu' +'.'#0#1#7'Command'#3'['#2#8'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCu'
+'t'#2#8#0#1#7'Command'#3#245#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'S' +'t'#2#8#0#1#7'Command'#3#245#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'S'
+'hortCut'#3#8'@'#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command' ,'hortCut'#3#8'@'#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command'
+#3'Z'#2#8'ShortCut'#4#8#160#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7
+'Command'#3#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@'
+#0#1#7'Command'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3
+'M@'#0#1#7'Command'#3#254#1#8'ShortCut'#3'N@'#0#1#7'Command'#3#247#1#8'Short'
+'Cut'#3'T@'#0#1#7'Command'#3'c'#2#8'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8
+'ShortCut'#3'V@'#0#1#7'Command'#3'['#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251
+#1#8'ShortCut'#3'Y@'#0#1#7'Command'#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command'
+#3'Y'#2#8'ShortCut'#3'Z@'#0#1#7'Command'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Comm'
+'and'#3'-'#1#8'ShortCut'#3'0@'#0#1#7'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7
+'Command'#3'/'#1#8'ShortCut'#3'2@'#0#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0
+#1#7'Command'#3'1'#1#8'ShortCut'#3'4@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5'
+'@'#0#1#7'Command'#3'3'#1#8'ShortCut'#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut'
+#3'7@'#0#1#7'Command'#3'5'#1#8'ShortCut'#3'8@'#0#1#7'Command'#3'6'#1#8'Short'
+'Cut'#3'9@'#0#1#7'Command'#3'_'#1#8'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8
+'ShortCut'#3'1`'#0#1#7'Command'#3'a'#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b'
+#1#8'ShortCut'#3'3`'#0#1#7'Command'#3'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3
+'d'#1#8'ShortCut'#3'5`'#0#1#7'Command'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Comman'
+'d'#3'f'#1#8'ShortCut'#3'7`'#0#1#7'Command'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'C'
+'ommand'#3'h'#1#8'ShortCut'#3'9`'#0#1#7'Command'#3#231#0#8'ShortCut'#3'N`'#0
+#1#7'Command'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3
,'L`'#0#1#7'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'
+#3#9' '#0#1#7'Command'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#0#0#0#9'T'
+'TabSheet'#6'tsWSDL'#7'Caption'#6#5'&WSDL'#12'ClientHeight'#3'='#2#11'Client'
+'Width'#3#245#1#0#8'TSynEdit'#7'srcWSDL'#6'Height'#3'='#2#5'Width'#3#245#1#5
+'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'Font.Color'#7#7
+'clBlack'#11'Font.Height'#2#233#9'Font.Name'#6#7'Courier'#10'Font.Pitch'#7#7
+'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'PopupMenu2'#8'TabOrder'#2#0#23
+'BookMarkOptions.Xoffset'#2'6'#22'Gutter.ShowLineNumbers'#9#23'Gutter.CodeFo'
+'ldingWidth'#2#14#11'Highlighter'#7#10'SynXMLSyn1'#10'Keystrokes'#14#1#7'Com'
+'mand'#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Comm'
+'and'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Co'
+'mmand'#2'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1#7
+'Command'#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7'C'
+'ommand'#2#5#8'ShortCut'#3'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7'C'
+'ommand'#2#2#8'ShortCut'#2''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1#7
+'Command'#2#6#8'ShortCut'#3'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7
+'Command'#2#10#8'ShortCut'#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7
+'Command'#2#14#8'ShortCut'#3'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7
+'Command'#2#9#8'ShortCut'#2'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'C'
+'ommand'#2#13#8'ShortCut'#3'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7
+'Command'#2#7#8'ShortCut'#2'$'#0#1#7'Command'#2'k'#8'ShortCut'#3'$ '#0#1#7'C'
+'ommand'#2#15#8'ShortCut'#3'$@'#0#1#7'Command'#2's'#8'ShortCut'#3'$`'#0#1#7
+'Command'#2#8#8'ShortCut'#2'#'#0#1#7'Command'#2'l'#8'ShortCut'#3'# '#0#1#7'C'
+'ommand'#2#16#8'ShortCut'#3'#@'#0#1#7'Command'#2't'#8'ShortCut'#3'#`'#0#1#7
+'Command'#3#223#0#8'ShortCut'#2'-'#0#1#7'Command'#3#201#0#8'ShortCut'#3'-@'#0
+#1#7'Command'#3'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2
+'.'#0#1#7'Command'#3'['#2#8'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCu'
+'t'#2#8#0#1#7'Command'#3#245#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'S'
+'hortCut'#3#8'@'#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command'
+#3'Z'#2#8'ShortCut'#4#8#160#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7 +#3'Z'#2#8'ShortCut'#4#8#160#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7
+'Command'#3#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@' +'Command'#3#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@'
+#0#1#7'Command'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3 +#0#1#7'Command'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3
@ -116,270 +216,172 @@ LazarusResources.Add('TfWstTypeLibraryEdit','FORMDATA',[
+#1#7'Command'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3 +#1#7'Command'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3
+'L`'#0#1#7'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut' +'L`'#0#1#7'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'
+#3#9' '#0#1#7'Command'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#0#0#0#9'T' +#3#9' '#0#1#7'Command'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#0#0#0#9'T'
+'TabSheet'#7'tsProxy'#7'Caption'#6#6'&Proxy'#12'ClientHeight'#3'='#2#11'Clie' +'TabSheet'#8'tsBinder'#7'Caption'#6#7'&Binder'#0#8'TSynEdit'#9'srcBinder'#6
+'ntWidth'#3#245#1#0#8'TSynEdit'#8'srcProxy'#6'Height'#3'='#2#5'Width'#3#245#1 +'Height'#3'='#2#5'Width'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12
+#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'Font.Color'#7 +'ANSI_CHARSET'#10'Font.Color'#7#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'
+#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'#6#7'Courier'#10'Font.Pitch'#7 +#6#7'Courier'#10'Font.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10
+#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'PopupMenu2'#8'TabOrder'#2#0 +'PopupMenu2'#8'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'Q'#15'Gutter.Auto'
+#23'BookMarkOptions.Xoffset'#2'Q'#24'BookMarkOptions.OnChange'#13#17'Gutter.' +'Size'#9#17'Gutter.DigitCount'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gutter.Sh'
+'DigitCount'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gutter.ShowCodeFolding'#9#15 +'owCodeFolding'#9#23'Gutter.CodeFoldingWidth'#2#14#11'Highlighter'#7#10'SynP'
+'Gutter.OnChange'#13#23'Gutter.CodeFoldingWidth'#2#14#11'Highlighter'#7#10'S' +'asSyn1'#10'Keystrokes'#14#1#7'Command'#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2
+'ynPasSyn1'#10'Keystrokes'#14#1#7'Command'#2#3#8'ShortCut'#2'&'#0#1#7'Comman' +'g'#8'ShortCut'#3'& '#0#1#7'Command'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Command'
+'d'#2'g'#8'ShortCut'#3'& '#0#1#7'Command'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Co' +#2#4#8'ShortCut'#2'('#0#1#7'Command'#2'h'#8'ShortCut'#3'( '#0#1#7'Command'#3
+'mmand'#2#4#8'ShortCut'#2'('#0#1#7'Command'#2'h'#8'ShortCut'#3'( '#0#1#7'Com' +#212#0#8'ShortCut'#3'(@'#0#1#7'Command'#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2
+'mand'#3#212#0#8'ShortCut'#3'(@'#0#1#7'Command'#2#1#8'ShortCut'#2'%'#0#1#7'C' +'e'#8'ShortCut'#3'% '#0#1#7'Command'#2#5#8'ShortCut'#3'%@'#0#1#7'Command'#2
+'ommand'#2'e'#8'ShortCut'#3'% '#0#1#7'Command'#2#5#8'ShortCut'#3'%@'#0#1#7'C' +'i'#8'ShortCut'#3'%`'#0#1#7'Command'#2#2#8'ShortCut'#2''''#0#1#7'Command'#2
,'ommand'#2'i'#8'ShortCut'#3'%`'#0#1#7'Command'#2#2#8'ShortCut'#2''''#0#1#7'C' +'f'#8'ShortCut'#3''' '#0#1#7'Command'#2#6#8'ShortCut'#3'''@'#0#1#7'Command'#2
+'ommand'#2'f'#8'ShortCut'#3''' '#0#1#7'Command'#2#6#8'ShortCut'#3'''@'#0#1#7 +'j'#8'ShortCut'#3'''`'#0#1#7'Command'#2#10#8'ShortCut'#2'"'#0#1#7'Command'#2
+'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7'Command'#2#10#8'ShortCut'#2'"'#0#1#7 +'n'#8'ShortCut'#3'" '#0#1#7'Command'#2#14#8'ShortCut'#3'"@'#0#1#7'Command'#2
+'Command'#2'n'#8'ShortCut'#3'" '#0#1#7'Command'#2#14#8'ShortCut'#3'"@'#0#1#7 +'r'#8'ShortCut'#3'"`'#0#1#7'Command'#2#9#8'ShortCut'#2'!'#0#1#7'Command'#2'm'
+'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7'Command'#2#9#8'ShortCut'#2'!'#0#1#7'C' +#8'ShortCut'#3'! '#0#1#7'Command'#2#13#8'ShortCut'#3'!@'#0#1#7'Command'#2'q'
+'ommand'#2'm'#8'ShortCut'#3'! '#0#1#7'Command'#2#13#8'ShortCut'#3'!@'#0#1#7 +#8'ShortCut'#3'!`'#0#1#7'Command'#2#7#8'ShortCut'#2'$'#0#1#7'Command'#2'k'#8
+'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7'Command'#2#7#8'ShortCut'#2'$'#0#1#7'C' +'ShortCut'#3'$ '#0#1#7'Command'#2#15#8'ShortCut'#3'$@'#0#1#7'Command'#2's'#8
+'ommand'#2'k'#8'ShortCut'#3'$ '#0#1#7'Command'#2#15#8'ShortCut'#3'$@'#0#1#7 +'ShortCut'#3'$`'#0#1#7'Command'#2#8#8'ShortCut'#2'#'#0#1#7'Command'#2'l'#8'S'
+'Command'#2's'#8'ShortCut'#3'$`'#0#1#7'Command'#2#8#8'ShortCut'#2'#'#0#1#7'C' +'hortCut'#3'# '#0#1#7'Command'#2#16#8'ShortCut'#3'#@'#0#1#7'Command'#2't'#8
+'ommand'#2'l'#8'ShortCut'#3'# '#0#1#7'Command'#2#16#8'ShortCut'#3'#@'#0#1#7 +'ShortCut'#3'#`'#0#1#7'Command'#3#223#0#8'ShortCut'#2'-'#0#1#7'Command'#3#201
+'Command'#2't'#8'ShortCut'#3'#`'#0#1#7'Command'#3#223#0#8'ShortCut'#2'-'#0#1 +#0#8'ShortCut'#3'-@'#0#1#7'Command'#3'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3
+#7'Command'#3#201#0#8'ShortCut'#3'-@'#0#1#7'Command'#3'\'#2#8'ShortCut'#3'- ' +#246#1#8'ShortCut'#2'.'#0#1#7'Command'#3'['#2#8'ShortCut'#3'. '#0#1#7'Comman'
+#0#1#7'Command'#3#246#1#8'ShortCut'#2'.'#0#1#7'Command'#3'['#2#8'ShortCut'#3 +'d'#3#245#1#8'ShortCut'#2#8#0#1#7'Command'#3#245#1#8'ShortCut'#3#8' '#0#1#7
+'. '#0#1#7'Command'#3#245#1#8'ShortCut'#2#8#0#1#7'Command'#3#245#1#8'ShortCu' +'Command'#3#248#1#8'ShortCut'#3#8'@'#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8
+'t'#3#8' '#0#1#7'Command'#3#248#1#8'ShortCut'#3#8'@'#0#1#7'Command'#3'Y'#2#8 +#128#0#0#0#1#7'Command'#3'Z'#2#8'ShortCut'#4#8#160#0#0#0#1#7'Command'#3#253#1
+'ShortCut'#4#8#128#0#0#0#1#7'Command'#3'Z'#2#8'ShortCut'#4#8#160#0#0#0#1#7'C' +#8'ShortCut'#2#13#0#1#7'Command'#3#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3
+'ommand'#3#253#1#8'ShortCut'#2#13#0#1#7'Command'#3#199#0#8'ShortCut'#3'A@'#0 +#201#0#8'ShortCut'#3'C@'#0#1#7'Command'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Comma'
+#1#7'Command'#3#201#0#8'ShortCut'#3'C@'#0#1#7'Command'#3'b'#2#8'ShortCut'#3 +'nd'#3#253#1#8'ShortCut'#3'M@'#0#1#7'Command'#3#254#1#8'ShortCut'#3'N@'#0#1#7
+'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3'M@'#0#1#7'Command'#3#254#1#8'Short' +'Command'#3#247#1#8'ShortCut'#3'T@'#0#1#7'Command'#3'c'#2#8'ShortCut'#3'U`'#0
+'Cut'#3'N@'#0#1#7'Command'#3#247#1#8'ShortCut'#3'T@'#0#1#7'Command'#3'c'#2#8 +#1#7'Command'#3'\'#2#8'ShortCut'#3'V@'#0#1#7'Command'#3'['#2#8'ShortCut'#3'X'
+'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8'ShortCut'#3'V@'#0#1#7'Command'#3'[' +'@'#0#1#7'Command'#3#251#1#8'ShortCut'#3'Y@'#0#1#7'Command'#3#250#1#8'ShortC'
+#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251#1#8'ShortCut'#3'Y@'#0#1#7'Command' +'ut'#3'Y`'#0#1#7'Command'#3'Y'#2#8'ShortCut'#3'Z@'#0#1#7'Command'#3'Z'#2#8'S'
+#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command'#3'Y'#2#8'ShortCut'#3'Z@'#0#1#7'Com' +'hortCut'#3'Z`'#0#1#7'Command'#3'-'#1#8'ShortCut'#3'0@'#0#1#7'Command'#3'.'#1
+'mand'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Command'#3'-'#1#8'ShortCut'#3'0@'#0#1#7 +#8'ShortCut'#3'1@'#0#1#7'Command'#3'/'#1#8'ShortCut'#3'2@'#0#1#7'Command'#3
+'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7'Command'#3'/'#1#8'ShortCut'#3'2@'#0 +'0'#1#8'ShortCut'#3'3@'#0#1#7'Command'#3'1'#1#8'ShortCut'#3'4@'#0#1#7'Comman'
+#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0#1#7'Command'#3'1'#1#8'ShortCut'#3'4' +'d'#3'2'#1#8'ShortCut'#3'5@'#0#1#7'Command'#3'3'#1#8'ShortCut'#3'6@'#0#1#7'C'
+'@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5@'#0#1#7'Command'#3'3'#1#8'ShortCut' +'ommand'#3'4'#1#8'ShortCut'#3'7@'#0#1#7'Command'#3'5'#1#8'ShortCut'#3'8@'#0#1
+#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut'#3'7@'#0#1#7'Command'#3'5'#1#8'Short' +#7'Command'#3'6'#1#8'ShortCut'#3'9@'#0#1#7'Command'#3'_'#1#8'ShortCut'#3'0`'
+'Cut'#3'8@'#0#1#7'Command'#3'6'#1#8'ShortCut'#3'9@'#0#1#7'Command'#3'_'#1#8 ,#0#1#7'Command'#3'`'#1#8'ShortCut'#3'1`'#0#1#7'Command'#3'a'#1#8'ShortCut'#3
+'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8'ShortCut'#3'1`'#0#1#7'Command'#3'a' +'2`'#0#1#7'Command'#3'b'#1#8'ShortCut'#3'3`'#0#1#7'Command'#3'c'#1#8'ShortCu'
+#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b'#1#8'ShortCut'#3'3`'#0#1#7'Command'#3 +'t'#3'4`'#0#1#7'Command'#3'd'#1#8'ShortCut'#3'5`'#0#1#7'Command'#3'e'#1#8'Sh'
+'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3'd'#1#8'ShortCut'#3'5`'#0#1#7'Comman' +'ortCut'#3'6`'#0#1#7'Command'#3'f'#1#8'ShortCut'#3'7`'#0#1#7'Command'#3'g'#1
+'d'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Command'#3'f'#1#8'ShortCut'#3'7`'#0#1#7'C' +#8'ShortCut'#3'8`'#0#1#7'Command'#3'h'#1#8'ShortCut'#3'9`'#0#1#7'Command'#3
+'ommand'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'Command'#3'h'#1#8'ShortCut'#3'9`'#0#1 +#231#0#8'ShortCut'#3'N`'#0#1#7'Command'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Comm'
+#7'Command'#3#231#0#8'ShortCut'#3'N`'#0#1#7'Command'#3#232#0#8'ShortCut'#3'C' +'and'#3#233#0#8'ShortCut'#3'L`'#0#1#7'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7
+'`'#0#1#7'Command'#3#233#0#8'ShortCut'#3'L`'#0#1#7'Command'#3'd'#2#8'ShortCu' +'Command'#3'e'#2#8'ShortCut'#3#9' '#0#1#7'Command'#3#250#0#8'ShortCut'#3'B`'
+'t'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'#3#9' '#0#1#7'Command'#3#250#0#8'Sh' +#0#0#8'ReadOnly'#9#0#0#0#9'TTabSheet'#5'tsLog'#7'Caption'#6#4'&Log'#0#5'TMem'
+'ortCut'#3'B`'#0#0#8'ReadOnly'#9#22'SelectedColor.OnChange'#13#0#0#0#9'TTabS' +'o'#6'mmoLog'#6'Height'#3'='#2#5'Width'#3#245#1#5'Align'#7#8'alClient'#13'Li'
+'heet'#5'tsImp'#7'Caption'#6#24'Im&plementation Skeleton'#12'ClientHeight'#3 +'nes.Strings'#1#6#0#0#10'ScrollBars'#7#6'ssBoth'#8'TabOrder'#2#0#0#0#0#0#0#9
+'='#2#11'ClientWidth'#3#245#1#0#8'TSynEdit'#6'srcImp'#6'Height'#3'='#2#5'Wid' +'TSplitter'#9'Splitter1'#4'Left'#3':'#1#6'Height'#3'Y'#2#5'Width'#2#8#5'Colo'
+'th'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'F' +'r'#7#7'clBlack'#11'ParentColor'#8#0#0#9'TMainMenu'#9'MainMenu1'#4'left'#3'`'
+'ont.Color'#7#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'#6#7'Courier'#10 +#1#3'top'#2'p'#0#9'TMenuItem'#9'MenuItem1'#7'Caption'#6#6'&Files'#0#9'TMenuI'
+'Font.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'PopupMenu2'#8 +'tem'#10'MenuItem16'#6'Action'#7#10'actNewFile'#7'OnClick'#7#17'actNewFileEx'
+'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'Q'#24'BookMarkOptions.OnChange' +'ecute'#0#0#9'TMenuItem'#9'MenuItem2'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#9'M'
+#13#17'Gutter.DigitCount'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gutter.ShowCod' +'enuItem5'#6'Action'#7#11'actOpenFile'#7'OnClick'#7#18'actOpenFileExecute'#0
+'eFolding'#9#15'Gutter.OnChange'#13#23'Gutter.CodeFoldingWidth'#2#14#11'High' +#0#9'TMenuItem'#9'MenuItem3'#6'Action'#7#9'actExport'#7'OnClick'#7#16'actExp'
+'lighter'#7#10'SynPasSyn1'#10'Keystrokes'#14#1#7'Command'#2#3#8'ShortCut'#2 +'ortExecute'#0#0#9'TMenuItem'#9'MenuItem7'#6'Action'#7#7'actSave'#7'OnClick'
+'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Command'#3#211#0#8'ShortCut' +#7#14'actSaveExecute'#0#0#9'TMenuItem'#10'MenuItem32'#6'Action'#7#9'actSaveA'
+#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Command'#2'h'#8'ShortCut'#3 +'s'#7'OnClick'#7#16'actSaveAsExecute'#0#0#9'TMenuItem'#10'MenuItem17'#7'Capt'
+'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1#7'Command'#2#1#8'ShortCut' +'ion'#6#1'-'#0#0#9'TMenuItem'#9'MenuItem4'#6'Action'#7#7'actExit'#7'OnClick'
+#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7'Command'#2#5#8'ShortCut'#3 +#7#14'actExitExecute'#0#0#0#9'TMenuItem'#10'MenuItem14'#7'Caption'#6#5'&View'
+'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7'Command'#2#2#8'ShortCut'#2 +#0#9'TMenuItem'#10'MenuItem15'#6'Action'#7#14'actRefreshView'#7'OnClick'#7#21
+''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1#7'Command'#2#6#8'ShortCut'#3 +'actRefreshViewExecute'#0#0#9'TMenuItem'#10'MenuItem50'#6'Action'#7#9'actSea'
+'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7'Command'#2#10#8'ShortCut' +'rch'#7'OnClick'#7#16'actSearchExecute'#0#0#9'TMenuItem'#10'MenuItem29'#7'Ca'
+#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7'Command'#2#14#8'ShortCut'#3 +'ption'#6#1'-'#0#0#9'TMenuItem'#10'MenuItem30'#6'Action'#7#13'actFullExpand'
+'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7'Command'#2#9#8'ShortCut'#2 +#7'OnClick'#7#20'actFullExpandExecute'#0#0#9'TMenuItem'#10'MenuItem31'#6'Act'
+'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'Command'#2#13#8'ShortCut'#3 +'ion'#7#15'actFullCollapse'#7'OnClick'#7#22'actFullCollapseExecute'#0#0#0#9
+'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7'Command'#2#7#8'ShortCut'#2 +'TMenuItem'#10'MenuItem10'#7'Caption'#6#8'&Edition'#0#9'TMenuItem'#10'MenuIt'
+'$'#0#1#7'Command'#2'k'#8'ShortCut'#3'$ '#0#1#7'Command'#2#15#8'ShortCut'#3 +'em11'#6'Action'#7#13'actEnumCreate'#7'OnClick'#7#20'actEnumCreateExecute'#0
+'$@'#0#1#7'Command'#2's'#8'ShortCut'#3'$`'#0#1#7'Command'#2#8#8'ShortCut'#2 +#0#9'TMenuItem'#10'MenuItem23'#6'Action'#7#17'actCompoundCreate'#7'OnClick'#7
+'#'#0#1#7'Command'#2'l'#8'ShortCut'#3'# '#0#1#7'Command'#2#16#8'ShortCut'#3 +#24'actCompoundCreateExecute'#0#0#9'TMenuItem'#10'MenuItem48'#6'Action'#7#15
+'#@'#0#1#7'Command'#2't'#8'ShortCut'#3'#`'#0#1#7'Command'#3#223#0#8'ShortCut' +'actRecordCreate'#7'OnClick'#7#22'actRecordCreateExecute'#0#0#9'TMenuItem'#10
+#2'-'#0#1#7'Command'#3#201#0#8'ShortCut'#3'-@'#0#1#7'Command'#3'\'#2#8'Short' +'MenuItem25'#6'Action'#7#13'actIntfCreate'#7'OnClick'#7#20'actIntfCreateExec'
+'Cut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2'.'#0#1#7'Command'#3'['#2#8 +'ute'#0#0#9'TMenuItem'#10'MenuItem35'#6'Action'#7#14'actArrayCreate'#7'OnCli'
,'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCut'#2#8#0#1#7'Command'#3#245 +'ck'#7#21'actArrayCreateExecute'#0#0#9'TMenuItem'#10'MenuItem36'#6'Action'#7
+#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'ShortCut'#3#8'@'#0#1#7'Comman' +#18'actTypeALiasCreate'#7'OnClick'#7#25'actTypeALiasCreateExecute'#0#0#9'TMe'
+'d'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command'#3'Z'#2#8'ShortCut'#4#8#160 +'nuItem'#10'MenuItem12'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#10'MenuItem13'#6
+#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7'Command'#3#199#0#8'ShortC' +'Action'#7#15'actUpdateObject'#7'Caption'#6#13'Update Object'#7'OnClick'#7#22
+'ut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@'#0#1#7'Command'#3'b'#2#8 +'actUpdateObjectExecute'#0#0#9'TMenuItem'#10'MenuItem34'#6'Action'#7#9'actDe'
+'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3'M@'#0#1#7'Command'#3 +'lete'#7'OnClick'#7#16'actDeleteExecute'#0#0#0#9'TMenuItem'#9'MenuItem6'#6'A'
+#254#1#8'ShortCut'#3'N@'#0#1#7'Command'#3#247#1#8'ShortCut'#3'T@'#0#1#7'Comm' +'ction'#7#8'actAbout'#7'Caption'#6#6'&About'#7'OnClick'#7#15'actAboutExecute'
+'and'#3'c'#2#8'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8'ShortCut'#3'V@'#0#1#7 +#0#0#0#11'TActionList'#2'AL'#4'left'#3'X'#1#3'top'#2'8'#0#7'TAction'#11'actO'
+'Command'#3'['#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251#1#8'ShortCut'#3'Y@'#0 +'penFile'#7'Caption'#6#9'Open File'#18'DisableIfNoHandler'#9#9'OnExecute'#7
+#1#7'Command'#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command'#3'Y'#2#8'ShortCut'#3 +#18'actOpenFileExecute'#8'ShortCut'#3'O@'#0#0#7'TAction'#7'actExit'#7'Captio'
+'Z@'#0#1#7'Command'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Command'#3'-'#1#8'ShortCu' +'n'#6#4'Exit'#18'DisableIfNoHandler'#9#9'OnExecute'#7#14'actExitExecute'#8'S'
+'t'#3'0@'#0#1#7'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7'Command'#3'/'#1#8'Sh' +'hortCut'#3's@'#0#0#7'TAction'#9'actExport'#7'Caption'#6#24'Save generated f'
+'ortCut'#3'2@'#0#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0#1#7'Command'#3'1'#1 +'iles ...'#18'DisableIfNoHandler'#9#9'OnExecute'#7#16'actExportExecute'#8'On'
+#8'ShortCut'#3'4@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5@'#0#1#7'Command'#3 +'Update'#7#15'actExportUpdate'#0#0#7'TAction'#8'actAbout'#7'Caption'#6#5'Abo'
+'3'#1#8'ShortCut'#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut'#3'7@'#0#1#7'Comman' +'ut'#18'DisableIfNoHandler'#9#9'OnExecute'#7#15'actAboutExecute'#0#0#7'TActi'
+'d'#3'5'#1#8'ShortCut'#3'8@'#0#1#7'Command'#3'6'#1#8'ShortCut'#3'9@'#0#1#7'C' +'on'#9'actSaveAs'#7'Caption'#6#11'Save As ...'#18'DisableIfNoHandler'#9#9'On'
+'ommand'#3'_'#1#8'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8'ShortCut'#3'1`'#0#1 +'Execute'#7#16'actSaveAsExecute'#8'OnUpdate'#7#15'actExportUpdate'#0#0#7'TAc'
+#7'Command'#3'a'#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b'#1#8'ShortCut'#3'3`' +'tion'#13'actEnumCreate'#7'Caption'#6#18'Create Enumeration'#18'DisableIfNoH'
+#0#1#7'Command'#3'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3'd'#1#8'ShortCut'#3 +'andler'#9#9'OnExecute'#7#20'actEnumCreateExecute'#0#0#7'TAction'#15'actUpda'
+'5`'#0#1#7'Command'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Command'#3'f'#1#8'ShortCu' +'teObject'#7'Caption'#6#6'Update'#18'DisableIfNoHandler'#9#9'OnExecute'#7#22
+'t'#3'7`'#0#1#7'Command'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'Command'#3'h'#1#8'Sh' +'actUpdateObjectExecute'#8'OnUpdate'#7#21'actUpdateObjectUpdate'#0#0#7'TActi'
+'ortCut'#3'9`'#0#1#7'Command'#3#231#0#8'ShortCut'#3'N`'#0#1#7'Command'#3#232 +'on'#14'actRefreshView'#7'Caption'#6#14'&Refresh Views'#18'DisableIfNoHandle'
+#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3'L`'#0#1#7'Command' +'r'#9#9'OnExecute'#7#21'actRefreshViewExecute'#8'ShortCut'#2't'#0#0#7'TActio'
+#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'#3#9' '#0#1#7'Comma' +'n'#10'actNewFile'#7'Caption'#6#8'New File'#18'DisableIfNoHandler'#9#9'OnExe'
+'nd'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#22'SelectedColor.OnChange' +'cute'#7#17'actNewFileExecute'#8'ShortCut'#3'N@'#0#0#7'TAction'#17'actCompou'
+#13#0#0#0#9'TTabSheet'#8'tsBinder'#7'Caption'#6#7'&Binder'#12'ClientHeight'#3 +'ndCreate'#7'Caption'#6#17'Create Class Type'#18'DisableIfNoHandler'#9#9'OnE'
+'='#2#11'ClientWidth'#3#245#1#0#8'TSynEdit'#9'srcBinder'#6'Height'#3'='#2#5 +'xecute'#7#24'actCompoundCreateExecute'#0#0#7'TAction'#13'actIntfCreate'#7'C'
+'Width'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10 +'aption'#6#16'Create Interface'#18'DisableIfNoHandler'#9#9'OnExecute'#7#20'a'
+'Font.Color'#7#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'#6#7'Courier'#10 ,'ctIntfCreateExecute'#0#0#7'TAction'#13'actFullExpand'#7'Caption'#6#11'Full '
+'Font.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'PopupMenu2'#8 +'expand'#18'DisableIfNoHandler'#9#9'OnExecute'#7#20'actFullExpandExecute'#0#0
+'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'Q'#24'BookMarkOptions.OnChange' +#7'TAction'#15'actFullCollapse'#7'Caption'#6#13'Full Collapse'#18'DisableIfN'
+#13#15'Gutter.AutoSize'#9#17'Gutter.DigitCount'#2#5#22'Gutter.ShowLineNumber' +'oHandler'#9#9'OnExecute'#7#22'actFullCollapseExecute'#0#0#7'TAction'#7'actS'
+'s'#9#22'Gutter.ShowCodeFolding'#9#15'Gutter.OnChange'#13#23'Gutter.CodeFold' +'ave'#7'Caption'#6#4'Save'#18'DisableIfNoHandler'#9#9'OnExecute'#7#14'actSav'
+'ingWidth'#2#14#11'Highlighter'#7#10'SynPasSyn1'#10'Keystrokes'#14#1#7'Comma' +'eExecute'#8'ShortCut'#3'S@'#0#0#7'TAction'#9'actDelete'#7'Caption'#6#6'Dele'
+'nd'#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Comman' +'te'#18'DisableIfNoHandler'#9#9'OnExecute'#7#16'actDeleteExecute'#8'OnUpdate'
+'d'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Comm' +#7#21'actUpdateObjectUpdate'#0#0#7'TAction'#14'actArrayCreate'#7'Caption'#6
+'and'#2'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1#7 +#12'Create Array'#18'DisableIfNoHandler'#9#9'OnExecute'#7#21'actArrayCreateE'
+'Command'#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7'C' +'xecute'#0#0#7'TAction'#18'actTypeALiasCreate'#7'Caption'#6#17'Create Type A'
+'ommand'#2#5#8'ShortCut'#3'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7'C' +'Lias'#18'DisableIfNoHandler'#9#9'OnExecute'#7#25'actTypeALiasCreateExecute'
+'ommand'#2#2#8'ShortCut'#2''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1#7 +#0#0#7'TAction'#15'actRecordCreate'#7'Caption'#6#13'Create Record'#18'Disabl'
+'Command'#2#6#8'ShortCut'#3'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7 +'eIfNoHandler'#9#9'OnExecute'#7#22'actRecordCreateExecute'#0#0#7'TAction'#9
+'Command'#2#10#8'ShortCut'#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7 +'actSearch'#7'Caption'#6#6'Search'#18'DisableIfNoHandler'#9#9'OnExecute'#7#16
+'Command'#2#14#8'ShortCut'#3'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7 +'actSearchExecute'#8'OnUpdate'#7#15'actSearchUpdate'#8'ShortCut'#3'F@'#0#0#0
+'Command'#2#9#8'ShortCut'#2'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'C' +#11'TOpenDialog'#2'OD'#5'Title'#6#26'Ouvrir un fichier existant'#6'Filter'#6
+'ommand'#2#13#8'ShortCut'#3'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7 +'3WDSL files(*.WSDL)|*.WSDL|Pascal file (*.pas)|*.pas'#11'FilterIndex'#2#0#10
+'Command'#2#7#8'ShortCut'#2'$'#0#1#7'Command'#2'k'#8'ShortCut'#3'$ '#0#1#7'C' +'InitialDir'#6#2'.\'#7'Options'#11#15'ofPathMustExist'#15'ofFileMustExist'#14
+'ommand'#2#15#8'ShortCut'#3'$@'#0#1#7'Command'#2's'#8'ShortCut'#3'$`'#0#1#7 +'ofEnableSizing'#12'ofViewDetail'#0#4'left'#3#153#1#3'top'#2'X'#0#0#10'TSynP'
+'Command'#2#8#8'ShortCut'#2'#'#0#1#7'Command'#2'l'#8'ShortCut'#3'# '#0#1#7'C' +'asSyn'#10'SynPasSyn1'#7'Enabled'#8#23'CommentAttri.Foreground'#7#6'clBlue'
+'ommand'#2#16#8'ShortCut'#3'#@'#0#1#7'Command'#2't'#8'ShortCut'#3'#`'#0#1#7 +#18'CommentAttri.Style'#11#6'fsBold'#0#22'StringAttri.Foreground'#7#8'clMaro'
+'Command'#3#223#0#8'ShortCut'#2'-'#0#1#7'Command'#3#201#0#8'ShortCut'#3'-@'#0 +'on'#17'SymbolAttri.Style'#11#6'fsBold'#0#25'DirectiveAttri.Foreground'#7#7
+#1#7'Command'#3'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2 +'clGreen'#20'DirectiveAttri.Style'#11#6'fsBold'#0#14'NestedComments'#9#4'lef'
+'.'#0#1#7'Command'#3'['#2#8'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCu' +'t'#3#183#1#3'top'#2'h'#0#0#11'TSaveDialog'#2'SD'#5'Title'#6#27'Enregistrer '
+'t'#2#8#0#1#7'Command'#3#245#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'S' +'le fichier sous'#10'DefaultExt'#6#5'.WSDL'#6'Filter'#6#25'WDSL files(*.WSDL'
+'hortCut'#3#8'@'#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command' +')|*.WSDL'#11'FilterIndex'#2#0#7'Options'#11#15'ofPathMustExist'#14'ofEnable'
+#3'Z'#2#8'ShortCut'#4#8#160#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7 +'Sizing'#12'ofViewDetail'#0#4'left'#3#242#1#3'top'#3#176#0#0#0#10'TPopupMenu'
+'Command'#3#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@' +#10'PopupMenu1'#4'left'#3#152#0#3'top'#3#152#0#0#9'TMenuItem'#10'MenuItem28'
+#0#1#7'Command'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3 +#6'Action'#7#13'actFullExpand'#7'OnClick'#7#20'actFullExpandExecute'#0#0#9'T'
+'M@'#0#1#7'Command'#3#254#1#8'ShortCut'#3'N@'#0#1#7'Command'#3#247#1#8'Short' +'MenuItem'#10'MenuItem27'#6'Action'#7#15'actFullCollapse'#7'OnClick'#7#22'ac'
+'Cut'#3'T@'#0#1#7'Command'#3'c'#2#8'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8 +'tFullCollapseExecute'#0#0#9'TMenuItem'#10'MenuItem39'#6'Action'#7#14'actRef'
+'ShortCut'#3'V@'#0#1#7'Command'#3'['#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251 +'reshView'#7'OnClick'#7#21'actRefreshViewExecute'#0#0#9'TMenuItem'#10'MenuIt'
+#1#8'ShortCut'#3'Y@'#0#1#7'Command'#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command' +'em26'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#9'MenuItem8'#6'Action'#7#13'actEnu'
+#3'Y'#2#8'ShortCut'#3'Z@'#0#1#7'Command'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Comm' +'mCreate'#7'OnClick'#7#20'actEnumCreateExecute'#0#0#9'TMenuItem'#10'MenuItem'
+'and'#3'-'#1#8'ShortCut'#3'0@'#0#1#7'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7 +'21'#6'Action'#7#17'actCompoundCreate'#7'OnClick'#7#24'actCompoundCreateExec'
+'Command'#3'/'#1#8'ShortCut'#3'2@'#0#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0 +'ute'#0#0#9'TMenuItem'#10'MenuItem46'#6'Action'#7#15'actRecordCreate'#7'OnCl'
,#1#7'Command'#3'1'#1#8'ShortCut'#3'4@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5' +'ick'#7#22'actRecordCreateExecute'#0#0#9'TMenuItem'#10'MenuItem24'#6'Action'
+'@'#0#1#7'Command'#3'3'#1#8'ShortCut'#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut' +#7#13'actIntfCreate'#7'OnClick'#7#20'actIntfCreateExecute'#0#0#9'TMenuItem'
+#3'7@'#0#1#7'Command'#3'5'#1#8'ShortCut'#3'8@'#0#1#7'Command'#3'6'#1#8'Short' +#10'MenuItem37'#6'Action'#7#14'actArrayCreate'#7'OnClick'#7#21'actArrayCreat'
+'Cut'#3'9@'#0#1#7'Command'#3'_'#1#8'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8 +'eExecute'#0#0#9'TMenuItem'#10'MenuItem38'#6'Action'#7#18'actTypeALiasCreate'
+'ShortCut'#3'1`'#0#1#7'Command'#3'a'#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b' +#7'OnClick'#7#25'actTypeALiasCreateExecute'#0#0#9'TMenuItem'#10'MenuItem22'#7
+#1#8'ShortCut'#3'3`'#0#1#7'Command'#3'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3 +'Caption'#6#1'-'#0#0#9'TMenuItem'#9'MenuItem9'#6'Action'#7#15'actUpdateObjec'
+'d'#1#8'ShortCut'#3'5`'#0#1#7'Command'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Comman' +'t'#7'OnClick'#7#22'actUpdateObjectExecute'#0#0#9'TMenuItem'#10'MenuItem33'#6
+'d'#3'f'#1#8'ShortCut'#3'7`'#0#1#7'Command'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'C' +'Action'#7#9'actDelete'#7'OnClick'#7#16'actDeleteExecute'#0#0#0#10'TPopupMen'
+'ommand'#3'h'#1#8'ShortCut'#3'9`'#0#1#7'Command'#3#231#0#8'ShortCut'#3'N`'#0 +'u'#10'PopupMenu2'#4'left'#3#16#2#3'top'#3#235#0#0#9'TMenuItem'#10'MenuItem1'
+#1#7'Command'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3 +'8'#6'Action'#7#14'actRefreshView'#7'OnClick'#7#21'actRefreshViewExecute'#0#0
+'L`'#0#1#7'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut' +#9'TMenuItem'#10'MenuItem49'#6'Action'#7#9'actSearch'#7'OnClick'#7#16'actSea'
+#3#9' '#0#1#7'Command'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#22'Select' +'rchExecute'#0#0#9'TMenuItem'#10'MenuItem19'#7'Caption'#6#1'-'#0#0#9'TMenuIt'
+'edColor.OnChange'#13#0#0#0#9'TTabSheet'#5'tsLog'#7'Caption'#6#4'&Log'#12'Cl' +'em'#10'MenuItem20'#6'Action'#7#9'actExport'#7'OnClick'#7#16'actExportExecut'
+'ientHeight'#3'='#2#11'ClientWidth'#3#245#1#0#5'TMemo'#6'mmoLog'#6'Height'#3 +'e'#0#0#9'TMenuItem'#10'MenuItem40'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#10'Me'
+'='#2#5'Width'#3#245#1#5'Align'#7#8'alClient'#13'Lines.Strings'#1#6#0#0#10'S' +'nuItem41'#6'Action'#7#14'actArrayCreate'#7'OnClick'#7#21'actArrayCreateExec'
+'crollBars'#7#6'ssBoth'#8'TabOrder'#2#0#0#0#0#0#0#9'TSplitter'#9'Splitter1'#4 +'ute'#0#0#9'TMenuItem'#10'MenuItem45'#6'Action'#7#17'actCompoundCreate'#7'On'
+'Left'#3':'#1#6'Height'#3'Y'#2#5'Width'#2#8#5'Color'#7#7'clBlack'#11'ParentC' +'Click'#7#24'actCompoundCreateExecute'#0#0#9'TMenuItem'#10'MenuItem47'#6'Act'
+'olor'#8#0#0#9'TMainMenu'#9'MainMenu1'#4'left'#3'`'#1#3'top'#2'p'#0#9'TMenuI' +'ion'#7#15'actRecordCreate'#7'OnClick'#7#22'actRecordCreateExecute'#0#0#9'TM'
+'tem'#9'MenuItem1'#7'Caption'#6#6'&Files'#0#9'TMenuItem'#10'MenuItem16'#6'Ac' +'enuItem'#10'MenuItem44'#6'Action'#7#13'actEnumCreate'#7'OnClick'#7#20'actEn'
+'tion'#7#10'actNewFile'#7'OnClick'#7#17'actNewFileExecute'#0#0#9'TMenuItem'#9 +'umCreateExecute'#0#0#9'TMenuItem'#10'MenuItem43'#6'Action'#7#13'actIntfCrea'
+'MenuItem2'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#9'MenuItem5'#6'Action'#7#11'a' +'te'#7'OnClick'#7#20'actIntfCreateExecute'#0#0#9'TMenuItem'#10'MenuItem42'#6
+'ctOpenFile'#7'OnClick'#7#18'actOpenFileExecute'#0#0#9'TMenuItem'#9'MenuItem' +'Action'#7#18'actTypeALiasCreate'#7'OnClick'#7#25'actTypeALiasCreateExecute'
+'3'#6'Action'#7#9'actExport'#7'OnClick'#7#16'actExportExecute'#0#0#9'TMenuIt' +#0#0#0#10'TSynXMLSyn'#10'SynXMLSyn1'#13'DefaultFilter'#6#30'Documents WSDL ('
+'em'#9'MenuItem7'#6'Action'#7#7'actSave'#7'OnClick'#7#14'actSaveExecute'#0#0 +'*.wsdl)|*.wsdl'#7'Enabled'#8#23'ElementAttri.Foreground'#7#6'clNavy'#30'Att'
+#9'TMenuItem'#10'MenuItem32'#6'Action'#7#9'actSaveAs'#7'OnClick'#7#16'actSav' +'ributeValueAttri.Foreground'#7#8'clPurple'#16'WantBracesParsed'#8#4'left'#3
+'eAsExecute'#0#0#9'TMenuItem'#10'MenuItem17'#7'Caption'#6#1'-'#0#0#9'TMenuIt' +#210#1#3'top'#3#252#0#0#0#11'TFindDialog'#2'FD'#5'Title'#6#6'Search'#6'OnFin'
+'em'#9'MenuItem4'#6'Action'#7#7'actExit'#7'OnClick'#7#14'actExitExecute'#0#0 +'d'#7#6'FDFind'#4'left'#3'@'#2#3'top'#3#143#0#0#0#0
+#0#9'TMenuItem'#10'MenuItem14'#7'Caption'#6#5'&View'#0#9'TMenuItem'#10'MenuI'
+'tem15'#6'Action'#7#14'actRefreshView'#7'OnClick'#7#21'actRefreshViewExecute'
+#0#0#9'TMenuItem'#10'MenuItem29'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#10'MenuI'
+'tem30'#6'Action'#7#13'actFullExpand'#7'OnClick'#7#20'actFullExpandExecute'#0
+#0#9'TMenuItem'#10'MenuItem31'#6'Action'#7#15'actFullCollapse'#7'OnClick'#7
+#22'actFullCollapseExecute'#0#0#0#9'TMenuItem'#10'MenuItem10'#7'Caption'#6#8
+'&Edition'#0#9'TMenuItem'#10'MenuItem11'#6'Action'#7#13'actEnumCreate'#7'OnC'
+'lick'#7#20'actEnumCreateExecute'#0#0#9'TMenuItem'#10'MenuItem23'#6'Action'#7
+#17'actCompoundCreate'#7'OnClick'#7#24'actCompoundCreateExecute'#0#0#9'TMenu'
+'Item'#10'MenuItem48'#6'Action'#7#15'actRecordCreate'#7'OnClick'#7#22'actRec'
+'ordCreateExecute'#0#0#9'TMenuItem'#10'MenuItem25'#6'Action'#7#13'actIntfCre'
+'ate'#7'OnClick'#7#20'actIntfCreateExecute'#0#0#9'TMenuItem'#10'MenuItem35'#6
+'Action'#7#14'actArrayCreate'#7'OnClick'#7#21'actArrayCreateExecute'#0#0#9'T'
+'MenuItem'#10'MenuItem36'#6'Action'#7#18'actTypeALiasCreate'#7'OnClick'#7#25
+'actTypeALiasCreateExecute'#0#0#9'TMenuItem'#10'MenuItem12'#7'Caption'#6#1'-'
+#0#0#9'TMenuItem'#10'MenuItem13'#6'Action'#7#15'actUpdateObject'#7'Caption'#6
+#13'Update Object'#7'OnClick'#7#22'actUpdateObjectExecute'#0#0#9'TMenuItem'
+#10'MenuItem34'#6'Action'#7#9'actDelete'#7'OnClick'#7#16'actDeleteExecute'#0
+#0#0#9'TMenuItem'#9'MenuItem6'#6'Action'#7#8'actAbout'#7'Caption'#6#6'&About'
+#7'OnClick'#7#15'actAboutExecute'#0#0#0#11'TActionList'#2'AL'#4'left'#3'X'#1
+#3'top'#2'8'#0#7'TAction'#11'actOpenFile'#7'Caption'#6#9'Open File'#18'Disab'
+'leIfNoHandler'#9#9'OnExecute'#7#18'actOpenFileExecute'#8'ShortCut'#3'O@'#0#0
+#7'TAction'#7'actExit'#7'Caption'#6#4'Exit'#18'DisableIfNoHandler'#9#9'OnExe'
+'cute'#7#14'actExitExecute'#0#0#7'TAction'#9'actExport'#7'Caption'#6#24'Save'
+' generated files ...'#18'DisableIfNoHandler'#9#9'OnExecute'#7#16'actExportE'
+'xecute'#8'OnUpdate'#7#15'actExportUpdate'#0#0#7'TAction'#8'actAbout'#7'Capt'
+'ion'#6#5'About'#18'DisableIfNoHandler'#9#9'OnExecute'#7#15'actAboutExecute'
+#0#0#7'TAction'#9'actSaveAs'#7'Caption'#6#11'Save As ...'#18'DisableIfNoHand'
+'ler'#9#9'OnExecute'#7#16'actSaveAsExecute'#8'OnUpdate'#7#15'actExportUpdate'
+#0#0#7'TAction'#13'actEnumCreate'#7'Caption'#6#18'Create Enumeration'#18'Dis'
+'ableIfNoHandler'#9#9'OnExecute'#7#20'actEnumCreateExecute'#0#0#7'TAction'#15
+'actUpdateObject'#7'Caption'#6#6'Update'#18'DisableIfNoHandler'#9#9'OnExecut'
+'e'#7#22'actUpdateObjectExecute'#8'OnUpdate'#7#21'actUpdateObjectUpdate'#0#0
+#7'TAction'#14'actRefreshView'#7'Caption'#6#14'&Refresh Views'#18'DisableIfN'
+'oHandler'#9#9'OnExecute'#7#21'actRefreshViewExecute'#0#0#7'TAction'#10'actN'
+'ewFile'#7'Caption'#6#8'New File'#18'DisableIfNoHandler'#9#9'OnExecute'#7#17
+'actNewFileExecute'#0#0#7'TAction'#17'actCompoundCreate'#7'Caption'#6#17'Cre'
,'ate Class Type'#18'DisableIfNoHandler'#9#9'OnExecute'#7#24'actCompoundCreat'
+'eExecute'#0#0#7'TAction'#13'actIntfCreate'#7'Caption'#6#16'Create Interface'
+#18'DisableIfNoHandler'#9#9'OnExecute'#7#20'actIntfCreateExecute'#0#0#7'TAct'
+'ion'#13'actFullExpand'#7'Caption'#6#11'Full expand'#18'DisableIfNoHandler'#9
+#9'OnExecute'#7#20'actFullExpandExecute'#0#0#7'TAction'#15'actFullCollapse'#7
+'Caption'#6#13'Full Collapse'#18'DisableIfNoHandler'#9#9'OnExecute'#7#22'act'
+'FullCollapseExecute'#0#0#7'TAction'#7'actSave'#7'Caption'#6#4'Save'#18'Disa'
+'bleIfNoHandler'#9#9'OnExecute'#7#14'actSaveExecute'#8'ShortCut'#3'S@'#0#0#7
+'TAction'#9'actDelete'#7'Caption'#6#6'Delete'#18'DisableIfNoHandler'#9#9'OnE'
+'xecute'#7#16'actDeleteExecute'#8'OnUpdate'#7#21'actUpdateObjectUpdate'#0#0#7
+'TAction'#14'actArrayCreate'#7'Caption'#6#12'Create Array'#18'DisableIfNoHan'
+'dler'#9#9'OnExecute'#7#21'actArrayCreateExecute'#0#0#7'TAction'#18'actTypeA'
+'LiasCreate'#7'Caption'#6#17'Create Type ALias'#18'DisableIfNoHandler'#9#9'O'
+'nExecute'#7#25'actTypeALiasCreateExecute'#0#0#7'TAction'#15'actRecordCreate'
+#7'Caption'#6#13'Create Record'#18'DisableIfNoHandler'#9#9'OnExecute'#7#22'a'
+'ctRecordCreateExecute'#0#0#0#11'TOpenDialog'#2'OD'#5'Title'#6#26'Ouvrir un '
+'fichier existant'#6'Filter'#6'3WDSL files(*.WSDL)|*.WSDL|Pascal file (*.pas'
+')|*.pas'#11'FilterIndex'#2#0#10'InitialDir'#6#2'.\'#7'Options'#11#15'ofPath'
+'MustExist'#15'ofFileMustExist'#14'ofEnableSizing'#12'ofViewDetail'#0#4'left'
+#3#153#1#3'top'#2'X'#0#0#10'TSynPasSyn'#10'SynPasSyn1'#7'Enabled'#8#23'Comme'
+'ntAttri.Foreground'#7#6'clBlue'#18'CommentAttri.Style'#11#6'fsBold'#0#22'St'
+'ringAttri.Foreground'#7#8'clMaroon'#17'SymbolAttri.Style'#11#6'fsBold'#0#25
+'DirectiveAttri.Foreground'#7#7'clGreen'#20'DirectiveAttri.Style'#11#6'fsBol'
+'d'#0#14'NestedComments'#9#4'left'#3#183#1#3'top'#2'h'#0#0#11'TSaveDialog'#2
+'SD'#5'Title'#6#27'Enregistrer le fichier sous'#10'DefaultExt'#6#5'.WSDL'#6
+'Filter'#6#25'WDSL files(*.WSDL)|*.WSDL'#11'FilterIndex'#2#0#7'Options'#11#15
+'ofPathMustExist'#14'ofEnableSizing'#12'ofViewDetail'#0#4'left'#3#242#1#3'to'
+'p'#3#176#0#0#0#10'TPopupMenu'#10'PopupMenu1'#4'left'#3#152#0#3'top'#3#152#0
+#0#9'TMenuItem'#10'MenuItem28'#6'Action'#7#13'actFullExpand'#7'OnClick'#7#20
+'actFullExpandExecute'#0#0#9'TMenuItem'#10'MenuItem27'#6'Action'#7#15'actFul'
+'lCollapse'#7'OnClick'#7#22'actFullCollapseExecute'#0#0#9'TMenuItem'#10'Menu'
+'Item39'#6'Action'#7#14'actRefreshView'#7'OnClick'#7#21'actRefreshViewExecut'
+'e'#0#0#9'TMenuItem'#10'MenuItem26'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#9'Men'
+'uItem8'#6'Action'#7#13'actEnumCreate'#7'OnClick'#7#20'actEnumCreateExecute'
+#0#0#9'TMenuItem'#10'MenuItem21'#6'Action'#7#17'actCompoundCreate'#7'OnClick'
+#7#24'actCompoundCreateExecute'#0#0#9'TMenuItem'#10'MenuItem46'#6'Action'#7
+#15'actRecordCreate'#7'OnClick'#7#22'actRecordCreateExecute'#0#0#9'TMenuItem'
+#10'MenuItem24'#6'Action'#7#13'actIntfCreate'#7'OnClick'#7#20'actIntfCreateE'
+'xecute'#0#0#9'TMenuItem'#10'MenuItem37'#6'Action'#7#14'actArrayCreate'#7'On'
+'Click'#7#21'actArrayCreateExecute'#0#0#9'TMenuItem'#10'MenuItem38'#6'Action'
+#7#18'actTypeALiasCreate'#7'OnClick'#7#25'actTypeALiasCreateExecute'#0#0#9'T'
+'MenuItem'#10'MenuItem22'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#9'MenuItem9'#6
+'Action'#7#15'actUpdateObject'#7'OnClick'#7#22'actUpdateObjectExecute'#0#0#9
+'TMenuItem'#10'MenuItem33'#6'Action'#7#9'actDelete'#7'OnClick'#7#16'actDelet'
+'eExecute'#0#0#0#10'TPopupMenu'#10'PopupMenu2'#4'left'#3#16#2#3'top'#3#235#0
+#0#9'TMenuItem'#10'MenuItem18'#6'Action'#7#14'actRefreshView'#7'OnClick'#7#21
+'actRefreshViewExecute'#0#0#9'TMenuItem'#10'MenuItem19'#7'Caption'#6#1'-'#0#0
+#9'TMenuItem'#10'MenuItem20'#6'Action'#7#9'actExport'#7'OnClick'#7#16'actExp'
+'ortExecute'#0#0#9'TMenuItem'#10'MenuItem40'#7'Caption'#6#1'-'#0#0#9'TMenuIt'
+'em'#10'MenuItem41'#6'Action'#7#14'actArrayCreate'#7'OnClick'#7#21'actArrayC'
+'reateExecute'#0#0#9'TMenuItem'#10'MenuItem45'#6'Action'#7#17'actCompoundCre'
+'ate'#7'OnClick'#7#24'actCompoundCreateExecute'#0#0#9'TMenuItem'#10'MenuItem'
+'47'#6'Action'#7#15'actRecordCreate'#7'OnClick'#7#22'actRecordCreateExecute'
+#0#0#9'TMenuItem'#10'MenuItem44'#6'Action'#7#13'actEnumCreate'#7'OnClick'#7
+#20'actEnumCreateExecute'#0#0#9'TMenuItem'#10'MenuItem43'#6'Action'#7#13'act'
+'IntfCreate'#7'OnClick'#7#20'actIntfCreateExecute'#0#0#9'TMenuItem'#10'MenuI'
+'tem42'#6'Action'#7#18'actTypeALiasCreate'#7'OnClick'#7#25'actTypeALiasCreat'
+'eExecute'#0#0#0#10'TSynXMLSyn'#10'SynXMLSyn1'#13'DefaultFilter'#6#30'Docume'
+'nts WSDL (*.wsdl)|*.wsdl'#7'Enabled'#8#23'ElementAttri.Foreground'#7#6'clNa'
+'vy'#30'AttributeValueAttri.Foreground'#7#8'clPurple'#16'WantBracesParsed'#8
+#4'left'#3#210#1#3'top'#3#252#0#0#0#0
]); ]);

View File

@ -39,6 +39,7 @@ type
actFullCollapse: TAction; actFullCollapse: TAction;
actDelete : TAction; actDelete : TAction;
actArrayCreate : TAction; actArrayCreate : TAction;
actSearch : TAction;
actRecordCreate : TAction; actRecordCreate : TAction;
actTypeALiasCreate : TAction; actTypeALiasCreate : TAction;
actSave : TAction; actSave : TAction;
@ -48,6 +49,7 @@ type
actSaveAs: TAction; actSaveAs: TAction;
actOpenFile: TAction; actOpenFile: TAction;
AL: TActionList; AL: TActionList;
FD : TFindDialog;
MainMenu1: TMainMenu; MainMenu1: TMainMenu;
MenuItem10: TMenuItem; MenuItem10: TMenuItem;
MenuItem11: TMenuItem; MenuItem11: TMenuItem;
@ -88,7 +90,9 @@ type
MenuItem46 : TMenuItem; MenuItem46 : TMenuItem;
MenuItem47 : TMenuItem; MenuItem47 : TMenuItem;
MenuItem48 : TMenuItem; MenuItem48 : TMenuItem;
MenuItem49 : TMenuItem;
MenuItem5: TMenuItem; MenuItem5: TMenuItem;
MenuItem50 : TMenuItem;
MenuItem6: TMenuItem; MenuItem6: TMenuItem;
MenuItem7 : TMenuItem; MenuItem7 : TMenuItem;
MenuItem8: TMenuItem; MenuItem8: TMenuItem;
@ -138,9 +142,12 @@ type
procedure actRefreshViewExecute(Sender: TObject); procedure actRefreshViewExecute(Sender: TObject);
procedure actSaveAsExecute(Sender: TObject); procedure actSaveAsExecute(Sender: TObject);
procedure actSaveExecute (Sender : TObject ); procedure actSaveExecute (Sender : TObject );
procedure actSearchExecute(Sender : TObject);
procedure actSearchUpdate(Sender : TObject);
procedure actTypeALiasCreateExecute(Sender : TObject); procedure actTypeALiasCreateExecute(Sender : TObject);
procedure actUpdateObjectExecute(Sender: TObject); procedure actUpdateObjectExecute(Sender: TObject);
procedure actUpdateObjectUpdate(Sender: TObject); procedure actUpdateObjectUpdate(Sender: TObject);
procedure FDFind(Sender : TObject);
procedure FormClose (Sender : TObject; var CloseAction : TCloseAction ); procedure FormClose (Sender : TObject; var CloseAction : TCloseAction );
procedure FormShow(Sender: TObject); procedure FormShow(Sender: TObject);
private private
@ -148,6 +155,8 @@ type
FStatusMessageTag : PtrInt; FStatusMessageTag : PtrInt;
FCurrentFileName : string; FCurrentFileName : string;
{$IFDEF WST_IDE}FProjectLibrary : TLazProjectFile;{$ENDIF} {$IFDEF WST_IDE}FProjectLibrary : TLazProjectFile;{$ENDIF}
private
function Search(const AText : string) : Boolean;
private private
function GetTypeNode() : TTreeNode; function GetTypeNode() : TTreeNode;
function GetInterfaceNode() : TTreeNode; function GetInterfaceNode() : TTreeNode;
@ -170,7 +179,7 @@ implementation
uses view_helper, DOM, XMLRead, XMLWrite, //HeapTrc, uses view_helper, DOM, XMLRead, XMLWrite, //HeapTrc,
xsd_parser, wsdl_parser, source_utils, command_line_parser, generator, metadata_generator, xsd_parser, wsdl_parser, source_utils, command_line_parser, generator, metadata_generator,
binary_streamer, wst_resources_utils, xsd_generator, wsdl_generator, binary_streamer, wst_resources_utils, xsd_generator, wsdl_generator,
uabout, edit_helper, udm, ufrmsaveoption, pparser uabout, edit_helper, udm, ufrmsaveoption, pparser, SynEditTypes
{$IFDEF WST_IDE},LazIDEIntf,IDEMsgIntf{$ENDIF}; {$IFDEF WST_IDE},LazIDEIntf,IDEMsgIntf{$ENDIF};
@ -444,6 +453,16 @@ begin
actSaveAs.Execute() ; actSaveAs.Execute() ;
end; end;
procedure TfWstTypeLibraryEdit.actSearchExecute(Sender : TObject);
begin
FD.Execute();
end;
procedure TfWstTypeLibraryEdit.actSearchUpdate(Sender : TObject);
begin
TAction(Sender).Enabled := ( PC.ActivePageIndex in [0..4] );
end;
procedure TfWstTypeLibraryEdit.actTypeALiasCreateExecute(Sender : TObject); procedure TfWstTypeLibraryEdit.actTypeALiasCreateExecute(Sender : TObject);
var var
e : TPasAliasType; e : TPasAliasType;
@ -485,6 +504,12 @@ begin
HasEditor(TPasElement(trvSchema.Selected.Data)); HasEditor(TPasElement(trvSchema.Selected.Data));
end; end;
procedure TfWstTypeLibraryEdit.FDFind(Sender : TObject);
begin
if not Search(FD.FindText) then
ShowMessageFmt('Unable to find "%s".',[FD.FindText]);
end;
procedure TfWstTypeLibraryEdit.FormClose (Sender : TObject; var CloseAction : TCloseAction ); procedure TfWstTypeLibraryEdit.FormClose (Sender : TObject; var CloseAction : TCloseAction );
var var
dlgRes : Integer; dlgRes : Integer;
@ -537,6 +562,33 @@ begin
RenderSymbols(); RenderSymbols();
end; end;
function TfWstTypeLibraryEdit.Search(const AText : string) : Boolean;
var
edt : TSynEdit;
opts : TSynSearchOptions;
begin
Result := False;
case PC.ActivePageIndex of
0 : edt := srcInterface;
1 : edt := srcWSDL;
2 : edt := srcProxy;
3 : edt := srcImp;
4 : edt := srcBinder;
else
edt := nil;
end;
if Assigned(edt) then begin
opts := [];
if not ( frDown in FD.Options ) then
Include(opts,ssoBackwards);
if ( frMatchCase in FD.Options ) then
Include(opts,ssoMatchCase);
if ( frWholeWord in FD.Options ) then
Include(opts,ssoWholeWord);
Result := edt.SearchReplace(AText,'',opts) <> 0;
end;
end;
function TfWstTypeLibraryEdit.GetTypeNode(): TTreeNode; function TfWstTypeLibraryEdit.GetTypeNode(): TTreeNode;
begin begin
Result := trvSchema.TopItem.GetFirstChild().Items[0]; Result := trvSchema.TopItem.GetFirstChild().Items[0];

View File

@ -1594,9 +1594,9 @@ var
trueAncestor := ultimAnc; trueAncestor := ultimAnc;
end; end;
if trueAncestor.InheritsFrom(TPasNativeSimpleType) and if trueAncestor.InheritsFrom(TPasNativeSimpleType) and
Assigned(TPasNativeSimpleType(trueAncestor).BoxedType) Assigned(TPasNativeSimpleType(trueAncestor).ExtendableType)
then begin then begin
trueAncestor := TPasNativeSimpleType(trueAncestor).BoxedType; trueAncestor := TPasNativeSimpleType(trueAncestor).ExtendableType;
end; end;
s := Format('%s',[trueAncestor.Name]); s := Format('%s',[trueAncestor.Name]);
end else begin end else begin

View File

@ -144,18 +144,30 @@ type
end; end;
TPasClassTypeClass = class of TPasClassType; TPasClassTypeClass = class of TPasClassType;
TPasNativeClassType = class(TPasClassType) end; TPasNativeSimpleContentClassType = class;
{ TPasNativeClassType }
TPasNativeClassType = class(TPasClassType)
private
FExtendableType : TPasNativeSimpleContentClassType;
public
destructor Destroy();override;
procedure SetExtendableType(AExtendableType : TPasNativeSimpleContentClassType);
property ExtendableType : TPasNativeSimpleContentClassType read FExtendableType;
end;
TPasNativeSimpleContentClassType = class(TPasNativeClassType) end; TPasNativeSimpleContentClassType = class(TPasNativeClassType) end;
{ TPasNativeSimpleType } { TPasNativeSimpleType }
TPasNativeSimpleType = class(TPasType) TPasNativeSimpleType = class(TPasType)
private private
FBoxedType: TPasNativeSimpleContentClassType; FExtendableType: TPasNativeSimpleContentClassType;
public public
destructor Destroy();override; destructor Destroy();override;
procedure SetBoxedType(ABoxedType : TPasNativeSimpleContentClassType); procedure SetExtendableType(AExtendableType : TPasNativeSimpleContentClassType);
property BoxedType : TPasNativeSimpleContentClassType read FBoxedType; property ExtendableType : TPasNativeSimpleContentClassType read FExtendableType;
end; end;
function GetParameterIndex( function GetParameterIndex(
@ -200,18 +212,24 @@ const
('Double', 'TComplexFloatDoubleContentRemotable', 'double'), ('Double', 'TComplexFloatDoubleContentRemotable', 'double'),
('Extended', 'TComplexFloatExtendedContentRemotable', 'decimal') ('Extended', 'TComplexFloatExtendedContentRemotable', 'decimal')
); );
BOXED_TYPES_COUNT = 1;
BOXED_TYPES : Array[0..Pred(BOXED_TYPES_COUNT)] Of array[0..2] of string = (
('TBase64StringRemotable', 'TBase64StringExtRemotable', 'base64Binary')
);
procedure AddSystemSymbol( procedure AddSystemSymbol(
ADest : TPasModule; ADest : TPasModule;
AContainer : TwstPasTreeContainer AContainer : TwstPasTreeContainer
); );
var procedure RegisterSimpleTypes();
var
i : Integer; i : Integer;
splTyp : TPasNativeSimpleType; splTyp : TPasNativeSimpleType;
syb : TPasNativeSimpleContentClassType; syb : TPasNativeSimpleContentClassType;
s : string; s : string;
typlst : array[0..Pred(SIMPLE_TYPES_COUNT)] of TPasNativeSimpleType; typlst : array[0..Pred(SIMPLE_TYPES_COUNT)] of TPasNativeSimpleType;
begin begin
for i := Low(SIMPLE_TYPES) to High(SIMPLE_TYPES) do begin for i := Low(SIMPLE_TYPES) to High(SIMPLE_TYPES) do begin
splTyp := TPasNativeSimpleType(AContainer.CreateElement(TPasNativeSimpleType,SIMPLE_TYPES[i][0],ADest.InterfaceSection,visPublic,'',0)); splTyp := TPasNativeSimpleType(AContainer.CreateElement(TPasNativeSimpleType,SIMPLE_TYPES[i][0],ADest.InterfaceSection,visPublic,'',0));
ADest.InterfaceSection.Declarations.Add(splTyp); ADest.InterfaceSection.Declarations.Add(splTyp);
@ -225,19 +243,58 @@ begin
ADest.InterfaceSection.Declarations.Add(syb); ADest.InterfaceSection.Declarations.Add(syb);
ADest.InterfaceSection.Types.Add(splTyp); ADest.InterfaceSection.Types.Add(splTyp);
end; end;
splTyp.SetBoxedType(syb); splTyp.SetExtendableType(syb);
end; end;
end; end;
for i := Low(SIMPLE_TYPES) to High(SIMPLE_TYPES) do begin for i := Low(SIMPLE_TYPES) to High(SIMPLE_TYPES) do begin
//splTyp := AContainer.FindElementInModule(SIMPLE_TYPES[i][0],ADest) as TPasNativeSimpleType;
splTyp := typlst[i]; splTyp := typlst[i];
if not IsStrEmpty(SIMPLE_TYPES[i][2]) then begin if not IsStrEmpty(SIMPLE_TYPES[i][2]) then begin
AContainer.RegisterExternalAlias(splTyp,SIMPLE_TYPES[i][2]); AContainer.RegisterExternalAlias(splTyp,SIMPLE_TYPES[i][2]);
if ( splTyp.BoxedType <> nil ) then begin if ( splTyp.ExtendableType <> nil ) then begin
AContainer.RegisterExternalAlias(splTyp.BoxedType,SIMPLE_TYPES[i][2]); AContainer.RegisterExternalAlias(splTyp.ExtendableType,SIMPLE_TYPES[i][2]);
end; end;
end; end;
end; end;
end;
procedure RegisterBoxedTypes();
var
i : Integer;
nativeType : TPasNativeClassType;
syb : TPasNativeSimpleContentClassType;
s : string;
typlst : array[0..Pred(BOXED_TYPES_COUNT)] of TPasNativeClassType;
begin
for i := Low(BOXED_TYPES) to High(BOXED_TYPES) do begin
nativeType := TPasNativeClassType(AContainer.CreateElement(TPasNativeClassType,BOXED_TYPES[i][0],ADest.InterfaceSection,visPublic,'',0));
ADest.InterfaceSection.Declarations.Add(nativeType);
ADest.InterfaceSection.Types.Add(nativeType);
typlst[i] := nativeType;
s := BOXED_TYPES[i][1];
if not IsStrEmpty(s) then begin
syb := AContainer.FindElementInModule(BOXED_TYPES[i][1],ADest) as TPasNativeSimpleContentClassType;
if not Assigned(syb) then begin
syb := TPasNativeSimpleContentClassType(AContainer.CreateElement(TPasNativeSimpleContentClassType,s,ADest.InterfaceSection,visDefault,'',0));
ADest.InterfaceSection.Declarations.Add(syb);
ADest.InterfaceSection.Types.Add(syb);
end;
nativeType.SetExtendableType(syb);
end;
end;
for i := Low(BOXED_TYPES) to High(BOXED_TYPES) do begin
nativeType := typlst[i];
if not IsStrEmpty(BOXED_TYPES[i][2]) then begin
AContainer.RegisterExternalAlias(nativeType,BOXED_TYPES[i][2]);
if ( nativeType.ExtendableType <> nil ) then begin
AContainer.RegisterExternalAlias(nativeType.ExtendableType,BOXED_TYPES[i][2]);
end;
end;
end;
end;
begin
RegisterSimpleTypes();
RegisterBoxedTypes();
end; end;
function CreateWstInterfaceSymbolTable(AContainer : TwstPasTreeContainer) : TPasModule; function CreateWstInterfaceSymbolTable(AContainer : TwstPasTreeContainer) : TPasModule;
@ -325,7 +382,7 @@ begin
AddAlias('float','Single',Result); AddAlias('float','Single',Result);
AddAlias('nonNegativeInteger','LongWord',Result); AddAlias('nonNegativeInteger','LongWord',Result);
AddAlias('positiveInteger','nonNegativeInteger',Result); AddAlias('positiveInteger','nonNegativeInteger',Result);
AddAlias('base64Binary','string',Result); //AddAlias('base64Binary','string',Result);
except except
FreeAndNil(Result); FreeAndNil(Result);
raise; raise;
@ -908,24 +965,47 @@ end;
destructor TPasNativeSimpleType.Destroy(); destructor TPasNativeSimpleType.Destroy();
begin begin
if Assigned(FBoxedType) then begin if Assigned(FExtendableType) then begin
FBoxedType.Release(); FExtendableType.Release();
FBoxedType := nil FExtendableType := nil
end; end;
inherited Destroy(); inherited Destroy();
end; end;
procedure TPasNativeSimpleType.SetBoxedType( procedure TPasNativeSimpleType.SetExtendableType(
ABoxedType : TPasNativeSimpleContentClassType AExtendableType : TPasNativeSimpleContentClassType
); );
begin begin
if ( FBoxedType <> ABoxedType ) then begin if ( FExtendableType <> AExtendableType ) then begin
if ( FBoxedType <> nil ) then begin if ( FExtendableType <> nil ) then begin
FBoxedType.Release(); FExtendableType.Release();
end; end;
FBoxedType := ABoxedType; FExtendableType := AExtendableType;
if ( FBoxedType <> nil ) then if ( FExtendableType <> nil ) then
FBoxedType.AddRef(); FExtendableType.AddRef();
end;
end;
{ TPasNativeClassType }
destructor TPasNativeClassType.Destroy();
begin
if Assigned(FExtendableType) then begin
FExtendableType.Release();
FExtendableType := nil
end;
inherited Destroy();
end;
procedure TPasNativeClassType.SetExtendableType(AExtendableType : TPasNativeSimpleContentClassType);
begin
if ( FExtendableType <> AExtendableType ) then begin
if ( FExtendableType <> nil ) then begin
FExtendableType.Release();
end;
FExtendableType := AExtendableType;
if ( FExtendableType <> nil ) then
FExtendableType.AddRef();
end; end;
end; end;

View File

@ -379,8 +379,11 @@ begin
FBaseType := (FBaseType as TPasAliasType).DestType; FBaseType := (FBaseType as TPasAliasType).DestType;
end; end;
if FBaseType.InheritsFrom(TPasNativeSimpleType) then begin if FBaseType.InheritsFrom(TPasNativeSimpleType) then begin
Assert(Assigned(TPasNativeSimpleType(FBaseType).BoxedType)); Assert(Assigned(TPasNativeSimpleType(FBaseType).ExtendableType));
FBaseType := TPasNativeSimpleType(FBaseType).BoxedType; FBaseType := TPasNativeSimpleType(FBaseType).ExtendableType;
end else if FBaseType.InheritsFrom(TPasNativeClassType) then begin
if Assigned(TPasNativeClassType(FBaseType).ExtendableType) then
FBaseType := TPasNativeClassType(FBaseType).ExtendableType;
end; end;
end else begin end else begin
raise EXsdParserException.CreateFmt('"%s" was expected to be a type definition.',[locSymbol.Name]); raise EXsdParserException.CreateFmt('"%s" was expected to be a type definition.',[locSymbol.Name]);