/// <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); }
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); }
/// <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))); }
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); }