annotate libinterp/corefcn/strfns.cc @ 28914:49d3a6322a9b

Actual fix left out of cset c11bebb62369. * strfns.cc (Fnewline): Add semicolon to end of newline() BIST test.
author Rik <rik@octave.org>
date Tue, 13 Oct 2020 19:02:32 -0700
parents c11bebb62369
children c40a367a84c0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ////////////////////////////////////////////////////////////////////////
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
3 // Copyright (C) 1994-2020 The Octave Project Developers
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
4 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 // See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 // distribution or <https://octave.org/copyright/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
7 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
8 // This file is part of Octave.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
9 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
10 // Octave is free software: you can redistribute it and/or modify it
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
11 // under the terms of the GNU General Public License as published by
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
12 // the Free Software Foundation, either version 3 of the License, or
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
13 // (at your option) any later version.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
14 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
15 // Octave is distributed in the hope that it will be useful, but
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
18 // GNU General Public License for more details.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
19 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
20 // You should have received a copy of the GNU General Public License
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
21 // along with Octave; see the file COPYING. If not, see
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
22 // <https://www.gnu.org/licenses/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ////////////////////////////////////////////////////////////////////////
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
25
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21547
diff changeset
26 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21200
diff changeset
27 # include "config.h"
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
28 #endif
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
29
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1315
diff changeset
30 #include <cctype>
7528
26d8a92644de try to avoid ctype macro problems
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
31
8463
a74871446af7 Fchar, Fstrvcat: use queue to avoid duplicate calls to all_strings
John W. Eaton <jwe@octave.org>
parents: 8462
diff changeset
32 #include <queue>
5765
7ba9ad1fec11 [project @ 2006-04-17 05:05:15 by jwe]
jwe
parents: 5707
diff changeset
33 #include <sstream>
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
34
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
35 #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
36 #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
37 #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
38 #include "unistr-wrappers.h"
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
39
5416
9433f94acd29 [project @ 2005-07-18 18:36:29 by jwe]
jwe
parents: 5415
diff changeset
40 #include "Cell.h"
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1315
diff changeset
41 #include "defun.h"
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
42 #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
43 #include "errwarn.h"
2366
c90105b99479 [project @ 1996-10-11 23:22:27 by jwe]
jwe
parents: 2267
diff changeset
44 #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
45 #include "ovl.h"
4457
d7d9ca19960a [project @ 2003-07-11 03:05:38 by jwe]
jwe
parents: 4358
diff changeset
46 #include "unwind-prot.h"
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
47 #include "utils.h"
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
48
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
49 #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
50
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
51 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
52 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
53 @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
54 @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
55 @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
56 @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
57 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
58 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
59
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
60 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
61 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
62 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
63
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
64 For 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
65 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
66 (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
67
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
68 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
69 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
70 @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
71
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
72 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
73 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
74 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
75 @result{} ["abc "
09c81c841b6f Fix typo in cset 8354b505ad6b (bug #52702).
Rik <rik@octave.org>
parents: 24436
diff changeset
76 " "
09c81c841b6f Fix typo in cset 8354b505ad6b (bug #52702).
Rik <rik@octave.org>
parents: 24436
diff changeset
77 "98 "
09c81c841b6f Fix typo in cset 8354b505ad6b (bug #52702).
Rik <rik@octave.org>
parents: 24436
diff changeset
78 "99 "
09c81c841b6f Fix typo in cset 8354b505ad6b (bug #52702).
Rik <rik@octave.org>
parents: 24436
diff changeset
79 "d "
09c81c841b6f Fix typo in cset 8354b505ad6b (bug #52702).
Rik <rik@octave.org>
parents: 24436
diff changeset
80 "str1"
09c81c841b6f Fix typo in cset 8354b505ad6b (bug #52702).
Rik <rik@octave.org>
parents: 24436
diff changeset
81 "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
82 @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
83 @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
84 @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
85 @end deftypefn */)
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
86 {
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
87 octave_value retval;
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
88
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
89 int nargin = args.length ();
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
90
13135
af36cdb552a6 char: return empty string if called with no arguments
John W. Eaton <jwe@octave.org>
parents: 12900
diff changeset
91 if (nargin == 0)
af36cdb552a6 char: return empty string if called with no arguments
John W. Eaton <jwe@octave.org>
parents: 12900
diff changeset
92 retval = "";
af36cdb552a6 char: return empty string if called with no arguments
John W. Eaton <jwe@octave.org>
parents: 12900
diff changeset
93 else if (nargin == 1)
5281
f3266e7dbb99 [project @ 2005-04-14 19:35:20 by jwe]
jwe
parents: 5280
diff changeset
94 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
95 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
96 else
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
97 {
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
98 int n_elts = 0;
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
99
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
100 int max_len = 0;
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
101
8463
a74871446af7 Fchar, Fstrvcat: use queue to avoid duplicate calls to all_strings
John W. Eaton <jwe@octave.org>
parents: 8462
diff changeset
102 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
103
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
104 for (int i = 0; i < nargin; i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
105 {
20990
fc9cca99b2de Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents: 20940
diff changeset
106 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
107
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
108 if (s.numel () > 0)
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
109 n_elts += s.numel ();
8353
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
110 else
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
111 n_elts += 1;
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
112
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
113 int s_max_len = s.max_length ();
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
114
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
115 if (s_max_len > max_len)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
116 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
117
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
118 args_as_strings.push (s);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
119 }
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
120
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
121 string_vector result (n_elts);
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
122
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
123 int k = 0;
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
124
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
125 for (int i = 0; i < nargin; i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
126 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
127 string_vector s = args_as_strings.front ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
128 args_as_strings.pop ();
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
129
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
130 int n = s.numel ();
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
131
8353
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
132 if (n > 0)
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
133 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
134 for (int j = 0; j < n; j++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
135 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
136 std::string t = s[j];
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
137 int t_len = t.length ();
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 if (max_len > t_len)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
140 t += std::string (max_len - t_len, ' ');
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
141
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
142 result[k++] = t;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
143 }
8353
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
144 }
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
145 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
146 result[k++] = std::string (max_len, ' ');
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
147 }
4358
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
148
5280
25c12c80ccc3 [project @ 2005-04-14 19:19:45 by jwe]
jwe
parents: 4734
diff changeset
149 retval = octave_value (result, '\'');
4358
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
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
152 return retval;
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
153 }
83d4452bc522 [project @ 2003-02-23 02:16:53 by jwe]
jwe
parents: 4233
diff changeset
154
8353
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
155 /*
21317
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
156 %!assert (char (), '')
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
157 %!assert (char (100), "d")
14429
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]), ["dd"])
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"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
162 %!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
163 %!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
164 %!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
165 %!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
166 %!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
167 %!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
168
98d23b0f16e1 maint: move test_string.m tests to source files
John W. Eaton <jwe@octave.org>
parents: 13135
diff changeset
169 %!test
98d23b0f16e1 maint: move test_string.m tests to source files
John W. Eaton <jwe@octave.org>
parents: 13135
diff changeset
170 %! 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
171 %! assert (x(1,:), "foo ");
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
172 %! assert (x(2,:), "bar ");
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
173 %! assert (x(3,:), "foobar");
8353
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
174 */
349a555729a9 keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7528
diff changeset
175
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
176 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
177 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
178 @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
179 @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
180 @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
181 @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
182 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
183 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
184
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
185 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
186 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
187 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
188 output.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
189
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
190 For 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
191 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
192 (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
193
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
194 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
195 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
196 @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
197
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
198 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
199 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
200 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
201 @result{} ["abc "
8354b505ad6b doc: Fix inconsistencies with char, strvcat, strread docstrings (bug #52702.
Rik <rik@octave.org>
parents: 23731
diff changeset
202 "98 "
8354b505ad6b doc: Fix inconsistencies with char, strvcat, strread docstrings (bug #52702.
Rik <rik@octave.org>
parents: 23731
diff changeset
203 "99 "
8354b505ad6b doc: Fix inconsistencies with char, strvcat, strread docstrings (bug #52702.
Rik <rik@octave.org>
parents: 23731
diff changeset
204 "d "
8354b505ad6b doc: Fix inconsistencies with char, strvcat, strread docstrings (bug #52702.
Rik <rik@octave.org>
parents: 23731
diff changeset
205 "str1"
8354b505ad6b doc: Fix inconsistencies with char, strvcat, strread docstrings (bug #52702.
Rik <rik@octave.org>
parents: 23731
diff changeset
206 "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
207 @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
208 @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
209 @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
210 @end deftypefn */)
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
211 {
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
212 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
213 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
214 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
215 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
216
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
217 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
218 {
20990
fc9cca99b2de Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents: 20940
diff changeset
219 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
220
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
221 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
222
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
223 // 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
224 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
225 {
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
226 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
227 {
23812
057a894914df Use C++11 string fcns back() and pop_back() to simplify code.
Rik <rik@octave.org>
parents: 23732
diff changeset
228 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
229 n_elts++;
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
230 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
231 }
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
232
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
233 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
234
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
235 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
236 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
237
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
238 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
239 }
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
240
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
241 string_vector result (n_elts);
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
242
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
243 octave_idx_type k = 0;
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
244
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
245 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
246 {
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
247 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
248 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
249
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
250 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
251
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
252 if (n > 0)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
253 {
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
254 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
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 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
257 if (t.length () > 0)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
258 {
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
259 size_t t_len = t.length ();
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 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
262 t += std::string (max_len - t_len, ' ');
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
263
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
264 result[k++] = t;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
265 }
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
266 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10234
diff changeset
267 }
20166
196871335aa8 Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents: 19861
diff changeset
268 }
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
269
21127
df7891224709 maint: Use "return ovl (...)" in DEFUN macros.
Rik <rik@octave.org>
parents: 21100
diff changeset
270 // 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
271 return octave_value (result, '\'');
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
272 }
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
273
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
274 /*
21317
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
275 %!assert (strvcat (""), "")
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
276 %!assert (strvcat (100) == "d")
14429
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]), ["dd"])
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"])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
281 %!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
282 %!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
283 %!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
284 %!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
285 %!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
286 %!assert (strvcat (), "")
8462
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
287 */
ebdf1e058d85 Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8461
diff changeset
288
4535
a5f23212a3d8 [project @ 2003-10-16 02:39:15 by jwe]
jwe
parents: 4457
diff changeset
289 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
290 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
291 @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
292 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
293 @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
294 @end deftypefn */)
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
295 {
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
296 if (args.length () != 1)
5823
080c08b192d8 [project @ 2006-05-19 05:32:17 by jwe]
jwe
parents: 5765
diff changeset
297 print_usage ();
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
298
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
299 return ovl (args(0).is_string ());
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
300 }
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
301
8461
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
302 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
303 %!assert (ischar ("a"), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
304 %!assert (ischar (["ab";"cd"]), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
305 %!assert (ischar ({"ab"}), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
306 %!assert (ischar (1), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
307 %!assert (ischar ([1, 2]), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
308 %!assert (ischar ([]), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
309 %!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
310 %!assert (ischar (""), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
311 %!assert (ischar ("test"), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
312 %!assert (ischar (["test"; "ing"]), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
313 %!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
314
28888
06c8e0877864 maint: Backed out changeset 09c071328135.
Rik <rik@octave.org>
parents: 28887
diff changeset
315 %!error ischar ()
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
316 %!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
317 */
8461
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
318
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
319 static octave_value
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
320 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
321 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
322 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
323 octave_idx_type),
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
324 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
325 std::string::size_type))
10108
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 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
328 octave_value retval;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
329
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
330 bool s1_string = arg0.is_string ();
23576
00e518162fda maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents: 23575
diff changeset
331 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
332 bool s2_string = arg1.is_string ();
23576
00e518162fda maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents: 23575
diff changeset
333 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
334
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
335 if (s1_string && s2_string)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
336 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
337 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
338 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
339 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
340
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
341 if (s1_string)
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 str_val = arg0;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
344 cell_val = arg1;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
345 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
346 else
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 str_val = arg1;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
349 cell_val = arg0;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
350 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
351
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
352 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
353 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
354 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
355
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
356 if (r == 0 || r == 1)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
357 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
358 // Broadcast the string.
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
359
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
360 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
361
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23396
diff changeset
362 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
363
23575
e95738a119da maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents: 23457
diff changeset
364 if (cell_val.iscellstr ())
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
365 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
366 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
367 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
368 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
369 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
370 else
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 // 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
373 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
374 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
375 if (cell(i).is_string ())
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
376 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
377 }
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
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
380 retval = output;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
381 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
382 else if (r > 1)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
383 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
384 if (cell.numel () == 1)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
385 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
386 // Broadcast the cell.
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 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
389 boolNDArray output (dv, false);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
390
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
391 if (cell(0).is_string ())
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
392 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
393 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
394
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
395 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
396 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
397 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
398
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
399 retval = output;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
400 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
401 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
402 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
403 // Must match in all dimensions.
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
404
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
405 boolNDArray output (cell.dims (), false);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
406
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20193
diff changeset
407 if (cell.numel () == r)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
408 {
23575
e95738a119da maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents: 23457
diff changeset
409 if (cell_val.iscellstr ())
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
410 {
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
411 const Array<std::string> cellstr
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
412 = 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
413 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
414 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
415 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
416 else
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 // FIXME: should we warn here?
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
419 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
420 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
421 if (cell(i).is_string ())
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
422 output(i) = str_op (str[i],
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
423 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
424 }
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
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
427 retval = output;
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 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
430 retval = false;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
431 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
432 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
433 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
434 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
435 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
436 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
437 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
438
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
439 if (r1 == 1)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
440 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
441 // Make the singleton cell2.
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 cell1_val = arg1;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
444 cell2_val = arg0;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
445 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
446 else
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 cell1_val = arg0;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
449 cell2_val = arg1;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
450 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
451
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
452 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
453 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
454 r1 = cell1.numel ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
455 r2 = cell2.numel ();
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 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
458 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
459
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
460 boolNDArray output (size1, false);
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
461
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
462 if (r2 == 1)
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
463 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
464 // Broadcast cell2.
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
465
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
466 if (cell2(0).is_string ())
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
467 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
468 const 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
469
23575
e95738a119da maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents: 23457
diff changeset
470 if (cell1_val.iscellstr ())
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
471 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
472 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
473 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
474 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
475 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
476 else
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 // FIXME: should we warn here?
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
479 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
480 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
481 if (cell1(i).is_string ())
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 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
484 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
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 }
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 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
490 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
491 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
492 if (size1 != size2)
20831
35241c4b696c eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents: 20804
diff changeset
493 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
494
23575
e95738a119da maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents: 23457
diff changeset
495 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
496 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
497 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
498 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
499 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
500 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
501 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
502 else
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 // FIXME: should we warn here?
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
505 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
506 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
507 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
508 {
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
509 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
510 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
511 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
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 }
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
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
517 retval = output;
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 else
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
520 retval = false;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
521
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
522 return retval;
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
523 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
524
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
525
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
526 // 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
527 // 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
528
22280
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
529 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
530 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
531 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
532 { 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
533
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
534 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
535 static bool
26109cce022e New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents: 22022
diff changeset
536 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
537 { 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
538
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
539
5415
1fbae9f046e3 [project @ 2005-07-18 18:16:12 by jwe]
jwe
parents: 5307
diff changeset
540 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
541 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
542 @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
543 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
544 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
545
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
546 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
547 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
548 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
549 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
550 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
551
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
552 @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
553 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
554 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
555 @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
556 @end deftypefn */)
5415
1fbae9f046e3 [project @ 2005-07-18 18:16:12 by jwe]
jwe
parents: 5307
diff changeset
557 {
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
558 if (args.length () != 2)
5823
080c08b192d8 [project @ 2006-05-19 05:32:17 by jwe]
jwe
parents: 5765
diff changeset
559 print_usage ();
5415
1fbae9f046e3 [project @ 2005-07-18 18:16:12 by jwe]
jwe
parents: 5307
diff changeset
560
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
561 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
562 strcmp_ignore_n, strcmp_ignore_n));
5415
1fbae9f046e3 [project @ 2005-07-18 18:16:12 by jwe]
jwe
parents: 5307
diff changeset
563 }
1fbae9f046e3 [project @ 2005-07-18 18:16:12 by jwe]
jwe
parents: 5307
diff changeset
564
5862
2b35a7fe9302 [project @ 2006-06-20 04:31:56 by jwe]
jwe
parents: 5823
diff changeset
565 /*
2b35a7fe9302 [project @ 2006-06-20 04:31:56 by jwe]
jwe
parents: 5823
diff changeset
566 %!shared x
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
567 %! x = char (zeros (0, 2));
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
568 %!assert (strcmp ("", x), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
569 %!assert (strcmp (x, ""), 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), true)
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}), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
575 ## %!assert (strcmp (x, {""}), 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}), true)
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 ({x; x}, {""}), [false; false])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
579 ## %!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
580 ## %!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
581 %!assert (strcmp ({"foo"}, x), 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 ({"foo"}, x), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
584 %!assert (strcmp (x, {"foo"}), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
585 %!assert (strcmp ("foo", {"foo"}), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
586 %!assert (strcmp (x, {"foo"}), false)
5862
2b35a7fe9302 [project @ 2006-06-20 04:31:56 by jwe]
jwe
parents: 5823
diff changeset
587 %!shared y
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
588 %! y = char (zeros (2, 0));
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
589 %!assert (strcmp ("", y), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
590 %!assert (strcmp (y, ""), false)
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)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
592 %!assert (strcmp ({""}, y), [true; true])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
593 %!assert (strcmp ({y}, ""), 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}), true)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
596 %!assert (strcmp (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 ({y; y}, {""}), [true; true])
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
600 %!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
601 %!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
602 %!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
603 %!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
604 %!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
605 %!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
606 %!assert (strcmp ("foobar", "foobar"), true)
23731
0056bcaeb01c make strncmp case sensitive again (bug #51384)
John W. Eaton <jwe@octave.org>
parents: 23219
diff changeset
607 %!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
608 %!assert (strcmp ("fooba", "foobar"), false)
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
609
28888
06c8e0877864 maint: Backed out changeset 09c071328135.
Rik <rik@octave.org>
parents: 28887
diff changeset
610 %!error strcmp ()
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
611 %!error strcmp ("foo", "bar", 3)
5862
2b35a7fe9302 [project @ 2006-06-20 04:31:56 by jwe]
jwe
parents: 5823
diff changeset
612 */
2b35a7fe9302 [project @ 2006-06-20 04:31:56 by jwe]
jwe
parents: 5823
diff changeset
613
6250
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
614 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
615 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
616 @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
617 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
618 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
619
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
620 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
621 @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 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
623 @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
624 @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
625 @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
626
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
627 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
628 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
629 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
630 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
631 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
632
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
633 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
634 @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 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
636 @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
637 @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
638 @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
639
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
640 @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
641 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
642 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
643 @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
644 @end deftypefn */)
6250
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
645 {
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
646 if (args.length () != 3)
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
647 print_usage ();
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
648
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
649 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
650
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
651 if (n > 0)
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
652 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
653 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
654 octave::string::strncmp));
6250
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
655 else
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
656 error ("strncmp: N must be greater than 0");
6250
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
657 }
ff5e6cf72bda [project @ 2007-01-23 18:37:52 by jwe]
jwe
parents: 5911
diff changeset
658
8461
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
659 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
660 %!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
661 %!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
662 %!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
663 %!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
664 %!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
665 %!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
666 %!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
667 %!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
668
25698
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25692
diff changeset
669 %!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
670
28888
06c8e0877864 maint: Backed out changeset 09c071328135.
Rik <rik@octave.org>
parents: 28887
diff changeset
671 %!error strncmp ()
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
672 %!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
673 */
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
674
10316
9966f1f71c32 use DEFUNX instead of DEFUN for strcmpi and strncmpi
John W. Eaton <jwe@octave.org>
parents: 10315
diff changeset
675 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
676 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
677 @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
678 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
679 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
680
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
681 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
682 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
683 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
684 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
685 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
686
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
687 @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
688 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
689 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
690
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
691 @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
692 @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
693 @end deftypefn */)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
694 {
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
695 if (args.length () != 2)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
696 print_usage ();
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
697
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
698 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
699 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
700 }
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 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
703 %!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
704 */
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
705
10318
f0ac2fa91733 fix incorrect strncmpi change
John W. Eaton <jwe@octave.org>
parents: 10316
diff changeset
706 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
707 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
708 @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
709 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
710 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
711
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
712 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
713 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
714 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
715 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
716 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
717
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
718 @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
719 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
720 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
721
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
722 @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
723 @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
724 @end deftypefn */)
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
725 {
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
726 if (args.length () != 3)
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
727 print_usage ();
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
728
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
729 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
730
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
731 if (n > 0)
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
732 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
733 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
734 octave::string::strncmpi));
10108
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
735 else
20804
a6eaedd8bd75 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20704
diff changeset
736 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
737 }
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
738
06e11df4592d implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents: 9307
diff changeset
739 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
740 %!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
741
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25692
diff changeset
742 %!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
743 */
8461
9d456730b7a8 strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8372
diff changeset
744
26110
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
745 DEFUN (str2double, args, ,
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
746 doc: /* -*- texinfo -*-
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
747 @deftypefn {} {} str2double (@var{s})
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
748 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
749
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
750 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
751 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
752
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
753 @itemize
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
754 @item a + bi
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
755
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
756 @item a + b*i
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
757
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
758 @item a + i*b
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
759
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
760 @item bi + a
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
761
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
762 @item b*i + a
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 @item i*b + a
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
765 @end itemize
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
766
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
767 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
768 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
769 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
770 are also accepted.
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
771
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
772 @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
773 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
774 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
775 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
776 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
777 @var{s} is returned.
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
778
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
779 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
780 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
781 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
782 @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
783 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
784 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
785 and return NaN.
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
786
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
787 @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
788 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
789 @seealso{str2num}
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
790 @end deftypefn */)
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 if (args.length () != 1)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
793 print_usage ();
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
794
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
795 octave_value retval;
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
796
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
797 if (args(0).is_string ())
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
798 {
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
799 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
800 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
801 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
802 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
803 else
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
804 {
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
805 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
806
26127
37e3aa267374 Move function str2double inside octave::string namespace (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26110
diff changeset
807 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
808 }
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
809 }
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
810 else if (args(0).iscell ())
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
811 {
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
812 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
813
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
814 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
815
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
816 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
817 {
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
818 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
819 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
820 }
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
821 retval = output;
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 else
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
824 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
825
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
826 return retval;
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
827 }
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
828
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
829 /*
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
830 %!assert (str2double ("1"), 1)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
831 %!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
832 %!testif ; ! ismac ()
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
833 %! 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
834 %!xtest <47413>
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
835 %! ## 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
836 %! if (! ismac ()), return; endif
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
837 %! 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
838 %!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
839 %!assert (str2double ("i"), i)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
840 %!assert (str2double ("2j"), 2i)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
841 %!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
842 %!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
843 %!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
844 %!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
845 %!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
846 %!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
847 %!assert (str2double (1), NaN)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
848 %!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
849 %!assert (str2double ("Hello World"), NaN)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
850 %!assert (str2double ("NaN"), NaN)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
851 %!assert (str2double ("NA"), NA)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
852 %!assert (str2double ("Inf"), Inf)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
853 %!assert (str2double ("iNF"), Inf)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
854 %!assert (str2double ("-Inf"), -Inf)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
855 %!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
856 %!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
857 %!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
858 %!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
859 %!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
860 %!testif ; ! ismac ()
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 %!xtest <47413>
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
863 %! if (! ismac ()), return; endif
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
864 %! 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
865 %!testif ; ! ismac ()
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 %!xtest <47413>
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
868 %! if (! ismac ()), return; endif
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
869 %! 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
870 %!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
871 %!assert (str2double (''), NaN)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
872 %!assert (str2double ([]), NaN)
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
873 %!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
874 */
b543cf12c63f Move octave_str2double to liboctave (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25698
diff changeset
875
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
876 DEFUN (__native2unicode__, args, ,
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
877 doc: /* -*- texinfo -*-
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
878 @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
879 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
880
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
881 @seealso{native2unicode, __unicode2native__}
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
882 @end deftypefn */)
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
883 {
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
884 int nargin = args.length ();
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
885
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
886 if (nargin != 2)
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
887 print_usage ();
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
888
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
889 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
890 return ovl (args(0));
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
891
27366
4fef3ab19046 Remove input checks from internal unicode2native, native2unicode functions (bug #56805).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27265
diff changeset
892 std::string tmp = args(1).string_value ();
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
893 const char *codepage
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23396
diff changeset
894 = (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
895
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
896 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
897
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
898 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
899 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
900
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
901 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
902 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
903
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
904 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
905
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
906 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
907 {
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
908 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
909 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
910 "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
911 else
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
912 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
913 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
914 }
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
915
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28850
diff changeset
916 octave::unwind_action free_utf8_str ([=] () { ::free (utf8_str); });
24379
56d1e4d9975e avoid memory leak in utf8 conversion functions
John W. Eaton <jwe@octave.org>
parents: 23812
diff changeset
917
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
918 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
919
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
920 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
921
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
922 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
923 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
924
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
925 return ovl (retval);
23122
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
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
928 DEFUN (__unicode2native__, args, ,
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
929 doc: /* -*- texinfo -*-
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
930 @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
931 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
932 @var{codepage}.
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
933
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
934 @seealso{unicode2native, __native2unicode__}
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
935 @end deftypefn */)
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
936 {
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
937 int nargin = args.length ();
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
938
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
939 if (nargin != 2)
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
940 print_usage ();
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
941
27366
4fef3ab19046 Remove input checks from internal unicode2native, native2unicode functions (bug #56805).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27265
diff changeset
942 std::string tmp = args(1).string_value ();
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
943 const char *codepage
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23396
diff changeset
944 = (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
945
27366
4fef3ab19046 Remove input checks from internal unicode2native, native2unicode functions (bug #56805).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27265
diff changeset
946 charNDArray utf8_str = args(0).char_array_value ();
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
947
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
948 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
949 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
950
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
951 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
952 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
953
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
954 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
955
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
956 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
957 {
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
958 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
959 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
960 "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
961 else
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
962 error ("unicode2native: converting from UTF-8 to codepage '%s': %s",
27932
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
963 codepage, std::strerror (errno));
25691
e866bb226d38 Improve error message if iconv is not available (bug #54384).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
964 }
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
965
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28850
diff changeset
966 octave::unwind_action free_native_bytes ([=] () { ::free (native_bytes); });
24379
56d1e4d9975e avoid memory leak in utf8 conversion functions
John W. Eaton <jwe@octave.org>
parents: 23812
diff changeset
967
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
968 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
969
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
970 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
971
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
972 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
973 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
974
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
975 return ovl (retval);
23122
e310b5b6da6f Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents: 23084
diff changeset
976 }
23123
c6ca5fe1505c use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents: 23122
diff changeset
977
27265
5f65319c7835 Add new function for querying the locale charset.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27141
diff changeset
978 DEFUN (__locale_charset__, , ,
5f65319c7835 Add new function for querying the locale charset.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27141
diff changeset
979 doc: /* -*- texinfo -*-
5f65319c7835 Add new function for querying the locale charset.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27141
diff changeset
980 @deftypefn {} {@var{charset} =} __locale_charset__ ()
27795
afbaad39d25c doc: grammarcheck C++ files in libinterp/ directory.
Rik <rik@octave.org>
parents: 27785
diff changeset
981 Return the identifier for the charset used if the encoding is set to
afbaad39d25c doc: grammarcheck C++ files in libinterp/ directory.
Rik <rik@octave.org>
parents: 27785
diff changeset
982 @qcode{"locale"}.
27265
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)
27932
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
1013 {
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
1014 for (octave_idx_type i=0; i < str.ndims (); i++)
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
1015 p(i) = i;
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
1016 p(0) = 1;
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
1017 p(1) = 0;
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
1018 str_p = str.permute (p);
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
1019 }
25412
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++)
27932
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
1028 {
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
1029 int mblen = octave_u8_strmblen_wrapper (src + i);
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
1030 if (mblen < 1)
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
1031 mblen = 1;
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
1032 for (octave_idx_type j = 0; j < mblen; j++)
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
1033 idx (i+j) = u8_char_num;
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
1034 i += mblen;
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
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 /*
28907
11f1207111c5 maint: Don't use semicolon at end of single-line BIST tests.
Rik <rik@octave.org>
parents: 28888
diff changeset
1041 %!assert (unicode_idx (["aäou"; "Ä∞"]), [1 2 2 3 4; 5 5 6 6 6])
25412
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
27785
3f5026fd8da8 Create valid UTF-8 from .m file content (bug #57341).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27366
diff changeset
1044 DEFUN (__u8_validate__, args, ,
3f5026fd8da8 Create valid UTF-8 from .m file content (bug #57341).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27366
diff changeset
1045 doc: /* -*- texinfo -*-
27807
1626e50fa8ee Add type switch to "__u8_validate__".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27797
diff changeset
1046 @deftypefn {} {@var{out_str} =} __u8_validate__ (in_str, mode)
27785
3f5026fd8da8 Create valid UTF-8 from .m file content (bug #57341).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27366
diff changeset
1047 Return string with valid UTF-8.
3f5026fd8da8 Create valid UTF-8 from .m file content (bug #57341).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27366
diff changeset
1048
27807
1626e50fa8ee Add type switch to "__u8_validate__".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27797
diff changeset
1049 On encountering invalid UTF-8 in @var{in_str}, the bytes are either replaced by
28753
e82484e1b2f6 doc: grammarcheck documentation.
Rik <rik@octave.org>
parents: 28752
diff changeset
1050 the replacement character @qcode{"�"} (if @var{mode} is omitted or is the
e82484e1b2f6 doc: grammarcheck documentation.
Rik <rik@octave.org>
parents: 28752
diff changeset
1051 string @qcode{"replace"}) or interpreted as the Unicode code points
e82484e1b2f6 doc: grammarcheck documentation.
Rik <rik@octave.org>
parents: 28752
diff changeset
1052 U+0080–U+00FF with the same value as the byte (if @var{mode} is the string
e82484e1b2f6 doc: grammarcheck documentation.
Rik <rik@octave.org>
parents: 28752
diff changeset
1053 @qcode{"unicode"}), thus interpreting the bytes according to ISO-8859-1.
27785
3f5026fd8da8 Create valid UTF-8 from .m file content (bug #57341).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27366
diff changeset
1054 @end deftypefn */)
3f5026fd8da8 Create valid UTF-8 from .m file content (bug #57341).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27366
diff changeset
1055 {
28752
810eb29fc227 maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents: 27932
diff changeset
1056 int nargin = args.length ();
810eb29fc227 maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents: 27932
diff changeset
1057
810eb29fc227 maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents: 27932
diff changeset
1058 if (nargin < 1 || nargin > 2)
27785
3f5026fd8da8 Create valid UTF-8 from .m file content (bug #57341).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27366
diff changeset
1059 print_usage ();
3f5026fd8da8 Create valid UTF-8 from .m file content (bug #57341).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27366
diff changeset
1060
3f5026fd8da8 Create valid UTF-8 from .m file content (bug #57341).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27366
diff changeset
1061 // Input check
3f5026fd8da8 Create valid UTF-8 from .m file content (bug #57341).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27366
diff changeset
1062 std::string in_str =
28752
810eb29fc227 maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents: 27932
diff changeset
1063 args(0).xstring_value ("__u8_validate__: IN_STR must be a string");
27807
1626e50fa8ee Add type switch to "__u8_validate__".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27797
diff changeset
1064
1626e50fa8ee Add type switch to "__u8_validate__".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27797
diff changeset
1065 std::string mode = "replace";
28752
810eb29fc227 maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents: 27932
diff changeset
1066 if (nargin == 2)
810eb29fc227 maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents: 27932
diff changeset
1067 mode = args(1).xstring_value ("__u8_validate__: MODE must be a string");
27785
3f5026fd8da8 Create valid UTF-8 from .m file content (bug #57341).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27366
diff changeset
1068
27807
1626e50fa8ee Add type switch to "__u8_validate__".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27797
diff changeset
1069 octave::string::u8_fallback_type fb_type;
1626e50fa8ee Add type switch to "__u8_validate__".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27797
diff changeset
1070 if (mode == "replace")
1626e50fa8ee Add type switch to "__u8_validate__".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27797
diff changeset
1071 fb_type = octave::string::U8_REPLACEMENT_CHAR;
1626e50fa8ee Add type switch to "__u8_validate__".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27797
diff changeset
1072 else if (mode == "unicode")
1626e50fa8ee Add type switch to "__u8_validate__".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27797
diff changeset
1073 fb_type = octave::string::U8_ISO_8859_1;
1626e50fa8ee Add type switch to "__u8_validate__".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27797
diff changeset
1074 else
28752
810eb29fc227 maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents: 27932
diff changeset
1075 error (R"(__u8_validate__: MODE must be either "replace" or "unicode")");
27807
1626e50fa8ee Add type switch to "__u8_validate__".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27797
diff changeset
1076
1626e50fa8ee Add type switch to "__u8_validate__".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27797
diff changeset
1077 octave::string::u8_validate ("__u8_validate__", in_str, fb_type);
27785
3f5026fd8da8 Create valid UTF-8 from .m file content (bug #57341).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27366
diff changeset
1078
3f5026fd8da8 Create valid UTF-8 from .m file content (bug #57341).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27366
diff changeset
1079 return ovl (in_str);
3f5026fd8da8 Create valid UTF-8 from .m file content (bug #57341).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27366
diff changeset
1080 }
3f5026fd8da8 Create valid UTF-8 from .m file content (bug #57341).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27366
diff changeset
1081
27141
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1082 DEFUN (newline, args, ,
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1083 doc: /* -*- texinfo -*-
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1084 @deftypefn {} {} newline
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1085 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
1086
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1087 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
1088
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1089 Example Code
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1090
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1091 @example
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1092 @group
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1093 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
1094 @result{}
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1095 line1
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1096 line2
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1097 @end group
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1098 @end example
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1099
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1100 @seealso{strcat, strjoin, strsplit}
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1101 @end deftypefn */)
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1102 {
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1103 if (args.length () != 0)
27932
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
1104 print_usage ();
27797
5dcdd5bd46e2 maint: remove trailing spaces from code.
Rik <rik@octave.org>
parents: 27795
diff changeset
1105
27141
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1106 static octave_value_list retval = ovl ("\n");
27797
5dcdd5bd46e2 maint: remove trailing spaces from code.
Rik <rik@octave.org>
parents: 27795
diff changeset
1107
27141
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1108 return retval;
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1109 }
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1110
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1111 /*
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1112 %!assert (newline (), "\n")
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1113
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1114 %!error newline (1)
28913
c11bebb62369 Temporary fix for newline() BIST test until bug #59265 is resolved.
Rik <rik@octave.org>
parents: 28907
diff changeset
1115 ## FIXME: The next error() test requires a semicolon at EOL until
c11bebb62369 Temporary fix for newline() BIST test until bug #59265 is resolved.
Rik <rik@octave.org>
parents: 28907
diff changeset
1116 ## bug #59265 is resolved.
28914
49d3a6322a9b Actual fix left out of cset c11bebb62369.
Rik <rik@octave.org>
parents: 28913
diff changeset
1117 %!error [a, b] = newline ();
27141
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1118 */
f26b13c80e45 Implement new function "newline" for Matlab compatibility (bug #56419).
Guillaume Flandin <guillaume.offline@gmail.com>
parents: 26376
diff changeset
1119
5690
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
1120 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
1121 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
1122 @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
1123 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
1124 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
1125
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1126 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
1127 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
1128
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1129 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
1130 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
1131 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
1132 @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
1133
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1134 @smallexample
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1135 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1136 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
1137 @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
1138 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
1139 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
1140
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1141 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
1142 @result{}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1143 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
1144
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1145 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
1146 ==== ==== ==== ===== =====
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1147 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
1148
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1149 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
1150 @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
1151 @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
1152
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1153 @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
1154 @end deftypefn */)
5690
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
1155 {
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
1156 int nargin = args.length ();
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
1157
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
1158 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
1159 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
1160
20990
fc9cca99b2de Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents: 20940
diff changeset
1161 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
1162
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
1163 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
1164
23577
80c42f4cca13 maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents: 23576
diff changeset
1165 if (nargin > 1 && ! args(1).isempty ())
20704
571508c1ed06 eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20700
diff changeset
1166 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
1167
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
1168 std::string prefix;
5690
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
1169
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
1170 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
1171 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
1172
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
1173 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
1174
afa5e1d20671 * str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents: 14429
diff changeset
1175 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
1176
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
1177 return ovl (buf.str ());
5690
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
1178 }
161ebd1f3410 [project @ 2006-03-17 06:17:24 by jwe]
jwe
parents: 5674
diff changeset
1179
807
c03b179482fc [project @ 1994-10-14 14:21:58 by jwe]
jwe
parents:
diff changeset
1180 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
1181 %!test
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
1182 %! 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
1183 %! 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
1184 %! 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
1185 %!test
24461
0a034d34a686 Modify BIST tests to pass when string_fill_char is not ' '.
Rik <rik@octave.org>
parents: 24441
diff changeset
1186 %! 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
1187 %! 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
1188 %! 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
1189 %!test
24461
0a034d34a686 Modify BIST tests to pass when string_fill_char is not ' '.
Rik <rik@octave.org>
parents: 24441
diff changeset
1190 %! 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
1191 %! 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
1192 %! 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
1193
28888
06c8e0877864 maint: Backed out changeset 09c071328135.
Rik <rik@octave.org>
parents: 28887
diff changeset
1194 %!error list_in_columns ()
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
1195 %!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
1196 %!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
1197 %!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
1198 */