factor/core/help/help.factor

86 lines
2.1 KiB
Factor

! Copyright (C) 2005, 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
IN: help
USING: arrays io kernel namespaces parser prettyprint sequences
words hashtables definitions errors generic ;
M: word article-title
dup parsing? [
word-name
] [
dup word-name
swap stack-effect
[ effect>string " " swap 3append ] when*
] if ;
M: word article-content
[
\ $vocabulary over 2array ,
dup word-help [
%
] [
dup "predicating" word-prop [
\ $predicate swap 2array ,
] when*
] if*
\ $definition swap 2array ,
] { } make ;
: $title ( topic -- )
title-style get [
title-style get [
dup [ 1array $link ] ($block) $doc-path
] with-nesting
] with-style terpri ;
: (help) ( topic -- ) article-content print-content ;
: help ( topic -- ) dup $title (help) terpri ;
: handbook ( -- ) "handbook" help ;
: $subtopic ( element -- )
[
subtopic-style get [
unclip f rot [ print-content ] curry write-outliner
] with-style
] ($block) ;
: ($subsection) ( object -- )
[ article-title ] keep >link
dup [ (help) ] curry
write-outliner ;
: $subsection ( element -- )
[
subsection-style get [ first ($subsection) ] with-style
] ($block) ;
: help-outliner ( seq quot -- )
subsection-style get [
sort-articles [ ($subsection) ] [ terpri ] interleave
] with-style ;
: $outliner ( element -- )
first call dup empty?
[ drop ] [ [ help-outliner ] ($block) ] if ;
: remove-article ( name -- )
dup articles get hash-member? [
dup unxref-article
dup articles get remove-hash
] when drop ;
: add-article ( article name -- )
[ remove-article ] keep
[ articles get set-hash ] keep
xref-article ;
: remove-word-help ( word -- )
dup word-help [ dup unxref-article ] when drop ;
: set-word-help ( content word -- )
[ remove-word-help ] keep
[ swap "help" set-word-prop ] keep
xref-article ;