From 4300d6d75bfe7c3fce70ccc6e2190fcdf3a4eddb Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Tue, 5 Dec 2017 15:59:29 -0800 Subject: [PATCH] [Feature, Help] Add unhooked help features --- SabreTools.Library/Help/Feature.cs | 68 +++++++++++++++++++++++++++++- SabreTools.Library/Help/Help.cs | 43 +++++++++++++++++++ 2 files changed, 110 insertions(+), 1 deletion(-) diff --git a/SabreTools.Library/Help/Feature.cs b/SabreTools.Library/Help/Feature.cs index 0f488463..fe0ec748 100644 --- a/SabreTools.Library/Help/Feature.cs +++ b/SabreTools.Library/Help/Feature.cs @@ -8,7 +8,7 @@ namespace SabreTools.Library.Help { public class Feature { - #region Private variables + #region Private instance variables private List _flags; private string _description; @@ -17,6 +17,11 @@ namespace SabreTools.Library.Help private List _additionalNotes; private bool _foundOnce = false; + // Specific value types + private bool _valueBool = false; + private string _valueString = null; + private List _valueList = null; + #endregion #region Constructors @@ -342,12 +347,33 @@ namespace SabreTools.Library.Help // If we have a flag, make sure it doesn't have an equal sign in it case FeatureType.Flag: valid = !input.Contains("=") && _flags.Contains(input); + if (valid) + { + _valueBool = true; + _foundOnce = true; + } break; // If we have an input, make sure it has an equals sign in it case FeatureType.List: + valid = input.Contains("=") && _flags.Contains(input.Split('=')[0]); + if (valid) + { + if (_valueList == null) + { + _valueList = new List(); + } + + _valueList.Add(input.Split('=')[1]); + } + break; case FeatureType.String: valid = input.Contains("=") && _flags.Contains(input.Split('=')[0]); + if (valid) + { + _valueString = input.Split('=')[1]; + _foundOnce = true; + } break; } @@ -381,6 +407,46 @@ namespace SabreTools.Library.Help return valid; } + /// + /// Get the proper value associated with this feature + /// + /// Value associated with this feature + public object GetValue() + { + switch (_featureType) + { + case FeatureType.Flag: + return _valueBool; + case FeatureType.List: + return _valueList; + case FeatureType.String: + return _valueString; + } + + return null; + } + + /// + /// Returns if this feature has a valid value or not + /// + /// True if the feature is enabled, false otherwise + public bool IsEnabled() + { + object obj = GetValue(); + + switch (_featureType) + { + case FeatureType.Flag: + return (bool)obj; + case FeatureType.List: + return obj != null; + case FeatureType.String: + return obj != null; + } + + return false; + } + #endregion } } diff --git a/SabreTools.Library/Help/Help.cs b/SabreTools.Library/Help/Help.cs index 1fec4687..8a87e8f1 100644 --- a/SabreTools.Library/Help/Help.cs +++ b/SabreTools.Library/Help/Help.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; +using SabreTools.Library.Data; + namespace SabreTools.Library.Help { // TODO: Parse and return flags from arguments @@ -253,6 +255,47 @@ namespace SabreTools.Library.Help return success; } + /// + /// Retrieve a list of enabled features + /// + /// List of Features representing what is enabled + public List GetEnabledFeatures() + { + List enabled = new List(); + + // Loop through the features + foreach(KeyValuePair feature in _features) + { + enabled.AddRange(GetEnabledSubfeatures(feature.Value)); + } + + return enabled; + } + + /// + /// Retrieve a nested list of subfeatures from the current feature + /// + /// Feature with possible subfeatures to test + /// List of Features representing what is enabled + private List GetEnabledSubfeatures(Feature feature) + { + List enabled = new List(); + + // First determine if the current feature is enabled + if (feature.IsEnabled()) + { + enabled.Add(feature); + } + + // Now loop through the subfeatures recursively + foreach (KeyValuePair sub in _features) + { + enabled.AddRange(GetEnabledSubfeatures(sub.Value)); + } + + return enabled; + } + /// /// Write out the help text with pauses, if needed ///