Skip to content

Commit 0bcbae6

Browse files
committed
Improve formatting flags and binary blobs
1 parent 8da2da2 commit 0bcbae6

File tree

5 files changed

+108
-12
lines changed

5 files changed

+108
-12
lines changed

ValveKeyValue/ValveKeyValue.Test/Test Data/TextKV3/array_formatting.kv3

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,13 @@
2222
twelve_floats = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2]
2323
matrix_as_vectors = [[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [0.5, -2.75, 10.0, 1.0]]
2424
empty_arrays = [[], [], []]
25+
flagged_array_element = [resource:[1, 2, 3], panorama:[4, 5]]
26+
large_blob_in_array = [#[00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20]]
27+
multiple_blobs_in_array = [#[AA BB], #[CC DD EE], #[FF]]
28+
mixed_blobs_and_values = [1, #[AA BB], "hello", #[CC]]
29+
flagged_long_array_in_array = [resource:[1, 2, 3, 4, 5], panorama:[6, 7, 8, 9, 10, 11, 12, 13]]
30+
flagged_object_in_array = [resource:{key = "val"}, panorama:{other = 123}]
31+
large_and_small_blobs = [#[11], #[00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20], #[FF]]
32+
flagged_blobs_in_array = [resource:#[AA BB], panorama:#[CC DD EE FF]]
33+
flagged_large_blob_in_array = [resource:#[00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20]]
2534
}

ValveKeyValue/ValveKeyValue.Test/Test Data/TextKV3/array_formatting_serialized.kv3

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,74 @@
9393
[ ],
9494
[ ],
9595
]
96+
flagged_array_element =
97+
[
98+
resource:[ 1, 2, 3 ],
99+
panorama:[ 4, 5 ],
100+
]
101+
large_blob_in_array =
102+
[
103+
#[
104+
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
105+
20
106+
],
107+
]
108+
multiple_blobs_in_array =
109+
[
110+
#[ AA BB ],
111+
#[ CC DD EE ],
112+
#[ FF ],
113+
]
114+
mixed_blobs_and_values =
115+
[
116+
1,
117+
#[ AA BB ],
118+
"hello",
119+
#[ CC ],
120+
]
121+
flagged_long_array_in_array =
122+
[
123+
resource:
124+
[
125+
1, 2, 3, 4,
126+
5,
127+
],
128+
panorama:
129+
[
130+
6, 7, 8, 9,
131+
10, 11, 12, 13,
132+
],
133+
]
134+
flagged_object_in_array =
135+
[
136+
resource:
137+
{
138+
key = "val"
139+
},
140+
panorama:
141+
{
142+
other = 123
143+
},
144+
]
145+
large_and_small_blobs =
146+
[
147+
#[ 11 ],
148+
#[
149+
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
150+
20
151+
],
152+
#[ FF ],
153+
]
154+
flagged_blobs_in_array =
155+
[
156+
resource:#[ AA BB ],
157+
panorama:#[ CC DD EE FF ],
158+
]
159+
flagged_large_blob_in_array =
160+
[
161+
resource:#[
162+
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
163+
20
164+
],
165+
]
96166
}

ValveKeyValue/ValveKeyValue.Test/Test Data/TextKV3/binary_blobs.kv3

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@
88
blob33 = #[ 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 ]
99
blob64 = #[ 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F ]
1010
blob100 = #[ 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 ]
11+
flaggedLargeBlob = resource:#[ 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 ]
1112
}

ValveKeyValue/ValveKeyValue.Test/Test Data/TextKV3/binary_blobs_serialized.kv3

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,9 @@
2222
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
2323
60 61 62 63
2424
]
25+
flaggedLargeBlob = resource:
26+
#[
27+
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
28+
20
29+
]
2530
}

ValveKeyValue/ValveKeyValue/Serialization/KeyValues3/KV3TextSerializer.cs

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ public void OnArrayStart(string name, KVFlag flag, int elementCount, bool allSim
7070
else
7171
{
7272
// After "key = " or "key = flag:", put bracket on next line.
73-
// TODO: Valve also puts bracket on next line for flagged array elements (name == null, flag != None).
74-
if (name != null)
73+
// Also for flagged array elements.
74+
if (name != null || flag != KVFlag.None)
7575
{
7676
writer.WriteLine();
7777
WriteIndentation();
@@ -88,6 +88,9 @@ public void OnArrayValue(KVValue value)
8888
var (isShort, allSimple, index, count) = context.Pop()!.Value;
8989
var isLast = index == count - 1;
9090

91+
// Push back before WriteValue so nested code can see the array context
92+
context.Push((isShort, allSimple, index + 1, count));
93+
9194
if (isShort)
9295
{
9396
WriteValue(value);
@@ -116,8 +119,6 @@ public void OnArrayValue(KVValue value)
116119
writer.Write(',');
117120
writer.WriteLine();
118121
}
119-
120-
context.Push((isShort, allSimple, index + 1, count));
121122
}
122123

123124
public void OnArrayEnd()
@@ -160,8 +161,8 @@ void WriteStartObject(string name, KVFlag flag)
160161
WriteFlag(flag);
161162

162163
// After "key = " or "key = flag:", put bracket on next line.
163-
// TODO: Valve also puts bracket on next line for flagged object elements (name == null, flag != None).
164-
if (name != null && indentation > 0)
164+
// Also for flagged object elements.
165+
if ((name != null || flag != KVFlag.None) && indentation > 0)
165166
{
166167
writer.WriteLine();
167168
WriteIndentation();
@@ -317,12 +318,22 @@ void WriteBinaryBlob(KVBinaryBlob value)
317318
}
318319
else
319320
{
320-
// Large blobs are written multiline with 32 bytes per line
321-
writer.WriteLine();
322-
WriteIndentation();
323-
writer.Write('#');
324-
writer.Write('[');
325-
writer.WriteLine();
321+
// Large blobs are written multiline with 32 bytes per line.
322+
// In array context, the caller already wrote indentation, so just open inline.
323+
// In object context, put #[ on a new indented line.
324+
if (IsInArray)
325+
{
326+
writer.Write("#[ ");
327+
writer.WriteLine();
328+
}
329+
else
330+
{
331+
writer.WriteLine();
332+
WriteIndentation();
333+
writer.Write('#');
334+
writer.Write('[');
335+
writer.WriteLine();
336+
}
326337
indentation++;
327338
WriteIndentation();
328339

0 commit comments

Comments
 (0)