wsdl2pas_imp.pas has been reorganized :

- xsd_parser.pas XML schema parser
  - wsdl_parser.pas WSDL parser ( uses xsd_parser to parse type definitions )

ws_helper now supports XML Schema ( .XSD files ) parsing.

test cases for XSD and WSDL parsers

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@264 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2007-09-09 22:30:50 +00:00
parent 4c0ee502c7
commit 1c633e091d
34 changed files with 5477 additions and 791 deletions

View File

@ -34,10 +34,10 @@
-N"obj"
-LE"c:\program files\borland\delphi7\Projects\Bpl"
-LN"c:\program files\borland\delphi7\Projects\Bpl"
-U"..\;..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src"
-O"..\;..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src"
-I"..\;..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src"
-R"..\;..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src"
-U"..\;..\..\;..\..\..\;..\..\..\fcl-units\fcl-passrc\src;..\..\..\ws_helper;..\..\..\wst_rtti_filter;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src"
-O"..\;..\..\;..\..\..\;..\..\..\fcl-units\fcl-passrc\src;..\..\..\ws_helper;..\..\..\wst_rtti_filter;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src"
-I"..\;..\..\;..\..\..\;..\..\..\fcl-units\fcl-passrc\src;..\..\..\ws_helper;..\..\..\wst_rtti_filter;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src"
-R"..\;..\..\;..\..\..\;..\..\..\fcl-units\fcl-passrc\src;..\..\..\ws_helper;..\..\..\wst_rtti_filter;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src"
-DDUnit
-w-UNSAFE_TYPE
-w-UNSAFE_CODE

View File

@ -94,7 +94,7 @@ OutputDir=
UnitOutputDir=obj
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=..\;..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
SearchPath=..\;..\..\;..\..\..\;..\..\..\fcl-units\fcl-passrc\src;..\..\..\ws_helper;..\..\..\wst_rtti_filter;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;FIBDBMidas7;Jcl;JclVcl;JvCoreD7R;JvSystemD7R;JvStdCtrlsD7R;JvAppFrmD7R;JvBandsD7R;JvDBD7R;JvDlgsD7R;JvBDED7R;JvCmpD7R;JvCryptD7R;JvCtrlsD7R;JvCustomD7R;JvDockingD7R;JvDotNetCtrlsD7R;JvEDID7R;JvGlobusD7R;JvHMID7R;JvInterpreterD7R;JvJansD7R;JvManagedThreadsD7R;JvMMD7R;JvNetD7R;JvPageCompsD7R;JvPluginD7R;JvPrintPreviewD7R;JvRuntimeDesignD7R;JvTimeFrameworkD7R;JvUIBD7R;JvValidatorsD7R;JvWizardD7R;JvXPCtrlsD7R;dxForumLibD7;cxLibraryVCLD7;cxPageControlVCLD7;dxBarD7;dxComnD7;dxBarDBNavD7;dxBarExtItemsD7;dxBarExtDBItemsD7;dxsbD7;dxmdsD7;dxdbtrD7;dxtrmdD7;dxorgcD7;dxdborD7;dxEdtrD7;EQTLD7;ECQDBCD7;EQDBTLD7;EQGridD7;dxGrEdD7;dxExELD7;dxELibD7;cxEditorsVCLD7;cxGridVCLD7;dxThemeD7;cxDataD7;cxGridUtilsVCLD7;dxPSCoreD7;dxPsPrVwAdvD7;dxPSLnksD7;dxPSTeeChartD7;dxPSDBTeeChartD7;dxPSdxDBTVLnkD7;dxPSdxOCLnkD7;dxPSdxDBOCLnkD7;dxPScxGridLnkD7;dxPSTLLnkD7;qrpt
Conditionals=DUnit
DebugSourceDirs=
@ -149,17 +149,20 @@ Item0=DUnit
Count=1
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[HistoryLists\hlSearchPath]
Count=10
Item0=..\;..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item1=..\;..\..\;..\..\..\;C:\Programmes\lazarus\wst\trunk\ws_helper;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item2=..\;..\..\;..\..\..\;..\..\ws_helper;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item3=..\;..\..\;..\..\..\;..\..\ws_helper\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item4=..\;..\..\;..\..\..\;..\..\ws_helper\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src;C:\Programmes\lazarus\wst\trunk\ws_helper
Item5=..\;..\..\;..\..\..\;..\..\..\ws_helper\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item6=..\;..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item7=..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item8=C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item9=..\
Count=13
Item0=..\;..\..\;..\..\..\;..\..\..\fcl-units\fcl-passrc\src;..\..\..\ws_helper;..\..\..\wst_rtti_filter;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item1=..\;..\..\;..\..\..\;..\..\..\fcl-units\fcl-passrc\src;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src;..\..\..\ws_helper
Item2=..\;..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src;..\..\..\fcl-units\fcl-passrc\src
Item3=..\;..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item4=..\;..\..\;..\..\..\;C:\Programmes\lazarus\wst\trunk\ws_helper;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item5=..\;..\..\;..\..\..\;..\..\ws_helper;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item6=..\;..\..\;..\..\..\;..\..\ws_helper\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item7=..\;..\..\;..\..\..\;..\..\ws_helper\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src;C:\Programmes\lazarus\wst\trunk\ws_helper
Item8=..\;..\..\;..\..\..\;..\..\..\ws_helper\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item9=..\;..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item10=..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item11=C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
Item12=..\
[HistoryLists\hlUnitOutputDirectory]
Count=1
Item0=obj

View File

@ -1,11 +1,13 @@
{$APPTYPE CONSOLE}
program wst_test_suite;
uses
SysUtils, ActiveX,
SysUtils,
ActiveX,
TestFrameWork,
TextTestRunner,
test_utilities in '..\test_utilities.pas',
testformatter_unit in '..\testformatter_unit.pas';
testformatter_unit in '..\testformatter_unit.pas',
test_parsers in '..\test_parsers.pas';
{$R *.res}

View File

@ -0,0 +1,48 @@
<?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:sequence>
<xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="strAtt" type="xsd:string"/>
<xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType>
<xsd:element name="TClassSample" type="n:TClassSampleType"/>
<xsd:complexType name="TClassSampleTypeAll">
<xsd:all>
<xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
</xsd:all>
<xsd:attribute name="strAtt" type="xsd:string"/>
<xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType>
</xsd:schema>
</types>
</definitions>

View File

@ -0,0 +1,34 @@
<?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:sequence>
<xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="strAtt" type="xsd:string"/>
<xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType>
<xsd:element name="TClassSample" type="n:TClassSampleType"/>
<xsd:complexType name="TClassSampleTypeAll">
<xsd:all>
<xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
</xsd:all>
<xsd:attribute name="strAtt" type="xsd:string"/>
<xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType>
</xsd:schema>

View File

@ -0,0 +1,61 @@
<?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:element name="TClassSampleType">
<xsd:complexType >
<xsd:sequence>
<xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
<xsd:element name="classField" >
<xsd:complexType >
<xsd:sequence>
<xsd:element name="intFieldE" type="xsd:int" />
<xsd:element name="strFieldE" type="xsd:string" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="strAttE" type="xsd:string"/>
<xsd:attribute name="intAttE" type="xsd:int"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="enumField" >
<xsd:simpleType>
<xsd:restriction base="xsd:token">
<xsd:enumeration value="esOne"> </xsd:enumeration>
<xsd:enumeration value="esTwo"> </xsd:enumeration>
<xsd:enumeration value="esThree"> </xsd:enumeration>
<xsd:enumeration value="begin"> </xsd:enumeration>
<xsd:enumeration value="finally"> </xsd:enumeration>
<xsd:enumeration value="True"> </xsd:enumeration>
<xsd:enumeration value="False"> </xsd:enumeration>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="strAtt" type="xsd:string"/>
<xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</types>
</definitions>

View File

@ -0,0 +1,47 @@
<?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:element name="TClassSampleType">
<xsd:complexType >
<xsd:sequence>
<xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
<xsd:element name="classField" >
<xsd:complexType >
<xsd:sequence>
<xsd:element name="intFieldE" type="xsd:int" />
<xsd:element name="strFieldE" type="xsd:string" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="strAttE" type="xsd:string"/>
<xsd:attribute name="intAttE" type="xsd:int"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="enumField" >
<xsd:simpleType>
<xsd:restriction base="xsd:token">
<xsd:enumeration value="esOne"> </xsd:enumeration>
<xsd:enumeration value="esTwo"> </xsd:enumeration>
<xsd:enumeration value="esThree"> </xsd:enumeration>
<xsd:enumeration value="begin"> </xsd:enumeration>
<xsd:enumeration value="finally"> </xsd:enumeration>
<xsd:enumeration value="True"> </xsd:enumeration>
<xsd:enumeration value="False"> </xsd:enumeration>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="strAtt" type="xsd:string"/>
<xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>

View File

@ -0,0 +1,15 @@
<?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="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:wst-test">
</xsd:schema>
</types>
</definitions>

View File

@ -0,0 +1,5 @@
<?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:schema>

View File

@ -0,0 +1,32 @@
<?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:simpleType name="EnumSampleType">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="esOne"> </xsd:enumeration>
<xsd:enumeration value="esTwo"> </xsd:enumeration>
<xsd:enumeration value="esThree"> </xsd:enumeration>
<xsd:enumeration value="begin"> </xsd:enumeration>
<xsd:enumeration value="finally"> </xsd:enumeration>
<xsd:enumeration value="True"> </xsd:enumeration>
<xsd:enumeration value="False"> </xsd:enumeration>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="EnumSample" type="n:EnumSampleType"/>
</xsd:schema>
</types>
</definitions>

View File

@ -0,0 +1,20 @@
<?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:simpleType name="EnumSampleType">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="esOne"> </xsd:enumeration>
<xsd:enumeration value="esTwo"> </xsd:enumeration>
<xsd:enumeration value="esThree"> </xsd:enumeration>
<xsd:enumeration value="begin"> </xsd:enumeration>
<xsd:enumeration value="finally"> </xsd:enumeration>
<xsd:enumeration value="True"> </xsd:enumeration>
<xsd:enumeration value="False"> </xsd:enumeration>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="EnumSample" type="n:EnumSampleType"/>
</xsd:schema>

View File

@ -0,0 +1,32 @@
<?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:element name="EnumSampleType">
<xsd:simpleType>
<xsd:restriction base="xsd:token">
<xsd:enumeration value="esOne"> </xsd:enumeration>
<xsd:enumeration value="esTwo"> </xsd:enumeration>
<xsd:enumeration value="esThree"> </xsd:enumeration>
<xsd:enumeration value="begin"> </xsd:enumeration>
<xsd:enumeration value="finally"> </xsd:enumeration>
<xsd:enumeration value="True"> </xsd:enumeration>
<xsd:enumeration value="False"> </xsd:enumeration>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:schema>
</types>
</definitions>

View File

@ -0,0 +1,20 @@
<?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:element name="EnumSampleType">
<xsd:simpleType>
<xsd:restriction base="xsd:token">
<xsd:enumeration value="esOne"> </xsd:enumeration>
<xsd:enumeration value="esTwo"> </xsd:enumeration>
<xsd:enumeration value="esThree"> </xsd:enumeration>
<xsd:enumeration value="begin"> </xsd:enumeration>
<xsd:enumeration value="finally"> </xsd:enumeration>
<xsd:enumeration value="True"> </xsd:enumeration>
<xsd:enumeration value="False"> </xsd:enumeration>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:schema>

View File

@ -0,0 +1,543 @@
{ 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_parsers;
interface
uses
Classes, SysUtils,
{$IFDEF FPC}
fpcunit, testutils, testregistry, DOM, XmlRead, wst_fpc_xml,
{$ELSE}
TestFrameWork, xmldom, wst_delphi_xml,
{$ENDIF}
pastree, pascal_parser_intf, xsd_parser, wsdl_parser;
type
{ TTest_CustomXsdParser }
TTest_CustomXsdParser = class(TTestCase)
protected
function LoadEmptySchema() : TwstPasTreeContainer;virtual;abstract;
function LoadSimpleType_Enum_Schema() : TwstPasTreeContainer;virtual;abstract;
function LoadSimpleType_Enum_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract;
function LoadComplexType_Class_Schema() : TwstPasTreeContainer;virtual;abstract;
function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract;
published
procedure EmptySchema();
procedure SimpleType_Enum();
procedure SimpleType_Enum_Embedded();
procedure ComplexType_Class();
procedure ComplexType_Class_Embedded();
end;
{ TTest_XsdParser }
TTest_XsdParser = class(TTest_CustomXsdParser)
private
function ParseDoc(const ADoc : string) : TwstPasTreeContainer;
protected
function LoadEmptySchema() : TwstPasTreeContainer;override;
function LoadSimpleType_Enum_Schema() : TwstPasTreeContainer;override;
function LoadSimpleType_Enum_Embedded_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Class_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override;
end;
{ TTest_WsdlParser }
TTest_WsdlParser = class(TTest_CustomXsdParser)
private
function ParseDoc(const ADoc : string) : TwstPasTreeContainer;
protected
function LoadEmptySchema() : TwstPasTreeContainer;override;
function LoadSimpleType_Enum_Schema() : TwstPasTreeContainer;override;
function LoadSimpleType_Enum_Embedded_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Class_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override;
end;
implementation
uses parserutils;
const
x_complexType_SampleClassType = 'TClassSampleType';
x_complexType_SampleClassTypeAll = 'TClassSampleTypeAll';
x_complexType_SampleClass = 'TClassSample';
x_complexType_class = 'complex_class';
x_complexType_class_embedded = 'complex_class_embedded';
x_empty = 'empty';
x_enumSample = 'EnumSample';
x_enumSampleType = 'EnumSampleType';
x_enumSampleLIST_COUNT = 7;
x_enumSampleLIST : array[0..( x_enumSampleLIST_COUNT - 1 )] of string = ( 'esOne', 'esTwo', 'esThree', 'begin', 'finally', 'True', 'False' );
x_simpleType = 'simpletype';
x_simpleTypeEmbedded = 'simpletype_embedded';
x_targetNamespace = 'urn:wst-test';
x_byteField = 'byteField';
x_charField = 'charField';
x_classField = 'classField';
x_enumField = 'enumField';
x_floatField = 'floatField';
x_intField = 'intField';
x_longField = 'longField';
x_strField = 'strField';
x_intAtt = 'intAtt';
x_strAtt = 'strAtt';
function LoadXmlFile(const AFileName : string) : TXMLDocument;
begin
Result := nil;
ReadXMLFile(Result,AFileName);
end;
{ TTest_CustomXsdParser }
procedure TTest_CustomXsdParser.EmptySchema();
var
tr : TwstPasTreeContainer;
mdl : TPasModule;
begin
tr := LoadEmptySchema();
mdl := tr.FindModule(x_targetNamespace);
CheckNotNull(mdl);
CheckEquals(x_empty,mdl.Name);
CheckEquals(x_targetNamespace,tr.GetExternalName(mdl));
CheckEquals(0,mdl.InterfaceSection.Declarations.Count);
end;
procedure TTest_CustomXsdParser.SimpleType_Enum();
var
tr : TwstPasTreeContainer;
mdl : TPasModule;
ls : TList;
elt : TPasElement;
enumType : TPasEnumType;
enumVal : TPasEnumValue;
aliasType : TPasAliasType;
i : Integer;
begin
tr := LoadSimpleType_Enum_Schema();
mdl := tr.FindModule(x_targetNamespace);
CheckNotNull(mdl);
CheckEquals(x_simpleType,mdl.Name);
CheckEquals(x_targetNamespace,tr.GetExternalName(mdl));
ls := mdl.InterfaceSection.Declarations;
CheckEquals(2,ls.Count);
elt := tr.FindElement(x_enumSampleType);
CheckNotNull(elt,x_enumSampleType);
CheckEquals(x_enumSampleType,elt.Name);
CheckEquals(x_enumSampleType,tr.GetExternalName(elt));
CheckIs(elt,TPasEnumType);
enumType := elt as TPasEnumType;
CheckEquals(x_enumSampleLIST_COUNT,enumType.Values.Count);
for i := 0 to Pred(x_enumSampleLIST_COUNT) do begin
enumVal := TPasEnumValue(enumType.Values[i]);
CheckNotNull(enumVal);
if IsReservedKeyWord(x_enumSampleLIST[i]) then begin
CheckEquals(Format('%s_%s',[enumType.Name,x_enumSampleLIST[i]]),enumVal.Name);
end else begin
CheckEquals(x_enumSampleLIST[i],enumVal.Name);
end;
CheckEquals(x_enumSampleLIST[i],tr.GetExternalName(enumVal));
end;
elt := tr.FindElement(x_enumSample);
CheckNotNull(elt,x_enumSample);
CheckEquals(x_enumSample,elt.Name);
CheckEquals(x_enumSample,tr.GetExternalName(elt));
CheckIs(elt,TPasAliasType);
aliasType := elt as TPasAliasType;
CheckNotNull(aliasType.DestType);
CheckEquals(x_enumSampleType, tr.GetExternalName(aliasType.DestType));
end;
procedure TTest_CustomXsdParser.SimpleType_Enum_Embedded();
var
tr : TwstPasTreeContainer;
mdl : TPasModule;
ls : TList;
elt : TPasElement;
enumType : TPasEnumType;
enumVal : TPasEnumValue;
aliasType : TPasAliasType;
i : Integer;
begin
tr := LoadSimpleType_Enum_Embedded_Schema();
mdl := tr.FindModule(x_targetNamespace);
CheckNotNull(mdl);
CheckEquals(x_simpleTypeEmbedded,mdl.Name);
CheckEquals(x_targetNamespace,tr.GetExternalName(mdl));
ls := mdl.InterfaceSection.Declarations;
CheckEquals(1,ls.Count);
elt := tr.FindElement(x_enumSampleType);
CheckNotNull(elt,x_enumSampleType);
CheckEquals(x_enumSampleType,elt.Name);
CheckEquals(x_enumSampleType,tr.GetExternalName(elt));
CheckIs(elt,TPasEnumType);
enumType := elt as TPasEnumType;
CheckEquals(x_enumSampleLIST_COUNT,enumType.Values.Count);
for i := 0 to Pred(x_enumSampleLIST_COUNT) do begin
enumVal := TPasEnumValue(enumType.Values[i]);
CheckNotNull(enumVal);
if IsReservedKeyWord(x_enumSampleLIST[i]) then begin
CheckEquals(Format('%s_%s',[enumType.Name,x_enumSampleLIST[i]]),enumVal.Name);
end else begin
CheckEquals(x_enumSampleLIST[i],enumVal.Name);
end;
CheckEquals(x_enumSampleLIST[i],tr.GetExternalName(enumVal));
end;
end;
type
TPropertyType = ( ptField, ptAttribute );
const
PropertyType_Att : array[TPropertyType] of Boolean = ( False, True );
procedure TTest_CustomXsdParser.ComplexType_Class();
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_Schema();
mdl := tr.FindModule(x_targetNamespace);
CheckNotNull(mdl);
CheckEquals(x_complexType_class,mdl.Name);
CheckEquals(x_targetNamespace,tr.GetExternalName(mdl));
ls := mdl.InterfaceSection.Declarations;
CheckEquals(3,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(8,prpLs.Count);
CheckProperty(x_intField,'int',ptField);
CheckProperty(x_strField,'string',ptField);
CheckProperty(x_floatField,'float',ptField);
CheckProperty(x_byteField,'byte',ptField);
CheckProperty(x_charField,'char',ptField);
CheckProperty(x_longField,'long',ptField);
CheckProperty(x_strAtt,'string',ptAttribute);
CheckProperty(x_intAtt,'int',ptAttribute);
elt := tr.FindElement(x_complexType_SampleClass);
CheckNotNull(elt,x_complexType_SampleClass);
CheckEquals(x_complexType_SampleClass,elt.Name);
CheckEquals(x_complexType_SampleClass,tr.GetExternalName(elt));
CheckIs(elt,TPasAliasType);
aliasType := elt as TPasAliasType;
CheckNotNull(aliasType.DestType);
CheckEquals(x_complexType_SampleClassType, tr.GetExternalName(aliasType.DestType));
elt := tr.FindElement(x_complexType_SampleClassTypeAll);
CheckNotNull(elt,x_complexType_SampleClassTypeAll);
CheckEquals(x_complexType_SampleClassTypeAll,elt.Name);
CheckEquals(x_complexType_SampleClassTypeAll,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(8,prpLs.Count);
CheckProperty(x_intField,'int',ptField);
CheckProperty(x_strField,'string',ptField);
CheckProperty(x_floatField,'float',ptField);
CheckProperty(x_byteField,'byte',ptField);
CheckProperty(x_charField,'char',ptField);
CheckProperty(x_longField,'long',ptField);
CheckProperty(x_strAtt,'string',ptAttribute);
CheckProperty(x_intAtt,'int',ptAttribute);
finally
FreeAndNil(prpLs);
end;
end;
procedure TTest_CustomXsdParser.ComplexType_Class_Embedded();
var
tr : TwstPasTreeContainer;
nestedClassName, nestedEnumName : string;
procedure CheckProperty(
const AName,ATypeName : string;
const AFieldType : TPropertyType;
const AClsType : TPasClassType
);
var
prp : TPasProperty;
begin
prp := FindMember(AClsType,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;
procedure CheckEmbeddedClassType();
var
mdl : TPasModule;
e : TPasElement;
k : Integer;
prpLst : TList;
nestedClsType : TPasClassType;
begin
prpLst := TList.Create();
try
nestedClassName := Format('%s_%s_Type',[x_complexType_SampleClassType,x_classField]);
e := tr.FindElement(nestedClassName);
CheckNotNull(e,nestedClassName);
CheckEquals(nestedClassName,e.Name);
CheckEquals(nestedClassName,tr.GetExternalName(e));
CheckIs(e,TPasClassType);
nestedClsType := e as TPasClassType;
for k := 0 to Pred(nestedClsType.Members.Count) do begin
if TPasElement(nestedClsType.Members[k]).InheritsFrom(TPasProperty) then
prpLst.Add(nestedClsType.Members[k]);
end;
CheckEquals(4,prpLst.Count,nestedClassName + ' properties count.');
CheckProperty(x_intField + 'E','int',ptField,nestedClsType);
CheckProperty(x_strField + 'E','string',ptField,nestedClsType);
CheckProperty(x_strAtt + 'E','string',ptAttribute,nestedClsType);
CheckProperty(x_intAtt + 'E','int',ptAttribute,nestedClsType);
finally
FreeAndNil(prpLst);
end;
end;
procedure CheckEmbeddedEnum();
var
e : TPasElement;
enumType : TPasEnumType;
enumVal : TPasEnumValue;
k : Integer;
begin
nestedEnumName := Format('%s_%s_Type',[x_complexType_SampleClassType,x_enumField]);
e := tr.FindElement(nestedEnumName);
CheckNotNull(e,nestedEnumName);
CheckEquals(nestedEnumName,e.Name);
CheckEquals(nestedEnumName,tr.GetExternalName(e));
CheckIs(e,TPasEnumType);
enumType := e as TPasEnumType;
CheckEquals(x_enumSampleLIST_COUNT,enumType.Values.Count);
for k := 0 to Pred(x_enumSampleLIST_COUNT) do begin
enumVal := TPasEnumValue(enumType.Values[k]);
CheckNotNull(enumVal,'Enum value');
if IsReservedKeyWord(x_enumSampleLIST[k]) then begin
CheckEquals(Format('%s_%s',[enumType.Name,x_enumSampleLIST[k]]),enumVal.Name);
end else begin
CheckEquals(x_enumSampleLIST[k],enumVal.Name);
end;
CheckEquals(x_enumSampleLIST[k],tr.GetExternalName(enumVal));
end;
end;
var
mdl : TPasModule;
clsType : TPasClassType;
ls : TList;
elt : TPasElement;
aliasType : TPasAliasType;
i : Integer;
prpLs : TList;
begin
prpLs := TList.Create();
try
tr := LoadComplexType_Class_Embedded_Schema();
mdl := tr.FindModule(x_targetNamespace);
CheckNotNull(mdl);
CheckEquals(x_complexType_class_embedded,mdl.Name);
CheckEquals(x_targetNamespace,tr.GetExternalName(mdl));
ls := mdl.InterfaceSection.Declarations;
CheckEquals(3,ls.Count);
CheckEmbeddedClassType();
CheckEmbeddedEnum();
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(10,prpLs.Count);
CheckProperty(x_intField,'int',ptField,clsType);
CheckProperty(x_strField,'string',ptField,clsType);
CheckProperty(x_floatField,'float',ptField,clsType);
CheckProperty(x_byteField,'byte',ptField,clsType);
CheckProperty(x_charField,'char',ptField,clsType);
CheckProperty(x_longField,'long',ptField,clsType);
CheckProperty(x_strAtt,'string',ptAttribute,clsType);
CheckProperty(x_intAtt,'int',ptAttribute,clsType);
CheckProperty(x_classField,nestedClassName,ptField,clsType);
CheckProperty(x_enumField,nestedEnumName,ptField,clsType);
finally
FreeAndNil(prpLs);
end;
end;
{ TTest_XsdParser }
function TTest_XsdParser.ParseDoc(const ADoc: string): TwstPasTreeContainer;
var
locDoc : TXMLDocument;
prs : IXsdPaser;
fileName : string;
begin
fileName := Format('.%sfiles%s%s.xsd',[PathDelim,PathDelim,ADoc]);
{$IFNDEF FPC}
fileName := Format('..%s%s',[PathDelim,fileName]);
{$ENDIF}
locDoc := LoadXmlFile(fileName);
try
Result := TwstPasTreeContainer.Create();
CreateWstInterfaceSymbolTable(Result);
prs := TXsdParser.Create(locDoc,Result,ADoc);
prs.ParseTypes();
finally
ReleaseDomNode(locDoc);
end;
end;
function TTest_XsdParser.LoadEmptySchema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_empty);
end;
function TTest_XsdParser.LoadSimpleType_Enum_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_simpleType);
end;
function TTest_XsdParser.LoadSimpleType_Enum_Embedded_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_simpleTypeEmbedded);
end;
function TTest_XsdParser.LoadComplexType_Class_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_complexType_class);
end;
function TTest_XsdParser.LoadComplexType_Class_Embedded_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_complexType_class_embedded);
end;
{ TTest_WsdlParser }
function TTest_WsdlParser.ParseDoc(const ADoc: string): TwstPasTreeContainer;
var
locDoc : TXMLDocument;
prs : IParser;
fileName : string;
begin
fileName := Format('.%sfiles%s%s.wsdl',[PathDelim,PathDelim,ADoc]);
{$IFNDEF FPC}
fileName := Format('..%s%s',[PathDelim,fileName]);
{$ENDIF}
locDoc := LoadXmlFile(fileName);
try
Result := TwstPasTreeContainer.Create();
CreateWstInterfaceSymbolTable(Result);
prs := TWsdlParser.Create(locDoc,Result);
prs.Execute(pmAllTypes,ADoc);
finally
ReleaseDomNode(locDoc);
end;
end;
function TTest_WsdlParser.LoadEmptySchema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_empty);
end;
function TTest_WsdlParser.LoadSimpleType_Enum_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_simpleType);
end;
function TTest_WsdlParser.LoadSimpleType_Enum_Embedded_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_simpleTypeEmbedded);
end;
function TTest_WsdlParser.LoadComplexType_Class_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_complexType_class);
end;
function TTest_WsdlParser.LoadComplexType_Class_Embedded_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_complexType_class_embedded);
end;
initialization
RegisterTest('XSD parser',TTest_XsdParser.Suite);
RegisterTest('WSDL parser',TTest_WsdlParser.Suite);
end.

View File

@ -27,7 +27,7 @@
<PackageName Value="FPCUnitTestRunner"/>
</Item1>
</RequiredPackages>
<Units Count="75">
<Units Count="83">
<Unit0>
<Filename Value="wst_test_suite.lpr"/>
<IsPartOfProject Value="True"/>
@ -40,9 +40,9 @@
<Filename Value="testformatter_unit.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="testformatter_unit"/>
<CursorPos X="27" Y="3935"/>
<TopLine Value="3914"/>
<EditorIndex Value="5"/>
<CursorPos X="5" Y="3943"/>
<TopLine Value="3900"/>
<EditorIndex Value="0"/>
<UsageCount Value="200"/>
<Bookmarks Count="1">
<Item0 X="17" Y="1058" ID="3"/>
@ -61,33 +61,29 @@
<Filename Value="..\..\soap_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="soap_formatter"/>
<CursorPos X="33" Y="31"/>
<TopLine Value="22"/>
<CursorPos X="1" Y="188"/>
<TopLine Value="173"/>
<UsageCount Value="200"/>
</Unit3>
<Unit4>
<Filename Value="..\..\base_binary_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="base_binary_formatter"/>
<CursorPos X="28" Y="223"/>
<CursorPos X="42" Y="219"/>
<TopLine Value="211"/>
<EditorIndex Value="8"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit4>
<Unit5>
<Filename Value="..\..\base_service_intf.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="base_service_intf"/>
<CursorPos X="26" Y="1232"/>
<TopLine Value="1220"/>
<EditorIndex Value="0"/>
<CursorPos X="1" Y="4553"/>
<TopLine Value="4538"/>
<UsageCount Value="200"/>
<Bookmarks Count="2">
<Item0 X="33" Y="1135" ID="0"/>
<Item1 X="5" Y="1189" ID="1"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit5>
<Unit6>
<Filename Value="..\..\base_soap_formatter.pas"/>
@ -101,8 +97,8 @@
<Filename Value="..\..\binary_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="binary_formatter"/>
<CursorPos X="28" Y="112"/>
<TopLine Value="48"/>
<CursorPos X="1" Y="125"/>
<TopLine Value="110"/>
<UsageCount Value="200"/>
</Unit7>
<Unit8>
@ -122,9 +118,7 @@
<UnitName Value="server_binary_formatter"/>
<CursorPos X="9" Y="123"/>
<TopLine Value="27"/>
<EditorIndex Value="4"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit9>
<Unit10>
<Filename Value="..\..\metadata_repository.pas"/>
@ -138,8 +132,8 @@
<Filename Value="testmetadata_unit.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="testmetadata_unit"/>
<CursorPos X="1" Y="30"/>
<TopLine Value="7"/>
<CursorPos X="1" Y="161"/>
<TopLine Value="146"/>
<UsageCount Value="202"/>
</Unit11>
<Unit12>
@ -154,8 +148,8 @@
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="parserdefs"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="16"/>
<CursorPos X="62" Y="1028"/>
<TopLine Value="1009"/>
<UsageCount Value="202"/>
<Bookmarks Count="1">
<Item0 X="18" Y="1133" ID="2"/>
@ -165,24 +159,22 @@
<Filename Value="..\..\metadata_wsdl.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="metadata_wsdl"/>
<CursorPos X="43" Y="869"/>
<TopLine Value="834"/>
<EditorIndex Value="9"/>
<CursorPos X="40" Y="836"/>
<TopLine Value="828"/>
<UsageCount Value="206"/>
<Loaded Value="True"/>
</Unit14>
<Unit15>
<Filename Value="D:\Lazarus\fpcsrc\fcl\xml\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="15" Y="429"/>
<TopLine Value="413"/>
<UsageCount Value="2"/>
<UsageCount Value="1"/>
</Unit15>
<Unit16>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="13" Y="235"/>
<TopLine Value="215"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit16>
<Unit17>
<Filename Value="..\..\server_service_intf.pas"/>
@ -190,49 +182,45 @@
<UnitName Value="server_service_intf"/>
<CursorPos X="25" Y="14"/>
<TopLine Value="97"/>
<EditorIndex Value="3"/>
<UsageCount Value="203"/>
<Loaded Value="True"/>
</Unit17>
<Unit18>
<Filename Value="..\..\service_intf.pas"/>
<UnitName Value="service_intf"/>
<CursorPos X="15" Y="22"/>
<TopLine Value="10"/>
<EditorIndex Value="6"/>
<UsageCount Value="23"/>
<Loaded Value="True"/>
<UsageCount Value="25"/>
</Unit18>
<Unit19>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="3" Y="316"/>
<TopLine Value="304"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit19>
<Unit20>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\lists.inc"/>
<CursorPos X="3" Y="407"/>
<TopLine Value="404"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit20>
<Unit21>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\inc\contnrs.pp"/>
<UnitName Value="contnrs"/>
<CursorPos X="3" Y="474"/>
<TopLine Value="471"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit21>
<Unit22>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
<CursorPos X="27" Y="121"/>
<TopLine Value="104"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit22>
<Unit23>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpas.inc"/>
<CursorPos X="9" Y="166"/>
<TopLine Value="142"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit23>
<Unit24>
<Filename Value="D:\Lazarus\components\fpcunit\guitestrunner.pas"/>
@ -241,30 +229,28 @@
<UnitName Value="GuiTestRunner"/>
<CursorPos X="34" Y="32"/>
<TopLine Value="25"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit24>
<Unit25>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\fpcunit.pp"/>
<UnitName Value="fpcunit"/>
<CursorPos X="21" Y="94"/>
<TopLine Value="83"/>
<UsageCount Value="4"/>
<UsageCount Value="3"/>
</Unit25>
<Unit26>
<Filename Value="..\..\imp_utils.pas"/>
<UnitName Value="imp_utils"/>
<CursorPos X="12" Y="47"/>
<TopLine Value="182"/>
<EditorIndex Value="7"/>
<UsageCount Value="15"/>
<Loaded Value="True"/>
<CursorPos X="1" Y="105"/>
<TopLine Value="90"/>
<UsageCount Value="17"/>
</Unit26>
<Unit27>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\xmlread.pp"/>
<UnitName Value="XMLRead"/>
<CursorPos X="43" Y="13"/>
<TopLine Value="1"/>
<UsageCount Value="2"/>
<UsageCount Value="1"/>
</Unit27>
<Unit28>
<Filename Value="test_parserdef.pas"/>
@ -278,241 +264,237 @@
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
<CursorPos X="8" Y="190"/>
<TopLine Value="133"/>
<UsageCount Value="3"/>
<UsageCount Value="2"/>
</Unit29>
<Unit30>
<Filename Value="..\..\wst.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
<UsageCount Value="8"/>
</Unit30>
<Unit31>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\heaph.inc"/>
<CursorPos X="43" Y="100"/>
<TopLine Value="83"/>
<UsageCount Value="1"/>
</Unit31>
<Unit32>
<Filename Value="..\test_fpc\interface_problem\interface_problem.pas"/>
<UnitName Value="interface_problem"/>
<CursorPos X="1" Y="10"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
</Unit32>
<Unit33>
<UsageCount Value="8"/>
</Unit31>
<Unit32>
<Filename Value="..\..\base_xmlrpc_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="base_xmlrpc_formatter"/>
<CursorPos X="35" Y="355"/>
<TopLine Value="330"/>
<UsageCount Value="151"/>
</Unit33>
<Unit34>
<CursorPos X="70" Y="354"/>
<TopLine Value="325"/>
<UsageCount Value="165"/>
</Unit32>
<Unit33>
<Filename Value="..\..\ws_helper\pscanner.pp"/>
<UnitName Value="PScanner"/>
<CursorPos X="19" Y="505"/>
<TopLine Value="491"/>
<UsageCount Value="16"/>
</Unit34>
<Unit35>
<UsageCount Value="15"/>
</Unit33>
<Unit34>
<Filename Value="..\..\ws_helper\pascal_parser_intf.pas"/>
<UnitName Value="pascal_parser_intf"/>
<CursorPos X="62" Y="296"/>
<TopLine Value="296"/>
<UsageCount Value="26"/>
</Unit35>
<Unit36>
<CursorPos X="3" Y="226"/>
<TopLine Value="206"/>
<EditorIndex Value="3"/>
<UsageCount Value="32"/>
<Loaded Value="True"/>
</Unit34>
<Unit35>
<Filename Value="..\..\ws_helper\pastree.pp"/>
<UnitName Value="PasTree"/>
<CursorPos X="18" Y="254"/>
<TopLine Value="243"/>
<UsageCount Value="16"/>
</Unit36>
<Unit37>
<CursorPos X="5" Y="150"/>
<TopLine Value="135"/>
<UsageCount Value="15"/>
</Unit35>
<Unit36>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-xml\src\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="38" Y="225"/>
<TopLine Value="203"/>
<UsageCount Value="15"/>
</Unit37>
<Unit38>
<UsageCount Value="14"/>
</Unit36>
<Unit37>
<Filename Value="..\..\wst_rtti_filter\cursor_intf.pas"/>
<UnitName Value="cursor_intf"/>
<CursorPos X="3" Y="75"/>
<TopLine Value="70"/>
<UsageCount Value="7"/>
</Unit38>
<Unit39>
<UsageCount Value="6"/>
</Unit37>
<Unit38>
<Filename Value="..\..\wst_rtti_filter\dom_cursors.pas"/>
<UnitName Value="dom_cursors"/>
<CursorPos X="3" Y="182"/>
<TopLine Value="180"/>
<UsageCount Value="7"/>
</Unit39>
<Unit40>
<UsageCount Value="6"/>
</Unit38>
<Unit39>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-fpcunit\src\fpcunit.pp"/>
<UnitName Value="fpcunit"/>
<CursorPos X="1" Y="446"/>
<TopLine Value="434"/>
<UsageCount Value="5"/>
</Unit40>
<Unit41>
<UsageCount Value="4"/>
</Unit39>
<Unit40>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\i386\i386.inc"/>
<CursorPos X="1" Y="1284"/>
<TopLine Value="1268"/>
<UsageCount Value="4"/>
</Unit41>
<Unit42>
<UsageCount Value="3"/>
</Unit40>
<Unit41>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\classes\streams.inc"/>
<CursorPos X="1" Y="107"/>
<TopLine Value="95"/>
<UsageCount Value="4"/>
</Unit42>
<Unit43>
<UsageCount Value="3"/>
</Unit41>
<Unit42>
<Filename Value="..\..\semaphore.pas"/>
<UnitName Value="semaphore"/>
<CursorPos X="3" Y="30"/>
<TopLine Value="23"/>
<UsageCount Value="6"/>
</Unit43>
<Unit44>
<UsageCount Value="5"/>
</Unit42>
<Unit43>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="14" Y="351"/>
<TopLine Value="336"/>
<UsageCount Value="7"/>
</Unit44>
<Unit45>
<UsageCount Value="6"/>
</Unit43>
<Unit44>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\win32\system.pp"/>
<UnitName Value="System"/>
<CursorPos X="22" Y="33"/>
<TopLine Value="18"/>
<UsageCount Value="5"/>
</Unit45>
<Unit46>
<UsageCount Value="4"/>
</Unit44>
<Unit45>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-base\src\inc\contnrs.pp"/>
<UnitName Value="contnrs"/>
<CursorPos X="3" Y="964"/>
<TopLine Value="962"/>
<UsageCount Value="4"/>
</Unit46>
<Unit47>
<UsageCount Value="3"/>
</Unit45>
<Unit46>
<Filename Value="..\..\wst_delphi.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
</Unit47>
<Unit48>
<UsageCount Value="8"/>
</Unit46>
<Unit47>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\strutils.pp"/>
<UnitName Value="strutils"/>
<CursorPos X="10" Y="29"/>
<TopLine Value="14"/>
<UsageCount Value="4"/>
</Unit48>
<Unit49>
<UsageCount Value="3"/>
</Unit47>
<Unit48>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpash.inc"/>
<CursorPos X="26" Y="173"/>
<TopLine Value="156"/>
<UsageCount Value="9"/>
</Unit49>
<Unit50>
<UsageCount Value="8"/>
</Unit48>
<Unit49>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpas.inc"/>
<CursorPos X="11" Y="333"/>
<TopLine Value="375"/>
<UsageCount Value="9"/>
</Unit50>
<Unit51>
<UsageCount Value="8"/>
</Unit49>
<Unit50>
<Filename Value="..\..\wst_fpc_xml.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="wst_fpc_xml"/>
<CursorPos X="65" Y="85"/>
<TopLine Value="56"/>
<UsageCount Value="97"/>
</Unit51>
<Unit52>
<UsageCount Value="111"/>
</Unit50>
<Unit51>
<Filename Value="..\..\wst_global.inc"/>
<CursorPos X="3" Y="4"/>
<TopLine Value="1"/>
<UsageCount Value="10"/>
</Unit52>
<Unit53>
<UsageCount Value="9"/>
</Unit51>
<Unit52>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-base\src\inc\custapp.pp"/>
<UnitName Value="CustApp"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="4"/>
</Unit53>
<Unit54>
<UsageCount Value="3"/>
</Unit52>
<Unit53>
<Filename Value="test_utilities.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="test_utilities"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="10"/>
<UsageCount Value="88"/>
<CursorPos X="40" Y="64"/>
<TopLine Value="58"/>
<EditorIndex Value="1"/>
<UsageCount Value="102"/>
<Loaded Value="True"/>
</Unit54>
<Unit55>
</Unit53>
<Unit54>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\fpcunit.pp"/>
<UnitName Value="fpcunit"/>
<CursorPos X="66" Y="231"/>
<TopLine Value="231"/>
<UsageCount Value="12"/>
</Unit55>
<Unit56>
<UsageCount Value="11"/>
</Unit54>
<Unit55>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\testregistry.pp"/>
<UnitName Value="testregistry"/>
<CursorPos X="11" Y="32"/>
<TopLine Value="17"/>
<UsageCount Value="14"/>
</Unit56>
<Unit57>
<UsageCount Value="13"/>
</Unit55>
<Unit56>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\testdecorator.pp"/>
<UnitName Value="testdecorator"/>
<CursorPos X="3" Y="30"/>
<TopLine Value="1"/>
<UsageCount Value="6"/>
</Unit57>
<Unit58>
<UsageCount Value="5"/>
</Unit56>
<Unit57>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\DUnitCompatibleInterface.inc"/>
<CursorPos X="21" Y="9"/>
<TopLine Value="1"/>
<UsageCount Value="11"/>
</Unit58>
<Unit59>
<UsageCount Value="10"/>
</Unit57>
<Unit58>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\typinfo.pp"/>
<UnitName Value="typinfo"/>
<CursorPos X="53" Y="41"/>
<TopLine Value="37"/>
<UsageCount Value="9"/>
</Unit59>
<Unit60>
<UsageCount Value="8"/>
</Unit58>
<Unit59>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysstrh.inc"/>
<CursorPos X="89" Y="122"/>
<TopLine Value="106"/>
<UsageCount Value="8"/>
</Unit60>
<Unit61>
<UsageCount Value="7"/>
</Unit59>
<Unit60>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysinth.inc"/>
<CursorPos X="24" Y="63"/>
<TopLine Value="46"/>
<UsageCount Value="8"/>
</Unit61>
<Unit62>
<UsageCount Value="7"/>
</Unit60>
<Unit61>
<Filename Value="..\..\ws_helper\wsdl2pas_imp.pas"/>
<UnitName Value="wsdl2pas_imp"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="31"/>
<UsageCount Value="9"/>
</Unit62>
<Unit63>
<UsageCount Value="8"/>
</Unit61>
<Unit62>
<Filename Value="..\..\..\..\..\..\lazarus2204\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="3" Y="196"/>
<TopLine Value="191"/>
<UsageCount Value="7"/>
</Unit63>
<Unit64>
<UsageCount Value="6"/>
</Unit62>
<Unit63>
<Filename Value="..\..\type_lib_edtr\umoduleedit.pas"/>
<ComponentName Value="fModuleEdit"/>
<HasResources Value="True"/>
@ -520,9 +502,9 @@
<UnitName Value="umoduleedit"/>
<CursorPos X="47" Y="21"/>
<TopLine Value="18"/>
<UsageCount Value="9"/>
</Unit64>
<Unit65>
<UsageCount Value="8"/>
</Unit63>
<Unit64>
<Filename Value="..\..\type_lib_edtr\ubindingedit.pas"/>
<ComponentName Value="fBindingEdit"/>
<HasResources Value="True"/>
@ -530,9 +512,9 @@
<UnitName Value="ubindingedit"/>
<CursorPos X="41" Y="21"/>
<TopLine Value="18"/>
<UsageCount Value="9"/>
</Unit65>
<Unit66>
<UsageCount Value="8"/>
</Unit64>
<Unit65>
<Filename Value="..\..\type_lib_edtr\ufarrayedit.pas"/>
<ComponentName Value="fArrayEdit"/>
<HasResources Value="True"/>
@ -540,9 +522,9 @@
<UnitName Value="ufarrayedit"/>
<CursorPos X="41" Y="9"/>
<TopLine Value="5"/>
<UsageCount Value="9"/>
</Unit66>
<Unit67>
<UsageCount Value="8"/>
</Unit65>
<Unit66>
<Filename Value="..\..\type_lib_edtr\uftypealiasedit.pas"/>
<ComponentName Value="fTypeAliasEdit"/>
<HasResources Value="True"/>
@ -550,9 +532,9 @@
<UnitName Value="uftypealiasedit"/>
<CursorPos X="22" Y="9"/>
<TopLine Value="7"/>
<UsageCount Value="9"/>
</Unit67>
<Unit68>
<UsageCount Value="8"/>
</Unit66>
<Unit67>
<Filename Value="..\..\type_lib_edtr\ufrmsaveoption.pas"/>
<ComponentName Value="frmSaveOptions"/>
<HasResources Value="True"/>
@ -560,174 +542,238 @@
<UnitName Value="ufrmsaveoption"/>
<CursorPos X="22" Y="9"/>
<TopLine Value="6"/>
<UsageCount Value="9"/>
</Unit68>
<Unit69>
<UsageCount Value="8"/>
</Unit67>
<Unit68>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="4" Y="64"/>
<TopLine Value="64"/>
<UsageCount Value="7"/>
</Unit69>
<Unit70>
<UsageCount Value="6"/>
</Unit68>
<Unit69>
<Filename Value="..\..\server_service_xmlrpc.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="server_service_xmlrpc"/>
<CursorPos X="10" Y="131"/>
<TopLine Value="116"/>
<EditorIndex Value="1"/>
<UsageCount Value="42"/>
<Loaded Value="True"/>
</Unit70>
<Unit71>
<CursorPos X="38" Y="33"/>
<TopLine Value="27"/>
<UsageCount Value="56"/>
</Unit69>
<Unit70>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\xmlread.pp"/>
<UnitName Value="XMLRead"/>
<CursorPos X="6" Y="37"/>
<TopLine Value="31"/>
<UsageCount Value="9"/>
</Unit71>
<Unit72>
<UsageCount Value="8"/>
</Unit70>
<Unit71>
<Filename Value="..\..\xmlrpc_formatter.pas"/>
<UnitName Value="xmlrpc_formatter"/>
<CursorPos X="31" Y="131"/>
<TopLine Value="116"/>
<UsageCount Value="11"/>
</Unit72>
<Unit73>
<CursorPos X="1" Y="169"/>
<TopLine Value="154"/>
<UsageCount Value="12"/>
</Unit71>
<Unit72>
<Filename Value="..\..\record_rtti.pas"/>
<UnitName Value="record_rtti"/>
<CursorPos X="1" Y="1"/>
<CursorPos X="37" Y="276"/>
<TopLine Value="265"/>
<EditorIndex Value="2"/>
<UsageCount Value="17"/>
<Loaded Value="True"/>
</Unit73>
<Unit74>
<UsageCount Value="16"/>
</Unit72>
<Unit73>
<Filename Value="..\..\wst_rtl_imp.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
<UsageCount Value="8"/>
</Unit73>
<Unit74>
<Filename Value="test_parsers.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="test_parsers"/>
<CursorPos X="3" Y="401"/>
<TopLine Value="421"/>
<EditorIndex Value="2"/>
<UsageCount Value="34"/>
<Loaded Value="True"/>
</Unit74>
<Unit75>
<Filename Value="..\..\ws_helper\xsd_parser.pas"/>
<UnitName Value="xsd_parser"/>
<CursorPos X="14" Y="83"/>
<TopLine Value="102"/>
<EditorIndex Value="4"/>
<UsageCount Value="16"/>
<Loaded Value="True"/>
</Unit75>
<Unit76>
<Filename Value="..\..\ws_helper\parserutils.pas"/>
<UnitName Value="parserutils"/>
<CursorPos X="3" Y="76"/>
<TopLine Value="61"/>
<UsageCount Value="10"/>
</Unit76>
<Unit77>
<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="10"/>
</Unit77>
<Unit78>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-fpcunit\src\DUnitCompatibleInterface.inc"/>
<CursorPos X="3" Y="120"/>
<TopLine Value="115"/>
<UsageCount Value="9"/>
</Unit78>
<Unit79>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-fpcunit\src\fpcunit.pp"/>
<UnitName Value="fpcunit"/>
<CursorPos X="1" Y="446"/>
<TopLine Value="431"/>
<UsageCount Value="11"/>
</Unit79>
<Unit80>
<Filename Value="..\..\ws_helper\logger_intf.pas"/>
<UnitName Value="logger_intf"/>
<CursorPos X="85" Y="50"/>
<TopLine Value="35"/>
<UsageCount Value="9"/>
</Unit80>
<Unit81>
<Filename Value="..\..\ws_helper\ws_parser_imp.pas"/>
<UnitName Value="ws_parser_imp"/>
<CursorPos X="65" Y="505"/>
<TopLine Value="482"/>
<EditorIndex Value="5"/>
<UsageCount Value="15"/>
<Loaded Value="True"/>
</Unit81>
<Unit82>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpash.inc"/>
<CursorPos X="26" Y="159"/>
<TopLine Value="144"/>
<UsageCount Value="9"/>
</Unit82>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="4784" Column="33" TopLine="4769"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position1>
<Position2>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1356" Column="38" TopLine="1346"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="446" Column="53" TopLine="424"/>
</Position2>
<Position3>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1403" Column="82" TopLine="1388"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="494" Column="54" TopLine="472"/>
</Position3>
<Position4>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1422" Column="82" TopLine="1406"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position4>
<Position5>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1816" Column="31" TopLine="1795"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="446" Column="53" TopLine="424"/>
</Position5>
<Position6>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="3848" Column="31" TopLine="3827"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="494" Column="54" TopLine="472"/>
</Position6>
<Position7>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="4784" Column="55" TopLine="4778"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position7>
<Position8>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="446" Column="53" TopLine="424"/>
</Position8>
<Position9>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1191" Column="17" TopLine="1176"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="254" Column="44" TopLine="218"/>
</Position9>
<Position10>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1231" Column="32" TopLine="1216"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="300" Column="19" TopLine="262"/>
</Position10>
<Position11>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1228" Column="13" TopLine="1213"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="249" Column="34" TopLine="240"/>
</Position11>
<Position12>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="337" Column="11" TopLine="322"/>
</Position12>
<Position13>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1191" Column="32" TopLine="1176"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="245" Column="8" TopLine="219"/>
</Position13>
<Position14>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1235" Column="84" TopLine="1220"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="261" Column="9" TopLine="248"/>
</Position14>
<Position15>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1403" Column="82" TopLine="1388"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="264" Column="18" TopLine="249"/>
</Position15>
<Position16>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1421" Column="82" TopLine="1406"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="266" Column="26" TopLine="251"/>
</Position16>
<Position17>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1816" Column="31" TopLine="1789"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="292" Column="23" TopLine="279"/>
</Position17>
<Position18>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="3848" Column="31" TopLine="3827"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="295" Column="18" TopLine="280"/>
</Position18>
<Position19>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="4786" Column="25" TopLine="4777"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="297" Column="26" TopLine="282"/>
</Position19>
<Position20>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1359" Column="50" TopLine="1337"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="308" Column="21" TopLine="293"/>
</Position20>
<Position21>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="4783" Column="27" TopLine="4761"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="339" Column="10" TopLine="324"/>
</Position21>
<Position22>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1359" Column="47" TopLine="1337"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="342" Column="10" TopLine="327"/>
</Position22>
<Position23>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="4740" Column="9" TopLine="4668"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="353" Column="20" TopLine="338"/>
</Position23>
<Position24>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="4808" Column="35" TopLine="4794"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="355" Column="28" TopLine="340"/>
</Position24>
<Position25>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="180" Column="15" TopLine="177"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="361" Column="23" TopLine="346"/>
</Position25>
<Position26>
<Filename Value="..\..\server_service_xmlrpc.pas"/>
<Caret Line="144" Column="14" TopLine="130"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="399" Column="8" TopLine="384"/>
</Position26>
<Position27>
<Filename Value="testformatter_unit.pas"/>
<Caret Line="3890" Column="49" TopLine="3890"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="401" Column="8" TopLine="386"/>
</Position27>
<Position28>
<Filename Value="testformatter_unit.pas"/>
<Caret Line="1483" Column="30" TopLine="1465"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="421" Column="23" TopLine="408"/>
</Position28>
<Position29>
<Filename Value="testformatter_unit.pas"/>
<Caret Line="3538" Column="39" TopLine="3538"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="424" Column="18" TopLine="409"/>
</Position29>
<Position30>
<Filename Value="..\..\record_rtti.pas"/>
<Caret Line="265" Column="32" TopLine="232"/>
<Filename Value="test_parsers.pas"/>
<Caret Line="426" Column="27" TopLine="411"/>
</Position30>
</JumpHistory>
</ProjectOptions>
@ -739,7 +785,7 @@
</Target>
<SearchPaths>
<IncludeFiles Value="..\..\"/>
<OtherUnitFiles Value="..\..\;..\..\ws_helper\"/>
<OtherUnitFiles Value="..\..\;..\..\ws_helper\;..\..\wst_rtti_filter\"/>
<UnitOutputDirectory Value="obj"/>
</SearchPaths>
<Parsing>
@ -767,48 +813,6 @@
</Other>
</CompilerOptions>
<Debugging>
<BreakPoints Count="10">
<Item1>
<Source Value="..\google_api\home\inoussa\Projets\Laz\tests\soap\test_soap.pas"/>
<Line Value="15"/>
</Item1>
<Item2>
<Source Value="..\google_api\home\inoussa\Projets\Laz\tests\soap\test_soap.pas"/>
<Line Value="16"/>
</Item2>
<Item3>
<Source Value="..\google_api\home\inoussa\Projets\Laz\tests\soap\test_soap.pas"/>
<Line Value="18"/>
</Item3>
<Item4>
<Source Value="..\google_api\home\inoussa\Projets\Laz\tests\soap\googleintfimpunit.pas"/>
<Line Value="63"/>
</Item4>
<Item5>
<Source Value="..\google_api\home\inoussa\Projets\Laz\v0.2\indy_http_protocol.pas"/>
<Line Value="69"/>
</Item5>
<Item6>
<Source Value="..\google_api\home\inoussa\Projets\Laz\v0.2\service_intf.pas"/>
<Line Value="567"/>
</Item6>
<Item7>
<Source Value="..\google_api\home\inoussa\Projets\Laz\v0.2\imp_utils.pas"/>
<Line Value="83"/>
</Item7>
<Item8>
<Source Value="testmetadata_unit.pas"/>
<Line Value="148"/>
</Item8>
<Item9>
<Source Value="testmetadata_unit.pas"/>
<Line Value="161"/>
</Item9>
<Item10>
<Source Value="..\..\metadata_repository.pas"/>
<Line Value="378"/>
</Item10>
</BreakPoints>
<Watches Count="2">
<Item1>
<Expression Value="FScopeObject^.Name"/>

View File

@ -16,7 +16,7 @@ uses
server_binary_formatter, metadata_repository,
metadata_generator, parserdefs, server_service_intf, metadata_wsdl,
test_parserdef, base_xmlrpc_formatter, wst_fpc_xml, test_utilities,
server_service_xmlrpc;
server_service_xmlrpc, test_parsers;
Const
ShortOpts = 'alh';

View File

@ -7,7 +7,7 @@
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="5"/>
<ActiveEditorIndexAtStart Value="8"/>
</General>
<VersionInfo>
<ProjectVersion Value=""/>
@ -32,13 +32,13 @@
<PackageName Value="LCL"/>
</Item2>
</RequiredPackages>
<Units Count="85">
<Units Count="93">
<Unit0>
<Filename Value="typ_lib_edtr.lpr"/>
<IsPartOfProject Value="True"/>
<CursorPos X="48" Y="15"/>
<CursorPos X="1" Y="21"/>
<TopLine Value="1"/>
<EditorIndex Value="6"/>
<EditorIndex Value="8"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit0>
@ -49,8 +49,8 @@
<IsPartOfProject Value="True"/>
<ResourceFilename Value="uwsttypelibraryedit.lrs"/>
<UnitName Value="uwsttypelibraryedit"/>
<CursorPos X="24" Y="374"/>
<TopLine Value="369"/>
<CursorPos X="45" Y="170"/>
<TopLine Value="151"/>
<EditorIndex Value="0"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
@ -67,12 +67,10 @@
<UnitName Value="wsdl2pas_imp"/>
<CursorPos X="61" Y="1902"/>
<TopLine Value="1879"/>
<EditorIndex Value="12"/>
<UsageCount Value="100"/>
<Bookmarks Count="1">
<Item0 X="65" Y="790" ID="2"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit3>
<Unit4>
<Filename Value="wsdl_generator.pas"/>
@ -107,9 +105,9 @@
<Filename Value="view_helper.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="view_helper"/>
<CursorPos X="25" Y="331"/>
<TopLine Value="1"/>
<EditorIndex Value="1"/>
<CursorPos X="1" Y="667"/>
<TopLine Value="652"/>
<EditorIndex Value="3"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit7>
@ -117,9 +115,9 @@
<Filename Value="..\ws_helper\source_utils.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="source_utils"/>
<CursorPos X="1" Y="274"/>
<TopLine Value="259"/>
<EditorIndex Value="11"/>
<CursorPos X="1" Y="153"/>
<TopLine Value="138"/>
<EditorIndex Value="13"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit8>
@ -129,7 +127,7 @@
<UnitName Value="edit_helper"/>
<CursorPos X="11" Y="717"/>
<TopLine Value="712"/>
<EditorIndex Value="3"/>
<EditorIndex Value="5"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit9>
@ -142,7 +140,7 @@
<UnitName Value="ufclassedit"/>
<CursorPos X="1" Y="118"/>
<TopLine Value="131"/>
<EditorIndex Value="7"/>
<EditorIndex Value="9"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit10>
@ -154,7 +152,7 @@
<UnitName Value="ufpropedit"/>
<CursorPos X="58" Y="147"/>
<TopLine Value="129"/>
<EditorIndex Value="9"/>
<EditorIndex Value="11"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit11>
@ -170,7 +168,7 @@
<UnitName Value="parserutils"/>
<CursorPos X="49" Y="27"/>
<TopLine Value="18"/>
<EditorIndex Value="4"/>
<EditorIndex Value="6"/>
<UsageCount Value="101"/>
<Loaded Value="True"/>
</Unit13>
@ -286,10 +284,10 @@
<Filename Value="..\ws_helper\pascal_parser_intf.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="pascal_parser_intf"/>
<CursorPos X="1" Y="636"/>
<TopLine Value="621"/>
<EditorIndex Value="13"/>
<UsageCount Value="191"/>
<CursorPos X="12" Y="176"/>
<TopLine Value="137"/>
<EditorIndex Value="14"/>
<UsageCount Value="195"/>
<Loaded Value="True"/>
</Unit30>
<Unit31>
@ -298,7 +296,7 @@
<UnitName Value="PParser"/>
<CursorPos X="18" Y="1148"/>
<TopLine Value="1126"/>
<UsageCount Value="191"/>
<UsageCount Value="195"/>
</Unit31>
<Unit32>
<Filename Value="..\ws_helper\logger_intf.pas"/>
@ -313,7 +311,7 @@
<UnitName Value="PasTree"/>
<CursorPos X="24" Y="296"/>
<TopLine Value="274"/>
<UsageCount Value="191"/>
<UsageCount Value="195"/>
</Unit33>
<Unit34>
<Filename Value="..\..\..\..\lazarus_23_215\lcl\include\treeview.inc"/>
@ -344,10 +342,10 @@
<Filename Value="..\ws_helper\generator.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="generator"/>
<CursorPos X="1" Y="865"/>
<TopLine Value="850"/>
<EditorIndex Value="5"/>
<UsageCount Value="108"/>
<CursorPos X="1" Y="2514"/>
<TopLine Value="2475"/>
<EditorIndex Value="7"/>
<UsageCount Value="112"/>
<Bookmarks Count="1">
<Item0 X="36" Y="2046" ID="1"/>
</Bookmarks>
@ -440,7 +438,7 @@
<UnitName Value="uprocedit"/>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="147"/>
<UsageCount Value="151"/>
</Unit50>
<Unit51>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\lcl\comctrls.pp"/>
@ -455,8 +453,8 @@
<UnitName Value="common_gui_utils"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="8"/>
<UsageCount Value="145"/>
<EditorIndex Value="10"/>
<UsageCount Value="149"/>
<Loaded Value="True"/>
</Unit52>
<Unit53>
@ -474,7 +472,7 @@
<UnitName Value="uargedit"/>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="138"/>
<UsageCount Value="142"/>
</Unit54>
<Unit55>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\lcl\interfaces\win32\win32wscontrols.pp"/>
@ -498,7 +496,7 @@
<UnitName Value="umoduleedit"/>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="130"/>
<UsageCount Value="134"/>
</Unit57>
<Unit58>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\lcl\stdctrls.pp"/>
@ -515,7 +513,7 @@
<UnitName Value="ubindingedit"/>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="120"/>
<UsageCount Value="124"/>
</Unit59>
<Unit60>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpash.inc"/>
@ -556,7 +554,7 @@
<UnitName Value="ufrmsaveoption"/>
<CursorPos X="42" Y="64"/>
<TopLine Value="42"/>
<UsageCount Value="116"/>
<UsageCount Value="120"/>
</Unit65>
<Unit66>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\lcl\dialogs.pp"/>
@ -599,7 +597,7 @@
<UnitName Value="ufarrayedit"/>
<CursorPos X="67" Y="117"/>
<TopLine Value="95"/>
<UsageCount Value="100"/>
<UsageCount Value="104"/>
</Unit71>
<Unit72>
<Filename Value="uftypealiasedit.pas"/>
@ -609,7 +607,7 @@
<UnitName Value="uftypealiasedit"/>
<CursorPos X="21" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="91"/>
<UsageCount Value="95"/>
</Unit72>
<Unit73>
<Filename Value="..\..\..\..\..\Documents and Settings\Administrateur\Bureau\ACER\n\AWSECommerceService.pas"/>
@ -682,20 +680,75 @@
<UnitName Value="ufrecordedit"/>
<CursorPos X="35" Y="99"/>
<TopLine Value="78"/>
<EditorIndex Value="10"/>
<UsageCount Value="57"/>
<EditorIndex Value="12"/>
<UsageCount Value="61"/>
<Loaded Value="True"/>
</Unit83>
<Unit84>
<Filename Value="..\ws_helper\wsdl_generator.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="wsdl_generator"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="2"/>
<UsageCount Value="28"/>
<CursorPos X="50" Y="1031"/>
<TopLine Value="1004"/>
<EditorIndex Value="4"/>
<UsageCount Value="32"/>
<Loaded Value="True"/>
</Unit84>
<Unit85>
<Filename Value="..\ws_helper\wsdl_parser.pas"/>
<UnitName Value="wsdl_parser"/>
<CursorPos X="38" Y="1136"/>
<TopLine Value="1113"/>
<EditorIndex Value="1"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit85>
<Unit86>
<Filename Value="..\ws_helper\xsd_parser.pas"/>
<UnitName Value="xsd_parser"/>
<CursorPos X="15" Y="93"/>
<TopLine Value="78"/>
<EditorIndex Value="2"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit86>
<Unit87>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<CursorPos X="1" Y="58"/>
<TopLine Value="43"/>
<UsageCount Value="10"/>
</Unit87>
<Unit88>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\except.inc"/>
<CursorPos X="1" Y="95"/>
<TopLine Value="80"/>
<UsageCount Value="10"/>
</Unit88>
<Unit89>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\i386\setjump.inc"/>
<CursorPos X="1" Y="36"/>
<TopLine Value="21"/>
<UsageCount Value="10"/>
</Unit89>
<Unit90>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\i386\i386.inc"/>
<CursorPos X="1" Y="1250"/>
<TopLine Value="1235"/>
<UsageCount Value="10"/>
</Unit90>
<Unit91>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\win32\classes.pp"/>
<UnitName Value="Classes"/>
<CursorPos X="1" Y="50"/>
<TopLine Value="21"/>
<UsageCount Value="10"/>
</Unit91>
<Unit92>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\objpas\classes\intf.inc"/>
<CursorPos X="1" Y="35"/>
<TopLine Value="194"/>
<UsageCount Value="10"/>
</Unit92>
</Units>
<JumpHistory Count="0" HistoryIndex="-1"/>
</ProjectOptions>
@ -721,8 +774,10 @@
</CodeGeneration>
<Linking>
<Debugging>
<GenerateDebugInfo Value="True"/>
<UseLineInfoUnit Value="False"/>
<StripSymbols Value="True"/>
</Debugging>
<LinkSmart Value="True"/>
<Options>
<Win32>
<GraphicApplication Value="True"/>

View File

@ -78,11 +78,9 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
PopupMenu = PopupMenu2
TabOrder = 0
BookMarkOptions.Xoffset = 81
BookMarkOptions.OnChange = nil
Gutter.DigitCount = 5
Gutter.ShowLineNumbers = True
Gutter.ShowCodeFolding = True
Gutter.OnChange = nil
Gutter.CodeFoldingWidth = 14
Highlighter = SynPasSyn1
Keystrokes = <
@ -407,7 +405,6 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
ShortCut = 24642
end>
ReadOnly = True
SelectedColor.OnChange = nil
end
end
object tsWSDL: TTabSheet
@ -427,9 +424,7 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
PopupMenu = PopupMenu2
TabOrder = 0
BookMarkOptions.Xoffset = 54
BookMarkOptions.OnChange = nil
Gutter.ShowLineNumbers = True
Gutter.OnChange = nil
Gutter.CodeFoldingWidth = 14
Highlighter = SynXMLSyn1
Keystrokes = <
@ -754,7 +749,6 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
ShortCut = 24642
end>
ReadOnly = True
SelectedColor.OnChange = nil
end
end
object tsProxy: TTabSheet
@ -774,9 +768,11 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
PopupMenu = PopupMenu2
TabOrder = 0
BookMarkOptions.Xoffset = 81
BookMarkOptions.OnChange = nil
Gutter.DigitCount = 5
Gutter.ShowLineNumbers = True
Gutter.ShowCodeFolding = True
Gutter.OnChange = nil
Gutter.CodeFoldingWidth = 14
Highlighter = SynPasSyn1
Keystrokes = <
@ -1101,6 +1097,7 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
ShortCut = 24642
end>
ReadOnly = True
SelectedColor.OnChange = nil
end
end
object tsImp: TTabSheet
@ -1120,9 +1117,11 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
PopupMenu = PopupMenu2
TabOrder = 0
BookMarkOptions.Xoffset = 81
BookMarkOptions.OnChange = nil
Gutter.DigitCount = 5
Gutter.ShowLineNumbers = True
Gutter.ShowCodeFolding = True
Gutter.OnChange = nil
Gutter.CodeFoldingWidth = 14
Highlighter = SynPasSyn1
Keystrokes = <
@ -1447,6 +1446,7 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
ShortCut = 24642
end>
ReadOnly = True
SelectedColor.OnChange = nil
end
end
object tsBinder: TTabSheet
@ -1466,10 +1466,12 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
PopupMenu = PopupMenu2
TabOrder = 0
BookMarkOptions.Xoffset = 81
BookMarkOptions.OnChange = nil
Gutter.AutoSize = True
Gutter.DigitCount = 5
Gutter.ShowLineNumbers = True
Gutter.ShowCodeFolding = True
Gutter.OnChange = nil
Gutter.CodeFoldingWidth = 14
Highlighter = SynPasSyn1
Keystrokes = <
@ -1794,6 +1796,7 @@ object fWstTypeLibraryEdit: TfWstTypeLibraryEdit
ShortCut = 24642
end>
ReadOnly = True
SelectedColor.OnChange = nil
end
end
object tsLog: TTabSheet

View File

@ -22,63 +22,61 @@ LazarusResources.Add('TfWstTypeLibraryEdit','FORMDATA',[
+'='#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'
+'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'#24'BookMarkOptions'
+'.OnChange'#13#17'Gutter.DigitCount'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gut'
+'ter.ShowCodeFolding'#9#15'Gutter.OnChange'#13#23'Gutter.CodeFoldingWidth'#2
+#14#11'Highlighter'#7#10'SynPasSyn1'#10'Keystrokes'#14#1#7'Command'#2#3#8'Sh'
+'ortCut'#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'S'
+'hortCut'#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'S'
+'hortCut'#3'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7'Command'#2#2#8'S'
+'hortCut'#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#22'SelectedColor.OnC'
+'hange'#13#0#0#0#9'TTabSheet'#6'tsWSDL'#7'Caption'#6#5'&WSDL'#12'ClientHeigh'
+'t'#3'='#2#11'ClientWidth'#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'#24'BookMarkOptions.OnChang'
+'e'#13#22'Gutter.ShowLineNumbers'#9#15'Gutter.OnChange'#13#23'Gutter.CodeFol'
+'dingWidth'#2#14#11'Highlighter'#7#10'SynXMLSyn1'#10'Keystrokes'#14#1#7'Comm'
+'and'#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Comma'
+'nd'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Com'
+'mand'#2'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1#7
+'pMenu2'#8'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'Q'#17'Gutter.DigitCou'
+'nt'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gutter.ShowCodeFolding'#9#23'Gutter'
+'.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#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
+'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
@ -117,23 +115,126 @@ LazarusResources.Add('TfWstTypeLibraryEdit','FORMDATA',[
+'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#22'Select'
+'edColor.OnChange'#13#0#0#0#9'TTabSheet'#7'tsProxy'#7'Caption'#6#6'&Proxy'#12
+'ClientHeight'#3'='#2#11'ClientWidth'#3#245#1#0#8'TSynEdit'#8'srcProxy'#6'He'
+'ight'#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
+#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'
+'ntWidth'#3#245#1#0#8'TSynEdit'#8'srcProxy'#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'#24'BookMarkOptions.OnChange'#13#17'Gutter.'
+'DigitCount'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gutter.ShowCodeFolding'#9#15
+'Gutter.OnChange'#13#23'Gutter.CodeFoldingWidth'#2#14#11'Highlighter'#7#10'S'
+'ynPasSyn1'#10'Keystrokes'#14#1#7'Command'#2#3#8'ShortCut'#2'&'#0#1#7'Comman'
+'d'#2'g'#8'ShortCut'#3'& '#0#1#7'Command'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Co'
+'mmand'#2#4#8'ShortCut'#2'('#0#1#7'Command'#2'h'#8'ShortCut'#3'( '#0#1#7'Com'
+'mand'#3#212#0#8'ShortCut'#3'(@'#0#1#7'Command'#2#1#8'ShortCut'#2'%'#0#1#7'C'
+'ommand'#2'e'#8'ShortCut'#3'% '#0#1#7'Command'#2#5#8'ShortCut'#3'%@'#0#1#7'C'
,'ommand'#2'i'#8'ShortCut'#3'%`'#0#1#7'Command'#2#2#8'ShortCut'#2''''#0#1#7'C'
+'ommand'#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'C'
+'ommand'#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'C'
+'ommand'#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'C'
+'ommand'#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'Command'#3'['#2#8'ShortCut'#3
+'. '#0#1#7'Command'#3#245#1#8'ShortCut'#2#8#0#1#7'Command'#3#245#1#8'ShortCu'
+'t'#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'C'
+'ommand'#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'Short'
+'Cut'#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'ShortCut'#3'Y`'#0#1#7'Command'#3'Y'#2#8'ShortCut'#3'Z@'#0#1#7'Com'
+'mand'#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'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'Short'
+'Cut'#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'ShortCut'#3'4`'#0#1#7'Command'#3'd'#1#8'ShortCut'#3'5`'#0#1#7'Comman'
+'d'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Command'#3'f'#1#8'ShortCut'#3'7`'#0#1#7'C'
+'ommand'#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'Command'#3#233#0#8'ShortCut'#3'L`'#0#1#7'Command'#3'd'#2#8'ShortCu'
+'t'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'#3#9' '#0#1#7'Command'#3#250#0#8'Sh'
+'ortCut'#3'B`'#0#0#8'ReadOnly'#9#22'SelectedColor.OnChange'#13#0#0#0#9'TTabS'
+'heet'#5'tsImp'#7'Caption'#6#24'Im&plementation Skeleton'#12'ClientHeight'#3
+'='#2#11'ClientWidth'#3#245#1#0#8'TSynEdit'#6'srcImp'#6'Height'#3'='#2#5'Wid'
+'th'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'F'
+'ont.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'#24'BookMarkOptions.OnChange'
+#13#17'Gutter.DigitCount'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gutter.ShowCod'
+'eFolding'#9#15'Gutter.OnChange'#13#23'Gutter.CodeFoldingWidth'#2#14#11'High'
+'lighter'#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'Short'
+'Cut'#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'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'Comman'
+'d'#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'ShortC'
+'ut'#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'ShortCut'#3'T@'#0#1#7'Comm'
+'and'#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'Command'#3'-'#1#8'ShortCu'
+'t'#3'0@'#0#1#7'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7'Command'#3'/'#1#8'Sh'
+'ortCut'#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'Comman'
+'d'#3'5'#1#8'ShortCut'#3'8@'#0#1#7'Command'#3'6'#1#8'ShortCut'#3'9@'#0#1#7'C'
+'ommand'#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'Command'#3'f'#1#8'ShortCu'
+'t'#3'7`'#0#1#7'Command'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'Command'#3'h'#1#8'Sh'
+'ortCut'#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'Comma'
+'nd'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#22'SelectedColor.OnChange'
+#13#0#0#0#9'TTabSheet'#8'tsBinder'#7'Caption'#6#7'&Binder'#12'ClientHeight'#3
+'='#2#11'ClientWidth'#3#245#1#0#8'TSynEdit'#9'srcBinder'#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'#24'BookMarkOptions.OnChange'
+#13#15'Gutter.AutoSize'#9#17'Gutter.DigitCount'#2#5#22'Gutter.ShowLineNumber'
+'s'#9#22'Gutter.ShowCodeFolding'#9#15'Gutter.OnChange'#13#23'Gutter.CodeFold'
+'ingWidth'#2#14#11'Highlighter'#7#10'SynPasSyn1'#10'Keystrokes'#14#1#7'Comma'
+'nd'#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Comman'
+'d'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Comm'
+'and'#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
@ -156,7 +257,7 @@ LazarusResources.Add('TfWstTypeLibraryEdit','FORMDATA',[
+#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'
,#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
@ -167,217 +268,118 @@ LazarusResources.Add('TfWstTypeLibraryEdit','FORMDATA',[
+'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'#5'tsImp'#7'Caption'#6#24'Im&plementation Skeleton'#12'ClientHeigh'
+'t'#3'='#2#11'ClientWidth'#3#245#1#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.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'#8
+'tsBinder'#7'Caption'#6#7'&Binder'#12'ClientHeight'#3'='#2#11'ClientWidth'#3
+#245#1#0#8'TSynEdit'#9'srcBinder'#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'clBlac'
+'k'#11'Font.Height'#2#236#9'Font.Name'#6#7'Courier'#10'Font.Pitch'#7#7'fpFix'
+'ed'#11'ParentColor'#8#9'PopupMenu'#7#10'PopupMenu2'#8'TabOrder'#2#0#23'Book'
+'MarkOptions.Xoffset'#2'Q'#15'Gutter.AutoSize'#9#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
+'tsLog'#7'Caption'#6#4'&Log'#12'ClientHeight'#3'='#2#11'ClientWidth'#3#245#1
+#0#5'TMemo'#6'mmoLog'#6'Height'#3'='#2#5'Width'#3#245#1#5'Align'#7#8'alClien'
+'t'#13'Lines.Strings'#1#6#0#0#10'ScrollBars'#7#6'ssBoth'#8'TabOrder'#2#0#0#0
+#0#0#0#9'TSplitter'#9'Splitter1'#4'Left'#3':'#1#6'Height'#3'Y'#2#5'Width'#2#8
+#5'Color'#7#7'clBlack'#11'ParentColor'#8#0#0#9'TMainMenu'#9'MainMenu1'#4'lef'
+'t'#3'`'#1#3'top'#2'p'#0#9'TMenuItem'#9'MenuItem1'#7'Caption'#6#6'&Files'#0#9
+'TMenuItem'#10'MenuItem16'#6'Action'#7#10'actNewFile'#7'OnClick'#7#17'actNew'
+'FileExecute'#0#0#9'TMenuItem'#9'MenuItem2'#7'Caption'#6#1'-'#0#0#9'TMenuIte'
+'m'#9'MenuItem5'#6'Action'#7#11'actOpenFile'#7'OnClick'#7#18'actOpenFileExec'
+'ute'#0#0#9'TMenuItem'#9'MenuItem3'#6'Action'#7#9'actExport'#7'OnClick'#7#16
+'actExportExecute'#0#0#9'TMenuItem'#9'MenuItem7'#6'Action'#7#7'actSave'#7'On'
+'Click'#7#14'actSaveExecute'#0#0#9'TMenuItem'#10'MenuItem32'#6'Action'#7#9'a'
+'ctSaveAs'#7'OnClick'#7#16'actSaveAsExecute'#0#0#9'TMenuItem'#10'MenuItem17'
+#7'Caption'#6#1'-'#0#0#9'TMenuItem'#9'MenuItem4'#6'Action'#7#7'actExit'#7'On'
+'Click'#7#14'actExitExecute'#0#0#0#9'TMenuItem'#10'MenuItem14'#7'Caption'#6#5
+'&View'#0#9'TMenuItem'#10'MenuItem15'#6'Action'#7#14'actRefreshView'#7'OnCli'
+'ck'#7#21'actRefreshViewExecute'#0#0#9'TMenuItem'#10'MenuItem29'#7'Caption'#6
+#1'-'#0#0#9'TMenuItem'#10'MenuItem30'#6'Action'#7#13'actFullExpand'#7'OnClic'
+'k'#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'Act'
+'ion'#7#13'actEnumCreate'#7'OnClick'#7#20'actEnumCreateExecute'#0#0#9'TMenuI'
+'tem'#10'MenuItem23'#6'Action'#7#17'actCompoundCreate'#7'OnClick'#7#24'actCo'
+'mpoundCreateExecute'#0#0#9'TMenuItem'#10'MenuItem48'#6'Action'#7#15'actReco'
+'rdCreate'#7'OnClick'#7#22'actRecordCreateExecute'#0#0#9'TMenuItem'#10'MenuI'
+'tem25'#6'Action'#7#13'actIntfCreate'#7'OnClick'#7#20'actIntfCreateExecute'#0
+#0#9'TMenuItem'#10'MenuItem35'#6'Action'#7#14'actArrayCreate'#7'OnClick'#7#21
+'actArrayCreateExecute'#0#0#9'TMenuItem'#10'MenuItem36'#6'Action'#7#18'actTy'
+'peALiasCreate'#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'actUpdat'
+'eObjectExecute'#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'DisableIfNoHandler'#9#9'OnExecute'#7#18'actOpenF'
+'ileExecute'#0#0#7'TAction'#7'actExit'#7'Caption'#6#4'Exit'#18'DisableIfNoHa'
+'ndler'#9#9'OnExecute'#7#14'actExitExecute'#0#0#7'TAction'#9'actExport'#7'Ca'
+'ption'#6#24'Save generated files ...'#18'DisableIfNoHandler'#9#9'OnExecute'
+#7#16'actExportExecute'#8'OnUpdate'#7#15'actExportUpdate'#0#0#7'TAction'#8'a'
+'ctAbout'#7'Caption'#6#5'About'#18'DisableIfNoHandler'#9#9'OnExecute'#7#15'a'
+'ctAboutExecute'#0#0#7'TAction'#9'actSaveAs'#7'Caption'#6#11'Save As ...'#18
+'DisableIfNoHandler'#9#9'OnExecute'#7#16'actSaveAsExecute'#8'OnUpdate'#7#15
+'actExportUpdate'#0#0#7'TAction'#13'actEnumCreate'#7'Caption'#6#18'Create En'
+'umeration'#18'DisableIfNoHandler'#9#9'OnExecute'#7#20'actEnumCreateExecute'
+#0#0#7'TAction'#15'actUpdateObject'#7'Caption'#6#6'Update'#18'DisableIfNoHan'
+'dler'#9#9'OnExecute'#7#22'actUpdateObjectExecute'#8'OnUpdate'#7#21'actUpdat'
+'eObjectUpdate'#0#0#7'TAction'#14'actRefreshView'#7'Caption'#6#14'&Refresh V'
+'iews'#18'DisableIfNoHandler'#9#9'OnExecute'#7#21'actRefreshViewExecute'#0#0
+#7'TAction'#10'actNewFile'#7'Caption'#6#8'New File'#18'DisableIfNoHandler'#9
+#9'OnExecute'#7#17'actNewFileExecute'#0#0#7'TAction'#17'actCompoundCreate'#7
+'Caption'#6#17'Create Class Type'#18'DisableIfNoHandler'#9#9'OnExecute'#7#24
+'actCompoundCreateExecute'#0#0#7'TAction'#13'actIntfCreate'#7'Caption'#6#16
,'Create Interface'#18'DisableIfNoHandler'#9#9'OnExecute'#7#20'actIntfCreateE'
+'xecute'#0#0#7'TAction'#13'actFullExpand'#7'Caption'#6#11'Full expand'#18'Di'
+'sableIfNoHandler'#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'actFullCollapseExecute'#0#0#7'TAction'#7'actSave'#7'Capti'
+'on'#6#4'Save'#18'DisableIfNoHandler'#9#9'OnExecute'#7#14'actSaveExecute'#0#0
+#7'TAction'#9'actDelete'#7'Caption'#6#6'Delete'#18'DisableIfNoHandler'#9#9'O'
+'nExecute'#7#16'actDeleteExecute'#8'OnUpdate'#7#21'actUpdateObjectUpdate'#0#0
+#7'TAction'#14'actArrayCreate'#7'Caption'#6#12'Create Array'#18'DisableIfNoH'
+'andler'#9#9'OnExecute'#7#21'actArrayCreateExecute'#0#0#7'TAction'#18'actTyp'
+'eALiasCreate'#7'Caption'#6#17'Create Type ALias'#18'DisableIfNoHandler'#9#9
+'OnExecute'#7#25'actTypeALiasCreateExecute'#0#0#7'TAction'#15'actRecordCreat'
+'e'#7'Caption'#6#13'Create Record'#18'DisableIfNoHandler'#9#9'OnExecute'#7#22
+'actRecordCreateExecute'#0#0#0#11'TOpenDialog'#2'OD'#5'Title'#6#26'Ouvrir un'
+' fichier existant'#6'Filter'#6'3WDSL files(*.WSDL)|*.WSDL|Pascal file (*.pa'
+'s)|*.pas'#11'FilterIndex'#2#0#10'InitialDir'#6#2'.\'#7'Options'#11#15'ofPat'
+'hMustExist'#15'ofFileMustExist'#14'ofEnableSizing'#12'ofViewDetail'#0#4'lef'
+'t'#3#153#1#3'top'#2'X'#0#0#10'TSynPasSyn'#10'SynPasSyn1'#7'Enabled'#8#23'Co'
+'mmentAttri.Foreground'#7#6'clBlue'#18'CommentAttri.Style'#11#6'fsBold'#0#22
+'StringAttri.Foreground'#7#8'clMaroon'#17'SymbolAttri.Style'#11#6'fsBold'#0
+#25'DirectiveAttri.Foreground'#7#7'clGreen'#20'DirectiveAttri.Style'#11#6'fs'
+'Bold'#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
+#3#9' '#0#1#7'Command'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#22'Select'
+'edColor.OnChange'#13#0#0#0#9'TTabSheet'#5'tsLog'#7'Caption'#6#4'&Log'#12'Cl'
+'ientHeight'#3'='#2#11'ClientWidth'#3#245#1#0#5'TMemo'#6'mmoLog'#6'Height'#3
+'='#2#5'Width'#3#245#1#5'Align'#7#8'alClient'#13'Lines.Strings'#1#6#0#0#10'S'
+'crollBars'#7#6'ssBoth'#8'TabOrder'#2#0#0#0#0#0#0#9'TSplitter'#9'Splitter1'#4
+'Left'#3':'#1#6'Height'#3'Y'#2#5'Width'#2#8#5'Color'#7#7'clBlack'#11'ParentC'
+'olor'#8#0#0#9'TMainMenu'#9'MainMenu1'#4'left'#3'`'#1#3'top'#2'p'#0#9'TMenuI'
+'tem'#9'MenuItem1'#7'Caption'#6#6'&Files'#0#9'TMenuItem'#10'MenuItem16'#6'Ac'
+'tion'#7#10'actNewFile'#7'OnClick'#7#17'actNewFileExecute'#0#0#9'TMenuItem'#9
+'MenuItem2'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#9'MenuItem5'#6'Action'#7#11'a'
+'ctOpenFile'#7'OnClick'#7#18'actOpenFileExecute'#0#0#9'TMenuItem'#9'MenuItem'
+'3'#6'Action'#7#9'actExport'#7'OnClick'#7#16'actExportExecute'#0#0#9'TMenuIt'
+'em'#9'MenuItem7'#6'Action'#7#7'actSave'#7'OnClick'#7#14'actSaveExecute'#0#0
+#9'TMenuItem'#10'MenuItem32'#6'Action'#7#9'actSaveAs'#7'OnClick'#7#16'actSav'
+'eAsExecute'#0#0#9'TMenuItem'#10'MenuItem17'#7'Caption'#6#1'-'#0#0#9'TMenuIt'
+'em'#9'MenuItem4'#6'Action'#7#7'actExit'#7'OnClick'#7#14'actExitExecute'#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'#0#0#7'TAction'#7'act'
+'Exit'#7'Caption'#6#4'Exit'#18'DisableIfNoHandler'#9#9'OnExecute'#7#14'actEx'
+'itExecute'#0#0#7'TAction'#9'actExport'#7'Caption'#6#24'Save generated files'
+' ...'#18'DisableIfNoHandler'#9#9'OnExecute'#7#16'actExportExecute'#8'OnUpda'
+'te'#7#15'actExportUpdate'#0#0#7'TAction'#8'actAbout'#7'Caption'#6#5'About'
+#18'DisableIfNoHandler'#9#9'OnExecute'#7#15'actAboutExecute'#0#0#7'TAction'#9
+'actSaveAs'#7'Caption'#6#11'Save As ...'#18'DisableIfNoHandler'#9#9'OnExecut'
+'e'#7#16'actSaveAsExecute'#8'OnUpdate'#7#15'actExportUpdate'#0#0#7'TAction'
+#13'actEnumCreate'#7'Caption'#6#18'Create Enumeration'#18'DisableIfNoHandler'
+#9#9'OnExecute'#7#20'actEnumCreateExecute'#0#0#7'TAction'#15'actUpdateObject'
+#7'Caption'#6#6'Update'#18'DisableIfNoHandler'#9#9'OnExecute'#7#22'actUpdate'
+'ObjectExecute'#8'OnUpdate'#7#21'actUpdateObjectUpdate'#0#0#7'TAction'#14'ac'
+'tRefreshView'#7'Caption'#6#14'&Refresh Views'#18'DisableIfNoHandler'#9#9'On'
+'Execute'#7#21'actRefreshViewExecute'#0#0#7'TAction'#10'actNewFile'#7'Captio'
+'n'#6#8'New File'#18'DisableIfNoHandler'#9#9'OnExecute'#7#17'actNewFileExecu'
+'te'#0#0#7'TAction'#17'actCompoundCreate'#7'Caption'#6#17'Create Class Type'
,#18'DisableIfNoHandler'#9#9'OnExecute'#7#24'actCompoundCreateExecute'#0#0#7
+'TAction'#13'actIntfCreate'#7'Caption'#6#16'Create Interface'#18'DisableIfNo'
+'Handler'#9#9'OnExecute'#7#20'actIntfCreateExecute'#0#0#7'TAction'#13'actFul'
+'lExpand'#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'actFullCollaps'
+'eExecute'#0#0#7'TAction'#7'actSave'#7'Caption'#6#4'Save'#18'DisableIfNoHand'
+'ler'#9#9'OnExecute'#7#14'actSaveExecute'#0#0#7'TAction'#9'actDelete'#7'Capt'
+'ion'#6#6'Delete'#18'DisableIfNoHandler'#9#9'OnExecute'#7#16'actDeleteExecut'
+'e'#8'OnUpdate'#7#21'actUpdateObjectUpdate'#0#0#7'TAction'#14'actArrayCreate'
+#7'Caption'#6#12'Create Array'#18'DisableIfNoHandler'#9#9'OnExecute'#7#21'ac'
+'tArrayCreateExecute'#0#0#7'TAction'#18'actTypeALiasCreate'#7'Caption'#6#17
+'Create Type ALias'#18'DisableIfNoHandler'#9#9'OnExecute'#7#25'actTypeALiasC'
+'reateExecute'#0#0#7'TAction'#15'actRecordCreate'#7'Caption'#6#13'Create Rec'
+'ord'#18'DisableIfNoHandler'#9#9'OnExecute'#7#22'actRecordCreateExecute'#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'ofPathMustExist'#15'ofFileMustExist'
+#14'ofEnableSizing'#12'ofViewDetail'#0#4'left'#3#153#1#3'top'#2'X'#0#0#10'TS'
+'ynPasSyn'#10'SynPasSyn1'#7'Enabled'#8#23'CommentAttri.Foreground'#7#6'clBlu'
+'e'#18'CommentAttri.Style'#11#6'fsBold'#0#22'StringAttri.Foreground'#7#8'clM'
+'aroon'#17'SymbolAttri.Style'#11#6'fsBold'#0#25'DirectiveAttri.Foreground'#7
+#7'clGreen'#20'DirectiveAttri.Style'#11#6'fsBold'#0#14'NestedComments'#9#4'l'
+'eft'#3#183#1#3'top'#2'h'#0#0#11'TSaveDialog'#2'SD'#5'Title'#6#27'Enregistre'
+'r le fichier sous'#10'DefaultExt'#6#5'.WSDL'#6'Filter'#6#25'WDSL files(*.WS'
+'DL)|*.WSDL'#11'FilterIndex'#2#0#7'Options'#11#15'ofPathMustExist'#14'ofEnab'
+'leSizing'#12'ofViewDetail'#0#4'left'#3#242#1#3'top'#3#176#0#0#0#10'TPopupMe'
+'nu'#10'PopupMenu1'#4'left'#3#152#0#3'top'#3#152#0#0#9'TMenuItem'#10'MenuIte'
+'m28'#6'Action'#7#13'actFullExpand'#7'OnClick'#7#20'actFullExpandExecute'#0#0
+#9'TMenuItem'#10'MenuItem27'#6'Action'#7#15'actFullCollapse'#7'OnClick'#7#22
+'actFullCollapseExecute'#0#0#9'TMenuItem'#10'MenuItem39'#6'Action'#7#14'actR'
+'efreshView'#7'OnClick'#7#21'actRefreshViewExecute'#0#0#9'TMenuItem'#10'Menu'
+'Item26'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#9'MenuItem8'#6'Action'#7#13'actE'
+'numCreate'#7'OnClick'#7#20'actEnumCreateExecute'#0#0#9'TMenuItem'#10'MenuIt'
+'em21'#6'Action'#7#17'actCompoundCreate'#7'OnClick'#7#24'actCompoundCreateEx'
+'ecute'#0#0#9'TMenuItem'#10'MenuItem46'#6'Action'#7#15'actRecordCreate'#7'On'
+'Click'#7#22'actRecordCreateExecute'#0#0#9'TMenuItem'#10'MenuItem24'#6'Actio'
+'n'#7#13'actIntfCreate'#7'OnClick'#7#20'actIntfCreateExecute'#0#0#9'TMenuIte'
+'m'#10'MenuItem37'#6'Action'#7#14'actArrayCreate'#7'OnClick'#7#21'actArrayCr'
+'eateExecute'#0#0#9'TMenuItem'#10'MenuItem38'#6'Action'#7#18'actTypeALiasCre'
+'ate'#7'OnClick'#7#25'actTypeALiasCreateExecute'#0#0#9'TMenuItem'#10'MenuIte'
+'m22'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#9'MenuItem9'#6'Action'#7#15'actUpda'
+'teObject'#7'OnClick'#7#22'actUpdateObjectExecute'#0#0#9'TMenuItem'#10'MenuI'
+'tem33'#6'Action'#7#9'actDelete'#7'OnClick'#7#16'actDeleteExecute'#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'actRefreshViewEx'
+'ecute'#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'actExportExecute'#0#0#9
+'TMenuItem'#10'MenuItem40'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#10'MenuItem41'
+#6'Action'#7#14'actArrayCreate'#7'OnClick'#7#21'actArrayCreateExecute'#0#0#9
+'TMenuItem'#10'MenuItem45'#6'Action'#7#17'actCompoundCreate'#7'OnClick'#7#24
+'actCompoundCreateExecute'#0#0#9'TMenuItem'#10'MenuItem47'#6'Action'#7#15'ac'
+'tRecordCreate'#7'OnClick'#7#22'actRecordCreateExecute'#0#0#9'TMenuItem'#10
+'MenuItem44'#6'Action'#7#13'actEnumCreate'#7'OnClick'#7#20'actEnumCreateExec'
+'ute'#0#0#9'TMenuItem'#10'MenuItem43'#6'Action'#7#13'actIntfCreate'#7'OnClic'
+'k'#7#20'actIntfCreateExecute'#0#0#9'TMenuItem'#10'MenuItem42'#6'Action'#7#18
+'actTypeALiasCreate'#7'OnClick'#7#25'actTypeALiasCreateExecute'#0#0#0#10'TSy'
+'nXMLSyn'#10'SynXMLSyn1'#13'DefaultFilter'#6#30'Documents WSDL (*.wsdl)|*.ws'
+'dl'#7'Enabled'#8#23'ElementAttri.Foreground'#7#6'clNavy'#30'AttributeValueA'
+'ttri.Foreground'#7#8'clPurple'#16'WantBracesParsed'#8#4'left'#3#210#1#3'top'
+#3#252#0#0#0#0
]);

View File

@ -168,7 +168,7 @@ var
implementation
uses view_helper, DOM, XMLRead, XMLWrite, //HeapTrc,
wsdl2pas_imp, 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, wsdl_generator,
uabout, edit_helper, udm, ufrmsaveoption, pparser
{$IFDEF WST_IDE},LazIDEIntf,IDEMsgIntf{$ENDIF};
@ -249,7 +249,7 @@ function ParseWsdlFile(
):TwstPasTreeContainer;overload;
var
locDoc : TXMLDocument;
prsr : TWsdlParser;
prsr : IParser;
symName : string;
begin
Result := nil;
@ -262,15 +262,13 @@ begin
try
Result := TwstPasTreeContainer.Create();
try
prsr := TWsdlParser.Create(locDoc,Result);
prsr.OnMessage := ANotifier;
prsr.Parse(pmAllTypes,symName);
prsr := TWsdlParser.Create(locDoc,Result,ANotifier);
prsr.Execute(pmAllTypes,symName);
except
FreeAndNil(Result);
raise;
end;
finally
FreeAndNil(prsr);
FreeAndNil(locDoc);
end;
end;
@ -389,12 +387,15 @@ begin
end;
function CreateSymbolTable(const AName : string):TwstPasTreeContainer ;
var
mdl : TPasModule;
begin
Result := TwstPasTreeContainer.Create();
try
CreateWstInterfaceSymbolTable(Result);
Result.CreateElement(TPasModule,AName,Result.Package,visDefault,'',0);
Result.CurrentModule.InterfaceSection := TPasSection(Result.CreateElement(TPasSection,'',Result.CurrentModule,visDefault,'',0));
mdl := TPasModule(Result.CreateElement(TPasModule,AName,Result.Package,visDefault,'',0));
mdl.InterfaceSection := TPasSection(Result.CreateElement(TPasSection,'',mdl,visDefault,'',0));
Result.Package.Modules.Add(mdl);
except
FreeAndNil(Result);
raise;
@ -708,6 +709,7 @@ var
objPtr : ISymbolPainter;
nd : TTreeNode;
begin
mmoLog.Clear();
trvSchema.BeginUpdate();
try
trvSchema.Items.Clear();

View File

@ -100,7 +100,7 @@ Conditionals=
DebugSourceDirs=C:\Programmes\lazarus\wst\trunk\fcl-units\rtl\;C:\Programmes\lazarus\wst\trunk\;C:\Programmes\lazarus\wst\trunk\fcl-units\fcl-passrc\src\
UsePackages=0
[Parameters]
RunParams=-u -i -p -b -a"C:\Programmes\lazarus\wst\trunk\tests\files" "C:\Programmes\lazarus\utils\googleapi\GoogleSearch.wsdl"
RunParams=-uA -i -p -b -a"C:\Programmes\lazarus\wst\trunk\tests\files" "C:\Programmes\lazarus\wst\trunk\type_lib_edtr\files\company.xsd"
HostApplication=
Launcher=
UseLauncher=0
@ -149,14 +149,15 @@ Item0=C:\Programmes\lazarus\wst\trunk\fcl-units\rtl\;C:\Programmes\lazarus\wst\t
Count=1
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[HistoryLists\hlSearchPath]
Count=7
Count=8
Item0=..\;..\..\;..\..\fcl-units\fcl-passrc\src;..\..\fcl-units\rtl\inc;..\..\wst_rtti_filter
Item1=..\;..\..\;..\..\fcl-units\fcl-passrc\src;..\..\fcl-units\rtl;..\..\wst_rtti_filter
Item2=..\;..\..\;..\..\fcl-units\fcl-passrc\src;..\..\fcl-units\rtl
Item3=..\;..\..\;..\..\fcl-units\fcl-passrc\src
Item4=..\;..\..\;..\..\fcl-passrc\src
Item5=..\;..\..\
Item6=..\
Item1=$(DELPHI)\Lib\Debug;C:\PROGRA~1\Borland\Delphi7\MyTools\JVCL\3.20\jcl\lib\d7\debug;..\;..\..\;..\..\fcl-units\fcl-passrc\src;..\..\fcl-units\rtl\inc;..\..\wst_rtti_filter
Item2=..\;..\..\;..\..\fcl-units\fcl-passrc\src;..\..\fcl-units\rtl;..\..\wst_rtti_filter
Item3=..\;..\..\;..\..\fcl-units\fcl-passrc\src;..\..\fcl-units\rtl
Item4=..\;..\..\;..\..\fcl-units\fcl-passrc\src
Item5=..\;..\..\;..\..\fcl-passrc\src
Item6=..\;..\..\
Item7=..\
[HistoryLists\hlUnitOutputDirectory]
Count=1
Item0=obj

View File

@ -35,11 +35,13 @@ uses
XMLDoc,
XMLIntf,
wst_delphi_xml,
wsdl2pas_imp,
pastree,
pparser,
pascal_parser_intf,
logger_intf;
logger_intf,
xsd_parser,
ws_parser_imp,
wsdl_parser;
{$INCLUDE ws_helper_prog.inc}

View File

@ -164,11 +164,10 @@ type
procedure GenerateCustomMetadatas();
function GetDestUnitName():string;
procedure PrepareModule();
procedure InternalExecute();
public
constructor Create(
ASymTable : TwstPasTreeContainer;
ASrcMngr : ISourceManager
);
procedure Execute();override;
end;
@ -2272,22 +2271,7 @@ begin
Result := SymbolTable.CurrentModule.Name;
end;
constructor TInftGenerator.Create(
ASymTable : TwstPasTreeContainer;
ASrcMngr : ISourceManager
);
begin
inherited Create(ASymTable,ASrcMngr);
FDecStream := SrcMngr.CreateItem(GetDestUnitName() + '.dec');
FImpStream := SrcMngr.CreateItem(GetDestUnitName() + '.imp');
FImpTempStream := SrcMngr.CreateItem(GetDestUnitName() + '.tmp_imp');
FImpLastStream := SrcMngr.CreateItem(GetDestUnitName() + '.tmp_imp_last');
FRttiFunc := SrcMngr.CreateItem(GetDestUnitName() + '.tmp_rtti_func');
FImpTempStream.IncIndent();
FImpLastStream.IncIndent();
end;
procedure TInftGenerator.Execute();
procedure TInftGenerator.InternalExecute();
procedure SortRecords(AList : TList);
var
@ -2361,7 +2345,9 @@ var
elt : TPasElement;
classAncestor : TPasElement;
tmpList : TList;
intfCount : PtrInt;
begin
intfCount := 0;
objLst := nil;
tmpList := nil;
gnrClssLst := TObjectList.Create(False);
@ -2470,15 +2456,19 @@ begin
elt := TPasElement(typeList[i]);
if elt.InheritsFrom(TPasClassType) and ( TPasClassType(elt).ObjKind = okInterface ) then begin
GenerateIntf(TPasClassType(elt));
Inc(intfCount);
end;
end;
NewLine();
IncIndent();
Indent(); WriteLn('procedure Register_%s_ServiceMetadata();',[SymbolTable.CurrentModule.Name]);
DecIndent();
GenerateCustomMetadatas();
if ( intfCount > 0 ) then begin
SetCurrentStream(FDecStream);
NewLine();
IncIndent();
Indent(); WriteLn('procedure Register_%s_ServiceMetadata();',[SymbolTable.CurrentModule.Name]);
DecIndent();
GenerateCustomMetadatas();
end;
FImpLastStream.NewLine();
GenerateUnitImplementationFooter();
FSrcMngr.Merge(GetDestUnitName() + '.pas',[FDecStream,FImpStream,FRttiFunc,FImpTempStream,FImpLastStream]);
@ -2492,4 +2482,37 @@ begin
end;
end;
procedure TInftGenerator.PrepareModule();
begin
FDecStream := SrcMngr.CreateItem(GetDestUnitName() + '.dec');
FImpStream := SrcMngr.CreateItem(GetDestUnitName() + '.imp');
FImpTempStream := SrcMngr.CreateItem(GetDestUnitName() + '.tmp_imp');
FImpLastStream := SrcMngr.CreateItem(GetDestUnitName() + '.tmp_imp_last');
FRttiFunc := SrcMngr.CreateItem(GetDestUnitName() + '.tmp_rtti_func');
FImpTempStream.IncIndent();
FImpLastStream.IncIndent();
end;
procedure TInftGenerator.Execute();
var
oldCurrent, mdl : TPasModule;
i : PtrInt;
mdlList : TList;
begin
oldCurrent := SymbolTable.CurrentModule;
try
mdlList := SymbolTable.Package.Modules;
for i := 0 to Pred(mdlList.Count) do begin
mdl := TPasModule(mdlList[i]);
if not mdl.InheritsFrom(TPasNativeModule) then begin
SymbolTable.SetCurrentModule(mdl);
PrepareModule();
InternalExecute();
end;
end;
finally
SymbolTable.SetCurrentModule(oldCurrent);
end;
end;
end.

View File

@ -46,8 +46,9 @@ type
end;
function SetLogger(ALogger : ILogger) : ILogger;
function GetLogger() : ILogger;
function HasLogger() : Boolean;{$IFDEF USE_INLINE}inline;{$ENDIF}
function SetLogger(ALogger : ILogger) : ILogger;{$IFDEF USE_INLINE}inline;{$ENDIF}
function GetLogger() : ILogger;{$IFDEF USE_INLINE}inline;{$ENDIF}
implementation
@ -63,6 +64,11 @@ begin
Result := FLogger;
end;
function HasLogger() : Boolean;
begin
Result := Assigned(FLogger);
end;
{ TSimpleConsoleLogger }
procedure TSimpleConsoleLogger.Log(const AMsgType: TMessageType; const AMsg: string);

View File

@ -22,18 +22,121 @@ unit parserutils;
interface
uses
SysUtils;
SysUtils, Classes
{$IFNDEF FPC}, xmldom, wst_delphi_xml{$ELSE},DOM{$ENDIF}
, cursor_intf, dom_cursors
;
const
sNEW_LINE = {$ifndef Unix}#13#10{$else}#10{$endif};
s_address : WideString = 'address';
s_all : WideString = 'all';
//s_any : WideString = 'any';
s_annotation : WideString = 'annotation';
s_appinfo : WideString = 'appinfo';
s_array : WideString = 'array';
s_arrayType : WideString = 'arrayType';
s_attribute : WideString = 'attribute';
s_base : WideString = 'base';
s_binding : WideString = 'binding';
s_body : WideString = 'body';
s_complexContent : WideString = 'complexContent';
s_complexType : WideString = 'complexType';
s_customAttributes : WideString = 'customAttributes';
s_document : WideString = 'document';
s_element : WideString = 'element';
s_enumeration : WideString = 'enumeration';
s_extension : WideString = 'extension';
s_guid : WideString = 'GUID';
s_headerBlock : WideString = 'headerBlock';
s_input : WideString = 'input';
s_item : WideString = 'item';
s_location : WideString = 'location';
s_message : WideString = 'message';
s_maxOccurs : WideString = 'maxOccurs';
s_minOccurs : WideString = 'minOccurs';
s_name : WideString = 'name';
s_operation : WideString = 'operation';
s_optional : WideString = 'optional';
s_output : WideString = 'output';
s_part : WideString = 'part';
s_port : WideString = 'port';
s_portType : WideString = 'portType';
s_prohibited : WideString = 'prohibited';
s_record : WideString = 'record';
s_ref : WideString = 'ref';
s_required : WideString = 'required';
s_restriction : WideString = 'restriction';
//s_return : WideString = 'return';
s_rpc : WideString = 'rpc';
s_schema : WideString = 'schema';
s_xs : WideString = 'http://www.w3.org/2001/XMLSchema';
s_sequence : WideString = 'sequence';
s_service : WideString = 'service';
s_simpleContent : WideString = 'simpleContent';
s_simpleType : WideString = 'simpleType';
s_soap : WideString = 'http://schemas.xmlsoap.org/wsdl/soap/';
s_soapAction : WideString = 'soapAction';
s_soapInputEncoding : WideString = 'Input_EncodingStyle';
s_soapOutputEncoding : WideString = 'OutputEncodingStyle';
s_soapStyle : WideString = 'style';
s_style : WideString = 'style';
s_targetNamespace : WideString = 'targetNamespace';
s_type : WideString = 'type';
s_types : WideString = 'types';
s_unbounded : WideString = 'unbounded';
s_use : WideString = 'use';
s_value : WideString = 'value';
s_wsdl : WideString = 'http://schemas.xmlsoap.org/wsdl/';
s_xmlns : WideString = 'xmlns';
type
TNotFoundAction = ( nfaNone, nfaRaiseException );
const
sNEW_LINE = sLineBreak;
function IsStrEmpty(Const AStr : String):Boolean;
function ExtractIdentifier(const AValue : string) : string ;
function IsReservedKeyWord(const AValue : string):Boolean ;
procedure ExtractNameSpaceShortNamesNested(
ANode : TDOMNode;
AResList : TStrings;
const ANameSpace : WideString
);
function CreateQualifiedNameFilterStr(
const AName : WideString;
APrefixList : TStrings
) : string;
function ExtractNameFromQName(const AQName : string):string ;
procedure ExtractNameSpaceShortNames(
AAttribCursor : IObjectCursor;
AResList : TStrings;
const ANameSpace : WideString;
const ANotFoundAction : TNotFoundAction;
const AClearBefore : Boolean;
const AExceptionClass : ExceptClass
);
function AddNameSpace(const AValue: string; ANameSpaceList : TStrings): TStrings;
procedure BuildNameSpaceList(AAttCursor : IObjectCursor; ANameSpaceList : TStrings);
procedure ExplodeQName(const AQName : string; out ALocalName, ANameSpace : string) ;
function wst_findCustomAttribute(
AWsdlShortNames : TStrings;
ANode : TDOMNode;
const AAttribute : string;
out AValue : string
) : Boolean;
function wst_findCustomAttributeXsd(
AXsdShortNames : TStrings;
ANode : TDOMNode;
const AAttribute : string;
out AValue : string
) : Boolean;
implementation
uses StrUtils;
uses StrUtils, rtti_filters;
const LANGAGE_TOKEN : array[0..107] of string = (
'ABSTRACT', 'AND', 'ARRAY', 'AS', 'ASM',
@ -90,6 +193,246 @@ begin
end;
end;
function ExtractNameFromQName(const AQName : string):string ;
var
i : Integer;
begin
Result := Trim(AQName);
i := Pos(':',Result);
if ( i > 0 ) then
Result := Copy(Result,( i + 1 ), MaxInt);
end;
function CreateQualifiedNameFilterStr(
const AName : WideString;
APrefixList : TStrings
) : string;
var
k : Integer;
locStr : string;
locWStr : WideString;
begin
Result := '';
if ( APrefixList.Count > 0 ) then begin
for k := 0 to Pred(APrefixList.Count) do begin
if IsStrEmpty(APrefixList[k]) then begin
locWStr := ''
end else begin
locWStr := APrefixList[k] + ':';
end;
locWStr := locWStr + AName;
locStr := s_NODE_NAME;
Result := Result + ' or ' + locStr + ' = ' + QuotedStr(locWStr);
end;
if ( Length(Result) > 0 ) then begin
Delete(Result,1,Length(' or'));
end;
end else begin
Result := Format('%s = %s',[s_NODE_NAME,QuotedStr(AName)]);
end;
end;
procedure ExtractNameSpaceShortNamesNested(
ANode : TDOMNode;
AResList : TStrings;
const ANameSpace : WideString
);
var
nd : TDOMNode;
begin
AResList.Clear();
nd := ANode;
while Assigned(nd) do begin
if Assigned(nd.Attributes) and ( nd.Attributes.Length > 0 ) then begin
ExtractNameSpaceShortNames(CreateAttributesCursor(nd,cetRttiNode),AResList,ANameSpace,nfaNone,False,nil);
end;
nd := nd.ParentNode;
end;
end;
procedure ExtractNameSpaceShortNames(
AAttribCursor : IObjectCursor;
AResList : TStrings;
const ANameSpace : WideString;
const ANotFoundAction : TNotFoundAction;
const AClearBefore : Boolean;
const AExceptionClass : ExceptClass
);
var
crs : IObjectCursor;
locObj : TDOMNodeRttiExposer;
wStr : WideString;
i : Integer;
ec : ExceptClass;
begin
if AClearBefore then begin
AResList.Clear();
end;
AAttribCursor.Reset();
crs := CreateCursorOn(AAttribCursor,ParseFilter(Format('%s=%s',[s_NODE_VALUE,QuotedStr(ANameSpace)]),TDOMNodeRttiExposer));
crs.Reset();
if crs.MoveNext() then begin
repeat
locObj := crs.GetCurrent() as TDOMNodeRttiExposer;
wStr := Trim(locObj.NodeName);
i := AnsiPos(s_xmlns + ':',wStr);
if ( i > 0 ) then begin
i := AnsiPos(':',wStr);
AResList.Add(Copy(wStr,( i + 1 ), MaxInt));
end else begin
if ( AResList.IndexOf('') = -1 ) then
AResList.Add('');
end;
until not crs.MoveNext();
end else begin
if ( ANotFoundAction = nfaRaiseException ) then begin
if Assigned(AExceptionClass) then
ec := AExceptionClass
else
ec := Exception;
raise ec.CreateFmt('Namespace not found : "%s"',[ANameSpace]);
end;
end;
end;
function wst_findCustomAttribute(
AWsdlShortNames : TStrings;
ANode : TDOMNode;
const AAttribute : string;
out AValue : string
) : Boolean;
var
nd : TDOMNode;
tmpCrs : IObjectCursor;
begin
Result := False;
tmpCrs := CreateCursorOn(
CreateChildrenCursor(ANode,cetRttiNode),
ParseFilter(CreateQualifiedNameFilterStr(s_document,AWsdlShortNames),TDOMNodeRttiExposer)
);
tmpCrs.Reset();
if tmpCrs.MoveNext() then begin
nd := (tmpCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
if nd.HasChildNodes() then begin
tmpCrs := CreateCursorOn(
CreateChildrenCursor(nd,cetRttiNode),
ParseFilter(Format('%s=%s',[s_NODE_NAME,QuotedStr(s_customAttributes)]),TDOMNodeRttiExposer)
);
tmpCrs.Reset();
if tmpCrs.MoveNext() then begin
nd := (tmpCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
if ( nd.Attributes <> nil ) then begin
nd := nd.Attributes.GetNamedItem(AAttribute);
if Assigned(nd) then begin
Result := True;
AValue := nd.NodeValue;
end;
end;
end;
end;
end;
end;
function wst_findCustomAttributeXsd(
AXsdShortNames : TStrings;
ANode : TDOMNode;
const AAttribute : string;
out AValue : string
) : Boolean;
var
nd : TDOMNode;
tmpCrs : IObjectCursor;
begin
Result := False;
tmpCrs := CreateCursorOn(
CreateChildrenCursor(ANode,cetRttiNode),
ParseFilter(CreateQualifiedNameFilterStr(s_annotation,AXsdShortNames),TDOMNodeRttiExposer)
);
tmpCrs.Reset();
if tmpCrs.MoveNext() then begin
nd := (tmpCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
if nd.HasChildNodes() then begin
tmpCrs := CreateCursorOn(
CreateChildrenCursor(nd,cetRttiNode),
ParseFilter(Format('%s=%s',[s_NODE_NAME,QuotedStr(s_appinfo)]),TDOMNodeRttiExposer)
);
tmpCrs.Reset();
if tmpCrs.MoveNext() then begin
nd := (tmpCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
if ( nd.Attributes <> nil ) then begin
nd := nd.Attributes.GetNamedItem(AAttribute);
if Assigned(nd) then begin
Result := True;
AValue := nd.NodeValue;
end;
end;
end;
end;
end;
end;
procedure ExplodeQName(const AQName : string; out ALocalName, ANameSpace : string) ;
var
i : PtrInt;
begin
i := Pos(':',AQName);
if ( i > 0 ) then begin
ANameSpace := Copy(AQName,1,Pred(i));
ALocalName := Copy(AQName,Succ(i),Length(AQName));
end else begin
ANameSpace := '';
ALocalName := AQName;
end;
end;
function AddNameSpace(const AValue: string; ANameSpaceList : TStrings): TStrings;
var
i : PtrInt;
s : string;
ls : TStringList;
begin
s := Trim(AValue);
i := ANameSpaceList.IndexOf(s);
if ( i < 0 ) then begin
i := ANameSpaceList.Add(s);
ls := TStringList.Create();
ANameSpaceList.Objects[i] := ls;
ls.Duplicates := dupIgnore;
ls.Sorted := True;
Result := ls;
end else begin
Result := ANameSpaceList.Objects[i] as TStrings;
end;
end;
procedure BuildNameSpaceList(AAttCursor : IObjectCursor; ANameSpaceList : TStrings);
var
locObj : TDOMNodeRttiExposer;
locNameSpace, locNameSpaceShort : string;
tmpXmlNs : string;
found : Boolean;
begin
if Assigned(AAttCursor) then begin
tmpXmlNs := s_xmlns + ':';
AAttCursor.Reset();
while AAttCursor.MoveNext() do begin
found := False;
locObj := AAttCursor.GetCurrent() as TDOMNodeRttiExposer;
if AnsiSameText(s_xmlns,locObj.NodeName) then begin
found := True;
locNameSpace := locObj.NodeValue;
locNameSpaceShort := '';
end else if AnsiStartsText(tmpXmlNs,locObj.NodeName) then begin
found := True;
locNameSpace := locObj.NodeValue;
locNameSpaceShort := locObj.NodeName;
locNameSpaceShort := Copy(locNameSpaceShort,Pos(':',locNameSpaceShort) + 1, Length(locNameSpaceShort));
end;
if found then
AddNameSpace(locNameSpace,ANameSpaceList).Add(locNameSpaceShort);
end;
end;
end;
end.

View File

@ -111,9 +111,11 @@ type
procedure SetArrayStyle(AArray : TPasArrayType; const AStyle : TArrayStyle);
procedure SetArrayItemExternalName(AArray : TPasArrayType; const AExternalName : string);
function FindElement(const AName: String): TPasElement; override;
function FindElementNS(const AName, ANameSpace : string): TPasElement;
function FindElementInModule(const AName: String; AModule: TPasModule): TPasElement;
function FindModule(const AName: String): TPasModule;override;
function IsEnumItemNameUsed(const AName : string) : Boolean;
function IsEnumItemNameUsed(const AName : string; AModule : TPasModule) : Boolean;overload;
function IsEnumItemNameUsed(const AName : string) : Boolean;overload;
procedure SetCurrentModule(AModule : TPasModule);
property CurrentModule : TPasModule read FCurrentModule;
@ -134,6 +136,9 @@ type
function IsInitNeed(AType: TPasType): Boolean;
function IsOfType(AType: TPasType; AClass: TClass): Boolean;
end;
TPasNativeModule = class(TPasModule)
end;
TPasClassTypeClass = class of TPasClassType;
TPasNativeClassType = class(TPasClassType) end;
@ -173,7 +178,9 @@ type
implementation
uses parserutils;
const SIMPLE_TYPES : Array[0..14] Of array[0..2] of string = (
const
SIMPLE_TYPES_COUNT = 15;
SIMPLE_TYPES : Array[0..Pred(SIMPLE_TYPES_COUNT)] Of array[0..2] of string = (
('string', 'TComplexStringContentRemotable', 'string'),
('integer', 'TComplexInt32SContentRemotable', 'int'),
('LongWord', 'TComplexInt32UContentRemotable', 'unsignedInt' ),
@ -200,11 +207,13 @@ var
splTyp : TPasNativeSimpleType;
syb : TPasNativeSimpleContentClassType;
s : string;
typlst : array[0..Pred(SIMPLE_TYPES_COUNT)] of TPasNativeSimpleType;
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));
ADest.InterfaceSection.Declarations.Add(splTyp);
ADest.InterfaceSection.Types.Add(splTyp);
typlst[i] := splTyp;
s := SIMPLE_TYPES[i][1];
if not IsStrEmpty(s) then begin
syb := AContainer.FindElementInModule(SIMPLE_TYPES[i][1],ADest) as TPasNativeSimpleContentClassType;
@ -217,7 +226,8 @@ begin
end;
end;
for i := Low(SIMPLE_TYPES) to High(SIMPLE_TYPES) do begin
splTyp := AContainer.FindElementInModule(SIMPLE_TYPES[i][0],ADest) as TPasNativeSimpleType;
//splTyp := AContainer.FindElementInModule(SIMPLE_TYPES[i][0],ADest) as TPasNativeSimpleType;
splTyp := typlst[i];
if not IsStrEmpty(SIMPLE_TYPES[i][2]) then begin
AContainer.RegisterExternalAlias(splTyp,SIMPLE_TYPES[i][2]);
if ( splTyp.BoxedType <> nil ) then begin
@ -267,7 +277,7 @@ function CreateWstInterfaceSymbolTable(AContainer : TwstPasTreeContainer) : TPas
var
loc_TBaseComplexSimpleContentRemotable : TPasClassType;
begin
Result := TPasModule(AContainer.CreateElement(TPasModule,'base_service_intf',AContainer.Package,visPublic,'',0));
Result := TPasNativeModule(AContainer.CreateElement(TPasNativeModule,'base_service_intf',AContainer.Package,visPublic,'',0));
try
AContainer.Package.Modules.Add(Result);
AContainer.RegisterExternalAlias(Result,sXSD_NS);
@ -540,11 +550,23 @@ begin
if Assigned(AModule) and Assigned(AModule.InterfaceSection.Declarations) then begin
decs := AModule.InterfaceSection.Declarations;
c := decs.Count;
for i := 0 to Pred(c) do begin
{for i := 0 to Pred(c) do begin
if SameName(TPasElement(decs[i]),AName) then begin
Result := TPasElement(decs[i]);
Exit;
end;
end;}
for i := 0 to Pred(c) do begin
if AnsiSameText(AName, GetExternalName(TPasElement(decs[i]))) then begin
Result := TPasElement(decs[i]);
Exit;
end;
end;
for i := 0 to Pred(c) do begin
if AnsiSameText(AName, TPasElement(decs[i]).Name) then begin
Result := TPasElement(decs[i]);
Exit;
end;
end;
end;
end;
@ -579,13 +601,13 @@ begin
mdl := Package.Modules;
c := mdl.Count;
for i := 0 to Pred(c) do begin
if AnsiSameText(AName,TPasModule(mdl[i]).Name) then begin
if SameName(TPasModule(mdl[i]),AName) then begin
Result := TPasModule(mdl[i]);
end;
end;
end;
function TwstPasTreeContainer.IsEnumItemNameUsed(const AName: string): Boolean;
function TwstPasTreeContainer.IsEnumItemNameUsed(const AName: string;AModule: TPasModule): Boolean;
var
i, c, j : Integer;
elt : TPasElement;
@ -593,7 +615,7 @@ var
typeList : TList;
begin
Result := False;
typeList := CurrentModule.InterfaceSection.Declarations;
typeList := AModule.InterfaceSection.Declarations;
c := typeList.Count;
for i := 0 to Pred(c) do begin
elt := TPasElement(typeList[i]);
@ -609,6 +631,11 @@ begin
end;
end;
function TwstPasTreeContainer.IsEnumItemNameUsed(const AName: string): Boolean;
begin
Result := IsEnumItemNameUsed(AName,CurrentModule);
end;
function TwstPasTreeContainer.IsOfType(AType : TPasType; AClass : TClass) : Boolean;
var
ut : TPasType;
@ -728,6 +755,17 @@ begin
Properties.SetValue(AObject,sATTRIBUTE,s);
end;
function TwstPasTreeContainer.FindElementNS(const AName, ANameSpace: string): TPasElement;
var
mdl : TPasModule;
begin
Result := nil;
mdl := FindModule(ANameSpace);
if Assigned(mdl) then begin
Result := FindElementInModule(AName,mdl);
end;
end;
{ TwstBinding }
constructor TwstBinding.Create(

View File

@ -12,7 +12,7 @@
<MainUnit Value="0"/>
<IconPath Value=".\"/>
<TargetFileExt Value=""/>
<ActiveEditorIndexAtStart Value="7"/>
<ActiveEditorIndexAtStart Value="2"/>
</General>
<PublishOptions>
<Version Value="2"/>
@ -24,7 +24,7 @@
<RunParams>
<local>
<FormatVersion Value="1"/>
<CommandLineParams Value="-i -p -b -a&quot;C:\Programmes\lazarus\release\tests\files&quot; &quot;C:\Programmes\lazarus\release\tests\files\AWSECommerceService.pas&quot; >test_res_AWSECommerceService2.txt"/>
<CommandLineParams Value="-uA -i -p -b -a&quot;C:\Programmes\lazarus\wst\trunk\tests\files&quot; &quot;C:\Programmes\lazarus\wst\trunk\type_lib_edtr\files\iplookup.wsdl&quot;"/>
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
@ -33,13 +33,13 @@
<PackageName Value="FCL"/>
</Item1>
</RequiredPackages>
<Units Count="76">
<Units Count="88">
<Unit0>
<Filename Value="ws_helper.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="ws_helper"/>
<CursorPos X="32" Y="25"/>
<TopLine Value="21"/>
<CursorPos X="38" Y="31"/>
<TopLine Value="20"/>
<EditorIndex Value="0"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
@ -50,7 +50,7 @@
<UnitName Value="ws_parser"/>
<CursorPos X="1" Y="487"/>
<TopLine Value="444"/>
<EditorIndex Value="13"/>
<EditorIndex Value="19"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit1>
@ -58,9 +58,9 @@
<Filename Value="generator.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="generator"/>
<CursorPos X="45" Y="3"/>
<TopLine Value="67"/>
<EditorIndex Value="14"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="20"/>
<UsageCount Value="200"/>
<Bookmarks Count="3">
<Item0 X="69" Y="935" ID="1"/>
@ -84,9 +84,9 @@
<Filename Value="parserutils.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="parserutils"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="10"/>
<CursorPos X="18" Y="400"/>
<TopLine Value="381"/>
<EditorIndex Value="17"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit4>
@ -94,9 +94,9 @@
<Filename Value="source_utils.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="source_utils"/>
<CursorPos X="32" Y="29"/>
<CursorPos X="17" Y="19"/>
<TopLine Value="1"/>
<EditorIndex Value="5"/>
<EditorIndex Value="13"/>
<UsageCount Value="201"/>
<Loaded Value="True"/>
</Unit5>
@ -125,17 +125,15 @@
<UnitName Value="command_line_parser"/>
<CursorPos X="11" Y="39"/>
<TopLine Value="19"/>
<EditorIndex Value="6"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit9>
<Unit10>
<Filename Value="metadata_generator.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="metadata_generator"/>
<CursorPos X="20" Y="19"/>
<TopLine Value="132"/>
<EditorIndex Value="7"/>
<TopLine Value="114"/>
<EditorIndex Value="14"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit10>
@ -153,9 +151,7 @@
<UnitName Value="wst_resources_utils"/>
<CursorPos X="26" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="4"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit12>
<Unit13>
<Filename Value="..\wsdl_to_pascal\wsdl2pas_imp.pas"/>
@ -177,16 +173,18 @@
<UnitName Value="dom_cursors"/>
<CursorPos X="13" Y="353"/>
<TopLine Value="317"/>
<EditorIndex Value="2"/>
<EditorIndex Value="12"/>
<UsageCount Value="101"/>
<Loaded Value="True"/>
</Unit15>
<Unit16>
<Filename Value="..\wst_rtti_filter\cursor_intf.pas"/>
<UnitName Value="cursor_intf"/>
<CursorPos X="32" Y="41"/>
<TopLine Value="1"/>
<CursorPos X="1" Y="159"/>
<TopLine Value="133"/>
<EditorIndex Value="5"/>
<UsageCount Value="101"/>
<Loaded Value="True"/>
</Unit16>
<Unit17>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysstrh.inc"/>
@ -205,13 +203,11 @@
<UnitName Value="wsdl2pas_imp"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="11"/>
<UsageCount Value="102"/>
<Bookmarks Count="2">
<Item0 X="21" Y="763" ID="3"/>
<Item1 X="50" Y="657" ID="5"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit19>
<Unit20>
<Filename Value="..\..\..\..\lazarus211\fpc\2.1.1\source\rtl\inc\getopts.pp"/>
@ -292,10 +288,10 @@
<Filename Value="pascal_parser_intf.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="pascal_parser_intf"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="9"/>
<UsageCount Value="199"/>
<CursorPos X="1" Y="652"/>
<TopLine Value="637"/>
<EditorIndex Value="16"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit31>
<Unit32>
@ -435,8 +431,8 @@
<UnitName Value="logger_intf"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="12"/>
<UsageCount Value="111"/>
<EditorIndex Value="18"/>
<UsageCount Value="115"/>
<Loaded Value="True"/>
</Unit52>
<Unit53>
@ -503,18 +499,18 @@
</Unit62>
<Unit63>
<Filename Value="..\wst_global.inc"/>
<CursorPos X="16" Y="1"/>
<CursorPos X="25" Y="4"/>
<TopLine Value="1"/>
<UsageCount Value="6"/>
<UsageCount Value="10"/>
</Unit63>
<Unit64>
<Filename Value="wsdl_generator.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="wsdl_generator"/>
<CursorPos X="34" Y="52"/>
<TopLine Value="128"/>
<EditorIndex Value="8"/>
<UsageCount Value="64"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="116"/>
<EditorIndex Value="15"/>
<UsageCount Value="68"/>
<Loaded Value="True"/>
</Unit64>
<Unit65>
@ -576,18 +572,19 @@
<Unit73>
<Filename Value="..\wst_fpc_xml.pas"/>
<UnitName Value="wst_fpc_xml"/>
<CursorPos X="13" Y="17"/>
<TopLine Value="4"/>
<EditorIndex Value="3"/>
<UsageCount Value="20"/>
<CursorPos X="1" Y="55"/>
<TopLine Value="43"/>
<EditorIndex Value="11"/>
<UsageCount Value="22"/>
<Loaded Value="True"/>
</Unit73>
<Unit74>
<Filename Value="ws_helper_prog.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="1"/>
<UsageCount Value="20"/>
<IsPartOfProject Value="True"/>
<CursorPos X="33" Y="89"/>
<TopLine Value="75"/>
<EditorIndex Value="7"/>
<UsageCount Value="23"/>
<Loaded Value="True"/>
</Unit74>
<Unit75>
@ -597,12 +594,224 @@
<TopLine Value="486"/>
<UsageCount Value="15"/>
</Unit75>
<Unit76>
<Filename Value="xsd_parser.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="xsd_parser"/>
<CursorPos X="16" Y="14"/>
<TopLine Value="1"/>
<EditorIndex Value="6"/>
<UsageCount Value="22"/>
<Loaded Value="True"/>
</Unit76>
<Unit77>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\heaptrc.pp"/>
<UnitName Value="heaptrc"/>
<CursorPos X="29" Y="49"/>
<TopLine Value="31"/>
<UsageCount Value="10"/>
</Unit77>
<Unit78>
<Filename Value="wsdl_parser.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="wsdl_parser"/>
<CursorPos X="24" Y="178"/>
<TopLine Value="162"/>
<EditorIndex Value="2"/>
<UsageCount Value="22"/>
<Loaded Value="True"/>
</Unit78>
<Unit79>
<Filename Value="ws_parser_imp.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="ws_parser_imp"/>
<CursorPos X="52" Y="1265"/>
<TopLine Value="1242"/>
<EditorIndex Value="1"/>
<UsageCount Value="22"/>
<Loaded Value="True"/>
</Unit79>
<Unit80>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\heaptrc.pp"/>
<UnitName Value="heaptrc"/>
<CursorPos X="1" Y="182"/>
<TopLine Value="167"/>
<UsageCount Value="10"/>
</Unit80>
<Unit81>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\i386\i386.inc"/>
<CursorPos X="1" Y="1110"/>
<TopLine Value="1095"/>
<UsageCount Value="10"/>
</Unit81>
<Unit82>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\objpas\sysutils\fina.inc"/>
<CursorPos X="1" Y="32"/>
<TopLine Value="17"/>
<EditorIndex Value="8"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit82>
<Unit83>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\except.inc"/>
<CursorPos X="1" Y="223"/>
<TopLine Value="208"/>
<EditorIndex Value="9"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit83>
<Unit84>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\i386\setjump.inc"/>
<CursorPos X="1" Y="36"/>
<TopLine Value="21"/>
<EditorIndex Value="10"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit84>
<Unit85>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<CursorPos X="9" Y="759"/>
<TopLine Value="756"/>
<EditorIndex Value="4"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit85>
<Unit86>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\rtti.inc"/>
<CursorPos X="1" Y="166"/>
<TopLine Value="151"/>
<UsageCount Value="10"/>
</Unit86>
<Unit87>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpash.inc"/>
<CursorPos X="23" Y="241"/>
<TopLine Value="226"/>
<EditorIndex Value="3"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit87>
</Units>
<JumpHistory Count="1" HistoryIndex="0">
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="command_line_parser.pas"/>
<Caret Line="39" Column="11" TopLine="19"/>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="725" Column="1" TopLine="710"/>
</Position1>
<Position2>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="727" Column="1" TopLine="712"/>
</Position2>
<Position3>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="56" Column="1" TopLine="41"/>
</Position3>
<Position4>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="58" Column="1" TopLine="43"/>
</Position4>
<Position5>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="53" Column="1" TopLine="38"/>
</Position5>
<Position6>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="55" Column="1" TopLine="40"/>
</Position6>
<Position7>
<Filename Value="..\wst_rtti_filter\cursor_intf.pas"/>
<Caret Line="159" Column="1" TopLine="133"/>
</Position7>
<Position8>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="723" Column="1" TopLine="708"/>
</Position8>
<Position9>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="724" Column="1" TopLine="709"/>
</Position9>
<Position10>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="725" Column="1" TopLine="710"/>
</Position10>
<Position11>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="726" Column="1" TopLine="711"/>
</Position11>
<Position12>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="144" Column="1" TopLine="129"/>
</Position12>
<Position13>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="740" Column="1" TopLine="725"/>
</Position13>
<Position14>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="742" Column="1" TopLine="727"/>
</Position14>
<Position15>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="145" Column="1" TopLine="130"/>
</Position15>
<Position16>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="221" Column="1" TopLine="206"/>
</Position16>
<Position17>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="222" Column="1" TopLine="207"/>
</Position17>
<Position18>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="549" Column="1" TopLine="546"/>
</Position18>
<Position19>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="550" Column="1" TopLine="535"/>
</Position19>
<Position20>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="551" Column="1" TopLine="536"/>
</Position20>
<Position21>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<Caret Line="555" Column="1" TopLine="564"/>
</Position21>
<Position22>
<Filename Value="wsdl_parser.pas"/>
<Caret Line="39" Column="35" TopLine="35"/>
</Position22>
<Position23>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpash.inc"/>
<Caret Line="216" Column="37" TopLine="201"/>
</Position23>
<Position24>
<Filename Value="wsdl_parser.pas"/>
<Caret Line="89" Column="16" TopLine="74"/>
</Position24>
<Position25>
<Filename Value="xsd_parser.pas"/>
<Caret Line="134" Column="39" TopLine="132"/>
</Position25>
<Position26>
<Filename Value="ws_helper.pas"/>
<Caret Line="31" Column="38" TopLine="20"/>
</Position26>
<Position27>
<Filename Value="wsdl_parser.pas"/>
<Caret Line="358" Column="7" TopLine="343"/>
</Position27>
<Position28>
<Filename Value="wsdl_parser.pas"/>
<Caret Line="1140" Column="41" TopLine="1122"/>
</Position28>
<Position29>
<Filename Value="wsdl_parser.pas"/>
<Caret Line="186" Column="11" TopLine="162"/>
</Position29>
<Position30>
<Filename Value="wsdl_parser.pas"/>
<Caret Line="176" Column="12" TopLine="161"/>
</Position30>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>
@ -630,8 +839,7 @@
</CodeGeneration>
<Linking>
<Debugging>
<GenerateDebugInfo Value="True"/>
<UseHeaptrc Value="True"/>
<UseLineInfoUnit Value="False"/>
<StripSymbols Value="True"/>
</Debugging>
<LinkSmart Value="True"/>

View File

@ -37,10 +37,13 @@ uses
XMLWrite,
XMLRead,
wst_fpc_xml,
wsdl2pas_imp,
pastree,
pparser,
pascal_parser_intf,
logger_intf;
logger_intf,
xsd_parser,
ws_parser_imp,
wsdl_parser;
{$INCLUDE ws_helper_prog.inc}

View File

@ -15,7 +15,7 @@ const
sWST_META = 'wst_meta';
type
TSourceFileType = ( sftPascal, sftWSDL );
TSourceFileType = ( sftPascal, sftWSDL, sftXsd );
var
inFileName,outPath,errStr : string;
@ -41,6 +41,8 @@ var
sourceType := sftPascal;
end else if AnsiSameText(ExtractFileExt(inFileName),'.WSDL') then begin
sourceType := sftWSDL;
end else if AnsiSameText(ExtractFileExt(inFileName),'.XSD') then begin
sourceType := sftXsd;
end;
if Result then begin
if ( AppOptions = [] ) then begin
@ -62,6 +64,10 @@ var
if AnsiSameText('A',Trim(GetOptionArg(cloInterface))) then begin
parserMode := pmAllTypes;
end;
if ( sourceType = sftXsd ) then begin
AppOptions := AppOptions - [ cloProxy, cloImp, cloBinder, cloWsdl ];
end;
end;
function GenerateSymbolTable() : Boolean ;
@ -74,25 +80,48 @@ var
procedure ParseWsdlFile();
var
locDoc : TXMLDocument;
prsr : TWsdlParser;
prsrW : IParser;
begin
ReadXMLFile(locDoc,inFileName);
{$IFNDEF WST_INTF_DOM}
try
{$ENDIF}
prsrW := TWsdlParser.Create(locDoc,symtable);// as IParser;
prsrW.Execute(parserMode,ChangeFileExt(ExtractFileName(inFileName),''));
{$IFNDEF WST_INTF_DOM}
finally
prsrW := nil;
ReleaseDomNode(locDoc);
end;
{$ENDIF}
end;
procedure ParseXsdFile();
var
locDoc : TXMLDocument;
prsr : IXsdPaser;
begin
prsr := nil;
ReadXMLFile(locDoc,inFileName);
{$IFNDEF WST_INTF_DOM}
try
prsr := TWsdlParser.Create(locDoc,symtable);
prsr.Parse(parserMode,ChangeFileExt(ExtractFileName(inFileName),''));
{$ENDIF}
prsr := TXsdParser.Create(locDoc,symtable,ChangeFileExt(ExtractFileName(inFileName),'')) as IXsdPaser;
prsr.ParseTypes();
{$IFNDEF WST_INTF_DOM}
finally
FreeAndNil(prsr);
FreeAndNil(locDoc);
ReleaseDomNode(locDoc);
end;
{$ENDIF}
end;
begin
try
WriteLn('Parsing the file : ', inFileName);
case sourceType of
sftPascal : ParsePascalFile();
sftWSDL : ParseWsdlFile();
sftXsd : ParseXsdFile();
end;
Result := True;
except
@ -112,7 +141,7 @@ var
GenerateWSDL(ASymbol,doc);
WriteXML(doc,ADest);
finally
FreeAndNil(doc);
ReleaseDomNode(doc);
end;
end;
@ -198,6 +227,11 @@ var
end;
begin
{$IFDEF FPC}
{$IF Declared(SetHeapTraceOutput) }
SetHeapTraceOutput('heapOut.txt');
{$IFEND}
{$ENDIF}
osParam := 'windows';
targetParam := 'x86';

File diff suppressed because it is too large Load Diff

View File

@ -421,7 +421,6 @@ procedure TWsdlParser.Prepare(const AModuleName : string);
var
locAttCursor : IObjectCursor;
locObj : TDOMNodeRttiExposer;
begin
CreateWstInterfaceSymbolTable(SymbolTable);
FModule := TPasModule(SymbolTable.CreateElement(TPasModule,AModuleName,SymbolTable.Package,visDefault,'',0));
@ -443,7 +442,7 @@ begin
ParseFilter(CreateQualifiedNameFilterStr(s_service,FWsdlShortNames),TDOMNodeRttiExposer)
);
FServiceCursor.Reset();
FBindingCursor := CreateCursorOn(
FChildCursor.Clone() as IObjectCursor,
ParseFilter(CreateQualifiedNameFilterStr(s_binding,FWsdlShortNames),TDOMNodeRttiExposer)

View File

@ -153,6 +153,8 @@ const
sSOAP_USE = 'use';
sADDRESS = 'address';
sANNOTATION = 'annotation';
sAPPINFO = 'appinfo';
sATTRIBUTE = 'attribute';
sBASE = 'base';
sBINDING = 'binding';
@ -199,7 +201,7 @@ const
sWSDL_TYPES = 'types';
var
WsdlTypeHandlerRegistryInst : IWsdlTypeHandlerRegistry;
WsdlTypeHandlerRegistryInst : IWsdlTypeHandlerRegistry = nil;
function GetTypeNameSpace(
@ -665,12 +667,12 @@ procedure TClassTypeDefinition_TypeHandler.Generate(
AWsdlDocument : TDOMDocument
);
var
cplxNode, docNode : TDOMElement;
cplxNode, annNode : TDOMElement;
procedure CreateDocNode();
begin
if ( docNode = nil ) then begin
docNode := CreateElement(sDOCUMENT,cplxNode,AWsdlDocument);
if ( annNode = nil ) then begin
annNode := CreateElement(sDOCUMENT,cplxNode,AWsdlDocument);
end;
end;
@ -686,7 +688,7 @@ var
trueParent : TPasType;
begin
inherited;
docNode := nil;
annNode := nil;
typItm := ASymbol as TPasClassType;
if Assigned(typItm) then begin
GetNameSpaceShortName(AContainer.GetExternalName(AContainer.CurrentModule) ,AWsdlDocument);
@ -706,8 +708,8 @@ begin
if trueParent.InheritsFrom(TPasNativeClassType) and AnsiSameText('THeaderBlock',trueParent.Name) then begin
CreateDocNode();
CreateElement(sCUSTOM_ATTRIBUTE,docNode,AWsdlDocument).SetAttribute(sHEADER_Block,'true');
end;
CreateElement(sAPPINFO,annNode,AWsdlDocument).SetAttribute(sHEADER_Block,'true');
end;
if trueParent.InheritsFrom(TPasAliasType) then begin
trueParent := GetUltimeType(trueParent);
@ -994,12 +996,12 @@ procedure TPasRecordType_TypeHandler.Generate(
AWsdlDocument : TDOMDocument
);
var
cplxNode, docNode : TDOMElement;
cplxNode, annNode : TDOMElement;
procedure CreateDocNode();
begin
if ( docNode = nil ) then begin
docNode := CreateElement(sDOCUMENT,cplxNode,AWsdlDocument);
if ( annNode = nil ) then begin
annNode := CreateElement(Format('%s:%s',[sXSD,sANNOTATION]),cplxNode,AWsdlDocument);
end;
end;
@ -1013,7 +1015,7 @@ var
hasSequence : Boolean;
begin
inherited;
docNode := nil;
annNode := nil;
typItm := ASymbol as TPasRecordType;
if Assigned(typItm) then begin
GetNameSpaceShortName(AContainer.GetExternalName(AContainer.CurrentModule) ,AWsdlDocument);
@ -1026,7 +1028,7 @@ begin
cplxNode.SetAttribute(sNAME, AContainer.GetExternalName(typItm)) ;
CreateDocNode();
CreateElement(sCUSTOM_ATTRIBUTE,docNode,AWsdlDocument).SetAttribute(sRECORD,'true');
CreateElement(Format('%s:%s',[sXSD,sAPPINFO]),annNode,AWsdlDocument).SetAttribute(sRECORD,'true');
hasSequence := False;
for i := 0 to Pred(typItm.Members.Count) do begin

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,590 @@
{
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 xsd_parser;
interface
uses
Classes, SysUtils,
{$IFNDEF FPC}xmldom, wst_delphi_xml{$ELSE}DOM{$ENDIF},
cursor_intf, rtti_filters,
pastree, pascal_parser_intf, logger_intf;
type
EXsdParserException = class(Exception)
end;
EXsdParserAssertException = class(EXsdParserException)
end;
EXsdTypeNotFoundException = class(EXsdParserException)
end;
EXsdInvalidDefinitionException = class(EXsdParserException)
end;
EXsdInvalidTypeDefinitionException = class(EXsdInvalidDefinitionException)
end;
EXsdInvalidElementDefinitionException = class(EXsdInvalidDefinitionException)
end;
TOnParserMessage = procedure (const AMsgType : TMessageType; const AMsg : string) of object;
IParserContext = interface
['{F400BA9E-41AC-456C-ABF9-CEAA75313685}']
function GetXsShortNames() : TStrings;
function GetSymbolTable() : TwstPasTreeContainer;
function FindNameSpace(const AShortName : string; out AResult : string) : Boolean;
function FindShortNamesForNameSpace(const ANameSpace : string) : TStrings;
function GetTargetNameSpace() : string;
function GetTargetModule() : TPasModule;
end;
IXsdPaser = interface
['{F0CEC726-A068-4CCC-B1E7-D31F018415B2}']
function ParseType(const AName : string) : TPasType;
procedure ParseTypes();
procedure SetNotifier(ANotifier : TOnParserMessage);
end;
{ TCustomXsdSchemaParser }
TCustomXsdSchemaParser = class(TInterfacedObject, IInterface, IParserContext, IXsdPaser)
private
FDoc : TXMLDocument;
FParentContext : Pointer;//IParserContext;
FSymbols : TwstPasTreeContainer;
FModuleName : string;
FModule : TPasModule;
FTargetNameSpace : string;
FSchemaNode : TDOMNode;
private
FNameSpaceList : TStringList;
FXSShortNames : TStrings;
FChildCursor : IObjectCursor;
FOnMessage: TOnParserMessage;
private
procedure DoOnMessage(const AMsgType : TMessageType; const AMsg : string);
private
function FindNamedNode(AList : IObjectCursor; const AName : WideString; const AOrder : Integer = 0):TDOMNode;
function AddNameSpace(const AValue : string) : TStrings; {$IFDEF USE_INLINE}inline;{$ENDIF}
function GetParentContext() : IParserContext;{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure Prepare();
function FindElement(const AName: String) : TPasElement; {$IFDEF USE_INLINE}inline;{$ENDIF}
protected
function GetXsShortNames() : TStrings;
function GetSymbolTable() : TwstPasTreeContainer;
function FindNameSpace(const AShortName : string; out AResult : string) : Boolean;
function FindShortNamesForNameSpaceLocal(const ANameSpace : string) : TStrings;
function FindShortNamesForNameSpace(const ANameSpace : string) : TStrings;
procedure SetNotifier(ANotifier : TOnParserMessage);
public
constructor Create(
ADoc : TXMLDocument;
ASchemaNode : TDOMNode;
ASymbols : TwstPasTreeContainer;
AParentContext : IParserContext
);
destructor Destroy();override;
function ParseType(const AName : string) : TPasType;
procedure ParseTypes();
function GetTargetNameSpace() : string;
function GetTargetModule() : TPasModule;
property SymbolTable : TwstPasTreeContainer read FSymbols;
property Module : TPasModule read FModule;
property OnMessage : TOnParserMessage read FOnMessage write FOnMessage;
end;
TXsdParser = class(TCustomXsdSchemaParser)
public
constructor Create(
ADoc : TXMLDocument;
ASymbols : TwstPasTreeContainer;
const AModuleName : string
);
end;
implementation
uses ws_parser_imp, dom_cursors, parserutils, StrUtils
{$IFDEF FPC}
,wst_fpc_xml
{$ENDIF}
;
{ TCustomXsdSchemaParser }
function TCustomXsdSchemaParser.AddNameSpace(const AValue: string): TStrings;
begin
Result := parserutils.AddNameSpace(AValue,FNameSpaceList)
end;
constructor TCustomXsdSchemaParser.Create(
ADoc : TXMLDocument;
ASchemaNode : TDOMNode;
ASymbols : TwstPasTreeContainer;
AParentContext : IParserContext
);
begin
if ( ADoc = nil ) then
raise EXsdParserAssertException.Create('Invalid DOM document.');
if ( ASchemaNode = nil ) then
raise EXsdParserAssertException.Create('Invalid schema node.');
if ( ASymbols = nil ) then
raise EXsdParserAssertException.Create('Invalid Symbol table.');
if ( ASchemaNode = nil ) then
raise EXsdParserAssertException.Create('Invalid schema node.');
FDoc := ADoc;
FParentContext := Pointer(AParentContext);
FSymbols := ASymbols;
FSchemaNode := ASchemaNode;
FNameSpaceList := TStringList.Create();
FNameSpaceList.Duplicates := dupError;
FNameSpaceList.Sorted := True;
Prepare();
end;
destructor TCustomXsdSchemaParser.Destroy();
var
i : PtrInt;
begin
FParentContext := nil;
for i := 0 to Pred(FNameSpaceList.Count) do begin
FNameSpaceList.Objects[i].Free();
end;
FreeAndNil(FNameSpaceList);
inherited;
end;
procedure TCustomXsdSchemaParser.DoOnMessage(
const AMsgType: TMessageType;
const AMsg: string
);
begin
if Assigned(FOnMessage) then begin
FOnMessage(AMsgType,AMsg);
end else if IsConsole and HasLogger() then begin
GetLogger().Log(AMsgType, AMsg);
end;
end;
function TCustomXsdSchemaParser.FindElement(const AName: String): TPasElement;
begin
Result := SymbolTable.FindElementInModule(AName,FModule);
end;
function TCustomXsdSchemaParser.FindNamedNode(
AList : IObjectCursor;
const AName : WideString;
const AOrder : Integer
): TDOMNode;
var
attCrs, crs : IObjectCursor;
curObj : TDOMNodeRttiExposer;
fltr : IObjectFilter;
locOrder : Integer;
begin
Result := nil;
if Assigned(AList) then begin
fltr := ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_name)]),TDOMNodeRttiExposer);
AList.Reset();
locOrder := AOrder;
while AList.MoveNext() do begin
curObj := AList.GetCurrent() as TDOMNodeRttiExposer;
attCrs := CreateAttributesCursor(curObj.InnerObject,cetRttiNode);
if Assigned(attCrs) then begin
crs := CreateCursorOn(attCrs,fltr);
crs.Reset();
if crs.MoveNext() and AnsiSameText(AName,TDOMNodeRttiExposer(crs.GetCurrent()).NodeValue) then begin
Dec(locOrder);
if ( locOrder <= 0 ) then begin
Result := curObj.InnerObject;
exit;
end;
end;
end;
end;
end;
end;
function TCustomXsdSchemaParser.FindNameSpace(
const AShortName : string;
out AResult : string
) : Boolean;
var
i : PtrInt;
ls : TStrings;
begin
AResult := '';
Result := False;
for i := 0 to Pred(FNameSpaceList.Count) do begin
ls := FNameSpaceList.Objects[i] as TStrings;
if ( ls.IndexOf(AShortName) >= 0 ) then begin
AResult := FNameSpaceList[i];
Result := True;
Break;
end;
end;
if not Result then
Result := GetParentContext().FindNameSpace(AShortName,AResult);
end;
function TCustomXsdSchemaParser.FindShortNamesForNameSpace(const ANameSpace: string): TStrings;
var
prtCtx : IParserContext;
begin
Result := FindShortNamesForNameSpaceLocal(ANameSpace);
if ( Result = nil ) then begin
prtCtx := GetParentContext();
if Assigned(prtCtx) then
Result := prtCtx.FindShortNamesForNameSpace(ANameSpace);
end;
end;
procedure TCustomXsdSchemaParser.SetNotifier(ANotifier: TOnParserMessage);
begin
FOnMessage := ANotifier;
end;
function TCustomXsdSchemaParser.FindShortNamesForNameSpaceLocal(const ANameSpace: string): TStrings;
var
i : PtrInt;
begin
i := FNameSpaceList.IndexOf(ANameSpace);
if ( i >= 0 ) then
Result := FNameSpaceList.Objects[i] as TStrings
else
Result := nil;
end;
function TCustomXsdSchemaParser.GetParentContext() : IParserContext;
begin
Result := IParserContext(FParentContext);
end;
function TCustomXsdSchemaParser.GetSymbolTable() : TwstPasTreeContainer;
begin
Result := FSymbols;
end;
function TCustomXsdSchemaParser.GetTargetModule() : TPasModule;
begin
Result := FModule;
end;
function TCustomXsdSchemaParser.GetTargetNameSpace() : string;
begin
Result := FTargetNameSpace;
end;
function TCustomXsdSchemaParser.GetXsShortNames() : TStrings;
begin
Result := FXSShortNames;
end;
function TCustomXsdSchemaParser.ParseType(const AName: string): TPasType;
var
crsSchemaChild : IObjectCursor;
typNd : TDOMNode;
typName : string;
embededType : Boolean;
localTypeName : string;
procedure Init();
begin
crsSchemaChild := FChildCursor.Clone() as IObjectCursor;
end;
function FindTypeNode(out ASimpleTypeAlias : TPasType) : Boolean;
var
nd, oldTypeNode : TDOMNode;
crs : IObjectCursor;
locStrFilter : string;
begin
ASimpleTypeAlias := nil;
Result := True;
typNd := FindNamedNode(crsSchemaChild,localTypeName);
if not Assigned(typNd) then
raise EXsdTypeNotFoundException.CreateFmt('Type definition not found 1 : "%s"',[AName]);
if AnsiSameText(ExtractNameFromQName(typNd.NodeName),s_element) then begin
crs := CreateCursorOn(CreateAttributesCursor(typNd,cetRttiNode),ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_type)]),TDOMNodeRttiExposer));
crs.Reset();
if crs.MoveNext() then begin
nd := (crs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
ASimpleTypeAlias := FindElement(ExtractNameFromQName(nd.NodeValue)) as TPasType;
if Assigned(ASimpleTypeAlias) then begin
Result := False;
end else begin
oldTypeNode := typNd;
typNd := FindNamedNode(crsSchemaChild,ExtractNameFromQName(nd.NodeValue));
if not Assigned(typNd) then
raise EXsdTypeNotFoundException.CreateFmt('Type definition not found 2 : "%s"',[AName]);
embededType := False;
if ( typNd = oldTypeNode ) then begin
typNd := FindNamedNode(crsSchemaChild,ExtractNameFromQName(nd.NodeValue),2);
if not Assigned(typNd) then
raise EXsdTypeNotFoundException.CreateFmt('Type definition not found 2.1 : "%s"',[AName]);
end;
end;
end else begin
//locStrFilter := Format('%s = %s or %s = %s ',[s_NODE_NAME,QuotedStr(s_complexType),s_NODE_NAME,QuotedStr(s_simpleType)]);
locStrFilter := CreateQualifiedNameFilterStr(s_complexType,FXSShortNames) + ' or ' +
CreateQualifiedNameFilterStr(s_simpleType,FXSShortNames);
crs := CreateCursorOn(CreateChildrenCursor(typNd,cetRttiNode),ParseFilter(locStrFilter,TDOMNodeRttiExposer));
crs.Reset();
if not crs.MoveNext() then begin
raise EXsdTypeNotFoundException.CreateFmt('Type definition not found 3 : "%s"',[AName]);
end;
typNd := (crs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
typName := ExtractNameFromQName(AName);
embededType := True;
end;
end;
end;
function ParseComplexType():TPasType;
var
locParser : TComplexTypeParser;
begin
locParser := TComplexTypeParser.Create(Self,typNd,typName,embededType);
try
Result := locParser.Parse();
finally
FreeAndNil(locParser);
end;
end;
function ParseSimpleType():TPasType;
var
locParser : TSimpleTypeParser;
begin
locParser := TSimpleTypeParser.Create(Self,typNd,typName,embededType);
try
Result := locParser.Parse();
finally
FreeAndNil(locParser);
end;
end;
function CreateTypeAlias(const ABase : TPasType): TPasType;
var
hasInternameName : Boolean;
internameName : string;
begin
internameName := ExtractNameFromQName(AName);
hasInternameName := IsReservedKeyWord(internameName) or
( not IsValidIdent(internameName) );
if hasInternameName then begin
internameName := '_' + internameName;
end;
Result := TPasType(SymbolTable.CreateElement(TPasAliasType,internameName,SymbolTable.CurrentModule.InterfaceSection,visDefault,'',0));
TPasAliasType(Result).DestType := ABase;
ABase.AddRef();
end;
function CreateUnresolveType(): TPasType;
var
hasInternameName : Boolean;
internameName : string;
begin
internameName := ExtractNameFromQName(AName);
hasInternameName := IsReservedKeyWord(internameName) or
( not IsValidIdent(internameName) );
if hasInternameName then begin
internameName := '_' + internameName;
end;
Result := TPasUnresolvedTypeRef(SymbolTable.CreateElement(TPasUnresolvedTypeRef,internameName,SymbolTable.CurrentModule.InterfaceSection,visDefault,'',0));
if not AnsiSameText(internameName,AName) then
SymbolTable.RegisterExternalAlias(Result,AName);
end;
var
frwType, aliasType : TPasType;
sct : TPasSection;
shortNameSpace, longNameSpace : string;
typeModule : TPasModule;
begin
DoOnMessage(mtInfo, Format('Parsing "%s" ...',[AName]));
try
embededType := False;
aliasType := nil;
Result := nil;
typeModule := nil;
ExplodeQName(AName,localTypeName,shortNameSpace);
if IsStrEmpty(shortNameSpace) then begin
typeModule := FModule;
end else begin
if not FindNameSpace(shortNameSpace,longNameSpace) then
raise EXsdParserAssertException.CreateFmt('Unable to resolve namespace, short name = "%s".',[shortNameSpace]);
typeModule := SymbolTable.FindModule(longNameSpace);
end;
if ( typeModule = nil ) then
raise EXsdTypeNotFoundException.Create(AName);
Result := SymbolTable.FindElementInModule(localTypeName,typeModule) as TPasType;
if ( ( Result = nil ) or Result.InheritsFrom(TPasUnresolvedTypeRef) ) and
( typeModule = FModule )
then begin
sct := FModule.InterfaceSection;
frwType := Result;
Result := nil;
Init();
if FindTypeNode(aliasType) then begin
if AnsiSameText(ExtractNameFromQName(typNd.NodeName),s_complexType) then begin
Result := ParseComplexType();
end else if AnsiSameText(ExtractNameFromQName(typNd.NodeName),s_simpleType) then begin
Result := ParseSimpleType();
end;
if Assigned(Result) then begin
if Assigned(frwType) and AnsiSameText(SymbolTable.GetExternalName(Result),SymbolTable.GetExternalName(frwType)) then begin
Result.Name := frwType.Name;
SymbolTable.RegisterExternalAlias(Result,SymbolTable.GetExternalName(frwType));
end;
end else begin
raise EXsdTypeNotFoundException.CreateFmt('Type node found but unable to parse it : "%s"',[AName]);
end;
end else begin
Result := CreateTypeAlias(aliasType);
end;
if ( frwType <> nil ) then begin
sct.Declarations.Extract(frwType);
sct.Types.Extract(frwType);
frwType.Release();
end;
sct.Declarations.Add(Result);
sct.Types.Add(Result);
if Result.InheritsFrom(TPasClassType) then begin
sct.Classes.Add(Result);
end;
end;
except
on e : EXsdTypeNotFoundException do begin
Result := CreateUnresolveType();
sct.Declarations.Add(Result);
sct.Types.Add(Result);
end;
end;
end;
procedure TCustomXsdSchemaParser.ParseTypes();
var
nd : TDOMNodeRttiExposer;
schmCrsr, crsSchemaChild, typTmpCrs : IObjectCursor;
typFilterStr : string;
typNode : TDOMNode;
begin
if Assigned(FChildCursor) then begin
crsSchemaChild := FChildCursor.Clone() as IObjectCursor;
typFilterStr := Format(
'%s or %s or %s',
[ CreateQualifiedNameFilterStr(s_complexType,FXSShortNames),
CreateQualifiedNameFilterStr(s_simpleType,FXSShortNames),
CreateQualifiedNameFilterStr(s_element,FXSShortNames)
]
);
crsSchemaChild := CreateCursorOn(crsSchemaChild,ParseFilter(typFilterStr,TDOMNodeRttiExposer));
crsSchemaChild.Reset();
while crsSchemaChild.MoveNext() do begin
typNode := (crsSchemaChild.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
typTmpCrs := CreateAttributesCursor(typNode,cetRttiNode);
if Assigned(typTmpCrs) then begin
typTmpCrs.Reset();
typTmpCrs := CreateCursorOn(typTmpCrs,ParseFilter(Format('%s=%s',[s_NODE_NAME,QuotedStr(s_name)]),TDOMNodeRttiExposer));
typTmpCrs.Reset();
if typTmpCrs.MoveNext() then begin
ParseType(
(typTmpCrs.GetCurrent() as TDOMNodeRttiExposer).NodeValue
);
end;
end;
end;
end;
end;
procedure TCustomXsdSchemaParser.Prepare();
var
locAttCursor : IObjectCursor;
prntCtx : IParserContext;
nd : TDOMNode;
i : PtrInt;
ls : TStrings;
begin
if ( FSchemaNode.Attributes = nil ) or ( GetNodeListCount(FSchemaNode.Attributes) = 0 ) then
raise EXsdParserAssertException.CreateFmt('The Schema node has at least the "%s" attribute.',[s_targetNamespace]);
nd := FSchemaNode.Attributes.GetNamedItem(s_targetNamespace);
if ( nd = nil ) then
raise EXsdParserAssertException.CreateFmt('The Schema node has at least the "%s" attribute.',[s_targetNamespace]);
FTargetNameSpace := nd.NodeValue;
if IsStrEmpty(FModuleName) then
FModuleName := ExtractIdentifier(FTargetNameSpace);
if ( SymbolTable.FindModule(s_xs) = nil ) then begin
CreateWstInterfaceSymbolTable(SymbolTable);
end;
FChildCursor := CreateChildrenCursor(FSchemaNode,cetRttiNode);
locAttCursor := CreateAttributesCursor(FSchemaNode,cetRttiNode);
BuildNameSpaceList(locAttCursor,FNameSpaceList);
FXSShortNames := FindShortNamesForNameSpaceLocal(s_xs);
prntCtx := GetParentContext();
if ( FXSShortNames = nil ) then begin
if ( prntCtx = nil ) then
raise EXsdParserAssertException.CreateFmt('Invalid Schema document, namespace not found :'#13'%s.',[s_xs]);
FXSShortNames := prntCtx.FindShortNamesForNameSpace(s_xs);
if ( FXSShortNames = nil ) then
raise EXsdParserAssertException.CreateFmt('Invalid Schema document, namespace not found ( short names ) :'#13'%s.',[s_xs]);
end;
if Assigned(prntCtx) then begin
for i:= 0 to Pred(FNameSpaceList.Count) do begin
ls := prntCtx.FindShortNamesForNameSpace(FNameSpaceList[i]);
if Assigned(ls) then
(FNameSpaceList.Objects[i] as TStrings).AddStrings(ls);
end;
end;
FModule := SymbolTable.FindModule(FTargetNameSpace);
if ( FModule = nil ) then begin
FModule := TPasModule(SymbolTable.CreateElement(TPasModule,FModuleName,SymbolTable.Package,visDefault,'',0));
SymbolTable.Package.Modules.Add(FModule);
SymbolTable.RegisterExternalAlias(FModule,FTargetNameSpace);
FModule.InterfaceSection := TPasSection(SymbolTable.CreateElement(TPasSection,'',FModule,visDefault,'',0));
end;
end;
{ TXsdParser }
constructor TXsdParser.Create(
ADoc : TXMLDocument;
ASymbols : TwstPasTreeContainer;
const AModuleName : string
);
var
locName : string;
begin
inherited Create(ADoc,ADoc.DocumentElement,ASymbols,nil);
if not IsStrEmpty(AModuleName) then begin
locName := ExtractIdentifier(AModuleName);
if not IsStrEmpty(locName) then begin
FModuleName := locName;
Module.Name := FModuleName;
end;
end;
end;
end.