private static void WriteDocumentation(string documentationFilePath, SettingsMetaData settings)
        {
            XmlDocument doc = new XmlDocument();

            doc.AppendChild(doc.CreateComment(" THIS FILE WAS GENERATED AUTOMATICALLY. DO NOT MODIFY. "));

            XmlNode root = doc.AppendChild(Helper.CreateElement(doc, "Documentation"));

            {
                RC.WriteLine(ConsoleThemeColor.TitleText, " - " + "NoItemSelectedText");

                XmlElement metaNode = Helper.CreateElement(doc, "NoItemSelectedText");

                metaNode.InnerText = settings.NoItemSelectedText;

                root.AppendChild(metaNode);
            }

            foreach (SettingValue meta in settings.AllVariables)
            {
                RC.WriteLine(ConsoleThemeColor.TitleText, " - " + meta.OscAddress);

                XmlElement metaNode = Helper.CreateElement(doc, "Setting");

                Helper.AppendAttributeAndValue(metaNode, "Address", meta.OscAddress);

                metaNode.InnerText = meta.DocumentationBody;

                root.AppendChild(metaNode);
            }

            doc.Save(documentationFilePath);
        }
        private static void Generate(string xmlFilePath, string codeFilePath, string documentationFilePath)
        {
            RC.WriteLine(ConsoleThemeColor.TitleText, "Reading XML File");

            XmlDocument doc = new XmlDocument();

            doc.Load(xmlFilePath);

            SettingsMetaData settings = new SettingsMetaData(doc);

            FileTemplate     = File.ReadAllText(Helper.ResolvePath("~/Templates/FileTemplate.txt"));
            CategoryTemplate = File.ReadAllText(Helper.ResolvePath("~/Templates/CategoryTemplate.txt"));
            SettingsTemplate = File.ReadAllText(Helper.ResolvePath("~/Templates/SettingsTemplate.txt"));

            List <string> groupTypesDefinitions = new List <string>();

            string settingsTypeDefinition = GenerateSettingsType(settings, ref groupTypesDefinitions);

            string final = FileTemplate
                           .Replace("[$RootCategory]", PrefixLines(new string[] { settingsTypeDefinition }, '\t', 1))
                           .Replace("[$CategoryClasses]", PrefixLines(groupTypesDefinitions, '\t', 2));

            RC.WriteLine(ConsoleThemeColor.TitleText, "Writing: " + codeFilePath);
            File.WriteAllText(codeFilePath, final);

            RC.WriteLine(ConsoleThemeColor.TitleText, "Writing: " + documentationFilePath);

            WriteDocumentation(documentationFilePath, settings);
        }
        private static string GenerateSettingsType(SettingsMetaData settings, ref List <string> groupTypesDefinitions)
        {
            Dictionary <string, string> replacements = new Dictionary <string, string>();

            GenerateMembers(settings, true, groupTypesDefinitions, replacements, "Settings");

            return(DoReplacements(replacements, SettingsTemplate));
        }