aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/WixToolset.Core/Common.cs6
-rw-r--r--src/WixToolset.Core/Compiler.cs188
-rw-r--r--src/WixToolset.Core/CompilerCore.cs20
-rw-r--r--src/WixToolset.Core/Compiler_2.cs113
-rw-r--r--src/WixToolset.Core/Compiler_Bundle.cs5
-rw-r--r--src/WixToolset.Core/Compiler_EmbeddedUI.cs6
-rw-r--r--src/WixToolset.Core/Compiler_UI.cs43
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/BundleCustomTable/BundleCustomTable.wxs24
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/CustomAction/UnscheduledCustomAction.wxs2
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/CustomTable/CustomTable.wxs16
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/CustomTable/CustomTableWithFile.wxs8
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/DialogsInInstallUISequence/PackageComponents.wxs15
12 files changed, 37 insertions, 409 deletions
diff --git a/src/WixToolset.Core/Common.cs b/src/WixToolset.Core/Common.cs
index e6f30e0c..183d7abd 100644
--- a/src/WixToolset.Core/Common.cs
+++ b/src/WixToolset.Core/Common.cs
@@ -690,10 +690,8 @@ namespace WixToolset.Core
690 /// <summary> 690 /// <summary>
691 /// Gets the text of an XElement. 691 /// Gets the text of an XElement.
692 /// </summary> 692 /// </summary>
693 /// <param name="sourceLineNumbers">Source line information about the owner element.</param> 693 /// <param name="node">Element to get text.</param>
694 /// <param name="attribute">The attribute containing the value to get.</param> 694 /// <returns>The element's text.</returns>
695 /// <param name="messageHandler">A delegate that receives error messages.</param>
696 /// <returns>The attribute's YesNoType value.</returns>
697 internal static string GetInnerText(XElement node) 695 internal static string GetInnerText(XElement node)
698 { 696 {
699 var text = node.Nodes().Where(n => XmlNodeType.Text == n.NodeType || XmlNodeType.CDATA == n.NodeType).Cast<XText>().FirstOrDefault(); 697 var text = node.Nodes().Where(n => XmlNodeType.Text == n.NodeType || XmlNodeType.CDATA == n.NodeType).Cast<XText>().FirstOrDefault();
diff --git a/src/WixToolset.Core/Compiler.cs b/src/WixToolset.Core/Compiler.cs
index 5bd923dd..28290569 100644
--- a/src/WixToolset.Core/Compiler.cs
+++ b/src/WixToolset.Core/Compiler.cs
@@ -2319,14 +2319,6 @@ namespace WixToolset.Core
2319 case "Class": 2319 case "Class":
2320 this.ParseClassElement(child, id.Id, YesNoType.NotSet, null, null, null, null); 2320 this.ParseClassElement(child, id.Id, YesNoType.NotSet, null, null, null, null);
2321 break; 2321 break;
2322 case "Condition":
2323 if (null != condition)
2324 {
2325 var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
2326 this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName));
2327 }
2328 condition = this.ParseConditionElement(child, node.Name.LocalName, null, null);
2329 break;
2330 case "CopyFile": 2322 case "CopyFile":
2331 this.ParseCopyFileElement(child, id.Id, null); 2323 this.ParseCopyFileElement(child, id.Id, null);
2332 break; 2324 break;
@@ -3382,17 +3374,12 @@ namespace WixToolset.Core
3382 win64 = true; 3374 win64 = true;
3383 } 3375 }
3384 3376
3385 // get the inner text if any exists
3386 var innerText = this.Core.GetTrimmedInnerText(node);
3387
3388 // if we have an in-lined Script CustomAction ensure no source or target attributes were provided 3377 // if we have an in-lined Script CustomAction ensure no source or target attributes were provided
3389 if (inlineScript) 3378 if (inlineScript)
3390 { 3379 {
3391 if (String.IsNullOrEmpty(scriptFile)) 3380 if (String.IsNullOrEmpty(scriptFile))
3392 { 3381 {
3393 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ScriptFile", "Script")); 3382 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ScriptFile", "Script"));
3394
3395 target = innerText;
3396 } 3383 }
3397 } 3384 }
3398 else if (CustomActionTargetType.VBScript == targetType) // non-inline vbscript 3385 else if (CustomActionTargetType.VBScript == targetType) // non-inline vbscript
@@ -3428,10 +3415,6 @@ namespace WixToolset.Core
3428 { 3415 {
3429 this.Core.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "Value", "Directory", "Property", "Error")); 3416 this.Core.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "Value", "Directory", "Property", "Error"));
3430 } 3417 }
3431 else if (!String.IsNullOrEmpty(innerText)) // inner text cannot be specified with non-script CAs
3432 {
3433 this.Core.Write(ErrorMessages.CustomActionIllegalInnerText(sourceLineNumbers, node.Name.LocalName, innerText, "Script"));
3434 }
3435 3418
3436 if (!inlineScript && !String.IsNullOrEmpty(scriptFile)) 3419 if (!inlineScript && !String.IsNullOrEmpty(scriptFile))
3437 { 3420 {
@@ -4053,11 +4036,6 @@ namespace WixToolset.Core
4053 this.Core.Write(ErrorMessages.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Column")); 4036 this.Core.Write(ErrorMessages.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Column"));
4054 } 4037 }
4055 4038
4056 if (String.IsNullOrEmpty(data))
4057 {
4058 data = Common.GetInnerText(child);
4059 }
4060
4061 if (!this.Core.EncounteredError) 4039 if (!this.Core.EncounteredError)
4062 { 4040 {
4063 this.Core.AddTuple(new WixCustomTableCellTuple(childSourceLineNumbers, new Identifier(AccessModifier.Private, tableId, rowId, columnName)) 4041 this.Core.AddTuple(new WixCustomTableCellTuple(childSourceLineNumbers, new Identifier(AccessModifier.Private, tableId, rowId, columnName))
@@ -4864,9 +4842,6 @@ namespace WixToolset.Core
4864 case "Component": 4842 case "Component":
4865 this.ParseComponentElement(child, ComplexReferenceParentType.Feature, id.Id, null, CompilerConstants.IntegerNotSet, null, null); 4843 this.ParseComponentElement(child, ComplexReferenceParentType.Feature, id.Id, null, CompilerConstants.IntegerNotSet, null, null);
4866 break; 4844 break;
4867 case "Condition":
4868 this.ParseConditionElement(child, node.Name.LocalName, id.Id, null);
4869 break;
4870 case "Feature": 4845 case "Feature":
4871 this.ParseFeatureElement(child, ComplexReferenceParentType.Feature, id.Id, ref childDisplay); 4846 this.ParseFeatureElement(child, ComplexReferenceParentType.Feature, id.Id, ref childDisplay);
4872 break; 4847 break;
@@ -5368,11 +5343,6 @@ namespace WixToolset.Core
5368 id = CompilerConstants.IllegalInteger; 5343 id = CompilerConstants.IllegalInteger;
5369 } 5344 }
5370 5345
5371 if (String.IsNullOrEmpty(message))
5372 {
5373 message = Common.GetInnerText(node);
5374 }
5375
5376 this.Core.ParseForExtensionElements(node); 5346 this.Core.ParseForExtensionElements(node);
5377 5347
5378 if (!this.Core.EncounteredError) 5348 if (!this.Core.EncounteredError)
@@ -6232,9 +6202,6 @@ namespace WixToolset.Core
6232 case "ComponentGroup": 6202 case "ComponentGroup":
6233 this.ParseComponentGroupElement(child, ComplexReferenceParentType.Unknown, id?.Id); 6203 this.ParseComponentGroupElement(child, ComplexReferenceParentType.Unknown, id?.Id);
6234 break; 6204 break;
6235 case "Condition":
6236 this.ParseConditionElement(child, node.Name.LocalName, null, null);
6237 break;
6238 case "Container": 6205 case "Container":
6239 this.ParseContainerElement(child); 6206 this.ParseContainerElement(child);
6240 break; 6207 break;
@@ -6419,161 +6386,6 @@ namespace WixToolset.Core
6419 } 6386 }
6420 6387
6421 /// <summary> 6388 /// <summary>
6422 /// Parses a condition element.
6423 /// </summary>
6424 /// <param name="node">Element to parse.</param>
6425 /// <param name="parentElementLocalName">LocalName of the parent element.</param>
6426 /// <param name="id">Id of the parent element.</param>
6427 /// <param name="dialog">Dialog of the parent element if its a Control.</param>
6428 /// <returns>The condition if one was found.</returns>
6429 private string ParseConditionElement(XElement node, string parentElementLocalName, string id, string dialog)
6430 {
6431 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
6432 string action = null;
6433 string condition = null;
6434 var level = CompilerConstants.IntegerNotSet;
6435 string message = null;
6436
6437 foreach (var attrib in node.Attributes())
6438 {
6439 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || CompilerCore.WixNamespace == attrib.Name.Namespace)
6440 {
6441 switch (attrib.Name.LocalName)
6442 {
6443 case "Action":
6444 if ("Control" == parentElementLocalName)
6445 {
6446 action = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
6447 switch (action)
6448 {
6449 case "default":
6450 action = "Default";
6451 break;
6452 case "disable":
6453 action = "Disable";
6454 break;
6455 case "enable":
6456 action = "Enable";
6457 break;
6458 case "hide":
6459 action = "Hide";
6460 break;
6461 case "show":
6462 action = "Show";
6463 break;
6464 case "":
6465 break;
6466 default:
6467 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, action, "default", "disable", "enable", "hide", "show"));
6468 break;
6469 }
6470 }
6471 else
6472 {
6473 this.Core.UnexpectedAttribute(node, attrib);
6474 }
6475 break;
6476 case "Level":
6477 if ("Feature" == parentElementLocalName)
6478 {
6479 level = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue);
6480 }
6481 else
6482 {
6483 this.Core.UnexpectedAttribute(node, attrib);
6484 }
6485 break;
6486 case "Message":
6487 if ("Fragment" == parentElementLocalName || "Product" == parentElementLocalName)
6488 {
6489 message = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
6490 }
6491 else
6492 {
6493 this.Core.UnexpectedAttribute(node, attrib);
6494 }
6495 break;
6496 default:
6497 this.Core.UnexpectedAttribute(node, attrib);
6498 break;
6499 }
6500 }
6501 else
6502 {
6503 this.Core.ParseExtensionAttribute(node, attrib);
6504 }
6505 }
6506
6507 // get the condition from the inner text of the element
6508 condition = this.Core.GetConditionInnerText(node);
6509
6510 this.Core.ParseForExtensionElements(node);
6511
6512 // the condition should not be empty
6513 if (null == condition || 0 == condition.Length)
6514 {
6515 condition = null;
6516 this.Core.Write(ErrorMessages.ConditionExpected(sourceLineNumbers, node.Name.LocalName));
6517 }
6518
6519 switch (parentElementLocalName)
6520 {
6521 case "Control":
6522 if (null == action)
6523 {
6524 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Action"));
6525 }
6526
6527 if (!this.Core.EncounteredError)
6528 {
6529 this.Core.AddTuple(new ControlConditionTuple(sourceLineNumbers)
6530 {
6531 DialogRef = dialog,
6532 ControlRef = id,
6533 Action = action,
6534 Condition = condition,
6535 });
6536 }
6537 break;
6538 case "Feature":
6539 if (CompilerConstants.IntegerNotSet == level)
6540 {
6541 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Level"));
6542 level = CompilerConstants.IllegalInteger;
6543 }
6544
6545 if (!this.Core.EncounteredError)
6546 {
6547 this.Core.AddTuple(new ConditionTuple(sourceLineNumbers)
6548 {
6549 FeatureRef = id,
6550 Level = level,
6551 Condition = condition
6552 });
6553 }
6554 break;
6555 case "Fragment":
6556 case "Product":
6557 if (null == message)
6558 {
6559 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Message"));
6560 }
6561
6562 if (!this.Core.EncounteredError)
6563 {
6564 this.Core.AddTuple(new LaunchConditionTuple(sourceLineNumbers)
6565 {
6566 Condition = condition,
6567 Description = message
6568 });
6569 }
6570 break;
6571 }
6572
6573 return condition;
6574 }
6575
6576 /// <summary>
6577 /// Parses a IniFile element. 6389 /// Parses a IniFile element.
6578 /// </summary> 6390 /// </summary>
6579 /// <param name="node">Element to parse.</param> 6391 /// <param name="node">Element to parse.</param>
diff --git a/src/WixToolset.Core/CompilerCore.cs b/src/WixToolset.Core/CompilerCore.cs
index 93f9276c..5d0edaf1 100644
--- a/src/WixToolset.Core/CompilerCore.cs
+++ b/src/WixToolset.Core/CompilerCore.cs
@@ -322,26 +322,6 @@ namespace WixToolset.Core
322 } 322 }
323 323
324 /// <summary> 324 /// <summary>
325 /// Get an element's inner text and trims any extra whitespace.
326 /// </summary>
327 /// <param name="element">The element with inner text to be trimmed.</param>
328 /// <returns>The node's inner text trimmed.</returns>
329 public string GetTrimmedInnerText(XElement element)
330 {
331 return this.parseHelper.GetTrimmedInnerText(element);
332 }
333
334 /// <summary>
335 /// Gets element's inner text and ensure's it is safe for use in a condition by trimming any extra whitespace.
336 /// </summary>
337 /// <param name="element">The element to ensure inner text is a condition.</param>
338 /// <returns>The value converted into a safe condition.</returns>
339 public string GetConditionInnerText(XElement element)
340 {
341 return this.parseHelper.GetConditionInnerText(element);
342 }
343
344 /// <summary>
345 /// Creates a version 3 name-based UUID. 325 /// Creates a version 3 name-based UUID.
346 /// </summary> 326 /// </summary>
347 /// <param name="namespaceGuid">The namespace UUID.</param> 327 /// <param name="namespaceGuid">The namespace UUID.</param>
diff --git a/src/WixToolset.Core/Compiler_2.cs b/src/WixToolset.Core/Compiler_2.cs
index df4c037d..18a0366e 100644
--- a/src/WixToolset.Core/Compiler_2.cs
+++ b/src/WixToolset.Core/Compiler_2.cs
@@ -186,9 +186,6 @@ namespace WixToolset.Core
186 case "ComponentGroup": 186 case "ComponentGroup":
187 this.ParseComponentGroupElement(child, ComplexReferenceParentType.Unknown, null); 187 this.ParseComponentGroupElement(child, ComplexReferenceParentType.Unknown, null);
188 break; 188 break;
189 case "Condition":
190 this.ParseConditionElement(child, node.Name.LocalName, null, null);
191 break;
192 case "CustomAction": 189 case "CustomAction":
193 this.ParseCustomActionElement(child); 190 this.ParseCustomActionElement(child);
194 break; 191 break;
@@ -228,6 +225,9 @@ namespace WixToolset.Core
228 case "InstanceTransforms": 225 case "InstanceTransforms":
229 this.ParseInstanceTransformsElement(child); 226 this.ParseInstanceTransformsElement(child);
230 break; 227 break;
228 case "Launch":
229 this.ParseLaunchElement(child);
230 break;
231 case "MajorUpgrade": 231 case "MajorUpgrade":
232 this.ParseMajorUpgradeElement(child, contextValues); 232 this.ParseMajorUpgradeElement(child, contextValues);
233 break; 233 break;
@@ -1235,31 +1235,7 @@ namespace WixToolset.Core
1235 id = this.Core.CreateIdentifier("pme", objectId, tableName, sddl); 1235 id = this.Core.CreateIdentifier("pme", objectId, tableName, sddl);
1236 } 1236 }
1237 1237
1238 foreach (var child in node.Elements()) 1238 this.Core.ParseForExtensionElements(node);
1239 {
1240 if (CompilerCore.WixNamespace == child.Name.Namespace)
1241 {
1242 switch (child.Name.LocalName)
1243 {
1244 case "Condition":
1245 if (null != condition)
1246 {
1247 var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
1248 this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName));
1249 }
1250
1251 condition = this.ParseConditionElement(child, node.Name.LocalName, null, null);
1252 break;
1253 default:
1254 this.Core.UnexpectedElement(node, child);
1255 break;
1256 }
1257 }
1258 else
1259 {
1260 this.Core.ParseExtensionElement(node, child);
1261 }
1262 }
1263 1239
1264 if (!this.Core.EncounteredError) 1240 if (!this.Core.EncounteredError)
1265 { 1241 {
@@ -1537,20 +1513,6 @@ namespace WixToolset.Core
1537 this.Core.Write(ErrorMessages.CannotAuthorSpecialProperties(sourceLineNumbers, id.Id)); 1513 this.Core.Write(ErrorMessages.CannotAuthorSpecialProperties(sourceLineNumbers, id.Id));
1538 } 1514 }
1539 1515
1540 var innerText = this.Core.GetTrimmedInnerText(node);
1541 if (null != value)
1542 {
1543 // cannot specify both the value attribute and inner text
1544 if (!String.IsNullOrEmpty(innerText))
1545 {
1546 this.Core.Write(ErrorMessages.IllegalAttributeWithInnerText(sourceLineNumbers, node.Name.LocalName, "Value"));
1547 }
1548 }
1549 else // value attribute not specified, use inner text if any.
1550 {
1551 value = innerText;
1552 }
1553
1554 if ("ErrorDialog" == id.Id) 1516 if ("ErrorDialog" == id.Id)
1555 { 1517 {
1556 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Dialog, value); 1518 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Dialog, value);
@@ -2092,11 +2054,6 @@ namespace WixToolset.Core
2092 2054
2093 if (multiStringValue == null) 2055 if (multiStringValue == null)
2094 { 2056 {
2095 multiStringValue = Common.GetInnerText(node);
2096 }
2097
2098 if (multiStringValue == null)
2099 {
2100 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 2057 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
2101 } 2058 }
2102 2059
@@ -2683,12 +2640,6 @@ namespace WixToolset.Core
2683 } 2640 }
2684 } 2641 }
2685 2642
2686 // Get the condition from the inner text of the element.
2687 if (condition == null)
2688 {
2689 condition = this.Core.GetConditionInnerText(child);
2690 }
2691
2692 if (customAction && "Custom" == actionName) 2643 if (customAction && "Custom" == actionName)
2693 { 2644 {
2694 this.Core.Write(ErrorMessages.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Action")); 2645 this.Core.Write(ErrorMessages.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Action"));
@@ -3154,11 +3105,6 @@ namespace WixToolset.Core
3154 3105
3155 if (privilege == null) 3106 if (privilege == null)
3156 { 3107 {
3157 privilege = Common.GetInnerText(node);
3158 }
3159
3160 if (privilege == null)
3161 {
3162 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 3108 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
3163 } 3109 }
3164 3110
@@ -3520,11 +3466,6 @@ namespace WixToolset.Core
3520 3466
3521 if (argument == null) 3467 if (argument == null)
3522 { 3468 {
3523 argument = this.Core.GetTrimmedInnerText(node);
3524 }
3525
3526 if (argument == null)
3527 {
3528 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 3469 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
3529 } 3470 }
3530 3471
@@ -3860,11 +3801,6 @@ namespace WixToolset.Core
3860 } 3801 }
3861 } 3802 }
3862 3803
3863 if (condition == null)
3864 {
3865 condition = this.Core.GetConditionInnerText(node);
3866 }
3867
3868 if (null == id) 3804 if (null == id)
3869 { 3805 {
3870 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 3806 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
@@ -3957,29 +3893,6 @@ namespace WixToolset.Core
3957 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, sequenceValue, "execute", "ui", "both")); 3893 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, sequenceValue, "execute", "ui", "both"));
3958 break; 3894 break;
3959 } 3895 }
3960 //if (0 < sequenceValue.Length)
3961 //{
3962 // var sequenceType = Wix.Enums.ParseSequenceType(sequenceValue);
3963 // switch (sequenceType)
3964 // {
3965 // case Wix.SequenceType.execute:
3966 // sequences = new string[] { "InstallExecuteSequence" };
3967 // break;
3968 // case Wix.SequenceType.ui:
3969 // sequences = new string[] { "InstallUISequence" };
3970 // break;
3971 // case Wix.SequenceType.first:
3972 // firstSequence = true;
3973 // // default puts it in both sequence which is what we want
3974 // break;
3975 // case Wix.SequenceType.both:
3976 // // default so no work necessary.
3977 // break;
3978 // default:
3979 // this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, sequenceValue, "execute", "ui", "both"));
3980 // break;
3981 // }
3982 //}
3983 break; 3896 break;
3984 case "Value": 3897 case "Value":
3985 value = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); 3898 value = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty);
@@ -3995,11 +3908,6 @@ namespace WixToolset.Core
3995 } 3908 }
3996 } 3909 }
3997 3910
3998 if (condition == null)
3999 {
4000 condition = this.Core.GetConditionInnerText(node);
4001 }
4002
4003 if (null == id) 3911 if (null == id)
4004 { 3912 {
4005 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 3913 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
@@ -4528,19 +4436,6 @@ namespace WixToolset.Core
4528 id = this.Core.CreateIdentifier("scp", shortcutId, key.ToUpperInvariant()); 4436 id = this.Core.CreateIdentifier("scp", shortcutId, key.ToUpperInvariant());
4529 } 4437 }
4530 4438
4531 var innerText = this.Core.GetTrimmedInnerText(node);
4532 if (!String.IsNullOrEmpty(innerText))
4533 {
4534 if (String.IsNullOrEmpty(value))
4535 {
4536 value = innerText;
4537 }
4538 else // cannot specify both the value attribute and inner text
4539 {
4540 this.Core.Write(ErrorMessages.IllegalAttributeWithInnerText(sourceLineNumbers, node.Name.LocalName, "Value"));
4541 }
4542 }
4543
4544 if (String.IsNullOrEmpty(value)) 4439 if (String.IsNullOrEmpty(value))
4545 { 4440 {
4546 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 4441 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
diff --git a/src/WixToolset.Core/Compiler_Bundle.cs b/src/WixToolset.Core/Compiler_Bundle.cs
index 2b274474..d88cb7f5 100644
--- a/src/WixToolset.Core/Compiler_Bundle.cs
+++ b/src/WixToolset.Core/Compiler_Bundle.cs
@@ -1056,11 +1056,6 @@ namespace WixToolset.Core
1056 this.Core.Write(ErrorMessages.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Id")); 1056 this.Core.Write(ErrorMessages.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Id"));
1057 } 1057 }
1058 1058
1059 if (String.IsNullOrEmpty(value))
1060 {
1061 value = Common.GetInnerText(child);
1062 }
1063
1064 if (!this.Core.EncounteredError) 1059 if (!this.Core.EncounteredError)
1065 { 1060 {
1066 this.Core.AddTuple(new WixBundleCustomDataCellTuple(childSourceLineNumbers, new Identifier(AccessModifier.Private, customDataId, elementId, attributeName)) 1061 this.Core.AddTuple(new WixBundleCustomDataCellTuple(childSourceLineNumbers, new Identifier(AccessModifier.Private, customDataId, elementId, attributeName))
diff --git a/src/WixToolset.Core/Compiler_EmbeddedUI.cs b/src/WixToolset.Core/Compiler_EmbeddedUI.cs
index 1827a200..847ee2a8 100644
--- a/src/WixToolset.Core/Compiler_EmbeddedUI.cs
+++ b/src/WixToolset.Core/Compiler_EmbeddedUI.cs
@@ -80,12 +80,6 @@ namespace WixToolset.Core
80 } 80 }
81 } 81 }
82 82
83 if (condition == null)
84 {
85 // Get the condition from the inner text of the element.
86 condition = this.Core.GetConditionInnerText(node);
87 }
88
89 if (null == id) 83 if (null == id)
90 { 84 {
91 id = this.Core.CreateIdentifier("mec", source, type.ToString()); 85 id = this.Core.CreateIdentifier("mec", source, type.ToString());
diff --git a/src/WixToolset.Core/Compiler_UI.cs b/src/WixToolset.Core/Compiler_UI.cs
index 5c2400e4..5066ff1a 100644
--- a/src/WixToolset.Core/Compiler_UI.cs
+++ b/src/WixToolset.Core/Compiler_UI.cs
@@ -700,11 +700,6 @@ namespace WixToolset.Core
700 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Action")); 700 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Action"));
701 } 701 }
702 702
703 if (null == message)
704 {
705 message = Common.GetInnerText(node);
706 }
707
708 this.Core.ParseForExtensionElements(node); 703 this.Core.ParseForExtensionElements(node);
709 704
710 if (!this.Core.EncounteredError) 705 if (!this.Core.EncounteredError)
@@ -751,11 +746,6 @@ namespace WixToolset.Core
751 } 746 }
752 } 747 }
753 748
754 if (null == text)
755 {
756 text = Common.GetInnerText(node);
757 }
758
759 if (null == id) 749 if (null == id)
760 { 750 {
761 id = this.Core.CreateIdentifier("txt", text); 751 id = this.Core.CreateIdentifier("txt", text);
@@ -1270,26 +1260,6 @@ namespace WixToolset.Core
1270 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, iconSizeValue, "16", "32", "48")); 1260 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, iconSizeValue, "16", "32", "48"));
1271 break; 1261 break;
1272 } 1262 }
1273 //if (0 < iconSizeValue.Length)
1274 //{
1275 // var iconsSizeType = Wix.Control.ParseIconSizeType(iconSizeValue);
1276 // switch (iconsSizeType)
1277 // {
1278 // case Wix.Control.IconSizeType.Item16:
1279 // this.Core.TrySetBitFromName(specialAttributes, "Icon16", YesNoType.Yes, bits, 16);
1280 // break;
1281 // case Wix.Control.IconSizeType.Item32:
1282 // this.Core.TrySetBitFromName(specialAttributes, "Icon32", YesNoType.Yes, bits, 16);
1283 // break;
1284 // case Wix.Control.IconSizeType.Item48:
1285 // this.Core.TrySetBitFromName(specialAttributes, "Icon16", YesNoType.Yes, bits, 16);
1286 // this.Core.TrySetBitFromName(specialAttributes, "Icon32", YesNoType.Yes, bits, 16);
1287 // break;
1288 // default:
1289 // this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, iconSizeValue, "16", "32", "48"));
1290 // break;
1291 // }
1292 //}
1293 } 1263 }
1294 else 1264 else
1295 { 1265 {
@@ -1411,9 +1381,6 @@ namespace WixToolset.Core
1411 case "ComboBox": 1381 case "ComboBox":
1412 this.ParseControlGroupElement(child, TupleDefinitionType.ComboBox, "ListItem"); 1382 this.ParseControlGroupElement(child, TupleDefinitionType.ComboBox, "ListItem");
1413 break; 1383 break;
1414 case "Condition":
1415 this.ParseConditionElement(child, node.Name.LocalName, controlId.Id, dialog);
1416 break;
1417 case "ListBox": 1384 case "ListBox":
1418 this.ParseControlGroupElement(child, TupleDefinitionType.ListBox, "ListItem"); 1385 this.ParseControlGroupElement(child, TupleDefinitionType.ListBox, "ListItem");
1419 break; 1386 break;
@@ -1456,11 +1423,6 @@ namespace WixToolset.Core
1456 } 1423 }
1457 } 1424 }
1458 1425
1459 if (null == text)
1460 {
1461 text = Common.GetInnerText(child);
1462 }
1463
1464 if (!String.IsNullOrEmpty(text) && null != sourceFile) 1426 if (!String.IsNullOrEmpty(text) && null != sourceFile)
1465 { 1427 {
1466 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(childSourceLineNumbers, child.Name.LocalName, "SourceFile", "Text")); 1428 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(childSourceLineNumbers, child.Name.LocalName, "SourceFile", "Text"));
@@ -1728,11 +1690,6 @@ namespace WixToolset.Core
1728 } 1690 }
1729 } 1691 }
1730 1692
1731 if (null == condition)
1732 {
1733 condition = this.Core.GetConditionInnerText(node);
1734 }
1735
1736 if (null == control) 1693 if (null == control)
1737 { 1694 {
1738 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Control")); 1695 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Control"));
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/BundleCustomTable/BundleCustomTable.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/BundleCustomTable/BundleCustomTable.wxs
index 8482a57e..db755171 100644
--- a/src/test/WixToolsetTest.CoreIntegration/TestData/BundleCustomTable/BundleCustomTable.wxs
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/BundleCustomTable/BundleCustomTable.wxs
@@ -10,12 +10,12 @@
10 <BundleAttributeDefinition Id="Column2" /> 10 <BundleAttributeDefinition Id="Column2" />
11 11
12 <BundleElement> 12 <BundleElement>
13 <BundleAttribute Id="Id">one</BundleAttribute> 13 <BundleAttribute Id="Id" Value="one" />
14 <BundleAttribute Id="Column2">two</BundleAttribute> 14 <BundleAttribute Id="Column2" Value="two" />
15 </BundleElement> 15 </BundleElement>
16 <BundleElement> 16 <BundleElement>
17 <BundleAttribute Id="Column2">&lt;</BundleAttribute> 17 <BundleAttribute Id="Column2" Value="&lt;" />
18 <BundleAttribute Id="Id">&gt;</BundleAttribute> 18 <BundleAttribute Id="Id" Value="&gt;" />
19 </BundleElement> 19 </BundleElement>
20 </BundleCustomData> 20 </BundleCustomData>
21 21
@@ -28,23 +28,23 @@
28 <Fragment> 28 <Fragment>
29 <BundleCustomDataRef Id="BundleCustomTableBA"> 29 <BundleCustomDataRef Id="BundleCustomTableBA">
30 <BundleElement> 30 <BundleElement>
31 <BundleAttribute Id="Id">1</BundleAttribute> 31 <BundleAttribute Id="Id" Value="1" />
32 <BundleAttribute Id="Column2">2</BundleAttribute> 32 <BundleAttribute Id="Column2" Value="2" />
33 </BundleElement> 33 </BundleElement>
34 </BundleCustomDataRef> 34 </BundleCustomDataRef>
35 35
36 <BundleCustomDataRef Id="BundleCustomTableBE"> 36 <BundleCustomDataRef Id="BundleCustomTableBE">
37 <BundleElement> 37 <BundleElement>
38 <BundleAttribute Id="Id">one</BundleAttribute> 38 <BundleAttribute Id="Id" Value="one" />
39 <BundleAttribute Id="Column2">two</BundleAttribute> 39 <BundleAttribute Id="Column2" Value="two" />
40 </BundleElement> 40 </BundleElement>
41 <BundleElement> 41 <BundleElement>
42 <BundleAttribute Id="Column2">&lt;</BundleAttribute> 42 <BundleAttribute Id="Column2" Value="&lt;" />
43 <BundleAttribute Id="Id">&gt;</BundleAttribute> 43 <BundleAttribute Id="Id" Value="&gt;" />
44 </BundleElement> 44 </BundleElement>
45 <BundleElement> 45 <BundleElement>
46 <BundleAttribute Id="Id">1</BundleAttribute> 46 <BundleAttribute Id="Id" Value="1" />
47 <BundleAttribute Id="Column2">2</BundleAttribute> 47 <BundleAttribute Id="Column2" Value="2" />
48 </BundleElement> 48 </BundleElement>
49 </BundleCustomDataRef> 49 </BundleCustomDataRef>
50 50
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/CustomAction/UnscheduledCustomAction.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/CustomAction/UnscheduledCustomAction.wxs
index 2846d16e..0784824a 100644
--- a/src/test/WixToolsetTest.CoreIntegration/TestData/CustomAction/UnscheduledCustomAction.wxs
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/CustomAction/UnscheduledCustomAction.wxs
@@ -27,7 +27,7 @@
27 </InstallUISequence> 27 </InstallUISequence>
28 28
29 <UI> 29 <UI>
30 <ProgressText Action="CustomAction2">Progess2Text</ProgressText> 30 <ProgressText Action="CustomAction2" Message="Progess2Text" />
31 </UI> 31 </UI>
32 </Fragment> 32 </Fragment>
33</Wix> 33</Wix>
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/CustomTable/CustomTable.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/CustomTable/CustomTable.wxs
index 51aee5f2..7f4a43e5 100644
--- a/src/test/WixToolsetTest.CoreIntegration/TestData/CustomTable/CustomTable.wxs
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/CustomTable/CustomTable.wxs
@@ -9,12 +9,12 @@
9 <Column Id="Column1" Type="string" PrimaryKey="yes" Category="text" Modularize="column" Description="The first custom column." /> 9 <Column Id="Column1" Type="string" PrimaryKey="yes" Category="text" Modularize="column" Description="The first custom column." />
10 <Column Id="Component_" Type="string" Width="72" KeyTable="Component" KeyColumn="1" Description="The custom table's Component reference" /> 10 <Column Id="Component_" Type="string" Width="72" KeyTable="Component" KeyColumn="1" Description="The custom table's Component reference" />
11 <Row> 11 <Row>
12 <Data Column="Column1">Row1</Data> 12 <Data Column="Column1" Value="Row1" />
13 <Data Column="Component_">test.txt</Data> 13 <Data Column="Component_" Value="test.txt" />
14 </Row> 14 </Row>
15 <Row> 15 <Row>
16 <Data Column="Column1">Row2</Data> 16 <Data Column="Column1" Value="Row2" />
17 <Data Column="Component_">test.txt</Data> 17 <Data Column="Component_" Value="test.txt" />
18 </Row> 18 </Row>
19 </CustomTable> 19 </CustomTable>
20 20
@@ -22,12 +22,12 @@
22 <Column Id="ColumnA" Type="string" PrimaryKey="yes" /> 22 <Column Id="ColumnA" Type="string" PrimaryKey="yes" />
23 <Column Id="Component_" Type="string" Width="72" KeyTable="Component" KeyColumn="1" /> 23 <Column Id="Component_" Type="string" Width="72" KeyTable="Component" KeyColumn="1" />
24 <Row> 24 <Row>
25 <Data Column="ColumnA">RowA</Data> 25 <Data Column="ColumnA" Value="RowA" />
26 <Data Column="Component_">test.txt</Data> 26 <Data Column="Component_" Value="test.txt" />
27 </Row> 27 </Row>
28 <Row> 28 <Row>
29 <Data Column="ColumnA">RowB</Data> 29 <Data Column="ColumnA" Value="RowB" />
30 <Data Column="Component_">test.txt</Data> 30 <Data Column="Component_" Value="test.txt" />
31 </Row> 31 </Row>
32 </CustomTable> 32 </CustomTable>
33 </Fragment> 33 </Fragment>
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/CustomTable/CustomTableWithFile.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/CustomTable/CustomTableWithFile.wxs
index ad5ed233..08a9c470 100644
--- a/src/test/WixToolsetTest.CoreIntegration/TestData/CustomTable/CustomTableWithFile.wxs
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/CustomTable/CustomTableWithFile.wxs
@@ -9,12 +9,12 @@
9 <Column Id="Column1" Type="string" PrimaryKey="yes" /> 9 <Column Id="Column1" Type="string" PrimaryKey="yes" />
10 <Column Id="Source" Type="binary" Width="0" /> 10 <Column Id="Source" Type="binary" Width="0" />
11 <Row> 11 <Row>
12 <Data Column="Column1">Row1</Data> 12 <Data Column="Column1" Value="Row1" />
13 <Data Column="Source">file1.txt</Data> 13 <Data Column="Source" Value="file1.txt" />
14 </Row> 14 </Row>
15 <Row> 15 <Row>
16 <Data Column="Source">SourceDir\file2.txt</Data> 16 <Data Column="Source" Value="SourceDir\file2.txt" />
17 <Data Column="Column1">Row2</Data> 17 <Data Column="Column1" Value="Row2" />
18 </Row> 18 </Row>
19 </CustomTable> 19 </CustomTable>
20 20
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/DialogsInInstallUISequence/PackageComponents.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/DialogsInInstallUISequence/PackageComponents.wxs
index 1101d901..c6deb864 100644
--- a/src/test/WixToolsetTest.CoreIntegration/TestData/DialogsInInstallUISequence/PackageComponents.wxs
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/DialogsInInstallUISequence/PackageComponents.wxs
@@ -4,16 +4,13 @@
4 <UI Id="CustomDialog"> 4 <UI Id="CustomDialog">
5 <Dialog Id="FirstDialog" Width="100" Height="100"> 5 <Dialog Id="FirstDialog" Width="100" Height="100">
6 <Control Id="Title" Type="Text" X="0" Y="0" Width="90" Height="13" TabSkip="no" Text="FirstDialogTitle" /> 6 <Control Id="Title" Type="Text" X="0" Y="0" Width="90" Height="13" TabSkip="no" Text="FirstDialogTitle" />
7 <Control Id="Header" Type="Text" X="0" Y="13" Width="90" Height="13" TabSkip="no" Text="FirstDialogHeader"> 7 <Control Id="Header" Type="Text" X="0" Y="13" Width="90" Height="13" TabSkip="no" Text="FirstDialogHeader"
8 <Condition Action="hide">Installed</Condition> 8 HideCondition="Installed" DisableCondition="Installed" />
9 <Condition Action="disable">Installed</Condition>
10 </Control>
11 </Dialog> 9 </Dialog>
12 <Dialog Id="SecondDialog" Width="100" Height="100"> 10 <Dialog Id="SecondDialog" Width="100" Height="100">
13 <Control Id="Title" Type="Text" X="0" Y="0" Width="90" Height="13" TabSkip="no" Text="SecondDialogTitle" /> 11 <Control Id="Title" Type="Text" X="0" Y="0" Width="90" Height="13" TabSkip="no" Text="SecondDialogTitle" />
14 <Control Id="OptionalCheckBox" Type="CheckBox" X="0" Y="13" Width="100" Height="40" Hidden="yes" Property="WIXUI_EXITDIALOGOPTIONALCHECKBOX" CheckBoxValue="1" Text="[WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT]"> 12 <Control Id="OptionalCheckBox" Type="CheckBox" X="0" Y="13" Width="100" Height="40" Hidden="yes" Property="WIXUI_EXITDIALOGOPTIONALCHECKBOX" CheckBoxValue="1" Text="[WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT]"
15 <Condition Action="show">WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT AND NOT Installed</Condition> 13 ShowCondition="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT AND NOT Installed" />
16 </Control>
17 </Dialog> 14 </Dialog>
18 15
19 <InstallUISequence> 16 <InstallUISequence>
@@ -29,8 +26,8 @@
29 <Publish Dialog="FirstDialog" Control="Next" Event="NewDialog" Value="SecondDialog">Installed AND PATCH</Publish> 26 <Publish Dialog="FirstDialog" Control="Next" Event="NewDialog" Value="SecondDialog">Installed AND PATCH</Publish>
30 27
31 <InstallUISequence> 28 <InstallUISequence>
32 <Show Dialog="FirstDialog" Before="SecondDialog">Installed AND PATCH</Show> 29 <Show Dialog="FirstDialog" Before="SecondDialog" Condition="Installed AND PATCH" />
33 <Show Dialog="SecondDialog" Before="ExecuteAction">NOT Installed</Show> 30 <Show Dialog="SecondDialog" Before="ExecuteAction" Condition="NOT Installed" />
34 </InstallUISequence> 31 </InstallUISequence>
35 </UI> 32 </UI>
36 <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> 33 <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">