/// <summary>
        /// Returns a string describing the current reader position.
        /// </summary>
        /// <returns>A string containing the current Ember tree position.</returns>
        public string GetPositionString()
        {
            var buffer = new StringBuilder();

            foreach (var container in _containerStack)
            {
                buffer.AppendFormat("{0}:{1}/", container.Tag, BerDefinitions.GetTypeName(container.Type));
            }

            return(String.Format("{0}{1}:{2}", buffer.ToString(), Tag, BerDefinitions.GetTypeName(Type)));
        }
        object WriteLeaf <TValue>(EmberLeaf <TValue> node, XmlExportState state, string valueStr)
        {
            var writer = state.Writer;

            writer.WriteStartElement(node.Tag.ToString());

            writer.WriteStartAttribute("type");
            writer.WriteString(BerDefinitions.GetTypeName(node.BerTypeNumber));
            writer.WriteEndAttribute();

            writer.WriteValue(valueStr);

            writer.WriteEndElement();
            return(null);
        }
예제 #3
0
파일: Program.cs 프로젝트: scy/ember-plus
        void EmberToXml_ProcessNode(EmberReader reader, XmlWriter writer, int indent)
        {
            var isContainer = reader.IsContainer;
            var indentStr   = new String(' ', 2 * indent);

            writer.WriteWhitespace(indentStr);
            writer.WriteStartElement(reader.Tag.ToString());

            writer.WriteStartAttribute("type");
            writer.WriteString(BerDefinitions.GetTypeName(reader.Type));
            writer.WriteEndAttribute();

            if (isContainer)
            {
                writer.WriteWhitespace(Environment.NewLine);

                EmberToXml_Recurse(new EmberReader(reader), writer, indent + 1);

                writer.WriteWhitespace(indentStr);
            }
            else
            {
                switch (reader.Type)
                {
                case BerType.Boolean:
                    writer.WriteValue(reader.GetBoolean());
                    break;

                case BerType.Integer:
                    writer.WriteValue(reader.GetLong());
                    break;

                case BerType.Real:
                    writer.WriteValue(reader.GetReal());
                    break;

                case BerType.UTF8String:
                    writer.WriteValue(reader.GetString());
                    break;
                }
            }

            writer.WriteEndElement();
            writer.WriteWhitespace(Environment.NewLine);
        }
        object WriteContainer(EmberContainer node, XmlExportState state)
        {
            var writer = state.Writer;

            writer.WriteStartElement(node.Tag.ToString());

            writer.WriteStartAttribute("type");
            writer.WriteString(BerDefinitions.GetTypeName(node.BerTypeNumber));
            writer.WriteEndAttribute();

            if (node.Count > 0)
            {
                foreach (var child in node)
                {
                    child.Accept(this, state);
                }
            }

            writer.WriteEndElement();
            return(null);
        }
예제 #5
0
 /// <summary>
 /// Overridden for easier debugging.
 /// </summary>
 /// <returns>A string containing tag and type of this node.</returns>
 public override string ToString()
 {
     return(String.Format("Tag: {0} Type: {1}", Tag.ToString(), BerDefinitions.GetTypeName(BerTypeNumber)));
 }
예제 #6
0
        EmberNode CreateNode(string tagName, string typeName)
        {
            BerTag    tag;
            EmberNode node = null;

            if (BerTag.TryParse(tagName, out tag) &&
                typeName != null)
            {
                uint type;

                if (BerDefinitions.GetTypeFromName(typeName, true, out type))
                {
                    switch (type)
                    {
                    case BerType.Null:
                    {
                        node = new NullEmberLeaf(tag);
                        break;
                    }

                    case BerType.Boolean:
                    {
                        bool value;

                        if (bool.TryParse(_reader.ReadContentAsString(), out value))
                        {
                            node = new BooleanEmberLeaf(tag, value);
                        }

                        break;
                    }

                    case BerType.Integer:
                    {
                        long value;

                        if (long.TryParse(_reader.ReadContentAsString(), out value))
                        {
                            if ((ulong)value > int.MaxValue)
                            {
                                node = new LongEmberLeaf(tag, value);
                            }
                            else
                            {
                                node = new IntegerEmberLeaf(tag, (int)value);
                            }
                        }

                        break;
                    }

                    case BerType.Real:
                    {
                        double value;

                        if (double.TryParse(_reader.ReadContentAsString(), NumberStyles.Float, XmlExport.FormatProvider, out value))
                        {
                            node = new RealEmberLeaf(tag, value);
                        }

                        break;
                    }

                    case BerType.UTF8String:
                    {
                        node = new StringEmberLeaf(tag, _reader.ReadContentAsString());
                        break;
                    }

                    case BerType.OctetString:
                    {
                        var octets = System.Convert.FromBase64String(_reader.ReadContentAsString());
                        node = new OctetStringEmberLeaf(tag, octets);
                        break;
                    }

#pragma warning disable 618 // EmberFrame is obsolete
                    case BerType.Sequence:
                    {
                        if (tag == Legacy.EmberFrame.FrameTag)
                        {
                            node = new Legacy.EmberFrame();
                        }
                        else
                        {
                            node = new EmberSequence(tag);
                        }

                        break;
                    }
#pragma warning restore 618

                    case BerType.Set:
                    {
                        node = new EmberSet(tag);
                        break;
                    }

                    default:
                    {
                        if (_application != null)
                        {
                            node = _application.CreateNodeFromXml(type, tag, _reader);
                        }

                        if (node == null)
                        {
                            Debug.WriteLine("Unknown BER value type: " + type);

                            node = new EmberContainer(tag, null, type);
                        }

                        break;
                    }
                    }
                }
            }

            return(node);
        }