상속: System.IO.StreamReader
예제 #1
0
		internal void RecursiveLoadFromBuffer(KvTextReader kvr)
		{
			bool wasQuoted;
			bool wasConditional;

			while (true)
			{
				// bool bAccepted = true;

				// get the key name
				var name = kvr.ReadToken(out wasQuoted, out wasConditional);

				if (string.IsNullOrEmpty(name))
				{
					throw new Exception("RecursiveLoadFromBuffer: got EOF or empty keyname");
				}

				if (name.StartsWith("}") && !wasQuoted)        // top level closed, stop reading
					break;

				var dat = new KeyValue(name, null) {Children = new List<KeyValue>()};
				Children.Add(dat);

				// get the value
				string value = kvr.ReadToken(out wasQuoted, out wasConditional);

				if (wasConditional && value != null)
				{
					// bAccepted = ( value == "[$WIN32]" );
					value = kvr.ReadToken(out wasQuoted, out wasConditional);
				}

				if (value == null)
					throw new Exception("RecursiveLoadFromBuffer:  got NULL key");

				if (value.StartsWith("}") && !wasQuoted)
					throw new Exception("RecursiveLoadFromBuffer:  got } in key");

				if (value.StartsWith("{") && !wasQuoted)
				{
					dat.RecursiveLoadFromBuffer(kvr);
				}
				else
				{
					if (wasConditional)
					{
						throw new Exception("RecursiveLoadFromBuffer:  got conditional between key and value");
					}

					dat.Value = value;
					// blahconditionalsdontcare
				}
			}
		}