public CsvParser(TextReader reader) { Debug.Assert(reader != null, "Reader must never be null."); this.reader = reader; this.buffer = new char[BufferSize]; this.values = new ValueList(); this.valueBuilder = new ValueBuilder(this); this.valueSeparator = Constants.DefaultValueSeparator; this.valueDelimiter = Constants.DefaultValueDelimiter; this.UpdateSpecialCharacterMask(); }
/// <summary> /// Creates a BaseBuilder-derived object from a name /// </summary> /// <param name="parentBuilder">Parent builder</param> /// <param name="parameters">Load parameters</param> /// <param name="errors">Error collection</param> /// <param name="reader">XML reader</param> /// <returns>Returns the new builder, or null if there as an error</returns> public static BaseBuilder CreateBuilderFromReader( BaseBuilder parentBuilder, ComponentLoadParameters parameters, ErrorCollection errors, XmlReader reader ) { BaseBuilder result = null; try { switch ( reader.Name ) { case "null" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, null ); break; case "rb" : result = new RootBuilder( parameters, errors, reader ); break; case "object" : result = new ObjectBuilder( parameters, errors, reader, parentBuilder ); break; case "ref" : result = new ReferenceBuilder( parameters, errors, reader, parentBuilder ); break; case "asset" : result = new AssetBuilder( parameters, errors, reader, parentBuilder ); break; case "instance" : result = new InstanceBuilder( parameters, errors, reader, parentBuilder ); break; case "method" : result = new MethodBuilder( parameters, errors, reader, parentBuilder ); break; case "list" : result = new ListBuilder( parameters, errors, reader, parentBuilder ); break; case "table" : result = new DictionaryBuilder( parameters, errors, reader, parentBuilder ); break; case "type" : result = new TypeBuilder( parameters, errors, reader, parentBuilder ); break; case "template" : result = new TemplateBuilder( parameters, errors, reader, parentBuilder ); break; case "location" : string loc = reader.GetAttribute( "value" ); result = new ValueBuilder( parameters, errors,reader, parentBuilder, Locations.NewLocation( loc ) ); break; case "dictionaryEntry" : result = new DictionaryEntryBuilder( parameters, errors, reader, parentBuilder ); break; case "dynProperty" : object dynPropertyValue = parameters.Properties[ reader.GetAttribute( "value" ) ]; result = new ValueBuilder( parameters, errors, reader, parentBuilder, dynPropertyValue ); break; case "colour" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, MakeColour( reader ) ); break; case "string" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, reader.GetAttribute( "value" ) ); break; case "guid" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, new Guid( reader.GetAttribute( "value" ) ) ); break; case "bool" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, bool.Parse( reader.GetAttribute( "value" ) ) ); break; case "char" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, char.Parse( reader.GetAttribute( "value" ) ) ); break; case "byte" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, byte.Parse( reader.GetAttribute( "value" ) ) ); break; case "sbyte" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, sbyte.Parse( reader.GetAttribute( "value" ) ) ); break; case "short" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, short.Parse( reader.GetAttribute( "value" ) ) ); break; case "ushort" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, ushort.Parse( reader.GetAttribute( "value" ) ) ); break; case "int" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, int.Parse( reader.GetAttribute( "value" ) ) ); break; case "uint" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, uint.Parse( reader.GetAttribute( "value" ) ) ); break; case "long" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, long.Parse( reader.GetAttribute( "value" ) ) ); break; case "ulong" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, ulong.Parse( reader.GetAttribute( "value" ) ) ); break; case "float" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, float.Parse( reader.GetAttribute( "value" ) ) ); break; case "double" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, double.Parse( reader.GetAttribute( "value" ) ) ); break; case "timeSpan" : result = new ValueBuilder( parameters, errors, reader, parentBuilder, MakeTimeSpan( reader ) ); break; case "point3" : { float x = float.Parse( reader.GetAttribute( "x" ) ); float y = float.Parse( reader.GetAttribute( "y" ) ); float z = float.Parse( reader.GetAttribute( "z" ) ); result = new ValueBuilder( parameters, errors, reader, parentBuilder, new Point3( x, y, z ) ); break; } case "bigPoint3" : { long x = long.Parse( reader.GetAttribute( "x" ) ); long y = long.Parse( reader.GetAttribute( "y" ) ); long z = long.Parse( reader.GetAttribute( "z" ) ); result = new ValueBuilder( parameters, errors, reader, parentBuilder, new BigPoint3( x, y, z ) ); break; } case "vector2" : { float x = float.Parse( reader.GetAttribute( "x" ) ); float y = float.Parse( reader.GetAttribute( "y" ) ); result = new ValueBuilder( parameters, errors, reader, parentBuilder, new Vector2( x, y ) ); break; } case "vector3" : { float x = float.Parse( reader.GetAttribute( "x" ) ); float y = float.Parse( reader.GetAttribute( "y" ) ); float z = float.Parse( reader.GetAttribute( "z" ) ); result = new ValueBuilder( parameters, errors, reader, parentBuilder, new Vector3( x, y, z ) ); break; } case "point2" : case "quat" : { errors.Add( reader, "Element is not yet supported", reader.Name ); reader.Skip( ); break; } default : { // Interpret name as object type string typeName = reader.Name; result = new ObjectBuilder( parameters, errors, reader, parentBuilder, typeName ); break; } } } catch ( Exception ex ) { errors.Add( reader, ex, "Builder created from element \"{0}\" threw an exception", reader.Name ); reader.Skip( ); } if ( result != null ) { string name = reader.Name; try { result.ReadChildBuilders( reader ); } catch ( Exception ex ) { errors.Add( reader, ex, "Exception thrown while reading children from builder \"{0}\"", name ); } } return result; }