Posted to tcl by kbk at Wed Nov 29 19:54:14 GMT 2006view raw

  1. proc OptionalUnicode {x} {
  2. return TEST$x
  3. }
  4.  
  5. set teststring {
  6. this
  7. a[:optional_unicode(foo):]b
  8. c[:optional_unicode(bar):]d
  9. that
  10. }
  11.  
  12. set pattern {\[\:optional_unicode\(([^)]*)\):\]}
  13.  
  14. set i 0
  15. set output {}
  16. while {[regexp -indices -start $i $pattern $teststring whole part]} {
  17. foreach {i0 i3} $whole break
  18. foreach {i1 i2} $part break
  19. append output \
  20. [string range $teststring $i [expr ($i0-1)]] \
  21. [OptionalUnicode [string range $teststring $i1 $i2]]
  22. set i [expr {$i3 + 1}]
  23. }
  24. append output [string range $teststring $i end]
  25.  
  26. puts $output

Comments

Posted by joseki at Wed Nov 29 20:03:50 GMT 2006 [text] [code]

proc regsub-eval { pattern teststring } { set i 0 set output {} while {[regexp -indices -start $i $pattern $teststring whole part]} { foreach {i0 i3} $whole break foreach {i1 i2} $part break append output \ [string range $teststring $i [expr ($i0-1)]] \ [Optional_Unicode [string range $teststring $i1 $i2]] set i [expr {$i3 + 1}] } append output [string range $teststring $i end] } set pattern {\[\:optional_unicode\(([^)]*)\):\]} set xml [ regsub-eval $pattern $xml ]