2006-01-06 02:04:42 -05:00
|
|
|
! Copyright (C) 2005, 2006 Slava Pestov.
|
2006-01-26 23:01:14 -05:00
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2005-12-01 00:53:12 -05:00
|
|
|
IN: help
|
2006-06-05 22:50:16 -04:00
|
|
|
USING: arrays generic hashtables inspector io kernel namespaces
|
2006-01-09 01:34:23 -05:00
|
|
|
parser prettyprint sequences strings styles vectors words ;
|
2005-12-01 00:53:12 -05:00
|
|
|
|
|
|
|
! Simple markup language.
|
|
|
|
|
|
|
|
! <element> ::== <string> | <simple-element> | <fancy-element>
|
|
|
|
! <simple-element> ::== { <element>* }
|
|
|
|
! <fancy-element> ::== { <type> <element> }
|
|
|
|
|
|
|
|
! Element types are words whose name begins with $.
|
|
|
|
|
2005-12-19 02:12:40 -05:00
|
|
|
PREDICATE: array simple-element
|
|
|
|
dup empty? [ drop t ] [ first word? not ] if ;
|
|
|
|
|
2006-06-06 00:35:12 -04:00
|
|
|
M: simple-element print-element [ print-element ] each ;
|
2006-01-21 02:37:39 -05:00
|
|
|
M: string print-element last-block off format* ;
|
2006-05-18 22:07:00 -04:00
|
|
|
M: array print-element unclip execute ;
|
2006-01-21 02:37:39 -05:00
|
|
|
M: word print-element { } swap execute ;
|
2005-12-29 19:01:19 -05:00
|
|
|
|
2005-12-01 00:53:12 -05:00
|
|
|
: ($span) ( content style -- )
|
2006-01-21 02:37:39 -05:00
|
|
|
last-block off [ print-element ] with-style ;
|
2005-12-01 00:53:12 -05:00
|
|
|
|
2006-06-10 00:53:29 -04:00
|
|
|
: ?terpri ( -- )
|
|
|
|
last-block [ [ terpri ] unless t ] change ;
|
|
|
|
|
2006-01-21 02:37:39 -05:00
|
|
|
: ($block) ( quot -- )
|
2006-06-10 00:53:29 -04:00
|
|
|
?terpri
|
2006-01-21 02:37:39 -05:00
|
|
|
call
|
|
|
|
terpri
|
|
|
|
last-block on ; inline
|
2005-12-01 00:53:12 -05:00
|
|
|
|
|
|
|
! Some spans
|
|
|
|
|
2006-06-04 02:00:59 -04:00
|
|
|
: $heading [ heading-style ($span) ] ($block) ;
|
2005-12-01 00:53:12 -05:00
|
|
|
|
2005-12-28 20:25:17 -05:00
|
|
|
: $snippet snippet-style ($span) ;
|
2005-12-01 00:53:12 -05:00
|
|
|
|
2005-12-19 23:18:15 -05:00
|
|
|
: $emphasis emphasis-style ($span) ;
|
|
|
|
|
2005-12-22 21:44:15 -05:00
|
|
|
: $url url-style ($span) ;
|
|
|
|
|
2006-01-21 02:37:39 -05:00
|
|
|
: $terpri last-block off terpri terpri drop ;
|
2005-12-19 23:18:15 -05:00
|
|
|
|
2005-12-01 00:53:12 -05:00
|
|
|
! Some blocks
|
2005-12-19 23:18:15 -05:00
|
|
|
|
2005-12-31 04:20:07 -05:00
|
|
|
: ($code) ( presentation quot -- )
|
2006-01-21 02:37:39 -05:00
|
|
|
[
|
|
|
|
code-style [
|
|
|
|
>r current-style swap presented pick set-hash r>
|
|
|
|
with-nesting
|
|
|
|
] with-style
|
|
|
|
] ($block) ; inline
|
2005-12-01 00:53:12 -05:00
|
|
|
|
2005-12-28 20:25:17 -05:00
|
|
|
: $code ( content -- )
|
2006-01-05 02:00:57 -05:00
|
|
|
"\n" join dup <input> [ format* ] ($code) ;
|
2005-12-28 20:25:17 -05:00
|
|
|
|
2006-01-03 17:43:29 -05:00
|
|
|
: $syntax ( word -- )
|
|
|
|
dup stack-effect [
|
2006-06-04 02:00:59 -04:00
|
|
|
"Syntax" $heading
|
2006-01-03 17:43:29 -05:00
|
|
|
>r word-name $snippet " " $snippet r> $snippet
|
|
|
|
] [
|
|
|
|
drop
|
|
|
|
] if* ;
|
|
|
|
|
|
|
|
: $stack-effect ( word -- )
|
2006-01-21 02:37:39 -05:00
|
|
|
stack-effect [
|
2006-06-04 02:00:59 -04:00
|
|
|
"Stack effect" $heading $snippet
|
2006-01-21 02:37:39 -05:00
|
|
|
] when* ;
|
|
|
|
|
|
|
|
: $vocabulary ( content -- )
|
2006-06-06 00:35:12 -04:00
|
|
|
first word-vocabulary [
|
|
|
|
"Vocabulary" $heading $snippet
|
|
|
|
] when* ;
|
2006-01-03 17:43:29 -05:00
|
|
|
|
2005-12-28 20:25:17 -05:00
|
|
|
: $synopsis ( content -- )
|
2006-06-06 00:35:12 -04:00
|
|
|
dup $vocabulary
|
|
|
|
first dup parsing? [ $syntax ] [ $stack-effect ] if ;
|
2005-12-28 20:25:17 -05:00
|
|
|
|
|
|
|
: $description ( content -- )
|
2006-06-04 02:00:59 -04:00
|
|
|
"Description" $heading print-element ;
|
2005-12-28 20:25:17 -05:00
|
|
|
|
2005-12-29 19:01:19 -05:00
|
|
|
: $contract ( content -- )
|
2006-06-04 02:00:59 -04:00
|
|
|
"Contract" $heading print-element ;
|
2005-12-29 19:01:19 -05:00
|
|
|
|
2005-12-28 20:25:17 -05:00
|
|
|
: $examples ( content -- )
|
2006-06-04 02:00:59 -04:00
|
|
|
"Examples" $heading print-element ;
|
2005-12-28 20:25:17 -05:00
|
|
|
|
2006-01-06 02:04:42 -05:00
|
|
|
: $warning ( content -- )
|
2006-01-21 02:37:39 -05:00
|
|
|
[
|
|
|
|
current-style warning-style hash-union [
|
2006-06-04 02:00:59 -04:00
|
|
|
"Warning" $heading print-element
|
2006-01-21 02:37:39 -05:00
|
|
|
] with-nesting
|
|
|
|
] ($block) ;
|
2006-01-06 02:04:42 -05:00
|
|
|
|
2006-01-02 01:04:02 -05:00
|
|
|
: textual-list ( seq quot -- )
|
2006-01-21 02:37:39 -05:00
|
|
|
[ ", " print-element ] interleave ; inline
|
2006-01-02 01:04:02 -05:00
|
|
|
|
2005-12-31 04:20:07 -05:00
|
|
|
: $example ( content -- )
|
2006-06-04 02:00:59 -04:00
|
|
|
1 swap cut* swap "\n" join dup <input> [
|
|
|
|
input-style [ format* ] with-style terpri print-element
|
2006-01-02 01:04:02 -05:00
|
|
|
] ($code) ;
|
2005-12-28 20:25:17 -05:00
|
|
|
|
2005-12-01 00:53:12 -05:00
|
|
|
! Some links
|
2005-12-02 01:02:08 -05:00
|
|
|
TUPLE: link name ;
|
|
|
|
|
|
|
|
M: link article-title link-name article-title ;
|
|
|
|
M: link article-content link-name article-content ;
|
2006-06-12 02:41:19 -04:00
|
|
|
M: link summary
|
|
|
|
link-name dup word?
|
|
|
|
[ synopsis ] [ "Link to " swap unparse append ] if ;
|
2006-06-05 23:26:44 -04:00
|
|
|
|
2006-03-26 16:36:05 -05:00
|
|
|
: ($subsection) ( quot object -- )
|
|
|
|
subsection-style [
|
2006-06-12 02:41:19 -04:00
|
|
|
[ swap curry ] keep dup article-title swap <link>
|
2006-03-26 16:36:05 -05:00
|
|
|
rot simple-outliner
|
|
|
|
] with-style ;
|
|
|
|
|
2005-12-01 00:53:12 -05:00
|
|
|
: $subsection ( object -- )
|
2006-05-20 17:02:08 -04:00
|
|
|
[
|
2006-05-25 23:45:19 -04:00
|
|
|
first [ help ] swap ($subsection)
|
2006-05-20 17:02:08 -04:00
|
|
|
] ($block) ;
|
2005-12-01 00:53:12 -05:00
|
|
|
|
2006-03-28 23:31:45 -05:00
|
|
|
: ($subtopic) ( element -- quot )
|
|
|
|
[
|
|
|
|
default-style
|
|
|
|
[ last-block on print-element ] with-nesting*
|
|
|
|
] curry ;
|
|
|
|
|
|
|
|
: $subtopic ( object -- )
|
|
|
|
[
|
2006-05-18 22:20:23 -04:00
|
|
|
unclip swap ($subtopic) [
|
2006-03-28 23:31:45 -05:00
|
|
|
subtopic-style [ print-element ] with-style
|
|
|
|
] write-outliner
|
|
|
|
] ($block) ;
|
|
|
|
|
2006-01-06 02:04:42 -05:00
|
|
|
: $link ( article -- )
|
2006-06-10 00:53:29 -04:00
|
|
|
last-block off first link-style
|
2006-06-12 02:41:19 -04:00
|
|
|
[ dup article-title swap <link> simple-object ] with-style ;
|
2005-12-01 00:53:12 -05:00
|
|
|
|
2006-06-08 18:06:38 -04:00
|
|
|
: $links ( content -- )
|
|
|
|
[ 1array $link ] textual-list ;
|
|
|
|
|
2006-01-02 16:35:37 -05:00
|
|
|
: $see-also ( content -- )
|
2006-06-08 18:06:38 -04:00
|
|
|
"See also" $heading $links ;
|
2006-01-02 16:35:37 -05:00
|
|
|
|
2006-06-09 21:55:37 -04:00
|
|
|
: $table ( content -- )
|
2006-06-10 00:53:29 -04:00
|
|
|
?terpri table-style [
|
|
|
|
current-style [ print-element ] tabular-output
|
|
|
|
] with-style ;
|
2006-06-08 00:38:34 -04:00
|
|
|
|
2006-01-06 02:04:42 -05:00
|
|
|
: $values ( content -- )
|
2006-06-04 02:00:59 -04:00
|
|
|
"Arguments and values" $heading
|
2006-06-08 00:38:34 -04:00
|
|
|
[ first2 >r \ $snippet swap 2array r> 2array ] map
|
|
|
|
$table ;
|
2006-01-06 02:04:42 -05:00
|
|
|
|
2006-01-06 23:10:02 -05:00
|
|
|
: $predicate ( content -- )
|
|
|
|
{ { "object" "an object" } } $values
|
2006-01-21 02:37:39 -05:00
|
|
|
[
|
|
|
|
"Tests if the object is an instance of the " ,
|
|
|
|
{ $link } swap append ,
|
|
|
|
" class." ,
|
|
|
|
] { } make $description ;
|
2005-12-30 03:57:38 -05:00
|
|
|
|
2006-06-08 00:38:34 -04:00
|
|
|
: $list ( content -- ) [ "-" swap 2array ] map $table ;
|
2005-12-30 03:57:38 -05:00
|
|
|
|
|
|
|
: $errors ( content -- )
|
2006-06-04 02:00:59 -04:00
|
|
|
"Errors" $heading print-element ;
|
2005-12-30 03:57:38 -05:00
|
|
|
|
|
|
|
: $side-effects ( content -- )
|
2006-06-04 02:00:59 -04:00
|
|
|
"Side effects" $heading "Modifies " print-element
|
2006-01-02 01:04:02 -05:00
|
|
|
[ $snippet ] textual-list ;
|
2005-12-30 03:57:38 -05:00
|
|
|
|
|
|
|
: $notes ( content -- )
|
2006-06-04 02:00:59 -04:00
|
|
|
"Notes" $heading print-element ;
|
2006-01-06 22:42:07 -05:00
|
|
|
|
2006-06-12 02:41:19 -04:00
|
|
|
: $see ( content -- )
|
|
|
|
code-style [ first see ] with-nesting* ;
|
|
|
|
|
|
|
|
: $definition ( content -- )
|
|
|
|
"Definition" $heading $see ;
|
|
|
|
|
2006-06-06 21:29:09 -04:00
|
|
|
: $curious ( content -- )
|
|
|
|
"For the curious..." $heading print-element ;
|
|
|
|
|
|
|
|
: $references ( content -- )
|
|
|
|
"References" $heading
|
|
|
|
unclip print-element [ \ $link swap 2array ] map $list ;
|
|
|
|
|
2006-01-06 22:42:07 -05:00
|
|
|
: $shuffle ( content -- )
|
|
|
|
drop
|
|
|
|
"Shuffle word. Re-arranges the stack according to the stack effect pattern." $description ;
|
2006-01-08 20:41:31 -05:00
|
|
|
|
|
|
|
: $low-level-note
|
|
|
|
drop
|
|
|
|
"Calling this word directly is not necessary in most cases. Higher-level words call it automatically." print-element ;
|
2006-01-12 00:34:56 -05:00
|
|
|
|
|
|
|
: $values-x/y
|
2006-01-12 01:08:45 -05:00
|
|
|
drop
|
2006-01-12 00:34:56 -05:00
|
|
|
{ { "x" "a complex number" } { "y" "a complex number" } } $values ;
|
2006-01-16 02:48:15 -05:00
|
|
|
|
|
|
|
: $io-error
|
2006-01-21 02:37:39 -05:00
|
|
|
drop
|
2006-01-16 02:48:15 -05:00
|
|
|
"Throws an error if the I/O operation fails." $errors ;
|
2006-06-12 03:21:08 -04:00
|
|
|
|
2006-06-12 03:23:09 -04:00
|
|
|
: sort-articles ( seq -- assoc )
|
|
|
|
[ [ article-title ] keep 2array ] map
|
|
|
|
[ [ first ] 2apply <=> ] sort
|
|
|
|
[ second ] map ;
|
|
|
|
|
2006-06-12 03:21:08 -04:00
|
|
|
: help-outliner ( seq quot -- | quot: obj -- )
|
|
|
|
swap sort-articles [ ($subsection) terpri ] each-with ;
|
|
|
|
|
|
|
|
: $outliner ( content -- )
|
2006-06-12 03:23:09 -04:00
|
|
|
first call [ help ] help-outliner ;
|