From 942c8a3276993e32de86d7e1cb0acffbbd987303 Mon Sep 17 00:00:00 2001 From: MaxED <j.maxed@gmail.com> Date: Thu, 1 Oct 2015 21:35:52 +0000 Subject: [PATCH] Fixed, UDMF: we should fail map loading if there were TEXTMAP parsing errors. Fixed, UDMF parser: parser failed to parse decimals stored using scientific notation (like "1E-06"). Fixed, UDMF parser: incorrect line numbers were shown when displaying errors. Changed, UDMF parser: many error descriptions are now more detailed. Updated ZDoom ACC to Git rev. ae5f036. --- Build/Compilers/ZDoom/acc.exe | Bin 66560 -> 66560 bytes Build/Compilers/ZDoom/zspecial.acs | 2 +- Build/Configurations/Includes/UDMF_misc.cfg | 4 +- Source/Core/Editing/CopyPasteManager.cs | 18 ++++++- Source/Core/General/MapManager.cs | 6 +-- Source/Core/IO/UniversalParser.cs | 39 +++++++++----- Source/Core/IO/UniversalStreamReader.cs | 54 ++++++-------------- 7 files changed, 64 insertions(+), 59 deletions(-) diff --git a/Build/Compilers/ZDoom/acc.exe b/Build/Compilers/ZDoom/acc.exe index af3ed0bc2c1dbbda6a5033d8bc7e1c99ec54eb98..9f7e271d47089ba363bcd8c5e95e92e1e3ec8cc5 100644 GIT binary patch delta 26765 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 WZ|ot`qWJgPo?9iV*EOo{(EkSo)KQxN delta 26555 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 KUe&5X(f<b@&QRt6 diff --git a/Build/Compilers/ZDoom/zspecial.acs b/Build/Compilers/ZDoom/zspecial.acs index be67db3f6..fe1b15503 100644 --- a/Build/Compilers/ZDoom/zspecial.acs +++ b/Build/Compilers/ZDoom/zspecial.acs @@ -335,7 +335,7 @@ special -89:ChangeActorRoll(2,3), -90:GetActorRoll(1), -91:QuakeEx(8,12), - -92:Warp(6,8), + -92:Warp(6,9), // Zandronum's -100:ResetMap(0), diff --git a/Build/Configurations/Includes/UDMF_misc.cfg b/Build/Configurations/Includes/UDMF_misc.cfg index 08db80a35..22c194093 100644 --- a/Build/Configurations/Includes/UDMF_misc.cfg +++ b/Build/Configurations/Includes/UDMF_misc.cfg @@ -122,9 +122,9 @@ sidedefflags { clipmidtex = "Clip middle texture"; wrapmidtex = "Wrap middle texture"; - nofakecontrast = "No fake contrast"; - nodecals = "No decals"; smoothlighting = "Smooth lighting"; + nofakecontrast = "Even lighting"; + nodecals = "No decals"; lightfog = "Use sidedef brightness on fogged walls"; } diff --git a/Source/Core/Editing/CopyPasteManager.cs b/Source/Core/Editing/CopyPasteManager.cs index 96cb46e36..f03d2ce15 100644 --- a/Source/Core/Editing/CopyPasteManager.cs +++ b/Source/Core/Editing/CopyPasteManager.cs @@ -184,8 +184,22 @@ namespace CodeImp.DoomBuilder.Editing UniversalStreamReader reader = new UniversalStreamReader(General.Map.FormatInterface.UIFields); //mxd reader.StrictChecking = false; General.Map.Map.BeginAddRemove(); - reader.Read(General.Map.Map, memstream); - General.Map.Map.EndAddRemove(); + + //mxd. UniversalStreamReader can now throw errors + try + { + reader.Read(General.Map.Map, memstream); + } + catch(Exception e) + { + General.ErrorLogger.Add(ErrorType.Error, "Unable to load prefab. " + e.GetType().Name + ": " + e.Message); + General.ShowErrorMessage("Unable to load prefab." + Environment.NewLine + Environment.NewLine + e.Message, MessageBoxButtons.OK); + return; + } + finally + { + General.Map.Map.EndAddRemove(); + } // The new geometry is not marked, so invert the marks to get it marked General.Map.Map.InvertAllMarks(); diff --git a/Source/Core/General/MapManager.cs b/Source/Core/General/MapManager.cs index 44a7e8836..c8ad6fb21 100644 --- a/Source/Core/General/MapManager.cs +++ b/Source/Core/General/MapManager.cs @@ -595,14 +595,14 @@ namespace CodeImp.DoomBuilder newmap.BeginAddRemove(); General.WriteLogLine("Initializing map format interface " + config.FormatInterface + "..."); io = MapSetIO.Create(config.FormatInterface, tempwad, this); - General.WriteLogLine("Reading map data structures from file..."); + General.WriteLogLine("Reading map data from file..."); #if DEBUG newmap = io.Read(newmap, TEMP_MAP_HEADER); #else try { newmap = io.Read(newmap, TEMP_MAP_HEADER); } catch(Exception e) { - General.ErrorLogger.Add(ErrorType.Error, "Unable to read the map data structures with the specified configuration. " + e.GetType().Name + ": " + e.Message); - General.ShowErrorMessage("Unable to read the map data structures with the specified configuration.", MessageBoxButtons.OK); + General.ErrorLogger.Add(ErrorType.Error, "Unable to read the map data with the specified configuration. " + e.GetType().Name + ": " + e.Message); + General.ShowErrorMessage("Unable to read the map data with the specified configuration." + Environment.NewLine + Environment.NewLine + e.Message, MessageBoxButtons.OK); return false; } #endif diff --git a/Source/Core/IO/UniversalParser.cs b/Source/Core/IO/UniversalParser.cs index 266d5cf6a..791a8686d 100644 --- a/Source/Core/IO/UniversalParser.cs +++ b/Source/Core/IO/UniversalParser.cs @@ -21,6 +21,7 @@ using System.IO; using System.Text; using System.Globalization; using System.Collections.Generic; +using CodeImp.DoomBuilder.Map; #endregion @@ -31,10 +32,10 @@ namespace CodeImp.DoomBuilder.IO #region ================== Constants // Path seperator - public const string DEFAULT_SEPERATOR = "."; + //public const string DEFAULT_SEPERATOR = "."; // Allowed characters in a key - public const string KEY_CHARACTERS = "abcdefghijklmnopqrstuvwxyz0123456789_"; + private const string KEY_CHARACTERS = "abcdefghijklmnopqrstuvwxyz0123456789_"; // Parse mode constants private const int PM_NOTHING = 0; @@ -185,7 +186,7 @@ namespace CodeImp.DoomBuilder.IO // Go through all of the data until // the end or until the struct closes // or when an arror occurred - while ((cpErrorResult == 0) && (endofstruct == false)) + while((cpErrorResult == 0) && (endofstruct == false)) { // Get current character if(line == data.Length - 1) break; @@ -193,6 +194,7 @@ namespace CodeImp.DoomBuilder.IO { pos = 0; line++; + if(string.IsNullOrEmpty(data[line])) continue; //mxd. Skip empty lines here so correct line number is displayed on errors } c = data[line][pos]; @@ -283,7 +285,7 @@ namespace CodeImp.DoomBuilder.IO { // Block comment closes on the same line?.. (mxd) int np = data[line].IndexOf("*/", pos); - if (np > -1) + if(np > -1) { pos = np + 1; } @@ -310,7 +312,7 @@ namespace CodeImp.DoomBuilder.IO break; default: // Everything else - if (!topLevel && pos == 0) + if(!topLevel && pos == 0) { while(matches.ContainsKey(data[line])) { @@ -415,17 +417,18 @@ namespace CodeImp.DoomBuilder.IO catch(FormatException) { // ERROR: Invalid value in assignment - RaiseError(line, ERROR_VALUEINVALID); + RaiseError(line, ERROR_VALUEINVALID + "\n\nUnrecognized token: '" + s.Trim() + "'"); } } catch(FormatException) { // ERROR: Invalid value in assignment - RaiseError(line, ERROR_VALUEINVALID); + RaiseError(line, ERROR_VALUEINVALID + "\n\nUnrecognized token: '" + s.Trim() + "'"); } } // Floating point? - else if(s.IndexOf('.') > -1) + //mxd. Can be in scientific notation (like "1E-06") + else if(s.IndexOf('.') > -1 || s.ToLowerInvariant().Contains("e-")) { float fval = 0; @@ -434,7 +437,7 @@ namespace CodeImp.DoomBuilder.IO catch(FormatException) { // ERROR: Invalid value in assignment - RaiseError(line, ERROR_VALUEINVALID); + RaiseError(line, ERROR_VALUEINVALID + "\n\nUnrecognized token: '" + s.Trim() + "'"); } // Add it to struct @@ -476,13 +479,13 @@ namespace CodeImp.DoomBuilder.IO catch(FormatException) { // ERROR: Invalid value in assignment - RaiseError(line, ERROR_VALUEINVALID); + RaiseError(line, ERROR_VALUEINVALID + "\n\nUnrecognized token: '" + s.Trim() + "'"); } } catch(FormatException) { // ERROR: Invalid value in assignment - RaiseError(line, ERROR_VALUEINVALID); + RaiseError(line, ERROR_VALUEINVALID + "\n\nUnrecognized token: '" + s.Trim() + "'"); } } @@ -533,7 +536,7 @@ namespace CodeImp.DoomBuilder.IO catch(FormatException) { // ERROR: Invalid value in assignment - RaiseError(line, ERROR_VALUEINVALID); + RaiseError(line, ERROR_VALUEINVALID + "\n\nUnrecognized token: '" + v.Trim() + "'"); } // Convert the number to a char @@ -541,7 +544,7 @@ namespace CodeImp.DoomBuilder.IO catch(FormatException) { // ERROR: Invalid value in assignment - RaiseError(line, ERROR_VALUEINVALID); + RaiseError(line, ERROR_VALUEINVALID + "\n\nUnrecognized token: '" + v.Trim() + "'"); } // Add the char @@ -623,7 +626,7 @@ namespace CodeImp.DoomBuilder.IO default: // Unknown keyword - RaiseError(line, ERROR_KEYWORDUNKNOWN + "\nUnrecognized token: '" + val.ToString().Trim().ToLowerInvariant() + "'"); + RaiseError(line, ERROR_KEYWORDUNKNOWN + "\n\nUnrecognized token: '" + val.ToString().Trim() + "'"); break; } @@ -711,6 +714,14 @@ namespace CodeImp.DoomBuilder.IO db.Append(leveltabs); db.Append(cs[i].Key); db.Append(spacing); db.Append("="); db.Append(spacing); db.Append(f.ToString("0.000", CultureInfo.InvariantCulture)); db.Append(";"); db.Append(newline); } + //mxd. Check if value is of double type + else if(cs[i].Value is double) + { + // Output the value as double (7 decimals) + double d = (double)cs[i].Value; + db.Append(leveltabs); db.Append(cs[i].Key); db.Append(spacing); db.Append("="); + db.Append(spacing); db.Append(d.ToString("0.0000000", CultureInfo.InvariantCulture)); db.Append(";"); db.Append(newline); + } // Check if value is of other numeric type else if(cs[i].Value.GetType().IsPrimitive) { diff --git a/Source/Core/IO/UniversalStreamReader.cs b/Source/Core/IO/UniversalStreamReader.cs index 786a6dab0..3eb2df981 100644 --- a/Source/Core/IO/UniversalStreamReader.cs +++ b/Source/Core/IO/UniversalStreamReader.cs @@ -22,7 +22,6 @@ using System.Text; using System.IO; using CodeImp.DoomBuilder.Map; using CodeImp.DoomBuilder.Geometry; -using System.Windows.Forms; using CodeImp.DoomBuilder.Config; using CodeImp.DoomBuilder.Types; @@ -41,10 +40,10 @@ namespace CodeImp.DoomBuilder.IO #region ================== Variables - private Configuration config; + private readonly Configuration config; private bool setknowncustomtypes; private bool strictchecking = true; - private Dictionary<string, Dictionary<string, UniversalType>> uifields; //mxd + private readonly Dictionary<string, Dictionary<string, UniversalType>> uifields; //mxd #endregion @@ -130,50 +129,31 @@ namespace CodeImp.DoomBuilder.IO #region ================== Reading // This reads from a stream - public MapSet Read(MapSet map, Stream stream) + public void Read(MapSet map, Stream stream) { StreamReader reader = new StreamReader(stream, Encoding.ASCII); UniversalParser textmap = new UniversalParser(); textmap.StrictChecking = strictchecking; -#if !DEBUG - try - { -#endif - // Read UDMF from stream - List<string> data = new List<string>(100); - while(!reader.EndOfStream) - { - string line = reader.ReadLine(); - if(string.IsNullOrEmpty(line)) continue; - data.Add(line); - } + // Read UDMF from stream + List<string> data = new List<string>(1000); + while(!reader.EndOfStream) data.Add(reader.ReadLine()); - textmap.InputConfiguration(data.ToArray()); + // Parse it + textmap.InputConfiguration(data.ToArray()); - // Check for errors - if(textmap.ErrorResult != 0) - { - // Show parse error - General.ShowErrorMessage("Error on line " + textmap.ErrorLine + " while parsing UDMF map data:\n" + textmap.ErrorDescription, MessageBoxButtons.OK); - } - else - { - // Read the map - Dictionary<int, Vertex> vertexlink = ReadVertices(map, textmap); - Dictionary<int, Sector> sectorlink = ReadSectors(map, textmap); - ReadLinedefs(map, textmap, vertexlink, sectorlink); - ReadThings(map, textmap); - } -#if !DEBUG - } - catch(Exception e) + // Check for errors + if(textmap.ErrorResult != 0) { - General.ShowErrorMessage("Unexpected error reading UDMF map data. " + e.GetType().Name + ": " + e.Message, MessageBoxButtons.OK); + //mxd. Throw parse error + throw new Exception("Error on line " + textmap.ErrorLine + " while parsing UDMF map data:\n" + textmap.ErrorDescription); } -#endif - return map; + // Read the map + Dictionary<int, Vertex> vertexlink = ReadVertices(map, textmap); + Dictionary<int, Sector> sectorlink = ReadSectors(map, textmap); + ReadLinedefs(map, textmap, vertexlink, sectorlink); + ReadThings(map, textmap); } // This reads the things -- GitLab