(chapter-start 'html-help “Utilities for generating html-formatted help from 'dox data”)
(def helpful/type (thing)
(if (no thing) "nil" (let type (type-of thing) (if (string-match type "ruby/Hash") 'ruby-hash (string-match type "ruby/") 'object type))))
(def helpful/keys (thing)
; return a string with one line per key ; to describe the corresponding value (map (fn (k) (%div.keyhelp (%div.key k) "->" (%div.keyvalue (helpful/type thing.,k)))) (sort:hash-keys thing)))
(def helpful/info (thing)
; tries to say something useful about the thing (if (no thing) "nil" (pair? thing) "list with ~(len thing) elements, first is a ~(helpful/type:car thing)" (with (mytype (helpful/type thing) mykeys (hash-keys thing)) "is a ~|mytype|~(helpful/keys thing)")))
(def helpful/index ()
; return the names and types of all the things that are documented (joinstr "\n" (map (curry inspect:firstn 2) (collect dox-with-documentation (dox-all-items)))))
(mac helpful/dox (name)
; finds documentation for the named thing `(let infos (dox-lookup ',name) (if (no infos) (joinstr " : " ,(pp name) (helpful/info ,name)) (joinstr "\n\n" (map λi(dox-show-info i.name i.what i.texts i.args i.src) infos)))))
(def helpful/show-examples (name examples)
(if examples (%div.helpful-examples (%h2 "Examples for " (%span.example-name name)) (map λk(map λx(%pre.helpful-example (dox-show-one-example name x)) k) examples))))
(def helpful/examples (name)
; finds examples that have been defined for the given 'name (helpful/show-examples name (dox-examples name)))
(mac help (thing)
; returns helpful information about the thing ; if thing is nil, show what help is available for `(%pre.helpful ,(if (no thing) `(helpful/index) `(joinstr "\n\n" (helpful/dox ,thing) (helpful/examples ',thing)))))
(def-colon-syntax help names
(let target (cadr names) `(help ,(if (eq? target '||) nil target))))