From e8e36ae822fba91901c738c3fb4b665b0fe83ea0 Mon Sep 17 00:00:00 2001
From: Starbeamrainbowlabs <sbrl@starbeamrainbowlabs.com>
Date: Mon, 27 Jun 2016 21:09:45 +0100
Subject: [PATCH] Bugfix: public / private generation

---
 cscz/ClassGenerator.cs | 21 ++++++++++-
 cscz/Program.cs        | 85 ++++++++++++++++--------------------------
 2 files changed, 51 insertions(+), 55 deletions(-)

diff --git a/cscz/ClassGenerator.cs b/cscz/ClassGenerator.cs
index 1b2e92f..8faa3f5 100644
--- a/cscz/ClassGenerator.cs
+++ b/cscz/ClassGenerator.cs
@@ -7,6 +7,12 @@ using System.IO;
 
 namespace cscz
 {
+	public enum GenerationMode
+	{
+		PrivateVariablesWithProperties,
+		PublicVariables
+	}
+
 	public class ClassGenerator
 	{
 		/// <summary>
@@ -32,11 +38,22 @@ namespace cscz
 
 		public string ClassName = "Carrot";
 
+		public GenerationMode GenerationMode = GenerationMode.PublicVariables;
+
 		/// <summary>
 		/// Whether to make data members private and create public properties for them instead of making the
 		/// data members public.
+		/// This is read only. Please refer to GenerationMode in order to change this field.
 		/// </summary>
-		public bool CreateProperties = true;
+		public bool CreateProperties
+		{
+			get
+			{
+				if (GenerationMode == GenerationMode.PrivateVariablesWithProperties)
+					return true;
+				return false;
+			}
+		}
 
 		public ClassGenerator ()
 		{
@@ -108,7 +125,7 @@ namespace cscz
 				}
 				else
 				{
-					result.AppendLine(string.Format("\tpublic {0} {1};"));
+					result.AppendLine(string.Format("\tpublic {0} {1};", datatypeName, publicDataMemberName));
 					constructorBody.AppendLine(string.Format("\t\t{0} = in{1};", privateDataMemberName, publicDataMemberName));
 				}
 			}
diff --git a/cscz/Program.cs b/cscz/Program.cs
index 996c128..e699eb2 100644
--- a/cscz/Program.cs
+++ b/cscz/Program.cs
@@ -9,72 +9,51 @@ namespace cscz
 {
 	class Program
 	{
-		public static void Main(string[] args)
+		public static int Main(string[] args)
 		{
-			Dictionary<string, string> parsedArgs = new Dictionary<string, string>();
-			ParseOptions(args, new List<string>(), new List<string>(){ "help", "private" });
+			GenerationMode generationMode = GenerationMode.PublicVariables;
 
-			if(args.Length >= 1 && args[0] == "--help")
+			List<string> extras = new List<string>();
+			for(int i = 0; i < args.Length; i++)
 			{
-				Assembly asm = Assembly.GetExecutingAssembly();
-				/*** Debug - Lists the names of all embedded resources ***
+				if(!args[i].StartsWith("-"))
+				{
+					extras.Add(args[i]);
+					continue;
+				}
+
+				switch(args[i].Trim('-'))
+				{
+					case "help":
+						Assembly asm = Assembly.GetExecutingAssembly();
+						/*** Debug - Lists the names of all embedded resources ***
 				foreach(string str in asm.GetManifestResourceNames())
 					Console.WriteLine(str);*/
-				StreamReader helpTextReader = new StreamReader(asm.GetManifestResourceStream(@"cscz.Help.md"));
-				string helpText = helpTextReader.ReadToEnd();
-				helpTextReader.Dispose();
-				Console.WriteLine(helpText);
-				return;
+						StreamReader helpTextReader = new StreamReader(asm.GetManifestResourceStream(@"cscz.Help.md"));
+						string helpText = helpTextReader.ReadToEnd();
+						helpTextReader.Dispose();
+						Console.WriteLine(helpText);
+						return 0;
+					case "private":
+						generationMode = GenerationMode.PrivateVariablesWithProperties;
+						break;
+					case "public":
+						generationMode = GenerationMode.PublicVariables;
+						break;
+					default:
+						Console.Error.WriteLine("Error: Unknown argument '{0}'.", args[i]);
+						return 1;
+				}
 			}
 
 			ClassGenerator cg = new ClassGenerator();
+			cg.GenerationMode = generationMode;
 
 			string source = Console.In.ReadToEnd();
 			cg.ParseString(source);
 
-			cg.CreateProperties = !parsedArgs.ContainsKey("private");
-
 			Console.WriteLine(cg);
-		}
-
-		/// <summary>
-		/// Parses command line options out into a dictionary.
-		/// </summary>
-		/// <param name="args">The arguments to parse.</param>
-		/// <param name="extraArgs">A list in which to dump any extra arguments found that aren't attached to a flag.</param>
-		/// <param name="noValueArgs">A list of flags which do not take a value.</param>
-		/// <returns>The parsed arguments.</returns>
-		static Dictionary<string, string> ParseOptions(string[] args, List<string> extraArgs, List<string> noValueArgs)
-		{
-			Dictionary<string, string> result = new Dictionary<string, string>();
-			for(int i = 0; i < args.Length; i++)
-			{
-				if (args[i].StartsWith("-"))
-				{
-					string optionKey = args[i].Trim(new char[] { '-', ' ' });
-					if (i < args.Length - 1 && !args[i + 1].StartsWith("-"))
-					{
-						if(!noValueArgs.Contains(optionKey))
-						{
-							result[optionKey] = args[i + 1].Trim();
-							i++;
-						}
-						else
-						{
-							result[optionKey] = "true";
-						}
-					}
-					else
-					{
-						result[optionKey] = "true";
-					}
-				}
-				else
-				{
-					extraArgs.Add(args[i]);
-				}
-			}
-			return result;
+			return 0;
 		}
 	}
 }
