Posted to tcl by mjanssen at Wed Dec 19 16:33:18 GMT 2007view raw
- # 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]