help.apropos: some cleanup and performance improvement.

db4
John Benediktsson 2010-08-13 19:32:49 -07:00
parent a8e9b57685
commit 0701a68760
1 changed files with 10 additions and 16 deletions

View File

@ -28,11 +28,11 @@ M: more-completions article-name
seq>> length max-completions - number>string " more results" append ; seq>> length max-completions - number>string " more results" append ;
M: more-completions article-content M: more-completions article-content
seq>> sort-values keys \ $completions prefix ; seq>> [ second >lower ] sort-with keys \ $completions prefix ;
: (apropos) ( str candidates title -- element ) : (apropos) ( completions title -- element )
[ [
[ completions ] dip '[ '[
_ 1array \ $heading prefix , _ 1array \ $heading prefix ,
[ max-completions short head keys \ $completions prefix , ] [ max-completions short head keys \ $completions prefix , ]
[ dup length max-completions > [ more-completions boa <$link> , ] [ drop ] if ] [ dup length max-completions > [ more-completions boa <$link> , ] [ drop ] if ]
@ -40,22 +40,16 @@ M: more-completions article-content
] unless-empty ] unless-empty
] { } make ; ] { } make ;
: word-candidates ( words -- candidates ) : articles-matching ( str -- seq )
[ dup name>> >lower ] { } map>assoc ; articles get
[ [ >link ] [ title>> ] bi* ] { } assoc-map-as
: vocab-candidates ( -- candidates ) completions ;
all-vocabs-recursive no-roots no-prefixes
[ dup vocab-name >lower ] { } map>assoc ;
: help-candidates ( seq -- candidates )
[ [ >link ] [ article-title >lower ] bi ] { } map>assoc
sort-values ;
: $apropos ( str -- ) : $apropos ( str -- )
first first
[ all-words word-candidates "Words" (apropos) ] [ words-matching "Words" (apropos) ]
[ vocab-candidates "Vocabularies" (apropos) ] [ vocabs-matching "Vocabularies" (apropos) ]
[ articles get keys help-candidates "Help articles" (apropos) ] [ articles-matching "Help articles" (apropos) ]
tri 3array print-element ; tri 3array print-element ;
TUPLE: apropos search ; TUPLE: apropos search ;