From 74df6241cc6e5cf46f965f3dfc3755e317ed2625 Mon Sep 17 00:00:00 2001 From: Brychan Dempsey Date: Fri, 12 Mar 2021 12:46:00 +1300 Subject: [PATCH] Added a center-string function --- Assignment 1/Program.cs | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/Assignment 1/Program.cs b/Assignment 1/Program.cs index aa6e0af..24c0177 100644 --- a/Assignment 1/Program.cs +++ b/Assignment 1/Program.cs @@ -30,6 +30,11 @@ namespace Assignment_1 { "NEWLINE", new Tuple("\n", VariableFlags.Reserved | VariableFlags.NoPrint) }, { "CARRIAGE_RETURN", new Tuple("\r", VariableFlags.Reserved | VariableFlags.NoPrint) } }; + + static List ForbiddenChars = new List + { + '$', '\\', '\"', '\'' + }; static void Main(string[] args) { Console.WriteLine("┌──────────────────────────────────────────┐"); @@ -197,7 +202,7 @@ namespace Assignment_1 void List() { Console.WriteLine("┌" + new string('─', 15) + "┬" + new string('─', 25) + "┬" + new string('─', 9) + "┐"); - Console.WriteLine("│{0,-15}│{1,-25}│{2,9}│", "Symbol", "Value", "Flags"); + Console.WriteLine("│{0}│{1}│{2}│", CenterString("Symbol",15), CenterString("Value",25), CenterString("Flags",9)); Console.WriteLine("├" + new string('─', 15) + "┼" + new string('─', 25) + "┼" + new string('─', 9) + "┤"); int keyPos = 0; foreach (var item in Symbols) @@ -267,9 +272,15 @@ namespace Assignment_1 } string identifier; long identifierEndPos = FindIdentifier(source, out identifier); - if (identifierEndPos <= source.Position + 1 ) + if (identifierEndPos <= source.Position + 1 || identifier.Trim().Length == 0) { - WriteDebugLine(lineStart, "set ".Length, "???", source); + WriteDebugLine(lineStart, "set ".Length, "expected an identifier", source); + return false; + } + else if (ForbiddenChars.Exists((c) => identifier.Contains(c))) + { + char fbChar = ForbiddenChars.Find((c) => identifier.Contains(c)); + WriteDebugLine(lineStart, "set ".Length, string.Format("character {0} is not valid for an identifier", fbChar), source); return false; } source.Position = identifierEndPos; @@ -531,7 +542,7 @@ namespace Assignment_1 long originalPos = s.Position; string tempstring; long nextWSOccurance = FindNextOccurance(s, (c, s) => Char.IsWhiteSpace(c), out tempstring); - while (tempstring.Length == 0) + while (tempstring.Length == 0 && s.Position < s.Length) { nextWSOccurance = FindNextOccurance(s, (c, s) => Char.IsWhiteSpace(c), out tempstring); s.Position++; @@ -635,5 +646,17 @@ namespace Assignment_1 } s.Position--; } + + static string CenterString(string source, int totalPadding, char paddingChar=' ') + { + if (source.Length >= totalPadding) return source; + int leftHalf = (int)Math.Floor(source.Length / 2.0); + int rightHalf = (int)Math.Ceiling(source.Length / 2.0); + int leftHalfPad = (int)Math.Floor(totalPadding / 2.0); + int rightHalfPad = (int)Math.Ceiling(totalPadding / 2.0); + string t = "{0," + leftHalfPad + "}{1," + -1 * rightHalfPad + "}"; + string result = string.Format(t, source.Substring(0,leftHalf+1), source.Substring(rightHalf,source.Length-rightHalf)); + return result; + } } }