From 155a6e96346e0cb3d9ab6f5372fa29b46ebaee89 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Tue, 19 Dec 2017 12:25:40 -0800 Subject: Integrate simplified message handling --- src/WixToolset.Core/Localizer.cs | 91 ++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 45 deletions(-) (limited to 'src/WixToolset.Core/Localizer.cs') diff --git a/src/WixToolset.Core/Localizer.cs b/src/WixToolset.Core/Localizer.cs index 8265c026..d4f89e7a 100644 --- a/src/WixToolset.Core/Localizer.cs +++ b/src/WixToolset.Core/Localizer.cs @@ -9,6 +9,7 @@ namespace WixToolset.Core using WixToolset.Data.Rows; using WixToolset.Core.Native; using WixToolset.Extensibility; + using WixToolset.Extensibility.Services; /// /// Parses localization files and localizes database values. @@ -24,7 +25,7 @@ namespace WixToolset.Core /// /// Instantiate a new Localizer. /// - public Localizer(IEnumerable localizations) + public Localizer(IMessaging messaging, IEnumerable localizations) { this.Codepage = -1; this.variables = new Dictionary(); @@ -39,7 +40,7 @@ namespace WixToolset.Core foreach (var variable in localization.Variables) { - Localizer.AddWixVariable(this.variables, variable); + Localizer.AddWixVariable(messaging, this.variables, variable); } foreach (KeyValuePair localizedControl in localization.LocalizedControls) @@ -86,7 +87,7 @@ namespace WixToolset.Core /// Collection containing TableDefinitions to use when loading the localization file. /// Suppress xml schema validation while loading. /// Returns the loaded localization file. - public static Localization ParseLocalizationFile(string path) + public static Localization ParseLocalizationFile(IMessaging messaging, string path) { XElement root = XDocument.Load(path).Root; Localization localization = null; @@ -96,23 +97,23 @@ namespace WixToolset.Core { if (Localizer.WxlNamespace == root.Name.Namespace) { - localization = ParseWixLocalizationElement(root); + localization = ParseWixLocalizationElement(messaging, root); } else // invalid or missing namespace { if (null == root.Name.Namespace) { - Messaging.Instance.OnMessage(WixErrors.InvalidWixXmlNamespace(sourceLineNumbers, Localizer.XmlElementName, Localizer.WxlNamespace.NamespaceName)); + messaging.Write(ErrorMessages.InvalidWixXmlNamespace(sourceLineNumbers, Localizer.XmlElementName, Localizer.WxlNamespace.NamespaceName)); } else { - Messaging.Instance.OnMessage(WixErrors.InvalidWixXmlNamespace(sourceLineNumbers, Localizer.XmlElementName, root.Name.LocalName, Localizer.WxlNamespace.NamespaceName)); + messaging.Write(ErrorMessages.InvalidWixXmlNamespace(sourceLineNumbers, Localizer.XmlElementName, root.Name.LocalName, Localizer.WxlNamespace.NamespaceName)); } } } else { - Messaging.Instance.OnMessage(WixErrors.InvalidDocumentElement(sourceLineNumbers, root.Name.LocalName, "localization", Localizer.XmlElementName)); + messaging.Write(ErrorMessages.InvalidDocumentElement(sourceLineNumbers, root.Name.LocalName, "localization", Localizer.XmlElementName)); } return localization; @@ -123,7 +124,7 @@ namespace WixToolset.Core /// /// Dictionary of variable rows. /// Row to add to the variables dictionary. - private static void AddWixVariable(IDictionary variables, BindVariable wixVariableRow) + private static void AddWixVariable(IMessaging messaging, IDictionary variables, BindVariable wixVariableRow) { if (!variables.TryGetValue(wixVariableRow.Id, out var existingWixVariableRow) || (existingWixVariableRow.Overridable && !wixVariableRow.Overridable)) { @@ -131,7 +132,7 @@ namespace WixToolset.Core } else if (!wixVariableRow.Overridable) { - Messaging.Instance.OnMessage(WixErrors.DuplicateLocalizationIdentifier(wixVariableRow.SourceLineNumbers, wixVariableRow.Id)); + messaging.Write(ErrorMessages.DuplicateLocalizationIdentifier(wixVariableRow.SourceLineNumbers, wixVariableRow.Id)); } } @@ -139,7 +140,7 @@ namespace WixToolset.Core /// Parses the WixLocalization element. /// /// Element to parse. - private static Localization ParseWixLocalizationElement(XElement node) + private static Localization ParseWixLocalizationElement(IMessaging messaging, XElement node) { int codepage = -1; string culture = null; @@ -161,13 +162,13 @@ namespace WixToolset.Core // do nothing; @Language is used for locutil which can't convert Culture to lcid break; default: - Common.UnexpectedAttribute(sourceLineNumbers, attrib); + Common.UnexpectedAttribute(messaging, sourceLineNumbers, attrib); break; } } else { - Common.UnexpectedAttribute(sourceLineNumbers, attrib); + Common.UnexpectedAttribute(messaging, sourceLineNumbers, attrib); } } @@ -181,32 +182,32 @@ namespace WixToolset.Core switch (child.Name.LocalName) { case "String": - Localizer.ParseString(child, variables); + Localizer.ParseString(messaging, child, variables); break; case "UI": - Localizer.ParseUI(child, localizedControls); + Localizer.ParseUI(messaging, child, localizedControls); break; default: - Messaging.Instance.OnMessage(WixErrors.UnexpectedElement(sourceLineNumbers, node.Name.ToString(), child.Name.ToString())); + messaging.Write(ErrorMessages.UnexpectedElement(sourceLineNumbers, node.Name.ToString(), child.Name.ToString())); break; } } else { - Messaging.Instance.OnMessage(WixErrors.UnsupportedExtensionElement(sourceLineNumbers, node.Name.ToString(), child.Name.ToString())); + messaging.Write(ErrorMessages.UnsupportedExtensionElement(sourceLineNumbers, node.Name.ToString(), child.Name.ToString())); } } - return Messaging.Instance.EncounteredError ? null : new Localization(codepage, culture, variables, localizedControls); + return messaging.EncounteredError ? null : new Localization(codepage, culture, variables, localizedControls); } /// /// Parse a localization string into a WixVariableRow. /// /// Element to parse. - private static void ParseString(XElement node, IDictionary variables) + private static void ParseString(IMessaging messaging, XElement node, IDictionary variables) { string id = null; bool overridable = false; @@ -219,22 +220,22 @@ namespace WixToolset.Core switch (attrib.Name.LocalName) { case "Id": - id = Common.GetAttributeIdentifierValue(sourceLineNumbers, attrib); + id = Common.GetAttributeIdentifierValue(messaging, sourceLineNumbers, attrib); break; case "Overridable": - overridable = YesNoType.Yes == Common.GetAttributeYesNoValue(sourceLineNumbers, attrib); + overridable = YesNoType.Yes == Common.GetAttributeYesNoValue(messaging, sourceLineNumbers, attrib); break; case "Localizable": ; // do nothing break; default: - Messaging.Instance.OnMessage(WixErrors.UnexpectedAttribute(sourceLineNumbers, attrib.Parent.Name.ToString(), attrib.Name.ToString())); + messaging.Write(ErrorMessages.UnexpectedAttribute(sourceLineNumbers, attrib.Parent.Name.ToString(), attrib.Name.ToString())); break; } } else { - Messaging.Instance.OnMessage(WixErrors.UnsupportedExtensionAttribute(sourceLineNumbers, attrib.Parent.Name.ToString(), attrib.Name.ToString())); + messaging.Write(ErrorMessages.UnsupportedExtensionAttribute(sourceLineNumbers, attrib.Parent.Name.ToString(), attrib.Name.ToString())); } } @@ -242,14 +243,14 @@ namespace WixToolset.Core if (null == id) { - Messaging.Instance.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, "String", "Id")); + messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, "String", "Id")); } else if (0 == id.Length) { - Messaging.Instance.OnMessage(WixErrors.IllegalIdentifier(sourceLineNumbers, "String", "Id", 0)); + messaging.Write(ErrorMessages.IllegalIdentifier(sourceLineNumbers, "String", "Id", 0)); } - if (!Messaging.Instance.EncounteredError) + if (!messaging.EncounteredError) { var variable = new BindVariable { @@ -259,7 +260,7 @@ namespace WixToolset.Core Value = value, }; - Localizer.AddWixVariable(variables, variable); + Localizer.AddWixVariable(messaging, variables, variable); } } @@ -268,7 +269,7 @@ namespace WixToolset.Core /// /// Element to parse. /// Dictionary of localized controls. - private static void ParseUI(XElement node, IDictionary localizedControls) + private static void ParseUI(IMessaging messaging, XElement node, IDictionary localizedControls) { string dialog = null; string control = null; @@ -287,49 +288,49 @@ namespace WixToolset.Core switch (attrib.Name.LocalName) { case "Dialog": - dialog = Common.GetAttributeIdentifierValue(sourceLineNumbers, attrib); + dialog = Common.GetAttributeIdentifierValue(messaging, sourceLineNumbers, attrib); break; case "Control": - control = Common.GetAttributeIdentifierValue(sourceLineNumbers, attrib); + control = Common.GetAttributeIdentifierValue(messaging, sourceLineNumbers, attrib); break; case "X": - x = Common.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, short.MaxValue); + x = Common.GetAttributeIntegerValue(messaging, sourceLineNumbers, attrib, 0, short.MaxValue); break; case "Y": - y = Common.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, short.MaxValue); + y = Common.GetAttributeIntegerValue(messaging, sourceLineNumbers, attrib, 0, short.MaxValue); break; case "Width": - width = Common.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, short.MaxValue); + width = Common.GetAttributeIntegerValue(messaging, sourceLineNumbers, attrib, 0, short.MaxValue); break; case "Height": - height = Common.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, short.MaxValue); + height = Common.GetAttributeIntegerValue(messaging, sourceLineNumbers, attrib, 0, short.MaxValue); break; case "RightToLeft": - if (YesNoType.Yes == Common.GetAttributeYesNoValue(sourceLineNumbers, attrib)) + if (YesNoType.Yes == Common.GetAttributeYesNoValue(messaging, sourceLineNumbers, attrib)) { attribs |= MsiInterop.MsidbControlAttributesRTLRO; } break; case "RightAligned": - if (YesNoType.Yes == Common.GetAttributeYesNoValue(sourceLineNumbers, attrib)) + if (YesNoType.Yes == Common.GetAttributeYesNoValue(messaging, sourceLineNumbers, attrib)) { attribs |= MsiInterop.MsidbControlAttributesRightAligned; } break; case "LeftScroll": - if (YesNoType.Yes == Common.GetAttributeYesNoValue(sourceLineNumbers, attrib)) + if (YesNoType.Yes == Common.GetAttributeYesNoValue(messaging, sourceLineNumbers, attrib)) { attribs |= MsiInterop.MsidbControlAttributesLeftScroll; } break; default: - Common.UnexpectedAttribute(sourceLineNumbers, attrib); + Common.UnexpectedAttribute(messaging, sourceLineNumbers, attrib); break; } } else { - Common.UnexpectedAttribute(sourceLineNumbers, attrib); + Common.UnexpectedAttribute(messaging, sourceLineNumbers, attrib); } } @@ -339,24 +340,24 @@ namespace WixToolset.Core { if (MsiInterop.MsidbControlAttributesRTLRO == (attribs & MsiInterop.MsidbControlAttributesRTLRO)) { - Messaging.Instance.OnMessage(WixErrors.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.ToString(), "RightToLeft", "Control")); + messaging.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.ToString(), "RightToLeft", "Control")); } else if (MsiInterop.MsidbControlAttributesRightAligned == (attribs & MsiInterop.MsidbControlAttributesRightAligned)) { - Messaging.Instance.OnMessage(WixErrors.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.ToString(), "RightAligned", "Control")); + messaging.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.ToString(), "RightAligned", "Control")); } else if (MsiInterop.MsidbControlAttributesLeftScroll == (attribs & MsiInterop.MsidbControlAttributesLeftScroll)) { - Messaging.Instance.OnMessage(WixErrors.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.ToString(), "LeftScroll", "Control")); + messaging.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.ToString(), "LeftScroll", "Control")); } } if (String.IsNullOrEmpty(control) && String.IsNullOrEmpty(dialog)) { - Messaging.Instance.OnMessage(WixErrors.ExpectedAttributesWithOtherAttribute(sourceLineNumbers, node.Name.ToString(), "Dialog", "Control")); + messaging.Write(ErrorMessages.ExpectedAttributesWithOtherAttribute(sourceLineNumbers, node.Name.ToString(), "Dialog", "Control")); } - if (!Messaging.Instance.EncounteredError) + if (!messaging.EncounteredError) { LocalizedControl localizedControl = new LocalizedControl(dialog, control, x, y, width, height, attribs, text); string key = localizedControl.GetKey(); @@ -364,11 +365,11 @@ namespace WixToolset.Core { if (String.IsNullOrEmpty(localizedControl.Control)) { - Messaging.Instance.OnMessage(WixErrors.DuplicatedUiLocalization(sourceLineNumbers, localizedControl.Dialog)); + messaging.Write(ErrorMessages.DuplicatedUiLocalization(sourceLineNumbers, localizedControl.Dialog)); } else { - Messaging.Instance.OnMessage(WixErrors.DuplicatedUiLocalization(sourceLineNumbers, localizedControl.Dialog, localizedControl.Control)); + messaging.Write(ErrorMessages.DuplicatedUiLocalization(sourceLineNumbers, localizedControl.Dialog, localizedControl.Control)); } } else -- cgit v1.2.3-55-g6feb