Add support for fake input in asciicast recordings

* Fixes a bug with `SelectionPrompt` and page size.
* Allow `IAnsiConsoleInput` to return `null`.
This commit is contained in:
Patrik Svensson
2021-05-24 02:36:14 +02:00
committed by Phil Scott
parent 46abadaccb
commit 450d87f5d3
56 changed files with 1314 additions and 1166 deletions

View File

@ -0,0 +1,61 @@
using System;
using System.Collections.Generic;
using System.Text;
using Spectre.Console;
namespace Generator.Commands.Samples
{
public abstract class BaseSample
{
public abstract void Run(IAnsiConsole console);
public virtual string Name() => PascalToKebab(GetType().Name.Replace("Sample",""));
public virtual (int Cols, int Rows) ConsoleSize => (82, 24);
public virtual IEnumerable<(string Name, Action<Capabilities> CapabilitiesAction)> GetCapabilities()
{
return new (string Name, Action<Capabilities> CapabilitiesAction)[]
{
("plain", capabilities =>
{
capabilities.Unicode = false;
capabilities.Ansi = true;
capabilities.Interactive = true;
capabilities.Legacy = false;
capabilities.Links = false;
capabilities.ColorSystem = ColorSystem.Legacy;
}),
("rich", capabilities =>
{
capabilities.Unicode = true;
capabilities.Ansi = true;
capabilities.Interactive = true;
capabilities.Legacy = false;
capabilities.Links = false;
capabilities.ColorSystem = ColorSystem.TrueColor;
}),
};
}
private string PascalToKebab(ReadOnlySpan<char> input)
{
var sb = new StringBuilder();
var previousUpper = true;
foreach (var chr in input)
{
if (char.IsUpper(chr) && previousUpper == false)
{
sb.Append('-');
previousUpper = true;
}
else
{
previousUpper = false;
}
sb.Append(char.ToLower(chr));
}
return sb.ToString();
}
}
}