Posted to tcl by mjanssen at Wed Dec 19 16:33:18 GMT 2007view raw

  1. # include procs
  2.  
  3. proc ldap::parseFilter {filterString} {
  4. if {![regexp -- {^\((.*)\)$} $filterString -> filterComp]} {
  5. error "invalid filter string: syntax is \"( ..... )\""
  6. }
  7. return [parseFilterComp $filterComp]
  8. }
  9.  
  10. proc ldap::parseFilterComp {filterComp} {
  11. set first [string index $filterComp 0]
  12. set rest [string range $filterComp 1 end]
  13. switch -- $first {
  14. & -
  15. | -
  16. ! {
  17. return [linsert [parseFilterList $rest] 0 $first]
  18. }
  19. default {
  20. # we have an item return as a single element list
  21. return [string map {"\\(" "(" "\\)" ")"} $filterComp]
  22. }
  23. }
  24. }
  25.  
  26. proc ldap::parseFilterList {filterList} {
  27. set filters {}
  28. while {[string length $filterList] > 0} {
  29. if {[string index $filterList 0]!="("} {
  30. error "invalid filter component, syntax \"( ....\""
  31. } else {
  32. set filterList [string range $filterList 1 end]
  33. regexp -- {^(.*?[^\\])\)(.*)$} $filterList -> filter filterList
  34. lappend filters [parseFilter ($filter)]
  35. }
  36. }
  37. return $filters
  38. }
  39.  
  40. # and replace regexps by: set filterString [parseFilter $filterString]