angerangel edited this page Dec 18, 2012 · 1 revision

Table of Contents

USAGE

  ? 'word /doc

DESCRIPTION

Prints information about words and values. ? is a function value.

ARGUMENTS

  • word (any-type!)

REFINEMENTS

  • /doc -- Open web browser to related documentation.

SOURCE

^-^-^-^-help insert
^-^-^-^-? insert

^-^-^-To search within the system, use quotes:

^-^-^-^-? "insert"

^-^-^-To browse online web documents:

^-^-^-^-help/doc insert

^-^-^-To view words and values of a context or object:

^-^-^-^-? lib    - the runtime library
^-^-^-^-? self   - your user context
^-^-^-^-? system - the system object
^-^-^-^-? system/options - special settings

^-^-^-To see all words of a specific datatype:

^-^-^-^-? native!
^-^-^-^-? function!
^-^-^-^-? datatype!

^-^-^-Other debug functions:

^-^-^-^-docs - open browser to web documentation
^-^-^-^-?? - display a variable and its value
^-^-^-^-probe - print a value (molded)
^-^-^-^-source func - show source code of func
^-^-^-^-trace - trace evaluation steps
^-^-^-^-what - show a list of known functions
^-^-^-^-why? - explain more about last error (via web)

^-^-^-Other information:

^-^-^-^-chat - open DevBase developer forum/BBS
^-^-^-^-docs - open DocBase document wiki website
^-^-^-^-bugs - open CureCore bug database website
^-^-^-^-demo - run demo launcher (from rebol.com)
^-^-^-^-about - see general product info
^-^-^-^-upgrade - check for newer versions
^-^-^-^-changes - show changes for recent version
^-^-^-^-install - install (when applicable)
^-^-^-^-license - show user license
^-^-^-^-usage - program cmd line options
^-^-}
        exit
    ]
    if all [word? :word not value? :word] [word: mold :word]
    if all [
        doc
        word? :word
        any [any-function? get :word datatype? get :word]
    ] [
        item: form :word
        either any-function? get :word [
            foreach [a b] [
                "!" "-ex"
                "?" "-q"
                "*" "-mul"
                "+" "-plu"
                "/" "-div"
                "=" "-eq"
                "<" "-lt"
                ">" "-gt"
            ] [replace/all item a b]
            tmp: http://www.rebol.com/r3/docs/functions/
        ] [
            tmp: http://www.rebol.com/r3/docs/datatypes/
            remove back tail item
        ]
        browse join tmp [item ".html"]
    ]
    if any [string? :word all [word? :word datatype? get :word] ] [
        if all [word? :word datatype? get :word] [
            value: spec-of get :word
            print [
                mold :word "is a datatype" newline
                "It is defined as" either find "aeiou" first value/title ["an"] ["a"] value/title newline
                "It is of the general type" value/type newline
            ]
        ]
        if any [:word = 'unset! not value? :word] [exit]
        types: dump-obj/match lib :word
        sort types
        if not empty? types [
            print ["Found these related words:" newline types]
            exit
        ]
        if all [word? :word datatype? get :word] [
            print ["No values defined for" word]
            exit
        ]
        print ["No information on" word]
        exit
    ]
    type-name: func [value] [
        value: mold type? :value
        clear back tail value
        join either find "aeiou" first value ["an "] ["a "] value
    ]
    if not any [word? :word path? :word] [
        print [mold :word "is" type-name :word]
        exit
    ]
    either path? :word [
        if any [
            error? set/any 'value try [get :word]
            not value? 'value
        ] [
            print ["No information on" word "(path has no value)"]
            exit
        ]
    ] [
        value: get :word
    ]
    unless any-function? :value [
        prin [uppercase mold word "is" type-name :value "of value: "]
        print either any [object? value port? value] [print "" dump-obj value] [mold :value]
        exit
    ]
    prin "USAGE:^/^-"
    args: words-of :value
    clear find args /local
    either op? :value [
        print [args/1 word args/2]
    ] [
        print [uppercase mold word args]
    ]
    print ajoin [
        newline "DESCRIPTION:" newline
        tab any [title-of :value "(undocumented)"] newline
        tab uppercase mold word " is " type-name :value " value."
    ]
    unless args: find spec-of :value any-word! [exit]
    clear find args /local
    print-args: func [label list /extra /local str] [
        if empty? list [exit]
        print label
        foreach arg list [
            str: ajoin [tab arg/1]
            if all [extra word? arg/1] [insert str tab]
            if arg/2 [append append str " -- " arg/2]
            if all [arg/3 not refinement? arg/1] [
                repend str [" (" arg/3 ")"]
            ]
            print str
        ]
    ]
    use [argl refl ref b v] [
        argl: copy []
        refl: copy []
        ref: b: v: none
        parse args [
            any [string! | block!]
            any [
                set word [refinement! (ref: true) | any-word!]
                (append/only either ref [refl] [argl] b: reduce [word none none])
                any [set v block! (b/3: v) | set v string! (b/2: v)]
            ]
        ]
        print-args "^/ARGUMENTS:" argl
        print-args/extra "^/REFINEMENTS:" refl
    ]
    exit
] ] 
Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.