From c87c6afca2e74f2aa2524612ef528c280a38ecea Mon Sep 17 00:00:00 2001 From: Benjamin Popp Date: Wed, 6 May 2020 21:08:52 -0500 Subject: [PATCH] Fix table tool: streams should not have leading '+' on each line --- src/HexManiac.Core/Models/Runs/TableStreamRun.cs | 10 +++++++++- src/HexManiac.Tests/StreamTests.cs | 6 +++--- src/HexManiac.Tests/TableTests.cs | 8 ++++---- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/HexManiac.Core/Models/Runs/TableStreamRun.cs b/src/HexManiac.Core/Models/Runs/TableStreamRun.cs index d42aa8e2..9f8c14af 100644 --- a/src/HexManiac.Core/Models/Runs/TableStreamRun.cs +++ b/src/HexManiac.Core/Models/Runs/TableStreamRun.cs @@ -94,7 +94,15 @@ namespace HavenSoft.HexManiac.Core.Models.Runs { public string SerializeRun() { var builder = new StringBuilder(); AppendTo(model, builder, Start, ElementLength * ElementCount); - return builder.ToString(); + var lines = builder.ToString().Split(Environment.NewLine); + + // AppendTo is used in copy/paste scenarios, and includes the required '+' to work in that case. + // strip the '+', as it's not needed for stream serialization, which uses newlines instead. + return string.Join(Environment.NewLine, lines.Select(line => { + if (line.Length == 0) return line; + if (line[0] != ArrayRun.ExtendArray) return line; + return line.Substring(1); + }).ToArray()); } public IStreamRun DeserializeRun(string content, ModelDelta token) { diff --git a/src/HexManiac.Tests/StreamTests.cs b/src/HexManiac.Tests/StreamTests.cs index 95b82c8f..3827690a 100644 --- a/src/HexManiac.Tests/StreamTests.cs +++ b/src/HexManiac.Tests/StreamTests.cs @@ -66,9 +66,9 @@ namespace HavenSoft.HexManiac.Tests { ViewPort.Edit("00 01 02 03 FF ^bob CC @00 ^table[value.]!FF "); ViewPort.Tools.SelectedIndex = ViewPort.Tools.IndexOf(ViewPort.Tools.StringTool); Assert.Equal(@"0 -+1 -+2 -+3", ViewPort.Tools.StringTool.Content); +1 +2 +3", ViewPort.Tools.StringTool.Content); ViewPort.Tools.StringTool.Content = @"0 1 diff --git a/src/HexManiac.Tests/TableTests.cs b/src/HexManiac.Tests/TableTests.cs index 05afd132..de3f4450 100644 --- a/src/HexManiac.Tests/TableTests.cs +++ b/src/HexManiac.Tests/TableTests.cs @@ -257,10 +257,10 @@ namespace HavenSoft.HexManiac.Tests { // precondition: the format is as expected Assert.Equal(@"255 -+255 -+255 -+255 -+255", segment.Content); +255 +255 +255 +255", segment.Content); // Act: change the content in a way that would change the length of a more dynamic stream. segment.Content = "12";