コード例 #1
0
        public static string SerializeToText(MessageCommandModel entry)
        {
            if (entry.Command == MessageCommand.End)
            {
                return(string.Empty);
            }
            if (entry.Command == MessageCommand.PrintText)
            {
                return(entry.Text);
            }
            if (entry.Command == MessageCommand.PrintComplex)
            {
                return($"{{{entry.Text}}}");
            }
            if (entry.Command == MessageCommand.Tabulation)
            {
                return("\t");
            }

            if (!_serializer.TryGetValue(entry.Command, out var serializeModel))
            {
                throw new NotImplementedException($"The command {entry.Command} serialization is not implemented yet.");
            }

            Debug.Assert(serializeModel != null, $"BUG: {nameof(serializeModel)} should never be null");

            if (serializeModel.Serializer != null)
            {
                return($"{{:{serializeModel.Name} {serializeModel.Serializer(entry)}}}");
            }
            return($"{{:{serializeModel.Name}}}");
        }
コード例 #2
0
ファイル: MsgSerializer.Xml.cs プロジェクト: xorllc/OpenKh
        private static XNode GetDefaultSerializer(MessageCommandModel msgCmd, SerializerModel model)
        {
            if (model.Serializer == null)
            {
                return(null);
            }

            var attribute = new XAttribute("value", model.Serializer(msgCmd));

            return(attribute != null ? new XElement(model.Name, attribute) : new XElement(model.Name));
        }
コード例 #3
0
        public static IEnumerable <MessageCommandModel> DeserializeText(string value)
        {
            var entries    = new List <MessageCommandModel>();
            var strBuilder = new StringBuilder();

            var i = 0;

            while (i < value.Length)
            {
                MessageCommandModel messageCommand;

                var ch = value[i++];
                if (ch == '\t')
                {
                    messageCommand = new MessageCommandModel
                    {
                        Command = MessageCommand.Tabulation,
                    };
                }
                else if (ch == '\r')
                {
                    // ignore
                    messageCommand = null;
                }
                else if (ch == '{')
                {
                    var closeBracketIndex = value.Substring(i).IndexOf('}') + i;
                    if (closeBracketIndex < i)
                    {
                        throw new ParseException(value, i, "Expected '}'");
                    }

                    if (value[i] == ':')
                    {
                        messageCommand = GetCommandModel(value.Substring(i + 1, closeBracketIndex - i - 1));
                    }
                    else
                    {
                        messageCommand = GetPrintComplexCommandModel(value.Substring(i, closeBracketIndex - i));
                    }

                    i = closeBracketIndex + 1;
                }
                else
                {
                    messageCommand = null;
                    strBuilder.Append(ch);
                }

                if (messageCommand != null)
                {
                    if (strBuilder.Length > 0)
                    {
                        entries.Add(new MessageCommandModel
                        {
                            Command = MessageCommand.PrintText,
                            Text    = strBuilder.ToString()
                        });
                        strBuilder.Clear();
                    }

                    entries.Add(messageCommand);
                }
            }

            if (strBuilder.Length > 0)
            {
                entries.Add(new MessageCommandModel
                {
                    Command = MessageCommand.PrintText,
                    Text    = strBuilder.ToString()
                });
            }

            entries.Add(new MessageCommandModel
            {
                Command = MessageCommand.End,
            });

            return(entries);
        }
コード例 #4
0
ファイル: MsgSerializer.cs プロジェクト: osdanova/OpenKh
 private static string ToPosition(MessageCommandModel command) =>
 $"{command.PositionX},{command.PositionY}";