Index: openacs-4/packages/acs-templating/tcl/tag-init.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-templating/tcl/tag-init.tcl,v diff -u -N -r1.7 -r1.8 --- openacs-4/packages/acs-templating/tcl/tag-init.tcl 12 Jan 2003 05:34:51 -0000 1.7 +++ openacs-4/packages/acs-templating/tcl/tag-init.tcl 13 Jan 2003 04:07:40 -0000 1.8 @@ -600,6 +600,9 @@ # use as follows: # # +# +# Foo, Bar or Baz was selected +# # # A was selected # @@ -651,24 +654,74 @@ template_tag case { chunk params } { - # get the case value - - set value [ns_set iget $params value] - # Scan the parameter stack backward, looking for the tag name set tag_id [template::enclosing_tag switch] if { [string equal $tag_id {}] } { error "No enclosing SWITCH tag for CASE tag on value $value" } + # get the case value + + set value [ns_set iget $params value] + # insert the case statement and eval the chunk in between - template::adp_append_code "$value {" -nobreak + if ![string equal $value ""] { - template::adp_compile_chunk $chunk + # processing form - template::adp_append_code "}" + template::adp_append_code "$value {" -nobreak + + template::adp_compile_chunk $chunk + + template::adp_append_code "}" + + } else { + + # processing form + + set switches "" + set size [ns_set size $params] + set size_1 [expr $size - 1] + + for { set i 0 } { $i < $size } { incr i } { + + set key [ns_set key $params $i] + set value [ns_set value $params $i] + + # pass over the first arg (syntax sugar), but check format + if { $i == 0 } { + + if ![string equal $key "in"] { + error "Format error: should be " + } + + } else { + + if { [string equal $key $value] } { + + # last item in list so process the chunk + if { $i == $size_1 } { + + template::adp_append_code "$switches $value {" -nobreak + + template::adp_compile_chunk $chunk + + template::adp_append_code "}" + + } else { + + # previous items default to pass-through + append switches " $key - " + } + + } else { + error "Format error: should be " + } + } + } + } } # default value for case statement which is a sub-tag in switch tag