It's not Java, so you don't need special tool :)
Considering that out procedures/IncrTcl methods has comments like this:
proc f {args} { ## Doc-string for this method. # Syntax: f ... ## ... CODE ... }OR even:
proc f {args} { ## Doc-string for this method. # Syntax: f ... # Other help ## ... CODE ... }Well, doc-string is at proc body start, and begins with '##' and ends with '##' (at the same line or next), other comments are treated as usual comments and are ignored for doc-string mechanism. Here is example how to parse suck doc-strings:
package provide mydoc 1.1 package require Itcl namespace eval mydoc { namespace export doc } set _NOHELPMSG "No help." proc ::mydoc::_docstring {body} { set body [string trim $body] set docstring "" # without 1st '^' will match any FIRST docstring block even after # commands! if {[regexp {^##\s*([^\n]+\n?)+(##)} $body docstring]} { set docstring [regsub -all {\s*#\s?} $docstring \n] set docstring [string trim $docstring] return $docstring } } proc ::mydoc::doc args { ## Help on command: procedure or class method. Call: # doc some_object some_method # doc some_class some_method # doc some_proc ## global _NOHELPMSG set found "" switch -- [llength $args] { 1 { # args: proc set name [lindex $args 0] set arguments [info args $name] set body [info body $name] set found [_docstring $body] } 2 { # FIXME not optimal! # args: object|class method lassign $args cls_obj meth set objs [itcl::find objects] # cls_obj may be object OR class. What is it? if {-1 != [lsearch -regexp $objs :*$cls_obj]} { # this is the object set arguments [$cls_obj info args $meth] set body [$cls_obj info body $meth] set found [_docstring $body] } else { # this is the class set arguments [namespace eval ::$cls_obj info args $meth] set body [namespace eval ::$cls_obj info body $meth] set found [_docstring $body] } } default { error "wrong args: proc | object method | class method" } } if {$found eq ""} { return $_NOHELPMSG } else { return $found } }Usage is simple, you can call:
doc object method doc class method doc usual-procedureClass - is the IncrTcl class
Комментариев нет:
Отправить комментарий
Thanks for your posting!