word.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # word.tcl --
  2. #
  3. # This file defines various procedures for computing word boundaries
  4. # in strings.  This file is primarily needed so Tk text and entry
  5. # widgets behave properly for different platforms.
  6. #
  7. # Copyright (c) 1996 by Sun Microsystems, Inc.
  8. # Copyright (c) 1998 by Scritpics Corporation.
  9. #
  10. # See the file "license.terms" for information on usage and redistribution
  11. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  12. # RCS: @(#) $Id: word.tcl,v 1.7.2.1 2005/07/22 21:59:41 dgp Exp $
  13. # The following variables are used to determine which characters are
  14. # interpreted as white space.  
  15. if {$::tcl_platform(platform) eq "windows"} {
  16.     # Windows style - any but a unicode space char
  17.     set tcl_wordchars "\S"
  18.     set tcl_nonwordchars "\s"
  19. } else {
  20.     # Motif style - any unicode word char (number, letter, or underscore)
  21.     set tcl_wordchars "\w"
  22.     set tcl_nonwordchars "\W"
  23. }
  24. # tcl_wordBreakAfter --
  25. #
  26. # This procedure returns the index of the first word boundary
  27. # after the starting point in the given string, or -1 if there
  28. # are no more boundaries in the given string.  The index returned refers
  29. # to the first character of the pair that comprises a boundary.
  30. #
  31. # Arguments:
  32. # str - String to search.
  33. # start - Index into string specifying starting point.
  34. proc tcl_wordBreakAfter {str start} {
  35.     global tcl_nonwordchars tcl_wordchars
  36.     set str [string range $str $start end]
  37.     if {[regexp -indices "$tcl_wordchars$tcl_nonwordchars|$tcl_nonwordchars$tcl_wordchars" $str result]} {
  38. return [expr {[lindex $result 1] + $start}]
  39.     }
  40.     return -1
  41. }
  42. # tcl_wordBreakBefore --
  43. #
  44. # This procedure returns the index of the first word boundary
  45. # before the starting point in the given string, or -1 if there
  46. # are no more boundaries in the given string.  The index returned
  47. # refers to the second character of the pair that comprises a boundary.
  48. #
  49. # Arguments:
  50. # str - String to search.
  51. # start - Index into string specifying starting point.
  52. proc tcl_wordBreakBefore {str start} {
  53.     global tcl_nonwordchars tcl_wordchars
  54.     if {$start eq "end"} {
  55. set start [string length $str]
  56.     }
  57.     if {[regexp -indices "^.*($tcl_wordchars$tcl_nonwordchars|$tcl_nonwordchars$tcl_wordchars)" [string range $str 0 $start] result]} {
  58. return [lindex $result 1]
  59.     }
  60.     return -1
  61. }
  62. # tcl_endOfWord --
  63. #
  64. # This procedure returns the index of the first end-of-word location
  65. # after a starting index in the given string.  An end-of-word location
  66. # is defined to be the first whitespace character following the first
  67. # non-whitespace character after the starting point.  Returns -1 if
  68. # there are no more words after the starting point.
  69. #
  70. # Arguments:
  71. # str - String to search.
  72. # start - Index into string specifying starting point.
  73. proc tcl_endOfWord {str start} {
  74.     global tcl_nonwordchars tcl_wordchars
  75.     if {[regexp -indices "$tcl_nonwordchars*$tcl_wordchars+$tcl_nonwordchars" 
  76.     [string range $str $start end] result]} {
  77. return [expr {[lindex $result 1] + $start}]
  78.     }
  79.     return -1
  80. }
  81. # tcl_startOfNextWord --
  82. #
  83. # This procedure returns the index of the first start-of-word location
  84. # after a starting index in the given string.  A start-of-word
  85. # location is defined to be a non-whitespace character following a
  86. # whitespace character.  Returns -1 if there are no more start-of-word
  87. # locations after the starting point.
  88. #
  89. # Arguments:
  90. # str - String to search.
  91. # start - Index into string specifying starting point.
  92. proc tcl_startOfNextWord {str start} {
  93.     global tcl_nonwordchars tcl_wordchars
  94.     if {[regexp -indices "$tcl_wordchars*$tcl_nonwordchars+$tcl_wordchars" 
  95.     [string range $str $start end] result]} {
  96. return [expr {[lindex $result 1] + $start}]
  97.     }
  98.     return -1
  99. }
  100. # tcl_startOfPreviousWord --
  101. #
  102. # This procedure returns the index of the first start-of-word location
  103. # before a starting index in the given string.
  104. #
  105. # Arguments:
  106. # str - String to search.
  107. # start - Index into string specifying starting point.
  108. proc tcl_startOfPreviousWord {str start} {
  109.     global tcl_nonwordchars tcl_wordchars
  110.     if {$start eq "end"} {
  111. set start [string length $str]
  112.     }
  113.     if {[regexp -indices 
  114.     "$tcl_nonwordchars*($tcl_wordchars+)$tcl_nonwordchars*$" 
  115.     [string range $str 0 [expr {$start - 1}]] result word]} {
  116. return [lindex $word 0]
  117.     }
  118.     return -1
  119. }