annotate libinterp/corefcn/strfns.cc @ 27265:5f65319c7835

Add new function for querying the locale charset. * strfns.cc (F__locale_charset__): New internal function.
author Markus Mützel <markus.muetzel@gmx.de>
date Fri, 19 Jul 2019 19:07:13 +0200
parents f26b13c80e45
children 4fef3ab19046
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
26376
00f796120a6d maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents: 26127
diff changeset
3 Copyright (C) 1994-2019 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
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24474
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
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24474
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
22755
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
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24474
diff changeset
19 <https://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"
25412
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
35 #include "unistr-wrappers.h"
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
36
5416
9433f94acd29 [project @ 2005-07-18 18:36:29 by jwe]
jwe
parents: 5415
diff changeset
37 #include "Cell.h"
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1315
diff changeset
38 #include "defun.h"
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
39 #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
40 #include "errwarn.h"
2366
c90105b99479 [project @ 1996-10-11 23:22:27 by jwe]
jwe
parents: 2267
diff changeset
41 #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
42 #include "ovl.h"
4457
d7d9ca19960a [project @ 2003-07-11 03:05:38 by jwe]
jwe
parents: 4358
diff changeset
43 #include "unwind-prot.h"
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
44 #include "utils.h"
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
45
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
46 #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
47
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
48 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
49 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
50 @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
51 @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
52 @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
53 @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
54 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
55 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
56
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
57 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
58 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
59 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
60
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
61 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
62 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
63 (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
64
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
65 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
66 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
67 @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
68
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
69 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
70 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
71 char ([97, 98, 99], "", @{"98", "99", 100@}, "str1", ["ha", "lf"])
24439
09c81c841b6f Fix typo in cset 8354b505ad6b (bug #52702).
Rik <rik@octave.org>
parents: 24436
diff changeset
72 @result{} ["abc "
09c81c841b6f Fix typo in cset 8354b505ad6b (bug #52702).
Rik <rik@octave.org>
parents: 24436
diff changeset
73 " "
09c81c841b6f Fix typo in cset 8354b505ad6b (bug #52702).
Rik <rik@octave.org>
parents: 24436
diff changeset
74 "98 "
09c81c841b6f Fix typo in cset 8354b505ad6b (bug #52702).
Rik <rik@octave.org>
parents: 24436
diff changeset
75 "99 "
09c81c841b6f Fix typo in cset 8354b505ad6b (bug #52702).
Rik <rik@octave.org>
parents: 24436
diff changeset
76 "d "
09c81c841b6f Fix typo in cset 8354b505ad6b (bug #52702).
Rik <rik@octave.org>
parents: 24436
diff changeset
77 "str1"
09c81c841b6f Fix typo in cset 8354b505ad6b (bug #52702).
Rik <rik@octave.org>
parents: 24436
diff changeset
78 "half"]
21966
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 group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
80 @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
81 @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
82 @end deftypefn */)
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
83 {
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
84 octave_value retval;
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
85
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
86 int nargin = args.length ();
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
87
13135
af36cdb552a6 char: return empty string if called with no arguments
John W. Eaton <jwe@octave.org>
parents: 12900
diff changeset
88 if (nargin == 0)
af36cdb552a6 char: return empty string if called with no arguments
John W. Eaton <jwe@octave.org>
parents: 12900
diff changeset
89 retval = "";
af36cdb552a6 char: return empty string if called with no arguments
John W. Eaton <jwe@octave.org>
parents: 12900
diff changeset
90 else if (nargin == 1)
5281
f3266e7dbb99 [project @ 2005-04-14 19:35:20 by jwe]
jwe
parents: 5280
diff changeset
91 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
92 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
93 else
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
94 {
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
95 int n_elts = 0;
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
96
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
97 int max_len = 0;
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
98
8463
a74871446af7 Fchar, Fstrvcat: use queue to avoid duplicate calls to all_strings
John W. Eaton <jwe@octave.org>
parents: 8462
diff changeset
99 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
100
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
101 for (int i = 0; i < nargin; i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
102 {
20990
fc9cca99b2de Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents: 20940
diff changeset
103 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
104
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
105 if (s.numel () > 0)
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
106 n_elts += s.numel ();
8353
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
107 else
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
108 n_elts += 1;
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
109
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
110 int s_max_len = s.max_length ();
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
111
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
112 if (s_max_len > max_len)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
113 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
114
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
115 args_as_strings.push (s);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
116 }
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
117
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
118 string_vector result (n_elts);
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
119
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
120 int k = 0;
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
121
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
122 for (int i = 0; i < nargin; i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
123 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
124 string_vector s = args_as_strings.front ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
125 args_as_strings.pop ();
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
126
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
127 int n = s.numel ();
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
128
8353
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
129 if (n > 0)
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
130 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
131 for (int j = 0; j < n; j++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
132 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
133 std::string t = s[j];
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
134 int t_len = t.length ();
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
135
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
136 if (max_len > t_len)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
137 t += std::string (max_len - t_len, ' ');
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
138
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
139 result[k++] = t;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
140 }
8353
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
141 }
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
142 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
143 result[k++] = std::string (max_len, ' ');
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
144 }
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
145
5280
25c12c80ccc3 [project @ 2005-04-14 19:19:45 by jwe]
jwe
parents: 4734
diff changeset
146 retval = octave_value (result, '\'');
4358
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
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
149 return retval;
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
150 }
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
151
8353
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
152 /*
21317
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
153 %!assert (char (), '')
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
154 %!assert (char (100), "d")
14429
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}), ["d";"d"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
157 %!assert (char ([100,100]), ["dd"])
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 ({100,{100, {""}}}), ["d";"d";" "])
24461
0a034d34a686 Modify BIST tests to pass when string_fill_char is not ' '.
Rik <rik@octave.org>
parents: 24441
diff changeset
162 %!assert (char (["a ";"be"], {"c", 100}), ["a ";"be";"c ";"d "])
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
163 %!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
164 %!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
165
98d23b0f16e1 maint: move test_string.m tests to source files
John W. Eaton <jwe@octave.org>
parents: 13135
diff changeset
166 %!test
98d23b0f16e1 maint: move test_string.m tests to source files
John W. Eaton <jwe@octave.org>
parents: 13135
diff changeset
167 %! 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
168 %! assert (x(1,:), "foo ");
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
169 %! assert (x(2,:), "bar ");
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
170 %! assert (x(3,:), "foobar");
8353
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
171 */
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
172
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
173 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
174 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
175 @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
176 @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
177 @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
178 @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
179 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
180 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
181
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
182 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
183 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
184 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
185 output.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
186
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
187 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
188 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
189 (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
190
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
191 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
192 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
193 @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
194
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
195 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
196 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
197 strvcat ([97, 98, 99], "", @{"98", "99", 100@}, "str1", ["ha", "lf"])
24436
8354b505ad6b doc: Fix inconsistencies with char, strvcat, strread docstrings (bug #52702.
Rik <rik@octave.org>
parents: 23731
diff changeset
198 @result{} ["abc "
8354b505ad6b doc: Fix inconsistencies with char, strvcat, strread docstrings (bug #52702.
Rik <rik@octave.org>
parents: 23731
diff changeset
199 "98 "
8354b505ad6b doc: Fix inconsistencies with char, strvcat, strread docstrings (bug #52702.
Rik <rik@octave.org>
parents: 23731
diff changeset
200 "99 "
8354b505ad6b doc: Fix inconsistencies with char, strvcat, strread docstrings (bug #52702.
Rik <rik@octave.org>
parents: 23731
diff changeset
201 "d "
8354b505ad6b doc: Fix inconsistencies with char, strvcat, strread docstrings (bug #52702.
Rik <rik@octave.org>
parents: 23731
diff changeset
202 "str1"
8354b505ad6b doc: Fix inconsistencies with char, strvcat, strread docstrings (bug #52702.
Rik <rik@octave.org>
parents: 23731
diff changeset
203 "half"]
21966
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 group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
205 @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
206 @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
207 @end deftypefn */)
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
208 {
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
209 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
210 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
211 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
212 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
213
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
214 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
215 {
20990
fc9cca99b2de Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents: 20940
diff changeset
216 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
217
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
218 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
219
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
220 // 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
221 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
222 {
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
223 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
224 {
23812
057a894914df Use C++11 string fcns back() and pop_back() to simplify code.
Rik <rik@octave.org>
parents: 23732
diff changeset
225 if (! s[j].empty ())
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
226 n_elts++;
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
227 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
228 }
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
229
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
230 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
231
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
232 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
233 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
234
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
235 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
236 }
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
237
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
238 string_vector result (n_elts);
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
239
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
240 octave_idx_type k = 0;
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
241
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
242 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
243 {
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
244 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
245 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
246
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
247 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
248
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
249 if (n > 0)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
250 {
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
251 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
252 {
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
253 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
254 if (t.length () > 0)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
255 {
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
256 size_t t_len = t.length ();
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
257
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
258 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
259 t += std::string (max_len - t_len, ' ');
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
260
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
261 result[k++] = t;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
262 }
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
263 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
264 }
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
265 }
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
266
21127
df7891224709 maint: Use "return ovl (...)" in DEFUN macros.
Rik <rik@octave.org>
parents: 21100
diff changeset
267 // 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
268 return octave_value (result, '\'');
8462
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
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
271 /*
21317
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
272 %!assert (strvcat (""), "")
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
273 %!assert (strvcat (100) == "d")
14429
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}), ["d";"d"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
276 %!assert (strvcat ([100,100]), ["dd"])
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 ({100,{100, {""}}}), ["d";"d"])
24461
0a034d34a686 Modify BIST tests to pass when string_fill_char is not ' '.
Rik <rik@octave.org>
parents: 24441
diff changeset
281 %!assert (strvcat (["a ";"be"], {"c", 100}), ["a ";"be";"c ";"d "])
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
282 %!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
283 %!assert (strvcat (), "")
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
284 */
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
285
4535
a5f23212a3d8 [project @ 2003-10-16 02:39:15 by jwe]
jwe
parents: 4457
diff changeset
286 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
287 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
288 @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
289 Return true if @var{x} is a character array.
24474
0b65949870e3 isstring.m: Add new function for identifying string arrays.
Rik <rik@octave.org>
parents: 24461
diff changeset
290 @seealso{isfloat, isinteger, islogical, isnumeric, isstring, iscellstr, isa}
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
291 @end deftypefn */)
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
292 {
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
293 if (args.length () != 1)
5823
080c08b192d8 [project @ 2006-05-19 05:32:17 by jwe]
jwe
parents: 5765
diff changeset
294 print_usage ();
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
295
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
296 return ovl (args(0).is_string ());
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
297 }
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
298
8461
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
299 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
300 %!assert (ischar ("a"), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
301 %!assert (ischar (["ab";"cd"]), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
302 %!assert (ischar ({"ab"}), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
303 %!assert (ischar (1), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
304 %!assert (ischar ([1, 2]), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
305 %!assert (ischar ([]), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
306 %!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
307 %!assert (ischar (""), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
308 %!assert (ischar ("test"), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
309 %!assert (ischar (["test"; "ing"]), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
310 %!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
311
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
312 %!error ischar ()
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
313 %!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
314 */
8461
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
315
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
316 static octave_value
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
317 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
318 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
319 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
320 octave_idx_type),
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
321 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
322 std::string::size_type))
10108
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 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
325 octave_value retval;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
326
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
327 bool s1_string = arg0.is_string ();
23576
00e518162fda maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents: 23575
diff changeset
328 bool s1_cell = arg0.iscell ();
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
329 bool s2_string = arg1.is_string ();
23576
00e518162fda maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents: 23575
diff changeset
330 bool s2_cell = arg1.iscell ();
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
331
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
332 if (s1_string && s2_string)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
333 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
334 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
335 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
336 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
337
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
338 if (s1_string)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
339 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
340 str_val = arg0;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
341 cell_val = arg1;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
342 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
343 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
344 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
345 str_val = arg1;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
346 cell_val = arg0;
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
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
349 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
350 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
351 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
352
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
353 if (r == 0 || r == 1)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
354 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
355 // Broadcast the string.
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
356
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
357 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
358
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23396
diff changeset
359 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
360
23575
e95738a119da maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents: 23457
diff changeset
361 if (cell_val.iscellstr ())
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
362 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
363 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
364 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
365 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
366 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
367 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
368 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
369 // 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
370 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
371 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
372 if (cell(i).is_string ())
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
373 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
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
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
377 retval = output;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
378 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
379 else if (r > 1)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
380 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
381 if (cell.numel () == 1)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
382 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
383 // Broadcast the cell.
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
384
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
385 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
386 boolNDArray output (dv, false);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
387
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
388 if (cell(0).is_string ())
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
389 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
390 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
391
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
392 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
393 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
394 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
395
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
396 retval = output;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
397 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
398 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
399 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
400 // Must match in all dimensions.
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
401
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
402 boolNDArray output (cell.dims (), false);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
403
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
404 if (cell.numel () == r)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
405 {
23575
e95738a119da maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents: 23457
diff changeset
406 if (cell_val.iscellstr ())
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
407 {
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
408 const Array<std::string> cellstr
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
409 = 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
410 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
411 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
412 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
413 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
414 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
415 // FIXME: should we warn here?
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
416 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
417 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
418 if (cell(i).is_string ())
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
419 output(i) = str_op (str[i],
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
420 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
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
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
424 retval = output;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
425 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
426 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
427 retval = false;
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 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
431 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
432 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
433 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
434 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
435
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
436 if (r1 == 1)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
437 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
438 // Make the singleton cell2.
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
439
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
440 cell1_val = arg1;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
441 cell2_val = arg0;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
442 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
443 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
444 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
445 cell1_val = arg0;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
446 cell2_val = arg1;
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
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
449 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
450 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
451 r1 = cell1.numel ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
452 r2 = cell2.numel ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
453
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
454 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
455 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
456
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
457 boolNDArray output (size1, false);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
458
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
459 if (r2 == 1)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
460 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
461 // Broadcast cell2.
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
462
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
463 if (cell2(0).is_string ())
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
464 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
465 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
466
23575
e95738a119da maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents: 23457
diff changeset
467 if (cell1_val.iscellstr ())
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
468 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
469 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
470 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
471 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
472 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
473 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
474 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
475 // FIXME: should we warn here?
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
476 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
477 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
478 if (cell1(i).is_string ())
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
479 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
480 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
481 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
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 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
487 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
488 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
489 if (size1 != size2)
20831
35241c4b696c eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents: 20804
diff changeset
490 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
491
23575
e95738a119da maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents: 23457
diff changeset
492 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
493 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
494 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
495 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
496 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
497 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
498 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
499 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
500 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
501 // FIXME: should we warn here?
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
502 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
503 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
504 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
505 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
506 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
507 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
508 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
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
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
514 retval = output;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
515 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
516 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
517 retval = false;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
518
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
519 return retval;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
520 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
521
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
522
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
523 // 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
524 // 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
525
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
526 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
527 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
528 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
529 { 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
530
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
531 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
532 static bool
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
533 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
534 { 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
535
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
536
5415
1fbae9f046e3 [project @ 2005-07-18 18:16:12 by jwe]
jwe
parents: 5307
diff changeset
537 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
538 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
539 @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
540 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
541 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
542
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
543 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
544 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
545 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
546 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
547 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
548
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
549 @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
550 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
551 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
552 @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
553 @end deftypefn */)
5415
1fbae9f046e3 [project @ 2005-07-18 18:16:12 by jwe]
jwe
parents: 5307
diff changeset
554 {
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
555 if (args.length () != 2)
5823
080c08b192d8 [project @ 2006-05-19 05:32:17 by jwe]
jwe
parents: 5765
diff changeset
556 print_usage ();
5415
1fbae9f046e3 [project @ 2005-07-18 18:16:12 by jwe]
jwe
parents: 5307
diff changeset
557
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
558 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
559 strcmp_ignore_n, strcmp_ignore_n));
5415
1fbae9f046e3 [project @ 2005-07-18 18:16:12 by jwe]
jwe
parents: 5307
diff changeset
560 }
1fbae9f046e3 [project @ 2005-07-18 18:16:12 by jwe]
jwe
parents: 5307
diff changeset
561
5862
2b35a7fe9302 [project @ 2006-06-20 04:31:56 by jwe]
jwe
parents: 5823
diff changeset
562 /*
2b35a7fe9302 [project @ 2006-06-20 04:31:56 by jwe]
jwe
parents: 5823
diff changeset
563 %!shared x
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
564 %! x = char (zeros (0, 2));
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, ""), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
567 %!assert (strcmp (x, 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), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
569 ## %!assert (strcmp ({x}, ""), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
570 ## %!assert (strcmp ({x}, x), true)
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, {""}), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
573 ## %!assert (strcmp (x, {x}), true)
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 ({""}, {x; x}), [false; false])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
578 %!assert (strcmp ({"foo"}, x), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
579 %!assert (strcmp ({"foo"}, "foo"), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
580 %!assert (strcmp ({"foo"}, x), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
581 %!assert (strcmp (x, {"foo"}), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
582 %!assert (strcmp ("foo", {"foo"}), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
583 %!assert (strcmp (x, {"foo"}), false)
5862
2b35a7fe9302 [project @ 2006-06-20 04:31:56 by jwe]
jwe
parents: 5823
diff changeset
584 %!shared y
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
585 %! y = char (zeros (2, 0));
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, ""), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
588 %!assert (strcmp (y, y), 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; true])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
590 %!assert (strcmp ({y}, ""), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
591 %!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
592 %!assert (strcmp ("", {y}), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
593 %!assert (strcmp (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 ({""}, {y; y}), [true; true])
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 ({"foo"}, y), [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 (y, {"foo"}), [false; false])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
603 %!assert (strcmp ("foobar", "foobar"), true)
23731
0056bcaeb01c make strncmp case sensitive again (bug #51384)
John W. Eaton <jwe@octave.org>
parents: 23219
diff changeset
604 %!assert (strcmp ("foobar", "fooBar"), false)
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
605 %!assert (strcmp ("fooba", "foobar"), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
606
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
607 %!error strcmp ()
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
608 %!error strcmp ("foo", "bar", 3)
5862
2b35a7fe9302 [project @ 2006-06-20 04:31:56 by jwe]
jwe
parents: 5823
diff changeset
609 */
2b35a7fe9302 [project @ 2006-06-20 04:31:56 by jwe]
jwe
parents: 5823
diff changeset
610
6250
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
611 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
612 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
613 @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
614 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
615 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
616
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
617 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
618 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
619 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
620 @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
621 @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
622 @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
623
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
624 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
625 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
626 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
627 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
628 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
629
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
630 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
631 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
632 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
633 @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
634 @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
635 @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
636
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
637 @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
638 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
639 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
640 @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
641 @end deftypefn */)
6250
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
642 {
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
643 if (args.length () != 3)
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
644 print_usage ();
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
645
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
646 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
647
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
648 if (n > 0)
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
649 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
650 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
651 octave::string::strncmp));
6250
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
652 else
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
653 error ("strncmp: N must be greater than 0");
6250
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
654 }
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
655
8461
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
656 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
657 %!assert (strncmp ("abce", "abc", 3), true)
23731
0056bcaeb01c make strncmp case sensitive again (bug #51384)
John W. Eaton <jwe@octave.org>
parents: 23219
diff changeset
658 %!assert (strncmp ("abce", "aBc", 3), false)
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
659 %!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
660 %!assert (strncmp ("abce", {"abcd", "bca", "abc"}, 3), logical ([1, 0, 1]))
25698
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25692
diff changeset
661 %!assert (strncmp ("abc", {"abcd", "bca", "abc"}, 4), logical ([0, 0, 1]))
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
662 %!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
663 %!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
664 %!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
665
25698
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25692
diff changeset
666 %!assert <*54373> (strncmp ("abc", "abc", 100))
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25692
diff changeset
667
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
668 %!error strncmp ()
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
669 %!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
670 */
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
671
10316
9966f1f71c32 use DEFUNX instead of DEFUN for strcmpi and strncmpi
John W. Eaton <jwe@octave.org>
parents: 10315
diff changeset
672 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
673 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
674 @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
675 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
676 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
677
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
678 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
679 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
680 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
681 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
682 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
683
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
684 @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
685 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
686 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
687
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
688 @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
689 @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
690 @end deftypefn */)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
691 {
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
692 if (args.length () != 2)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
693 print_usage ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
694
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
695 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
696 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
697 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
698
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
699 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
700 %!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
701 */
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
702
10318
f0ac2fa91733 fix incorrect strncmpi change
John W. Eaton <jwe@octave.org>
parents: 10316
diff changeset
703 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
704 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
705 @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
706 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
707 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
708
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
709 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
710 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
711 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
712 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
713 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
714
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
715 @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
716 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
717 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
718
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
719 @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
720 @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
721 @end deftypefn */)
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 (args.length () != 3)
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
724 print_usage ();
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
725
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
726 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
727
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
728 if (n > 0)
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
729 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
730 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
731 octave::string::strncmpi));
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
732 else
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
733 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
734 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
735
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
736 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
737 %!assert (strncmpi ("abc123", "ABC456", 3), true)
25698
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25692
diff changeset
738
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25692
diff changeset
739 %!assert <*54373> (strncmpi ("abc", "abC", 100))
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
740 */
8461
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
741
26110
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
742 DEFUN (str2double, args, ,
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
743 doc: /* -*- texinfo -*-
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
744 @deftypefn {} {} str2double (@var{s})
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
745 Convert a string to a real or complex number.
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
746
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
747 The string must be in one of the following formats where a and b are real
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
748 numbers and the complex unit is @qcode{'i'} or @qcode{'j'}:
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
749
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
750 @itemize
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
751 @item a + bi
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
752
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
753 @item a + b*i
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
754
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
755 @item a + i*b
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
756
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
757 @item bi + a
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
758
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
759 @item b*i + a
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
760
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
761 @item i*b + a
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
762 @end itemize
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
763
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
764 If present, a and/or b are of the form @nospell{[+-]d[,.]d[[eE][+-]d]} where
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
765 the brackets indicate optional arguments and @qcode{'d'} indicates zero or
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
766 more digits. The special input values @code{Inf}, @code{NaN}, and @code{NA}
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
767 are also accepted.
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
768
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
769 @var{s} may be a character string, character matrix, or cell array. For
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
770 character arrays the conversion is repeated for every row, and a double or
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
771 complex array is returned. Empty rows in @var{s} are deleted and not
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
772 returned in the numeric array. For cell arrays each character string
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
773 element is processed and a double or complex array of the same dimensions as
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
774 @var{s} is returned.
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
775
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
776 For unconvertible scalar or character string input @code{str2double} returns
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
777 a NaN@. Similarly, for character array input @code{str2double} returns a
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
778 NaN for any row of @var{s} that could not be converted. For a cell array,
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
779 @code{str2double} returns a NaN for any element of @var{s} for which
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
780 conversion fails. Note that numeric elements in a mixed string/numeric
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
781 cell array are not strings and the conversion will fail for these elements
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
782 and return NaN.
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
783
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
784 @code{str2double} can replace @code{str2num}, and it avoids the security
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
785 risk of using @code{eval} on unknown data.
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
786 @seealso{str2num}
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
787 @end deftypefn */)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
788 {
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
789 if (args.length () != 1)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
790 print_usage ();
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
791
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
792 octave_value retval;
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
793
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
794 if (args(0).is_string ())
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
795 {
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
796 if (args(0).rows () == 0 || args(0).columns () == 0)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
797 retval = Matrix (1, 1, octave::numeric_limits<double>::NaN ());
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
798 else if (args(0).rows () == 1 && args(0).ndims () == 2)
26127
37e3aa267374 Move function str2double inside octave::string namespace (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26110
diff changeset
799 retval = octave::string::str2double (args(0).string_value ());
26110
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
800 else
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
801 {
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
802 const string_vector sv = args(0).string_vector_value ();
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
803
26127
37e3aa267374 Move function str2double inside octave::string namespace (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26110
diff changeset
804 retval = sv.map<Complex> (octave::string::str2double);
26110
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
805 }
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
806 }
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
807 else if (args(0).iscell ())
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
808 {
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
809 const Cell cell = args(0).cell_value ();
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
810
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
811 ComplexNDArray output (cell.dims (), octave::numeric_limits<double>::NaN ());
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
812
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
813 for (octave_idx_type i = 0; i < cell.numel (); i++)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
814 {
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
815 if (cell(i).is_string ())
26127
37e3aa267374 Move function str2double inside octave::string namespace (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26110
diff changeset
816 output(i) = octave::string::str2double (cell(i).string_value ());
26110
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
817 }
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
818 retval = output;
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
819 }
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
820 else
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
821 retval = Matrix (1, 1, octave::numeric_limits<double>::NaN ());
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
822
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
823 return retval;
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
824 }
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
825
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
826 /*
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
827 %!assert (str2double ("1"), 1)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
828 %!assert (str2double ("-.1e-5"), -1e-6)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
829 %!testif ; ! ismac ()
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
830 %! assert (str2double (char ("1", "2 3", "4i")), [1; NaN; 4i]);
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
831 %!xtest <47413>
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
832 %! ## Same test code as above, but intended only for test statistics on Mac.
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
833 %! if (! ismac ()), return; endif
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
834 %! assert (str2double (char ("1", "2 3", "4i")), [1; NaN; 4i]);
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
835 %!assert (str2double ("1,222.5"), 1222.5)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
836 %!assert (str2double ("i"), i)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
837 %!assert (str2double ("2j"), 2i)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
838 %!assert (str2double ("2 + j"), 2+j)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
839 %!assert (str2double ("i*2 + 3"), 3+2i)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
840 %!assert (str2double (".5*i + 3.5"), 3.5+0.5i)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
841 %!assert (str2double ("1e-3 + i*.25"), 1e-3 + 0.25i)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
842 %!assert (str2double (char ("2 + j","1.25e-3","-05")), [2+i; 1.25e-3; -5])
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
843 %!assert (str2double ({"2 + j","1.25e-3","-05"}), [2+i, 1.25e-3, -5])
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
844 %!assert (str2double (1), NaN)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
845 %!assert (str2double ("1 2 3 4"), NaN)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
846 %!assert (str2double ("Hello World"), NaN)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
847 %!assert (str2double ("NaN"), NaN)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
848 %!assert (str2double ("NA"), NA)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
849 %!assert (str2double ("Inf"), Inf)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
850 %!assert (str2double ("iNF"), Inf)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
851 %!assert (str2double ("-Inf"), -Inf)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
852 %!assert (str2double ("Inf*i"), complex (0, Inf))
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
853 %!assert (str2double ("iNF*i"), complex (0, Inf))
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
854 %!assert (str2double ("NaN + Inf*i"), complex (NaN, Inf))
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
855 %!assert (str2double ("Inf - Inf*i"), complex (Inf, -Inf))
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
856 %!assert (str2double ("-i*NaN - Inf"), complex (-Inf, -NaN))
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
857 %!testif ; ! ismac ()
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
858 %! assert (str2double ({"abc", "4i"}), [NaN + 0i, 4i]);
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
859 %!xtest <47413>
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
860 %! if (! ismac ()), return; endif
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
861 %! assert (str2double ({"abc", "4i"}), [NaN + 0i, 4i]);
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
862 %!testif ; ! ismac ()
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
863 %! assert (str2double ({2, "4i"}), [NaN + 0i, 4i])
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
864 %!xtest <47413>
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
865 %! if (! ismac ()), return; endif
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
866 %! assert (str2double ({2, "4i"}), [NaN + 0i, 4i])
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
867 %!assert (str2double (zeros (3,1,2)), NaN)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
868 %!assert (str2double (''), NaN)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
869 %!assert (str2double ([]), NaN)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
870 %!assert (str2double (char(zeros(3,0))), NaN)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
871 */
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
872
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
873 DEFUN (__native2unicode__, args, ,
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
874 doc: /* -*- texinfo -*-
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
875 @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
876 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
877
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
878 @seealso{native2unicode, __unicode2native__}
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
879 @end deftypefn */)
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
880 {
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
881 int nargin = args.length ();
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
882
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
883 if (nargin != 2)
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
884 print_usage ();
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
885
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
886 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
887 return ovl (args(0));
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
888
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
889 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
890 const char *codepage
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23396
diff changeset
891 = (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
892
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
893 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
894
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
895 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
896 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
897
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
898 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
899 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
900
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
901 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
902
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
903 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
904
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
905 if (! utf8_str)
25691
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
906 {
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
907 if (errno == ENOSYS)
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
908 error ("native2unicode: iconv() is not supported. Installing GNU "
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
909 "libiconv and then re-compiling Octave could fix this.");
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
910 else
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
911 error ("native2unicode: converting from codepage '%s' to UTF-8: %s",
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
912 codepage, std::strerror (errno));
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
913 }
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
914
24379
56d1e4d9975e avoid memory leak in utf8 conversion functions
John W. Eaton <jwe@octave.org>
parents: 23812
diff changeset
915 frame.add_fcn (::free, static_cast<void *> (utf8_str));
56d1e4d9975e avoid memory leak in utf8 conversion functions
John W. Eaton <jwe@octave.org>
parents: 23812
diff changeset
916
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
917 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
918
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
919 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
920
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
921 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
922 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
923
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
924 return ovl (retval);
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
925 }
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
926
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
927 DEFUN (__unicode2native__, args, ,
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
928 doc: /* -*- texinfo -*-
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
929 @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
930 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
931 @var{codepage}.
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
932
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
933 @seealso{unicode2native, __native2unicode__}
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
934 @end deftypefn */)
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
935 {
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
936 int nargin = args.length ();
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
937
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
938 if (nargin != 2)
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
939 print_usage ();
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
940
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
941 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
942 const char *codepage
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23396
diff changeset
943 = (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
944
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
945 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
946
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
947 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
948 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
949
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
950 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
951 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
952
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
953 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
954
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
955 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
956
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
957 if (! native_bytes)
25691
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
958 {
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
959 if (errno == ENOSYS)
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
960 error ("unicode2native: iconv() is not supported. Installing GNU "
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
961 "libiconv and then re-compiling Octave could fix this.");
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
962 else
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
963 error ("unicode2native: converting from UTF-8 to codepage '%s': %s",
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
964 codepage, std::strerror (errno));
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
965 }
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
966
24379
56d1e4d9975e avoid memory leak in utf8 conversion functions
John W. Eaton <jwe@octave.org>
parents: 23812
diff changeset
967 frame.add_fcn (::free, static_cast<void *> (native_bytes));
56d1e4d9975e avoid memory leak in utf8 conversion functions
John W. Eaton <jwe@octave.org>
parents: 23812
diff changeset
968
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
969 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
970
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
971 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
972
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
973 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
974 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
975
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
976 return ovl (retval);
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
977 }
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
978
27265
5f65319c7835 Add new function for querying the locale charset.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27141
diff changeset
979 DEFUN (__locale_charset__, , ,
5f65319c7835 Add new function for querying the locale charset.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27141
diff changeset
980 doc: /* -*- texinfo -*-
5f65319c7835 Add new function for querying the locale charset.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27141
diff changeset
981 @deftypefn {} {@var{charset} =} __locale_charset__ ()
5f65319c7835 Add new function for querying the locale charset.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27141
diff changeset
982 Return the identifier for the charset used if the encoding is set to "locale".
5f65319c7835 Add new function for querying the locale charset.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27141
diff changeset
983 @end deftypefn */)
5f65319c7835 Add new function for querying the locale charset.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27141
diff changeset
984 {
5f65319c7835 Add new function for querying the locale charset.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27141
diff changeset
985 const char *charset = octave_locale_charset_wrapper ();
5f65319c7835 Add new function for querying the locale charset.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27141
diff changeset
986 std::string charset_str (charset);
5f65319c7835 Add new function for querying the locale charset.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27141
diff changeset
987 return ovl (charset_str);
5f65319c7835 Add new function for querying the locale charset.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27141
diff changeset
988 }
5f65319c7835 Add new function for querying the locale charset.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27141
diff changeset
989
25412
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
990 DEFUN (unicode_idx, args, ,
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
991 doc: /* -*- texinfo -*-
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
992 @deftypefn {} {@var{idx} =} unicode_idx (@var{str})
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
993 Return an array with the indices for each UTF-8 encoded character in @var{str}.
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
994
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
995 @example
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
996 @group
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
997 unicode_idx ("aäbc")
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
998 @result{} [1, 2, 2, 3, 4]
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
999 @end group
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1000 @end example
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1001
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1002 @end deftypefn */)
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1003 {
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1004 int nargin = args.length ();
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1005
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1006 if (nargin != 1)
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1007 print_usage ();
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1008
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1009 charNDArray str = args(0).xchar_array_value ("STR must be a string");
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1010 Array<octave_idx_type> p (dim_vector (str.ndims (), 1));
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1011 charNDArray str_p;
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1012 if (str.ndims () > 1)
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1013 {
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1014 for (octave_idx_type i=0; i < str.ndims (); i++)
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1015 p(i) = i;
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1016 p(0) = 1;
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1017 p(1) = 0;
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1018 str_p = str.permute (p);
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1019 }
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1020
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1021 const uint8_t *src = reinterpret_cast<const uint8_t *> (str_p.data ());
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1022 octave_idx_type srclen = str.numel ();
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1023
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1024 NDArray idx (str_p.dims ());
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1025
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1026 octave_idx_type u8_char_num = 1;
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1027 for (octave_idx_type i = 0; i < srclen; u8_char_num++)
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1028 {
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1029 int mblen = octave_u8_strmblen_wrapper (src + i);
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1030 if (mblen < 1)
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1031 mblen = 1;
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1032 for (octave_idx_type j = 0; j < mblen; j++)
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1033 idx (i+j) = u8_char_num;
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1034 i += mblen;
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1035 }
25436
996d78102a71 maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 25412
diff changeset
1036
25412
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1037 return ovl(str.ndims () > 1 ? idx.permute (p, true) : idx);
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1038 }
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1039
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1040 /*
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1041 %!assert (unicode_idx (["aäou"; "Ä∞"]), [1 2 2 3 4; 5 5 6 6 6]);
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1042 */
922a93fc73ec Add function to index characters in UTF-8 encoded strings.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
1043
27141
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1044 DEFUN (newline, args, ,
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1045 doc: /* -*- texinfo -*-
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1046 @deftypefn {} {} newline
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1047 Return the character corresponding to a newline.
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1048
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1049 This is equivalent to @qcode{"@xbackslashchar{}n"}.
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1050
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1051 Example Code
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1052
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1053 @example
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1054 @group
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1055 joined_string = [newline "line1" newline "line2"]
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1056 @result{}
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1057 line1
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1058 line2
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1059 @end group
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1060 @end example
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1061
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1062 @seealso{strcat, strjoin, strsplit}
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1063 @end deftypefn */)
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1064 {
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1065 if (args.length () != 0)
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1066 print_usage ();
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1067
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1068 static octave_value_list retval = ovl ("\n");
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1069
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1070 return retval;
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1071 }
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1072
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1073 /*
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1074 %!assert (newline (), "\n")
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1075
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1076 %!error newline (1)
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1077 %!error [a, b] = newline ();
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1078 */
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1079
5690
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
1080 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
1081 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
1082 @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
1083 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
1084 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
1085
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1086 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
1087 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
1088
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1089 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
1090 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
1091 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
1092 @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
1093
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1094 @smallexample
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1095 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1096 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
1097 @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
1098 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
1099 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
1100
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1101 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
1102 @result{}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1103 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
1104
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1105 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
1106 ==== ==== ==== ===== =====
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1107 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
1108
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1109 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
1110 @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
1111 @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
1112
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1113 @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
1114 @end deftypefn */)
5690
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
1115 {
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
1116 int nargin = args.length ();
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
1117
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
1118 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
1119 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
1120
20990
fc9cca99b2de Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents: 20940
diff changeset
1121 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
1122
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
1123 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
1124
23577
80c42f4cca13 maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents: 23576
diff changeset
1125 if (nargin > 1 && ! args(1).isempty ())
20704
571508c1ed06 eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20700
diff changeset
1126 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
1127
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
1128 std::string prefix;
5690
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
1129
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
1130 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
1131 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
1132
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
1133 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
1134
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
1135 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
1136
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
1137 return ovl (buf.str ());
5690
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
1138 }
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
1139
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
1140 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
1141 %!test
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
1142 %! 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
1143 %! 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
1144 %! 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
1145 %!test
24461
0a034d34a686 Modify BIST tests to pass when string_fill_char is not ' '.
Rik <rik@octave.org>
parents: 24441
diff changeset
1146 %! input = char ("abc", "def", "ghijkl", "mnop", "qrs", "tuv");
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
1147 %! 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
1148 %! 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
1149 %!test
24461
0a034d34a686 Modify BIST tests to pass when string_fill_char is not ' '.
Rik <rik@octave.org>
parents: 24441
diff changeset
1150 %! input = char ("abc", "def", "ghijkl", "mnop", "qrs", "tuv");
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
1151 %! 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
1152 %! 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
1153
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
1154 %!error list_in_columns ()
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
1155 %!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
1156 %!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
1157 %!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
1158 */