changeset 8442:502e58a0d44f

Fix docstrings, add examples, references and tests to string functions
author Thorsten Meyer <thorsten.meyier@gmx.de>
date Mon, 05 Jan 2009 08:11:03 +0100
parents cc3ac5eb6be3
children 34c0acf11539
files doc/ChangeLog doc/interpreter/strings.txi scripts/ChangeLog scripts/general/int2str.m scripts/general/num2str.m scripts/strings/base2dec.m scripts/strings/blanks.m scripts/strings/cstrcat.m scripts/strings/findstr.m scripts/strings/isletter.m scripts/strings/isstrprop.m scripts/strings/mat2str.m scripts/strings/regexptranslate.m scripts/strings/split.m scripts/strings/str2double.m scripts/strings/str2num.m scripts/strings/strcat.m scripts/strings/strcmpi.m scripts/strings/strfind.m scripts/strings/strjust.m scripts/strings/strmatch.m scripts/strings/strncmpi.m scripts/strings/strrep.m scripts/strings/strtok.m scripts/strings/strtrim.m scripts/strings/strtrunc.m scripts/strings/strvcat.m scripts/strings/substr.m src/ChangeLog src/DLD-FUNCTIONS/regexp.cc src/mappers.cc
diffstat 31 files changed, 384 insertions(+), 59 deletions(-) [+]
line wrap: on
line diff
--- a/doc/ChangeLog	Tue Dec 30 00:25:20 2008 -0500
+++ b/doc/ChangeLog	Mon Jan 05 08:11:03 2009 +0100
@@ -1,3 +1,7 @@
+2008-12-26  Thorsten Meyer  <thorsten.meyier@gmx.de>
+
+	* interpreter/strings.txi: Add space to ischar example.
+	
 2008-12-26  Francesco Potortì  <pot@gnu.org>
 
 	* interpreter/matrix.txi (Rearranging Matrices): Add reference
--- a/doc/interpreter/strings.txi	Tue Dec 30 00:25:20 2008 -0500
+++ b/doc/interpreter/strings.txi	Mon Jan 05 08:11:03 2009 +0100
@@ -184,8 +184,10 @@
 @group
 ischar(collection)
      @result{} ans = 1
+
 ischar(collection) && isvector(collection)
      @result{} ans = 0
+
 ischar("my string") && isvector("my string")
      @result{} ans = 1
 @end group
--- a/scripts/ChangeLog	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/ChangeLog	Mon Jan 05 08:11:03 2009 +0100
@@ -1,3 +1,18 @@
+2008-12-26  Thorsten Meyer  <thorsten.meyier@gmx.de>
+
+	* general/int2str.m, general/num2str.m, strings/base2dec.m,
+	strings/blanks.m, strings/cstrcat.m, strings/findstr.m,
+	strings/isstrprop.m, strings/mat2str.m, strings/regexptranslate.m,
+	strings/split.m, strings/str2double.m, strings/str2num.m,
+	strings/strcat.m, strings/strcmpi.m, strings/strfind.m,
+	strings/strjust.m, strings/strmatch.m, strings/strncmpi.m,
+	strings/strrep.m, strings/strtok.m, strings/strtrim.m,
+	strings/strtrunc.m, strings/strvcat.m, strings/substr.m: 
+	Fix documentation strings, add examples, references and tests.
+	* scripts/general/int2str.m: Add missing semicolon.
+	* scripts/strings/regexptranslate.m: add nargin check.
+	* scripts/strings/str2double.m: fix nargin check.
+	
 2008-12-29  David Bateman  <dbateman@free.fr>
 
 	* goemetry/voronoi.m: Speed up and handle dense grids.
--- a/scripts/general/int2str.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/general/int2str.m	Mon Jan 05 08:11:03 2009 +0100
@@ -19,10 +19,31 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} int2str (@var{n})
-## Convert an integer to a string.  This function is not very flexible.
-## For better control over the results, use @code{sprintf}
-## (@pxref{Formatted Output}). 
-## @seealso{sprintf, num2str}
+## Convert an integer (or array of integers) to a string (or a character
+## array).
+##
+## @example
+## @group
+##
+## int2str (123)
+##      @result{} "123"
+##
+## s = int2str ([1, 2, 3; 4, 5, 6])
+##      @result{} s = 
+##         1  2  3
+##         4  5  6
+## 
+## whos s
+##      @result{} s = 
+##       Attr Name        Size                     Bytes  Class
+##       ==== ====        ====                     =====  ===== 
+##            s           2x7                         14  char
+## @end group
+## @end example
+##
+## This function is not very flexible.  For better control over the
+## results, use @code{sprintf} (@pxref{Formatted Output}). 
+## @seealso{sprintf, num2str, mat2str}
 ## @end deftypefn
 
 ## Author: jwe
@@ -43,7 +64,7 @@
       ifmt = get_fmt (x(idx{:}), 0);
       idx(2) = 2:sz(2);
       rfmt = get_fmt (x(idx{:}), 2);
-      fmt = cstrcat (ifmt, repmat (rfmt, 1, nc-1), "\n")
+      fmt = cstrcat (ifmt, repmat (rfmt, 1, nc-1), "\n");
     else
       fmt = cstrcat (get_fmt (x, 0), "\n");
     endif
@@ -93,8 +114,7 @@
 endfunction
 
 %!assert(strcmp (int2str (-123), "-123") && strcmp (int2str (1.2), "1"));
-
+%!assert (all (int2str ([1, 2, 3; 4, 5, 6]) == ["1  2  3";"4  5  6"]));
 %!error int2str ();
-
 %!error int2str (1, 2);
 
--- a/scripts/general/num2str.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/general/num2str.m	Mon Jan 05 08:11:03 2009 +0100
@@ -18,13 +18,45 @@
 ## <http://www.gnu.org/licenses/>.
 
 ## -*- texinfo -*-
-## @deftypefn {Function File} {} num2str (@var{n})
+## @deftypefn {Function File} {} num2str (@var{x})
 ## @deftypefnx {Function File} {} num2str (@var{x}, @var{precision})
 ## @deftypefnx {Function File} {} num2str (@var{x}, @var{format})
-## Convert a number to a string.  This function is not very flexible.
-## For better control over the results, use @code{sprintf}
-## (@pxref{Formatted Output}).
-## @seealso{sprintf, int2str}
+## Convert a number (or array) to a string (or a character array).  The
+## optional second argument may either give the number of significant
+## digits (@var{precision}) to be used in the output or a format
+## template string (@var{format}) as in @code{sprintf} (@pxref{Formatted
+## Output}).  @code{num2str} can also handle complex numbers.  For
+## example: 
+##
+## @example
+## @group
+## num2str (123.456)
+##      @result{} "123.46"
+##
+## num2str (123.456, 4)
+##      @result{} "123.5"
+##
+## s = num2str ([1, 1.34; 3, 3.56], "%5.1f")
+##      @result{} s =
+##         1.0  1.3
+##         3.0  3.6
+## whos s
+##      @result{}
+##       Attr Name        Size                     Bytes  Class
+##       ==== ====        ====                     =====  ===== 
+##            s           2x8                         16  char
+##
+## num2str (1.234 + 27.3i)
+##      @result{} "1.234+27.3i"
+## @end group
+## @end example
+##
+## The @code{num2str} function is not very flexible.  For better control
+## over the results, use @code{sprintf} (@pxref{Formatted Output}). 
+## Note that for complex @var{x}, the format string may only contain one
+## output conversion specification and nothing else.  Otherwise, you
+## will get unpredictable results.  
+## @seealso{sprintf, int2str, mat2str}
 ## @end deftypefn
 
 ## Author: jwe
@@ -149,9 +181,10 @@
 
 endfunction
 
-%!assert((strcmp (num2str (123), "123") && strcmp (num2str (1.23), "1.23")));
-
+%!assert ((strcmp (num2str (123), "123") && strcmp (num2str (1.23), "1.23")));
+%!assert (num2str (123.456, 4), "123.5");
+%!assert (all (num2str ([1, 1.34; 3, 3.56], "%5.1f") == ["1.0  1.3"; "3.0  3.6"]));
+%!assert (num2str (1.234 + 27.3i), "1.234+27.3i");
 %!error num2str ();
-
 %!error num2str (1, 2, 3);
 
--- a/scripts/strings/base2dec.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/base2dec.m	Mon Jan 05 08:11:03 2009 +0100
@@ -81,3 +81,9 @@
   out = d * (base .^ (columns(d)-1 : -1 : 0)');
 
 endfunction
+
+%!error <Invalid call to base2dec.*> base2dec();
+%!error <Invalid call to base2dec.*> base2dec("11120");
+%!error <Invalid call to base2dec.*> base2dec("11120", 3, 4);
+%!assert(base2dec ("11120", 3), 123);
+%!assert(base2dec ("yyyzx", "xyz"), 123);
\ No newline at end of file
--- a/scripts/strings/blanks.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/blanks.m	Mon Jan 05 08:11:03 2009 +0100
@@ -19,7 +19,18 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} blanks (@var{n})
-## Return a string of @var{n} blanks.
+## Return a string of @var{n} blanks, for example:
+##
+## @example
+## @group
+## blanks(10);
+## whos ans;
+##      @result{}
+##       Attr Name        Size                     Bytes  Class
+##       ==== ====        ====                     =====  ===== 
+##            ans         1x10                        10  char
+## @end group
+## @end example
 ## @seealso{repmat}
 ## @end deftypefn
 
--- a/scripts/strings/cstrcat.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/cstrcat.m	Mon Jan 05 08:11:03 2009 +0100
@@ -19,16 +19,26 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} cstrcat (@var{s1}, @var{s2}, @dots{})
-## Return a string containing all the arguments concatenated.  For example,
+## Return a string containing all the arguments concatenated
+## horizontally. Trailing white space is preserved. For example,
+##
+## @example
+## @group
+## cstrcat ("ab   ", "cd")
+##      @result{} "ab   cd"
+## @end group
+## @end example
 ##
 ## @example
 ## @group
 ## s = [ "ab"; "cde" ];
 ## cstrcat (s, s, s)
-##      @result{} "ab ab ab "
+##      @result{} ans =
+##         "ab ab ab "
 ##         "cdecdecde"
 ## @end group
 ## @end example
+## @seealso{strcat, char, strvcat}
 ## @end deftypefn
 
 ## Author: jwe
--- a/scripts/strings/findstr.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/findstr.m	Mon Jan 05 08:11:03 2009 +0100
@@ -25,11 +25,14 @@
 ## can include overlapping positions (this is the default).  For example,
 ##
 ## @example
+## @group
 ## findstr ("ababab", "a")
-##      @result{} [ 1, 3, 5 ]
+##      @result{} [1, 3, 5]
 ## findstr ("abababa", "aba", 0)
-##      @result{} [ 1, 5 ]
+##      @result{} [1, 5]
+## @end group
 ## @end example
+## @seealso{strfind, strmatch, strcmp, strncmp, strcmpi, strncmpi, find}
 ## @end deftypefn
 
 ## Note that this implementation swaps the strings if second one is longer
@@ -129,7 +132,7 @@
 
 endfunction
 
-%!assert((findstr ("abababa", "a") == [1, 3, 5, 7]
+%!assert ((findstr ("abababa", "a") == [1, 3, 5, 7]
 %! && findstr ("abababa", "aba") == [1, 3, 5]
 %! && findstr ("abababa", "aba", 0) == [1, 5]));
 
--- a/scripts/strings/isletter.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/isletter.m	Mon Jan 05 08:11:03 2009 +0100
@@ -18,7 +18,7 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} isletter (@var{s})
-## Returns true if @var{s} is a letter false otherwise.
+## Returns true if @var{s} is a letter, false otherwise.
 ## @seealso{isalpha}
 ## @end deftypefn
 
@@ -33,3 +33,6 @@
   retval = isalpha (s);
 
 endfunction
+
+%!error isletter();
+%!error isletter("a", "b");
--- a/scripts/strings/isstrprop.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/isstrprop.m	Mon Jan 05 08:11:03 2009 +0100
@@ -22,7 +22,7 @@
 ##
 ## @example
 ## @group
-## isstrprop ("abc123", "isalpha")
+## isstrprop ("abc123", "alpha")
 ## @result{} [1, 1, 1, 0, 0, 0]
 ## @end group
 ## @end example
@@ -116,3 +116,6 @@
   endif
 
 endfunction
+
+%!error <invalid predicate> isstrprop ("abc123", "foo");
+%!assert (isstrprop ("abc123", "alpha"), logical ([1, 1, 1, 0, 0, 0]));
\ No newline at end of file
--- a/scripts/strings/mat2str.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/mat2str.m	Mon Jan 05 08:11:03 2009 +0100
@@ -36,16 +36,18 @@
 ##
 ## @example
 ## @group
-##    mat2str( [ -1/3 + i/7; 1/3 - i/7 ], [4 2] )
-##    @result{} '[-0.3333+0.14i;0.3333-0.14i]'
-##    mat2str( [ -1/3 +i/7; 1/3 -i/7 ], [4 2] )
-##    @result{} '[-0.3333+0i,0+0.14i;0.3333+0i,-0-0.14i]'
-##    mat2str( int16([1 -1]), 'class')
-##    @result{} 'int16([1,-1])'
+## mat2str( [ -1/3 + i/7; 1/3 - i/7 ], [4 2] )
+##      @result{} "[-0.3333+0.14i;0.3333-0.14i]"
+##
+## mat2str( [ -1/3 +i/7; 1/3 -i/7 ], [4 2] )
+##      @result{} "[-0.3333+0i,0+0.14i;0.3333+0i,-0-0.14i]"
+##
+## mat2str( int16([1 -1]), 'class')
+##      @result{} "int16([1,-1])"
 ## @end group
 ## @end example
 ##
-## @seealso{sprintf, int2str}
+## @seealso{sprintf, num2str, int2str}
 ## @end deftypefn
 
 ## Author: Rolf Fabian <fabian@tu-cottbus.de>
--- a/scripts/strings/regexptranslate.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/regexptranslate.m	Mon Jan 05 08:11:03 2009 +0100
@@ -26,16 +26,33 @@
 ## @table @asis
 ## @item "wildcard"
 ## The wildcard characters @code{.}, @code{*} and @code{?} are replaced
-## with wildcards that are appropriate for a regular expression.
-##
+## with wildcards that are appropriate for a regular expression. For example:
+## @example
+## @group
+## regexptranslate ("wildcard", "*.m")
+##      @result{} ".*\.m"
+## @end group
+## @end example
+## 
 ## @item "escape"
 ## The characters @code{$.?[]}, that have special meaning for regular
-## expressions are escaped so that they are treated literally.
+## expressions are escaped so that they are treated literally. For example:
+## @example
+## @group
+## regexptranslate ("escape", "12.5")
+##      @result{} "12\.5"
+## @end group
+## @end example
 ## @end table
+## @seealso{regexp, regexpi, regexprep}
 ## @end deftypefn
 
 function y = regexptranslate (op, x)
   
+  if nargin != 2
+    print_usage ();
+  endif 
+  
   if (ischar (op))
     op = tolower (op);
     if (strcmp ("wildcard", op))
@@ -55,5 +72,10 @@
   endif
 endfunction
 
+%!error <Invalid call to regexptranslate> regexptranslate ();
+%!error <Invalid call to regexptranslate> regexptranslate ("wildcard");
+%!error <Invalid call to regexptranslate> regexptranslate ("a", "b", "c");
+%!error <unexpected operation> regexptranslate ("foo", "abc");
+%!error <expecting operation to be a string> regexptranslate (10, "abc");
 %!assert (regexptranslate ("wildcard", "/a*b?c."), "/a.*b.c\\.")
 %!assert (regexptranslate ("escape", '$.?[]'), '\$\.\?\[\]')
--- a/scripts/strings/split.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/split.m	Mon Jan 05 08:11:03 2009 +0100
@@ -27,16 +27,19 @@
 ##
 ## @example
 ## split ("Test string", "t")
-##      @result{} "Tes "
+##      @result{}
+##         "Tes "
 ##         " s  "
 ##         "ring"
 ## @end example
 ##
 ## @example
-## split ("Test string", "t", 2)
-##      @result{} "Tes    "
-##         " string"
+## split ("Test string", "t s", 2)
+##      @result{}
+##         "Tes  "
+##         "tring"
 ## @end example
+## @seealso{strtok, index}
 ## @end deftypefn
 
 ## Author: Kurt Hornik <Kurt.Hornik@wu-wien.ac.at>
--- a/scripts/strings/str2double.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/str2double.m	Mon Jan 05 08:11:03 2009 +0100
@@ -59,6 +59,7 @@
 ## Examples:
 ##
 ## @example
+## @group
 ## str2double ("-.1e-5")
 ## @result{} -1.0000e-006
 ##
@@ -73,7 +74,9 @@
 ##     200   300   NaN  -Inf   NaN   NaN   999   NaN   NaN
 ## @result{} status =
 ##       0     0     0     0    -1    -1     0    -1     0
+## @end group
 ## @end example
+## @seealso{str2num}
 ## @end deftypefn
 
 ## Author: Alois Schloegl <a.schloegl@ieee.org>
@@ -87,8 +90,8 @@
   ## valid delimiters
   valid_delim = char (sort ([0, 9:14, 32:34, abs("()[]{},;:\"|/")]));
 
-  if (nargin < 1)
-    error ("missing input argument");
+  if (nargin < 1 || nargin > 4)
+    print_usage ();
   endif
 
   if (nargin < 2)
@@ -277,3 +280,14 @@
   endfor
 
 endfunction
+
+%!error <Invalid call to str2double> str2double();
+%!error <Invalid call to str2double> str2double("1e10", " ", "\n", ".", "x");
+%!assert (str2double ("-.1e-5"), -1.0000e-006);
+%!assert (str2double (".314e1, 44.44e-1, .7; -1e+1"),
+%!  [3.1400, 4.4440, 0.7000; -10.0000, NaN, NaN]);
+%!test
+%!  line = "200, 300, NaN, -inf, yes, no, 999, maybe, NaN";
+%!  [x, status] = str2double (line);
+%!  assert (x, [200, 300, NaN, -Inf, NaN, NaN, 999, NaN, NaN]);
+%!  assert (status, [0, 0, 0, 0, -1, -1, 0, -1, 0]);
--- a/scripts/strings/str2num.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/str2num.m	Mon Jan 05 08:11:03 2009 +0100
@@ -18,7 +18,26 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} str2num (@var{s})
-## Convert the string @var{s} to a number.
+## Convert the string (or character array) @var{s} to a number (or an
+## array). Examples:  
+##
+## @example
+## @group
+## str2num("3.141596")
+##      @result{} 3.141596
+## 
+## str2num(["1, 2, 3"; "4, 5, 6"]);
+##      @result{} ans =
+##         1  2  3
+##         4  5  6
+## @end group
+## @end example
+## 
+## @strong{Caution:} As @code{str2num} uses the @code{eval} function
+## to do the conversion, @code{str2num} will execute any code contained
+## in the string @var{s}.  Use @code{str2double} instead if you want to
+## avoid the use of @code{eval}. 
+## @seealso{str2double, eval}
 ## @end deftypefn
 
 ## Author: jwe
--- a/scripts/strings/strcat.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/strcat.m	Mon Jan 05 08:11:03 2009 +0100
@@ -19,16 +19,36 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} strcat (@var{s1}, @var{s2}, @dots{})
-## Return a string containing all the arguments concatenated.  For example,
+## Return a string containing all the arguments concatenated
+## horizontally.  If the arguments are cells strings,  @code{strcat}
+## returns a cell string with the individual cells concatenated.
+## For numerical input, each element is converted to the
+## corresponding ASCII character. Trailing white space is eliminated.
+## For example,
 ##
 ## @example
 ## @group
 ## s = [ "ab"; "cde" ];
 ## strcat (s, s, s)
-##      @result{} "ab ab ab "
+##      @result{} ans =
+##         "ab ab ab "
 ##         "cdecdecde"
 ## @end group
 ## @end example
+##
+## @example
+## @group
+## s = @{ "ab"; "cde" @};
+## strcat (s, s, s)
+##      @result{} ans =
+##         @{
+##           [1,1] = ababab
+##           [2,1] = cdecdecde
+##         @}
+## @end group
+## @end example
+##
+## @seealso{cstrcat, char, strvcat}
 ## @end deftypefn
 
 ## Author: jwe
--- a/scripts/strings/strcmpi.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/strcmpi.m	Mon Jan 05 08:11:03 2009 +0100
@@ -18,8 +18,8 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} strcmpi (@var{s1}, @var{s2})
-## Ignoring case, return 1 if the character strings @var{s1} and @var{s2}
-## are the same, and 0 otherwise.
+## Ignoring case, return 1 if the character strings (or character
+## arrays) @var{s1} and @var{s2} are the same, and 0 otherwise.
 ##
 ## If either @var{s1} or @var{s2} is a cell array of strings, then an array
 ## of the same size is returned, containing the values described above for
@@ -51,3 +51,5 @@
   endif
 
 endfunction
+
+%!assert (strcmpi("abc123", "ABC123"), logical(1));
--- a/scripts/strings/strfind.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/strfind.m	Mon Jan 05 08:11:03 2009 +0100
@@ -26,8 +26,26 @@
 ##
 ## If the cell array of strings @var{cellstr} is specified instead of the
 ## string @var{str}, then @var{idx} is a cell array of vectors, as specified
-## above.
-## @seealso{findstr, strmatch, strcmp, strncmp, strcmpi, strncmpi}
+## above. Examples:
+##
+## @example
+## @group
+## strfind ("abababa", "aba")
+##      @result{} [1, 3, 5]
+##
+## strfind (@{"abababa", "bebebe", "ab"@}, "aba")
+##      @result{} ans =
+##         @{
+##           [1,1] =
+##
+##              1   3   5
+##
+##           [1,2] = [](1x0)
+##           [1,3] = [](1x0)
+##         @}
+## @end group
+## @end example
+## @seealso{findstr, strmatch, strcmp, strncmp, strcmpi, strncmpi, find}
 ## @end deftypefn
 
 ## Author: alois schloegl <a.schloegl@ieee.org>
@@ -66,3 +84,11 @@
   endwhile
 
 ### endfunction
+
+%!error <Invalid call to strfind> strfind ();
+%!error <Invalid call to strfind> strfind ("foo", "bar", 1);
+%!error <pattern must be a string value> strfind ("foo", 100);
+%!error <text must be a string or cell array of string> strfind (100, "foo");
+
+%!assert (strfind ("abababa", "aba"), [1, 3, 5]);
+%!assert (strfind ({"abababa", "bla", "bla"}, "a"), {[1, 3, 5, 7], 3, 3});
--- a/scripts/strings/strjust.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/strjust.m	Mon Jan 05 08:11:03 2009 +0100
@@ -21,7 +21,18 @@
 ## Shift the non-blank text of @var{s} to the left, right or center of
 ## the string.  If @var{s} is a string array, justify each string in the
 ## array.  Null characters are replaced by blanks.  If no justification
-## is specified, then all rows are right-justified.
+## is specified, then all rows are right-justified. For example:
+##
+## @example
+## @group
+## strjust (["a"; "ab"; "abc"; "abcd"])
+##      @result{} ans =
+##            a
+##           ab
+##          abc
+##         abcd
+## @end group
+## @end example
 ## @end deftypefn
 
 function x = strjust (x, just)
@@ -63,3 +74,10 @@
   x = x (idx*nr + [1:nr]'*ones(1,nc));
 
 endfunction
+
+%!error <Invalid call to strjust> strjust();
+%!error <Invalid call to strjust> strjust(["a";"ab"], "center", 1);
+%!assert (strjust (["a"; "ab"; "abc"; "abcd"]),
+%!        ["   a";"  ab"; " abc"; "abcd"]);
+%!assert (strjust (["a"; "ab"; "abc"; "abcd"], "center"),
+%!        [" a  "; " ab"; "abc "; "abcd"]);
--- a/scripts/strings/strmatch.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/strmatch.m	Mon Jan 05 08:11:03 2009 +0100
@@ -23,7 +23,22 @@
 ## The second argument @var{a} may be a string matrix or a cell array of
 ## strings.  If the third argument @code{"exact"} is not given, then
 ## @var{s} only needs to match @var{a} up to the length of @var{s}.  Nul
-## characters match blanks.  Results are returned as a column vector.
+## characters match blanks.  Results are returned as a column vector. 
+## For example:
+##
+## @example
+## @group
+## strmatch ("apple", "apple juice")
+##      @result{} 1
+##
+## strmatch ("apple", ["apple pie"; "apple juice"; "an apple"])
+##      @result{} [1; 2]
+##
+## strmatch ("apple", @{"apple pie"; "apple juice"; "tomato"@})
+##      @result{} [1; 2]
+## @end group
+## @end example
+## @seealso{strfind, findstr, strcmp, strncmp, strcmpi, strncmpi, find}
 ## @end deftypefn
 
 ## Author: Paul Kienzle, Alois Schloegl
@@ -66,3 +81,13 @@
   endif
     
 endfunction 
+
+%!error <Invalid call to strmatch> strmatch();
+%!error <Invalid call to strmatch> strmatch("a", "aaa", "exact", 1);
+%!assert (strmatch("a", {"aaa", "bab", "bbb"}), 1);
+%!assert (strmatch ("apple", "apple juice"), 1);
+%!assert (strmatch ("apple", ["apple pie"; "apple juice"; "an apple"]),
+%!        [1; 2]);
+%!assert (strmatch ("apple", {"apple pie"; "apple juice"; "tomato"}),
+%!        [1; 2]);
+%!assert (strmatch ("apple pie", "apple"), []);
--- a/scripts/strings/strncmpi.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/strncmpi.m	Mon Jan 05 08:11:03 2009 +0100
@@ -19,11 +19,12 @@
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} strncmpi (@var{s1}, @var{s2}, @var{n})
 ## Ignoring case, return 1 if the first @var{n} characters of character
-## strings @var{s1} and @var{s2} are the same, and 0 otherwise.
+## strings (or character arrays) @var{s1} and @var{s2} are the same, and
+## 0 otherwise.
 ##
 ## If either @var{s1} or @var{s2} is a cell array of strings, then an array
 ## of the same size is returned, containing the values described above for
-## every member of the cell array. The other argument may also be a cell
+## every member of the cell array.  The other argument may also be a cell
 ## array of strings (of the same size or with only one element), char matrix
 ## or character string.
 ##
@@ -44,3 +45,5 @@
   endif
 
 endfunction
+
+%!assert (strncmpi("abc123", "ABC456", 3), logical(1));
--- a/scripts/strings/strrep.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/strrep.m	Mon Jan 05 08:11:03 2009 +0100
@@ -26,6 +26,7 @@
 ## strrep ("This is a test string", "is", "&%$")
 ##      @result{} "Th&%$ &%$ a test string"
 ## @end example
+## @seealso{regexprep, strfind, findstr}
 ## @end deftypefn
 
 ## Author: Kurt Hornik <Kurt.Hornik@wu-wien.ac.at>
--- a/scripts/strings/strtok.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/strtok.m	Mon Jan 05 08:11:03 2009 +0100
@@ -22,8 +22,21 @@
 ## Find all characters up to but not including the first character which
 ## is in the string delim.  If @var{rem} is requested, it contains the
 ## remainder of the string, starting at the first deliminator. Leading
-## delimiters are ignored.  If @var{delim} is not specified, space is assumed.
+## delimiters are ignored.  If @var{delim} is not specified, space is
+## assumed.  For example: 
+##
+## @example
+## @group
+## strtok ("this is the life")
+##      @result{} "this"
 ##
+## [tok, rem] = strtok ("14*27+31", "+-*/")
+##      @result{}
+##         tok = 14
+##         rem = *27+31
+## @end group
+## @end example
+## @seealso{index, split}
 ## @end deftypefn
 
 ## FIXME: check what to do for a null delimiter
--- a/scripts/strings/strtrim.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/strtrim.m	Mon Jan 05 08:11:03 2009 +0100
@@ -21,7 +21,17 @@
 ## Remove leading and trailing blanks and nulls from @var{s}.  If
 ## @var{s} is a matrix, @var{strtrim} trims each row to the length of
 ## longest string.  If @var{s} is a cell array, operate recursively on
-## each element of the cell array. 
+## each element of the cell array. For example:
+##
+## @example
+## @group
+## strtrim ("    abc  ")
+##      @result{} "abc"
+##
+## strtrim ([" abc   "; "   def   "])
+##      @result{} ["abc  "; "  def"]
+## @end group
+## @end example
 ## @end deftypefn
 
 ## Author: John Swensen <jpswensen@jhu.edu>
@@ -52,3 +62,8 @@
   endif
 
 endfunction
+
+%!error <Invalid call to strtrim> strtrim();
+%!error <Invalid call to strtrim> strtrim("abc", "def");
+%!assert (strtrim ("    abc  "), "abc");
+%!assert (strtrim ([" abc   "; "   def   "]), ["abc  "; "  def"]);
--- a/scripts/strings/strtrunc.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/strtrunc.m	Mon Jan 05 08:11:03 2009 +0100
@@ -19,7 +19,7 @@
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} strtrunc (@var{s}, @var{n})
 ## Truncate the character string @var{s} to length @var{n}. If @var{s}
-## is a char matrix, then the number of columns are adjusted.
+## is a char matrix, then the number of columns is adjusted.
 ##
 ## If @var{s} is a cell array of strings, then the operation is performed
 ## on its members and the new cell array is returned.
@@ -51,3 +51,9 @@
   endif
 
 endfunction
+
+%!error <Invalid call to strtrunc> strtrunc ();
+%!error <s must be a character string or a cell array of strings> strtrunc (1, 1)
+%!assert (strtrunc("abcdefg", 4), "abcd");
+%!assert (strtrunc("abcdefg", 10), "abcdefg");
+%!assert (strtrunc({"abcdef", "fedcba"}, 3), {"abc", "fed"});
--- a/scripts/strings/strvcat.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/strvcat.m	Mon Jan 05 08:11:03 2009 +0100
@@ -18,11 +18,26 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} strvcat (@var{s_1}, @dots{}, @var{s_n})
-## Return a matrix containing the strings (and cell-strings) 
+## Return a character array containing the strings (or cell-strings) 
 ## @var{s_1}, @dots{}, @var{s_n} as
 ## its rows.  Each string is padded with blanks in order to form a valid
-## matrix.  Unlike @var{char}, empty strings are ignored.
-## @seealso{cstrcat, char}
+## matrix.  For numerical input, each element is converted to the
+## corresponding ASCII character.  Unlike @var{char}, empty strings are
+## removed. For example:
+##
+## @example
+## @group
+## strvcat ([97, 98, 99], "", @{"98", "99", 100@}, ["num", "bers"])
+##     @result{} ans = 
+##        ["abc    "
+##         "98     "
+##         "99     "
+##         "d      "
+##         "numbers"]
+## @end group
+## @end example
+##
+## @seealso{char, cstrcat, strcat}
 ## @end deftypefn
 
 ## Author: Kurt Hornik <Kurt.Hornik@ci.tuwien.ac.at>
--- a/scripts/strings/substr.m	Tue Dec 30 00:25:20 2008 -0500
+++ b/scripts/strings/substr.m	Mon Jan 05 08:11:03 2009 +0100
@@ -33,7 +33,7 @@
 ## @end example
 ##
 ## This function is patterned after AWK.  You can get the same result by
-## @code{@var{s} (@var{offset} : (@var{offset} + @var{len} - 1))}.
+## @code{@var{s}(@var{offset} : (@var{offset} + @var{len} - 1))}.
 ## @end deftypefn
 
 ## Author: Kurt Hornik <Kurt.Hornik@wu-wien.ac.at>
--- a/src/ChangeLog	Tue Dec 30 00:25:20 2008 -0500
+++ b/src/ChangeLog	Mon Jan 05 08:11:03 2009 +0100
@@ -1,3 +1,10 @@
+2008-12-26  Thorsten Meyer  <thorsten.meyier@gmx.de>
+
+	* mappers.cc (Ftoascii), mappers.cc (Ftolower), mappers.cc
+	(Ftoupper), DLD-FUNCTIONS/regexp.cc (Fregexp),
+	DLD-FUNCTIONS/regexp.cc	(Fregexpi), DLD-FUNCTIONS/regexp.cc
+	(Fregexprep): Add references.
+	
 2008-12-27  Jaroslav Hajek <highegg@gmail.com>
 
 	* oct-obj.h, oct-obj.cc (octave_value_list::valid_scalar_indices): Remove.
--- a/src/DLD-FUNCTIONS/regexp.cc	Tue Dec 30 00:25:20 2008 -0500
+++ b/src/DLD-FUNCTIONS/regexp.cc	Mon Jan 05 08:11:03 2009 +0100
@@ -994,6 +994,7 @@
 @item literalspacing\n\
 The pattern is taken literally.\n\
 @end table\n\
+@seealso{regexpi, regexprep}\n\
 @end deftypefn")
 {
   octave_value_list retval;
@@ -1186,7 +1187,7 @@
 \n\
 Case insensitive regular expression string matching. Matches @var{pat} in\n\
 @var{str} and returns the position and matching substrings or empty values\n\
-if there are none. See @code{regexp} for more details\n\
+if there are none.  @xref{doc-regexp,,regexp}, for more details\n\
 @end deftypefn")
 {
   octave_value_list retval;
@@ -1569,7 +1570,7 @@
 Alternatively, use (?x) or (?-x) in the pattern.\n\
 \n\
 @end table\n\
-@seealso{regexp,regexpi}\n\
+@seealso{regexp,regexpi,strrep}\n\
 @end deftypefn")
 {
   octave_value_list retval;
--- a/src/mappers.cc	Tue Dec 30 00:25:20 2008 -0500
+++ b/src/mappers.cc	Mon Jan 05 08:11:03 2009 +0100
@@ -1555,6 +1555,7 @@
 @end group\n\
 \n\
 @end example\n\
+@seealso{char}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -1578,6 +1579,7 @@
 tolower (\"MiXeD cAsE 123\")\n\
      @result{} \"mixed case 123\"\n\
 @end example\n\
+@seealso{toupper}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -1623,6 +1625,7 @@
      @result{} \"MIXED CASE 123\"\n\
 @end group\n\
 @end example\n\
+@seealso{tolower}\n\
 @end deftypefn")
 {
   octave_value retval;