/// <summary> /// Add a localization file. /// </summary> /// <param name="localization">The localization file to add.</param> public void AddLocalization(Localization localization) { if (-1 == this.codepage) { this.codepage = localization.Codepage; } foreach (WixVariableRow wixVariableRow in localization.Variables) { WixVariableRow existingWixVariableRow = (WixVariableRow)this.variables[wixVariableRow.Id]; if (null == existingWixVariableRow || (existingWixVariableRow.Overridable && !wixVariableRow.Overridable)) { this.variables[wixVariableRow.Id] = wixVariableRow; } else if (!wixVariableRow.Overridable) { this.OnMessage(WixErrors.DuplicateLocalizationIdentifier(wixVariableRow.SourceLineNumbers, wixVariableRow.Id)); } } foreach (KeyValuePair <string, LocalizedControl> localizedControl in localization.LocalizedControls) { if (!this.localizedControls.ContainsKey(localizedControl.Key)) { this.localizedControls.Add(localizedControl.Key, localizedControl.Value); } } }
/// <summary> /// Add a localization file. /// </summary> /// <param name="localization">The localization file to add.</param> public void AddLocalization(Localization localization) { if (-1 == this.codepage) { this.codepage = localization.Codepage; } else if (-1 != this.codepage && -1 != localization.Codepage && this.codepage != localization.Codepage) { this.OnMessage(WixErrors.DuplicateLocalizedCodepage(null, this.codepage)); } foreach (WixVariableRow wixVariableRow in localization.Variables) { WixVariableRow existingWixVariableRow = (WixVariableRow)this.variables[wixVariableRow.Id]; if (null == existingWixVariableRow || (existingWixVariableRow.Overridable && !wixVariableRow.Overridable)) { this.variables.Add(wixVariableRow.Id, wixVariableRow); } else if (!wixVariableRow.Overridable) { this.OnMessage(WixErrors.DuplicateLocalizationIdentifier(wixVariableRow.SourceLineNumbers, wixVariableRow.Id)); } } }
/// <summary> /// Parse a localization string. /// </summary> /// <param name="node">Element to parse.</param> private void ParseString(XmlNode node) { string id = null; bool overridable = false; SourceLineNumberCollection sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); foreach (XmlAttribute attrib in node.Attributes) { if (0 == attrib.NamespaceURI.Length || attrib.NamespaceURI == Localization.XmlNamespaceUri) { switch (attrib.LocalName) { case "Id": id = Common.GetAttributeIdentifierValue(sourceLineNumbers, attrib, null); break; case "Overridable": overridable = Common.IsYes(sourceLineNumbers, "String", attrib.Name, attrib.Value); break; case "Localizable": ; // do nothing break; default: throw new WixException(WixErrors.UnexpectedAttribute(sourceLineNumbers, attrib.OwnerElement.Name, attrib.Name)); } } else { throw new WixException(WixErrors.UnsupportedExtensionAttribute(sourceLineNumbers, attrib.OwnerElement.Name, attrib.Name)); } } string value = node.InnerText; if (null == id) { throw new WixException(WixErrors.ExpectedAttribute(sourceLineNumbers, "String", "Id")); } WixVariableRow wixVariableRow = new WixVariableRow(sourceLineNumbers, this.tableDefinitions["WixVariable"]); wixVariableRow.Id = id; wixVariableRow.Overridable = overridable; wixVariableRow.Value = value; WixVariableRow existingWixVariableRow = (WixVariableRow)this.variables[id]; if (null == existingWixVariableRow || (existingWixVariableRow.Overridable && !overridable)) { this.variables.Add(id, wixVariableRow); } else if (!overridable) { throw new WixException(WixErrors.DuplicateLocalizationIdentifier(sourceLineNumbers, id)); } }
/// <summary> /// Add a variable. /// </summary> /// <param name="wixVariableRow">The WixVariableRow to add.</param> public void AddVariable(WixVariableRow wixVariableRow) { if (!this.wixVariables.Contains(wixVariableRow.Id)) { this.wixVariables.Add(wixVariableRow.Id, wixVariableRow.Value); } else if (!wixVariableRow.Overridable) // collision { this.OnMessage(WixErrors.WixVariableCollision(wixVariableRow.SourceLineNumbers, wixVariableRow.Id)); } }
/// <summary> /// Get a localized data value. /// </summary> /// <param name="id">The name of the localization variable.</param> /// <returns>The localized data value or null if it wasn't found.</returns> public string GetLocalizedValue(string id) { WixVariableRow wixVariableRow = (WixVariableRow)this.variables[id]; if (null != wixVariableRow) { return(wixVariableRow.Value); } else { return(null); } }
/// <summary> /// Merge the information from another localization object into this one. /// </summary> /// <param name="localization">The localization object to be merged into this one.</param> public void Merge(Localization localization) { foreach (WixVariableRow wixVariableRow in localization.Variables) { WixVariableRow existingWixVariableRow = (WixVariableRow)variables[wixVariableRow.Id]; if (null == existingWixVariableRow || (existingWixVariableRow.Overridable && !wixVariableRow.Overridable)) { variables[wixVariableRow.Id] = wixVariableRow; } else if (!wixVariableRow.Overridable) { throw new WixException(WixErrors.DuplicateLocalizationIdentifier(wixVariableRow.SourceLineNumbers, wixVariableRow.Id)); } } }
/// <summary> /// Parse a localization string. /// </summary> /// <param name="node">Element to parse.</param> private void ParseString(XmlNode node) { string id = null; bool overridable = false; SourceLineNumberCollection sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); foreach (XmlAttribute attrib in node.Attributes) { if (0 == attrib.NamespaceURI.Length || attrib.NamespaceURI == Localization.XmlNamespaceUri) { switch (attrib.LocalName) { case "Id": id = Common.GetAttributeIdentifierValue(sourceLineNumbers, attrib, null); break; case "Overridable": overridable = Common.IsYes(sourceLineNumbers, "String", attrib.Name, attrib.Value); break; case "Localizable": ; // do nothing break; default: throw new WixException(WixErrors.UnexpectedAttribute(sourceLineNumbers, attrib.OwnerElement.Name, attrib.Name)); } } else { throw new WixException(WixErrors.UnsupportedExtensionAttribute(sourceLineNumbers, attrib.OwnerElement.Name, attrib.Name)); } } string value = node.InnerText; if (null == id) { throw new WixException(WixErrors.ExpectedAttribute(sourceLineNumbers, "String", "Id")); } else if (0 == id.Length) { throw new WixException(WixErrors.IllegalIdentifier(sourceLineNumbers, "String", "Id", 0)); } WixVariableRow wixVariableRow = new WixVariableRow(sourceLineNumbers, this.tableDefinitions["WixVariable"]); wixVariableRow.Id = id; wixVariableRow.Overridable = overridable; wixVariableRow.Value = value; WixVariableRow existingWixVariableRow = (WixVariableRow)this.variables[id]; if (null == existingWixVariableRow || (existingWixVariableRow.Overridable && !overridable)) { this.variables.Add(id, wixVariableRow); } else if (!overridable) { throw new WixException(WixErrors.DuplicateLocalizationIdentifier(sourceLineNumbers, id)); } }
/// <summary> /// Creates a new row in the table. /// </summary> /// <param name="sourceLineNumbers">Original source lines for this row.</param> /// <param name="add">Specifies whether to only create the row or add it to the table automatically.</param> /// <returns>Row created in table.</returns> public Row CreateRow(SourceLineNumberCollection sourceLineNumbers, bool add) { Row row; switch (this.Name) { case "BBControl": row = new BBControlRow(sourceLineNumbers, this); break; case "ChainMsiPackage": row = new ChainMsiPackageRow(sourceLineNumbers, this); break; case "Component": row = new ComponentRow(sourceLineNumbers, this); break; case "Control": row = new ControlRow(sourceLineNumbers, this); break; case "File": row = new FileRow(sourceLineNumbers, this); break; case "Media": row = new MediaRow(sourceLineNumbers, this); break; case "PayloadInfo": row = new PayloadInfoRow(sourceLineNumbers, this); break; case "Upgrade": row = new UpgradeRow(sourceLineNumbers, this); break; case "Variable": row = new VariableRow(sourceLineNumbers, this); break; case "WixAction": row = new WixActionRow(sourceLineNumbers, this); break; case "WixApprovedExeForElevation": row = new WixApprovedExeForElevationRow(sourceLineNumbers, this); break; case "WixBundle": row = new WixBundleRow(sourceLineNumbers, this); break; case "WixBundlePatchTargetCode": row = new WixBundlePatchTargetCodeRow(sourceLineNumbers, this); break; case "WixBundleUpdate": row = new WixBundleUpdateRow(sourceLineNumbers, this); break; case "WixCatalog": row = new WixCatalogRow(sourceLineNumbers, this); break; case "WixCommandLine": row = new WixCommandLineRow(sourceLineNumbers, this); break; case "WixComplexReference": row = new WixComplexReferenceRow(sourceLineNumbers, this); break; case "WixFile": row = new WixFileRow(sourceLineNumbers, this); break; case "WixMedia": row = new WixMediaRow(sourceLineNumbers, this); break; case "WixMediaTemplate": row = new WixMediaTemplateRow(sourceLineNumbers, this); break; case "WixMerge": row = new WixMergeRow(sourceLineNumbers, this); break; case "WixProperty": row = new WixPropertyRow(sourceLineNumbers, this); break; case "WixSimpleReference": row = new WixSimpleReferenceRow(sourceLineNumbers, this); break; case "WixUpdateRegistration": row = new WixUpdateRegistrationRow(sourceLineNumbers, this); break; case "WixVariable": row = new WixVariableRow(sourceLineNumbers, this); break; default: row = new Row(sourceLineNumbers, this); break; } if (add) { this.rows.Add(row); } return(row); }
/// <summary> /// Creates a new row in the table. /// </summary> /// <param name="sourceLineNumbers">Original source lines for this row.</param> /// <param name="add">Specifies whether to only create the row or add it to the table automatically.</param> /// <returns>Row created in table.</returns> public Row CreateRow(SourceLineNumberCollection sourceLineNumbers, bool add) { Row row; switch (this.Name) { case "BBControl": row = new BBControlRow(sourceLineNumbers, this); break; case "ChainMsiPackage": row = new ChainMsiPackageRow(sourceLineNumbers, this); break; case "Component": row = new ComponentRow(sourceLineNumbers, this); break; case "Control": row = new ControlRow(sourceLineNumbers, this); break; case "File": row = new FileRow(sourceLineNumbers, this); break; case "Media": row = new MediaRow(sourceLineNumbers, this); break; case "PayloadInfo": row = new PayloadInfoRow(sourceLineNumbers, this); break; case "Upgrade": row = new UpgradeRow(sourceLineNumbers, this); break; case "Variable": row = new VariableRow(sourceLineNumbers, this); break; case "WixAction": row = new WixActionRow(sourceLineNumbers, this); break; case "WixApprovedExeForElevation": row = new WixApprovedExeForElevationRow(sourceLineNumbers, this); break; case "WixBundle": row = new WixBundleRow(sourceLineNumbers, this); break; case "WixBundlePatchTargetCode": row = new WixBundlePatchTargetCodeRow(sourceLineNumbers, this); break; case "WixBundleUpdate": row = new WixBundleUpdateRow(sourceLineNumbers, this); break; case "WixCatalog": row = new WixCatalogRow(sourceLineNumbers, this); break; case "WixCommandLine": row = new WixCommandLineRow(sourceLineNumbers, this); break; case "WixComplexReference": row = new WixComplexReferenceRow(sourceLineNumbers, this); break; case "WixFile": row = new WixFileRow(sourceLineNumbers, this); break; case "WixMedia": row = new WixMediaRow(sourceLineNumbers, this); break; case "WixMediaTemplate": row = new WixMediaTemplateRow(sourceLineNumbers, this); break; case "WixMerge": row = new WixMergeRow(sourceLineNumbers, this); break; case "WixProperty": row = new WixPropertyRow(sourceLineNumbers, this); break; case "WixSimpleReference": row = new WixSimpleReferenceRow(sourceLineNumbers, this); break; case "WixUpdateRegistration": row = new WixUpdateRegistrationRow(sourceLineNumbers, this); break; case "WixVariable": row = new WixVariableRow(sourceLineNumbers, this); break; default: row = new Row(sourceLineNumbers, this); break; } if (add) { this.rows.Add(row); } return row; }
/// <summary> /// Creates a new row in the table. /// </summary> /// <param name="sourceLineNumbers">Original source lines for this row.</param> /// <returns>Row created in table.</returns> public Row CreateRow(SourceLineNumberCollection sourceLineNumbers) { Row row; switch (this.Name) { case "BBControl": row = new BBControlRow(sourceLineNumbers, this); break; case "Control": row = new ControlRow(sourceLineNumbers, this); break; case "File": row = new FileRow(sourceLineNumbers, this); break; case "Media": row = new MediaRow(sourceLineNumbers, this); break; case "Upgrade": row = new UpgradeRow(sourceLineNumbers, this); break; case "WixAction": row = new WixActionRow(sourceLineNumbers, this); break; case "WixComplexReference": row = new WixComplexReferenceRow(sourceLineNumbers, this); break; case "WixFile": row = new WixFileRow(sourceLineNumbers, this); break; case "WixMedia": row = new WixMediaRow(sourceLineNumbers, this); break; case "WixMerge": row = new WixMergeRow(sourceLineNumbers, this); break; case "WixProperty": row = new WixPropertyRow(sourceLineNumbers, this); break; case "WixSimpleReference": row = new WixSimpleReferenceRow(sourceLineNumbers, this); break; case "WixVariable": row = new WixVariableRow(sourceLineNumbers, this); break; default: row = new Row(sourceLineNumbers, this); break; } this.rows.Add(row); return(row); }
/// <summary> /// Creates a new row in the table. /// </summary> /// <param name="sourceLineNumbers">Original source lines for this row.</param> /// <returns>Row created in table.</returns> public Row CreateRow(SourceLineNumberCollection sourceLineNumbers) { Row row; switch (this.Name) { case "BBControl": row = new BBControlRow(sourceLineNumbers, this); break; case "ChainMsiPackage": row = new ChainMsiPackageRow(sourceLineNumbers, this); break; case "Component": row = new ComponentRow(sourceLineNumbers, this); break; case "Control": row = new ControlRow(sourceLineNumbers, this); break; case "File": row = new FileRow(sourceLineNumbers, this); break; case "Media": row = new MediaRow(sourceLineNumbers, this); break; case "PayloadInfo": row = new PayloadInfoRow(sourceLineNumbers, this); break; case "Upgrade": row = new UpgradeRow(sourceLineNumbers, this); break; case "WixAction": row = new WixActionRow(sourceLineNumbers, this); break; case "WixComplexReference": row = new WixComplexReferenceRow(sourceLineNumbers, this); break; case "WixFile": row = new WixFileRow(sourceLineNumbers, this); break; case "WixMedia": row = new WixMediaRow(sourceLineNumbers, this); break; case "WixMediaTemplate": row = new WixMediaTemplateRow(sourceLineNumbers, this); break; case "WixMerge": row = new WixMergeRow(sourceLineNumbers, this); break; case "WixProperty": row = new WixPropertyRow(sourceLineNumbers, this); break; case "WixSimpleReference": row = new WixSimpleReferenceRow(sourceLineNumbers, this); break; case "WixVariable": row = new WixVariableRow(sourceLineNumbers, this); break; default: row = new Row(sourceLineNumbers, this); break; } this.rows.Add(row); return row; }
/// <summary> /// Parse a localization string. /// </summary> /// <param name="reader">XmlReader where the localization file is persisted.</param> /// <param name="tableDefinitions">Collection containing TableDefinitions to use when loading the localization file.</param> /// <param name="localization">The localization being parsed.</param> private static void ParseString(XmlReader reader, TableDefinitionCollection tableDefinitions, Localization localization) { Debug.Assert("String" == reader.LocalName); bool empty = reader.IsEmptyElement; SourceLineNumberCollection sourceLineNumbers = SourceLineNumberCollection.FromUri(reader.BaseURI); string id = null; bool overridable = false; string value = String.Empty; // default this value to the empty string while (reader.MoveToNextAttribute()) { switch (reader.LocalName) { case "Id": id = reader.Value; break; case "Overridable": overridable = Common.IsYes(sourceLineNumbers, "String", reader.Name, reader.Value); break; default: if (!reader.NamespaceURI.StartsWith("http://www.w3.org/")) { throw new WixException(WixErrors.UnexpectedAttribute(sourceLineNumbers, "String", reader.Name)); } break; } } if (!empty) { bool done = false; while (!done && reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: throw new WixException(WixErrors.UnexpectedElement(sourceLineNumbers, "String", reader.Name)); case XmlNodeType.CDATA: case XmlNodeType.Text: if (0 < reader.Value.Length) { value = reader.Value; } break; case XmlNodeType.EndElement: done = true; break; } } if (!done) { throw new WixException(WixErrors.ExpectedEndElement(sourceLineNumbers, "String")); } } if (null == id) { throw new WixException(WixErrors.ExpectedAttribute(sourceLineNumbers, "String", "Id")); } WixVariableRow wixVariableRow = new WixVariableRow(sourceLineNumbers, tableDefinitions["WixVariable"]); wixVariableRow.Id = id; wixVariableRow.Overridable = overridable; wixVariableRow.Value = value; WixVariableRow existingWixVariableRow = (WixVariableRow)localization.variables[id]; if (null == existingWixVariableRow || (existingWixVariableRow.Overridable && !overridable)) { localization.variables.Add(id, wixVariableRow); } else if (!overridable) { throw new WixException(WixErrors.DuplicateLocalizationIdentifier(sourceLineNumbers, id)); } }