Posted to tcl by mjanssen at Wed Dec 19 16:33:18 GMT 2007view pretty
# include procs proc ldap::parseFilter {filterString} { if {![regexp -- {^\((.*)\)$} $filterString -> filterComp]} { error "invalid filter string: syntax is \"( ..... )\"" } return [parseFilterComp $filterComp] } proc ldap::parseFilterComp {filterComp} { set first [string index $filterComp 0] set rest [string range $filterComp 1 end] switch -- $first { & - | - ! { return [linsert [parseFilterList $rest] 0 $first] } default { # we have an item return as a single element list return [string map {"\\(" "(" "\\)" ")"} $filterComp] } } } proc ldap::parseFilterList {filterList} { set filters {} while {[string length $filterList] > 0} { if {[string index $filterList 0]!="("} { error "invalid filter component, syntax \"( ....\"" } else { set filterList [string range $filterList 1 end] regexp -- {^(.*?[^\\])\)(.*)$} $filterList -> filter filterList lappend filters [parseFilter ($filter)] } } return $filters } # and replace regexps by: set filterString [parseFilter $filterString]