Beispiel #1
0
        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());
        }
Beispiel #2
0
        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());
            }
        }