You've already forked lazarus-ccr
defaultElementForm, defaultAttributeForm : XSD generation.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4231 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<schema
|
||||||
|
xmlns:tns="default_attribute_qualified"
|
||||||
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
targetNamespace="default_attribute_qualified"
|
||||||
|
attributeFormDefault="qualified"
|
||||||
|
/>
|
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<schema
|
||||||
|
xmlns:tns="default_attribute_unqualified"
|
||||||
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
targetNamespace="default_attribute_unqualified"
|
||||||
|
attributeFormDefault="unqualified"
|
||||||
|
/>
|
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<schema
|
||||||
|
xmlns:tns="default_element_qualified"
|
||||||
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
targetNamespace="default_element_qualified"
|
||||||
|
elementFormDefault="qualified"
|
||||||
|
/>
|
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<schema
|
||||||
|
xmlns:tns="default_element_unqualified"
|
||||||
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
targetNamespace="default_element_unqualified"
|
||||||
|
elementFormDefault="unqualified"
|
||||||
|
/>
|
@ -54,6 +54,11 @@ type
|
|||||||
procedure type_alias_widestring();
|
procedure type_alias_widestring();
|
||||||
procedure type_hint_array_item();
|
procedure type_hint_array_item();
|
||||||
procedure type_hint_record_item();
|
procedure type_hint_record_item();
|
||||||
|
|
||||||
|
procedure default_element_qualified();
|
||||||
|
procedure default_element_unqualified();
|
||||||
|
procedure default_attribute_qualified();
|
||||||
|
procedure default_attribute_unqualified();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TTest_XsdGenerator = class(TTest_CustomXsdGenerator)
|
TTest_XsdGenerator = class(TTest_CustomXsdGenerator)
|
||||||
@ -1014,6 +1019,138 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTest_CustomXsdGenerator.default_element_qualified();
|
||||||
|
const MODULE_NAME = 'default_element_qualified';
|
||||||
|
var
|
||||||
|
tr : TwstPasTreeContainer;
|
||||||
|
mdl : TPasModule;
|
||||||
|
g : IGenerator;
|
||||||
|
locDoc, locExistDoc : TXMLDocument;
|
||||||
|
fileName : string;
|
||||||
|
begin
|
||||||
|
locDoc := nil;
|
||||||
|
locExistDoc := nil;
|
||||||
|
tr := TwstPasTreeContainer.Create();
|
||||||
|
try
|
||||||
|
CreateWstInterfaceSymbolTable(tr);
|
||||||
|
mdl := TPasModule(tr.CreateElement(TPasModule,MODULE_NAME,tr.Package,visDefault,'',0));
|
||||||
|
tr.Package.Modules.Add(mdl);
|
||||||
|
mdl.InterfaceSection := TInterfaceSection(tr.CreateElement(TInterfaceSection,'',mdl,visDefault,'',0));
|
||||||
|
tr.Properties.SetValue(mdl,s_elementFormDefault,s_qualified);
|
||||||
|
|
||||||
|
locDoc := CreateDoc();
|
||||||
|
g := CreateGenerator(locDoc);
|
||||||
|
g.Execute(tr,mdl.Name);
|
||||||
|
fileName := MODULE_NAME + '.xsd';
|
||||||
|
//WriteXMLFile(locDoc,'.\'+fileName);
|
||||||
|
locExistDoc := LoadXmlFromFilesList(fileName);
|
||||||
|
Check(CompareNodes(locExistDoc.DocumentElement,locDoc.DocumentElement),'generated document differs from the existent one.');
|
||||||
|
finally
|
||||||
|
ReleaseDomNode(locExistDoc);
|
||||||
|
ReleaseDomNode(locDoc);
|
||||||
|
FreeAndNil(tr);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTest_CustomXsdGenerator.default_element_unqualified();
|
||||||
|
const MODULE_NAME = 'default_element_unqualified';
|
||||||
|
var
|
||||||
|
tr : TwstPasTreeContainer;
|
||||||
|
mdl : TPasModule;
|
||||||
|
g : IGenerator;
|
||||||
|
locDoc, locExistDoc : TXMLDocument;
|
||||||
|
fileName : string;
|
||||||
|
begin
|
||||||
|
locDoc := nil;
|
||||||
|
locExistDoc := nil;
|
||||||
|
tr := TwstPasTreeContainer.Create();
|
||||||
|
try
|
||||||
|
CreateWstInterfaceSymbolTable(tr);
|
||||||
|
mdl := TPasModule(tr.CreateElement(TPasModule,MODULE_NAME,tr.Package,visDefault,'',0));
|
||||||
|
tr.Package.Modules.Add(mdl);
|
||||||
|
mdl.InterfaceSection := TInterfaceSection(tr.CreateElement(TInterfaceSection,'',mdl,visDefault,'',0));
|
||||||
|
tr.Properties.SetValue(mdl,s_elementFormDefault,s_unqualified);
|
||||||
|
|
||||||
|
locDoc := CreateDoc();
|
||||||
|
g := CreateGenerator(locDoc);
|
||||||
|
g.Execute(tr,mdl.Name);
|
||||||
|
fileName := MODULE_NAME + '.xsd';
|
||||||
|
WriteXMLFile(locDoc,'.\'+fileName);
|
||||||
|
locExistDoc := LoadXmlFromFilesList(fileName);
|
||||||
|
Check(CompareNodes(locExistDoc.DocumentElement,locDoc.DocumentElement),'generated document differs from the existent one.');
|
||||||
|
finally
|
||||||
|
ReleaseDomNode(locExistDoc);
|
||||||
|
ReleaseDomNode(locDoc);
|
||||||
|
FreeAndNil(tr);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTest_CustomXsdGenerator.default_attribute_qualified();
|
||||||
|
const MODULE_NAME = 'default_attribute_qualified';
|
||||||
|
var
|
||||||
|
tr : TwstPasTreeContainer;
|
||||||
|
mdl : TPasModule;
|
||||||
|
g : IGenerator;
|
||||||
|
locDoc, locExistDoc : TXMLDocument;
|
||||||
|
fileName : string;
|
||||||
|
begin
|
||||||
|
locDoc := nil;
|
||||||
|
locExistDoc := nil;
|
||||||
|
tr := TwstPasTreeContainer.Create();
|
||||||
|
try
|
||||||
|
CreateWstInterfaceSymbolTable(tr);
|
||||||
|
mdl := TPasModule(tr.CreateElement(TPasModule,MODULE_NAME,tr.Package,visDefault,'',0));
|
||||||
|
tr.Package.Modules.Add(mdl);
|
||||||
|
mdl.InterfaceSection := TInterfaceSection(tr.CreateElement(TInterfaceSection,'',mdl,visDefault,'',0));
|
||||||
|
tr.Properties.SetValue(mdl,s_attributeFormDefault,s_qualified);
|
||||||
|
|
||||||
|
locDoc := CreateDoc();
|
||||||
|
g := CreateGenerator(locDoc);
|
||||||
|
g.Execute(tr,mdl.Name);
|
||||||
|
fileName := MODULE_NAME + '.xsd';
|
||||||
|
//WriteXMLFile(locDoc,'.\'+fileName);
|
||||||
|
locExistDoc := LoadXmlFromFilesList(fileName);
|
||||||
|
Check(CompareNodes(locExistDoc.DocumentElement,locDoc.DocumentElement),'generated document differs from the existent one.');
|
||||||
|
finally
|
||||||
|
ReleaseDomNode(locExistDoc);
|
||||||
|
ReleaseDomNode(locDoc);
|
||||||
|
FreeAndNil(tr);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTest_CustomXsdGenerator.default_attribute_unqualified();
|
||||||
|
const MODULE_NAME = 'default_attribute_unqualified';
|
||||||
|
var
|
||||||
|
tr : TwstPasTreeContainer;
|
||||||
|
mdl : TPasModule;
|
||||||
|
g : IGenerator;
|
||||||
|
locDoc, locExistDoc : TXMLDocument;
|
||||||
|
fileName : string;
|
||||||
|
begin
|
||||||
|
locDoc := nil;
|
||||||
|
locExistDoc := nil;
|
||||||
|
tr := TwstPasTreeContainer.Create();
|
||||||
|
try
|
||||||
|
CreateWstInterfaceSymbolTable(tr);
|
||||||
|
mdl := TPasModule(tr.CreateElement(TPasModule,MODULE_NAME,tr.Package,visDefault,'',0));
|
||||||
|
tr.Package.Modules.Add(mdl);
|
||||||
|
mdl.InterfaceSection := TInterfaceSection(tr.CreateElement(TInterfaceSection,'',mdl,visDefault,'',0));
|
||||||
|
tr.Properties.SetValue(mdl,s_attributeFormDefault,s_unqualified);
|
||||||
|
|
||||||
|
locDoc := CreateDoc();
|
||||||
|
g := CreateGenerator(locDoc);
|
||||||
|
g.Execute(tr,mdl.Name);
|
||||||
|
fileName := MODULE_NAME + '.xsd';
|
||||||
|
WriteXMLFile(locDoc,'.\'+fileName);
|
||||||
|
locExistDoc := LoadXmlFromFilesList(fileName);
|
||||||
|
Check(CompareNodes(locExistDoc.DocumentElement,locDoc.DocumentElement),'generated document differs from the existent one.');
|
||||||
|
finally
|
||||||
|
ReleaseDomNode(locExistDoc);
|
||||||
|
ReleaseDomNode(locDoc);
|
||||||
|
FreeAndNil(tr);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
function TTest_CustomXsdGenerator.LoadXmlFromFilesList(const AFileName: string): TXMLDocument;
|
function TTest_CustomXsdGenerator.LoadXmlFromFilesList(const AFileName: string): TXMLDocument;
|
||||||
begin
|
begin
|
||||||
ReadXMLFile(Result,wstExpandLocalFileName(TestFilesPath + AFileName));
|
ReadXMLFile(Result,wstExpandLocalFileName(TestFilesPath + AFileName));
|
||||||
|
@ -117,6 +117,10 @@ type
|
|||||||
ASymTable : TwstPasTreeContainer;
|
ASymTable : TwstPasTreeContainer;
|
||||||
AModule : TPasModule
|
AModule : TPasModule
|
||||||
);virtual;
|
);virtual;
|
||||||
|
procedure GenerateModuleOptions(
|
||||||
|
ASymTable : TwstPasTreeContainer;
|
||||||
|
AModule : TPasModule
|
||||||
|
);virtual;
|
||||||
property Document : TDOMDocument read FDocument;
|
property Document : TDOMDocument read FDocument;
|
||||||
property Options : TGeneratorOptions read FOptions;
|
property Options : TGeneratorOptions read FOptions;
|
||||||
public
|
public
|
||||||
@ -1373,6 +1377,7 @@ begin
|
|||||||
raise EXsdGeneratorException.CreateFmt('Unable to find module : "%s".',[AModuleName]);
|
raise EXsdGeneratorException.CreateFmt('Unable to find module : "%s".',[AModuleName]);
|
||||||
Prepare(ASymTable,mdl);
|
Prepare(ASymTable,mdl);
|
||||||
GenerateImports(ASymTable,mdl);
|
GenerateImports(ASymTable,mdl);
|
||||||
|
GenerateModuleOptions(ASymTable,mdl);
|
||||||
gr := GetXsdTypeHandlerRegistry();
|
gr := GetXsdTypeHandlerRegistry();
|
||||||
typeList := mdl.InterfaceSection.Declarations;
|
typeList := mdl.InterfaceSection.Declarations;
|
||||||
k := typeList.Count;
|
k := typeList.Count;
|
||||||
@ -1419,6 +1424,30 @@ begin
|
|||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCustomXsdGenerator.GenerateModuleOptions(
|
||||||
|
ASymTable : TwstPasTreeContainer;
|
||||||
|
AModule : TPasModule
|
||||||
|
);
|
||||||
|
var
|
||||||
|
s : string;
|
||||||
|
locSchemaNode : TDOMElement;
|
||||||
|
begin
|
||||||
|
if ASymTable.Properties.HasValue(AModule,s_elementFormDefault) then begin
|
||||||
|
s := Trim(ASymTable.Properties.GetValue(AModule,s_elementFormDefault));
|
||||||
|
if (s <> '') then begin
|
||||||
|
locSchemaNode := GetSchemaNode(FDocument) as TDOMElement;
|
||||||
|
locSchemaNode.SetAttribute(s_elementFormDefault,s);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
if ASymTable.Properties.HasValue(AModule,s_attributeFormDefault) then begin
|
||||||
|
s := Trim(ASymTable.Properties.GetValue(AModule,s_attributeFormDefault));
|
||||||
|
if (s <> '') then begin
|
||||||
|
locSchemaNode := GetSchemaNode(FDocument) as TDOMElement;
|
||||||
|
locSchemaNode.SetAttribute(s_attributeFormDefault,s);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
constructor TCustomXsdGenerator.Create(const ADocument : TDOMDocument);
|
constructor TCustomXsdGenerator.Create(const ADocument : TDOMDocument);
|
||||||
begin
|
begin
|
||||||
Create(ADocument,[]);
|
Create(ADocument,[]);
|
||||||
|
Reference in New Issue
Block a user