aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/WixToolset.Core/Compiler.cs67
-rw-r--r--src/WixToolset.Core/Compiler_2.cs3
-rw-r--r--src/WixToolset.Core/Compiler_Bundle.cs8
-rw-r--r--src/WixToolset.Core/Compiler_Module.cs3
4 files changed, 74 insertions, 7 deletions
diff --git a/src/WixToolset.Core/Compiler.cs b/src/WixToolset.Core/Compiler.cs
index 020e35fe..3fa06f9c 100644
--- a/src/WixToolset.Core/Compiler.cs
+++ b/src/WixToolset.Core/Compiler.cs
@@ -3612,6 +3612,7 @@ namespace WixToolset.Core
3612 string tableId = null; 3612 string tableId = null;
3613 var unreal = false; 3613 var unreal = false;
3614 var columns = new List<WixCustomTableColumnSymbol>(); 3614 var columns = new List<WixCustomTableColumnSymbol>();
3615 var foundColumns = false;
3615 3616
3616 foreach (var attrib in node.Attributes()) 3617 foreach (var attrib in node.Attributes())
3617 { 3618 {
@@ -3653,6 +3654,8 @@ namespace WixToolset.Core
3653 switch (child.Name.LocalName) 3654 switch (child.Name.LocalName)
3654 { 3655 {
3655 case "Column": 3656 case "Column":
3657 foundColumns = true;
3658
3656 var column = this.ParseColumnElement(child, childSourceLineNumbers, tableId); 3659 var column = this.ParseColumnElement(child, childSourceLineNumbers, tableId);
3657 if (column != null) 3660 if (column != null)
3658 { 3661 {
@@ -3690,6 +3693,67 @@ namespace WixToolset.Core
3690 Unreal = unreal, 3693 Unreal = unreal,
3691 }); 3694 });
3692 } 3695 }
3696 else if (!foundColumns)
3697 {
3698 this.Core.Write(ErrorMessages.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "Column"));
3699 }
3700 }
3701 }
3702
3703 /// <summary>
3704 /// Parses a CustomTableRef element.
3705 /// </summary>
3706 /// <param name="node">Element to parse.</param>
3707 private void ParseCustomTableRefElement(XElement node)
3708 {
3709 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
3710 string tableId = null;
3711
3712 foreach (var attrib in node.Attributes())
3713 {
3714 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || CompilerCore.WixNamespace == attrib.Name.Namespace)
3715 {
3716 switch (attrib.Name.LocalName)
3717 {
3718 case "Id":
3719 tableId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
3720 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixCustomTable, tableId);
3721 break;
3722 default:
3723 this.Core.UnexpectedAttribute(node, attrib);
3724 break;
3725 }
3726 }
3727 else
3728 {
3729 this.Core.ParseExtensionAttribute(node, attrib);
3730 }
3731 }
3732
3733 if (null == tableId)
3734 {
3735 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
3736 }
3737
3738 foreach (var child in node.Elements())
3739 {
3740 if (CompilerCore.WixNamespace == child.Name.Namespace)
3741 {
3742 var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
3743 switch (child.Name.LocalName)
3744 {
3745 case "Row":
3746 this.ParseRowElement(child, childSourceLineNumbers, tableId);
3747 break;
3748 default:
3749 this.Core.UnexpectedElement(node, child);
3750 break;
3751 }
3752 }
3753 else
3754 {
3755 this.Core.ParseExtensionElement(node, child);
3756 }
3693 } 3757 }
3694 } 3758 }
3695 3759
@@ -6155,6 +6219,9 @@ namespace WixToolset.Core
6155 case "CustomTable": 6219 case "CustomTable":
6156 this.ParseCustomTableElement(child); 6220 this.ParseCustomTableElement(child);
6157 break; 6221 break;
6222 case "CustomTableRef":
6223 this.ParseCustomTableRefElement(child);
6224 break;
6158 case "Directory": 6225 case "Directory":
6159 this.ParseDirectoryElement(child, null, CompilerConstants.IntegerNotSet, String.Empty); 6226 this.ParseDirectoryElement(child, null, CompilerConstants.IntegerNotSet, String.Empty);
6160 break; 6227 break;
diff --git a/src/WixToolset.Core/Compiler_2.cs b/src/WixToolset.Core/Compiler_2.cs
index 29f240f4..11063bd8 100644
--- a/src/WixToolset.Core/Compiler_2.cs
+++ b/src/WixToolset.Core/Compiler_2.cs
@@ -195,6 +195,9 @@ namespace WixToolset.Core
195 case "CustomTable": 195 case "CustomTable":
196 this.ParseCustomTableElement(child); 196 this.ParseCustomTableElement(child);
197 break; 197 break;
198 case "CustomTableRef":
199 this.ParseCustomTableRefElement(child);
200 break;
198 case "Directory": 201 case "Directory":
199 this.ParseDirectoryElement(child, null, CompilerConstants.IntegerNotSet, String.Empty); 202 this.ParseDirectoryElement(child, null, CompilerConstants.IntegerNotSet, String.Empty);
200 break; 203 break;
diff --git a/src/WixToolset.Core/Compiler_Bundle.cs b/src/WixToolset.Core/Compiler_Bundle.cs
index 2089f037..7cdb8ca0 100644
--- a/src/WixToolset.Core/Compiler_Bundle.cs
+++ b/src/WixToolset.Core/Compiler_Bundle.cs
@@ -914,7 +914,6 @@ namespace WixToolset.Core
914 { 914 {
915 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 915 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
916 string customDataId = null; 916 string customDataId = null;
917 var foundChild = false;
918 917
919 foreach (var attrib in node.Attributes()) 918 foreach (var attrib in node.Attributes())
920 { 919 {
@@ -924,6 +923,7 @@ namespace WixToolset.Core
924 { 923 {
925 case "Id": 924 case "Id":
926 customDataId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 925 customDataId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
926 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixBundleCustomData, customDataId);
927 break; 927 break;
928 default: 928 default:
929 this.Core.UnexpectedAttribute(node, attrib); 929 this.Core.UnexpectedAttribute(node, attrib);
@@ -943,7 +943,6 @@ namespace WixToolset.Core
943 943
944 foreach (var child in node.Elements()) 944 foreach (var child in node.Elements())
945 { 945 {
946 foundChild = true;
947 if (CompilerCore.WixNamespace == child.Name.Namespace) 946 if (CompilerCore.WixNamespace == child.Name.Namespace)
948 { 947 {
949 var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); 948 var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
@@ -962,11 +961,6 @@ namespace WixToolset.Core
962 this.Core.ParseExtensionElement(node, child); 961 this.Core.ParseExtensionElement(node, child);
963 } 962 }
964 } 963 }
965
966 if (!foundChild)
967 {
968 this.Core.Write(ErrorMessages.ExpectedElement(sourceLineNumbers, node.Name.LocalName));
969 }
970 } 964 }
971 965
972 /// <summary> 966 /// <summary>
diff --git a/src/WixToolset.Core/Compiler_Module.cs b/src/WixToolset.Core/Compiler_Module.cs
index a7d94701..2ecd9113 100644
--- a/src/WixToolset.Core/Compiler_Module.cs
+++ b/src/WixToolset.Core/Compiler_Module.cs
@@ -141,6 +141,9 @@ namespace WixToolset.Core
141 case "CustomTable": 141 case "CustomTable":
142 this.ParseCustomTableElement(child); 142 this.ParseCustomTableElement(child);
143 break; 143 break;
144 case "CustomTableRef":
145 this.ParseCustomTableRefElement(child);
146 break;
144 case "Dependency": 147 case "Dependency":
145 this.ParseDependencyElement(child); 148 this.ParseDependencyElement(child);
146 break; 149 break;