Skip to content

Commit

Permalink
Merge pull request #93 from hadashiA/ku/fix-emitter-matrix
Browse files Browse the repository at this point in the history
Fix a bug to emit flow-sequence in block-mapping value
  • Loading branch information
hadashiA authored Feb 23, 2024
2 parents fef8dd7 + d54ccf6 commit e40a614
Show file tree
Hide file tree
Showing 5 changed files with 249 additions and 53 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/update-version-number.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ jobs:
- name: Update Directory.Build.props ${{ steps.configure.outputs.git-tag }}
run: |
ruby -i -pe 'gsub(%r{(<PackageVersion>)[\d\.]+(</PackageVersion>)}, %q{\1${{ steps.configure.outputs.git-tag }}\2})' Directory.Build.props
ruby -i -pe 'gsub(%r{(<PackageVersion>)([\d\.]+)(</PackageVersion>)}, %q{\1${{ steps.configure.outputs.git-tag }}\3})' Directory.Build.props
- name: Update README.md ${{ steps.configure.outputs.git-tag }}
run: |
Expand Down
107 changes: 107 additions & 0 deletions VYaml.Tests/Emitter/Utf8YamlEmitterTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,113 @@ public void BlockSequence_Nested1()
));
}

[Test]
public void BlockSequence_Nested2()
{
var emitter = CreateEmitter();
emitter.BeginMapping(MappingStyle.Block);
{
emitter.WriteString("matrix");
emitter.BeginSequence(SequenceStyle.Block);
{
emitter.BeginSequence(SequenceStyle.Flow);
{
emitter.WriteInt32(100);
emitter.WriteInt32(200);
}
emitter.EndSequence();

emitter.BeginSequence(SequenceStyle.Flow);
{
emitter.WriteInt32(300);
emitter.WriteInt32(400);
}
emitter.EndSequence();
}
emitter.EndSequence();
}
emitter.EndMapping();

Assert.That(ToString(in emitter), Is.EqualTo(
"matrix: \n" +
"- [100, 200]\n" +
"- [300, 400]\n"
));
}

[Test]
public void BlockSequence_Nested3()
{
var emitter = CreateEmitter();
emitter.BeginMapping(MappingStyle.Block);
{
emitter.WriteString("key1");
emitter.BeginMapping(MappingStyle.Block);
{
emitter.WriteString("matrix");
emitter.BeginSequence(SequenceStyle.Block);
{
emitter.BeginSequence(SequenceStyle.Flow);
{
emitter.WriteInt32(100);
emitter.WriteInt32(200);
}
emitter.EndSequence();

emitter.BeginSequence(SequenceStyle.Flow);
{
emitter.WriteInt32(300);
emitter.WriteInt32(400);
}
emitter.EndSequence();
}
emitter.EndSequence();
}
emitter.EndMapping();
}
emitter.EndMapping();

Assert.That(ToString(in emitter), Is.EqualTo(
"key1: \n" +
" matrix: \n" +
" - [100, 200]\n" +
" - [300, 400]\n"
));
}

[Test]
public void BlockSequence_Nested4()
{
var emitter = CreateEmitter();
emitter.BeginSequence(SequenceStyle.Block);
{
emitter.BeginSequence(SequenceStyle.Block);
{
emitter.BeginSequence(SequenceStyle.Flow);
{
emitter.WriteInt32(100);
emitter.WriteInt32(200);
}
emitter.EndSequence();

emitter.BeginSequence(SequenceStyle.Flow);
{
emitter.WriteInt32(300);
emitter.WriteInt32(400);
}
emitter.EndSequence();
}
emitter.EndSequence();
}
emitter.EndSequence();

Assert.That(ToString(in emitter), Is.EqualTo(
"- \n" +
" - [100, 200]\n" +
" - [300, 400]\n"
));
}

[Test]
public void BlockSequence_NestedDeeply()
{
Expand Down
107 changes: 107 additions & 0 deletions VYaml.Unity/Assets/Tests/Emitter/Utf8YamlEmitterTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,113 @@ public void BlockSequence_Nested1()
));
}

[Test]
public void BlockSequence_Nested2()
{
var emitter = CreateEmitter();
emitter.BeginMapping(MappingStyle.Block);
{
emitter.WriteString("matrix");
emitter.BeginSequence(SequenceStyle.Block);
{
emitter.BeginSequence(SequenceStyle.Flow);
{
emitter.WriteInt32(100);
emitter.WriteInt32(200);
}
emitter.EndSequence();

emitter.BeginSequence(SequenceStyle.Flow);
{
emitter.WriteInt32(300);
emitter.WriteInt32(400);
}
emitter.EndSequence();
}
emitter.EndSequence();
}
emitter.EndMapping();

Assert.That(ToString(in emitter), Is.EqualTo(
"matrix: \n" +
"- [100, 200]\n" +
"- [300, 400]\n"
));
}

[Test]
public void BlockSequence_Nested3()
{
var emitter = CreateEmitter();
emitter.BeginMapping(MappingStyle.Block);
{
emitter.WriteString("key1");
emitter.BeginMapping(MappingStyle.Block);
{
emitter.WriteString("matrix");
emitter.BeginSequence(SequenceStyle.Block);
{
emitter.BeginSequence(SequenceStyle.Flow);
{
emitter.WriteInt32(100);
emitter.WriteInt32(200);
}
emitter.EndSequence();

emitter.BeginSequence(SequenceStyle.Flow);
{
emitter.WriteInt32(300);
emitter.WriteInt32(400);
}
emitter.EndSequence();
}
emitter.EndSequence();
}
emitter.EndMapping();
}
emitter.EndMapping();

Assert.That(ToString(in emitter), Is.EqualTo(
"key1: \n" +
" matrix: \n" +
" - [100, 200]\n" +
" - [300, 400]\n"
));
}

[Test]
public void BlockSequence_Nested4()
{
var emitter = CreateEmitter();
emitter.BeginSequence(SequenceStyle.Block);
{
emitter.BeginSequence(SequenceStyle.Block);
{
emitter.BeginSequence(SequenceStyle.Flow);
{
emitter.WriteInt32(100);
emitter.WriteInt32(200);
}
emitter.EndSequence();

emitter.BeginSequence(SequenceStyle.Flow);
{
emitter.WriteInt32(300);
emitter.WriteInt32(400);
}
emitter.EndSequence();
}
emitter.EndSequence();
}
emitter.EndSequence();

Assert.That(ToString(in emitter), Is.EqualTo(
"- \n" +
" - [100, 200]\n" +
" - [300, 400]\n"
));
}

[Test]
public void BlockSequence_NestedDeeply()
{
Expand Down
43 changes: 17 additions & 26 deletions VYaml.Unity/Assets/VYaml/Runtime/Emitter/Utf8YamlEmitter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -142,9 +142,7 @@ public void BeginSequence(SequenceStyle style = SequenceStyle.Block)
{
var output = writer.GetSpan(currentIndentLevel * options.IndentWidth + BlockSequenceEntryHeader.Length + 1);
var offset = 0;
WriteIndent(output, ref offset);
BlockSequenceEntryHeader.CopyTo(output[offset..]);
offset += BlockSequenceEntryHeader.Length;
WriteBlockSequenceEntryHeader(output, ref offset);
output[offset++] = YamlCodes.FlowSequenceStart;
writer.Advance(offset);
break;
Expand Down Expand Up @@ -299,9 +297,7 @@ public void BeginMapping(MappingStyle style = MappingStyle.Block)
{
var output = writer.GetSpan(currentIndentLevel * options.IndentWidth + BlockSequenceEntryHeader.Length + FlowMappingHeader.Length + GetTagLength() + 1);
var offset = 0;
WriteIndent(output, ref offset);
BlockSequenceEntryHeader.CopyTo(output[offset..]);
offset += BlockSequenceEntryHeader.Length;
WriteBlockSequenceEntryHeader(output, ref offset);
if (TryWriteTag(output, ref offset))
{
output[offset++] = YamlCodes.Space;
Expand Down Expand Up @@ -698,21 +694,32 @@ void WriteRaw1(byte value)

[MethodImpl(MethodImplOptions.AggressiveInlining)]
void WriteBlockSequenceEntryHeader()
{
var output = writer.GetSpan(BlockSequenceEntryHeader.Length + currentIndentLevel * options.IndentWidth + 2);
var offset = 0;
WriteBlockSequenceEntryHeader(output, ref offset);
writer.Advance(offset);
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
void WriteBlockSequenceEntryHeader(Span<byte> output, ref int offset)
{
if (IsFirstElement)
{
switch (PreviousState)
{
case EmitState.BlockSequenceEntry:
WriteRaw1(YamlCodes.Lf);
output[offset++] = YamlCodes.Lf;
IncreaseIndent();
break;
case EmitState.BlockMappingValue:
WriteRaw1(YamlCodes.Lf);
output[offset++] = YamlCodes.Lf;
break;
}
}
WriteRaw(BlockSequenceEntryHeader, true, false);
WriteIndent(output, ref offset);
BlockSequenceEntryHeader.CopyTo(output[offset..]);
offset += BlockSequenceEntryHeader.Length;
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
Expand Down Expand Up @@ -751,23 +758,7 @@ void BeginScalar(Span<byte> output, ref int offset)
{
case EmitState.BlockSequenceEntry:
{
// first nested element
if (IsFirstElement)
{
switch (PreviousState)
{
case EmitState.BlockSequenceEntry:
IncreaseIndent();
output[offset++] = YamlCodes.Lf;
break;
case EmitState.BlockMappingValue:
output[offset++] = YamlCodes.Lf;
break;
}
}
WriteIndent(output, ref offset);
BlockSequenceEntryHeader.CopyTo(output[offset..]);
offset += BlockSequenceEntryHeader.Length;
WriteBlockSequenceEntryHeader(output, ref offset);

if (TryWriteTag(output, ref offset))
{
Expand Down
Loading

0 comments on commit e40a614

Please sign in to comment.