public string GetText(LispObject argument) { var sb = new StringBuilder(); sb.Append(argument.ToString(useEscapeCharacters: true)); var paddingWidth = Math.Max(0, Width - sb.Length); if (paddingWidth > 0) { sb.Append(new string(' ', paddingWidth)); } return(sb.ToString()); }
public static string GetMarkdownDisplay(this LispObject obj, LispHost host) { switch (obj) { case LispCodeFunction codeFunction: return($@" ``` lisp ; <in module {codeFunction.NameSymbol.PackageName}> (DEFUN {codeFunction.NameSymbol.ToDisplayString(host.CurrentPackage)} ({codeFunction.ArgumentCollection}) ...) ``` {codeFunction.Documentation}".Trim()); case LispFunction function: return($@" ``` lisp ; <native function> ; <in module {function.NameSymbol.PackageName}> (DEFUN {function.NameSymbol.ToDisplayString(host.CurrentPackage)} (...) ...) ``` {function.Documentation}".Trim()); case LispCodeMacro codeMacro: return($@" ``` lisp ; <in module {codeMacro.NameSymbol.PackageName}> (DEFMACRO {codeMacro.NameSymbol.ToDisplayString(host.CurrentPackage)} ({codeMacro.ArgumentCollection}) ...) ``` TODO: documentation".Trim()); case LispMacro macro: return($@" ``` lisp ; <native macro> ; <in module {macro.NameSymbol.PackageName}> (DEFMACRO {macro.NameSymbol.ToDisplayString(host.CurrentPackage)} (...) ...) ``` TODO: documentation".Trim()); case LispResolvedSymbol symbol: // TODO: don't display current package qualifier return($"`{symbol.Value}`: {host.GetValue(symbol.Value)}"); default: return(obj?.ToString()); } }