internal static Localization Deserialize(JsonObject jsonObject)
        {
            var codepage = jsonObject.GetValueOrDefault("codepage", 0);
            var culture  = jsonObject.GetValueOrDefault <string>("culture");

            var variables     = new Dictionary <string, BindVariable>();
            var variablesJson = jsonObject.GetValueOrDefault("variables", new JsonArray());

            foreach (JsonObject variableJson in variablesJson)
            {
                var bindPath = BindVariable.Deserialize(variableJson);
                variables.Add(bindPath.Id, bindPath);
            }

            var controls     = new Dictionary <string, LocalizedControl>();
            var controlsJson = jsonObject.GetValueOrDefault <JsonObject>("controls");

            if (controlsJson != null)
            {
                foreach (var controlJsonWithKey in controlsJson)
                {
                    var control = LocalizedControl.Deserialize((JsonObject)controlJsonWithKey.Value);
                    controls.Add(controlJsonWithKey.Key, control);
                }
            }

            return(new Localization(codepage, culture, variables, controls));
        }
Exemple #2
0
        /// <summary>
        /// Parse a localization string into a WixVariableRow.
        /// </summary>
        /// <param name="node">Element to parse.</param>
        private static void ParseString(IMessaging messaging, XElement node, IDictionary <string, BindVariable> variables)
        {
            string           id                = null;
            bool             overridable       = false;
            SourceLineNumber sourceLineNumbers = SourceLineNumber.CreateFromXObject(node);

            foreach (XAttribute attrib in node.Attributes())
            {
                if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || Localizer.WxlNamespace == attrib.Name.Namespace)
                {
                    switch (attrib.Name.LocalName)
                    {
                    case "Id":
                        id = Common.GetAttributeIdentifierValue(messaging, sourceLineNumbers, attrib);
                        break;

                    case "Overridable":
                        overridable = YesNoType.Yes == Common.GetAttributeYesNoValue(messaging, sourceLineNumbers, attrib);
                        break;

                    case "Localizable":
                        ;     // do nothing
                        break;

                    default:
                        messaging.Write(ErrorMessages.UnexpectedAttribute(sourceLineNumbers, attrib.Parent.Name.ToString(), attrib.Name.ToString()));
                        break;
                    }
                }
                else
                {
                    messaging.Write(ErrorMessages.UnsupportedExtensionAttribute(sourceLineNumbers, attrib.Parent.Name.ToString(), attrib.Name.ToString()));
                }
            }

            string value = Common.GetInnerText(node);

            if (null == id)
            {
                messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, "String", "Id"));
            }
            else if (0 == id.Length)
            {
                messaging.Write(ErrorMessages.IllegalIdentifier(sourceLineNumbers, "String", "Id", 0));
            }

            if (!messaging.EncounteredError)
            {
                var variable = new BindVariable
                {
                    SourceLineNumbers = sourceLineNumbers,
                    Id          = id,
                    Overridable = overridable,
                    Value       = value,
                };

                Localizer.AddWixVariable(messaging, variables, variable);
            }
        }
Exemple #3
0
        public void AddVariable(SourceLineNumber sourceLineNumber, string name, string value, bool overridable)
        {
            var bindVariable = new BindVariable {
                Id = name, Value = value, Overridable = overridable, SourceLineNumbers = sourceLineNumber
            };

            if (!TryAddWixVariable(this.wixVariables, bindVariable))
            {
                this.Messaging.Write(ErrorMessages.WixVariableCollision(sourceLineNumber, name));
            }
        }
Exemple #4
0
 /// <summary>
 /// Adds a WixVariableRow to a dictionary while performing the expected override checks.
 /// </summary>
 /// <param name="variables">Dictionary of variable rows.</param>
 /// <param name="wixVariableRow">Row to add to the variables dictionary.</param>
 private static void AddWixVariable(IMessaging messaging, IDictionary <string, BindVariable> variables, BindVariable wixVariableRow)
 {
     if (!variables.TryGetValue(wixVariableRow.Id, out var existingWixVariableRow) || (existingWixVariableRow.Overridable && !wixVariableRow.Overridable))
     {
         variables[wixVariableRow.Id] = wixVariableRow;
     }
     else if (!wixVariableRow.Overridable)
     {
         messaging.Write(ErrorMessages.DuplicateLocalizationIdentifier(wixVariableRow.SourceLineNumbers, wixVariableRow.Id));
     }
 }
Exemple #5
0
        private static bool TryAddWixVariable(IDictionary <string, BindVariable> variables, BindVariable variable)
        {
            if (!variables.TryGetValue(variable.Id, out var existingWixVariableRow) || (existingWixVariableRow.Overridable && !variable.Overridable))
            {
                variables[variable.Id] = variable;
                return(true);
            }

            return(variable.Overridable);
        }
Exemple #6
0
        public static bool IsAppConstructor(this BindVariable bind)
        {
            var lambda = bind.Expression as Lambda;

            return(lambda != null && lambda.Signature.ReturnType == App);
        }