Index: TODO =================================================================== diff -u -r8aaec98df564488dc8540cd078d6a32dd55a08f7 -r79287f596cc2c14ecd2b788d217699e2baeb050d --- TODO (.../TODO) (revision 8aaec98df564488dc8540cd078d6a32dd55a08f7) +++ TODO (.../TODO) (revision 79287f596cc2c14ecd2b788d217699e2baeb050d) @@ -635,6 +635,8 @@ - doCleanup is just called by recreate; merge it into XOTclCRecreateMethod. Is method cleanup necessary? is recreate not sufficient? + Delete "cleanup" from internally called methods in next, + keep it for compatibility in XOTcl - make XOTcl_FrameDecls transparent (use variable declarations in place instead of the macro) @@ -869,6 +871,9 @@ - added checks for documented, but unavailable methods in documentation - added comparison of documented parameters vs. actual parameters in documentation +- added @properties and has_property to the documentation classes. + Current primary purpose: define, which methods are internally-called +- added interanlly-called to the method object template TODO: - nameing @@ -930,6 +935,36 @@ - reduce indenting for code examples in documentation (high indentation makes readability worse). - make quality checks (missing documentation, ...) optional (maybe?) - handle object methods as well in quality checks +- why does one have to specify @superclass rather than determining the + superclass via introspection? +- danger, tcl-commands in comments (see :method get_unqualified_name) +- kann man "[:? {[$attr eval {info exists :default}]}" durch "[:?var :@param ..." ausdrücken? + oder vielleicht besser die variablen mit leerstring initialisieren + infrastrukt anpassen? + +- die Dokumentation der objekt- und Klassenmethoden muss aus gentclapi weg + und in predefined.tcl und xotcl2.tcl hineinwandern. Es werden nicht alle + möglichen methoden in next und/oder xotcl2 registiert, ein paar namen sind + anders, etc. + +- die folgenden calls sind streng genommen auch internally-called (d.h. von c aus aufgerufen), + aber aus unterscheidl. gründen noch nicht als solche gekennzeichnet: + + * wird meist vom benutzer aufgerufen, allerdings auch intern (bspw "reate" von "new") + XO_c_create_idx, + XO_o_destroy_idx, + XO_o_move_idx, + + * not documented yet + XO_c_requireobject_idx, + XO_o_defaultmethod_idx, + XO_o_init_idx, + XO_o_objectparameter_idx, + XO_o_unknown_idx + + * only XOTCL2: + XO_o_cleanup_idx, + XO_o_residualargs_idx, + - info method pararmetersyntax not defined for classical tcl procs (needed?) - migrate further test from .xotcl to .tcl (based on next instead of xotcl) Index: generic/gentclAPI.decls =================================================================== diff -u -r8aaec98df564488dc8540cd078d6a32dd55a08f7 -r79287f596cc2c14ecd2b788d217699e2baeb050d --- generic/gentclAPI.decls (.../gentclAPI.decls) (revision 8aaec98df564488dc8540cd078d6a32dd55a08f7) +++ generic/gentclAPI.decls (.../gentclAPI.decls) (revision 79287f596cc2c14ecd2b788d217699e2baeb050d) @@ -319,6 +319,9 @@ # @method ::nx::Object#cleanup # +# TODO: this is a method not needed in Next, for backward compatibility +# available in XOTcl 2.0 +# # Resets an object or class to its initial state, as after object # allocation (see {{@method ::nx::Class class alloc}}). This method # participates in recreating objects, i.e, it is called during the @@ -327,6 +330,8 @@ # ::nx::core::configure}}, object variables are deleted, per-object # namespaces are cleared, and the object's relationsships (e.g., mixin # relations) are reset. +# +# @properties interally-called objectMethod cleanup XOTclOCleanupMethod { } @@ -345,6 +350,7 @@ # The method {{{configure}}} can be called at arbitrary times to # "re-set" an object. # +# @properties interally-called # @param args The variable argument vector stores the object parameters and their values objectMethod configure XOTclOConfigureMethod { {-argName "args" -type allargs} @@ -484,6 +490,7 @@ # @method ::nx::Object#residualargs # +# @properties interally-called # @param args objectMethod residualargs XOTclOResidualargsMethod { {-argName "args" -type allargs} @@ -568,6 +575,7 @@ # bypassing the overall {{{create}}} mechanism by just allocating # uninitialized objects using {{{alloc}}}. # +# @properties interally-called # @param name The object identifier assigned to the object storage to be allocated. # @return The name of the allocated, uninitialized object classMethod alloc XOTclCAllocMethod { @@ -641,6 +649,7 @@ # {{{::nx::Class}}}, you may consider refining it in a subclass or # mixin class for customizing the destruction process. # +# @properties interally-called # @param object The name of the object to be scheduled for deletion. classMethod dealloc XOTclCDeallocMethod { {-argName "object" -required 1 -type tclobj} @@ -707,6 +716,7 @@ # Class create Bar; # calls Bar->destroy() + Class->create(::Bar, ...) # }}} # +# @properties interally-called # @param name The name (identifier) of the object under recreation # @param args Arbitrary vector of arguments # @return The name of the recreated object Index: generic/predefined.tcl =================================================================== diff -u -r8aaec98df564488dc8540cd078d6a32dd55a08f7 -r79287f596cc2c14ecd2b788d217699e2baeb050d --- generic/predefined.tcl (.../predefined.tcl) (revision 8aaec98df564488dc8540cd078d6a32dd55a08f7) +++ generic/predefined.tcl (.../predefined.tcl) (revision 79287f596cc2c14ecd2b788d217699e2baeb050d) @@ -56,7 +56,7 @@ } # set a few aliases as protected - foreach cmd [list __next cleanup noinit residualargs uplevel upvar] { + foreach cmd [list __next cleanup noinit residualargs uplevel upvar] { ::nx::core::methodproperty Object $cmd protected 1 } Index: library/lib/doc-assets/object.html.tmpl =================================================================== diff -u -r8aaec98df564488dc8540cd078d6a32dd55a08f7 -r79287f596cc2c14ecd2b788d217699e2baeb050d --- library/lib/doc-assets/object.html.tmpl (.../object.html.tmpl) (revision 8aaec98df564488dc8540cd078d6a32dd55a08f7) +++ library/lib/doc-assets/object.html.tmpl (.../object.html.tmpl) (revision 79287f596cc2c14ecd2b788d217699e2baeb050d) @@ -103,6 +103,10 @@ [$method name] [$method parameters] + [:? {[$method has_property interally-called]} { +
Internally called method, can be redefined.
+ }] +
[$method text]
Index: library/lib/doc-tools.tcl =================================================================== diff -u -r8aaec98df564488dc8540cd078d6a32dd55a08f7 -r79287f596cc2c14ecd2b788d217699e2baeb050d --- library/lib/doc-tools.tcl (.../doc-tools.tcl) (revision 8aaec98df564488dc8540cd078d6a32dd55a08f7) +++ library/lib/doc-tools.tcl (.../doc-tools.tcl) (revision 79287f596cc2c14ecd2b788d217699e2baeb050d) @@ -234,7 +234,9 @@ # # @param qualified_name The fully qualified name (i.e., including the root namespace) :method get_unqualified_name {qualified_name} { - return [string trim [string map [list [:root_namespace] ""] $qualified_name] ":"] + # TODO: danger, tcl-commands in comments + # similar to \[namespace tail], but the "tail" might be an object with a namespace + return [string trimleft [string map [list [:root_namespace] ""] $qualified_name] ":"] } } @@ -351,7 +353,13 @@ :attribute @doc:multivalued {set :incremental 1} :attribute @see -slotclass ::nx::doc::PartAttribute + :attribute @properties -slotclass ::nx::doc::PartAttribute + :method has_property {prop} { + if {![info exists :@properties]} {return 0} + expr {$prop in ${:@properties}} + } + # @method _doc # # The method _doc can be use to obtain the value of the documentation @@ -621,7 +629,7 @@ } } if {1} { - # TODO: make me conditional + # TODO: make me conditional, MARKUP should be in templates set object [${:partof} name] if {[::nx::core::objectproperty $object object]} { if {[$object info methods ${:name}] ne ""} { @@ -636,7 +644,7 @@ } else { set comment "actual parameter: $actualParams" } - append comment "
Syntax: [$object info method parametersyntax ${:name}]" + append comment "
Syntax: obj ${:name} [$object info method parametersyntax ${:name}]" } } else { set comment "Method '${:name}' not defined on $object" @@ -669,12 +677,11 @@ # command parameters. # # @superclass ::nx::doc::entities::object::nx::doc::Part - # @superclass ::nx::doc::entities::object::nx::doc::Part PartClass create @param \ -superclass Part { :attribute spec :attribute default - + :object method id {partof name} { # The method contains the parameter-specific name production rules. #