Mercurial > hg > octave-nkf
annotate scripts/strings/untabify.m @ 14138:72c96de7a403 stable
maint: update copyright notices for 2012
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 02 Jan 2012 14:25:41 -0500 |
parents | e81ddf9cacd5 |
children | 5d3a684236b0 |
rev | line source |
---|---|
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
13141
diff
changeset
|
1 ## Copyright (C) 2010-2012 Ben Abbott |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11563
diff
changeset
|
2 ## |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
3 ## This file is part of Octave. |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
4 ## |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
5 ## Octave is free software; you can redistribute it and/or modify it |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
6 ## under the terms of the GNU General Public License as published by |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11563
diff
changeset
|
7 ## the Free Software Foundation; either version 2 of the License, or (at |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
8 ## your option) any later version. |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11563
diff
changeset
|
9 ## |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
10 ## This program is distributed in the hope that it will be useful, |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
11 ## but WITHOUT ANY WARRANTY; without even the implied warranty of |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
13 ## GNU General Public License for more details. |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11563
diff
changeset
|
14 ## |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
15 ## You should have received a copy of the GNU General Public License |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
16 ## along with Octave; see the file COPYING. If not, see |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
17 ## <http://www.gnu.org/licenses/>. |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
18 |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
19 ## -*- texinfo -*- |
11563
3c6e8aaa9555
Grammarcheck m-files before 3.4 release.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
20 ## @deftypefn {Function File} {} untabify (@var{t}) |
3c6e8aaa9555
Grammarcheck m-files before 3.4 release.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
21 ## @deftypefnx {Function File} {} untabify (@var{t}, @var{tw}) |
3c6e8aaa9555
Grammarcheck m-files before 3.4 release.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
22 ## @deftypefnx {Function File} {} untabify (@var{t}, @var{tw}, @var{deblank}) |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
23 ## Replace TAB characters in @var{t}, with spaces. |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
24 ## The tab width is specified by @var{tw}, or defaults to eight. |
11563
3c6e8aaa9555
Grammarcheck m-files before 3.4 release.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
25 ## The input, @var{t}, may be either a 2-D character array, or a cell |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
26 ## array of character strings. The output is the same class |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
27 ## as the input. |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
28 ## |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
29 ## If the optional argument @var{deblank} is true, then the spaces will |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
30 ## be removed from the end of the character data. |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
31 ## |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
32 ## The following example reads a file and writes an untabified version |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
33 ## of the same file with trailing spaces stripped. |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
34 ## |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
35 ## @example |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
36 ## @group |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
37 ## fid = fopen ("tabbed_script.m"); |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
38 ## text = char (fread (fid, "uchar")'); |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
39 ## fclose (fid); |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
40 ## fid = fopen ("untabified_script.m", "w"); |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
41 ## text = untabify (strsplit (text, "\n"), 8, true); |
11115
965766039d93
finish adding untabify.m to build system
John W. Eaton <jwe@octave.org>
parents:
11102
diff
changeset
|
42 ## fprintf (fid, "%s\n", text@{:@}); |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
43 ## fclose (fid); |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
44 ## @end group |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
45 ## @end example |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
46 ## |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
47 ## @seealso{strjust, strsplit, deblank} |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
48 ## @end deftypefn |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
49 |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
50 ## Author: Ben Abbott <bpabbott@mac.com> |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
51 ## Created: 2010-10-15 |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
52 |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
11191
diff
changeset
|
53 function s = untabify (t, tw = 8, dblank = false) |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
54 |
12929
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
55 if (nargin < 1 || nargin > 3) |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
56 print_usage (); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
57 elseif (! (ischar (t) || iscellstr (t))) |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
58 error ("untabify: T must be a string or cellstring"); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
59 endif |
13141
e81ddf9cacd5
maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
12929
diff
changeset
|
60 |
12929
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
61 if (ischar (t)) |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
62 s = replace_tabs (t, tw); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
63 else |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
64 s = cellfun (@(str) replace_tabs (str, tw), t, "uniformoutput", false); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
65 endif |
13141
e81ddf9cacd5
maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
12929
diff
changeset
|
66 |
12929
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
67 if (dblank) |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
68 s = deblank (s); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
69 endif |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
70 |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
71 endfunction |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
72 |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
73 function s = replace_tabs (t, tw) |
12929
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
74 |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
75 if (ndims (t) != 2) |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
76 error ("untabify: character strings to untabify must have 2 dimensions"); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
77 endif |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
78 |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
79 if (isempty (t)) |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
80 s = t; |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
81 else |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
82 nr = rows (t); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
83 sc = cell (nr, 1); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
84 for j = 1:nr |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
85 n = 1:numel(t(j,:)); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
86 m = find (t(j,:) == "\t"); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
87 t(j,m) = " "; |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
88 for i = 1:numel(m) |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
89 k = tw * ceil (n(m(i)) / tw); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
90 dn = k - n(m(i)); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
91 n(m(i):end) += dn; |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
92 endfor |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
93 sc{j} = blanks (n(end)); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
94 sc{j}(n) = t(j,:); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
95 endfor |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
96 s = char (sc); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
97 endif |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
98 |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
99 endfunction |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
100 |
12929
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
101 |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
102 %!test |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
103 %! s = untabify ("\thello\t"); |
12929
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
104 %! assert (s, [blanks(8) "hello" blanks(3)]); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
105 |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
106 %!test |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
107 %! s = untabify ("\thello\t", 2); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
108 %! assert (s, [blanks(2) "hello" blanks(1)]); |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
109 |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
110 %!test |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
111 %! s = untabify ("\thello\t", 4, true); |
12929
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
112 %! assert (s, [blanks(4) "hello"]); |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
113 |
12929
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
114 %!assert (isempty (untabify (""))) |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
115 |
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
116 %!test |
12929
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
117 %! s = char (randi ([97 97+25], 3, 3)); |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
118 %! assert (untabify (s), char (untabify (cellstr (s)))); |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
119 |
12929
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
120 %!error untabify () |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
121 %!error untabify (1,2,3,4) |
135ec8155eeb
untabify.m: Place input validation first. Simplify assert tests.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
122 %!error <must be a string> untabify (1) |
11102
eab173e1e80c
untabify.m: New function to untabify text.
Ben Abbott <bpabbott@mac.com>
parents:
diff
changeset
|
123 |