Пример #1
0
 public CK2Node(CK2NodeTypes type, object value)
 {
     Type  = type;
     Value = value;
 }
        private void EndToken(CK2NodeTypes type)
        {
            var trimmed = Token.Trim();

            Token = string.Empty;

            if (type == CK2NodeTypes.Assignment || type == CK2NodeTypes.GreaterThan || type == CK2NodeTypes.GreaterThanOrEqual || type == CK2NodeTypes.LessThan || type == CK2NodeTypes.LessThanOrEqual)
            {
                var previous = Nodes.LastOrDefault();

                if (previous != null)
                {
                    if (type == CK2NodeTypes.Assignment)
                    {
                        if (previous.Type == CK2NodeTypes.GreaterThan)
                        {
                            previous.Type = CK2NodeTypes.GreaterThanOrEqual;
                        }
                        else if (previous.Type == CK2NodeTypes.LessThan)
                        {
                            previous.Type = CK2NodeTypes.LessThanOrEqual;
                        }
                    }

                    if (string.IsNullOrEmpty(trimmed))
                    {
                        if (previous.Type == CK2NodeTypes.Value)
                        {
                            previous.Type  = type;
                            previous.Value = previous.Value.ToString().Substring(1);
                        }

                        return;
                    }
                }

                Nodes.Add(new CK2Node(type, trimmed));
                return;
            }

            if (!string.IsNullOrEmpty(trimmed))
            {
                if (trimmed.StartsWith("\""))
                {
                    Nodes.Add(new CK2Node(CK2NodeTypes.Value, trimmed.Substring(1, trimmed.Length - 2)));
                }
                else
                {
                    float value;

                    if (float.TryParse(trimmed, out value))
                    {
                        if (trimmed.Contains("."))
                        {
                            Nodes.Add(new CK2Node(CK2NodeTypes.Value, value));
                        }
                        else
                        {
                            Nodes.Add(new CK2Node(CK2NodeTypes.Value, int.Parse(trimmed)));
                        }
                    }
                    else
                    {
                        if (type == CK2NodeTypes.Assignment)
                        {
                            Nodes.Add(new CK2Node(CK2NodeTypes.Value, trimmed));
                        }
                        else
                        {
                            if (trimmed == "yes")
                            {
                                Nodes.Add(new CK2Node(CK2NodeTypes.Value, true));
                            }
                            else if (trimmed == "no")
                            {
                                Nodes.Add(new CK2Node(CK2NodeTypes.Value, false));
                            }
                            else
                            {
                                Nodes.Add(new CK2Node(CK2NodeTypes.Value, "@" + trimmed));
                            }
                        }
                    }
                }
            }

            if (type == CK2NodeTypes.Whitespace)
            {
                return;
            }

            Nodes.Add(new CK2Node(type));
        }
Пример #3
0
 public CK2Node(CK2NodeTypes type) : this(type, string.Empty)
 {
 }