OSDN Git Service

Please enter the commit message for your changes. Lines starting
[eos/hostdependX86LINUX64.git] / util / X86LINUX64 / man / man3 / Tcl_ScanElement.3
1 '\"
2 '\" Copyright (c) 1989-1993 The Regents of the University of California.
3 '\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
4 '\"
5 '\" See the file "license.terms" for information on usage and redistribution
6 '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
7 '\" 
8 .TH Tcl_SplitList 3 8.0 Tcl "Tcl Library Procedures"
9 .\" The -*- nroff -*- definitions below are for supplemental macros used
10 .\" in Tcl/Tk manual entries.
11 .\"
12 .\" .AP type name in/out ?indent?
13 .\"     Start paragraph describing an argument to a library procedure.
14 .\"     type is type of argument (int, etc.), in/out is either "in", "out",
15 .\"     or "in/out" to describe whether procedure reads or modifies arg,
16 .\"     and indent is equivalent to second arg of .IP (shouldn't ever be
17 .\"     needed;  use .AS below instead)
18 .\"
19 .\" .AS ?type? ?name?
20 .\"     Give maximum sizes of arguments for setting tab stops.  Type and
21 .\"     name are examples of largest possible arguments that will be passed
22 .\"     to .AP later.  If args are omitted, default tab stops are used.
23 .\"
24 .\" .BS
25 .\"     Start box enclosure.  From here until next .BE, everything will be
26 .\"     enclosed in one large box.
27 .\"
28 .\" .BE
29 .\"     End of box enclosure.
30 .\"
31 .\" .CS
32 .\"     Begin code excerpt.
33 .\"
34 .\" .CE
35 .\"     End code excerpt.
36 .\"
37 .\" .VS ?version? ?br?
38 .\"     Begin vertical sidebar, for use in marking newly-changed parts
39 .\"     of man pages.  The first argument is ignored and used for recording
40 .\"     the version when the .VS was added, so that the sidebars can be
41 .\"     found and removed when they reach a certain age.  If another argument
42 .\"     is present, then a line break is forced before starting the sidebar.
43 .\"
44 .\" .VE
45 .\"     End of vertical sidebar.
46 .\"
47 .\" .DS
48 .\"     Begin an indented unfilled display.
49 .\"
50 .\" .DE
51 .\"     End of indented unfilled display.
52 .\"
53 .\" .SO ?manpage?
54 .\"     Start of list of standard options for a Tk widget. The manpage
55 .\"     argument defines where to look up the standard options; if
56 .\"     omitted, defaults to "options". The options follow on successive
57 .\"     lines, in three columns separated by tabs.
58 .\"
59 .\" .SE
60 .\"     End of list of standard options for a Tk widget.
61 .\"
62 .\" .OP cmdName dbName dbClass
63 .\"     Start of description of a specific option.  cmdName gives the
64 .\"     option's name as specified in the class command, dbName gives
65 .\"     the option's name in the option database, and dbClass gives
66 .\"     the option's class in the option database.
67 .\"
68 .\" .UL arg1 arg2
69 .\"     Print arg1 underlined, then print arg2 normally.
70 .\"
71 .\" .QW arg1 ?arg2?
72 .\"     Print arg1 in quotes, then arg2 normally (for trailing punctuation).
73 .\"
74 .\" .PQ arg1 ?arg2?
75 .\"     Print an open parenthesis, arg1 in quotes, then arg2 normally
76 .\"     (for trailing punctuation) and then a closing parenthesis.
77 .\"
78 .\"     # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
79 .if t .wh -1.3i ^B
80 .nr ^l \n(.l
81 .ad b
82 .\"     # Start an argument description
83 .de AP
84 .ie !"\\$4"" .TP \\$4
85 .el \{\
86 .   ie !"\\$2"" .TP \\n()Cu
87 .   el          .TP 15
88 .\}
89 .ta \\n()Au \\n()Bu
90 .ie !"\\$3"" \{\
91 \&\\$1 \\fI\\$2\\fP (\\$3)
92 .\".b
93 .\}
94 .el \{\
95 .br
96 .ie !"\\$2"" \{\
97 \&\\$1  \\fI\\$2\\fP
98 .\}
99 .el \{\
100 \&\\fI\\$1\\fP
101 .\}
102 .\}
103 ..
104 .\"     # define tabbing values for .AP
105 .de AS
106 .nr )A 10n
107 .if !"\\$1"" .nr )A \\w'\\$1'u+3n
108 .nr )B \\n()Au+15n
109 .\"
110 .if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
111 .nr )C \\n()Bu+\\w'(in/out)'u+2n
112 ..
113 .AS Tcl_Interp Tcl_CreateInterp in/out
114 .\"     # BS - start boxed text
115 .\"     # ^y = starting y location
116 .\"     # ^b = 1
117 .de BS
118 .br
119 .mk ^y
120 .nr ^b 1u
121 .if n .nf
122 .if n .ti 0
123 .if n \l'\\n(.lu\(ul'
124 .if n .fi
125 ..
126 .\"     # BE - end boxed text (draw box now)
127 .de BE
128 .nf
129 .ti 0
130 .mk ^t
131 .ie n \l'\\n(^lu\(ul'
132 .el \{\
133 .\"     Draw four-sided box normally, but don't draw top of
134 .\"     box if the box started on an earlier page.
135 .ie !\\n(^b-1 \{\
136 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
137 .\}
138 .el \}\
139 \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
140 .\}
141 .\}
142 .fi
143 .br
144 .nr ^b 0
145 ..
146 .\"     # VS - start vertical sidebar
147 .\"     # ^Y = starting y location
148 .\"     # ^v = 1 (for troff;  for nroff this doesn't matter)
149 .de VS
150 .if !"\\$2"" .br
151 .mk ^Y
152 .ie n 'mc \s12\(br\s0
153 .el .nr ^v 1u
154 ..
155 .\"     # VE - end of vertical sidebar
156 .de VE
157 .ie n 'mc
158 .el \{\
159 .ev 2
160 .nf
161 .ti 0
162 .mk ^t
163 \h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
164 .sp -1
165 .fi
166 .ev
167 .\}
168 .nr ^v 0
169 ..
170 .\"     # Special macro to handle page bottom:  finish off current
171 .\"     # box/sidebar if in box/sidebar mode, then invoked standard
172 .\"     # page bottom macro.
173 .de ^B
174 .ev 2
175 'ti 0
176 'nf
177 .mk ^t
178 .if \\n(^b \{\
179 .\"     Draw three-sided box if this is the box's first page,
180 .\"     draw two sides but no top otherwise.
181 .ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
182 .el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
183 .\}
184 .if \\n(^v \{\
185 .nr ^x \\n(^tu+1v-\\n(^Yu
186 \kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
187 .\}
188 .bp
189 'fi
190 .ev
191 .if \\n(^b \{\
192 .mk ^y
193 .nr ^b 2
194 .\}
195 .if \\n(^v \{\
196 .mk ^Y
197 .\}
198 ..
199 .\"     # DS - begin display
200 .de DS
201 .RS
202 .nf
203 .sp
204 ..
205 .\"     # DE - end display
206 .de DE
207 .fi
208 .RE
209 .sp
210 ..
211 .\"     # SO - start of list of standard options
212 .de SO
213 'ie '\\$1'' .ds So \\fBoptions\\fR
214 'el .ds So \\fB\\$1\\fR
215 .SH "STANDARD OPTIONS"
216 .LP
217 .nf
218 .ta 5.5c 11c
219 .ft B
220 ..
221 .\"     # SE - end of list of standard options
222 .de SE
223 .fi
224 .ft R
225 .LP
226 See the \\*(So manual entry for details on the standard options.
227 ..
228 .\"     # OP - start of full description for a single option
229 .de OP
230 .LP
231 .nf
232 .ta 4c
233 Command-Line Name:      \\fB\\$1\\fR
234 Database Name:  \\fB\\$2\\fR
235 Database Class: \\fB\\$3\\fR
236 .fi
237 .IP
238 ..
239 .\"     # CS - begin code excerpt
240 .de CS
241 .RS
242 .nf
243 .ta .25i .5i .75i 1i
244 ..
245 .\"     # CE - end code excerpt
246 .de CE
247 .fi
248 .RE
249 ..
250 .\"     # UL - underline word
251 .de UL
252 \\$1\l'|0\(ul'\\$2
253 ..
254 .\"     # QW - apply quotation marks to word
255 .de QW
256 .ie '\\*(lq'"' ``\\$1''\\$2
257 .\"" fix emacs highlighting
258 .el \\*(lq\\$1\\*(rq\\$2
259 ..
260 .\"     # PQ - apply parens and quotation marks to word
261 .de PQ
262 .ie '\\*(lq'"' (``\\$1''\\$2)\\$3
263 .\"" fix emacs highlighting
264 .el (\\*(lq\\$1\\*(rq\\$2)\\$3
265 ..
266 .\"     # QR - quoted range
267 .de QR
268 .ie '\\*(lq'"' ``\\$1''\\-``\\$2''\\$3
269 .\"" fix emacs highlighting
270 .el \\*(lq\\$1\\*(rq\\-\\*(lq\\$2\\*(rq\\$3
271 ..
272 .\"     # MT - "empty" string
273 .de MT
274 .QW ""
275 ..
276 .BS
277 .SH NAME
278 Tcl_SplitList, Tcl_Merge, Tcl_ScanElement, Tcl_ConvertElement, Tcl_ScanCountedElement, Tcl_ConvertCountedElement \- manipulate Tcl lists
279 .SH SYNOPSIS
280 .nf
281 \fB#include <tcl.h>\fR
282 .sp
283 int
284 \fBTcl_SplitList\fR(\fIinterp, list, argcPtr, argvPtr\fR)
285 .sp
286 char *
287 \fBTcl_Merge\fR(\fIargc, argv\fR)
288 .sp
289 int
290 \fBTcl_ScanElement\fR(\fIsrc, flagsPtr\fR)
291 .sp
292 int
293 \fBTcl_ScanCountedElement\fR(\fIsrc, length, flagsPtr\fR)
294 .sp
295 int
296 \fBTcl_ConvertElement\fR(\fIsrc, dst, flags\fR)
297 .sp
298 int
299 \fBTcl_ConvertCountedElement\fR(\fIsrc, length, dst, flags\fR)
300 .SH ARGUMENTS
301 .AS "const char *const" ***argvPtr out
302 .AP Tcl_Interp *interp out
303 Interpreter to use for error reporting.  If NULL, then no error message
304 is left.
305 .AP char *list in
306 Pointer to a string with proper list structure.
307 .AP int *argcPtr out
308 Filled in with number of elements in \fIlist\fR.
309 .AP "const char" ***argvPtr out
310 \fI*argvPtr\fR will be filled in with the address of an array of
311 pointers to the strings that are the extracted elements of \fIlist\fR.
312 There will be \fI*argcPtr\fR valid entries in the array, followed by
313 a NULL entry.
314 .AP int argc in
315 Number of elements in \fIargv\fR.
316 .AP "const char *const" *argv in
317 Array of strings to merge together into a single list.
318 Each string will become a separate element of the list.
319 .AP "const char" *src in
320 String that is to become an element of a list.
321 .AP int *flagsPtr in
322 Pointer to word to fill in with information about \fIsrc\fR.
323 The value of *\fIflagsPtr\fR must be passed to \fBTcl_ConvertElement\fR.
324 .AP int length in
325 Number of bytes in string \fIsrc\fR.
326 .AP char *dst in
327 Place to copy converted list element.  Must contain enough characters
328 to hold converted string.
329 .AP int flags in
330 Information about \fIsrc\fR. Must be value returned by previous
331 call to \fBTcl_ScanElement\fR, possibly OR-ed
332 with \fBTCL_DONT_USE_BRACES\fR.
333 .BE
334 .SH DESCRIPTION
335 .PP
336 These procedures may be used to disassemble and reassemble Tcl lists.
337 \fBTcl_SplitList\fR breaks a list up into its constituent elements,
338 returning an array of pointers to the elements using
339 \fIargcPtr\fR and \fIargvPtr\fR.
340 While extracting the arguments, \fBTcl_SplitList\fR obeys the usual
341 rules for backslash substitutions and braces.  The area of
342 memory pointed to by \fI*argvPtr\fR is dynamically allocated;  in
343 addition to the array of pointers, it
344 also holds copies of all the list elements.  It is the caller's
345 responsibility to free up all of this storage.
346 For example, suppose that you have called \fBTcl_SplitList\fR with
347 the following code:
348 .PP
349 .CS
350 int argc, code;
351 char *string;
352 char **argv;
353 \&...
354 code = \fBTcl_SplitList\fR(interp, string, &argc, &argv);
355 .CE
356 .PP
357 Then you should eventually free the storage with a call like the
358 following:
359 .PP
360 .CS
361 Tcl_Free((char *) argv);
362 .CE
363 .PP
364 \fBTcl_SplitList\fR normally returns \fBTCL_OK\fR, which means the list was
365 successfully parsed.
366 If there was a syntax error in \fIlist\fR, then \fBTCL_ERROR\fR is returned
367 and the interpreter's result will point to an error message describing the
368 problem (if \fIinterp\fR was not NULL).
369 If \fBTCL_ERROR\fR is returned then no memory is allocated and \fI*argvPtr\fR
370 is not modified.
371 .PP
372 \fBTcl_Merge\fR is the inverse of \fBTcl_SplitList\fR:  it
373 takes a collection of strings given by \fIargc\fR
374 and \fIargv\fR and generates a result string
375 that has proper list structure.
376 This means that commands like \fBindex\fR may be used to
377 extract the original elements again.
378 In addition, if the result of \fBTcl_Merge\fR is passed to \fBTcl_Eval\fR,
379 it will be parsed into \fIargc\fR words whose values will
380 be the same as the \fIargv\fR strings passed to \fBTcl_Merge\fR.
381 \fBTcl_Merge\fR will modify the list elements with braces and/or
382 backslashes in order to produce proper Tcl list structure.
383 The result string is dynamically allocated
384 using \fBTcl_Alloc\fR;  the caller must eventually release the space
385 using \fBTcl_Free\fR.
386 .PP
387 If the result of \fBTcl_Merge\fR is passed to \fBTcl_SplitList\fR,
388 the elements returned by \fBTcl_SplitList\fR will be identical to
389 those passed into \fBTcl_Merge\fR.
390 However, the converse is not true:  if \fBTcl_SplitList\fR
391 is passed a given string, and the resulting \fIargc\fR and
392 \fIargv\fR are passed to \fBTcl_Merge\fR, the resulting string
393 may not be the same as the original string passed to \fBTcl_SplitList\fR.
394 This is because \fBTcl_Merge\fR may use backslashes and braces
395 differently than the original string.
396 .PP
397 \fBTcl_ScanElement\fR and \fBTcl_ConvertElement\fR are the
398 procedures that do all of the real work of \fBTcl_Merge\fR.
399 \fBTcl_ScanElement\fR scans its \fIsrc\fR argument
400 and determines how to use backslashes and braces
401 when converting it to a list element.
402 It returns an overestimate of the number of characters
403 required to represent \fIsrc\fR as a list element, and
404 it stores information in \fI*flagsPtr\fR that is needed
405 by \fBTcl_ConvertElement\fR.
406 .PP
407 \fBTcl_ConvertElement\fR is a companion procedure to \fBTcl_ScanElement\fR.
408 It does the actual work of converting a string to a list element.
409 Its \fIflags\fR argument must be the same as the value returned
410 by \fBTcl_ScanElement\fR.
411 \fBTcl_ConvertElement\fR writes a proper list element to memory
412 starting at *\fIdst\fR and returns a count of the total number
413 of characters written, which will be no more than the result
414 returned by \fBTcl_ScanElement\fR.
415 \fBTcl_ConvertElement\fR writes out only the actual list element
416 without any leading or trailing spaces: it is up to the caller to
417 include spaces between adjacent list elements.
418 .PP
419 \fBTcl_ConvertElement\fR uses one of two different approaches to
420 handle the special characters in \fIsrc\fR.  Wherever possible, it
421 handles special characters by surrounding the string with braces.
422 This produces clean-looking output, but cannot be used in some situations,
423 such as when \fIsrc\fR contains unmatched braces.
424 In these situations, \fBTcl_ConvertElement\fR handles special
425 characters by generating backslash sequences for them.
426 The caller may insist on the second approach by OR-ing the
427 flag value returned by \fBTcl_ScanElement\fR with
428 \fBTCL_DONT_USE_BRACES\fR.
429 Although this will produce an uglier result, it is useful in some
430 special situations, such as when \fBTcl_ConvertElement\fR is being
431 used to generate a portion of an argument for a Tcl command.
432 In this case, surrounding \fIsrc\fR with curly braces would cause
433 the command not to be parsed correctly.
434 .PP
435 By default, \fBTcl_ConvertElement\fR will use quoting in its output
436 to be sure the first character of an element is not the hash
437 character
438 .PQ # .
439 This is to be sure the first element of any list
440 passed to \fBeval\fR is not mis-parsed as the beginning of a comment.
441 When a list element is not the first element of a list, this quoting
442 is not necessary.  When the caller can be sure that the element is
443 not the first element of a list, it can disable quoting of the leading
444 hash character by OR-ing the flag value returned by \fBTcl_ScanElement\fR
445 with \fBTCL_DONT_QUOTE_HASH\fR.
446 .PP
447 \fBTcl_ScanCountedElement\fR and \fBTcl_ConvertCountedElement\fR are
448 the same as \fBTcl_ScanElement\fR and \fBTcl_ConvertElement\fR, except
449 the length of string \fIsrc\fR is specified by the \fIlength\fR
450 argument, and the string may contain embedded nulls.
451 .SH "SEE ALSO"
452 Tcl_ListObjGetElements(3)
453 .SH KEYWORDS
454 backslash, convert, element, list, merge, split, strings