xsd generator

wsdl generator

xsd & wsdl parser test : embedded record

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@269 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2007-09-16 00:31:45 +00:00
parent d6fdbce0da
commit dc2b1b55c0
26 changed files with 2398 additions and 1998 deletions

View File

@ -7,12 +7,9 @@
targetNamespace="urn:wst-test"> targetNamespace="urn:wst-test">
<types> <types>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:wst-test"> <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:wst-test" xmlns:n="urn:wst-test" >
<xsd:complexType name="TRecordSampleType"> <xsd:complexType name="TRecordSampleType" wst_record="true">
<xsd:annotation>
<xsd:appinfo record="true"/>
</xsd:annotation>
<xsd:sequence> <xsd:sequence>
<xsd:element name="intField" type="xsd:int" /> <xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
@ -27,10 +24,7 @@
<xsd:element name="TRecordSample" type="n:TRecordSampleType"/> <xsd:element name="TRecordSample" type="n:TRecordSampleType"/>
<xsd:complexType name="TRecordSampleTypeAll"> <xsd:complexType name="TRecordSampleTypeAll" wst_record="true">
<xsd:annotation>
<xsd:appinfo record="true"/>
</xsd:annotation>
<xsd:all> <xsd:all>
<xsd:element name="intField" type="xsd:int" /> <xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>

View File

@ -3,8 +3,7 @@
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:wst-test"> targetNamespace="urn:wst-test">
<xsd:complexType name="TRecordSampleType"> <xsd:complexType name="TRecordSampleType" wst_record="true">
<xsd:annotation><xsd:appinfo record="true"/></xsd:annotation>
<xsd:sequence> <xsd:sequence>
<xsd:element name="intField" type="xsd:int" /> <xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
@ -19,8 +18,7 @@
<xsd:element name="TRecordSample" type="n:TRecordSampleType"/> <xsd:element name="TRecordSample" type="n:TRecordSampleType"/>
<xsd:complexType name="TRecordSampleTypeAll"> <xsd:complexType name="TRecordSampleTypeAll" wst_record="true">
<xsd:annotation><xsd:appinfo record="true"/></xsd:annotation>
<xsd:all> <xsd:all>
<xsd:element name="intField" type="xsd:int" /> <xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
@ -29,7 +27,7 @@
<xsd:element name="charField" type="xsd:char" minOccurs="1"/> <xsd:element name="charField" type="xsd:char" minOccurs="1"/>
<xsd:element name="longField" type="xsd:long" minOccurs="0"/> <xsd:element name="longField" type="xsd:long" minOccurs="0"/>
</xsd:all> </xsd:all>
<xsd:attribute name="strAtt" type="xsd:string"/> <xsd:attribute name="strAtt" type="xsd:string" use="required"/>
<xsd:attribute name="intAtt" type="xsd:int"/> <xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType> </xsd:complexType>

View File

@ -0,0 +1,46 @@
<?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" xmlns:n="urn:wst-test" >
<xsd:element name="TRecordSampleType">
<xsd:complexType wst_record="true">
<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>
<xsd:element name="TRecordSampleTypeAll">
<xsd:complexType wst_record="true">
<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:element>
</xsd:schema>
</types>
</definitions>

View File

@ -0,0 +1,36 @@
<?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="TRecordSampleType">
<xsd:complexType wst_record="true">
<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>
<xsd:element name="TRecordSampleTypeAll">
<xsd:complexType wst_record="true">
<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:element>
</xsd:schema>

View File

@ -37,6 +37,7 @@ type
function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract;
function LoadComplexType_Record_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_Record_Schema() : TwstPasTreeContainer;virtual;abstract;
function LoadComplexType_Record_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract;
function LoadComplexType_ArraySequence_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_ArraySequence_Schema() : TwstPasTreeContainer;virtual;abstract;
function LoadComplexType_ArraySequence_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_ArraySequence_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract;
@ -50,6 +51,7 @@ type
procedure ComplexType_Class_Embedded(); procedure ComplexType_Class_Embedded();
procedure ComplexType_Record(); procedure ComplexType_Record();
procedure ComplexType_Record_Embedded();
procedure ComplexType_ArraySequence(); procedure ComplexType_ArraySequence();
procedure ComplexType_ArraySequence_Embedded(); procedure ComplexType_ArraySequence_Embedded();
@ -70,6 +72,7 @@ type
function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Record_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Record_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Record_Embedded_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_ArraySequence_Schema() : TwstPasTreeContainer;override; function LoadComplexType_ArraySequence_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_ArraySequence_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_ArraySequence_Embedded_Schema() : TwstPasTreeContainer;override;
@ -90,6 +93,7 @@ type
function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Record_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Record_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Record_Embedded_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_ArraySequence_Schema() : TwstPasTreeContainer;override; function LoadComplexType_ArraySequence_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_ArraySequence_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_ArraySequence_Embedded_Schema() : TwstPasTreeContainer;override;
@ -510,7 +514,7 @@ var
CheckEquals(AName,tr.GetExternalName(prp)); CheckEquals(AName,tr.GetExternalName(prp));
CheckNotNull(prp.VarType); CheckNotNull(prp.VarType);
CheckEquals(ATypeName,tr.GetExternalName(prp.VarType)); CheckEquals(ATypeName,tr.GetExternalName(prp.VarType));
CheckEquals(PropertyType_Att[AFieldType],tr.IsAttributeProperty(prp)); CheckEquals(PropertyType_Att[AFieldType],tr.IsAttributeProperty(prp),Format('IsAttributeProperty("%s.%s")',[recType.Name, AName]));
end; end;
var var
@ -588,6 +592,90 @@ begin
end; end;
end; end;
procedure TTest_CustomXsdParser.ComplexType_Record_Embedded();
var
tr : TwstPasTreeContainer;
recType : TPasRecordType;
procedure CheckProperty(const AName,ATypeName : string; const AFieldType : TPropertyType);
var
prp : TPasVariable;
begin
prp := FindMember(recType,AName) as TPasVariable;
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),Format('IsAttributeProperty("%s.%s")',[recType.Name, AName]));
end;
var
mdl : TPasModule;
ls : TList;
elt : TPasElement;
aliasType : TPasAliasType;
i : Integer;
prpLs : TList;
begin
prpLs := TList.Create();
try
tr := LoadComplexType_Record_Embedded_Schema();
mdl := tr.FindModule(x_targetNamespace);
CheckNotNull(mdl);
CheckEquals(x_complexType_record_embedded,mdl.Name);
CheckEquals(x_targetNamespace,tr.GetExternalName(mdl));
ls := mdl.InterfaceSection.Declarations;
CheckEquals(2,ls.Count);
elt := tr.FindElement(x_complexType_SampleRecordType);
CheckNotNull(elt,x_complexType_SampleRecordType);
CheckEquals(x_complexType_SampleRecordType,elt.Name);
CheckEquals(x_complexType_SampleRecordType,tr.GetExternalName(elt));
CheckIs(elt,TPasRecordType,'Element Type');
recType := elt as TPasRecordType;
prpLs.Clear();
for i := 0 to Pred(recType.Members.Count) do begin
if TPasElement(recType.Members[i]).InheritsFrom(TPasVariable) then
prpLs.Add(recType.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_SampleRecordTypeAll);
CheckNotNull(elt,x_complexType_SampleRecordTypeAll);
CheckEquals(x_complexType_SampleRecordTypeAll,elt.Name);
CheckEquals(x_complexType_SampleRecordTypeAll,tr.GetExternalName(elt));
CheckIs(elt,TPasRecordType,'Element type');
recType := elt as TPasRecordType;
prpLs.Clear();
for i := 0 to Pred(recType.Members.Count) do begin
if TPasElement(recType.Members[i]).InheritsFrom(TPasVariable) then
prpLs.Add(recType.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_ArraySequence(); procedure TTest_CustomXsdParser.ComplexType_ArraySequence();
var var
tr : TwstPasTreeContainer; tr : TwstPasTreeContainer;
@ -817,6 +905,11 @@ begin
Result := ParseDoc(x_complexType_record); Result := ParseDoc(x_complexType_record);
end; end;
function TTest_XsdParser.LoadComplexType_Record_Embedded_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_complexType_record_embedded);
end;
function TTest_XsdParser.LoadComplexType_ArraySequence_Schema(): TwstPasTreeContainer; function TTest_XsdParser.LoadComplexType_ArraySequence_Schema(): TwstPasTreeContainer;
begin begin
Result := ParseDoc(x_complexType_array_sequence); Result := ParseDoc(x_complexType_array_sequence);
@ -880,6 +973,11 @@ begin
Result := ParseDoc(x_complexType_record); Result := ParseDoc(x_complexType_record);
end; end;
function TTest_WsdlParser.LoadComplexType_Record_Embedded_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_complexType_record_embedded);
end;
function TTest_WsdlParser.LoadComplexType_ArraySequence_Schema(): TwstPasTreeContainer; function TTest_WsdlParser.LoadComplexType_ArraySequence_Schema(): TwstPasTreeContainer;
begin begin
Result := ParseDoc(x_complexType_array_sequence); Result := ParseDoc(x_complexType_array_sequence);

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -7,7 +7,7 @@
<MainUnit Value="0"/> <MainUnit Value="0"/>
<IconPath Value="./"/> <IconPath Value="./"/>
<TargetFileExt Value=".exe"/> <TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="8"/> <ActiveEditorIndexAtStart Value="0"/>
</General> </General>
<VersionInfo> <VersionInfo>
<ProjectVersion Value=""/> <ProjectVersion Value=""/>
@ -36,7 +36,7 @@
<Unit0> <Unit0>
<Filename Value="typ_lib_edtr.lpr"/> <Filename Value="typ_lib_edtr.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<CursorPos X="1" Y="21"/> <CursorPos X="60" Y="13"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="8"/> <EditorIndex Value="8"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
@ -49,8 +49,8 @@
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<ResourceFilename Value="uwsttypelibraryedit.lrs"/> <ResourceFilename Value="uwsttypelibraryedit.lrs"/>
<UnitName Value="uwsttypelibraryedit"/> <UnitName Value="uwsttypelibraryedit"/>
<CursorPos X="45" Y="170"/> <CursorPos X="1" Y="385"/>
<TopLine Value="151"/> <TopLine Value="369"/>
<EditorIndex Value="0"/> <EditorIndex Value="0"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@ -688,8 +688,8 @@
<Filename Value="..\ws_helper\wsdl_generator.pas"/> <Filename Value="..\ws_helper\wsdl_generator.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="wsdl_generator"/> <UnitName Value="wsdl_generator"/>
<CursorPos X="50" Y="1031"/> <CursorPos X="45" Y="21"/>
<TopLine Value="1004"/> <TopLine Value="1"/>
<EditorIndex Value="4"/> <EditorIndex Value="4"/>
<UsageCount Value="32"/> <UsageCount Value="32"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@ -750,7 +750,20 @@
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit92> </Unit92>
</Units> </Units>
<JumpHistory Count="0" HistoryIndex="-1"/> <JumpHistory Count="3" HistoryIndex="2">
<Position1>
<Filename Value="uwsttypelibraryedit.pas"/>
<Caret Line="170" Column="45" TopLine="151"/>
</Position1>
<Position2>
<Filename Value="uwsttypelibraryedit.pas"/>
<Caret Line="378" Column="17" TopLine="364"/>
</Position2>
<Position3>
<Filename Value="uwsttypelibraryedit.pas"/>
<Caret Line="172" Column="59" TopLine="151"/>
</Position3>
</JumpHistory>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
<Version Value="5"/> <Version Value="5"/>

View File

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

View File

@ -22,61 +22,63 @@ LazarusResources.Add('TfWstTypeLibraryEdit','FORMDATA',[
+'='#2#5'Width'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHA' +'='#2#5'Width'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHA'
+'RSET'#10'Font.Color'#7#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'#6#7'Co' +'RSET'#10'Font.Color'#7#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'#6#7'Co'
+'urier'#10'Font.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'Popu' +'urier'#10'Font.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'Popu'
+'pMenu2'#8'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'Q'#17'Gutter.DigitCou' +'pMenu2'#8'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'Q'#24'BookMarkOptions'
+'nt'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gutter.ShowCodeFolding'#9#23'Gutter' +'.OnChange'#13#17'Gutter.DigitCount'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gut'
+'.CodeFoldingWidth'#2#14#11'Highlighter'#7#10'SynPasSyn1'#10'Keystrokes'#14#1 +'ter.ShowCodeFolding'#9#15'Gutter.OnChange'#13#23'Gutter.CodeFoldingWidth'#2
+#7'Command'#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7 +#14#11'Highlighter'#7#10'SynPasSyn1'#10'Keystrokes'#14#1#7'Command'#2#3#8'Sh'
+'Command'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7 +'ortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Command'#3#211#0#8
+'Command'#2'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1 +'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Command'#2'h'#8'S'
+#7'Command'#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7 +'hortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1#7'Command'#2#1#8
+'Command'#2#5#8'ShortCut'#3'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7 +'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7'Command'#2#5#8'S'
+'Command'#2#2#8'ShortCut'#2''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1#7 +'hortCut'#3'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7'Command'#2#2#8'S'
+'Command'#2#6#8'ShortCut'#3'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7 +'hortCut'#2''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1#7'Command'#2#6#8
+'Command'#2#10#8'ShortCut'#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7 +'ShortCut'#3'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7'Command'#2#10
+'Command'#2#14#8'ShortCut'#3'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7 +#8'ShortCut'#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7'Command'#2#14#8
+'Command'#2#9#8'ShortCut'#2'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'C' +'ShortCut'#3'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7'Command'#2#9#8
+'ommand'#2#13#8'ShortCut'#3'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7 +'ShortCut'#2'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'Command'#2#13#8
+'Command'#2#7#8'ShortCut'#2'$'#0#1#7'Command'#2'k'#8'ShortCut'#3'$ '#0#1#7'C' +'ShortCut'#3'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7'Command'#2#7#8
+'ommand'#2#15#8'ShortCut'#3'$@'#0#1#7'Command'#2's'#8'ShortCut'#3'$`'#0#1#7 +'ShortCut'#2'$'#0#1#7'Command'#2'k'#8'ShortCut'#3'$ '#0#1#7'Command'#2#15#8
+'Command'#2#8#8'ShortCut'#2'#'#0#1#7'Command'#2'l'#8'ShortCut'#3'# '#0#1#7'C' +'ShortCut'#3'$@'#0#1#7'Command'#2's'#8'ShortCut'#3'$`'#0#1#7'Command'#2#8#8
+'ommand'#2#16#8'ShortCut'#3'#@'#0#1#7'Command'#2't'#8'ShortCut'#3'#`'#0#1#7 +'ShortCut'#2'#'#0#1#7'Command'#2'l'#8'ShortCut'#3'# '#0#1#7'Command'#2#16#8
+'Command'#3#223#0#8'ShortCut'#2'-'#0#1#7'Command'#3#201#0#8'ShortCut'#3'-@'#0 +'ShortCut'#3'#@'#0#1#7'Command'#2't'#8'ShortCut'#3'#`'#0#1#7'Command'#3#223#0
+#1#7'Command'#3'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2 +#8'ShortCut'#2'-'#0#1#7'Command'#3#201#0#8'ShortCut'#3'-@'#0#1#7'Command'#3
+'.'#0#1#7'Command'#3'['#2#8'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCu' +'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2'.'#0#1#7'Comman'
+'t'#2#8#0#1#7'Command'#3#245#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'S' +'d'#3'['#2#8'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCut'#2#8#0#1#7'Co'
+'hortCut'#3#8'@'#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command' +'mmand'#3#245#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'ShortCut'#3#8'@'
+#3'Z'#2#8'ShortCut'#4#8#160#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7 +#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command'#3'Z'#2#8'Short'
+'Command'#3#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@' +'Cut'#4#8#160#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7'Command'#3
+#0#1#7'Command'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3 +#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@'#0#1#7'Comm'
+'M@'#0#1#7'Command'#3#254#1#8'ShortCut'#3'N@'#0#1#7'Command'#3#247#1#8'Short' +'and'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3'M@'#0#1#7
+'Cut'#3'T@'#0#1#7'Command'#3'c'#2#8'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8 +'Command'#3#254#1#8'ShortCut'#3'N@'#0#1#7'Command'#3#247#1#8'ShortCut'#3'T@'
+'ShortCut'#3'V@'#0#1#7'Command'#3'['#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251 +#0#1#7'Command'#3'c'#2#8'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8'ShortCut'#3
+#1#8'ShortCut'#3'Y@'#0#1#7'Command'#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command' +'V@'#0#1#7'Command'#3'['#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251#1#8'ShortC'
+#3'Y'#2#8'ShortCut'#3'Z@'#0#1#7'Command'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Comm' +'ut'#3'Y@'#0#1#7'Command'#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command'#3'Y'#2#8
+'and'#3'-'#1#8'ShortCut'#3'0@'#0#1#7'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7 +'ShortCut'#3'Z@'#0#1#7'Command'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Command'#3'-'
+'Command'#3'/'#1#8'ShortCut'#3'2@'#0#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0 +#1#8'ShortCut'#3'0@'#0#1#7'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7'Command'#3
+#1#7'Command'#3'1'#1#8'ShortCut'#3'4@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5' +'/'#1#8'ShortCut'#3'2@'#0#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0#1#7'Comman'
+'@'#0#1#7'Command'#3'3'#1#8'ShortCut'#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut' +'d'#3'1'#1#8'ShortCut'#3'4@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5@'#0#1#7'C'
+#3'7@'#0#1#7'Command'#3'5'#1#8'ShortCut'#3'8@'#0#1#7'Command'#3'6'#1#8'Short' +'ommand'#3'3'#1#8'ShortCut'#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut'#3'7@'#0#1
+'Cut'#3'9@'#0#1#7'Command'#3'_'#1#8'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8 +#7'Command'#3'5'#1#8'ShortCut'#3'8@'#0#1#7'Command'#3'6'#1#8'ShortCut'#3'9@'
+'ShortCut'#3'1`'#0#1#7'Command'#3'a'#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b' +#0#1#7'Command'#3'_'#1#8'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8'ShortCut'#3
+#1#8'ShortCut'#3'3`'#0#1#7'Command'#3'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3 +'1`'#0#1#7'Command'#3'a'#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b'#1#8'ShortCu'
+'d'#1#8'ShortCut'#3'5`'#0#1#7'Command'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Comman' +'t'#3'3`'#0#1#7'Command'#3'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3'd'#1#8'Sh'
+'d'#3'f'#1#8'ShortCut'#3'7`'#0#1#7'Command'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'C' +'ortCut'#3'5`'#0#1#7'Command'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Command'#3'f'#1
+'ommand'#3'h'#1#8'ShortCut'#3'9`'#0#1#7'Command'#3#231#0#8'ShortCut'#3'N`'#0 +#8'ShortCut'#3'7`'#0#1#7'Command'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'Command'#3
+#1#7'Command'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3 +'h'#1#8'ShortCut'#3'9`'#0#1#7'Command'#3#231#0#8'ShortCut'#3'N`'#0#1#7'Comma'
,'L`'#0#1#7'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut' ,'nd'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3'L`'#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' +'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'#3#9' '#0#1
+'TabSheet'#6'tsWSDL'#7'Caption'#6#5'&WSDL'#12'ClientHeight'#3'='#2#11'Client' +#7'Command'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#22'SelectedColor.OnC'
+'Width'#3#245#1#0#8'TSynEdit'#7'srcWSDL'#6'Height'#3'='#2#5'Width'#3#245#1#5 +'hange'#13#0#0#0#9'TTabSheet'#6'tsWSDL'#7'Caption'#6#5'&WSDL'#12'ClientHeigh'
+'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'Font.Color'#7#7 +'t'#3'='#2#11'ClientWidth'#3#245#1#0#8'TSynEdit'#7'srcWSDL'#6'Height'#3'='#2
+'clBlack'#11'Font.Height'#2#233#9'Font.Name'#6#7'Courier'#10'Font.Pitch'#7#7 +#5'Width'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHARSET'
+'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'PopupMenu2'#8'TabOrder'#2#0#23 +#10'Font.Color'#7#7'clBlack'#11'Font.Height'#2#233#9'Font.Name'#6#7'Courier'
+'BookMarkOptions.Xoffset'#2'6'#22'Gutter.ShowLineNumbers'#9#23'Gutter.CodeFo' +#10'Font.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'PopupMenu2'
+'ldingWidth'#2#14#11'Highlighter'#7#10'SynXMLSyn1'#10'Keystrokes'#14#1#7'Com' +#8'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'6'#24'BookMarkOptions.OnChang'
+'mand'#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Comm' +'e'#13#22'Gutter.ShowLineNumbers'#9#15'Gutter.OnChange'#13#23'Gutter.CodeFol'
+'and'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Co' +'dingWidth'#2#14#11'Highlighter'#7#10'SynXMLSyn1'#10'Keystrokes'#14#1#7'Comm'
+'mmand'#2'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1#7 +'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
+'Command'#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7'C' +'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#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 +'ommand'#2#2#8'ShortCut'#2''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1#7
@ -115,271 +117,267 @@ LazarusResources.Add('TfWstTypeLibraryEdit','FORMDATA',[
+'ommand'#3'h'#1#8'ShortCut'#3'9`'#0#1#7'Command'#3#231#0#8'ShortCut'#3'N`'#0 +'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 +#1#7'Command'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3
+'L`'#0#1#7'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut' +'L`'#0#1#7'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'
+#3#9' '#0#1#7'Command'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#0#0#0#9'T'
+'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
+'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#22'Select' +#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' +'edColor.OnChange'#13#0#0#0#9'TTabSheet'#7'tsProxy'#7'Caption'#6#6'&Proxy'#12
+'ientHeight'#3'='#2#11'ClientWidth'#3#245#1#0#5'TMemo'#6'mmoLog'#6'Height'#3 +'ClientHeight'#3'='#2#11'ClientWidth'#3#245#1#0#8'TSynEdit'#8'srcProxy'#6'He'
+'='#2#5'Width'#3#245#1#5'Align'#7#8'alClient'#13'Lines.Strings'#1#6#0#0#10'S' +'ight'#3'='#2#5'Width'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12
+'crollBars'#7#6'ssBoth'#8'TabOrder'#2#0#0#0#0#0#0#9'TSplitter'#9'Splitter1'#4 +'ANSI_CHARSET'#10'Font.Color'#7#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'
+'Left'#3':'#1#6'Height'#3'Y'#2#5'Width'#2#8#5'Color'#7#7'clBlack'#11'ParentC' +#6#7'Courier'#10'Font.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10
+'olor'#8#0#0#9'TMainMenu'#9'MainMenu1'#4'left'#3'`'#1#3'top'#2'p'#0#9'TMenuI' +'PopupMenu2'#8'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'Q'#17'Gutter.Digi'
+'tem'#9'MenuItem1'#7'Caption'#6#6'&Files'#0#9'TMenuItem'#10'MenuItem16'#6'Ac' +'tCount'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gutter.ShowCodeFolding'#9#23'Gu'
+'tion'#7#10'actNewFile'#7'OnClick'#7#17'actNewFileExecute'#0#0#9'TMenuItem'#9 +'tter.CodeFoldingWidth'#2#14#11'Highlighter'#7#10'SynPasSyn1'#10'Keystrokes'
+'MenuItem2'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#9'MenuItem5'#6'Action'#7#11'a' +#14#1#7'Command'#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0
+'ctOpenFile'#7'OnClick'#7#18'actOpenFileExecute'#0#0#9'TMenuItem'#9'MenuItem' +#1#7'Command'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0
+'3'#6'Action'#7#9'actExport'#7'OnClick'#7#16'actExportExecute'#0#0#9'TMenuIt' +#1#7'Command'#2'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'
+'em'#9'MenuItem7'#6'Action'#7#7'actSave'#7'OnClick'#7#14'actSaveExecute'#0#0 ,#0#1#7'Command'#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0
+#9'TMenuItem'#10'MenuItem32'#6'Action'#7#9'actSaveAs'#7'OnClick'#7#16'actSav' +#1#7'Command'#2#5#8'ShortCut'#3'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1
+'eAsExecute'#0#0#9'TMenuItem'#10'MenuItem17'#7'Caption'#6#1'-'#0#0#9'TMenuIt' +#7'Command'#2#2#8'ShortCut'#2''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1
+'em'#9'MenuItem4'#6'Action'#7#7'actExit'#7'OnClick'#7#14'actExitExecute'#0#0 +#7'Command'#2#6#8'ShortCut'#3'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1
+#0#9'TMenuItem'#10'MenuItem14'#7'Caption'#6#5'&View'#0#9'TMenuItem'#10'MenuI' +#7'Command'#2#10#8'ShortCut'#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7
+'tem15'#6'Action'#7#14'actRefreshView'#7'OnClick'#7#21'actRefreshViewExecute' +'Command'#2#14#8'ShortCut'#3'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7
+#0#0#9'TMenuItem'#10'MenuItem29'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#10'MenuI' +'Command'#2#9#8'ShortCut'#2'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'C'
+'tem30'#6'Action'#7#13'actFullExpand'#7'OnClick'#7#20'actFullExpandExecute'#0 +'ommand'#2#13#8'ShortCut'#3'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7
+#0#9'TMenuItem'#10'MenuItem31'#6'Action'#7#15'actFullCollapse'#7'OnClick'#7 +'Command'#2#7#8'ShortCut'#2'$'#0#1#7'Command'#2'k'#8'ShortCut'#3'$ '#0#1#7'C'
+#22'actFullCollapseExecute'#0#0#0#9'TMenuItem'#10'MenuItem10'#7'Caption'#6#8 +'ommand'#2#15#8'ShortCut'#3'$@'#0#1#7'Command'#2's'#8'ShortCut'#3'$`'#0#1#7
+'&Edition'#0#9'TMenuItem'#10'MenuItem11'#6'Action'#7#13'actEnumCreate'#7'OnC' +'Command'#2#8#8'ShortCut'#2'#'#0#1#7'Command'#2'l'#8'ShortCut'#3'# '#0#1#7'C'
+'lick'#7#20'actEnumCreateExecute'#0#0#9'TMenuItem'#10'MenuItem23'#6'Action'#7 +'ommand'#2#16#8'ShortCut'#3'#@'#0#1#7'Command'#2't'#8'ShortCut'#3'#`'#0#1#7
+#17'actCompoundCreate'#7'OnClick'#7#24'actCompoundCreateExecute'#0#0#9'TMenu' +'Command'#3#223#0#8'ShortCut'#2'-'#0#1#7'Command'#3#201#0#8'ShortCut'#3'-@'#0
+'Item'#10'MenuItem48'#6'Action'#7#15'actRecordCreate'#7'OnClick'#7#22'actRec' +#1#7'Command'#3'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2
+'ordCreateExecute'#0#0#9'TMenuItem'#10'MenuItem25'#6'Action'#7#13'actIntfCre' +'.'#0#1#7'Command'#3'['#2#8'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCu'
+'ate'#7'OnClick'#7#20'actIntfCreateExecute'#0#0#9'TMenuItem'#10'MenuItem35'#6 +'t'#2#8#0#1#7'Command'#3#245#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'S'
+'Action'#7#14'actArrayCreate'#7'OnClick'#7#21'actArrayCreateExecute'#0#0#9'T' +'hortCut'#3#8'@'#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command'
+'MenuItem'#10'MenuItem36'#6'Action'#7#18'actTypeALiasCreate'#7'OnClick'#7#25 +#3'Z'#2#8'ShortCut'#4#8#160#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7
+'actTypeALiasCreateExecute'#0#0#9'TMenuItem'#10'MenuItem12'#7'Caption'#6#1'-' +'Command'#3#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@'
+#0#0#9'TMenuItem'#10'MenuItem13'#6'Action'#7#15'actUpdateObject'#7'Caption'#6 +#0#1#7'Command'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3
+#13'Update Object'#7'OnClick'#7#22'actUpdateObjectExecute'#0#0#9'TMenuItem' +'M@'#0#1#7'Command'#3#254#1#8'ShortCut'#3'N@'#0#1#7'Command'#3#247#1#8'Short'
+#10'MenuItem34'#6'Action'#7#9'actDelete'#7'OnClick'#7#16'actDeleteExecute'#0 +'Cut'#3'T@'#0#1#7'Command'#3'c'#2#8'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8
+#0#0#9'TMenuItem'#9'MenuItem6'#6'Action'#7#8'actAbout'#7'Caption'#6#6'&About' +'ShortCut'#3'V@'#0#1#7'Command'#3'['#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251
+#7'OnClick'#7#15'actAboutExecute'#0#0#0#11'TActionList'#2'AL'#4'left'#3'X'#1 +#1#8'ShortCut'#3'Y@'#0#1#7'Command'#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command'
+#3'top'#2'8'#0#7'TAction'#11'actOpenFile'#7'Caption'#6#9'Open File'#18'Disab' +#3'Y'#2#8'ShortCut'#3'Z@'#0#1#7'Command'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Comm'
+'leIfNoHandler'#9#9'OnExecute'#7#18'actOpenFileExecute'#0#0#7'TAction'#7'act' +'and'#3'-'#1#8'ShortCut'#3'0@'#0#1#7'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7
+'Exit'#7'Caption'#6#4'Exit'#18'DisableIfNoHandler'#9#9'OnExecute'#7#14'actEx' +'Command'#3'/'#1#8'ShortCut'#3'2@'#0#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0
+'itExecute'#0#0#7'TAction'#9'actExport'#7'Caption'#6#24'Save generated files' +#1#7'Command'#3'1'#1#8'ShortCut'#3'4@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5'
+' ...'#18'DisableIfNoHandler'#9#9'OnExecute'#7#16'actExportExecute'#8'OnUpda' +'@'#0#1#7'Command'#3'3'#1#8'ShortCut'#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut'
+'te'#7#15'actExportUpdate'#0#0#7'TAction'#8'actAbout'#7'Caption'#6#5'About' +#3'7@'#0#1#7'Command'#3'5'#1#8'ShortCut'#3'8@'#0#1#7'Command'#3'6'#1#8'Short'
+#18'DisableIfNoHandler'#9#9'OnExecute'#7#15'actAboutExecute'#0#0#7'TAction'#9 +'Cut'#3'9@'#0#1#7'Command'#3'_'#1#8'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8
+'actSaveAs'#7'Caption'#6#11'Save As ...'#18'DisableIfNoHandler'#9#9'OnExecut' +'ShortCut'#3'1`'#0#1#7'Command'#3'a'#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b'
+'e'#7#16'actSaveAsExecute'#8'OnUpdate'#7#15'actExportUpdate'#0#0#7'TAction' +#1#8'ShortCut'#3'3`'#0#1#7'Command'#3'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3
+#13'actEnumCreate'#7'Caption'#6#18'Create Enumeration'#18'DisableIfNoHandler' +'d'#1#8'ShortCut'#3'5`'#0#1#7'Command'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Comman'
+#9#9'OnExecute'#7#20'actEnumCreateExecute'#0#0#7'TAction'#15'actUpdateObject' +'d'#3'f'#1#8'ShortCut'#3'7`'#0#1#7'Command'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'C'
+#7'Caption'#6#6'Update'#18'DisableIfNoHandler'#9#9'OnExecute'#7#22'actUpdate' +'ommand'#3'h'#1#8'ShortCut'#3'9`'#0#1#7'Command'#3#231#0#8'ShortCut'#3'N`'#0
+'ObjectExecute'#8'OnUpdate'#7#21'actUpdateObjectUpdate'#0#0#7'TAction'#14'ac' +#1#7'Command'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3
+'tRefreshView'#7'Caption'#6#14'&Refresh Views'#18'DisableIfNoHandler'#9#9'On' +'L`'#0#1#7'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'
+'Execute'#7#21'actRefreshViewExecute'#0#0#7'TAction'#10'actNewFile'#7'Captio' +#3#9' '#0#1#7'Command'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#0#0#0#9'T'
+'n'#6#8'New File'#18'DisableIfNoHandler'#9#9'OnExecute'#7#17'actNewFileExecu' +'TabSheet'#5'tsImp'#7'Caption'#6#24'Im&plementation Skeleton'#12'ClientHeigh'
+'te'#0#0#7'TAction'#17'actCompoundCreate'#7'Caption'#6#17'Create Class Type' +'t'#3'='#2#11'ClientWidth'#3#245#1#0#8'TSynEdit'#6'srcImp'#6'Height'#3'='#2#5
,#18'DisableIfNoHandler'#9#9'OnExecute'#7#24'actCompoundCreateExecute'#0#0#7 +'Width'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10
+'TAction'#13'actIntfCreate'#7'Caption'#6#16'Create Interface'#18'DisableIfNo' +'Font.Color'#7#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'#6#7'Courier'#10
+'Handler'#9#9'OnExecute'#7#20'actIntfCreateExecute'#0#0#7'TAction'#13'actFul' +'Font.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'PopupMenu2'#8
+'lExpand'#7'Caption'#6#11'Full expand'#18'DisableIfNoHandler'#9#9'OnExecute' +'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'Q'#17'Gutter.DigitCount'#2#5#22
+#7#20'actFullExpandExecute'#0#0#7'TAction'#15'actFullCollapse'#7'Caption'#6 +'Gutter.ShowLineNumbers'#9#22'Gutter.ShowCodeFolding'#9#23'Gutter.CodeFoldin'
+#13'Full Collapse'#18'DisableIfNoHandler'#9#9'OnExecute'#7#22'actFullCollaps' +'gWidth'#2#14#11'Highlighter'#7#10'SynPasSyn1'#10'Keystrokes'#14#1#7'Command'
+'eExecute'#0#0#7'TAction'#7'actSave'#7'Caption'#6#4'Save'#18'DisableIfNoHand' +#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Command'#3
+'ler'#9#9'OnExecute'#7#14'actSaveExecute'#0#0#7'TAction'#9'actDelete'#7'Capt' +#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Command'#2
+'ion'#6#6'Delete'#18'DisableIfNoHandler'#9#9'OnExecute'#7#16'actDeleteExecut' +'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1#7'Command'
+'e'#8'OnUpdate'#7#21'actUpdateObjectUpdate'#0#0#7'TAction'#14'actArrayCreate' +#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7'Command'#2
+#7'Caption'#6#12'Create Array'#18'DisableIfNoHandler'#9#9'OnExecute'#7#21'ac' +#5#8'ShortCut'#3'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7'Command'#2#2
+'tArrayCreateExecute'#0#0#7'TAction'#18'actTypeALiasCreate'#7'Caption'#6#17 +#8'ShortCut'#2''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1#7'Command'#2#6
+'Create Type ALias'#18'DisableIfNoHandler'#9#9'OnExecute'#7#25'actTypeALiasC' +#8'ShortCut'#3'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7'Command'#2
+'reateExecute'#0#0#7'TAction'#15'actRecordCreate'#7'Caption'#6#13'Create Rec' +#10#8'ShortCut'#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7'Command'#2
+'ord'#18'DisableIfNoHandler'#9#9'OnExecute'#7#22'actRecordCreateExecute'#0#0 +#14#8'ShortCut'#3'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7'Command'#2
+#0#11'TOpenDialog'#2'OD'#5'Title'#6#26'Ouvrir un fichier existant'#6'Filter' +#9#8'ShortCut'#2'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'Command'#2#13
+#6'3WDSL files(*.WSDL)|*.WSDL|Pascal file (*.pas)|*.pas'#11'FilterIndex'#2#0 +#8'ShortCut'#3'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7'Command'#2#7#8
+#10'InitialDir'#6#2'.\'#7'Options'#11#15'ofPathMustExist'#15'ofFileMustExist' +'ShortCut'#2'$'#0#1#7'Command'#2'k'#8'ShortCut'#3'$ '#0#1#7'Command'#2#15#8
+#14'ofEnableSizing'#12'ofViewDetail'#0#4'left'#3#153#1#3'top'#2'X'#0#0#10'TS' +'ShortCut'#3'$@'#0#1#7'Command'#2's'#8'ShortCut'#3'$`'#0#1#7'Command'#2#8#8
+'ynPasSyn'#10'SynPasSyn1'#7'Enabled'#8#23'CommentAttri.Foreground'#7#6'clBlu' +'ShortCut'#2'#'#0#1#7'Command'#2'l'#8'ShortCut'#3'# '#0#1#7'Command'#2#16#8
+'e'#18'CommentAttri.Style'#11#6'fsBold'#0#22'StringAttri.Foreground'#7#8'clM' +'ShortCut'#3'#@'#0#1#7'Command'#2't'#8'ShortCut'#3'#`'#0#1#7'Command'#3#223#0
+'aroon'#17'SymbolAttri.Style'#11#6'fsBold'#0#25'DirectiveAttri.Foreground'#7 +#8'ShortCut'#2'-'#0#1#7'Command'#3#201#0#8'ShortCut'#3'-@'#0#1#7'Command'#3
+#7'clGreen'#20'DirectiveAttri.Style'#11#6'fsBold'#0#14'NestedComments'#9#4'l' +'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2'.'#0#1#7'Comman'
+'eft'#3#183#1#3'top'#2'h'#0#0#11'TSaveDialog'#2'SD'#5'Title'#6#27'Enregistre' ,'d'#3'['#2#8'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCut'#2#8#0#1#7'Co'
+'r le fichier sous'#10'DefaultExt'#6#5'.WSDL'#6'Filter'#6#25'WDSL files(*.WS' +'mmand'#3#245#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'ShortCut'#3#8'@'
+'DL)|*.WSDL'#11'FilterIndex'#2#0#7'Options'#11#15'ofPathMustExist'#14'ofEnab' +#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command'#3'Z'#2#8'Short'
+'leSizing'#12'ofViewDetail'#0#4'left'#3#242#1#3'top'#3#176#0#0#0#10'TPopupMe' +'Cut'#4#8#160#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7'Command'#3
+'nu'#10'PopupMenu1'#4'left'#3#152#0#3'top'#3#152#0#0#9'TMenuItem'#10'MenuIte' +#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@'#0#1#7'Comm'
+'m28'#6'Action'#7#13'actFullExpand'#7'OnClick'#7#20'actFullExpandExecute'#0#0 +'and'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3'M@'#0#1#7
+#9'TMenuItem'#10'MenuItem27'#6'Action'#7#15'actFullCollapse'#7'OnClick'#7#22 +'Command'#3#254#1#8'ShortCut'#3'N@'#0#1#7'Command'#3#247#1#8'ShortCut'#3'T@'
+'actFullCollapseExecute'#0#0#9'TMenuItem'#10'MenuItem39'#6'Action'#7#14'actR' +#0#1#7'Command'#3'c'#2#8'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8'ShortCut'#3
+'efreshView'#7'OnClick'#7#21'actRefreshViewExecute'#0#0#9'TMenuItem'#10'Menu' +'V@'#0#1#7'Command'#3'['#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251#1#8'ShortC'
+'Item26'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#9'MenuItem8'#6'Action'#7#13'actE' +'ut'#3'Y@'#0#1#7'Command'#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command'#3'Y'#2#8
+'numCreate'#7'OnClick'#7#20'actEnumCreateExecute'#0#0#9'TMenuItem'#10'MenuIt' +'ShortCut'#3'Z@'#0#1#7'Command'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Command'#3'-'
+'em21'#6'Action'#7#17'actCompoundCreate'#7'OnClick'#7#24'actCompoundCreateEx' +#1#8'ShortCut'#3'0@'#0#1#7'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7'Command'#3
+'ecute'#0#0#9'TMenuItem'#10'MenuItem46'#6'Action'#7#15'actRecordCreate'#7'On' +'/'#1#8'ShortCut'#3'2@'#0#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0#1#7'Comman'
+'Click'#7#22'actRecordCreateExecute'#0#0#9'TMenuItem'#10'MenuItem24'#6'Actio' +'d'#3'1'#1#8'ShortCut'#3'4@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5@'#0#1#7'C'
+'n'#7#13'actIntfCreate'#7'OnClick'#7#20'actIntfCreateExecute'#0#0#9'TMenuIte' +'ommand'#3'3'#1#8'ShortCut'#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut'#3'7@'#0#1
+'m'#10'MenuItem37'#6'Action'#7#14'actArrayCreate'#7'OnClick'#7#21'actArrayCr' +#7'Command'#3'5'#1#8'ShortCut'#3'8@'#0#1#7'Command'#3'6'#1#8'ShortCut'#3'9@'
+'eateExecute'#0#0#9'TMenuItem'#10'MenuItem38'#6'Action'#7#18'actTypeALiasCre' +#0#1#7'Command'#3'_'#1#8'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8'ShortCut'#3
+'ate'#7'OnClick'#7#25'actTypeALiasCreateExecute'#0#0#9'TMenuItem'#10'MenuIte' +'1`'#0#1#7'Command'#3'a'#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b'#1#8'ShortCu'
+'m22'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#9'MenuItem9'#6'Action'#7#15'actUpda' +'t'#3'3`'#0#1#7'Command'#3'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3'd'#1#8'Sh'
+'teObject'#7'OnClick'#7#22'actUpdateObjectExecute'#0#0#9'TMenuItem'#10'MenuI' +'ortCut'#3'5`'#0#1#7'Command'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Command'#3'f'#1
+'tem33'#6'Action'#7#9'actDelete'#7'OnClick'#7#16'actDeleteExecute'#0#0#0#10 +#8'ShortCut'#3'7`'#0#1#7'Command'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'Command'#3
+'TPopupMenu'#10'PopupMenu2'#4'left'#3#16#2#3'top'#3#235#0#0#9'TMenuItem'#10 +'h'#1#8'ShortCut'#3'9`'#0#1#7'Command'#3#231#0#8'ShortCut'#3'N`'#0#1#7'Comma'
+'MenuItem18'#6'Action'#7#14'actRefreshView'#7'OnClick'#7#21'actRefreshViewEx' +'nd'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3'L`'#0#1#7
+'ecute'#0#0#9'TMenuItem'#10'MenuItem19'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#10 +'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'#3#9' '#0#1
+'MenuItem20'#6'Action'#7#9'actExport'#7'OnClick'#7#16'actExportExecute'#0#0#9 +#7'Command'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#0#0#0#9'TTabSheet'#8
+'TMenuItem'#10'MenuItem40'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#10'MenuItem41' +'tsBinder'#7'Caption'#6#7'&Binder'#12'ClientHeight'#3'='#2#11'ClientWidth'#3
+#6'Action'#7#14'actArrayCreate'#7'OnClick'#7#21'actArrayCreateExecute'#0#0#9 +#245#1#0#8'TSynEdit'#9'srcBinder'#6'Height'#3'='#2#5'Width'#3#245#1#5'Align'
+'TMenuItem'#10'MenuItem45'#6'Action'#7#17'actCompoundCreate'#7'OnClick'#7#24 +#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'Font.Color'#7#7'clBlac'
+'actCompoundCreateExecute'#0#0#9'TMenuItem'#10'MenuItem47'#6'Action'#7#15'ac' +'k'#11'Font.Height'#2#236#9'Font.Name'#6#7'Courier'#10'Font.Pitch'#7#7'fpFix'
+'tRecordCreate'#7'OnClick'#7#22'actRecordCreateExecute'#0#0#9'TMenuItem'#10 +'ed'#11'ParentColor'#8#9'PopupMenu'#7#10'PopupMenu2'#8'TabOrder'#2#0#23'Book'
+'MenuItem44'#6'Action'#7#13'actEnumCreate'#7'OnClick'#7#20'actEnumCreateExec' +'MarkOptions.Xoffset'#2'Q'#15'Gutter.AutoSize'#9#17'Gutter.DigitCount'#2#5#22
+'ute'#0#0#9'TMenuItem'#10'MenuItem43'#6'Action'#7#13'actIntfCreate'#7'OnClic' +'Gutter.ShowLineNumbers'#9#22'Gutter.ShowCodeFolding'#9#23'Gutter.CodeFoldin'
+'k'#7#20'actIntfCreateExecute'#0#0#9'TMenuItem'#10'MenuItem42'#6'Action'#7#18 +'gWidth'#2#14#11'Highlighter'#7#10'SynPasSyn1'#10'Keystrokes'#14#1#7'Command'
+'actTypeALiasCreate'#7'OnClick'#7#25'actTypeALiasCreateExecute'#0#0#0#10'TSy' +#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Command'#3
+'nXMLSyn'#10'SynXMLSyn1'#13'DefaultFilter'#6#30'Documents WSDL (*.wsdl)|*.ws' +#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Command'#2
+'dl'#7'Enabled'#8#23'ElementAttri.Foreground'#7#6'clNavy'#30'AttributeValueA' +'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1#7'Command'
+'ttri.Foreground'#7#8'clPurple'#16'WantBracesParsed'#8#4'left'#3#210#1#3'top' +#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7'Command'#2
+#3#252#0#0#0#0 +#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
]); ]);

View File

@ -169,7 +169,7 @@ var
implementation implementation
uses view_helper, DOM, XMLRead, XMLWrite, //HeapTrc, uses view_helper, DOM, XMLRead, XMLWrite, //HeapTrc,
xsd_parser, wsdl_parser, source_utils, command_line_parser, generator, metadata_generator, xsd_parser, wsdl_parser, source_utils, command_line_parser, generator, metadata_generator,
binary_streamer, wst_resources_utils, wsdl_generator, binary_streamer, wst_resources_utils, xsd_generator, wsdl_generator,
uabout, edit_helper, udm, ufrmsaveoption, pparser uabout, edit_helper, udm, ufrmsaveoption, pparser
{$IFDEF WST_IDE},LazIDEIntf,IDEMsgIntf{$ENDIF}; {$IFDEF WST_IDE},LazIDEIntf,IDEMsgIntf{$ENDIF};
@ -375,11 +375,13 @@ end;
procedure GenerateWSDL_ToStream(ASymbol : TwstPasTreeContainer; ADest : TStream); procedure GenerateWSDL_ToStream(ASymbol : TwstPasTreeContainer; ADest : TStream);
var var
g : IGenerator;
doc : TXMLDocument; doc : TXMLDocument;
begin begin
doc := TXMLDocument.Create(); doc := TXMLDocument.Create();
try try
GenerateWSDL(ASymbol,doc); g := TWsdlGenerator.Create(doc);
g.Execute(ASymbol,ASymbol.CurrentModule.Name);
WriteXML(doc,ADest); WriteXML(doc,ADest);
finally finally
FreeAndNil(doc); FreeAndNil(doc);

View File

@ -27,7 +27,7 @@ uses
Type Type
TComandLineOption = ( TComandLineOption = (
cloInterface, cloProxy, cloImp, cloBinder, cloWsdl, cloInterface, cloProxy, cloImp, cloBinder, cloWsdl, cloXsd,
cloOutPutDirRelative, cloOutPutDirAbsolute cloOutPutDirRelative, cloOutPutDirAbsolute
); );
TComandLineOptions = set of TComandLineOption; TComandLineOptions = set of TComandLineOption;
@ -53,7 +53,7 @@ begin
AAppOptions := []; AAppOptions := [];
c := #0; c := #0;
repeat repeat
c := GetOpt('u:pibo:a:w'); c := GetOpt('u:pibo:a:wx');
case c of case c of
'u' : 'u' :
begin begin
@ -74,6 +74,7 @@ begin
OptionsArgsMAP[cloOutPutDirAbsolute] := OptArg; OptionsArgsMAP[cloOutPutDirAbsolute] := OptArg;
End; End;
'w' : Include(AAppOptions,cloWsdl); 'w' : Include(AAppOptions,cloWsdl);
'x' : Include(AAppOptions,cloXsd);
end; end;
until ( c = EndOfOptions ); until ( c = EndOfOptions );
Result := OptInd; Result := OptInd;

View File

@ -1 +1 @@
ws_helper -uA -i -p -b -a"C:\Programmes\lazarus\wst\trunk\tests\files" "C:\Programmes\lazarus\utils\amazon\AWSECommerceService.wsdl" >test_amazon_res.txt ws_helper -uA -i -p -b -w -x -a"C:\Programmes\lazarus\wst\trunk\tests\files" "C:\Programmes\lazarus\utils\amazon\AWSECommerceService.wsdl" >test_amazon_res.txt

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\ 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 UsePackages=0
[Parameters] [Parameters]
RunParams=-uA -i -p -b -a"C:\Programmes\lazarus\wst\trunk\tests\files" "C:\Programmes\lazarus\wst\trunk\type_lib_edtr\files\company.xsd" RunParams=-uA -i -p -b -x -a"C:\Programmes\lazarus\wst\trunk\tests\files" "C:\Programmes\lazarus\utils\amazon\AWSECommerceService.wsdl"
HostApplication= HostApplication=
Launcher= Launcher=
UseLauncher=0 UseLauncher=0

View File

@ -41,7 +41,8 @@ uses
logger_intf, logger_intf,
xsd_parser, xsd_parser,
ws_parser_imp, ws_parser_imp,
wsdl_parser; wsdl_parser,
xsd_generator;
{$INCLUDE ws_helper_prog.inc} {$INCLUDE ws_helper_prog.inc}

View File

@ -24,71 +24,9 @@ interface
uses uses
SysUtils, Classes SysUtils, Classes
{$IFNDEF FPC}, xmldom, wst_delphi_xml{$ELSE},DOM{$ENDIF} {$IFNDEF FPC}, xmldom, wst_delphi_xml{$ELSE},DOM{$ENDIF}
, cursor_intf, dom_cursors , cursor_intf, dom_cursors, xsd_consts
; ;
const
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 type
TNotFoundAction = ( nfaNone, nfaRaiseException ); TNotFoundAction = ( nfaNone, nfaRaiseException );
@ -341,32 +279,13 @@ function wst_findCustomAttributeXsd(
) : Boolean; ) : Boolean;
var var
nd : TDOMNode; nd : TDOMNode;
tmpCrs : IObjectCursor;
begin begin
Result := False; Result := False;
tmpCrs := CreateCursorOn( if Assigned(ANode) and ( ANode.Attributes <> nil ) then begin
CreateChildrenCursor(ANode,cetRttiNode), nd := ANode.Attributes.GetNamedItem(AAttribute);
ParseFilter(CreateQualifiedNameFilterStr(s_annotation,AXsdShortNames),TDOMNodeRttiExposer) if Assigned(nd) then begin
); Result := True;
tmpCrs.Reset(); AValue := nd.NodeValue;
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; end;
end; end;

View File

@ -68,6 +68,7 @@ type
FObjects : TObjectList; FObjects : TObjectList;
FProps : TObjectList; FProps : TObjectList;
private private
procedure FreeList(AObject : TObject);
public public
constructor Create(); constructor Create();
destructor Destroy();override; destructor Destroy();override;
@ -127,6 +128,7 @@ type
property Binding[AIndex : Integer] : TwstBinding read GetBinding; property Binding[AIndex : Integer] : TwstBinding read GetBinding;
property Properties : TPropertyHolder read FProperties; property Properties : TPropertyHolder read FProperties;
procedure FreeProperties(AObject : TPasElement);
procedure RegisterExternalAlias(AObject : TPasElement; const AExternalName : String); procedure RegisterExternalAlias(AObject : TPasElement; const AExternalName : String);
function SameName(AObject : TPasElement; const AName : string) : Boolean; function SameName(AObject : TPasElement; const AName : string) : Boolean;
function GetExternalName(AObject : TPasElement) : string; function GetExternalName(AObject : TPasElement) : string;
@ -176,7 +178,7 @@ type
function CreateWstInterfaceSymbolTable(AContainer : TwstPasTreeContainer) : TPasModule; function CreateWstInterfaceSymbolTable(AContainer : TwstPasTreeContainer) : TPasModule;
implementation implementation
uses parserutils; uses parserutils, wst_types;
const const
SIMPLE_TYPES_COUNT = 15; SIMPLE_TYPES_COUNT = 15;
@ -715,6 +717,40 @@ begin
Result := nil; Result := nil;
end; end;
procedure TwstPasTreeContainer.FreeProperties(AObject: TPasElement);
procedure FreeClassProps(AObj : TPasClassType);
var
ls : TList;
k : PtrInt;
begin
ls := AObj.Members;
for k := 0 to Pred(ls.Count) do begin
FProperties.FreeList(TPasElement(ls[k]));
end;
end;
procedure FreeRecordFields(AObj : TPasRecordType);
var
ls : TList;
k : PtrInt;
begin
ls := AObj.Members;
for k := 0 to Pred(ls.Count) do begin
FProperties.FreeList(TPasElement(ls[k]));
end;
end;
begin
if Assigned(AObject) then begin
FProperties.FreeList(AObject);
if AObject.InheritsFrom(TPasClassType) then
FreeClassProps(AObject as TPasClassType)
else if AObject.InheritsFrom(TPasRecordType) then
FreeRecordFields(AObject as TPasRecordType);
end;
end;
procedure TwstPasTreeContainer.RegisterExternalAlias( procedure TwstPasTreeContainer.RegisterExternalAlias(
AObject : TPasElement; AObject : TPasElement;
const AExternalName : String const AExternalName : String
@ -813,6 +849,17 @@ begin
end; end;
end; end;
procedure TPropertyHolder.FreeList(AObject: TObject);
var
i : PtrInt;
begin
i := FObjects.IndexOf(AObject);
if ( i >= 0 ) then begin
FObjects.Delete(i);
FProps.Delete(i);
end;
end;
constructor TPropertyHolder.Create(); constructor TPropertyHolder.Create();
begin begin
FObjects := TObjectList.Create(False); FObjects := TObjectList.Create(False);

View File

@ -12,7 +12,7 @@
<MainUnit Value="0"/> <MainUnit Value="0"/>
<IconPath Value=".\"/> <IconPath Value=".\"/>
<TargetFileExt Value=""/> <TargetFileExt Value=""/>
<ActiveEditorIndexAtStart Value="2"/> <ActiveEditorIndexAtStart Value="4"/>
</General> </General>
<PublishOptions> <PublishOptions>
<Version Value="2"/> <Version Value="2"/>
@ -24,7 +24,7 @@
<RunParams> <RunParams>
<local> <local>
<FormatVersion Value="1"/> <FormatVersion Value="1"/>
<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;"/> <CommandLineParams Value="-uA -i -p -b -x -a&quot;C:\Programmes\lazarus\wst\trunk\tests\files&quot; &quot;C:\Programmes\lazarus\wst\trunk\type_lib_edtr\files\DataSource.xsd&quot;"/>
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
</local> </local>
</RunParams> </RunParams>
@ -33,13 +33,13 @@
<PackageName Value="FCL"/> <PackageName Value="FCL"/>
</Item1> </Item1>
</RequiredPackages> </RequiredPackages>
<Units Count="88"> <Units Count="91">
<Unit0> <Unit0>
<Filename Value="ws_helper.pas"/> <Filename Value="ws_helper.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="ws_helper"/> <UnitName Value="ws_helper"/>
<CursorPos X="38" Y="31"/> <CursorPos X="52" Y="39"/>
<TopLine Value="20"/> <TopLine Value="21"/>
<EditorIndex Value="0"/> <EditorIndex Value="0"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@ -50,7 +50,7 @@
<UnitName Value="ws_parser"/> <UnitName Value="ws_parser"/>
<CursorPos X="1" Y="487"/> <CursorPos X="1" Y="487"/>
<TopLine Value="444"/> <TopLine Value="444"/>
<EditorIndex Value="19"/> <EditorIndex Value="11"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit1> </Unit1>
@ -60,7 +60,7 @@
<UnitName Value="generator"/> <UnitName Value="generator"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="20"/> <EditorIndex Value="12"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Bookmarks Count="3"> <Bookmarks Count="3">
<Item0 X="69" Y="935" ID="1"/> <Item0 X="69" Y="935" ID="1"/>
@ -84,9 +84,9 @@
<Filename Value="parserutils.pas"/> <Filename Value="parserutils.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="parserutils"/> <UnitName Value="parserutils"/>
<CursorPos X="18" Y="400"/> <CursorPos X="18" Y="357"/>
<TopLine Value="381"/> <TopLine Value="314"/>
<EditorIndex Value="17"/> <EditorIndex Value="9"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit4> </Unit4>
@ -96,35 +96,33 @@
<UnitName Value="source_utils"/> <UnitName Value="source_utils"/>
<CursorPos X="17" Y="19"/> <CursorPos X="17" Y="19"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="13"/>
<UsageCount Value="201"/> <UsageCount Value="201"/>
<Loaded Value="True"/>
</Unit5> </Unit5>
<Unit6> <Unit6>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\strutils.pp"/> <Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\strutils.pp"/>
<UnitName Value="strutils"/> <UnitName Value="strutils"/>
<CursorPos X="23" Y="246"/> <CursorPos X="23" Y="246"/>
<TopLine Value="246"/> <TopLine Value="246"/>
<UsageCount Value="2"/> <UsageCount Value="10"/>
</Unit6> </Unit6>
<Unit7> <Unit7>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstrh.inc"/> <Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstrh.inc"/>
<CursorPos X="10" Y="74"/> <CursorPos X="10" Y="74"/>
<TopLine Value="70"/> <TopLine Value="70"/>
<UsageCount Value="2"/> <UsageCount Value="10"/>
</Unit7> </Unit7>
<Unit8> <Unit8>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstr.inc"/> <Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstr.inc"/>
<CursorPos X="3" Y="185"/> <CursorPos X="3" Y="185"/>
<TopLine Value="180"/> <TopLine Value="180"/>
<UsageCount Value="2"/> <UsageCount Value="10"/>
</Unit8> </Unit8>
<Unit9> <Unit9>
<Filename Value="command_line_parser.pas"/> <Filename Value="command_line_parser.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="command_line_parser"/> <UnitName Value="command_line_parser"/>
<CursorPos X="11" Y="39"/> <CursorPos X="39" Y="77"/>
<TopLine Value="19"/> <TopLine Value="1"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
</Unit9> </Unit9>
<Unit10> <Unit10>
@ -133,9 +131,7 @@
<UnitName Value="metadata_generator"/> <UnitName Value="metadata_generator"/>
<CursorPos X="20" Y="19"/> <CursorPos X="20" Y="19"/>
<TopLine Value="114"/> <TopLine Value="114"/>
<EditorIndex Value="14"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit10> </Unit10>
<Unit11> <Unit11>
<Filename Value="..\binary_streamer.pas"/> <Filename Value="..\binary_streamer.pas"/>
@ -166,44 +162,40 @@
<UnitName Value="rtti_filters"/> <UnitName Value="rtti_filters"/>
<CursorPos X="36" Y="186"/> <CursorPos X="36" Y="186"/>
<TopLine Value="184"/> <TopLine Value="184"/>
<UsageCount Value="93"/> <UsageCount Value="91"/>
</Unit14> </Unit14>
<Unit15> <Unit15>
<Filename Value="..\wst_rtti_filter\dom_cursors.pas"/> <Filename Value="..\wst_rtti_filter\dom_cursors.pas"/>
<UnitName Value="dom_cursors"/> <UnitName Value="dom_cursors"/>
<CursorPos X="13" Y="353"/> <CursorPos X="13" Y="353"/>
<TopLine Value="317"/> <TopLine Value="317"/>
<EditorIndex Value="12"/> <UsageCount Value="99"/>
<UsageCount Value="101"/>
<Loaded Value="True"/>
</Unit15> </Unit15>
<Unit16> <Unit16>
<Filename Value="..\wst_rtti_filter\cursor_intf.pas"/> <Filename Value="..\wst_rtti_filter\cursor_intf.pas"/>
<UnitName Value="cursor_intf"/> <UnitName Value="cursor_intf"/>
<CursorPos X="1" Y="159"/> <CursorPos X="1" Y="159"/>
<TopLine Value="133"/> <TopLine Value="133"/>
<EditorIndex Value="5"/> <UsageCount Value="99"/>
<UsageCount Value="101"/>
<Loaded Value="True"/>
</Unit16> </Unit16>
<Unit17> <Unit17>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysstrh.inc"/> <Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysstrh.inc"/>
<CursorPos X="10" Y="100"/> <CursorPos X="10" Y="100"/>
<TopLine Value="86"/> <TopLine Value="86"/>
<UsageCount Value="3"/> <UsageCount Value="1"/>
</Unit17> </Unit17>
<Unit18> <Unit18>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/> <Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="14" Y="151"/> <CursorPos X="14" Y="151"/>
<TopLine Value="137"/> <TopLine Value="137"/>
<UsageCount Value="2"/> <UsageCount Value="10"/>
</Unit18> </Unit18>
<Unit19> <Unit19>
<Filename Value="wsdl2pas_imp.pas"/> <Filename Value="wsdl2pas_imp.pas"/>
<UnitName Value="wsdl2pas_imp"/> <UnitName Value="wsdl2pas_imp"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="102"/> <UsageCount Value="100"/>
<Bookmarks Count="2"> <Bookmarks Count="2">
<Item0 X="21" Y="763" ID="3"/> <Item0 X="21" Y="763" ID="3"/>
<Item1 X="50" Y="657" ID="5"/> <Item1 X="50" Y="657" ID="5"/>
@ -214,83 +206,83 @@
<UnitName Value="getopts"/> <UnitName Value="getopts"/>
<CursorPos X="1" Y="231"/> <CursorPos X="1" Y="231"/>
<TopLine Value="218"/> <TopLine Value="218"/>
<UsageCount Value="10"/> <UsageCount Value="8"/>
</Unit20> </Unit20>
<Unit21> <Unit21>
<Filename Value="..\..\..\..\lazarus211\fpc\2.1.1\source\packages\fcl-xml\src\dom.pp"/> <Filename Value="..\..\..\..\lazarus211\fpc\2.1.1\source\packages\fcl-xml\src\dom.pp"/>
<UnitName Value="DOM"/> <UnitName Value="DOM"/>
<CursorPos X="27" Y="41"/> <CursorPos X="27" Y="41"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="6"/> <UsageCount Value="4"/>
</Unit21> </Unit21>
<Unit22> <Unit22>
<Filename Value="..\..\..\..\lazarus211\fpc\2.1.1\source\packages\fcl-base\src\inc\avl_tree.pp"/> <Filename Value="..\..\..\..\lazarus211\fpc\2.1.1\source\packages\fcl-base\src\inc\avl_tree.pp"/>
<UnitName Value="AVL_Tree"/> <UnitName Value="AVL_Tree"/>
<CursorPos X="54" Y="156"/> <CursorPos X="54" Y="156"/>
<TopLine Value="332"/> <TopLine Value="332"/>
<UsageCount Value="2"/> <UsageCount Value="10"/>
</Unit22> </Unit22>
<Unit23> <Unit23>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\inc\contnrs.pp"/> <Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\inc\contnrs.pp"/>
<UnitName Value="contnrs"/> <UnitName Value="contnrs"/>
<CursorPos X="30" Y="685"/> <CursorPos X="30" Y="685"/>
<TopLine Value="683"/> <TopLine Value="683"/>
<UsageCount Value="2"/> <UsageCount Value="10"/>
</Unit23> </Unit23>
<Unit24> <Unit24>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\lists.inc"/> <Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\lists.inc"/>
<CursorPos X="3" Y="29"/> <CursorPos X="3" Y="29"/>
<TopLine Value="27"/> <TopLine Value="27"/>
<UsageCount Value="2"/> <UsageCount Value="10"/>
</Unit24> </Unit24>
<Unit25> <Unit25>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysstr.inc"/> <Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysstr.inc"/>
<CursorPos X="1" Y="689"/> <CursorPos X="1" Y="689"/>
<TopLine Value="686"/> <TopLine Value="686"/>
<UsageCount Value="3"/> <UsageCount Value="1"/>
</Unit25> </Unit25>
<Unit26> <Unit26>
<Filename Value="..\..\..\..\lazarus23_213\others_package\indy\indy-10.2.0.1\lazarus\IdDsnCoreResourceStrings.pas"/> <Filename Value="..\..\..\..\lazarus23_213\others_package\indy\indy-10.2.0.1\lazarus\IdDsnCoreResourceStrings.pas"/>
<UnitName Value="IdDsnCoreResourceStrings"/> <UnitName Value="IdDsnCoreResourceStrings"/>
<CursorPos X="9" Y="76"/> <CursorPos X="9" Y="76"/>
<TopLine Value="64"/> <TopLine Value="64"/>
<UsageCount Value="2"/> <UsageCount Value="10"/>
</Unit26> </Unit26>
<Unit27> <Unit27>
<Filename Value="..\..\..\..\lazarus23_213\others_package\indy\indy-10.2.0.1\fpc\System\IdGlobal.pas"/> <Filename Value="..\..\..\..\lazarus23_213\others_package\indy\indy-10.2.0.1\fpc\System\IdGlobal.pas"/>
<UnitName Value="IdGlobal"/> <UnitName Value="IdGlobal"/>
<CursorPos X="44" Y="989"/> <CursorPos X="44" Y="989"/>
<TopLine Value="981"/> <TopLine Value="981"/>
<UsageCount Value="2"/> <UsageCount Value="10"/>
</Unit27> </Unit27>
<Unit28> <Unit28>
<Filename Value="..\..\..\fpc\packages\fcl-xml\src\xmlread.pp"/> <Filename Value="..\..\..\fpc\packages\fcl-xml\src\xmlread.pp"/>
<UnitName Value="XMLRead"/> <UnitName Value="XMLRead"/>
<CursorPos X="3" Y="3270"/> <CursorPos X="3" Y="3270"/>
<TopLine Value="3266"/> <TopLine Value="3266"/>
<UsageCount Value="4"/> <UsageCount Value="2"/>
</Unit28> </Unit28>
<Unit29> <Unit29>
<Filename Value="..\..\..\fpc\rtl\unix\sysutils.pp"/> <Filename Value="..\..\..\fpc\rtl\unix\sysutils.pp"/>
<UnitName Value="sysutils"/> <UnitName Value="sysutils"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="34"/> <TopLine Value="34"/>
<UsageCount Value="4"/> <UsageCount Value="2"/>
</Unit29> </Unit29>
<Unit30> <Unit30>
<Filename Value="..\..\..\fpc\utils\fppkg\fcl20\contnrs.pp"/> <Filename Value="..\..\..\fpc\utils\fppkg\fcl20\contnrs.pp"/>
<UnitName Value="contnrs"/> <UnitName Value="contnrs"/>
<CursorPos X="70" Y="21"/> <CursorPos X="70" Y="21"/>
<TopLine Value="34"/> <TopLine Value="34"/>
<UsageCount Value="4"/> <UsageCount Value="2"/>
</Unit30> </Unit30>
<Unit31> <Unit31>
<Filename Value="pascal_parser_intf.pas"/> <Filename Value="pascal_parser_intf.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="pascal_parser_intf"/> <UnitName Value="pascal_parser_intf"/>
<CursorPos X="1" Y="652"/> <CursorPos X="3" Y="602"/>
<TopLine Value="637"/> <TopLine Value="597"/>
<EditorIndex Value="16"/> <EditorIndex Value="8"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit31> </Unit31>
@ -299,131 +291,131 @@
<UnitName Value="PasTree"/> <UnitName Value="PasTree"/>
<CursorPos X="46" Y="104"/> <CursorPos X="46" Y="104"/>
<TopLine Value="89"/> <TopLine Value="89"/>
<UsageCount Value="22"/> <UsageCount Value="20"/>
</Unit32> </Unit32>
<Unit33> <Unit33>
<Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-passrc\src\pparser.pp"/> <Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-passrc\src\pparser.pp"/>
<UnitName Value="PParser"/> <UnitName Value="PParser"/>
<CursorPos X="48" Y="768"/> <CursorPos X="48" Y="768"/>
<TopLine Value="750"/> <TopLine Value="750"/>
<UsageCount Value="26"/> <UsageCount Value="24"/>
</Unit33> </Unit33>
<Unit34> <Unit34>
<Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-passrc\src\pscanner.pp"/> <Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-passrc\src\pscanner.pp"/>
<UnitName Value="PScanner"/> <UnitName Value="PScanner"/>
<CursorPos X="19" Y="505"/> <CursorPos X="19" Y="505"/>
<TopLine Value="490"/> <TopLine Value="490"/>
<UsageCount Value="25"/> <UsageCount Value="23"/>
</Unit34> </Unit34>
<Unit35> <Unit35>
<Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-base\src\inc\contnrs.pp"/> <Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-base\src\inc\contnrs.pp"/>
<UnitName Value="contnrs"/> <UnitName Value="contnrs"/>
<CursorPos X="113" Y="702"/> <CursorPos X="113" Y="702"/>
<TopLine Value="688"/> <TopLine Value="688"/>
<UsageCount Value="2"/> <UsageCount Value="10"/>
</Unit35> </Unit35>
<Unit36> <Unit36>
<Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\win32\classes.pp"/> <Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\win32\classes.pp"/>
<UnitName Value="Classes"/> <UnitName Value="Classes"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="6"/> <UsageCount Value="4"/>
</Unit36> </Unit36>
<Unit37> <Unit37>
<Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\classes\classesh.inc"/> <Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="14" Y="171"/> <CursorPos X="14" Y="171"/>
<TopLine Value="149"/> <TopLine Value="149"/>
<UsageCount Value="10"/> <UsageCount Value="8"/>
</Unit37> </Unit37>
<Unit38> <Unit38>
<Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\classes\lists.inc"/> <Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\classes\lists.inc"/>
<CursorPos X="1" Y="417"/> <CursorPos X="1" Y="417"/>
<TopLine Value="402"/> <TopLine Value="402"/>
<UsageCount Value="2"/> <UsageCount Value="10"/>
</Unit38> </Unit38>
<Unit39> <Unit39>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\packages\fcl-xml\src\dom.pp"/> <Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\packages\fcl-xml\src\dom.pp"/>
<UnitName Value="DOM"/> <UnitName Value="DOM"/>
<CursorPos X="3" Y="459"/> <CursorPos X="3" Y="459"/>
<TopLine Value="441"/> <TopLine Value="441"/>
<UsageCount Value="10"/> <UsageCount Value="8"/>
</Unit39> </Unit39>
<Unit40> <Unit40>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\win32\system.pp"/> <Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\win32\system.pp"/>
<UnitName Value="System"/> <UnitName Value="System"/>
<CursorPos X="1" Y="931"/> <CursorPos X="1" Y="931"/>
<TopLine Value="916"/> <TopLine Value="916"/>
<UsageCount Value="10"/> <UsageCount Value="8"/>
</Unit40> </Unit40>
<Unit41> <Unit41>
<Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\inc\wstrings.inc"/> <Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\inc\wstrings.inc"/>
<CursorPos X="1" Y="945"/> <CursorPos X="1" Y="945"/>
<TopLine Value="930"/> <TopLine Value="930"/>
<UsageCount Value="3"/> <UsageCount Value="1"/>
</Unit41> </Unit41>
<Unit42> <Unit42>
<Filename Value="pastree.pp"/> <Filename Value="pastree.pp"/>
<UnitName Value="PasTree"/> <UnitName Value="PasTree"/>
<CursorPos X="16" Y="73"/> <CursorPos X="16" Y="73"/>
<TopLine Value="72"/> <TopLine Value="72"/>
<UsageCount Value="45"/> <UsageCount Value="43"/>
</Unit42> </Unit42>
<Unit43> <Unit43>
<Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\win32\system.pp"/> <Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\win32\system.pp"/>
<UnitName Value="System"/> <UnitName Value="System"/>
<CursorPos X="1" Y="940"/> <CursorPos X="1" Y="940"/>
<TopLine Value="925"/> <TopLine Value="925"/>
<UsageCount Value="3"/> <UsageCount Value="1"/>
</Unit43> </Unit43>
<Unit44> <Unit44>
<Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\inc\heap.inc"/> <Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\inc\heap.inc"/>
<CursorPos X="1" Y="817"/> <CursorPos X="1" Y="817"/>
<TopLine Value="802"/> <TopLine Value="802"/>
<UsageCount Value="10"/> <UsageCount Value="8"/>
</Unit44> </Unit44>
<Unit45> <Unit45>
<Filename Value="pparser.pp"/> <Filename Value="pparser.pp"/>
<UnitName Value="PParser"/> <UnitName Value="PParser"/>
<CursorPos X="33" Y="426"/> <CursorPos X="33" Y="426"/>
<TopLine Value="343"/> <TopLine Value="343"/>
<UsageCount Value="45"/> <UsageCount Value="43"/>
</Unit45> </Unit45>
<Unit46> <Unit46>
<Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\inc\heaptrc.pp"/> <Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\inc\heaptrc.pp"/>
<UnitName Value="heaptrc"/> <UnitName Value="heaptrc"/>
<CursorPos X="29" Y="46"/> <CursorPos X="29" Y="46"/>
<TopLine Value="28"/> <TopLine Value="28"/>
<UsageCount Value="11"/> <UsageCount Value="9"/>
</Unit46> </Unit46>
<Unit47> <Unit47>
<Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\sysutils\sysutilh.inc"/> <Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="27" Y="209"/> <CursorPos X="27" Y="209"/>
<TopLine Value="209"/> <TopLine Value="209"/>
<UsageCount Value="10"/> <UsageCount Value="8"/>
</Unit47> </Unit47>
<Unit48> <Unit48>
<Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\sysutils\sysansih.inc"/> <Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\sysutils\sysansih.inc"/>
<CursorPos X="10" Y="24"/> <CursorPos X="10" Y="24"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="2"/> <UsageCount Value="10"/>
</Unit48> </Unit48>
<Unit49> <Unit49>
<Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\sysutils\sysansi.inc"/> <Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\sysutils\sysansi.inc"/>
<CursorPos X="13" Y="51"/> <CursorPos X="13" Y="51"/>
<TopLine Value="41"/> <TopLine Value="41"/>
<UsageCount Value="2"/> <UsageCount Value="10"/>
</Unit49> </Unit49>
<Unit50> <Unit50>
<Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\inc\systemh.inc"/> <Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\inc\systemh.inc"/>
<CursorPos X="11" Y="562"/> <CursorPos X="11" Y="562"/>
<TopLine Value="558"/> <TopLine Value="558"/>
<UsageCount Value="2"/> <UsageCount Value="10"/>
</Unit50> </Unit50>
<Unit51> <Unit51>
<Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\inc\astrings.inc"/> <Filename Value="..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\inc\astrings.inc"/>
<CursorPos X="3" Y="744"/> <CursorPos X="3" Y="744"/>
<TopLine Value="730"/> <TopLine Value="730"/>
<UsageCount Value="2"/> <UsageCount Value="10"/>
</Unit51> </Unit51>
<Unit52> <Unit52>
<Filename Value="logger_intf.pas"/> <Filename Value="logger_intf.pas"/>
@ -431,160 +423,158 @@
<UnitName Value="logger_intf"/> <UnitName Value="logger_intf"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="18"/> <EditorIndex Value="10"/>
<UsageCount Value="115"/> <UsageCount Value="138"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit52> </Unit52>
<Unit53> <Unit53>
<Filename Value="..\wst.inc"/> <Filename Value="..\wst.inc"/>
<CursorPos X="4" Y="6"/> <CursorPos X="4" Y="6"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="3"/> <UsageCount Value="1"/>
</Unit53> </Unit53>
<Unit54> <Unit54>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\packages\fcl-base\src\inc\contnrs.pp"/> <Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\packages\fcl-base\src\inc\contnrs.pp"/>
<UnitName Value="contnrs"/> <UnitName Value="contnrs"/>
<CursorPos X="1" Y="755"/> <CursorPos X="1" Y="755"/>
<TopLine Value="737"/> <TopLine Value="737"/>
<UsageCount Value="4"/> <UsageCount Value="2"/>
</Unit54> </Unit54>
<Unit55> <Unit55>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\inc\except.inc"/> <Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\inc\except.inc"/>
<CursorPos X="1" Y="213"/> <CursorPos X="1" Y="213"/>
<TopLine Value="195"/> <TopLine Value="195"/>
<UsageCount Value="4"/> <UsageCount Value="2"/>
</Unit55> </Unit55>
<Unit56> <Unit56>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\classes\stringl.inc"/> <Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\classes\stringl.inc"/>
<CursorPos X="1" Y="1075"/> <CursorPos X="1" Y="1075"/>
<TopLine Value="1057"/> <TopLine Value="1057"/>
<UsageCount Value="3"/> <UsageCount Value="1"/>
</Unit56> </Unit56>
<Unit57> <Unit57>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\i386\i386.inc"/> <Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\i386\i386.inc"/>
<CursorPos X="1" Y="1244"/> <CursorPos X="1" Y="1244"/>
<TopLine Value="1226"/> <TopLine Value="1226"/>
<UsageCount Value="3"/> <UsageCount Value="1"/>
</Unit57> </Unit57>
<Unit58> <Unit58>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\inc\astrings.inc"/> <Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\inc\astrings.inc"/>
<CursorPos X="1" Y="301"/> <CursorPos X="1" Y="301"/>
<TopLine Value="283"/> <TopLine Value="283"/>
<UsageCount Value="3"/> <UsageCount Value="1"/>
</Unit58> </Unit58>
<Unit59> <Unit59>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\objpas.pp"/> <Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\objpas.pp"/>
<UnitName Value="objpas"/> <UnitName Value="objpas"/>
<CursorPos X="14" Y="121"/> <CursorPos X="14" Y="121"/>
<TopLine Value="112"/> <TopLine Value="112"/>
<UsageCount Value="7"/> <UsageCount Value="5"/>
</Unit59> </Unit59>
<Unit60> <Unit60>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\inc\systemh.inc"/> <Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\inc\systemh.inc"/>
<CursorPos X="18" Y="737"/> <CursorPos X="18" Y="737"/>
<TopLine Value="665"/> <TopLine Value="665"/>
<UsageCount Value="7"/> <UsageCount Value="5"/>
</Unit60> </Unit60>
<Unit61> <Unit61>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\win\systhrd.inc"/> <Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\win\systhrd.inc"/>
<CursorPos X="14" Y="144"/> <CursorPos X="14" Y="144"/>
<TopLine Value="144"/> <TopLine Value="144"/>
<UsageCount Value="7"/> <UsageCount Value="5"/>
</Unit61> </Unit61>
<Unit62> <Unit62>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\win\sysos.inc"/> <Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\win\sysos.inc"/>
<CursorPos X="13" Y="235"/> <CursorPos X="13" Y="235"/>
<TopLine Value="235"/> <TopLine Value="235"/>
<UsageCount Value="7"/> <UsageCount Value="5"/>
</Unit62> </Unit62>
<Unit63> <Unit63>
<Filename Value="..\wst_global.inc"/> <Filename Value="..\wst_global.inc"/>
<CursorPos X="25" Y="4"/> <CursorPos X="25" Y="4"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="10"/> <UsageCount Value="8"/>
</Unit63> </Unit63>
<Unit64> <Unit64>
<Filename Value="wsdl_generator.pas"/> <Filename Value="wsdl_generator.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="wsdl_generator"/> <UnitName Value="wsdl_generator"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="457"/>
<TopLine Value="116"/> <TopLine Value="429"/>
<EditorIndex Value="15"/> <EditorIndex Value="7"/>
<UsageCount Value="68"/> <UsageCount Value="91"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit64> </Unit64>
<Unit65> <Unit65>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\dom.pp"/> <Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\dom.pp"/>
<UnitName Value="DOM"/> <UnitName Value="DOM"/>
<CursorPos X="3" Y="459"/> <CursorPos X="14" Y="341"/>
<TopLine Value="446"/> <TopLine Value="319"/>
<UsageCount Value="6"/> <UsageCount Value="10"/>
</Unit65> </Unit65>
<Unit66> <Unit66>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\getopts.pp"/> <Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\getopts.pp"/>
<UnitName Value="getopts"/> <UnitName Value="getopts"/>
<CursorPos X="11" Y="179"/> <CursorPos X="11" Y="179"/>
<TopLine Value="157"/> <TopLine Value="157"/>
<UsageCount Value="8"/> <UsageCount Value="6"/>
</Unit66> </Unit66>
<Unit67> <Unit67>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\trunck\rtl\win32\system.pp"/> <Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\trunck\rtl\win32\system.pp"/>
<UnitName Value="system"/> <UnitName Value="system"/>
<CursorPos X="13" Y="30"/> <CursorPos X="13" Y="30"/>
<TopLine Value="8"/> <TopLine Value="8"/>
<UsageCount Value="7"/> <UsageCount Value="5"/>
</Unit67> </Unit67>
<Unit68> <Unit68>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\trunck\rtl\win\sysutils.pp"/> <Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\trunck\rtl\win\sysutils.pp"/>
<UnitName Value="sysutils"/> <UnitName Value="sysutils"/>
<CursorPos X="5" Y="33"/> <CursorPos X="5" Y="33"/>
<TopLine Value="20"/> <TopLine Value="20"/>
<UsageCount Value="7"/> <UsageCount Value="5"/>
</Unit68> </Unit68>
<Unit69> <Unit69>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\trunck\rtl\win32\classes.pp"/> <Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\trunck\rtl\win32\classes.pp"/>
<UnitName Value="classes"/> <UnitName Value="classes"/>
<CursorPos X="5" Y="44"/> <CursorPos X="5" Y="44"/>
<TopLine Value="31"/> <TopLine Value="31"/>
<UsageCount Value="6"/> <UsageCount Value="4"/>
</Unit69> </Unit69>
<Unit70> <Unit70>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\win32\classes.pp"/> <Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\win32\classes.pp"/>
<UnitName Value="Classes"/> <UnitName Value="Classes"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="6"/> <UsageCount Value="4"/>
</Unit70> </Unit70>
<Unit71> <Unit71>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\xmlread.pp"/> <Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\xmlread.pp"/>
<UnitName Value="XMLRead"/> <UnitName Value="XMLRead"/>
<CursorPos X="46" Y="3273"/> <CursorPos X="46" Y="3273"/>
<TopLine Value="3266"/> <TopLine Value="3266"/>
<UsageCount Value="6"/> <UsageCount Value="4"/>
</Unit71> </Unit71>
<Unit72> <Unit72>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\xmlwrite.pp"/> <Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\xmlwrite.pp"/>
<UnitName Value="XMLWrite"/> <UnitName Value="XMLWrite"/>
<CursorPos X="1" Y="626"/> <CursorPos X="1" Y="626"/>
<TopLine Value="586"/> <TopLine Value="586"/>
<UsageCount Value="17"/> <UsageCount Value="15"/>
</Unit72> </Unit72>
<Unit73> <Unit73>
<Filename Value="..\wst_fpc_xml.pas"/> <Filename Value="..\wst_fpc_xml.pas"/>
<UnitName Value="wst_fpc_xml"/> <UnitName Value="wst_fpc_xml"/>
<CursorPos X="1" Y="55"/> <CursorPos X="1" Y="55"/>
<TopLine Value="43"/> <TopLine Value="43"/>
<EditorIndex Value="11"/> <UsageCount Value="21"/>
<UsageCount Value="22"/>
<Loaded Value="True"/>
</Unit73> </Unit73>
<Unit74> <Unit74>
<Filename Value="ws_helper_prog.inc"/> <Filename Value="ws_helper_prog.inc"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<CursorPos X="33" Y="89"/> <CursorPos X="1" Y="144"/>
<TopLine Value="75"/> <TopLine Value="128"/>
<EditorIndex Value="7"/> <EditorIndex Value="4"/>
<UsageCount Value="23"/> <UsageCount Value="46"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit74> </Unit74>
<Unit75> <Unit75>
@ -592,16 +582,16 @@
<UnitName Value="getopts"/> <UnitName Value="getopts"/>
<CursorPos X="52" Y="500"/> <CursorPos X="52" Y="500"/>
<TopLine Value="486"/> <TopLine Value="486"/>
<UsageCount Value="15"/> <UsageCount Value="13"/>
</Unit75> </Unit75>
<Unit76> <Unit76>
<Filename Value="xsd_parser.pas"/> <Filename Value="xsd_parser.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="xsd_parser"/> <UnitName Value="xsd_parser"/>
<CursorPos X="16" Y="14"/> <CursorPos X="96" Y="86"/>
<TopLine Value="1"/> <TopLine Value="45"/>
<EditorIndex Value="6"/> <EditorIndex Value="3"/>
<UsageCount Value="22"/> <UsageCount Value="45"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit76> </Unit76>
<Unit77> <Unit77>
@ -609,26 +599,26 @@
<UnitName Value="heaptrc"/> <UnitName Value="heaptrc"/>
<CursorPos X="29" Y="49"/> <CursorPos X="29" Y="49"/>
<TopLine Value="31"/> <TopLine Value="31"/>
<UsageCount Value="10"/> <UsageCount Value="8"/>
</Unit77> </Unit77>
<Unit78> <Unit78>
<Filename Value="wsdl_parser.pas"/> <Filename Value="wsdl_parser.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="wsdl_parser"/> <UnitName Value="wsdl_parser"/>
<CursorPos X="24" Y="178"/> <CursorPos X="41" Y="1162"/>
<TopLine Value="162"/> <TopLine Value="1148"/>
<EditorIndex Value="2"/> <EditorIndex Value="2"/>
<UsageCount Value="22"/> <UsageCount Value="45"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit78> </Unit78>
<Unit79> <Unit79>
<Filename Value="ws_parser_imp.pas"/> <Filename Value="ws_parser_imp.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="ws_parser_imp"/> <UnitName Value="ws_parser_imp"/>
<CursorPos X="52" Y="1265"/> <CursorPos X="96" Y="717"/>
<TopLine Value="1242"/> <TopLine Value="704"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<UsageCount Value="22"/> <UsageCount Value="45"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit79> </Unit79>
<Unit80> <Unit80>
@ -636,183 +626,80 @@
<UnitName Value="heaptrc"/> <UnitName Value="heaptrc"/>
<CursorPos X="1" Y="182"/> <CursorPos X="1" Y="182"/>
<TopLine Value="167"/> <TopLine Value="167"/>
<UsageCount Value="10"/> <UsageCount Value="8"/>
</Unit80> </Unit80>
<Unit81> <Unit81>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\i386\i386.inc"/> <Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\i386\i386.inc"/>
<CursorPos X="1" Y="1110"/> <CursorPos X="1" Y="1110"/>
<TopLine Value="1095"/> <TopLine Value="1095"/>
<UsageCount Value="10"/> <UsageCount Value="8"/>
</Unit81> </Unit81>
<Unit82> <Unit82>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\objpas\sysutils\fina.inc"/> <Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\objpas\sysutils\fina.inc"/>
<CursorPos X="1" Y="32"/> <CursorPos X="1" Y="32"/>
<TopLine Value="17"/> <TopLine Value="17"/>
<EditorIndex Value="8"/> <UsageCount Value="9"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit82> </Unit82>
<Unit83> <Unit83>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\except.inc"/> <Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\except.inc"/>
<CursorPos X="1" Y="223"/> <CursorPos X="1" Y="223"/>
<TopLine Value="208"/> <TopLine Value="208"/>
<EditorIndex Value="9"/> <UsageCount Value="9"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit83> </Unit83>
<Unit84> <Unit84>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\i386\setjump.inc"/> <Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\i386\setjump.inc"/>
<CursorPos X="1" Y="36"/> <CursorPos X="1" Y="36"/>
<TopLine Value="21"/> <TopLine Value="21"/>
<EditorIndex Value="10"/> <UsageCount Value="9"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit84> </Unit84>
<Unit85> <Unit85>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/> <Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpas.inc"/>
<CursorPos X="9" Y="759"/> <CursorPos X="9" Y="759"/>
<TopLine Value="756"/> <TopLine Value="756"/>
<EditorIndex Value="4"/> <UsageCount Value="9"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit85> </Unit85>
<Unit86> <Unit86>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\rtti.inc"/> <Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\rtti.inc"/>
<CursorPos X="1" Y="166"/> <CursorPos X="1" Y="166"/>
<TopLine Value="151"/> <TopLine Value="151"/>
<UsageCount Value="10"/> <UsageCount Value="8"/>
</Unit86> </Unit86>
<Unit87> <Unit87>
<Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpash.inc"/> <Filename Value="..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpash.inc"/>
<CursorPos X="23" Y="241"/> <CursorPos X="23" Y="241"/>
<TopLine Value="226"/> <TopLine Value="226"/>
<EditorIndex Value="3"/> <UsageCount Value="9"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit87> </Unit87>
<Unit88>
<Filename Value="xsd_generator.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="xsd_generator"/>
<CursorPos X="27" Y="823"/>
<TopLine Value="805"/>
<EditorIndex Value="5"/>
<UsageCount Value="43"/>
<Loaded Value="True"/>
</Unit88>
<Unit89>
<Filename Value="xsd_consts.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="xsd_consts"/>
<CursorPos X="45" Y="80"/>
<TopLine Value="43"/>
<EditorIndex Value="6"/>
<UsageCount Value="43"/>
<Loaded Value="True"/>
</Unit89>
<Unit90>
<Filename Value="wsdl_generator2.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="wsdl_generator2"/>
<CursorPos X="24" Y="400"/>
<TopLine Value="386"/>
<UsageCount Value="38"/>
</Unit90>
</Units> </Units>
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="0" HistoryIndex="-1"/>
<Position1>
<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> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
<Version Value="5"/> <Version Value="5"/>
@ -852,11 +739,15 @@
</Other> </Other>
</CompilerOptions> </CompilerOptions>
<Debugging> <Debugging>
<BreakPoints Count="1"> <BreakPoints Count="2">
<Item1> <Item1>
<Source Value="wsdl2pas_imp.pas"/> <Source Value="wsdl2pas_imp.pas"/>
<Line Value="1346"/> <Line Value="1346"/>
</Item1> </Item1>
<Item2>
<Source Value="ws_parser_imp.pas"/>
<Line Value="965"/>
</Item2>
</BreakPoints> </BreakPoints>
<Exceptions Count="2"> <Exceptions Count="2">
<Item1> <Item1>

View File

@ -27,7 +27,6 @@ uses
SysUtils, SysUtils,
wst_resources_utils, wst_resources_utils,
generator, generator,
wsdl_generator,
parserutils, parserutils,
source_utils, source_utils,
command_line_parser, command_line_parser,
@ -43,7 +42,8 @@ uses
logger_intf, logger_intf,
xsd_parser, xsd_parser,
ws_parser_imp, ws_parser_imp,
wsdl_parser; wsdl_parser,
xsd_generator, wsdl_generator;
{$INCLUDE ws_helper_prog.inc} {$INCLUDE ws_helper_prog.inc}

View File

@ -8,7 +8,8 @@ resourcestring
' -i Generate service minimal implementation' + sNEW_LINE + ' -i Generate service minimal implementation' + sNEW_LINE +
' -o PATH Relative output directory' + sNEW_LINE + ' -o PATH Relative output directory' + sNEW_LINE +
' -a PATH Absolute output directory' + sNEW_LINE + ' -a PATH Absolute output directory' + sNEW_LINE +
' -w Generate WSDL file; Can be used to get wsdl from pascal' + sNEW_LINE; ' -w Generate WSDL file; Can be used to get wsdl from pascal' + sNEW_LINE +
' -x Generate XSD file; Can be used to get xsd from pascal' + sNEW_LINE;
sCOPYRIGHT = 'ws_helper, Web Service Toolkit 0.5 Copyright (c) 2006, 2007 by Inoussa OUEDRAOGO'; sCOPYRIGHT = 'ws_helper, Web Service Toolkit 0.5 Copyright (c) 2006, 2007 by Inoussa OUEDRAOGO';
const const
@ -135,16 +136,33 @@ var
procedure GenerateWSDLFromTree(ASymbol : TwstPasTreeContainer; ADest : TStream); procedure GenerateWSDLFromTree(ASymbol : TwstPasTreeContainer; ADest : TStream);
var var
doc : TXMLDocument; doc : TXMLDocument;
g : IGenerator;
begin begin
doc := CreateDoc();// TXMLDocument.Create(); doc := CreateDoc();
try try
GenerateWSDL(ASymbol,doc); g := TWsdlGenerator.Create(doc);
g.Execute(ASymbol,ASymbol.CurrentModule.Name);
WriteXML(doc,ADest); WriteXML(doc,ADest);
finally finally
ReleaseDomNode(doc); ReleaseDomNode(doc);
end; end;
end; end;
procedure GenerateXsdFromTree(ASymbol : TwstPasTreeContainer; ADest : TStream);
var
doc : TXMLDocument;
gnrtr : IGenerator;
begin
doc := CreateDoc();
try
gnrtr := TXsdGenerator.Create(doc);
gnrtr.Execute(ASymbol,ASymbol.CurrentModule.Name);
WriteXML(doc,ADest);
finally
ReleaseDomNode(doc);
end;
end;
function ProcessFile():Boolean; function ProcessFile():Boolean;
Var Var
mtdaFS: TMemoryStream; mtdaFS: TMemoryStream;
@ -209,6 +227,15 @@ var
srcMngr.CreateItem(ChangeFileExt(ExtractFileName(inFileName),'.wsdl')).Write(strStream.DataString); srcMngr.CreateItem(ChangeFileExt(ExtractFileName(inFileName),'.wsdl')).Write(strStream.DataString);
end; end;
end; end;
if ( cloXsd in AppOptions ) then begin
strStream := TStringStream.Create('');
GenerateXsdFromTree(symtable,strStream);
if not IsStrEmpty(strStream.DataString) then begin
strStream.Position := 0;
srcMngr.CreateItem(ChangeFileExt(ExtractFileName(inFileName),'.xsd')).Write(strStream.DataString);
end;
end;
Result := True; Result := True;
except except

View File

@ -119,7 +119,7 @@ type
SResolveError = 'Unable to resolve this namespace : "%s".'; SResolveError = 'Unable to resolve this namespace : "%s".';
implementation implementation
uses dom_cursors, parserutils, StrUtils, Contnrs; uses dom_cursors, parserutils, StrUtils, Contnrs, xsd_consts;
{ TAbstractTypeParser } { TAbstractTypeParser }
@ -555,19 +555,40 @@ var
TPasEmentCrack(locType).SetName(locType.Name + '_Type'); TPasEmentCrack(locType).SetName(locType.Name + '_Type');
end;} end;}
locMinOccur := 1; if AnsiSameText(s_attribute,ExtractNameFromQName(AElement.NodeName)) then begin
locPartCursor := CreateCursorOn(locAttCursor.Clone() as IObjectCursor,ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_minOccurs)]),TDOMNodeRttiExposer)); locPartCursor := CreateCursorOn(locAttCursor.Clone() as IObjectCursor,ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_use)]),TDOMNodeRttiExposer));
locPartCursor.Reset(); locPartCursor.Reset();
if locPartCursor.MoveNext() then begin if locPartCursor.MoveNext() then begin
if not TryStrToInt((locPartCursor.GetCurrent() as TDOMNodeRttiExposer).NodeValue,locMinOccur) then locStrBuffer := ExtractNameFromQName((locPartCursor.GetCurrent() as TDOMNodeRttiExposer).NodeValue);
raise EXsdParserException.CreateFmt('Invalid "minOccurs" value : "%s.%s".',[FTypeName,locName]); if IsStrEmpty(locStrBuffer) then
if ( locMinOccur < 0 ) then raise EXsdInvalidDefinitionException.CreateFmt('Invalid <%s> definition : empty "use".',[s_attribute]);
raise EXsdParserException.CreateFmt('Invalid "minOccurs" value : "%s.%s".',[FTypeName,locName]); case AnsiIndexText(locStrBuffer,[s_required,s_optional,s_prohibited]) of
0 : locMinOccur := 1;
1 : locMinOccur := 0;
2 : locMinOccur := -1;
else
raise EXsdInvalidDefinitionException.CreateFmt('Invalid <%s> definition : invalid "use" value "%s".',[s_attribute,locStrBuffer]);
end;
end else begin
locMinOccur := 0;
end;
end else begin
locMinOccur := 1;
locPartCursor := CreateCursorOn(locAttCursor.Clone() as IObjectCursor,ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_minOccurs)]),TDOMNodeRttiExposer));
locPartCursor.Reset();
if locPartCursor.MoveNext() then begin
if not TryStrToInt((locPartCursor.GetCurrent() as TDOMNodeRttiExposer).NodeValue,locMinOccur) then
raise EXsdParserException.CreateFmt('Invalid "minOccurs" value : "%s.%s".',[FTypeName,locName]);
if ( locMinOccur < 0 ) then
raise EXsdParserException.CreateFmt('Invalid "minOccurs" value : "%s.%s".',[FTypeName,locName]);
end;
end; end;
locProp.ReadAccessorName := 'F' + locProp.Name; locProp.ReadAccessorName := 'F' + locProp.Name;
locProp.WriteAccessorName := 'F' + locProp.Name; locProp.WriteAccessorName := 'F' + locProp.Name;
if ( locMinOccur = 0 ) then begin if ( locMinOccur = 0 ) then begin
locProp.StoredAccessorName := 'Has' + locProp.Name; locProp.StoredAccessorName := 'Has' + locProp.Name;
end else if ( locMinOccur = -1 ) then begin
locProp.StoredAccessorName := 'False';
end else begin end else begin
locProp.StoredAccessorName := 'True'; locProp.StoredAccessorName := 'True';
end; end;
@ -693,14 +714,14 @@ var
var var
strBuffer : string; strBuffer : string;
begin begin
Result := wst_findCustomAttributeXsd(FContext.GetXsShortNames(),FTypeNode,s_headerBlock,strBuffer) and AnsiSameText('true',Trim(strBuffer)); Result := wst_findCustomAttributeXsd(FContext.GetXsShortNames(),FTypeNode,s_WST_headerBlock,strBuffer) and AnsiSameText('true',Trim(strBuffer));
end; end;
function IsRecordType() : Boolean; function IsRecordType() : Boolean;
var var
strBuffer : string; strBuffer : string;
begin begin
Result := wst_findCustomAttributeXsd(FContext.GetXsShortNames(),FTypeNode,s_record,strBuffer) and AnsiSameText('true',Trim(strBuffer)); Result := wst_findCustomAttributeXsd(FContext.GetXsShortNames(),FTypeNode,s_WST_record,strBuffer) and AnsiSameText('true',Trim(strBuffer));
end; end;
procedure ParseElementsAndAttributes(AEltCrs, AEltAttCrs : IObjectCursor); procedure ParseElementsAndAttributes(AEltCrs, AEltAttCrs : IObjectCursor);
@ -729,10 +750,11 @@ var
i : Integer; i : Integer;
recordType : TPasRecordType; recordType : TPasRecordType;
tmpRecVar : TPasVariable; tmpRecVar : TPasVariable;
locStrBuffer : string;
begin begin
ExtractBaseType(); ExtractBaseType();
eltCrs := ExtractElementCursor(eltAttCrs); eltCrs := ExtractElementCursor(eltAttCrs);
internalName := ExtractIdentifier(ATypeName); internalName := ExtractIdentifier(ATypeName);
hasInternalName := IsReservedKeyWord(internalName) or hasInternalName := IsReservedKeyWord(internalName) or
( not IsValidIdent(internalName) ) or ( not IsValidIdent(internalName) ) or
@ -771,6 +793,7 @@ begin
Result := nil; Result := nil;
propTyp := arrayItems[0] as TPasProperty; propTyp := arrayItems[0] as TPasProperty;
arrayDef := FSymbols.CreateArray(internalName,propTyp.VarType,propTyp.Name,FSymbols.GetExternalName(propTyp),asScoped); arrayDef := FSymbols.CreateArray(internalName,propTyp.VarType,propTyp.Name,FSymbols.GetExternalName(propTyp),asScoped);
FSymbols.FreeProperties(classDef);
FreeAndNil(classDef); FreeAndNil(classDef);
Result := arrayDef; Result := arrayDef;
if hasInternalName then if hasInternalName then
@ -808,11 +831,12 @@ begin
end; end;
end; end;
end; end;
FSymbols.FreeProperties(tmpClassDef);
FreeAndNil(tmpClassDef); FreeAndNil(tmpClassDef);
end; end;
end; end;
end; end;
//check for record //check for record
if ( FDerivationMode = dmNone ) and if ( FDerivationMode = dmNone ) and
Result.InheritsFrom(TPasClassType) and Result.InheritsFrom(TPasClassType) and
@ -835,11 +859,20 @@ begin
if FSymbols.IsAttributeProperty(propTyp) then begin if FSymbols.IsAttributeProperty(propTyp) then begin
FSymbols.SetPropertyAsAttribute(tmpRecVar,True); FSymbols.SetPropertyAsAttribute(tmpRecVar,True);
end; end;
if AnsiSameText(propTyp.StoredAccessorName,'False') then
locStrBuffer := s_prohibited
else if AnsiSameText(Copy(propTyp.StoredAccessorName,1,3),'Has') then
locStrBuffer := s_optional
else
locStrBuffer := s_required;
FSymbols.Properties.SetValue(tmpRecVar,s_WST_storeType,locStrBuffer);
end; end;
end; end;
FSymbols.FreeProperties(tmpClassDef);
FreeAndNil(tmpClassDef); FreeAndNil(tmpClassDef);
end; end;
except except
FSymbols.FreeProperties(Result);
FreeAndNil(Result); FreeAndNil(Result);
raise; raise;
end; end;
@ -931,7 +964,7 @@ var
if ( locStoreOptIdx < 0 ) then if ( locStoreOptIdx < 0 ) then
raise EXsdInvalidDefinitionException.CreateFmt('Invalid <%s> definition : invalid "use" value "%s".',[s_attribute,locStoreOpt]); raise EXsdInvalidDefinitionException.CreateFmt('Invalid <%s> definition : invalid "use" value "%s".',[s_attribute,locStoreOpt]);
end else begin end else begin
locStoreOptIdx := 0; locStoreOptIdx := 1{optional by default!}; //0;
end; end;
locInternalEltName := locName; locInternalEltName := locName;
@ -990,6 +1023,7 @@ begin
end; end;
end; end;
except except
FSymbols.FreeProperties(Result);
FreeAndNil(Result); FreeAndNil(Result);
raise; raise;
end; end;
@ -1212,6 +1246,7 @@ begin
ParseEnumItem((locEnumCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject); ParseEnumItem((locEnumCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject);
end; end;
except except
FSymbols.FreeProperties(Result);
FreeAndNil(Result); FreeAndNil(Result);
raise; raise;
end; end;

File diff suppressed because it is too large Load Diff

View File

@ -98,7 +98,7 @@ type
end; end;
implementation implementation
uses ws_parser_imp, dom_cursors, parserutils, StrUtils; uses ws_parser_imp, dom_cursors, parserutils, StrUtils, xsd_consts;
type type

View File

@ -0,0 +1,101 @@
{
This unit is part of the Web Service Toolkit
Copyright (c) 2006 by Inoussa OUEDRAOGO
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
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. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
}
{$INCLUDE wst_global.inc}
unit xsd_consts;
interface
const
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_definitions = 'definitions';
s_document : WideString = 'document';
s_element : WideString = 'element';
s_enumeration : WideString = 'enumeration';
s_extension : WideString = 'extension';
s_guid : WideString = 'GUID';
s_input : WideString = 'input';
s_item : WideString = 'item';
s_literal = 'literal';
s_location : WideString = 'location';
s_message : WideString = 'message';
s_maxOccurs : WideString = 'maxOccurs';
s_minOccurs : WideString = 'minOccurs';
s_name : WideString = 'name';
s_namespace = 'namespace';
s_operation = 'operation';
s_optional : WideString = 'optional';
s_output : WideString = 'output';
s_part : WideString = 'part';
s_port : WideString = 'port';
s_portType = 'portType';
s_prohibited = 'prohibited';
s_ref : WideString = 'ref';
s_required : WideString = 'required';
s_restriction : WideString = 'restriction';
//s_return : WideString = 'return';
s_rpc = 'rpc';
s_schema : WideString = 'schema';
s_xs : WideString = 'http://www.w3.org/2001/XMLSchema';
s_xs_short = 'xsd';
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_soap_short_name = 'soap';
s_soapAction = 'soapAction';
s_soapInputEncoding = 'Input_EncodingStyle';
s_soapOutputEncoding = 'OutputEncodingStyle';
s_soapStyle = 'style';
s_soapTransport = 'http://schemas.xmlsoap.org/soap/http';
s_style = 'style';
s_targetNamespace = 'targetNamespace';
s_tns = 'tns';
s_transport = 'transport';
s_type = 'type';
s_types = 'types';
s_unbounded = 'unbounded';
s_use = 'use';
s_value = 'value';
s_wsdl = 'http://schemas.xmlsoap.org/wsdl/';
s_xmlns = 'xmlns';
s_WST_headerBlock = 'wst_headerBlock';
s_WST_record = 'wst_record';
s_WST_storeType = 'StoreType';
implementation
end.

View File

@ -0,0 +1,833 @@
{
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_generator;
interface
uses
Classes, SysUtils, TypInfo,
{$IFNDEF FPC}xmldom, wst_delphi_xml{$ELSE}DOM, wst_fpc_xml{$ENDIF},
pastree, pascal_parser_intf;
type
EXsdGeneratorException = class(Exception) end;
TBaseTypeHandler = class;
TBaseTypeHandlerClass = class of TBaseTypeHandler;
IGenerator = interface
['{F69523B3-A6FF-4BFB-9ACB-D4B9F32DBCA9}']
procedure Execute(
ASymTable : TwstPasTreeContainer;
AModuleName : string
);
end;
IXsdGenerator = interface(IGenerator)
['{FBFF92BC-B72B-4B85-8D16-379F9E548DDB}']
function GetSchemaNode(ADocument : TDOMDocument) : TDOMNode;
end;
IXsdTypeHandler = interface
['{541EA377-4F70-49B1-AFB4-FC62B24F567B}']
procedure Generate(
AContainer : TwstPasTreeContainer;
const ASymbol : TPasElement;
ADocument : TDOMDocument
);
function GetOwner() : IXsdGenerator;
end;
IXsdTypeHandlerRegistry = interface
['{C5666646-3426-4696-93EE-AFA8EE7CAE53}']
function Find(
ASymbol : TPasElement;
Aowner : IGenerator;
out AHandler : IXsdTypeHandler
) : Boolean;
procedure Register(AFactory : TBaseTypeHandlerClass);
end;
{ TCustomXsdGenerator }
TCustomXsdGenerator = class(
TInterfacedObject,
IInterface,
IGenerator,
IXsdGenerator
)
private
FDocument : TDOMDocument;
protected
function GetSchemaNode(ADocument : TDOMDocument) : TDOMNode;virtual;abstract;
procedure Execute(
ASymTable : TwstPasTreeContainer;
AModuleName : string
);
procedure Prepare(
ASymTable : TwstPasTreeContainer;
AModule : TPasModule
);virtual;
property Document : TDOMDocument read FDocument;
public
constructor Create(ADocument : TDOMDocument);
end;
{ TXsdGenerator }
TXsdGenerator = class(TCustomXsdGenerator)
private
FSchemaNode : TDOMElement;
protected
function GetSchemaNode(ADocument : TDOMDocument) : TDOMNode;override;
procedure Prepare(ASymTable : TwstPasTreeContainer; AModule : TPasModule);override;
end;
{ TBaseTypeHandler }
TBaseTypeHandler = class(TInterfacedObject,IXsdTypeHandler)
private
FOwner : Pointer;
protected
procedure Generate(
AContainer : TwstPasTreeContainer;
const ASymbol : TPasElement;
ADocument : TDOMDocument
);virtual;abstract;
function GetOwner() : IXsdGenerator;
class function CanHandle(ASymbol : TObject) : Boolean;virtual;abstract;
public
constructor Create(AOwner : IGenerator);virtual;
end;
function GetNameSpaceShortName(
const ANameSpace : string;
ADocument : TDOMDocument
):string;
function GetXsdTypeHandlerRegistry():IXsdTypeHandlerRegistry;{$IFDEF USE_INLINE}inline;{$ENDIF}
function CreateElement(const ANodeName : DOMString; AParent : TDOMNode; ADoc : TDOMDocument):TDOMElement;{$IFDEF USE_INLINE}inline;{$ENDIF}
implementation
uses xsd_consts, Contnrs, StrUtils;
type
{ TXsdTypeHandlerRegistry }
TXsdTypeHandlerRegistry = class(TInterfacedObject,IInterface,IXsdTypeHandlerRegistry)
private
FList : TClassList;
private
function FindIndexOfHandler(ASymbol : TPasElement) : Integer;
protected
function Find(
ASymbol : TPasElement;
Aowner : IGenerator;
out AHandler : IXsdTypeHandler
) : Boolean;
procedure Register(AFactory : TBaseTypeHandlerClass);
public
constructor Create();
destructor Destroy();override;
end;
{ TTypeDefinition_TypeHandler }
TTypeDefinition_TypeHandler = class(TBaseTypeHandler)
protected
procedure Generate(
AContainer : TwstPasTreeContainer;
const ASymbol : TPasElement;
ADocument : TDOMDocument
);override;
class function CanHandle(ASymbol : TObject) : Boolean;override;
function GetSchemaNode(ADocument : TDOMDocument) : TDOMNode;
end;
{ TTypeAliasDefinition_TypeHandler }
TTypeAliasDefinition_TypeHandler = class(TTypeDefinition_TypeHandler)
protected
procedure Generate(
AContainer : TwstPasTreeContainer;
const ASymbol : TPasElement;
ADocument : TDOMDocument
);override;
class function CanHandle(ASymbol : TObject) : Boolean;override;
end;
{ TEnumTypeHandler }
TEnumTypeHandler = class(TTypeDefinition_TypeHandler)
protected
procedure Generate(
AContainer : TwstPasTreeContainer;
const ASymbol : TPasElement;
ADocument : TDOMDocument
);override;
class function CanHandle(ASymbol : TObject) : Boolean;override;
end;
{ TClassTypeDefinition_TypeHandler }
TClassTypeDefinition_TypeHandler = class(TTypeDefinition_TypeHandler)
protected
procedure Generate(
AContainer : TwstPasTreeContainer;
const ASymbol : TPasElement;
ADocument : TDOMDocument
);override;
class function CanHandle(ASymbol : TObject) : Boolean;override;
end;
{ TPasRecordType_TypeHandler }
TPasRecordType_TypeHandler = class(TTypeDefinition_TypeHandler)
protected
procedure Generate(
AContainer : TwstPasTreeContainer;
const ASymbol : TPasElement;
ADocument : TDOMDocument
);override;
class function CanHandle(ASymbol : TObject) : Boolean;override;
end;
{ TBaseArrayRemotable_TypeHandler }
TBaseArrayRemotable_TypeHandler = class(TTypeDefinition_TypeHandler)
protected
procedure Generate(
AContainer : TwstPasTreeContainer;
const ASymbol : TPasElement;
ADocument : TDOMDocument
);override;
class function CanHandle(ASymbol : TObject) : Boolean;override;
end;
var
XsdTypeHandlerRegistryInst : IXsdTypeHandlerRegistry = nil;
function GetXsdTypeHandlerRegistry():IXsdTypeHandlerRegistry;
begin
Result := XsdTypeHandlerRegistryInst;
end;
procedure RegisterFondamentalTypes();
var
r : IXsdTypeHandlerRegistry;
begin
r := GetXsdTypeHandlerRegistry();
r.Register(TEnumTypeHandler);
r.Register(TClassTypeDefinition_TypeHandler);
r.Register(TPasRecordType_TypeHandler);
r.Register(TBaseArrayRemotable_TypeHandler);
r.Register(TTypeAliasDefinition_TypeHandler);
end;
function GetTypeNameSpace(
AContainer : TwstPasTreeContainer;
AType : TPasElement
) : string;
var
locElt : TPasElement;
begin
Result := '';
locElt := AType;
if ( locElt <> nil ) then begin
if locElt.InheritsFrom(TPasUnresolvedTypeRef) then
locElt := AContainer.FindElement(AContainer.GetExternalName(locElt));
if ( locElt <> nil ) and
( not locElt.InheritsFrom(TPasUnresolvedTypeRef) ) and
//locElt.InheritsFrom(TPasType) and
( locElt.Parent <> nil ) and
( locElt.Parent.Parent <> nil )
then begin
Result := AContainer.GetExternalName(locElt.Parent.Parent);
end;
end;
Result := Trim(Result);
if ( Length(Result) = 0 ) then
Result := AContainer.GetExternalName(AContainer.CurrentModule);
end;
function FindAttributeByValueInNode(
const AAttValue : string;
const ANode : TDOMNode;
out AResAtt : string;
const AStartIndex : Integer = 0;
const AStartingWith : string = ''
):boolean;
var
i,c : Integer;
b : Boolean;
begin
AResAtt := '';
if Assigned(ANode) and Assigned(ANode.Attributes) then begin
b := ( Length(AStartingWith) = 0);
c := Pred(ANode.Attributes.Length);
if ( AStartIndex >= 0 ) then
i := AStartIndex;
for i := 0 to c do begin
if AnsiSameText(AAttValue,ANode.Attributes.Item[i].NodeValue) and
( b or ( Pos(AStartingWith,ANode.Attributes.Item[i].NodeName) = 1 ))
then begin
AResAtt := ANode.Attributes.Item[i].NodeName;
Result := True;
Exit;
end;
end;
end;
Result := False;
end;
function GetNameSpaceShortName(
const ANameSpace : string;
ADocument : TDOMDocument
):string;
begin
if FindAttributeByValueInNode(ANameSpace,ADocument.DocumentElement,Result,0, s_xmlns) then begin
Result := Copy(Result,Length(s_xmlns+':')+1,MaxInt);
end else begin
Result := Format('ns%d',[GetNodeListCount(ADocument.DocumentElement.Attributes)]) ;
ADocument.DocumentElement.SetAttribute(Format('%s:%s',[s_xmlns,Result]),ANameSpace);
end;
end;
function CreateElement(const ANodeName : DOMString; AParent : TDOMNode; ADoc : TDOMDocument):TDOMElement;//inline;
begin
Result := ADoc.CreateElement(ANodeName);
AParent.AppendChild(Result);
end;
{ TWsdlTypeHandlerRegistry }
function TXsdTypeHandlerRegistry.FindIndexOfHandler(ASymbol: TPasElement): Integer;
Var
i, c : Integer;
begin
Result := -1;
c := FList.Count;
for i := 0 to Pred(c) do begin
if TBaseTypeHandlerClass(FList[i]).CanHandle(ASymbol) then begin
Result := i;
Break;
end;
end;
end;
function TXsdTypeHandlerRegistry.Find(
ASymbol : TPasElement;
Aowner : IGenerator;
out AHandler : IXsdTypeHandler
) : Boolean;
var
fct : TBaseTypeHandlerClass;
i : Integer;
begin
i := FindIndexOfHandler(ASymbol);
Result := ( i >= 0 );
if Result then begin
fct := TBaseTypeHandlerClass(FList[i]);
AHandler := fct.Create(Aowner) as IXsdTypeHandler;
end;
end;
procedure TXsdTypeHandlerRegistry.Register(AFactory: TBaseTypeHandlerClass);
begin
if ( FList.IndexOf(AFactory) = -1 ) then begin
FList.Add(AFactory);
end;
end;
constructor TXsdTypeHandlerRegistry.Create();
begin
FList := TClassList.Create();
end;
destructor TXsdTypeHandlerRegistry.Destroy();
begin
FreeAndNil(FList);
inherited Destroy();
end;
{ TBaseTypeHandler }
function TBaseTypeHandler.GetOwner(): IXsdGenerator;
begin
Result := IXsdGenerator(FOwner);
end;
constructor TBaseTypeHandler.Create(AOwner: IGenerator);
begin
Assert(Assigned(AOwner));
FOwner := Pointer(AOwner);
end;
{ TTypeDefinition_TypeHandler }
procedure TTypeDefinition_TypeHandler.Generate(
AContainer : TwstPasTreeContainer;
const ASymbol: TPasElement;
ADocument: TDOMDocument
);
begin
Assert(ASymbol.InheritsFrom(TPasType));
end;
class function TTypeDefinition_TypeHandler.CanHandle(ASymbol: TObject): Boolean;
begin
Result := Assigned(ASymbol) and ASymbol.InheritsFrom(TPasType);
end;
function TTypeDefinition_TypeHandler.GetSchemaNode(ADocument : TDOMDocument) : TDOMNode;
begin
Result := GetOwner().GetSchemaNode(ADocument);
end;
{ TTypeAliasDefinition_TypeHandler }
procedure TTypeAliasDefinition_TypeHandler.Generate(
AContainer : TwstPasTreeContainer;
const ASymbol: TPasElement;
ADocument: TDOMDocument
);
var
typItm : TPasAliasType;
ns_shortName, s : string;
defSchemaNode, resNode : TDOMElement;
unitExternalName, baseUnitExternalName : string;
begin
inherited;
typItm := ASymbol as TPasAliasType;
if Assigned(typItm) then begin
unitExternalName := GetTypeNameSpace(AContainer,ASymbol);
if FindAttributeByValueInNode(unitExternalName,ADocument.DocumentElement,ns_shortName) then begin
ns_shortName := Copy(ns_shortName,Length(s_xmlns+':')+1,MaxInt);
end else begin
ns_shortName := Format('ns%d',[GetNodeListCount(ADocument.DocumentElement.Attributes)]) ;
ADocument.DocumentElement.SetAttribute(Format('%s:%s',[s_xmlns,ns_shortName]),unitExternalName);
end;
defSchemaNode := GetSchemaNode(ADocument) as TDOMElement;
s := Format('%s:%s',[s_xs_short,s_element]);
resNode := CreateElement(s,defSchemaNode,ADocument);
resNode.SetAttribute(s_name, AContainer.GetExternalName(typItm)) ;
baseUnitExternalName := GetTypeNameSpace(AContainer,typItm.DestType);
s := GetNameSpaceShortName(baseUnitExternalName,ADocument);
s := Format('%s:%s',[s,AContainer.GetExternalName(typItm.DestType)]);
resNode.SetAttribute(s_type,s) ;
end;
end;
class function TTypeAliasDefinition_TypeHandler.CanHandle(ASymbol: TObject): Boolean;
begin
Result := Assigned(ASymbol) and ASymbol.InheritsFrom(TPasAliasType);
end;
{ TEnumTypeHandler }
procedure TEnumTypeHandler.Generate(
AContainer : TwstPasTreeContainer;
const ASymbol : TPasElement;
ADocument : TDOMDocument
);
var
typItm : TPasEnumType;
ns_shortName, s : string;
defSchemaNode, resNode, restrictNode : TDOMElement;
i, c : Integer;
unitExternalName : string;
begin
typItm := ASymbol as TPasEnumType;
if Assigned(typItm) then begin
unitExternalName := GetTypeNameSpace(AContainer,ASymbol);
if FindAttributeByValueInNode(unitExternalName,ADocument.DocumentElement,ns_shortName) then begin
ns_shortName := Copy(ns_shortName,Length(s_xmlns+':')+1,MaxInt);
end else begin
ns_shortName := Format('ns%d',[GetNodeListCount(ADocument.DocumentElement.Attributes)]) ;
ADocument.DocumentElement.SetAttribute(Format('%s:%s',[s_xmlns,ns_shortName]),unitExternalName);
end;
defSchemaNode := GetSchemaNode(ADocument) as TDOMElement;
s := Format('%s:%s',[s_xs_short,s_simpleType]);
resNode := CreateElement(s,defSchemaNode,ADocument);
resNode.SetAttribute(s_name, AContainer.GetExternalName(typItm)) ;
s := Format('%s:%s',[s_xs_short,s_restriction]);
restrictNode := CreateElement(s,resNode,ADocument);
restrictNode.SetAttribute(s_base,Format('%s:%s',[s_xs_short,'string'])) ;
c := typItm.Values.Count;
for i := 0 to pred(c) do begin
s := Format('%s:%s',[s_xs_short,s_enumeration]);
CreateElement(s,restrictNode,ADocument).SetAttribute(
s_value,
AContainer.GetExternalName(TPasEnumValue(typItm.Values[i]))
);
end;
end;
end;
class function TEnumTypeHandler.CanHandle(ASymbol: TObject): Boolean;
begin
Result := inherited CanHandle(ASymbol) and ASymbol.InheritsFrom(TPasEnumType);
end;
{ TClassTypeDefinition_TypeHandler }
type TTypeCategory = ( tcComplexContent, tcSimpleContent );
procedure TClassTypeDefinition_TypeHandler.Generate(
AContainer : TwstPasTreeContainer;
const ASymbol : TPasElement;
ADocument : TDOMDocument
);
var
cplxNode : TDOMElement;
typItm : TPasClassType;
propTypItm : TPasType;
s, prop_ns_shortName : string;
defSchemaNode, sqcNode, propNode, derivationNode : TDOMElement;
i : Integer;
p : TPasProperty;
typeCategory : TTypeCategory;
hasSequence : Boolean;
trueParent : TPasType;
begin
inherited;
typItm := ASymbol as TPasClassType;
if Assigned(typItm) then begin
GetNameSpaceShortName(AContainer.GetExternalName(AContainer.CurrentModule) ,ADocument);
defSchemaNode := GetSchemaNode(ADocument) as TDOMElement;
s := Format('%s:%s',[s_xs_short,s_complexType]);
cplxNode := CreateElement(s,defSchemaNode,ADocument);
cplxNode.SetAttribute(s_name, AContainer.GetExternalName(typItm)) ;
typeCategory := tcComplexContent;
derivationNode := nil;
hasSequence := True;
if Assigned(typItm.AncestorType) then begin
trueParent := typItm.AncestorType;
if trueParent.InheritsFrom(TPasNativeClassType) and AnsiSameText('THeaderBlock',trueParent.Name) then begin
cplxNode.SetAttribute(s_WST_headerBlock,'true');
end;
if trueParent.InheritsFrom(TPasAliasType) then begin
trueParent := GetUltimeType(trueParent);
end;
if trueParent.InheritsFrom(TPasNativeSimpleContentClassType) or
trueParent.InheritsFrom(TPasNativeSimpleType)
then begin
typeCategory := tcSimpleContent;
derivationNode := CreateElement(Format('%s:%s',[s_xs_short,s_extension]),cplxNode,ADocument);
s := Trim(GetNameSpaceShortName(GetTypeNameSpace(AContainer,trueParent),ADocument));
if ( Length(s) > 0 ) then begin
s := s + ':';
end;
s := s + AContainer.GetExternalName(trueParent);
derivationNode.SetAttribute(s_base,s);
hasSequence := False;
end;
end;
for i := 0 to Pred(typItm.Members.Count) do begin
if TPasElement(typItm.Members[i]).InheritsFrom(TPasProperty) then begin
p := TPasProperty(typItm.Members[i]);
if not AContainer.IsAttributeProperty(p) then begin
if ( typeCategory = tcSimpleContent ) then begin
raise EXsdGeneratorException.CreateFmt('Invalid type definition, a simple type cannot have "not attribute" properties : "%s"',[AContainer.GetExternalName(ASymbol)]);
end;
end;
hasSequence := True;
end;
end;
if hasSequence then begin
s := Format('%s:%s',[s_xs_short,s_sequence]);
if Assigned(derivationNode) then begin
sqcNode := CreateElement(s,derivationNode,ADocument);
end else begin
sqcNode := CreateElement(s,cplxNode,ADocument);
end;
end else begin
sqcNode := nil;
end;
for i := 0 to Pred(typItm.Members.Count) do begin
if TPasElement(typItm.Members[i]).InheritsFrom(TPasProperty) then begin
p := TPasProperty(typItm.Members[i]);
if AnsiSameText('Has',Copy(p.StoredAccessorName,1,3)) or AnsiSameText('True',p.StoredAccessorName) then begin
if AContainer.IsAttributeProperty(p) then begin
s := Format('%s:%s',[s_xs_short,s_attribute]);
if Assigned(derivationNode) then
propNode := CreateElement(s,derivationNode,ADocument)
else
propNode := CreateElement(s,cplxNode,ADocument);
end else begin
s := Format('%s:%s',[s_xs_short,s_element]);
propNode := CreateElement(s,sqcNode,ADocument);
end;
propNode.SetAttribute(s_name,AContainer.GetExternalName(p));
propTypItm := p.VarType;
if Assigned(propTypItm) then begin
prop_ns_shortName := GetNameSpaceShortName(GetTypeNameSpace(AContainer,propTypItm),ADocument);
propNode.SetAttribute(s_type,Format('%s:%s',[prop_ns_shortName,AContainer.GetExternalName(propTypItm)]));
if AContainer.IsAttributeProperty(p) then begin
if AnsiSameText('Has',Copy(p.StoredAccessorName,1,3)) then
propNode.SetAttribute(s_use,'optional')
else
propNode.SetAttribute(s_use,'required');
end else begin
if AnsiSameText('Has',Copy(p.StoredAccessorName,1,3)) then
propNode.SetAttribute(s_minOccurs,'0')
else
propNode.SetAttribute(s_minOccurs,'1');
propNode.SetAttribute(s_maxOccurs,'1');
end;
end;
end;
end;
end;
end;
end;
class function TClassTypeDefinition_TypeHandler.CanHandle(ASymbol: TObject): Boolean;
begin
Result := inherited CanHandle(ASymbol) and
( ASymbol.InheritsFrom(TPasClassType) and ( TPasClassType(ASymbol).ObjKind = okClass ));
end;
{ TPasRecordType_TypeHandler }
procedure TPasRecordType_TypeHandler.Generate(
AContainer : TwstPasTreeContainer;
const ASymbol : TPasElement;
ADocument : TDOMDocument
);
var
cplxNode : TDOMElement;
typItm : TPasRecordType;
propTypItm : TPasType;
s, prop_ns_shortName : string;
defSchemaNode, sqcNode, propNode : TDOMElement;
i : Integer;
p : TPasVariable;
hasSequence : Boolean;
storeOption : string;
begin
inherited;
typItm := ASymbol as TPasRecordType;
if Assigned(typItm) then begin
GetNameSpaceShortName(AContainer.GetExternalName(AContainer.CurrentModule) ,ADocument);
defSchemaNode := GetSchemaNode(ADocument) as TDOMElement;
s := Format('%s:%s',[s_xs_short,s_complexType]);
cplxNode := CreateElement(s,defSchemaNode,ADocument);
cplxNode.SetAttribute(s_name, AContainer.GetExternalName(typItm)) ;
cplxNode.SetAttribute(s_WST_record,'true');
hasSequence := False;
for i := 0 to Pred(typItm.Members.Count) do begin
if TPasElement(typItm.Members[i]).InheritsFrom(TPasVariable) then begin
p := TPasVariable(typItm.Members[i]);
if not AContainer.IsAttributeProperty(p) then begin
hasSequence := True;
Break;
end;
end;
end;
if hasSequence then begin
s := Format('%s:%s',[s_xs_short,s_sequence]);
sqcNode := CreateElement(s,cplxNode,ADocument);
end else begin
sqcNode := nil;
end;
for i := 0 to Pred(typItm.Members.Count) do begin
if TPasElement(typItm.Members[i]).InheritsFrom(TPasVariable) then begin
p := TPasVariable(typItm.Members[i]);
if AContainer.IsAttributeProperty(p) then begin
s := Format('%s:%s',[s_xs_short,s_attribute]);
propNode := CreateElement(s,cplxNode,ADocument);
end else begin
s := Format('%s:%s',[s_xs_short,s_element]);
propNode := CreateElement(s,sqcNode,ADocument);
end;
propNode.SetAttribute(s_name,AContainer.GetExternalName(p));
propTypItm := p.VarType;
if Assigned(propTypItm) then begin
prop_ns_shortName := GetNameSpaceShortName(GetTypeNameSpace(AContainer,propTypItm),ADocument);
propNode.SetAttribute(s_type,Format('%s:%s',[prop_ns_shortName,AContainer.GetExternalName(propTypItm)]));
storeOption := Trim(AContainer.Properties.GetValue(p,s_WST_storeType));
if AContainer.IsAttributeProperty(p) then begin
if ( Length(storeOption) > 0 ) then begin
case AnsiIndexText(storeOption,[s_required,s_optional,s_prohibited]) of
0 : propNode.SetAttribute(s_use,storeOption);
1 : ;
2 : propNode.SetAttribute(s_use,storeOption);
else
raise EXsdGeneratorException.CreateFmt('Invalid attribute "%s" value : "%s".',[s_use,storeOption]);
end;
end;
end else begin
case AnsiIndexText(storeOption,[s_required,s_optional,s_prohibited]) of
0 : ;//propNode.SetAttribute(s_minOccurs,'1');
1 : propNode.SetAttribute(s_minOccurs,'0');
end;
//propNode.SetAttribute(s_maxOccurs,'1');
end;
end;
end;
end;
end;
end;
class function TPasRecordType_TypeHandler.CanHandle(ASymbol : TObject) : Boolean;
begin
Result := inherited CanHandle(ASymbol) and ASymbol.InheritsFrom(TPasRecordType);
end;
{ TBaseArrayRemotable_TypeHandler }
procedure TBaseArrayRemotable_TypeHandler.Generate(
AContainer : TwstPasTreeContainer;
const ASymbol : TPasElement;
ADocument : TDOMDocument
);
function GetNameSpaceShortName(const ANameSpace : string):string;//inline;
begin
if FindAttributeByValueInNode(ANameSpace,ADocument.DocumentElement,Result,0,s_xmlns) then begin
Result := Copy(Result,Length(s_xmlns+':')+1,MaxInt);
end else begin
Result := Format('ns%d',[GetNodeListCount(ADocument.DocumentElement.Attributes)]) ;
ADocument.DocumentElement.SetAttribute(Format('%s:%s',[s_xmlns,Result]),ANameSpace);
end;
end;
var
typItm : TPasArrayType;
propTypItm : TPasType;
s, prop_ns_shortName : string;
defSchemaNode, cplxNode, sqcNode, propNode : TDOMElement;
unitExternalName : string;
begin
inherited;
typItm := ASymbol as TPasArrayType;
if not Assigned(typItm) then
Exit;
if Assigned(typItm) then begin
unitExternalName := GetTypeNameSpace(AContainer,typItm);
GetNameSpaceShortName(unitExternalName);
defSchemaNode := GetSchemaNode(ADocument) as TDOMElement;
s := Format('%s:%s',[s_xs_short,s_complexType]);
cplxNode := CreateElement(s,defSchemaNode,ADocument);
cplxNode.SetAttribute(s_name, AContainer.GetExternalName(typItm)) ;
s := Format('%s:%s',[s_xs_short,s_sequence]);
sqcNode := CreateElement(s,cplxNode,ADocument);
propTypItm := typItm.ElType;
s := Format('%s:%s',[s_xs_short,s_element]);
propNode := CreateElement(s,sqcNode,ADocument);
propNode.SetAttribute(s_name,s_item);
if Assigned(propTypItm) then begin
prop_ns_shortName := GetNameSpaceShortName(GetTypeNameSpace(AContainer,propTypItm));// AContainer.GetExternalName(propTypItm.Parent.Parent));
propNode.SetAttribute(s_type,Format('%s:%s',[prop_ns_shortName,AContainer.GetExternalName(propTypItm)]));
propNode.SetAttribute(s_minOccurs,'0');
propNode.SetAttribute(s_maxOccurs,s_unbounded);
end;
end;
end;
class function TBaseArrayRemotable_TypeHandler.CanHandle(ASymbol: TObject): Boolean;
begin
Result := inherited CanHandle(ASymbol) and ASymbol.InheritsFrom(TPasArrayType);
end;
{ TCustomXsdGenerator }
procedure TCustomXsdGenerator.Execute(
ASymTable : TwstPasTreeContainer;
AModuleName : string
);
var
j, k : Integer;
tri : TPasElement;
g : IXsdTypeHandler;
gr : IXsdTypeHandlerRegistry;
typeList : TList;
mdl : TPasModule;
begin
if ( ASymTable = nil ) then
raise EXsdGeneratorException.Create('Invalid symbol table.');
mdl := ASymTable.FindModule(AModuleName);
if ( mdl = nil ) then
raise EXsdGeneratorException.CreateFmt('Unable to find module : "%s".',[AModuleName]);
Prepare(ASymTable,mdl);
gr := GetXsdTypeHandlerRegistry();
typeList := mdl.InterfaceSection.Declarations;
k := typeList.Count;
for j := 0 to Pred(k) do begin
tri := TPasElement(typeList[j]);
if tri.InheritsFrom(TPasType) and
( not tri.InheritsFrom(TPasNativeClassType) ) and
( not tri.InheritsFrom(TPasNativeSimpleType) )
then begin
if gr.Find(tri,Self,g) then
g.Generate(ASymTable,tri,Self.Document);
end;
end;
end;
procedure TCustomXsdGenerator.Prepare(ASymTable : TwstPasTreeContainer; AModule : TPasModule);
begin
end;
constructor TCustomXsdGenerator.Create(ADocument : TDOMDocument);
begin
if ( ADocument = nil ) then
raise EXsdGeneratorException.Create('Invalid document.');
FDocument := ADocument;
end;
{ TXsdGenerator }
function TXsdGenerator.GetSchemaNode(ADocument : TDOMDocument) : TDOMNode;
begin
Result := FSchemaNode;
end;
procedure TXsdGenerator.Prepare(ASymTable : TwstPasTreeContainer; AModule : TPasModule);
var
unitExternalName : string;
begin
inherited Prepare(ASymTable, AModule);
unitExternalName := ASymTable.GetExternalName(AModule);
FSchemaNode := CreateElement(s_schema,Document,Document);
FSchemaNode.SetAttribute(s_targetNamespace,unitExternalName);
FSchemaNode.SetAttribute(Format('%s:%s',[s_xmlns,s_xs_short]),s_xs);
FSchemaNode.SetAttribute(Format('%s:%s',[s_xmlns,s_tns]),unitExternalName);
end;
initialization
XsdTypeHandlerRegistryInst := TXsdTypeHandlerRegistry.Create() as IXsdTypeHandlerRegistry;
RegisterFondamentalTypes();
finalization
XsdTypeHandlerRegistryInst := nil;
end.

View File

@ -120,7 +120,7 @@ type
end; end;
implementation implementation
uses ws_parser_imp, dom_cursors, parserutils, StrUtils uses ws_parser_imp, dom_cursors, parserutils, StrUtils, xsd_consts
{$IFDEF FPC} {$IFDEF FPC}
,wst_fpc_xml ,wst_fpc_xml
{$ENDIF} {$ENDIF}