annotate libinterp/corefcn/strfns.cc @ 23575:e95738a119da

maint: Deprecate is_cellstr and replace with iscellstr. * ov.h (is_cellstr): Use OCTAVE_DEPRECATED macro for is_cellstr. * ov.h (iscellstr): New function. * Cell.cc, Cell.h, data.cc, graphics.cc, graphics.in.h, lookup.cc, strfns.cc, sysdep.cc, __delaunayn__.cc, __voronoi__.cc, convhulln.cc, ov-base.h, ov-cell.cc, ov-cell.h, ov-java.cc, ov-struct.cc: Replace occurrences of is_cellstr with iscellstr.
author Rik <rik@octave.org>
date Sun, 11 Jun 2017 15:26:14 -0700
parents 21baad6b35c4
children 00e518162fda
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
1 /*
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
2
23219
3ac9f9ecfae5 maint: Update copyright dates.
John W. Eaton <jwe@octave.org>
parents: 23083
diff changeset
3 Copyright (C) 1994-2017 John W. Eaton
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
4
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
6
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22407
diff changeset
8 under the terms of the GNU General Public License as published by
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22407
diff changeset
9 the Free Software Foundation; either version 3 of the License, or
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22407
diff changeset
10 (at your option) any later version.
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
11
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22407
diff changeset
12 Octave is distributed in the hope that it will be useful, but
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22407
diff changeset
13 WITHOUT ANY WARRANTY; without even the implied warranty of
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22407
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22407
diff changeset
15 GNU General Public License for more details.
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
16
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6678
diff changeset
18 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6678
diff changeset
19 <http://www.gnu.org/licenses/>.
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
20
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
21 */
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
22
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21547
diff changeset
23 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21200
diff changeset
24 # include "config.h"
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
25 #endif
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
26
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1315
diff changeset
27 #include <cctype>
7528
26d8a92644de try to avoid ctype macro problems
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
28
8463
a74871446af7 Fchar, Fstrvcat: use queue to avoid duplicate calls to all_strings
John W. Eaton <jwe@octave.org>
parents: 8462
diff changeset
29 #include <queue>
5765
7ba9ad1fec11 [project @ 2006-04-17 05:05:15 by jwe]
jwe
parents: 5707
diff changeset
30 #include <sstream>
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
31
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
32 #include "dMatrix.h"
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
33 #include "localcharset-wrapper.h"
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
34 #include "uniconv-wrappers.h"
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
35
5416
9433f94acd29 [project @ 2005-07-18 18:36:29 by jwe]
jwe
parents: 5415
diff changeset
36 #include "Cell.h"
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1315
diff changeset
37 #include "defun.h"
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
38 #include "error.h"
21100
e39e05d90788 Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents: 21078
diff changeset
39 #include "errwarn.h"
2366
c90105b99479 [project @ 1996-10-11 23:22:27 by jwe]
jwe
parents: 2267
diff changeset
40 #include "ov.h"
20940
48b2ad5ee801 maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents: 20939
diff changeset
41 #include "ovl.h"
4457
d7d9ca19960a [project @ 2003-07-11 03:05:38 by jwe]
jwe
parents: 4358
diff changeset
42 #include "unwind-prot.h"
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
43 #include "utils.h"
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
44
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
45 #include "oct-string.h"
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
46
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
47 DEFUN (char, args, ,
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
48 doc: /* -*- texinfo -*-
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
49 @deftypefn {} {} char (@var{x})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
50 @deftypefnx {} {} char (@var{x}, @dots{})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
51 @deftypefnx {} {} char (@var{s1}, @var{s2}, @dots{})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
52 @deftypefnx {} {} char (@var{cell_array})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
53 Create a string array from one or more numeric matrices, character
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
54 matrices, or cell arrays.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
55
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
56 Arguments are concatenated vertically. The returned values are padded with
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
57 blanks as needed to make each row of the string array have the same length.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
58 Empty input strings are significant and will concatenated in the output.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
59
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
60 For numerical input, each element is converted to the corresponding ASCII
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
61 character. A range error results if an input is outside the ASCII range
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
62 (0-255).
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
63
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
64 For cell arrays, each element is concatenated separately. Cell arrays
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
65 converted through @code{char} can mostly be converted back with
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
66 @code{cellstr}. For example:
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
67
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
68 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
69 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
70 char ([97, 98, 99], "", @{"98", "99", 100@}, "str1", ["ha", "lf"])
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
71 @result{} ["abc "
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
72 " "
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
73 "98 "
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
74 "99 "
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
75 "d "
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
76 "str1 "
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
77 "half "]
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
78 @end group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
79 @end example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
80 @seealso{strvcat, cellstr}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
81 @end deftypefn */)
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
82 {
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
83 octave_value retval;
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
84
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
85 int nargin = args.length ();
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
86
13135
af36cdb552a6 char: return empty string if called with no arguments
John W. Eaton <jwe@octave.org>
parents: 12900
diff changeset
87 if (nargin == 0)
af36cdb552a6 char: return empty string if called with no arguments
John W. Eaton <jwe@octave.org>
parents: 12900
diff changeset
88 retval = "";
af36cdb552a6 char: return empty string if called with no arguments
John W. Eaton <jwe@octave.org>
parents: 12900
diff changeset
89 else if (nargin == 1)
5281
f3266e7dbb99 [project @ 2005-04-14 19:35:20 by jwe]
jwe
parents: 5280
diff changeset
90 retval = args(0).convert_to_str (true, true,
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
91 args(0).is_dq_string () ? '"' : '\'');
13135
af36cdb552a6 char: return empty string if called with no arguments
John W. Eaton <jwe@octave.org>
parents: 12900
diff changeset
92 else
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
93 {
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
94 int n_elts = 0;
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
95
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
96 int max_len = 0;
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
97
8463
a74871446af7 Fchar, Fstrvcat: use queue to avoid duplicate calls to all_strings
John W. Eaton <jwe@octave.org>
parents: 8462
diff changeset
98 std::queue<string_vector> args_as_strings;
a74871446af7 Fchar, Fstrvcat: use queue to avoid duplicate calls to all_strings
John W. Eaton <jwe@octave.org>
parents: 8462
diff changeset
99
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
100 for (int i = 0; i < nargin; i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
101 {
20990
fc9cca99b2de Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents: 20940
diff changeset
102 string_vector s = args(i).xstring_vector_value ("char: unable to convert some args to strings");
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
103
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
104 if (s.numel () > 0)
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
105 n_elts += s.numel ();
8353
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
106 else
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
107 n_elts += 1;
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
108
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
109 int s_max_len = s.max_length ();
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
110
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
111 if (s_max_len > max_len)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
112 max_len = s_max_len;
8463
a74871446af7 Fchar, Fstrvcat: use queue to avoid duplicate calls to all_strings
John W. Eaton <jwe@octave.org>
parents: 8462
diff changeset
113
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
114 args_as_strings.push (s);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
115 }
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
116
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
117 string_vector result (n_elts);
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
118
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
119 int k = 0;
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
120
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
121 for (int i = 0; i < nargin; i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
122 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
123 string_vector s = args_as_strings.front ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
124 args_as_strings.pop ();
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
125
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
126 int n = s.numel ();
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
127
8353
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
128 if (n > 0)
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
129 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
130 for (int j = 0; j < n; j++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
131 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
132 std::string t = s[j];
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
133 int t_len = t.length ();
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
134
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
135 if (max_len > t_len)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
136 t += std::string (max_len - t_len, ' ');
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
137
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
138 result[k++] = t;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
139 }
8353
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
140 }
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
141 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
142 result[k++] = std::string (max_len, ' ');
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
143 }
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
144
5280
25c12c80ccc3 [project @ 2005-04-14 19:19:45 by jwe]
jwe
parents: 4734
diff changeset
145 retval = octave_value (result, '\'');
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
146 }
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
147
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
148 return retval;
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
149 }
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
150
8353
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
151 /*
21317
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
152 %!assert (char (), '')
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
153 %!assert (char (100), "d")
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
154 %!assert (char (100,100), ["d";"d"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
155 %!assert (char ({100,100}), ["d";"d"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
156 %!assert (char ([100,100]), ["dd"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
157 %!assert (char ({100,{100}}), ["d";"d"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
158 %!assert (char (100, [], 100), ["d";" ";"d"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
159 %!assert (char ({100, [], 100}), ["d";" ";"d"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
160 %!assert (char ({100,{100, {""}}}), ["d";"d";" "])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
161 %!assert (char (["a";"be"], {"c", 100}), ["a";"be";"c";"d"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
162 %!assert (char ("a", "bb", "ccc"), ["a "; "bb "; "ccc"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
163 %!assert (char ([65, 83, 67, 73, 73]), "ASCII")
13140
98d23b0f16e1 maint: move test_string.m tests to source files
John W. Eaton <jwe@octave.org>
parents: 13135
diff changeset
164
98d23b0f16e1 maint: move test_string.m tests to source files
John W. Eaton <jwe@octave.org>
parents: 13135
diff changeset
165 %!test
98d23b0f16e1 maint: move test_string.m tests to source files
John W. Eaton <jwe@octave.org>
parents: 13135
diff changeset
166 %! x = char ("foo", "bar", "foobar");
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
167 %! assert (x(1,:), "foo ");
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
168 %! assert (x(2,:), "bar ");
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
169 %! assert (x(3,:), "foobar");
8353
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
170 */
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
171
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
172 DEFUN (strvcat, args, ,
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
173 doc: /* -*- texinfo -*-
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
174 @deftypefn {} {} strvcat (@var{x})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
175 @deftypefnx {} {} strvcat (@var{x}, @dots{})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
176 @deftypefnx {} {} strvcat (@var{s1}, @var{s2}, @dots{})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
177 @deftypefnx {} {} strvcat (@var{cell_array})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
178 Create a character array from one or more numeric matrices, character
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
179 matrices, or cell arrays.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
180
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
181 Arguments are concatenated vertically. The returned values are padded with
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
182 blanks as needed to make each row of the string array have the same length.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
183 Unlike @code{char}, empty strings are removed and will not appear in the
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
184 output.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
185
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
186 For numerical input, each element is converted to the corresponding ASCII
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
187 character. A range error results if an input is outside the ASCII range
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
188 (0-255).
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
189
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
190 For cell arrays, each element is concatenated separately. Cell arrays
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
191 converted through @code{strvcat} can mostly be converted back with
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
192 @code{cellstr}. For example:
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
193
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
194 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
195 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
196 strvcat ([97, 98, 99], "", @{"98", "99", 100@}, "str1", ["ha", "lf"])
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
197 @result{} ["abc "
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
198 "98 "
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
199 "99 "
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
200 "d "
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
201 "str1 "
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
202 "half "]
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
203 @end group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
204 @end example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
205 @seealso{char, strcat, cstrcat}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
206 @end deftypefn */)
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
207 {
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
208 int nargin = args.length ();
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
209 int n_elts = 0;
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
210 size_t max_len = 0;
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
211 std::queue<string_vector> args_as_strings;
8463
a74871446af7 Fchar, Fstrvcat: use queue to avoid duplicate calls to all_strings
John W. Eaton <jwe@octave.org>
parents: 8462
diff changeset
212
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
213 for (int i = 0; i < nargin; i++)
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
214 {
20990
fc9cca99b2de Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents: 20940
diff changeset
215 string_vector s = args(i).xstring_vector_value ("strvcat: unable to convert some args to strings");
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
216
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
217 size_t n = s.numel ();
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
218
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
219 // do not count empty strings in calculation of number of elements
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
220 if (n > 0)
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
221 {
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
222 for (size_t j = 0; j < n; j++)
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
223 {
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
224 if (s[j].length () > 0)
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
225 n_elts++;
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
226 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
227 }
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
228
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
229 size_t s_max_len = s.max_length ();
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
230
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
231 if (s_max_len > max_len)
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
232 max_len = s_max_len;
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
233
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
234 args_as_strings.push (s);
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
235 }
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
236
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
237 string_vector result (n_elts);
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
238
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
239 octave_idx_type k = 0;
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
240
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
241 for (int i = 0; i < nargin; i++)
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
242 {
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
243 string_vector s = args_as_strings.front ();
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
244 args_as_strings.pop ();
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
245
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
246 size_t n = s.numel ();
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
247
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
248 if (n > 0)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
249 {
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
250 for (size_t j = 0; j < n; j++)
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
251 {
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
252 std::string t = s[j];
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
253 if (t.length () > 0)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
254 {
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
255 size_t t_len = t.length ();
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
256
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
257 if (max_len > t_len)
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
258 t += std::string (max_len - t_len, ' ');
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
259
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
260 result[k++] = t;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
261 }
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
262 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
263 }
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
264 }
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
265
21127
df7891224709 maint: Use "return ovl (...)" in DEFUN macros.
Rik <rik@octave.org>
parents: 21100
diff changeset
266 // Cannot use ovl. Relies on overloaded octave_value call.
21078
49852ff04747 maint: Remove unnecessary declarations of retval.
Rik <rik@octave.org>
parents: 21017
diff changeset
267 return octave_value (result, '\'');
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
268 }
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
269
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
270 /*
21317
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
271 %!assert (strvcat (""), "")
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
272 %!assert (strvcat (100) == "d")
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
273 %!assert (strvcat (100,100), ["d";"d"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
274 %!assert (strvcat ({100,100}), ["d";"d"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
275 %!assert (strvcat ([100,100]), ["dd"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
276 %!assert (strvcat ({100,{100}}), ["d";"d"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
277 %!assert (strvcat (100, [], 100), ["d";"d"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
278 %!assert (strvcat ({100, [], 100}), ["d";"d"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
279 %!assert (strvcat ({100,{100, {""}}}), ["d";"d"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
280 %!assert (strvcat (["a";"be"], {"c", 100}), ["a";"be";"c";"d"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
281 %!assert (strvcat ("a", "bb", "ccc"), ["a "; "bb "; "ccc"])
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
282 %!assert (strvcat (), "")
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
283 */
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
284
4535
a5f23212a3d8 [project @ 2003-10-16 02:39:15 by jwe]
jwe
parents: 4457
diff changeset
285 DEFUN (ischar, args, ,
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
286 doc: /* -*- texinfo -*-
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
287 @deftypefn {} {} ischar (@var{x})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
288 Return true if @var{x} is a character array.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
289 @seealso{isfloat, isinteger, islogical, isnumeric, iscellstr, isa}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
290 @end deftypefn */)
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
291 {
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
292 if (args.length () != 1)
5823
080c08b192d8 [project @ 2006-05-19 05:32:17 by jwe]
jwe
parents: 5765
diff changeset
293 print_usage ();
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
294
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
295 return ovl (args(0).is_string ());
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
296 }
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
297
8461
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
298 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
299 %!assert (ischar ("a"), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
300 %!assert (ischar (["ab";"cd"]), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
301 %!assert (ischar ({"ab"}), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
302 %!assert (ischar (1), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
303 %!assert (ischar ([1, 2]), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
304 %!assert (ischar ([]), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
305 %!assert (ischar ([1, 2; 3, 4]), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
306 %!assert (ischar (""), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
307 %!assert (ischar ("test"), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
308 %!assert (ischar (["test"; "ing"]), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
309 %!assert (ischar (struct ("foo", "bar")), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
310
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
311 %!error ischar ()
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
312 %!error ischar ("test", 1)
13140
98d23b0f16e1 maint: move test_string.m tests to source files
John W. Eaton <jwe@octave.org>
parents: 13135
diff changeset
313 */
8461
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
314
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
315 static octave_value
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
316 do_strcmp_fun (const octave_value& arg0, const octave_value& arg1,
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
317 octave_idx_type n, const char *fcn_name,
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
318 bool (*array_op) (const Array<char>&, const Array<char>&,
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
319 octave_idx_type),
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
320 bool (*str_op) (const std::string&, const std::string&,
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
321 std::string::size_type))
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
322
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
323 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
324 octave_value retval;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
325
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
326 bool s1_string = arg0.is_string ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
327 bool s1_cell = arg0.is_cell ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
328 bool s2_string = arg1.is_string ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
329 bool s2_cell = arg1.is_cell ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
330
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
331 if (s1_string && s2_string)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
332 retval = array_op (arg0.char_array_value (), arg1.char_array_value (), n);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
333 else if ((s1_string && s2_cell) || (s1_cell && s2_string))
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
334 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
335 octave_value str_val, cell_val;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
336
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
337 if (s1_string)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
338 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
339 str_val = arg0;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
340 cell_val = arg1;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
341 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
342 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
343 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
344 str_val = arg1;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
345 cell_val = arg0;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
346 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
347
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
348 const Cell cell = cell_val.cell_value ();
20990
fc9cca99b2de Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents: 20940
diff changeset
349 const string_vector str = str_val.string_vector_value ();
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
350 octave_idx_type r = str.numel ();
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
351
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
352 if (r == 0 || r == 1)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
353 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
354 // Broadcast the string.
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
355
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
356 boolNDArray output (cell_val.dims (), false);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
357
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23396
diff changeset
358 std::string s = (r == 0 ? "" : str[0]);
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
359
23575
e95738a119da maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents: 23457
diff changeset
360 if (cell_val.iscellstr ())
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
361 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
362 const Array<std::string> cellstr = cell_val.cellstr_value ();
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
363 for (octave_idx_type i = 0; i < cellstr.numel (); i++)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
364 output(i) = str_op (cellstr(i), s, n);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
365 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
366 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
367 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
368 // FIXME: should we warn here?
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
369 for (octave_idx_type i = 0; i < cell.numel (); i++)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
370 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
371 if (cell(i).is_string ())
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
372 output(i) = str_op (cell(i).string_value (), s, n);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
373 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
374 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
375
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
376 retval = output;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
377 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
378 else if (r > 1)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
379 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
380 if (cell.numel () == 1)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
381 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
382 // Broadcast the cell.
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
383
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
384 const dim_vector dv (r, 1);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
385 boolNDArray output (dv, false);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
386
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
387 if (cell(0).is_string ())
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
388 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
389 const std::string str2 = cell(0).string_value ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
390
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
391 for (octave_idx_type i = 0; i < r; i++)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
392 output(i) = str_op (str[i], str2, n);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
393 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
394
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
395 retval = output;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
396 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
397 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
398 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
399 // Must match in all dimensions.
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
400
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
401 boolNDArray output (cell.dims (), false);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
402
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
403 if (cell.numel () == r)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
404 {
23575
e95738a119da maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents: 23457
diff changeset
405 if (cell_val.iscellstr ())
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
406 {
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
407 const Array<std::string> cellstr
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
408 = cell_val.cellstr_value ();
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
409 for (octave_idx_type i = 0; i < cellstr.numel (); i++)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
410 output(i) = str_op (str[i], cellstr(i), n);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
411 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
412 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
413 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
414 // FIXME: should we warn here?
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
415 for (octave_idx_type i = 0; i < r; i++)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
416 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
417 if (cell(i).is_string ())
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
418 output(i) = str_op (str[i],
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
419 cell(i).string_value (), n);
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
420 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
421 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
422
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
423 retval = output;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
424 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
425 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
426 retval = false;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
427 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
428 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
429 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
430 else if (s1_cell && s2_cell)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
431 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
432 octave_value cell1_val, cell2_val;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
433 octave_idx_type r1 = arg0.numel (), r2;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
434
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
435 if (r1 == 1)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
436 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
437 // Make the singleton cell2.
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
438
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
439 cell1_val = arg1;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
440 cell2_val = arg0;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
441 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
442 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
443 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
444 cell1_val = arg0;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
445 cell2_val = arg1;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
446 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
447
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
448 const Cell cell1 = cell1_val.cell_value ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
449 const Cell cell2 = cell2_val.cell_value ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
450 r1 = cell1.numel ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
451 r2 = cell2.numel ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
452
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
453 const dim_vector size1 = cell1.dims ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
454 const dim_vector size2 = cell2.dims ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
455
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
456 boolNDArray output (size1, false);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
457
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
458 if (r2 == 1)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
459 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
460 // Broadcast cell2.
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
461
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
462 if (cell2(0).is_string ())
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
463 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
464 const std::string str2 = cell2(0).string_value ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
465
23575
e95738a119da maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents: 23457
diff changeset
466 if (cell1_val.iscellstr ())
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
467 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
468 const Array<std::string> cellstr = cell1_val.cellstr_value ();
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
469 for (octave_idx_type i = 0; i < cellstr.numel (); i++)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
470 output(i) = str_op (cellstr(i), str2, n);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
471 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
472 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
473 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
474 // FIXME: should we warn here?
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
475 for (octave_idx_type i = 0; i < r1; i++)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
476 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
477 if (cell1(i).is_string ())
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
478 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
479 const std::string str1 = cell1(i).string_value ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
480 output(i) = str_op (str1, str2, n);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
481 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
482 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
483 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
484 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
485 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
486 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
487 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
488 if (size1 != size2)
20831
35241c4b696c eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents: 20804
diff changeset
489 error ("%s: nonconformant cell arrays", fcn_name);
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
490
23575
e95738a119da maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents: 23457
diff changeset
491 if (cell1.iscellstr () && cell2.iscellstr ())
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
492 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
493 const Array<std::string> cellstr1 = cell1_val.cellstr_value ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
494 const Array<std::string> cellstr2 = cell2_val.cellstr_value ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
495 for (octave_idx_type i = 0; i < r1; i++)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
496 output (i) = str_op (cellstr1(i), cellstr2(i), n);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
497 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
498 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
499 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
500 // FIXME: should we warn here?
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
501 for (octave_idx_type i = 0; i < r1; i++)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
502 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
503 if (cell1(i).is_string () && cell2(i).is_string ())
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
504 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
505 const std::string str1 = cell1(i).string_value ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
506 const std::string str2 = cell2(i).string_value ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
507 output(i) = str_op (str1, str2, n);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
508 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
509 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
510 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
511 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
512
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
513 retval = output;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
514 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
515 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
516 retval = false;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
517
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
518 return retval;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
519 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
520
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
521
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
522 // These are required so that they match the same signature as strncmp
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
523 // and strncmpi and can therefore be used in do_strcmp_fun.
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
524
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
525 template <typename T, typename T_size_type>
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
526 static bool
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
527 strcmp_ignore_n (const T& s1, const T& s2, T_size_type)
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
528 { return octave::string::strcmp (s1, s2); }
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
529
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
530 template <typename T, typename T_size_type>
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
531 static bool
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
532 strcmpi_ignore_n (const T& s1, const T& s2, T_size_type)
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
533 { return octave::string::strcmpi (s1, s2); }
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
534
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
535
5415
1fbae9f046e3 [project @ 2005-07-18 18:16:12 by jwe]
jwe
parents: 5307
diff changeset
536 DEFUN (strcmp, args, ,
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
537 doc: /* -*- texinfo -*-
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
538 @deftypefn {} {} strcmp (@var{s1}, @var{s2})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
539 Return 1 if the character strings @var{s1} and @var{s2} are the same,
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
540 and 0 otherwise.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
541
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
542 If either @var{s1} or @var{s2} is a cell array of strings, then an array
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
543 of the same size is returned, containing the values described above for
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
544 every member of the cell array. The other argument may also be a cell
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
545 array of strings (of the same size or with only one element), char matrix
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
546 or character string.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
547
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
548 @strong{Caution:} For compatibility with @sc{matlab}, Octave's strcmp
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
549 function returns 1 if the character strings are equal, and 0 otherwise.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
550 This is just the opposite of the corresponding C library function.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
551 @seealso{strcmpi, strncmp, strncmpi}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
552 @end deftypefn */)
5415
1fbae9f046e3 [project @ 2005-07-18 18:16:12 by jwe]
jwe
parents: 5307
diff changeset
553 {
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
554 if (args.length () != 2)
5823
080c08b192d8 [project @ 2006-05-19 05:32:17 by jwe]
jwe
parents: 5765
diff changeset
555 print_usage ();
5415
1fbae9f046e3 [project @ 2005-07-18 18:16:12 by jwe]
jwe
parents: 5307
diff changeset
556
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
557 return ovl (do_strcmp_fun (args(0), args(1), 0, "strcmp",
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
558 strcmp_ignore_n, strcmp_ignore_n));
5415
1fbae9f046e3 [project @ 2005-07-18 18:16:12 by jwe]
jwe
parents: 5307
diff changeset
559 }
1fbae9f046e3 [project @ 2005-07-18 18:16:12 by jwe]
jwe
parents: 5307
diff changeset
560
5862
2b35a7fe9302 [project @ 2006-06-20 04:31:56 by jwe]
jwe
parents: 5823
diff changeset
561 /*
2b35a7fe9302 [project @ 2006-06-20 04:31:56 by jwe]
jwe
parents: 5823
diff changeset
562 %!shared x
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
563 %! x = char (zeros (0, 2));
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
564 %!assert (strcmp ("", x), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
565 %!assert (strcmp (x, ""), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
566 %!assert (strcmp (x, x), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
567 ## %!assert (strcmp ({""}, x), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
568 ## %!assert (strcmp ({x}, ""), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
569 ## %!assert (strcmp ({x}, x), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
570 ## %!assert (strcmp ("", {x}), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
571 ## %!assert (strcmp (x, {""}), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
572 ## %!assert (strcmp (x, {x}), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
573 ## %!assert (strcmp ({x; x}, ""), [false; false])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
574 ## %!assert (strcmp ({x; x}, {""}), [false; false])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
575 ## %!assert (strcmp ("", {x; x}), [false; false])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
576 ## %!assert (strcmp ({""}, {x; x}), [false; false])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
577 %!assert (strcmp ({"foo"}, x), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
578 %!assert (strcmp ({"foo"}, "foo"), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
579 %!assert (strcmp ({"foo"}, x), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
580 %!assert (strcmp (x, {"foo"}), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
581 %!assert (strcmp ("foo", {"foo"}), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
582 %!assert (strcmp (x, {"foo"}), false)
5862
2b35a7fe9302 [project @ 2006-06-20 04:31:56 by jwe]
jwe
parents: 5823
diff changeset
583 %!shared y
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
584 %! y = char (zeros (2, 0));
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
585 %!assert (strcmp ("", y), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
586 %!assert (strcmp (y, ""), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
587 %!assert (strcmp (y, y), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
588 %!assert (strcmp ({""}, y), [true; true])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
589 %!assert (strcmp ({y}, ""), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
590 %!assert (strcmp ({y}, y), [true; true])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
591 %!assert (strcmp ("", {y}), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
592 %!assert (strcmp (y, {""}), [true; true])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
593 %!assert (strcmp (y, {y}), [true; true])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
594 %!assert (strcmp ({y; y}, ""), [true; true])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
595 %!assert (strcmp ({y; y}, {""}), [true; true])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
596 %!assert (strcmp ("", {y; y}), [true; true])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
597 %!assert (strcmp ({""}, {y; y}), [true; true])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
598 %!assert (strcmp ({"foo"}, y), [false; false])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
599 %!assert (strcmp ({"foo"}, y), [false; false])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
600 %!assert (strcmp (y, {"foo"}), [false; false])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
601 %!assert (strcmp (y, {"foo"}), [false; false])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
602 %!assert (strcmp ("foobar", "foobar"), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
603 %!assert (strcmp ("fooba", "foobar"), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
604
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
605 %!error strcmp ()
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
606 %!error strcmp ("foo", "bar", 3)
5862
2b35a7fe9302 [project @ 2006-06-20 04:31:56 by jwe]
jwe
parents: 5823
diff changeset
607 */
2b35a7fe9302 [project @ 2006-06-20 04:31:56 by jwe]
jwe
parents: 5823
diff changeset
608
6250
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
609 DEFUN (strncmp, args, ,
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
610 doc: /* -*- texinfo -*-
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
611 @deftypefn {} {} strncmp (@var{s1}, @var{s2}, @var{n})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
612 Return 1 if the first @var{n} characters of strings @var{s1} and @var{s2}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
613 are the same, and 0 otherwise.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
614
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
615 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
616 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
617 strncmp ("abce", "abcd", 3)
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
618 @result{} 1
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
619 @end group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
620 @end example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
621
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
622 If either @var{s1} or @var{s2} is a cell array of strings, then an array
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
623 of the same size is returned, containing the values described above for
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
624 every member of the cell array. The other argument may also be a cell
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
625 array of strings (of the same size or with only one element), char matrix
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
626 or character string.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
627
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
628 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
629 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
630 strncmp ("abce", @{"abcd", "bca", "abc"@}, 3)
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
631 @result{} [1, 0, 1]
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
632 @end group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
633 @end example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
634
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
635 @strong{Caution:} For compatibility with @sc{matlab}, Octave's strncmp
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
636 function returns 1 if the character strings are equal, and 0 otherwise.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
637 This is just the opposite of the corresponding C library function.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
638 @seealso{strncmpi, strcmp, strcmpi}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
639 @end deftypefn */)
6250
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
640 {
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
641 if (args.length () != 3)
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
642 print_usage ();
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
643
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
644 octave_idx_type n = args(2).idx_type_value ();
6250
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
645
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
646 if (n > 0)
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
647 return ovl (do_strcmp_fun (args(0), args(1), n, "strncmp",
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
648 octave::string::strncmp,
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
649 octave::string::strncmp));
6250
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
650 else
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
651 error ("strncmp: N must be greater than 0");
6250
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
652 }
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
653
8461
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
654 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
655 %!assert (strncmp ("abce", "abc", 3), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
656 %!assert (strncmp (100, 100, 1), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
657 %!assert (strncmp ("abce", {"abcd", "bca", "abc"}, 3), logical ([1, 0, 1]))
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
658 %!assert (strncmp ("abc", {"abcd", "bca", "abc"}, 4), logical ([0, 0, 0]))
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
659 %!assert (strncmp ({"abcd", "bca", "abc"},"abce", 3), logical ([1, 0, 1]))
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
660 %!assert (strncmp ({"abcd", "bca", "abc"},{"abcd", "bca", "abe"}, 3), logical ([1, 1, 0]))
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
661 %!assert (strncmp ("abc", {"abcd", 10}, 2), logical ([1, 0]))
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
662
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
663 %!error strncmp ()
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
664 %!error strncmp ("abc", "def")
8461
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
665 */
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
666
10316
9966f1f71c32 use DEFUNX instead of DEFUN for strcmpi and strncmpi
John W. Eaton <jwe@octave.org>
parents: 10315
diff changeset
667 DEFUNX ("strcmpi", Fstrcmpi, args, ,
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
668 doc: /* -*- texinfo -*-
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
669 @deftypefn {} {} strcmpi (@var{s1}, @var{s2})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
670 Return 1 if the character strings @var{s1} and @var{s2} are the same,
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
671 disregarding case of alphabetic characters, and 0 otherwise.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
672
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
673 If either @var{s1} or @var{s2} is a cell array of strings, then an array
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
674 of the same size is returned, containing the values described above for
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
675 every member of the cell array. The other argument may also be a cell
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
676 array of strings (of the same size or with only one element), char matrix
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
677 or character string.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
678
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
679 @strong{Caution:} For compatibility with @sc{matlab}, Octave's strcmp
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
680 function returns 1 if the character strings are equal, and 0 otherwise.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
681 This is just the opposite of the corresponding C library function.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
682
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
683 @strong{Caution:} National alphabets are not supported.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
684 @seealso{strcmp, strncmp, strncmpi}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
685 @end deftypefn */)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
686 {
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
687 if (args.length () != 2)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
688 print_usage ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
689
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
690 return ovl (do_strcmp_fun (args(0), args(1), 0, "strcmpi",
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
691 strcmpi_ignore_n, strcmpi_ignore_n));
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
692 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
693
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
694 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
695 %!assert (strcmpi ("abc123", "ABC123"), true)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
696 */
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
697
10318
f0ac2fa91733 fix incorrect strncmpi change
John W. Eaton <jwe@octave.org>
parents: 10316
diff changeset
698 DEFUNX ("strncmpi", Fstrncmpi, args, ,
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
699 doc: /* -*- texinfo -*-
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
700 @deftypefn {} {} strncmpi (@var{s1}, @var{s2}, @var{n})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
701 Return 1 if the first @var{n} character of @var{s1} and @var{s2} are the
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
702 same, disregarding case of alphabetic characters, and 0 otherwise.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
703
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
704 If either @var{s1} or @var{s2} is a cell array of strings, then an array
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
705 of the same size is returned, containing the values described above for
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
706 every member of the cell array. The other argument may also be a cell
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
707 array of strings (of the same size or with only one element), char matrix
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
708 or character string.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
709
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
710 @strong{Caution:} For compatibility with @sc{matlab}, Octave's strncmpi
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
711 function returns 1 if the character strings are equal, and 0 otherwise.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
712 This is just the opposite of the corresponding C library function.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
713
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
714 @strong{Caution:} National alphabets are not supported.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
715 @seealso{strncmp, strcmp, strcmpi}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
716 @end deftypefn */)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
717 {
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
718 if (args.length () != 3)
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
719 print_usage ();
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
720
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
721 octave_idx_type n = args(2).idx_type_value ();
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
722
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
723 if (n > 0)
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
724 return ovl (do_strcmp_fun (args(0), args(1), n, "strncmpi",
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
725 octave::string::strncmpi,
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
726 octave::string::strncmpi));
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
727 else
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
728 error ("strncmpi: N must be greater than 0");
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
729 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
730
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
731 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
732 %!assert (strncmpi ("abc123", "ABC456", 3), true)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
733 */
8461
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
734
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
735 DEFUN (__native2unicode__, args, ,
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
736 doc: /* -*- texinfo -*-
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
737 @deftypefn {} {@var{utf8_str} =} __native2unicode__ (@var{native_bytes}, @var{codepage})
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
738 Convert byte stream @var{native_bytes} to UTF-8 using @var{codepage}.
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
739
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
740 @seealso{native2unicode, __unicode2native__}
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
741 @end deftypefn */)
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
742 {
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
743 int nargin = args.length ();
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
744
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
745 if (nargin != 2)
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
746 print_usage ();
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
747
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
748 if (args(0).is_string ())
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
749 return ovl (args(0));
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
750
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
751 std::string tmp = args(1).xstring_value ("CODEPAGE must be a string");
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
752 const char *codepage
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23396
diff changeset
753 = (tmp.empty () ? octave_locale_charset_wrapper () : tmp.c_str ());
23396
945b53af4655 maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 23220
diff changeset
754
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
755 charNDArray native_bytes = args(0).char_array_value ();
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
756
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
757 const char *src = native_bytes.data ();
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
758 size_t srclen = native_bytes.numel ();
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
759
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
760 size_t length;
23457
21baad6b35c4 maint: Use C++11 nullptr rather than 0 or NULL when possible.
Rik <rik@octave.org>
parents: 23450
diff changeset
761 uint8_t *utf8_str = nullptr;
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
762
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
763 octave::unwind_protect frame;
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
764
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
765 frame.add_fcn (::free, static_cast<void *> (utf8_str));
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
766
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
767 utf8_str = octave_u8_conv_from_encoding (codepage, src, srclen, &length);
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
768
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
769 if (! utf8_str)
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
770 error ("native2unicode: converting from codepage '%s' to UTF-8: %s",
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
771 codepage, std::strerror (errno));
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
772
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
773 octave_idx_type len = length;
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
774
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
775 charNDArray retval (dim_vector (1, len));
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
776
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
777 for (octave_idx_type i = 0; i < len; i++)
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
778 retval.xelem(i) = utf8_str[i];
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
779
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
780 return ovl (retval);
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
781 }
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
782
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
783 DEFUN (__unicode2native__, args, ,
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
784 doc: /* -*- texinfo -*-
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
785 @deftypefn {} {@var{native_bytes} =} __unicode2native__ (@var{utf8_str}, @var{codepage})
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
786 Convert UTF-8 string @var{utf8_str} to byte stream @var{native_bytes} using
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
787 @var{codepage}.
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
788
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
789 @seealso{unicode2native, __native2unicode__}
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
790 @end deftypefn */)
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
791 {
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
792 int nargin = args.length ();
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
793
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
794 if (nargin != 2)
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
795 print_usage ();
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
796
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
797 std::string tmp = args(1).xstring_value ("CODEPAGE must be a string");
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
798 const char *codepage
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23396
diff changeset
799 = (tmp.empty () ? octave_locale_charset_wrapper () : tmp.c_str ());
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
800
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
801 charNDArray utf8_str = args(0).xchar_array_value ("UTF8_STR must be a string");
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
802
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
803 const uint8_t *src = reinterpret_cast<const uint8_t *> (utf8_str.data ());
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
804 size_t srclen = utf8_str.numel ();
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
805
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
806 size_t length;
23457
21baad6b35c4 maint: Use C++11 nullptr rather than 0 or NULL when possible.
Rik <rik@octave.org>
parents: 23450
diff changeset
807 char *native_bytes = nullptr;
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
808
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
809 octave::unwind_protect frame;
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
810
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
811 frame.add_fcn (::free, static_cast<void *> (native_bytes));
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
812
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
813 native_bytes = octave_u8_conv_to_encoding (codepage, src, srclen, &length);
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
814
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
815 if (! native_bytes)
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
816 error ("native2unicode: converting from UTF-8 to codepage '%s': %s",
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
817 codepage, std::strerror (errno));
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
818
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
819 octave_idx_type len = length;
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
820
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
821 uint8NDArray retval (dim_vector (1, len));
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
822
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
823 for (octave_idx_type i = 0; i < len; i++)
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
824 retval.xelem(i) = native_bytes[i];
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
825
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
826 return ovl (retval);
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
827 }
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
828
5690
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
829 DEFUN (list_in_columns, args, ,
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
830 doc: /* -*- texinfo -*-
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
831 @deftypefn {} {} list_in_columns (@var{arg}, @var{width}, @var{prefix})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
832 Return a string containing the elements of @var{arg} listed in columns with
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
833 an overall maximum width of @var{width} and optional prefix @var{prefix}.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
834
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
835 The argument @var{arg} must be a cell array of character strings or a
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
836 character array.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
837
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
838 If @var{width} is not specified or is an empty matrix, or less than or equal
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
839 to zero, the width of the terminal screen is used. Newline characters are
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
840 used to break the lines in the output string. For example:
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
841 @c Set example in small font to prevent overfull line
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
842
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
843 @smallexample
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
844 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
845 list_in_columns (@{"abc", "def", "ghijkl", "mnop", "qrs", "tuv"@}, 20)
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
846 @result{} abc mnop
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
847 def qrs
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
848 ghijkl tuv
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
849
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
850 whos ans
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
851 @result{}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
852 Variables in the current scope:
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
853
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
854 Attr Name Size Bytes Class
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
855 ==== ==== ==== ===== =====
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
856 ans 1x37 37 char
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
857
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
858 Total is 37 elements using 37 bytes
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
859 @end group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
860 @end smallexample
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
861
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
862 @seealso{terminal_size}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
863 @end deftypefn */)
5690
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
864 {
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
865 int nargin = args.length ();
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
866
14841
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
867 if (nargin < 1 || nargin > 3)
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
868 print_usage ();
14841
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
869
20990
fc9cca99b2de Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents: 20940
diff changeset
870 string_vector s = args(0).xstring_vector_value ("list_in_columns: ARG must be a cellstr or char array");
14841
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
871
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
872 int width = -1;
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
873
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
874 if (nargin > 1 && ! args(1).is_empty ())
20704
571508c1ed06 eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20700
diff changeset
875 width = args(1).xint_value ("list_in_columns: WIDTH must be an integer");
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
876
14841
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
877 std::string prefix;
5690
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
878
14841
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
879 if (nargin > 2)
20700
68e3a747ca02 rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents: 20581
diff changeset
880 prefix = args(2).xstring_value ("list_in_columns: PREFIX must be a string");
14841
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
881
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
882 std::ostringstream buf;
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
883
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
884 s.list_in_columns (buf, width, prefix);
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
885
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
886 return ovl (buf.str ());
5690
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
887 }
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
888
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
889 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
890 %!test
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
891 %! input = {"abc", "def", "ghijkl", "mnop", "qrs", "tuv"};
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
892 %! result = "abc mnop\ndef qrs\nghijkl tuv\n";
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
893 %! assert (list_in_columns (input, 20), result);
8461
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
894 %!test
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
895 %! input = ["abc"; "def"; "ghijkl"; "mnop"; "qrs"; "tuv"];
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
896 %! result = "abc mnop \ndef qrs \nghijkl tuv \n";
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
897 %! assert (list_in_columns (input, 20), result);
14841
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
898 %!test
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
899 %! input = ["abc"; "def"; "ghijkl"; "mnop"; "qrs"; "tuv"];
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
900 %! result = " abc mnop \n def qrs \n ghijkl tuv \n";
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
901 %! assert (list_in_columns (input, 20, " "), result);
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
902
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
903 %!error list_in_columns ()
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
904 %!error list_in_columns (["abc", "def"], 20, 2)
14841
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
905 %!error list_in_columns (["abc", "def"], 20, " ", 3)
20704
571508c1ed06 eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20700
diff changeset
906 %!error <list_in_columns: WIDTH must be an integer> list_in_columns (["abc", "def"], "a")
8461
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
907 */