 
 <PRIVATE
 
-: parse-values ( -- seq )
-    [ scan-token dup "}" = not ]
-    [ ":" ?tail drop scan-object 2array ] produce nip ;
+: parse-help-values ( -- seq )
+    [ scan-token dup "}" = not ] [
+        dup "{" = [
+            parse-datum dup parsing-word?
+            [ V{ } clone swap execute-parsing first ] when
+        ] [
+            ":" ?tail drop scan-object 2array
+        ] if
+    ] produce nip ;
 
 PRIVATE>
 
-SYNTAX: $values{ parse-values \ $values prefix suffix! ;
-SYNTAX: $inputs{ parse-values \ $inputs prefix suffix! ;
-SYNTAX: $outputs{ parse-values \ $outputs prefix suffix! ;
+SYNTAX: $values{ parse-help-values \ $values prefix suffix! ;
+SYNTAX: $inputs{ parse-help-values \ $inputs prefix suffix! ;
+SYNTAX: $outputs{ parse-help-values \ $outputs prefix suffix! ;
 
 ! XXX: more syntax to consider
 

        [ prefix ] bi*
    ] [ drop ] if ;

PRIVATE>

SYNTAX: $examples{
    \ } [
        [ \ $example make-example ] { } map-as \ $examples prefix
    ] parse-literal ;

SYNTAX: $example:
    scan-object \ $example make-example suffix! ;

    [ [ suffix! ] curry dip ] bi* ;

: push-help-space ( accum sbuf -- accum sbuf )
    {
        [ dup empty? not ]
        [ over empty? not pick ?last \ $nl eq? not and ]
    } 0|| [ CHAR: \s suffix! ] when ;

:: parse-help-text ( -- seq )
    V{ } clone SBUF" " clone [
        lexer get line>> parse-help-token [
            lexer get line>> swap - 1 > [
                \ $nl push-help-text
            ] when
