diff --git a/wst/trunk/tests/test_suite/files/default_attribute_qualified.xsd b/wst/trunk/tests/test_suite/files/default_attribute_qualified.xsd
new file mode 100644
index 000000000..a2b5d4efa
--- /dev/null
+++ b/wst/trunk/tests/test_suite/files/default_attribute_qualified.xsd
@@ -0,0 +1,7 @@
+
+
diff --git a/wst/trunk/tests/test_suite/files/default_attribute_unqualified.xsd b/wst/trunk/tests/test_suite/files/default_attribute_unqualified.xsd
new file mode 100644
index 000000000..c5184b0a2
--- /dev/null
+++ b/wst/trunk/tests/test_suite/files/default_attribute_unqualified.xsd
@@ -0,0 +1,7 @@
+
+
diff --git a/wst/trunk/tests/test_suite/files/default_element_qualified.xsd b/wst/trunk/tests/test_suite/files/default_element_qualified.xsd
new file mode 100644
index 000000000..cc47b793d
--- /dev/null
+++ b/wst/trunk/tests/test_suite/files/default_element_qualified.xsd
@@ -0,0 +1,7 @@
+
+
diff --git a/wst/trunk/tests/test_suite/files/default_element_unqualified.xsd b/wst/trunk/tests/test_suite/files/default_element_unqualified.xsd
new file mode 100644
index 000000000..18ba650df
--- /dev/null
+++ b/wst/trunk/tests/test_suite/files/default_element_unqualified.xsd
@@ -0,0 +1,7 @@
+
+
diff --git a/wst/trunk/tests/test_suite/test_generators.pas b/wst/trunk/tests/test_suite/test_generators.pas
index a8daf393a..d63c8e5e1 100644
--- a/wst/trunk/tests/test_suite/test_generators.pas
+++ b/wst/trunk/tests/test_suite/test_generators.pas
@@ -54,6 +54,11 @@ type
procedure type_alias_widestring();
procedure type_hint_array_item();
procedure type_hint_record_item();
+
+ procedure default_element_qualified();
+ procedure default_element_unqualified();
+ procedure default_attribute_qualified();
+ procedure default_attribute_unqualified();
end;
TTest_XsdGenerator = class(TTest_CustomXsdGenerator)
@@ -1014,6 +1019,138 @@ begin
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;
begin
ReadXMLFile(Result,wstExpandLocalFileName(TestFilesPath + AFileName));
diff --git a/wst/trunk/ws_helper/xsd_generator.pas b/wst/trunk/ws_helper/xsd_generator.pas
index d793216ce..65247c377 100644
--- a/wst/trunk/ws_helper/xsd_generator.pas
+++ b/wst/trunk/ws_helper/xsd_generator.pas
@@ -117,6 +117,10 @@ type
ASymTable : TwstPasTreeContainer;
AModule : TPasModule
);virtual;
+ procedure GenerateModuleOptions(
+ ASymTable : TwstPasTreeContainer;
+ AModule : TPasModule
+ );virtual;
property Document : TDOMDocument read FDocument;
property Options : TGeneratorOptions read FOptions;
public
@@ -1373,6 +1377,7 @@ begin
raise EXsdGeneratorException.CreateFmt('Unable to find module : "%s".',[AModuleName]);
Prepare(ASymTable,mdl);
GenerateImports(ASymTable,mdl);
+ GenerateModuleOptions(ASymTable,mdl);
gr := GetXsdTypeHandlerRegistry();
typeList := mdl.InterfaceSection.Declarations;
k := typeList.Count;
@@ -1419,6 +1424,30 @@ begin
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);
begin
Create(ADocument,[]);