From cfd01d5633e09d0fb4f0c189ea16ff0f24777fee Mon Sep 17 00:00:00 2001 From: "Verspeek, Bram" Date: Mon, 23 Oct 2023 14:15:05 +0200 Subject: [PATCH] Allow ValueTableLineParser to handle the case of (number " ") without breaking the quotes onto multiple lines and then failing to build a dictionary after. --- DbcParserLib/Parsers/ValueTableLineParser.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/DbcParserLib/Parsers/ValueTableLineParser.cs b/DbcParserLib/Parsers/ValueTableLineParser.cs index dad1017..675e63a 100644 --- a/DbcParserLib/Parsers/ValueTableLineParser.cs +++ b/DbcParserLib/Parsers/ValueTableLineParser.cs @@ -9,6 +9,8 @@ internal class ValueTableLineParser : ILineParser private const string ValueTableLineStarter = "VAL_ "; private const string ValueTableLinkParsingRegex = @"VAL_\s+(\d+)\s+([a-zA-Z_][\w]*)\s+([a-zA-Z_][\w]*)\s*;"; private const string ValueTableParsingRegex = @"VAL_\s+(?:(?:(\d+)\s+([a-zA-Z_][\w]*))|([a-zA-Z_][\w]*))\s+((?:(?:-?\d+)\s+(?:""[^""]*"")\s+)*)\s*;"; + private const string ValueTableNewLineRegex = @"(""[^""]*""\s+)"; + private const string ValueTableNewLineRegexReplace = "$1\n"; private readonly IParseFailureObserver m_observer; @@ -34,7 +36,7 @@ public bool TryParse(string line, IDbcBuilder builder, INextLineProvider nextLin match = Regex.Match(cleanLine, ValueTableParsingRegex); if (match.Success) { - var valueTable = match.Groups[4].Value.TrimStart().Replace("\" ", "\"" + Environment.NewLine); + var valueTable = Regex.Replace(match.Groups[4].Value.TrimStart(), ValueTableNewLineRegex, ValueTableNewLineRegexReplace); var valueTableDictionary = valueTable.ToDictionary(); if (match.Groups[3].Value != "") builder.LinkTableValuesToEnvironmentVariable(match.Groups[3].Value, valueTableDictionary);