Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/lib/tcl8.6/word.tcl @ 68:5028fdace37b
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 16:23:26 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 68:5028fdace37b |
---|---|
1 # word.tcl -- | |
2 # | |
3 # This file defines various procedures for computing word boundaries in | |
4 # strings. This file is primarily needed so Tk text and entry widgets behave | |
5 # properly for different platforms. | |
6 # | |
7 # Copyright (c) 1996 Sun Microsystems, Inc. | |
8 # Copyright (c) 1998 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 | |
13 # The following variables are used to determine which characters are | |
14 # interpreted as white space. | |
15 | |
16 if {$::tcl_platform(platform) eq "windows"} { | |
17 # Windows style - any but a unicode space char | |
18 if {![info exists ::tcl_wordchars]} { | |
19 set ::tcl_wordchars {\S} | |
20 } | |
21 if {![info exists ::tcl_nonwordchars]} { | |
22 set ::tcl_nonwordchars {\s} | |
23 } | |
24 } else { | |
25 # Motif style - any unicode word char (number, letter, or underscore) | |
26 if {![info exists ::tcl_wordchars]} { | |
27 set ::tcl_wordchars {\w} | |
28 } | |
29 if {![info exists ::tcl_nonwordchars]} { | |
30 set ::tcl_nonwordchars {\W} | |
31 } | |
32 } | |
33 | |
34 # Arrange for caches of the real matcher REs to be kept, which enables the REs | |
35 # themselves to be cached for greater performance (and somewhat greater | |
36 # clarity too). | |
37 | |
38 namespace eval ::tcl { | |
39 variable WordBreakRE | |
40 array set WordBreakRE {} | |
41 | |
42 proc UpdateWordBreakREs args { | |
43 # Ignores the arguments | |
44 global tcl_wordchars tcl_nonwordchars | |
45 variable WordBreakRE | |
46 | |
47 # To keep the RE strings short... | |
48 set letter $tcl_wordchars | |
49 set space $tcl_nonwordchars | |
50 | |
51 set WordBreakRE(after) "$letter$space|$space$letter" | |
52 set WordBreakRE(before) "^.*($letter$space|$space$letter)" | |
53 set WordBreakRE(end) "$space*$letter+$space" | |
54 set WordBreakRE(next) "$letter*$space+$letter" | |
55 set WordBreakRE(previous) "$space*($letter+)$space*\$" | |
56 } | |
57 | |
58 # Initialize the cache | |
59 UpdateWordBreakREs | |
60 trace add variable ::tcl_wordchars write ::tcl::UpdateWordBreakREs | |
61 trace add variable ::tcl_nonwordchars write ::tcl::UpdateWordBreakREs | |
62 } | |
63 | |
64 # tcl_wordBreakAfter -- | |
65 # | |
66 # This procedure returns the index of the first word boundary after the | |
67 # starting point in the given string, or -1 if there are no more boundaries in | |
68 # the given string. The index returned refers to the first character of the | |
69 # pair that comprises a boundary. | |
70 # | |
71 # Arguments: | |
72 # str - String to search. | |
73 # start - Index into string specifying starting point. | |
74 | |
75 proc tcl_wordBreakAfter {str start} { | |
76 variable ::tcl::WordBreakRE | |
77 set result {-1 -1} | |
78 regexp -indices -start $start -- $WordBreakRE(after) $str result | |
79 return [lindex $result 1] | |
80 } | |
81 | |
82 # tcl_wordBreakBefore -- | |
83 # | |
84 # This procedure returns the index of the first word boundary before the | |
85 # starting point in the given string, or -1 if there are no more boundaries in | |
86 # the given string. The index returned refers to the second character of the | |
87 # pair that comprises a boundary. | |
88 # | |
89 # Arguments: | |
90 # str - String to search. | |
91 # start - Index into string specifying starting point. | |
92 | |
93 proc tcl_wordBreakBefore {str start} { | |
94 variable ::tcl::WordBreakRE | |
95 set result {-1 -1} | |
96 regexp -indices -- $WordBreakRE(before) [string range $str 0 $start] result | |
97 return [lindex $result 1] | |
98 } | |
99 | |
100 # tcl_endOfWord -- | |
101 # | |
102 # This procedure returns the index of the first end-of-word location after a | |
103 # starting index in the given string. An end-of-word location is defined to be | |
104 # the first whitespace character following the first non-whitespace character | |
105 # after the starting point. Returns -1 if there are no more words after the | |
106 # starting point. | |
107 # | |
108 # Arguments: | |
109 # str - String to search. | |
110 # start - Index into string specifying starting point. | |
111 | |
112 proc tcl_endOfWord {str start} { | |
113 variable ::tcl::WordBreakRE | |
114 set result {-1 -1} | |
115 regexp -indices -start $start -- $WordBreakRE(end) $str result | |
116 return [lindex $result 1] | |
117 } | |
118 | |
119 # tcl_startOfNextWord -- | |
120 # | |
121 # This procedure returns the index of the first start-of-word location after a | |
122 # starting index in the given string. A start-of-word location is defined to | |
123 # be a non-whitespace character following a whitespace character. Returns -1 | |
124 # if there are no more start-of-word locations after the starting point. | |
125 # | |
126 # Arguments: | |
127 # str - String to search. | |
128 # start - Index into string specifying starting point. | |
129 | |
130 proc tcl_startOfNextWord {str start} { | |
131 variable ::tcl::WordBreakRE | |
132 set result {-1 -1} | |
133 regexp -indices -start $start -- $WordBreakRE(next) $str result | |
134 return [lindex $result 1] | |
135 } | |
136 | |
137 # tcl_startOfPreviousWord -- | |
138 # | |
139 # This procedure returns the index of the first start-of-word location before | |
140 # a starting index in the given string. | |
141 # | |
142 # Arguments: | |
143 # str - String to search. | |
144 # start - Index into string specifying starting point. | |
145 | |
146 proc tcl_startOfPreviousWord {str start} { | |
147 variable ::tcl::WordBreakRE | |
148 set word {-1 -1} | |
149 if {$start > 0} { | |
150 regexp -indices -- $WordBreakRE(previous) [string range $str 0 $start-1] \ | |
151 result word | |
152 } | |
153 return [lindex $word 0] | |
154 } |