mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Fix edge-case issues with Help functionality; modernize features
This commit is contained in:
68
SabreTools.Help/Int32Feature.cs
Normal file
68
SabreTools.Help/Int32Feature.cs
Normal file
@@ -0,0 +1,68 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace SabreTools.Help
|
||||
{
|
||||
public class Int32Feature : Feature<int>
|
||||
{
|
||||
#region Constructors
|
||||
|
||||
public Int32Feature(string name, string flag, string description, string? longDescription = null)
|
||||
: base(name, flag, description, longDescription)
|
||||
{
|
||||
}
|
||||
|
||||
public Int32Feature(string name, string[] flags, string description, string? longDescription = null)
|
||||
: base(name, flags, description, longDescription)
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Instance Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override bool ValidateInput(string input, bool exact = false, bool ignore = false)
|
||||
{
|
||||
// Pre-split the input for efficiency
|
||||
string[] splitInput = input.Split('=');
|
||||
|
||||
bool valid = input.Contains("=") && Flags.Contains(splitInput[0]);
|
||||
if (valid)
|
||||
{
|
||||
if (!int.TryParse(splitInput[1], out int value))
|
||||
value = int.MinValue;
|
||||
|
||||
Value = value;
|
||||
|
||||
// If we've already found this feature before
|
||||
if (_foundOnce && !ignore)
|
||||
valid = false;
|
||||
|
||||
_foundOnce = true;
|
||||
}
|
||||
|
||||
// If we haven't found a valid flag and we're not looking for just this feature, check to see if any of the subfeatures are valid
|
||||
if (!valid && !exact)
|
||||
{
|
||||
string[] featureKeys = [.. Features.Keys];
|
||||
valid = Array.Exists(featureKeys, k => Features[k]!.ValidateInput(input));
|
||||
}
|
||||
|
||||
return valid;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override bool IsEnabled() => Value != int.MinValue;
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override string FormatFlags()
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
Flags.ForEach(flag => sb.Append($"{flag}=, "));
|
||||
return sb.ToString().TrimEnd(' ', ',');
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user