Skip to content

Commit b95e02f

Browse files
committed
Simplify
1 parent cff9230 commit b95e02f

File tree

4 files changed

+53
-71
lines changed

4 files changed

+53
-71
lines changed

ValveKeyValue/ValveKeyValue.Test/Test Data/TextKV3/types.kv3

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ this is a multi
2525
line
2626
key
2727
""" = "multi line key parsed"
28+
empty.string = ""
2829
}

ValveKeyValue/ValveKeyValue.Test/Test Data/TextKV3/types_serialized.kv3

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
key_with._various.separators = "test"
2222
"quoted key with : {} terminators" = "test quoted key"
2323
"this is a multi\nline\nkey" = "multi line key parsed"
24+
empty.string = ""
2425
multiLineString = """
2526
hello
2627
world

ValveKeyValue/ValveKeyValue.Test/TextKV3/BasicKV3TestCases.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,9 @@ public void DeserializesBasicTypes()
181181

182182
Assert.That(data["this is a multi\nline\nkey"].ValueType, Is.EqualTo(KVValueType.String));
183183
Assert.That((string)data["this is a multi\nline\nkey"], Is.EqualTo("multi line key parsed"));
184+
185+
Assert.That(data["empty.string"].ValueType, Is.EqualTo(KVValueType.String));
186+
Assert.That((string)data["empty.string"], Is.EqualTo(string.Empty));
184187
});
185188
}
186189
}

ValveKeyValue/ValveKeyValue/Deserialization/KeyValues3/KV3TokenReader.cs

Lines changed: 48 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,42 @@ public void Dispose()
7474
}
7575
}
7676

77+
KVToken ReadAssignment()
78+
{
79+
ReadChar(Assignment);
80+
return new KVToken(KVTokenType.Assignment);
81+
}
82+
83+
KVToken ReadComma()
84+
{
85+
ReadChar(Comma);
86+
return new KVToken(KVTokenType.Comma);
87+
}
88+
89+
KVToken ReadArrayStart()
90+
{
91+
ReadChar(ArrayStart);
92+
return new KVToken(KVTokenType.ArrayStart);
93+
}
94+
95+
KVToken ReadArrayEnd()
96+
{
97+
ReadChar(ArrayEnd);
98+
return new KVToken(KVTokenType.ArrayEnd);
99+
}
100+
101+
KVToken ReadObjectStart()
102+
{
103+
ReadChar(ObjectStart);
104+
return new KVToken(KVTokenType.ObjectStart);
105+
}
106+
107+
KVToken ReadObjectEnd()
108+
{
109+
ReadChar(ObjectEnd);
110+
return new KVToken(KVTokenType.ObjectEnd);
111+
}
112+
77113
KVToken ReadStringOrIdentifier()
78114
{
79115
SwallowWhitespace();
@@ -97,18 +133,6 @@ KVToken ReadStringOrIdentifier()
97133
return new KVToken(type, token);
98134
}
99135

100-
KVToken ReadAssignment()
101-
{
102-
ReadChar(Assignment);
103-
return new KVToken(KVTokenType.Assignment);
104-
}
105-
106-
KVToken ReadComma()
107-
{
108-
ReadChar(Comma);
109-
return new KVToken(KVTokenType.Comma);
110-
}
111-
112136
KVToken ReadBinaryBlob()
113137
{
114138
ReadChar(BinaryBlobMarker);
@@ -136,30 +160,6 @@ KVToken ReadBinaryBlob()
136160
return new KVToken(KVTokenType.BinaryBlob, sb.ToString());
137161
}
138162

139-
KVToken ReadArrayStart()
140-
{
141-
ReadChar(ArrayStart);
142-
return new KVToken(KVTokenType.ArrayStart);
143-
}
144-
145-
KVToken ReadArrayEnd()
146-
{
147-
ReadChar(ArrayEnd);
148-
return new KVToken(KVTokenType.ArrayEnd);
149-
}
150-
151-
KVToken ReadObjectStart()
152-
{
153-
ReadChar(ObjectStart);
154-
return new KVToken(KVTokenType.ObjectStart);
155-
}
156-
157-
KVToken ReadObjectEnd()
158-
{
159-
ReadChar(ObjectEnd);
160-
return new KVToken(KVTokenType.ObjectEnd);
161-
}
162-
163163
public KVToken ReadHeader()
164164
{
165165
var str = ReadToken();
@@ -254,7 +254,6 @@ KVToken ReadComment()
254254
var next = Next();
255255
var isMultiline = false;
256256

257-
// TODO: Read /* */ comments
258257
if (next == '*')
259258
{
260259
isMultiline = true;
@@ -324,7 +323,7 @@ char Next()
324323
next = textReader.Read();
325324
}
326325

327-
if (next == -1)
326+
if (IsEndOfFile(next))
328327
{
329328
throw new EndOfStreamException();
330329
}
@@ -454,6 +453,7 @@ string ReadQuotedStringRaw(char quotationMark)
454453
return string.Empty;
455454
}
456455
}
456+
457457
if (isMultiline)
458458
{
459459
var escapeNext = false;
@@ -471,37 +471,19 @@ string ReadQuotedStringRaw(char quotationMark)
471471

472472
if (!escapeNext && next == '\n')
473473
{
474-
sb.Append(next);
474+
var a = Next();
475+
var b = Next();
476+
var c = Next();
475477

476-
next = Next();
477-
478-
// TODO: This is absolutely terrible
479-
if (next == '"')
480-
{
481-
next = Next();
482-
483-
if (next == '"')
484-
{
485-
next = Next();
486-
487-
if (next == '"')
488-
{
489-
break;
490-
}
491-
else
492-
{
493-
sb.Append(next);
494-
}
495-
}
496-
else
497-
{
498-
sb.Append(next);
499-
}
500-
}
501-
else
478+
if (a == '"' && b == '"' && c == '"')
502479
{
503-
sb.Append(next);
480+
break;
504481
}
482+
483+
sb.Append(next);
484+
sb.Append(a);
485+
sb.Append(b);
486+
sb.Append(c);
505487
}
506488
else
507489
{
@@ -511,11 +493,6 @@ string ReadQuotedStringRaw(char quotationMark)
511493
}
512494
}
513495

514-
if (sb.Length > 0 && sb[^1] == '\n')
515-
{
516-
sb.Remove(sb.Length - 1, 1);
517-
}
518-
519496
if (sb.Length > 0 && sb[^1] == '\r')
520497
{
521498
sb.Remove(sb.Length - 1, 1);

0 commit comments

Comments
 (0)