diff --git a/Filtration.Parser.Tests/Services/TestItemFilterScriptTranslator.cs b/Filtration.Parser.Tests/Services/TestItemFilterScriptTranslator.cs index 799ec2f..9bca5bb 100644 --- a/Filtration.Parser.Tests/Services/TestItemFilterScriptTranslator.cs +++ b/Filtration.Parser.Tests/Services/TestItemFilterScriptTranslator.cs @@ -232,33 +232,6 @@ namespace Filtration.Parser.Tests.Services Assert.AreEqual(expectedOutput, result); } - [Test] - public void TranslateStringToItemFilterScript_SectionDirectlyBeforeBlockWithoutDescription_ReturnsCorrectObject() - { - // Arrange - var testInputScript = "# My Script" + Environment.NewLine + - Environment.NewLine + - "# Section: Chance Bases" + Environment.NewLine + - "Show" + Environment.NewLine + - " BaseType \"Lapis Amulet\" \"Amber Amulet\"" + Environment.NewLine + - " SetBorderColor 255 0 255" + Environment.NewLine + - " SetFontSize 25"; - - var blockTranslator = new ItemFilterBlockTranslator(_testUtility.MockBlockGroupHierarchyBuilder.Object); - var translator = new ItemFilterScriptTranslator(blockTranslator, - _testUtility.MockBlockGroupHierarchyBuilder.Object); - - // Act - var result = translator.TranslateStringToItemFilterScript(testInputScript); - - // Assert - Assert.AreEqual(2, result.ItemFilterBlocks.Count); - var block = result.ItemFilterBlocks.OfType().First(l => l.GetType() != typeof(ItemFilterSection)); - Assert.AreEqual(4, block.BlockItems.Count); - var baseTypeItem = block.BlockItems.OfType().First(); - Assert.AreEqual(2, baseTypeItem.Items.Count); - } - [Test] public void TranslateStringToItemFilterScript_OneLineDescriptionNoBlockDescriptionAddsDescriptionToScript() { diff --git a/Filtration.Parser/Services/ItemFilterScriptTranslator.cs b/Filtration.Parser/Services/ItemFilterScriptTranslator.cs index 870f94d..e420c33 100644 --- a/Filtration.Parser/Services/ItemFilterScriptTranslator.cs +++ b/Filtration.Parser/Services/ItemFilterScriptTranslator.cs @@ -27,6 +27,7 @@ namespace Filtration.Parser.Services internal enum ItemFilterBlockBoundaryType { + ScriptDescription, ItemFilterBlock, CommentBlock } @@ -119,7 +120,7 @@ namespace Filtration.Parser.Services var lines = Regex.Split(inputString, "\r\n|\r|\n"); // Process the script header - for (var i = 0; i < conditionBoundaries.First.Value.StartLine; i++) + for (var i = 0; i < conditionBoundaries.Skip(1).First().StartLine; i++) { if (lines[i].StartsWith("#")) { @@ -136,6 +137,11 @@ namespace Filtration.Parser.Services // and add that object to the ItemFilterBlocks list for (var boundary = conditionBoundaries.First; boundary != null; boundary = boundary.Next) { + if (boundary.Value.BoundaryType == ItemFilterBlockBoundaryType.ScriptDescription) + { + continue; + } + var begin = boundary.Value.StartLine; var end = boundary.Next?.Value.StartLine ?? lines.Length; var block = new string[end - begin]; @@ -162,7 +168,7 @@ namespace Filtration.Parser.Services var previousLine = string.Empty; var currentLine = -1; - var currentItemFilterBlockBoundary = new ItemFilterBlockBoundary(1, ItemFilterBlockBoundaryType.CommentBlock); + var currentItemFilterBlockBoundary = new ItemFilterBlockBoundary(0, ItemFilterBlockBoundaryType.ScriptDescription); foreach (var line in new LineReader(() => new StringReader(inputString))) { @@ -177,14 +183,14 @@ namespace Filtration.Parser.Services // A line starting with a comment when we're inside a ItemFilterBlock boundary represents the end of that block // as ItemFilterBlocks cannot have comment lines after the block description - if (trimmedLine.StartsWith("#") && currentItemFilterBlockBoundary?.BoundaryType == ItemFilterBlockBoundaryType.ItemFilterBlock) + if (trimmedLine.StartsWith("#") && currentItemFilterBlockBoundary.BoundaryType == ItemFilterBlockBoundaryType.ItemFilterBlock) { blockBoundaries.AddLast(currentItemFilterBlockBoundary); currentItemFilterBlockBoundary = new ItemFilterBlockBoundary(currentLine, ItemFilterBlockBoundaryType.CommentBlock); } // A line starting with a comment where the previous line was null represents the start of a new comment (unless we're on the first // line in which case it's not a new comment). - else if (trimmedLine.StartsWith("#") && string.IsNullOrWhiteSpace(previousLine) && currentLine > 0) + else if (trimmedLine.StartsWith("#") && string.IsNullOrWhiteSpace(previousLine) && currentItemFilterBlockBoundary.BoundaryType != ItemFilterBlockBoundaryType.ScriptDescription) { if (blockBoundaries.Count > 0) {