changeset 18866:5eca3080c7cd

maint: Merge Stefan's changesets onto default after verification.
author Rik <rik@octave.org>
date Sat, 14 Jun 2014 13:24:46 -0700
parents 5b7b18d603ae (diff) 4a4edf0f2077 (current diff)
children 30d8501a857a
files configure.ac
diffstat 86 files changed, 606 insertions(+), 590 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Sun May 11 02:28:33 2014 +0200
+++ b/.hgtags	Sat Jun 14 13:24:46 2014 -0700
@@ -87,3 +87,4 @@
 02ce68d63fba31cd14ac060c087212a032ae3202 rc-3-8-1-3
 dd669c2ae76c167613f54d6f4db0130fa2124cac rc-3-8-1-4
 43cc202335dc4a53a3d8fc9ca90acaa81d2e63d3 release-3-8-1
+492c5614953571a0b07f4c1621cc7bc5c85c0251 rc-3-8-2-1
--- a/NEWS	Sun May 11 02:28:33 2014 +0200
+++ b/NEWS	Sat Jun 14 13:24:46 2014 -0700
@@ -1,6 +1,18 @@
 Summary of important user-visible changes for version 4.2:
 ---------------------------------------------------------
 
+ ** A new syntax for object oriented programming termed classdef has been
+    introduced.  See the manual for more extensive documentation of the
+    classdef interface.
+    
+    New keywords:
+
+      classdef      endclassdef
+      enumeration   endenumeration
+      events        endevents
+      methods       endmethods
+      properties    endproperties
+
  ** Interpolation function changes for Matlab compatibility
 
     The interpolation method 'cubic' is now equivalent to 'pchip'
@@ -24,6 +36,18 @@
     There is still one difference:  Matlab switches to '%e' and Octave
     is currently switching to '%g'.
 
+ ** Z-order stacking issues with patches, grid lines, and line object
+    plot markers for on screen display and printing have all been resolved.
+    For 2-D plots the axis grid lines can be placed on top of the plot
+    with set (gca, "layer", "top").
+
+ ** The patch graphic object has been overhauled.  It now produces visual
+    results equivalent to Matlab even for esoteric combinations of
+    faces/vertices/cdata.
+
+ ** The polar() plot function now draws a circular theta axis and 
+    radial rho axis rather than using a rectangular x/y axis.
+
  ** linkprop has been completely re-coded for performance and Matlab
     compatibility.  It now returns a linkprop object which must be stored
     in a variable for as long as the graphic objects should remain linked.
--- a/configure.ac	Sun May 11 02:28:33 2014 +0200
+++ b/configure.ac	Sat Jun 14 13:24:46 2014 -0700
@@ -33,7 +33,7 @@
 
 OCTAVE_COPYRIGHT="Copyright (C) 2013 John W. Eaton and others."
 
-OCTAVE_RELEASE_DATE="2013-12-27"
+OCTAVE_RELEASE_DATE="2014-06-06"
 
 ## The "API version" is used as a way of checking that interfaces in the
 ## liboctave and libinterp libraries haven't changed in a backwardly
--- a/doc/interpreter/contrib.txi	Sun May 11 02:28:33 2014 +0200
+++ b/doc/interpreter/contrib.txi	Sat Jun 14 13:24:46 2014 -0700
@@ -284,8 +284,10 @@
 An exception are matrix or cell constructors:
 
 @example
+@group
   [sin(x), cos(x)]
   @{sin(x), cos(x)@}
+@end group
 @end example
 
 @noindent
--- a/doc/interpreter/contributors.in	Sun May 11 02:28:33 2014 +0200
+++ b/doc/interpreter/contributors.in	Sat Jun 14 13:24:46 2014 -0700
@@ -224,6 +224,7 @@
 Carl Osterwisch
 Janne Olavi Paanajärvi
 Scott Pakin
+Jason Alan Palmer
 Gabriele Pannocchia
 Sylvain Pelissier
 Per Persson
--- a/doc/interpreter/diagperm.txi	Sun May 11 02:28:33 2014 +0200
+++ b/doc/interpreter/diagperm.txi	Sat Jun 14 13:24:46 2014 -0700
@@ -489,21 +489,18 @@
 right and the consequent usage of smarter algorithms for certain operations
 implies, as a side effect, small differences in treating zeros.
 The contents of this section apply also to sparse matrices, discussed in
-the following chapter. (@pxref{Sparse Matrices})
+the following chapter.  (@pxref{Sparse Matrices})
 
-The IEEE floating point standard defines the result of the expressions @code{0*Inf} and 
-@code{0*NaN} as @code{NaN}. This is widely agreed to be a good
-compromise.
-Numerical software dealing with structured and sparse matrices (including
-Octave) however, almost always makes a distinction between a "numerical zero"
-and an "assumed zero". 
-A "numerical zero" is a zero value occurring in a place where any floating-point
-value could occur.  It is normally stored somewhere in memory as an explicit
-value. 
-An "assumed zero", on the contrary, is a zero matrix element implied by the
-matrix structure (diagonal, triangular) or a sparsity pattern; its value is
-usually not stored explicitly anywhere, but is implied by the underlying
-data structure.
+The IEEE floating point standard defines the result of the expressions
+@code{0*Inf} and @code{0*NaN} as @code{NaN}.  This is widely agreed to be a
+good compromise.  Numerical software dealing with structured and sparse matrices
+(including Octave) however, almost always makes a distinction between a
+"numerical zero" and an "assumed zero".  A "numerical zero" is a zero value
+occurring in a place where any floating-point value could occur.  It is
+normally stored somewhere in memory as an explicit value.  An "assumed zero", on
+the contrary, is a zero matrix element implied by the matrix structure
+(diagonal, triangular) or a sparsity pattern; its value is usually not stored
+explicitly anywhere, but is implied by the underlying data structure.
 
 The primary distinction is that an assumed zero, when multiplied 
 by any number, or divided by any nonzero number,
--- a/doc/interpreter/doccheck/aspell-octave.en.pws	Sun May 11 02:28:33 2014 +0200
+++ b/doc/interpreter/doccheck/aspell-octave.en.pws	Sat Jun 14 13:24:46 2014 -0700
@@ -52,6 +52,7 @@
 backend
 Backends
 backends
+backtrace
 bartlett
 BaseValue
 basevalue
@@ -235,6 +236,7 @@
 dMatrix
 dmperm
 Dobkin
+docstring
 docstrings
 dOmega
 doNotSpecify
@@ -387,6 +389,7 @@
 goto
 Goto
 gotos
+gperf
 GPL
 GPLK
 gplot
@@ -499,6 +502,7 @@
 javaaddpath
 javamem
 jbig
+JDK
 JIT
 jpeg
 JPEG
@@ -678,8 +682,10 @@
 nbininv
 nbinpdf
 nbinrnd
+ncols
 nd
 ndgrid
+ndims
 ne
 Nelder
 neq
@@ -700,7 +706,11 @@
 nolabel
 noncommercially
 nonconformant
+nondecreasing
+nonincreasing
+nonnan
 nonsmooth
+nonsparse
 nonzeros
 NOP
 noperm
@@ -713,9 +723,11 @@
 noscal
 noshare
 notin
+nrows
 nthargout
 NTSC
 ntsc
+numel
 Numpy
 nzmax
 oct
@@ -726,6 +738,7 @@
 onCleanup
 online
 OpenGL
+OpenJDK
 oplus
 Oppenheim
 Ord
@@ -1166,6 +1179,7 @@
 wp
 wspace
 xb
+xboxes
 xc
 xcorr
 xdata
@@ -1188,9 +1202,11 @@
 xu
 xwd
 xy
+xyboxes
 xyerrorbar
 xyerrorbars
 xyz
+yboxes
 yc
 ydata
 yerrorbar
--- a/doc/interpreter/external.txi	Sun May 11 02:28:33 2014 +0200
+++ b/doc/interpreter/external.txi	Sat Jun 14 13:24:46 2014 -0700
@@ -589,7 +589,7 @@
 @subsubsection Array and Sparse Class Differences
 
 The number of elements in a sparse matrix is considered to be the number
-of non-zero elements rather than the product of the dimensions.  Therefore
+of nonzero elements rather than the product of the dimensions.  Therefore
 
 @example
 @group
@@ -600,13 +600,13 @@
 @end example
 
 @noindent
-returns the number of non-zero elements.  If the user really requires the
-number of elements in the matrix, including the non-zero elements, they
+returns the number of nonzero elements.  If the user really requires the
+number of elements in the matrix, including the nonzero elements, they
 should use @code{numel} rather than @code{nelem}.  Note that for very
 large matrices, where the product of the two dimensions is larger than
 the representation of an unsigned int, then @code{numel} can overflow.
 An example is @code{speye (1e6)} which will create a matrix with a million
-rows and columns, but only a million non-zero elements.  Therefore the
+rows and columns, but only a million nonzero elements.  Therefore the
 number of rows by the number of columns in this case is more than two
 hundred times the maximum value that can be represented by an unsigned int.
 The use of @code{numel} should therefore be avoided useless it is known
@@ -682,10 +682,10 @@
 ColumnVector cidx (nz);
 ColumnVector data (nz);
 
-ridx(0) = 0; cidx(0) = 0; data(0) = 1; 
-ridx(1) = 0; cidx(1) = 1; data(1) = 2; 
-ridx(2) = 1; cidx(2) = 3; data(2) = 3; 
-ridx(3) = 2; cidx(3) = 3; data(3) = 4;
+ridx(0) = 1; cidx(0) = 1; data(0) = 1;
+ridx(1) = 2; cidx(1) = 2; data(1) = 2;
+ridx(2) = 2; cidx(2) = 4; data(2) = 3;
+ridx(3) = 3; cidx(3) = 4; data(3) = 4;
 SparseMatrix sm (data, ridx, cidx, nr, nc);
 @end group
 @end example
@@ -707,7 +707,7 @@
 technique for creating a sparse matrix.
 
 The alternative is to first create a sparse matrix with the desired
-number of non-zero elements and then later fill those elements in.
+number of nonzero elements and then later fill those elements in.
 Sample code:
 
 @example
@@ -748,7 +748,7 @@
 @var{nz} greater than 4 is also valid.  The disadvantage is that the matrix
 occupies more memory than strictly needed.
 
-It is not always possible to know the number of non-zero elements prior
+It is not always possible to know the number of nonzero elements prior
 to filling a matrix.  For this reason the additional unused storage of 
 a sparse matrix can be removed after its creation with the
 @code{maybe_compress} function.  In addition, @code{maybe_compress} can
@@ -807,7 +807,7 @@
       @}
     sm.cidx(j+1) = ii;
  @}
-sm.maybe_compress ();  // If don't know a-priori the final # of nz.
+sm.maybe_compress ();  // If don't know a priori the final # of nz.
 @end example
 
 @noindent
@@ -847,10 +847,10 @@
       @}
     sm.cidx(j+1) = ii;
  @}
-sm.maybe_mutate ();  // If don't know a-priori the final # of nz.
+sm.maybe_mutate ();  // If don't know a priori the final # of nz.
 @end example
 
-Note that both increasing and decreasing the number of non-zero elements in
+Note that both increasing and decreasing the number of nonzero elements in
 a sparse matrix is expensive as it involves memory reallocation.  Also as
 parts of the matrix, though not its entirety, exist as old and new copies
 at the same time, additional memory is needed.  Therefore, if possible this
@@ -1607,6 +1607,7 @@
 An example of the behavior of this function within Octave is then
 
 @example
+@group
 a(1).f1 = "f11"; a(1).f2 = "f12"; 
 a(2).f1 = "f21"; a(2).f2 = "f22";
 b = mystruct (a);
@@ -1625,6 +1626,7 @@
 
      this = this3
      that = that3
+@end group
 @end example
 
 @node Sparse Matrices with Mex-Files
@@ -1653,11 +1655,11 @@
 
 @noindent
 @code{mxGetNzmax} gets the maximum number of elements that can be stored
-in the sparse matrix.  This is not necessarily the number of non-zero
+in the sparse matrix.  This is not necessarily the number of nonzero
 elements in the sparse matrix.  @code{mxGetJc} returns an array with one
 additional value than the number of columns in the sparse matrix.  The
 difference between consecutive values of the array returned by
-@code{mxGetJc} define the number of non-zero elements in each column of
+@code{mxGetJc} define the number of nonzero elements in each column of
 the sparse matrix.  Therefore,
 
 @example
@@ -1673,10 +1675,10 @@
 @end example
 
 @noindent
-returns the actual number of non-zero elements stored in the matrix in
+returns the actual number of nonzero elements stored in the matrix in
 @code{nz}.  As the arrays returned by @code{mxGetPr} and @code{mxGetPi}
-only contain the non-zero values of the matrix, we also need a pointer
-to the rows of the non-zero elements, and this is given by
+only contain the nonzero values of the matrix, we also need a pointer
+to the rows of the nonzero elements, and this is given by
 @code{mxGetIr}.  A complete example of the use of sparse matrices in
 mex-files is given by the file @file{mysparse.c} shown below.
 
@@ -1692,7 +1694,7 @@
 mysparse (sm)
 @result{}
 Matrix is 2-by-2 real sparse matrix with 2 elements
-last non-zero element (2, 2) = 3.14159
+last nonzero element (2, 2) = 3.14159
 @end group
 @end example
 
@@ -1790,8 +1792,8 @@
 This feature should be used with care as the list of built-in functions can
 change.  No guarantees can be made that a function that is currently built in
 won't be implemented as a .m file or as a dynamically linked function in the
-future.  An example of how to call built-in functions from C++ can be seen in the
-code
+future.  An example of how to call built-in functions from C++ can be seen in
+the code
 
 @example
 @EXAMPLEFILE(standalonebuiltin.cc)
--- a/doc/interpreter/install.txi	Sun May 11 02:28:33 2014 +0200
+++ b/doc/interpreter/install.txi	Sat Jun 14 13:24:46 2014 -0700
@@ -734,6 +734,7 @@
 Suggestions on how to compile ATLAS would be most welcome.
 
 @item @sc{glpk}
+
 @item Qhull (@url{http://www.qhull.org})
 
 Both @sc{glpk} and Qhull use @code{int} internally so maximum problem
@@ -1026,3 +1027,4 @@
 @env{FFLAGS} is set to @qcode{"-O"}.
 
 @end itemize
+
--- a/doc/interpreter/interp.txi	Sun May 11 02:28:33 2014 +0200
+++ b/doc/interpreter/interp.txi	Sat Jun 14 13:24:46 2014 -0700
@@ -88,9 +88,9 @@
 
 @DOCSTRING(interpft)
 
-There are two significant limitations on Fourier interpolation.  Firstly,
+There are two significant limitations on Fourier interpolation.  First,
 the function signal is assumed to be periodic, and so non-periodic
-signals will be poorly represented at the edges.  Secondly, both the
+signals will be poorly represented at the edges.  Second, both the
 signal and its interpolation are required to be sampled at equispaced
 points.  An example of the use of @code{interpft} is
 
--- a/doc/interpreter/linalg.txi	Sun May 11 02:28:33 2014 +0200
+++ b/doc/interpreter/linalg.txi	Sat Jun 14 13:24:46 2014 -0700
@@ -27,12 +27,12 @@
 @cite{@sc{lapack} Users' Guide} is available at:
 @cite{http://www.netlib.org/lapack/lug/}
 
-A common text for engineering courses is G. Strang, @cite{Linear Algebra
-and Its Applications, 4th Edition}. It has become a widespread reference
-for linear algebra. An alternative is P. Lax @cite{Linear Algebra and
-Its Applications}, and also is a good choice. It claims to be suitable
-for high school students with substantial mathematical interests as well
-as first-year undergraduates.
+A common text for engineering courses is @nospell{G. Strang},
+@cite{Linear Algebra and Its Applications, 4th Edition}. It has become a
+widespread reference for linear algebra. An alternative is P. Lax
+@cite{Linear Algebra and Its Applications}, and also is a good choice.  It
+claims to be suitable for high school students with substantial mathematical
+interests as well as first-year undergraduates.
 
 @menu
 * Techniques Used for Linear Algebra::
@@ -49,7 +49,7 @@
 Octave includes a polymorphic solver that selects an appropriate matrix
 factorization depending on the properties of the matrix itself.
 Generally, the cost of determining the matrix type is small relative to
-the cost of factorizing the matrix itself. In any case the matrix type
+the cost of factorizing the matrix itself.  In any case the matrix type
 is cached once it is calculated so that it is not re-determined each
 time it is used in a linear equation.
 
@@ -212,3 +212,4 @@
 @DOCSTRING(cgs)
 
 @DOCSTRING(gmres)
+
--- a/doc/interpreter/sparse.txi	Sun May 11 02:28:33 2014 +0200
+++ b/doc/interpreter/sparse.txi	Sat Jun 14 13:24:46 2014 -0700
@@ -44,13 +44,13 @@
 There are many classes of mathematical problems which give rise to
 matrices, where a large number of the elements are zero.  In this case
 it makes sense to have a special matrix type to handle this class of
-problems where only the non-zero elements of the matrix are
+problems where only the nonzero elements of the matrix are
 stored.  Not only does this reduce the amount of memory to store the
 matrix, but it also means that operations on this type of matrix can
-take advantage of the a-priori knowledge of the positions of the
-non-zero elements to accelerate their calculations.
+take advantage of the a priori knowledge of the positions of the
+nonzero elements to accelerate their calculations.
 
-A matrix type that stores only the non-zero elements is generally called
+A matrix type that stores only the nonzero elements is generally called
 sparse.  It is the purpose of this document to discuss the basics of the
 storage and creation of sparse matrices and the fundamental operations
 on them.
@@ -73,7 +73,7 @@
 
 There are many different means of storing sparse matrix data.  What all
 of the methods have in common is that they attempt to reduce the complexity
-and storage given a-priori knowledge of the particular class of problems
+and storage given a priori knowledge of the particular class of problems
 that will be solved.  A good summary of the available techniques for storing
 sparse matrix is given by Saad @footnote{Y. Saad "SPARSKIT: A basic toolkit
 for sparse matrix computation", 1994,
@@ -81,7 +81,7 @@
 With full matrices, knowledge of the point of an element of the matrix
 within the matrix is implied by its position in the computers memory. 
 However, this is not the case for sparse matrices, and so the positions
-of the non-zero elements of the matrix must equally be stored. 
+of the nonzero elements of the matrix must equally be stored. 
 
 An obvious way to do this is by storing the elements of the matrix as
 triplets, with two elements being their position in the array 
@@ -94,9 +94,9 @@
 In this format the position of each element in a row and the data are
 stored as previously.  However, if we assume that all elements in the
 same column are stored adjacent in the computers memory, then we only
-need to store information on the number of non-zero elements in each
+need to store information on the number of nonzero elements in each
 column, rather than their positions.  Thus assuming that the matrix has
-more non-zero elements than there are columns in the matrix, we win in
+more nonzero elements than there are columns in the matrix, we win in
 terms of the amount of memory used.
 
 In fact, the column index contains one more element than the number of
@@ -109,7 +109,7 @@
 @group
   for (j = 0; j < nc; j++)
     for (i = cidx(j); i < cidx(j+1); i++)
-       printf ("non-zero element (%i,%i) is %d\n", 
+       printf ("nonzero element (%i,%i) is %d\n", 
            ridx(i), j, data(i));
 @end group
 @end example
@@ -125,7 +125,7 @@
 @end group
 @end example
 
-The non-zero elements of this matrix are
+The nonzero elements of this matrix are
 
 @example
 @group
@@ -319,7 +319,7 @@
 in fact a sparse matrix.
 
 Another very basic function is @dfn{nnz} that returns the number of
-non-zero entries there are in a sparse matrix, while the function
+nonzero entries there are in a sparse matrix, while the function
 @dfn{nzmax} returns the amount of storage allocated to the sparse
 matrix.  Note that Octave tends to crop unused memory at the first
 opportunity for sparse objects.  There are some cases of user created
@@ -376,7 +376,7 @@
 
 There are several graphical means of finding out information about
 sparse matrices.  The first is the @dfn{spy} command, which displays
-the structure of the non-zero elements of the
+the structure of the nonzero elements of the
 matrix.  @xref{fig:spmatrix}, for an example of the use of
 @dfn{spy}.  More advanced graphical information can be obtained with the
 @dfn{treeplot}, @dfn{etreeplot} and @dfn{gplot} commands.
@@ -390,7 +390,7 @@
 interconnections between nodes are represented as an adjacency
 matrix.  That is, if the i-th node in a graph is connected to the j-th
 node.  Then the ij-th node (and in the case of undirected graphs the
-@nospell{ji-th} node) of the sparse adjacency matrix is non-zero.  If each node
+@nospell{ji-th} node) of the sparse adjacency matrix is nonzero.  If each node
 is then associated with a set of coordinates, then the @dfn{gplot}
 command can be used to graphically display the interconnections
 between nodes.
@@ -509,9 +509,9 @@
 The two basic reasons to use sparse matrices are to reduce the memory 
 usage and to not have to do calculations on zero elements.  The two are
 closely related in that the computation time on a sparse matrix operator
-or function is roughly linear with the number of non-zero elements.
+or function is roughly linear with the number of nonzero elements.
 
-Therefore, there is a certain density of non-zero elements of a matrix 
+Therefore, there is a certain density of nonzero elements of a matrix 
 where it no longer makes sense to store it as a sparse matrix, but rather
 as a full matrix.  For this reason operators and functions that have a 
 high probability of returning a full matrix will always return one.  For
@@ -573,7 +573,7 @@
 same manner as there full counterparts.  However, there are certain differences
 and especially differences with other products sparse implementations.
 
-Firstly, the @qcode{"./"} and @qcode{".^"} operators must be used with care. 
+First, the @qcode{"./"} and @qcode{".^"} operators must be used with care. 
 Consider what the examples
 
 @example
@@ -630,7 +630,7 @@
 of zero is important must not be done using sparse matrices.
 
 In general any function or operator used on a sparse matrix will
-result in a sparse matrix with the same or a larger number of non-zero
+result in a sparse matrix with the same or a larger number of nonzero
 elements than the original matrix.  This is particularly true for the
 important case of sparse matrix factorizations.  The usual way to
 address this is to reorder the matrix, such that its factorization is
@@ -667,7 +667,7 @@
 @ifset htmltex
 598
 @end ifset
-non-zero terms, while this Cholesky@tie{}factorization has
+nonzero terms, while this Cholesky@tie{}factorization has
 @ifinfo
 @ifnothtml
 71,
@@ -693,7 +693,7 @@
 @ifset htmltex
 399
 @end ifset
-non-zero terms which is a significant improvement.
+nonzero terms which is a significant improvement.
 
 The Cholesky@tie{}factorization itself can be used to determine the
 appropriate sparsity preserving reordering of the matrix during the
@@ -798,7 +798,7 @@
 @url{http://www.cise.ufl.edu/research/sparse/}}.
 @end enumerate
 
-The band density is defined as the number of non-zero values in the band
+The band density is defined as the number of nonzero values in the band
 divided by the total number of values in the full band.  The banded
 matrix solvers can be entirely disabled by using @dfn{spparms} to set
 @code{bandden} to 1 (i.e., @code{spparms ("bandden", 1)}).
--- a/doc/interpreter/stmt.txi	Sun May 11 02:28:33 2014 +0200
+++ b/doc/interpreter/stmt.txi	Sat Jun 14 13:24:46 2014 -0700
@@ -83,10 +83,10 @@
 @var{condition} is true.
 
 The condition in an @code{if} statement is considered true if its value
-is non-zero, and false if its value is zero.  If the value of the
+is nonzero, and false if its value is zero.  If the value of the
 conditional expression in an @code{if} statement is a vector or a
 matrix, it is considered true only if it is non-empty and @emph{all}
-of the elements are non-zero.
+of the elements are nonzero.
 
 The second form of an if statement looks like this:
 
@@ -398,10 +398,10 @@
 The @code{while} statement is the simplest looping statement in Octave.
 It repeatedly executes a statement as long as a condition is true.  As
 with the condition in an @code{if} statement, the condition in a
-@code{while} statement is considered true if its value is non-zero, and
+@code{while} statement is considered true if its value is nonzero, and
 false if its value is zero.  If the value of the conditional expression
 in a @code{while} statement is a vector or a matrix, it is considered
-true only if it is non-empty and @emph{all} of the elements are non-zero.
+true only if it is non-empty and @emph{all} of the elements are nonzero.
 
 Octave's @code{while} statement looks like this:
 
@@ -463,10 +463,10 @@
 true, and the test of the condition is at the end of the loop, so the
 body of the loop is always executed at least once.  As with the
 condition in an @code{if} statement, the condition in a @code{do-until}
-statement is considered true if its value is non-zero, and false if its
+statement is considered true if its value is nonzero, and false if its
 value is zero.  If the value of the conditional expression in a
 @code{do-until} statement is a vector or a matrix, it is considered 
-true only if it is non-empty and @emph{all} of the elements are non-zero.
+true only if it is non-empty and @emph{all} of the elements are nonzero.
 
 Octave's @code{do-until} statement looks like this:
 
--- a/doc/interpreter/testfun.txi	Sun May 11 02:28:33 2014 +0200
+++ b/doc/interpreter/testfun.txi	Sat Jun 14 13:24:46 2014 -0700
@@ -297,14 +297,14 @@
 @group
 function output = must_be_zero (@var{input})
   if (@var{input} != 0)
-    error ("Non-zero input!")
+    error ("Nonzero input!")
   endif
   output = input;
 endfunction
 
 %!fail ("must_be_zero (1)");
 %!assert (must_be_zero (0), 0);
-%!error <Non-zero> must_be_zero (1);
+%!error <Nonzero> must_be_zero (1);
 %!xtest error ("This code generates an error");
 @end group
 @end example
@@ -320,7 +320,7 @@
 >>>>> /path/to/must_be_zero.m
   ***** fail ("must_be_zero (1)");
   ***** assert (must_be_zero (0), 0);
-  ***** error <Non-zero> must_be_zero (1);
+  ***** error <Nonzero> must_be_zero (1);
   ***** xtest error ("This code generates an error");
 !!!!! known failure
 This code generates an error
--- a/doc/interpreter/vectorize.txi	Sun May 11 02:28:33 2014 +0200
+++ b/doc/interpreter/vectorize.txi	Sat Jun 14 13:24:46 2014 -0700
@@ -713,3 +713,4 @@
 a column vector.  This is a common vectorization trick.
 
 @end itemize
+
--- a/doc/refcard/refcard.tex	Sun May 11 02:28:33 2014 +0200
+++ b/doc/refcard/refcard.tex	Sat Jun 14 13:24:46 2014 -0700
@@ -536,7 +536,7 @@
 speye ({\it n)}&create sparse identity matrix.\cr
 sprand ({\it n}, {\it m}, {\it d})&sparse rand matrix of density {\it d}.\cr
 spdiags (...)&sparse generalization of {\it diag}.\cr
-nnz ({\it s})&No. non-zero elements in sparse matrix.\cr
+nnz ({\it s})&No. nonzero elements in sparse matrix.\cr
 \endsec
 
 \sec Ranges;
--- a/examples/mysparse.c	Sun May 11 02:28:33 2014 +0200
+++ b/examples/mysparse.c	Sat Jun 14 13:24:46 2014 -0700
@@ -32,7 +32,7 @@
       i = n;
       while (jc[i] == jc[i-1] && i != 0) i--;
 
-      mexPrintf ("last non-zero element (%d, %d) = (%g, %g)\n",
+      mexPrintf ("last nonzero element (%d, %d) = (%g, %g)\n",
                  ir[nz-1]+ 1, i, pr[nz-1], pi[nz-1]);
 
       v = mxCreateSparse (m, n, nz, mxCOMPLEX);
@@ -65,7 +65,7 @@
 
       i = n;
       while (jc[i] == jc[i-1] && i != 0) i--;
-      mexPrintf ("last non-zero element (%d, %d) = %d\n",
+      mexPrintf ("last nonzero element (%d, %d) = %d\n",
                  ir[nz-1]+ 1, i, pbr[nz-1]);
 
       v = mxCreateSparseLogicalMatrix (m, n, nz);
@@ -95,7 +95,7 @@
 
       i = n;
       while (jc[i] == jc[i-1] && i != 0) i--;
-      mexPrintf ("last non-zero element (%d, %d) = %g\n",
+      mexPrintf ("last nonzero element (%d, %d) = %g\n",
                  ir[nz-1]+ 1, i, pr[nz-1]);
 
       v = mxCreateSparse (m, n, nz, mxREAL);
--- a/libinterp/corefcn/balance.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/balance.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -68,7 +68,7 @@
 \n\
 If four output values are requested, compute @code{@var{AA} =\n\
 @var{CC}*@var{A}*@var{DD}} and @code{@var{BB} = @var{CC}*@var{B}*@var{DD}},\n\
-in which @var{AA} and @var{BB} have non-zero elements of approximately the\n\
+in which @var{AA} and @var{BB} have nonzero elements of approximately the\n\
 same magnitude and @var{CC} and @var{DD} are permuted diagonal matrices as\n\
 in @var{DD} for the algebraic eigenvalue problem.\n\
 \n\
--- a/libinterp/corefcn/cellfun.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/cellfun.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -319,9 +319,9 @@
 \n\
 Additionally, @code{cellfun} accepts an arbitrary function @var{func}\n\
 in the form of an inline function, function handle, or the name of a\n\
-function (in a character string). The function can take one or more arguments,\n\
-with the inputs arguments given by @var{C}, @var{D}, etc.  Equally the\n\
-function can return one or more output arguments.  For example:\n\
+function (in a character string).  The function can take one or more\n\
+arguments, with the inputs arguments given by @var{C}, @var{D}, etc.  \n\
+Equally the function can return one or more output arguments.  For example:\n\
 \n\
 @example\n\
 @group\n\
--- a/libinterp/corefcn/data.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/data.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -1462,10 +1462,10 @@
 \n\
 If @var{dim} is omitted, it defaults to the first non-singleton dimension.\n\
 \n\
-The optional @qcode{\"type\"} input determines the class of the variable used for\n\
-calculations.  If the argument @qcode{\"native\"} is given, then the operation is\n\
-performed in the same type as the original argument, rather than the default double\n\
-type.\n\
+The optional @qcode{\"type\"} input determines the class of the variable\n\
+used for calculations.  If the argument @qcode{\"native\"} is given, then\n\
+the operation is performed in the same type as the original argument, rather\n\
+than the default double type.\n\
 \n\
 For example:\n\
 \n\
@@ -1478,8 +1478,8 @@
 @end group\n\
 @end example\n\
 \n\
-On the contrary, if @qcode{\"double\"} is given, the operation is performed in\n\
-double precision even for single precision inputs.\n\
+On the contrary, if @qcode{\"double\"} is given, the operation is performed\n\
+in double precision even for single precision inputs.\n\
 @seealso{cumprod, sum}\n\
 @end deftypefn")
 {
@@ -2839,9 +2839,9 @@
 
 DEFUN (nnz, args, ,
        "-*- texinfo -*-\n\
-@deftypefn {Built-in Function} {@var{scalar} =} nnz (@var{a})\n\
-Return the number of non zero elements in @var{a}.\n\
-@seealso{sparse, nzmax}\n\
+@deftypefn {Built-in Function} {@var{n} =} nnz (@var{a})\n\
+Return the number of nonzero elements in @var{a}.\n\
+@seealso{nzmax, nonzeros, find}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -2856,12 +2856,12 @@
 
 DEFUN (nzmax, args, ,
        "-*- texinfo -*-\n\
-@deftypefn {Built-in Function} {@var{scalar} =} nzmax (@var{SM})\n\
+@deftypefn {Built-in Function} {@var{n} =} nzmax (@var{SM})\n\
 Return the amount of storage allocated to the sparse matrix @var{SM}.\n\
+\n\
 Note that Octave tends to crop unused memory at the first opportunity\n\
-for sparse objects.  There are some cases of user created sparse objects\n\
-where the value returned by @dfn{nzmax} will not be the same as @dfn{nnz},\n\
-but in general they will give the same result.\n\
+for sparse objects.  Thus, in general the value of @code{nzmax} will be the\n\
+the same as @code{nnz} except for some cases of user-created sparse objects.\n\
 @seealso{nnz, spalloc, sparse}\n\
 @end deftypefn")
 {
@@ -2920,10 +2920,10 @@
 \n\
 If @var{dim} is omitted, it defaults to the first non-singleton dimension.\n\
 \n\
-The optional @qcode{\"type\"} input determines the class of the variable used for\n\
-calculations.  If the argument @qcode{\"native\"} is given, then the operation is\n\
-performed in the same type as the original argument, rather than the default double\n\
-type.\n\
+The optional @qcode{\"type\"} input determines the class of the variable\n\
+used for calculations.  If the argument @qcode{\"native\"} is given, then\n\
+the operation is performed in the same type as the original argument, rather\n\
+than the default double type.\n\
 \n\
 For example:\n\
 \n\
@@ -2939,10 +2939,10 @@
 On the contrary, if @qcode{\"double\"} is given, the sum is performed in\n\
 double precision even for single precision inputs.\n\
 \n\
-For double precision inputs, the @qcode{\"extra\"} option will use a more accurate\n\
-algorithm than straightforward summation.  For single precision inputs,\n\
-@qcode{\"extra\"} is the same as @qcode{\"double\"}.  Otherwise, @qcode{\"extra\"}\n\
-has no effect.\n\
+For double precision inputs, the @qcode{\"extra\"} option will use a more\n\
+accurate algorithm than straightforward summation.  For single precision\n\
+inputs, @qcode{\"extra\"} is the same as @qcode{\"double\"}.  Otherwise,\n\
+@qcode{\"extra\"} has no effect.\n\
 @seealso{cumsum, sumsq, prod}\n\
 @end deftypefn")
 {
@@ -3650,6 +3650,164 @@
 %!assert (isnumeric (sparse ([true, false])), false)
 */
 
+DEFUN (isscalar, args, ,
+  "-*- texinfo -*-\n\
+@deftypefn {Built-in Function} {} isscalar (@var{x})\n\
+Return true if @var{x} is a scalar.\n\
+@seealso{isvector, ismatrix}\n\
+@end deftypefn")
+{
+  octave_value retval;
+
+  if (args.length () == 1)
+    retval = args(0).numel () == 1;
+  else
+    print_usage ();
+
+  return retval;
+}
+
+/*
+%!assert (isscalar (1))
+%!assert (isscalar ([1, 2]), false)
+%!assert (isscalar ([]), false)
+%!assert (isscalar ([1, 2; 3, 4]), false)
+
+%!assert (isscalar ("t"))
+%!assert (isscalar ("test"), false)
+%!assert (isscalar (["test"; "ing"]), false)
+
+%!test
+%! s.a = 1;
+%! assert (isscalar (s));
+
+%% Test input validation
+%!error isscalar ()
+%!error isscalar (1, 2)
+*/
+
+DEFUN (isvector, args, ,
+  "-*- texinfo -*-\n\
+@deftypefn {Function File} {} isvector (@var{x})\n\
+Return true if @var{x} is a vector.\n\
+\n\
+A vector is a 2-D array where one of the dimensions is equal to 1.  As a\n\
+consequence a 1x1 array, or scalar, is also a vector.\n\
+@seealso{isscalar, ismatrix, size, rows, columns, length}\n\
+@end deftypefn")
+{
+  octave_value retval;
+
+  if (args.length () == 1)
+    {
+      dim_vector sz = args(0).dims ();
+      retval = sz.length () == 2 && (sz(0) == 1 || sz(1) == 1);
+    }
+  else
+    print_usage ();
+
+  return retval;
+}
+
+/*
+%!assert (isvector (1))
+%!assert (isvector ([1; 2; 3]))
+%!assert (isvector ([]), false)
+%!assert (isvector ([1, 2; 3, 4]), false)
+
+%!assert (isvector ("t"))
+%!assert (isvector ("test"))
+%!assert (isvector (["test"; "ing"]), false)
+
+%!test
+%! s.a = 1;
+%! assert (isvector (s));
+
+%% Test input validation
+%!error isvector ()
+%!error isvector ([1, 2], 2)
+*/
+
+DEFUN (isrow, args, ,
+  "-*- texinfo -*-\n\
+@deftypefn {Function File} {} isrow (@var{x})\n\
+Return true if @var{x} is a row vector.\n\
+@seealso{iscolumn, isscalar, isvector, ismatrix}\n\
+@end deftypefn")
+{
+  octave_value retval;
+
+  if (args.length () == 1)
+    {
+      dim_vector sz = args(0).dims ();
+      retval = sz.length () == 2 && sz(0) == 1;
+    }
+  else
+    print_usage ();
+
+  return retval;
+}
+
+/*
+%!assert (isrow ([1, 2, 3]))
+%!assert (isrow ([1; 2; 3]), false)
+%!assert (isrow (1))
+%!assert (isrow ([]), false)
+%!assert (isrow ([1, 2; 3, 4]), false)
+
+%!assert (isrow ("t"))
+%!assert (isrow ("test"))
+%!assert (isrow (["test"; "ing"]), false)
+
+%!test
+%! s.a = 1;
+%! assert (isrow (s));
+
+%% Test input validation
+%!error isrow ()
+%!error isrow ([1, 2], 2)
+*/
+
+DEFUN (iscolumn, args, ,
+  "-*- texinfo -*-\n\
+@deftypefn {Function File} {} iscolumn (@var{x})\n\
+Return true if @var{x} is a column vector.\n\
+@seealso{isrow, isscalar, isvector, ismatrix}\n\
+@end deftypefn")
+{
+  octave_value retval;
+
+  if (args.length () == 1)
+    {
+      dim_vector sz = args(0).dims ();
+      retval = sz.length () == 2 && sz(1) == 1;
+    }
+  else
+    print_usage ();
+
+  return retval;
+}
+
+/*
+%!assert (iscolumn ([1, 2, 3]), false)
+%!assert (iscolumn ([1; 2; 3]))
+%!assert (iscolumn (1))
+%!assert (iscolumn ([]), false)
+%!assert (iscolumn ([1, 2; 3, 4]), false)
+
+%!assert (iscolumn ("t"))
+%!assert (iscolumn ("test"), false)
+%!assert (iscolumn (["test"; "ing"]), false)
+
+%!test
+%! s.a = 1;
+%! assert (iscolumn (s));
+
+%% Test input validation
+%!error iscolumn ()
+%!error iscolumn ([1, 2], 2)
+*/
+
 DEFUN (ismatrix, args, ,
        "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} ismatrix (@var{a})\n\
@@ -3700,6 +3858,47 @@
 %!error ismatrix ([1, 2; 3, 4], 2)
 */
 
+DEFUN (issquare, args, ,
+  "-*- texinfo -*-\n\
+@deftypefn {Function File} {} issquare (@var{x})\n\
+Return true if @var{x} is a square matrix.\n\
+@seealso{isscalar, isvector, ismatrix, size}\n\
+@end deftypefn")
+{
+  octave_value retval;
+
+  if (args.length () == 1)
+    {
+      dim_vector sz = args(0).dims ();
+      retval = sz.length () == 2 && sz(0) == sz(1);
+    }
+  else
+    print_usage ();
+
+  return retval;
+}
+
+/*
+%!assert (issquare ([]))
+%!assert (issquare (1))
+%!assert (! issquare ([1, 2]))
+%!assert (issquare ([1, 2; 3, 4]))
+%!assert (! issquare ([1, 2; 3, 4; 5, 6]))
+%!assert (! issquare (ones (3,3,3)))
+%!assert (issquare ("t"))
+%!assert (! issquare ("test"))
+%!assert (issquare (["test"; "ing"; "1"; "2"]))
+%!test
+%! s.a = 1;
+%! assert (issquare (s));
+%!assert (issquare ({1, 2; 3, 4}))
+%!assert (sparse (([1, 2; 3, 4])))
+
+%% Test input validation
+%!error issquare ()
+%!error issquare ([1, 2; 3, 4], 2)
+*/
+
 static octave_value
 fill_matrix (const octave_value_list& args, int val, const char *fcn)
 {
@@ -5393,9 +5592,9 @@
 DEFUN (full, args, ,
        "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {@var{FM} =} full (@var{SM})\n\
-Return a full storage matrix from a sparse, diagonal, permutation matrix\n\
+Return a full storage matrix from a sparse, diagonal, permutation matrix,\n\
 or a range.\n\
-@seealso{sparse}\n\
+@seealso{sparse, issparse}\n\
 @end deftypefn")
 {
   octave_value retval;
--- a/libinterp/corefcn/filter.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/filter.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -77,7 +77,7 @@
 
   if (norm == static_cast<T>(0.0))
     {
-      error ("filter: the first element of A must be non-zero");
+      error ("filter: the first element of A must be nonzero");
       return y;
     }
 
--- a/libinterp/corefcn/find.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/find.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -394,7 +394,7 @@
 ascending order.\n\
 \n\
 Note that this function is particularly useful for sparse matrices, as\n\
-it extracts the non-zero elements as vectors, which can then be used to\n\
+it extracts the nonzero elements as vectors, which can then be used to\n\
 create the original matrix.  For example:\n\
 \n\
 @example\n\
--- a/libinterp/corefcn/gl-render.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/gl-render.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -2215,7 +2215,6 @@
   Matrix a;
 
   int nv = v.rows ();
-  // int vmax = v.columns ();
   int nf = f.rows ();
   int fcmax = f.columns ();
 
@@ -2477,10 +2476,14 @@
             {
               if (clip_f(i))
                 {
-                  // This is an unclosed contour. Draw it as a line.
+                  // This is an unclosed contour.  Draw it as a line.
                   bool flag = false;
 
-                  for (int j = 0; j < count_f(i); j++)
+                  glShadeModel ((ec_mode == INTERP || el_mode == GOURAUD)
+                                ? GL_SMOOTH : GL_FLAT);
+
+                  // Add vertices in reverse order for Matlab compatibility
+                  for (int j = count_f(i)-1; j >= 0; j--)
                     {
                       if (! clip(int (f(i,j) - 1)))
                         {
@@ -2492,6 +2495,13 @@
                               flag = true;
                               glBegin (GL_LINE_STRIP);
                             }
+                          if (ec_mode != UNIFORM)
+                            {
+                              Matrix col = vv->color;
+
+                              if (col.numel () == 3)
+                                glColor3dv (col.data ());
+                            }
                           glVertex3d (m(0), m(1), m(2));
                         }
                       else if (flag)
@@ -2500,11 +2510,28 @@
                           glEnd ();
                         }
                     }
+                  // Do loop body with vertex N to "close" GL_LINE_STRIP
+                  // from vertex 0 to vertex N.
+                  int j = count_f(i)-1;
+                  if (flag && ! clip(int (f(i,j) - 1)))
+                    {
+                      vertex_data::vertex_data_rep *vv
+                        = vdata[i+j*fr].get_rep ();
+                      const Matrix m = vv->coords;
+                      if (ec_mode != UNIFORM)
+                        {
+                          Matrix col = vv->color;
+
+                          if (col.numel () == 3)
+                            glColor3dv (col.data ());
+                        }
+                      glVertex3d (m(0), m(1), m(2));
+                    }
 
                   if (flag)
                     glEnd ();
                 }
-              else
+              else  // Normal edge contour drawn with tesselator
                 {
                   tess.begin_polygon (false);
                   tess.begin_contour ();
--- a/libinterp/corefcn/input.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/input.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -1007,7 +1007,7 @@
 
 DEFUN (__echostate__, , ,
        "-*- texinfo -*-\n\
-@deftypefn  {Built-in Function} {@var{state} =} __echostate__ ()\n\
+@deftypefn {Built-in Function} {@var{state} =} __echostate__ ()\n\
 Undocumented internal function\n\
 @end deftypefn")
 {
--- a/libinterp/corefcn/kron.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/kron.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -203,7 +203,7 @@
           // the diagonals as vectors and compute the product.  That
           // will be another vector, which we then use to construct a
           // diagonal matrix object.  Note that this will fail if our
-          // digaonal matrix object is modified to allow the non-zero
+          // digaonal matrix object is modified to allow the nonzero
           // values to be stored off of the principal diagonal (i.e., if
           // diag ([1,2], 3) is modified to return a diagonal matrix
           // object instead of a full matrix object).
--- a/libinterp/corefcn/load-path.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/load-path.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -1267,8 +1267,12 @@
 
   octave_user_function *curr_fcn = symbol_table::get_curr_fcn ();
 
-  if (curr_fcn && ! curr_fcn->is_private_function ())
+  if (curr_fcn)
     {
+      // Even for private functions, dir_name doesn't contain the
+      // "private" directory component so we append it here in all
+      // cases.
+
       std::string dir_name = curr_fcn->dir_name ();
 
       if (! dir_name.empty ())
--- a/libinterp/corefcn/ls-mat5.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/ls-mat5.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -651,7 +651,7 @@
   arrayclass = static_cast<arrayclasstype> (flags & 0xff);
 
   int32_t tmp_nzmax;
-  read_int (is, swap, tmp_nzmax);   // max number of non-zero in sparse
+  read_int (is, swap, tmp_nzmax);   // max number of nonzero in sparse
   nzmax = tmp_nzmax;
 
   // dimensions array subelement
--- a/libinterp/corefcn/luinc.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/luinc.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -49,7 +49,7 @@
 \n\
 Called with a second argument of @qcode{'0'}, the zero-level incomplete\n\
 LU@tie{}factorization is produced.  This creates a factorization of @var{A}\n\
-where the position of the non-zero arguments correspond to the same\n\
+where the position of the nonzero arguments correspond to the same\n\
 positions as in the matrix @var{A}.\n\
 \n\
 Alternatively, the fill-in of the incomplete LU@tie{}factorization can\n\
--- a/libinterp/corefcn/mappers.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/mappers.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -1886,7 +1886,7 @@
 Return logical true if the value of @var{x} has its sign bit set.\n\
 Otherwise return logical false.  This behavior is consistent with the other\n\
 logical functions.  See@ref{Logical Values}.  The behavior differs from the\n\
-C language function which returns non-zero if the sign bit is set.\n\
+C language function which returns nonzero if the sign bit is set.\n\
 \n\
 This is not the same as @code{x < 0.0}, because IEEE 754 floating point\n\
 allows zero to be signed.  The comparison @code{-0.0 < 0.0} is false,\n\
--- a/libinterp/corefcn/oct-fstrm.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/oct-fstrm.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -77,7 +77,7 @@
   return -1;
 }
 
-// Return non-zero if EOF has been reached on this stream.
+// Return nonzero if EOF has been reached on this stream.
 
 bool
 octave_fstream::eof (void) const
--- a/libinterp/corefcn/oct-fstrm.h	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/oct-fstrm.h	Sat Jun 14 13:24:46 2014 -0700
@@ -52,7 +52,7 @@
 
   off_t tell (void);
 
-  // Return non-zero if EOF has been reached on this stream.
+  // Return nonzero if EOF has been reached on this stream.
 
   bool eof (void) const;
 
--- a/libinterp/corefcn/oct-iostrm.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/oct-iostrm.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -45,7 +45,7 @@
   return -1;
 }
 
-// Return non-zero if EOF has been reached on this stream.
+// Return nonzero if EOF has been reached on this stream.
 
 bool
 octave_base_iostream::eof (void) const
@@ -60,7 +60,7 @@
   ::error ("%s: invalid operation", stream_type ());
 }
 
-// Return non-zero if EOF has been reached on this stream.
+// Return nonzero if EOF has been reached on this stream.
 
 bool
 octave_istream::eof (void) const
@@ -74,7 +74,7 @@
   return octave_stream (new octave_istream (arg, n));
 }
 
-// Return non-zero if EOF has been reached on this stream.
+// Return nonzero if EOF has been reached on this stream.
 
 bool
 octave_ostream::eof (void) const
--- a/libinterp/corefcn/oct-iostrm.h	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/oct-iostrm.h	Sat Jun 14 13:24:46 2014 -0700
@@ -46,7 +46,7 @@
 
   off_t tell (void);
 
-  // Return non-zero if EOF has been reached on this stream.
+  // Return nonzero if EOF has been reached on this stream.
 
   bool eof (void) const;
 
@@ -87,7 +87,7 @@
   static octave_stream
   create (std::istream *arg = 0, const std::string& n = std::string ());
 
-  // Return non-zero if EOF has been reached on this stream.
+  // Return nonzero if EOF has been reached on this stream.
 
   bool eof (void) const;
 
@@ -126,7 +126,7 @@
   static octave_stream
   create (std::ostream *arg, const std::string& n = std::string ());
 
-  // Return non-zero if EOF has been reached on this stream.
+  // Return nonzero if EOF has been reached on this stream.
 
   bool eof (void) const;
 
--- a/libinterp/corefcn/oct-stdstrm.h	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/oct-stdstrm.h	Sat Jun 14 13:24:46 2014 -0700
@@ -50,7 +50,7 @@
 
   off_t tell (void) { return s ? s->tell () : -1; }
 
-  // Return non-zero if EOF has been reached on this stream.
+  // Return nonzero if EOF has been reached on this stream.
 
   bool eof (void) const { return s ? s->eof () : true; }
 
--- a/libinterp/corefcn/oct-strstrm.h	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/oct-strstrm.h	Sat Jun 14 13:24:46 2014 -0700
@@ -96,7 +96,7 @@
           oct_mach_info::float_format ff
             = oct_mach_info::native_float_format ());
 
-  // Return non-zero if EOF has been reached on this stream.
+  // Return nonzero if EOF has been reached on this stream.
 
   bool eof (void) const { return is.eof (); }
 
@@ -142,7 +142,7 @@
           oct_mach_info::float_format ff
             = oct_mach_info::native_float_format ());
 
-  // Return non-zero if EOF has been reached on this stream.
+  // Return nonzero if EOF has been reached on this stream.
 
   bool eof (void) const { return os.eof (); }
 
--- a/libinterp/corefcn/pager.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/pager.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -591,7 +591,7 @@
 
 DEFUN (__diaryfile__, , ,
        "-*- texinfo -*-\n\
-@deftypefn  {Built-in Function} {@var{fname} =} __diaryfile__ ()\n\
+@deftypefn {Built-in Function} {@var{fname} =} __diaryfile__ ()\n\
 Undocumented internal function\n\
 @end deftypefn")
 {
@@ -600,7 +600,7 @@
 
 DEFUN (__diarystate__, , ,
        "-*- texinfo -*-\n\
-@deftypefn  {Built-in Function} {@var{state} =} __diarystate__ ()\n\
+@deftypefn {Built-in Function} {@var{state} =} __diarystate__ ()\n\
 Undocumented internal function\n\
 @end deftypefn")
 {
--- a/libinterp/corefcn/pr-output.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/pr-output.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -4065,7 +4065,7 @@
 
 DEFUN (__formatstring__, , ,
        "-*- texinfo -*-\n\
-@deftypefn  {Built-in Function} {@var{val} =} __formatstring__ ()\n\
+@deftypefn {Built-in Function} {@var{val} =} __formatstring__ ()\n\
 Undocumented internal function\n\
 @end deftypefn")
 {
@@ -4101,7 +4101,7 @@
 \n\
 @noindent\n\
 Notice that the first value appears to be 0 when it is actually 1.  Because\n\
-of the possibilty for confusion you should be careful about enabling\n\
+of the possibility for confusion you should be careful about enabling\n\
 @code{fixed_point_format}.\n\
 \n\
 When called from inside a function with the @qcode{\"local\"} option, the\n\
--- a/libinterp/corefcn/sparse.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/sparse.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -60,47 +60,69 @@
 DEFUN (sparse, args, ,
        "-*- texinfo -*-\n\
 @deftypefn  {Built-in Function} {@var{s} =} sparse (@var{a})\n\
-@deftypefnx {Built-in Function} {@var{s} =} sparse (@var{i}, @var{j}, @var{sv}, @var{m}, @var{n}, @var{nzmax})\n\
+@deftypefnx {Built-in Function} {@var{s} =} sparse (@var{i}, @var{j}, @var{sv}, @var{m}, @var{n})\n\
 @deftypefnx {Built-in Function} {@var{s} =} sparse (@var{i}, @var{j}, @var{sv})\n\
+@deftypefnx {Built-in Function} {@var{s} =} sparse (@var{m}, @var{n})\n\
 @deftypefnx {Built-in Function} {@var{s} =} sparse (@var{i}, @var{j}, @var{s}, @var{m}, @var{n}, \"unique\")\n\
-@deftypefnx {Built-in Function} {@var{s} =} sparse (@var{m}, @var{n})\n\
-Create a sparse matrix from the full matrix or row, column, value triplets.\n\
+@deftypefnx {Built-in Function} {@var{s} =} sparse (@var{i}, @var{j}, @var{sv}, @var{m}, @var{n}, @var{nzmax})\n\
+Create a sparse matrix from a full matrix or row, column, value triplets.\n\
+\n\
 If @var{a} is a full matrix, convert it to a sparse matrix representation,\n\
 removing all zero values in the process.\n\
 \n\
-Given the integer index vectors @var{i} and @var{j}, a 1-by-@code{nnz} vector\n\
-of real of complex values @var{sv}, overall dimensions @var{m} and @var{n}\n\
-of the sparse matrix.  The argument @code{nzmax} is ignored but accepted for\n\
-compatibility with @sc{matlab}.  If @var{m} or @var{n} are not specified\n\
-their values are derived from the maximum index in the vectors @var{i} and\n\
-@var{j} as given by @code{@var{m} = max (@var{i})},\n\
-@code{@var{n} = max (@var{j})}.\n\
+Given the integer index vectors @var{i} and @var{j}, and a 1-by-@code{nnz}\n\
+vector of real or complex values @var{sv}, construct the sparse matrix\n\
+@code{S(@var{i}(@var{k}),@var{j}(@var{k})) = @var{sv}(@var{k})} with overall\n\
+dimensions @var{m} and @var{n}.  If any of @var{sv}, @var{i} or @var{j} are\n\
+scalars, they are expanded to have a common size.\n\
+\n\
+If @var{m} or @var{n} are not specified their values are derived from the\n\
+maximum index in the vectors @var{i} and @var{j} as given by\n\
+@code{@var{m} = max (@var{i})}, @code{@var{n} = max (@var{j})}.\n\
 \n\
-@strong{Note}: if multiple values are specified with the same\n\
-@var{i}, @var{j} indices, the corresponding values in @var{s} will\n\
-be added.  See @code{accumarray} for an example of how to produce different\n\
-behavior, such as taking the minimum instead.\n\
+@strong{Note}: if multiple values are specified with the same @var{i},\n\
+@var{j} indices, the corresponding value in @var{s} will be the sum of the\n\
+values at the repeated location.  See @code{accumarray} for an example of how\n\
+to produce different behavior, such as taking the minimum instead.\n\
 \n\
-The following are all equivalent:\n\
+If the option @qcode{\"unique\"} is given, and more than one value is\n\
+specified at the same @var{i}, @var{j} indices, then the last specified\n\
+value will be used.\n\
+\n\
+@code{sparse (@var{m}, @var{n})} will create an empty @var{m}x@var{n} sparse\n\
+matrix and is equivalent to @code{sparse ([], [], [], @var{m}, @var{n})}\n\
+\n\
+The argument @code{nzmax} is ignored but accepted for compatibility with\n\
+@sc{matlab}.\n\
+\n\
+Example 1 (sum at repeated indices):\n\
 \n\
 @example\n\
 @group\n\
-s = sparse (i, j, s, m, n)\n\
-s = sparse (i, j, s, m, n, \"summation\")\n\
-s = sparse (i, j, s, m, n, \"sum\")\n\
+@var{i} = [1 1 2]; @var{j} = [1 1 2]; @var{sv} = [3 4 5];\n\
+sparse (@var{i}, @var{j}, @var{sv}, 3, 4)\n\
+@result{} \n\
+Compressed Column Sparse (rows = 3, cols = 4, nnz = 2 [17%])\n\
+\n\
+  (1, 1) ->  7\n\
+  (2, 2) ->  5\n\
 @end group\n\
 @end example\n\
 \n\
-Given the option @qcode{\"unique\"}, if more than two values are specified\n\
-for the same @var{i}, @var{j} indices, the last specified value will be\n\
-used.\n\
+Example 2 (\"unique\" option):\n\
 \n\
-@code{sparse (@var{m}, @var{n})} is equivalent to\n\
-@code{sparse ([], [], [], @var{m}, @var{n}, 0)}\n\
+@example\n\
+@group\n\
+@var{i} = [1 1 2]; @var{j} = [1 1 2]; @var{sv} = [3 4 5];\n\
+sparse (@var{i}, @var{j}, @var{sv}, 3, 4, \"unique\")\n\
+@result{} \n\
+Compressed Column Sparse (rows = 3, cols = 4, nnz = 2 [17%])\n\
 \n\
-If any of @var{sv}, @var{i} or @var{j} are scalars, they are expanded\n\
-to have a common size.\n\
-@seealso{full, accumarray}\n\
+  (1, 1) ->  4\n\
+  (2, 2) ->  5\n\
+@end group\n\
+@end example\n\
+@seealso{full, accumarray, spalloc, spdiags, speye, spones, sprand, sprandn, sprandsym, spconvert, spfun}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -202,10 +224,11 @@
        "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {@var{s} =} spalloc (@var{m}, @var{n}, @var{nz})\n\
 Create an @var{m}-by-@var{n} sparse matrix with pre-allocated space for at\n\
-most @var{nz} nonzero elements.  This is useful for building the matrix\n\
-incrementally by a sequence of indexed assignments.  Subsequent indexed\n\
-assignments will reuse the pre-allocated memory, provided they are of one of\n\
-the simple forms\n\
+most @var{nz} nonzero elements.\n\
+\n\
+This is useful for building a matrix incrementally by a sequence of indexed\n\
+assignments.  Subsequent indexed assignments after @code{spalloc} will reuse\n\
+the pre-allocated memory, provided they are of one of the simple forms\n\
 \n\
 @itemize\n\
 @item @code{@var{s}(I:J) = @var{x}}\n\
@@ -226,8 +249,8 @@
 @end itemize\n\
 \n\
 Partial movement of data may still occur, but in general the assignment will\n\
-be more memory and time-efficient under these circumstances.  In particular,\n\
-it is possible to efficiently build a pre-allocated sparse matrix from\n\
+be more memory and time efficient under these circumstances.  In particular,\n\
+it is possible to efficiently build a pre-allocated sparse matrix from a\n\
 contiguous block of columns.\n\
 \n\
 The amount of pre-allocated memory for a given matrix may be queried using\n\
--- a/libinterp/corefcn/spparms.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/spparms.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -86,7 +86,7 @@
 The pivot tolerance of the @sc{umfpack} symmetric solvers (default 0.001)\n\
 \n\
 @item bandden\n\
-The density of non-zero elements in a banded matrix before it is treated\n\
+The density of nonzero elements in a banded matrix before it is treated\n\
 by the @sc{lapack} banded solvers (default 0.5)\n\
 \n\
 @item umfpack\n\
@@ -100,6 +100,7 @@
 @qcode{\"defaults\"}.  The special keyword @qcode{\"tight\"} can be used to\n\
 set the mmd solvers to attempt a sparser solution at the potential cost of\n\
 longer running time.\n\
+@seealso{chol, colamd, lu, qr, symamd}\n\
 @end deftypefn")
 {
   octave_value_list retval;
--- a/libinterp/corefcn/toplev.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/toplev.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -615,7 +615,7 @@
                     {
                       if (! (interactive || forced_interactive))
                         {
-                          // We should exit with a non-zero status.
+                          // We should exit with a nonzero status.
                           retval = 1;
                           break;
                         }
--- a/libinterp/corefcn/utils.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/corefcn/utils.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -238,7 +238,7 @@
   return status;
 }
 
-// Return non-zero if either NR or NC is zero.  Return -1 if this
+// Return nonzero if either NR or NC is zero.  Return -1 if this
 // should be considered fatal; return 1 if this is ok.
 
 int
--- a/libinterp/dldfcn/amd.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/dldfcn/amd.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -73,7 +73,7 @@
 The value of dense must be a positive scalar and its default value is 10.0\n\
 \n\
 @item @var{opts}.aggressive\n\
-If this value is a non zero scalar, then @code{amd} performs aggressive\n\
+If this value is a nonzero scalar, then @code{amd} performs aggressive\n\
 absorption.  The default is not to perform aggressive absorption.\n\
 @end table\n\
 \n\
--- a/libinterp/dldfcn/symrcm.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/dldfcn/symrcm.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -322,7 +322,7 @@
   return x.id;
 }
 
-// Calculates the node's degrees. This means counting the non-zero elements
+// Calculates the node's degrees. This means counting the nonzero elements
 // in the symmetric matrix' rows. This works for non-symmetric matrices
 // as well.
 
@@ -341,7 +341,7 @@
         {
           OCTAVE_QUIT;
           octave_idx_type k = ridx[i];
-          // there is a non-zero element (k,j)
+          // there is a nonzero element (k,j)
           D[k]++;
           if (D[k] > max_deg)
             max_deg = D[k];
--- a/libinterp/octave-value/ov-bool-mat.cc	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/octave-value/ov-bool-mat.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -552,7 +552,7 @@
 @deftypefn {Built-in Function} {} logical (@var{x})\n\
 Convert the numeric object @var{x} to logical type.\n\
 \n\
-Any non-zero values will be converted to true (1) while zero values\n\
+Any nonzero values will be converted to true (1) while zero values\n\
 will be converted to false (0).  The non-numeric value NaN cannot be\n\
 converted and will produce an error.\n\
 \n\
--- a/libinterp/parse-tree/lex.ll	Sun May 11 02:28:33 2014 +0200
+++ b/libinterp/parse-tree/lex.ll	Sat Jun 14 13:24:46 2014 -0700
@@ -300,11 +300,6 @@
 // Internal variable for lexer debugging state.
 static bool lexer_debug_flag = false;
 
-// Forward declarations for functions defined at the bottom of this
-// file that are needed inside the lexer actions.
-
-static std::string strip_trailing_whitespace (char *s);
-
 %}
 
 D       [0-9]
@@ -1922,21 +1917,6 @@
 
 */
 
-// Used to delete trailing white space from tokens.
-
-static std::string
-strip_trailing_whitespace (char *s)
-{
-  std::string retval = s;
-
-  size_t pos = retval.find_first_of (" \t");
-
-  if (pos != std::string::npos)
-    retval.resize (pos);
-
-  return retval;
-}
-
 DEFUN (__display_tokens__, args, nargout,
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} __display_tokens__ ()\n\
--- a/liboctave/array/CSparse.cc	Sun May 11 02:28:33 2014 +0200
+++ b/liboctave/array/CSparse.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -1917,7 +1917,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -2013,7 +2013,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -2440,7 +2440,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -2536,7 +2536,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -2990,7 +2990,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -3099,7 +3099,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -3557,7 +3557,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -3666,7 +3666,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -4032,7 +4032,7 @@
                              work, b.rows (), err
                              F77_CHAR_ARG_LEN (1)));
 
-                  // Count non-zeros in work vector and adjust
+                  // Count nonzeros in work vector and adjust
                   // space in retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nr; i++)
@@ -4314,7 +4314,7 @@
               octave_idx_type b_nc = b.cols ();
               OCTAVE_LOCAL_BUFFER (Complex, Bx, b_nr);
 
-              // Take a first guess that the number of non-zero terms
+              // Take a first guess that the number of nonzero terms
               // will be as many as in b
               volatile octave_idx_type x_nz = b.nnz ();
               volatile octave_idx_type ii = 0;
@@ -4342,7 +4342,7 @@
                       break;
                     }
 
-                  // Count non-zeros in work vector and adjust
+                  // Count nonzeros in work vector and adjust
                   // space in retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nr; i++)
@@ -4734,7 +4734,7 @@
                   octave_idx_type b_nc = b.cols ();
                   OCTAVE_LOCAL_BUFFER (Complex, Bx, b_nr);
 
-                  // Take a first guess that the number of non-zero terms
+                  // Take a first guess that the number of nonzero terms
                   // will be as many as in b
                   volatile octave_idx_type x_nz = b.nnz ();
                   volatile octave_idx_type ii = 0;
@@ -4908,7 +4908,7 @@
                                  ldm, pipvt, work, b.rows (), err
                                  F77_CHAR_ARG_LEN (1)));
 
-                      // Count non-zeros in work vector and adjust
+                      // Count nonzeros in work vector and adjust
                       // space in retval if needed
                       octave_idx_type new_nnz = 0;
                       for (octave_idx_type i = 0; i < nr; i++)
@@ -5301,7 +5301,7 @@
                   octave_idx_type b_nc = b.cols ();
                   OCTAVE_LOCAL_BUFFER (Complex, Bx, b_nr);
 
-                  // Take a first guess that the number of non-zero terms
+                  // Take a first guess that the number of nonzero terms
                   // will be as many as in b
                   volatile octave_idx_type x_nz = b.nnz ();
                   volatile octave_idx_type ii = 0;
@@ -5328,7 +5328,7 @@
                           break;
                         }
 
-                      // Count non-zeros in work vector and adjust
+                      // Count nonzeros in work vector and adjust
                       // space in retval if needed
                       octave_idx_type new_nnz = 0;
                       for (octave_idx_type i = 0; i < nr; i++)
@@ -5481,7 +5481,7 @@
                                  ldm, pipvt, Bx, b.rows (), err
                                  F77_CHAR_ARG_LEN (1)));
 
-                      // Count non-zeros in work vector and adjust
+                      // Count nonzeros in work vector and adjust
                       // space in retval if needed
                       octave_idx_type new_nnz = 0;
                       for (octave_idx_type i = 0; i < nr; i++)
@@ -6076,7 +6076,7 @@
               OCTAVE_LOCAL_BUFFER (Complex, Bz, b_nr);
 #endif
 
-              // Take a first guess that the number of non-zero terms
+              // Take a first guess that the number of nonzero terms
               // will be as many as in b
               octave_idx_type x_nz = b.nnz ();
               octave_idx_type ii = 0;
@@ -6582,7 +6582,7 @@
 
               OCTAVE_LOCAL_BUFFER (Complex, Bx, b_nr);
 
-              // Take a first guess that the number of non-zero terms
+              // Take a first guess that the number of nonzero terms
               // will be as many as in b
               octave_idx_type x_nz = b.nnz ();
               octave_idx_type ii = 0;
@@ -7780,7 +7780,7 @@
 
   EMPTY_RETURN_CHECK (SparseComplexMatrix);
 
-  // Count the number of non-zero elements
+  // Count the number of nonzero elements
   if (xmax (c, 0.) != 0.)
     {
       result = SparseComplexMatrix (nr, nc, c);
--- a/liboctave/array/Sparse.cc	Sun May 11 02:28:33 2014 +0200
+++ b/liboctave/array/Sparse.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -657,7 +657,7 @@
       octave_idx_type len = a.length ();
       octave_idx_type new_nzmx = 0;
 
-      // First count the number of non-zero terms
+      // First count the number of nonzero terms
       for (octave_idx_type i = 0; i < len; i++)
         if (a(i) != T ())
           new_nzmx++;
@@ -2427,7 +2427,7 @@
         {
           octave_idx_type ndiag = (nnr < nnc) ? nnr : nnc;
 
-          // Count the number of non-zero elements
+          // Count the number of nonzero elements
           octave_idx_type nel = 0;
           if (k > 0)
             {
--- a/liboctave/array/Sparse.h	Sun May 11 02:28:33 2014 +0200
+++ b/liboctave/array/Sparse.h	Sat Jun 14 13:24:46 2014 -0700
@@ -242,7 +242,7 @@
   Sparse<T>& operator = (const Sparse<T>& a);
 
   // Note that nzmax and capacity are the amount of storage for
-  // non-zero elements, while nnz is the actual number of non-zero
+  // nonzero elements, while nnz is the actual number of nonzero
   // terms.
   octave_idx_type nzmax (void) const { return rep->length (); }
   octave_idx_type capacity (void) const { return nzmax (); }
--- a/liboctave/array/dSparse.cc	Sun May 11 02:28:33 2014 +0200
+++ b/liboctave/array/dSparse.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -2004,7 +2004,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -2100,7 +2100,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -2529,7 +2529,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -2626,7 +2626,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -3084,7 +3084,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -3193,7 +3193,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -3652,7 +3652,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -3762,7 +3762,7 @@
                         }
                     }
 
-                  // Count non-zeros in work vector and adjust space in
+                  // Count nonzeros in work vector and adjust space in
                   // retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nc; i++)
@@ -4129,7 +4129,7 @@
                              work, b.rows (), err
                              F77_CHAR_ARG_LEN (1)));
 
-                  // Count non-zeros in work vector and adjust
+                  // Count nonzeros in work vector and adjust
                   // space in retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nr; i++)
@@ -4411,7 +4411,7 @@
               OCTAVE_LOCAL_BUFFER (double, Bx, b_nr);
               OCTAVE_LOCAL_BUFFER (double, Bz, b_nr);
 
-              // Take a first guess that the number of non-zero terms
+              // Take a first guess that the number of nonzero terms
               // will be as many as in b
               volatile octave_idx_type x_nz = b.nnz ();
               volatile octave_idx_type ii = 0;
@@ -4458,7 +4458,7 @@
                       break;
                     }
 
-                  // Count non-zeros in work vector and adjust
+                  // Count nonzeros in work vector and adjust
                   // space in retval if needed
                   octave_idx_type new_nnz = 0;
                   for (octave_idx_type i = 0; i < nr; i++)
@@ -4852,7 +4852,7 @@
                   octave_idx_type b_nc = b.cols ();
                   OCTAVE_LOCAL_BUFFER (double, Bx, b_nr);
 
-                  // Take a first guess that the number of non-zero terms
+                  // Take a first guess that the number of nonzero terms
                   // will be as many as in b
                   volatile octave_idx_type x_nz = b.nnz ();
                   volatile octave_idx_type ii = 0;
@@ -5026,7 +5026,7 @@
                                  ldm, pipvt, work, b.rows (), err
                                  F77_CHAR_ARG_LEN (1)));
 
-                      // Count non-zeros in work vector and adjust
+                      // Count nonzeros in work vector and adjust
                       // space in retval if needed
                       octave_idx_type new_nnz = 0;
                       for (octave_idx_type i = 0; i < nr; i++)
@@ -5473,7 +5473,7 @@
                   OCTAVE_LOCAL_BUFFER (double, Bx, b_nr);
                   OCTAVE_LOCAL_BUFFER (double, Bz, b_nr);
 
-                  // Take a first guess that the number of non-zero terms
+                  // Take a first guess that the number of nonzero terms
                   // will be as many as in b
                   volatile octave_idx_type x_nz = b.nnz ();
                   volatile octave_idx_type ii = 0;
@@ -5519,7 +5519,7 @@
                           break;
                         }
 
-                      // Count non-zeros in work vector and adjust
+                      // Count nonzeros in work vector and adjust
                       // space in retval if needed
                       octave_idx_type new_nnz = 0;
                       for (octave_idx_type i = 0; i < nr; i++)
@@ -5686,7 +5686,7 @@
                                  ldm, pipvt, Bz, b.rows (), err
                                  F77_CHAR_ARG_LEN (1)));
 
-                      // Count non-zeros in work vector and adjust
+                      // Count nonzeros in work vector and adjust
                       // space in retval if needed
                       octave_idx_type new_nnz = 0;
                       for (octave_idx_type i = 0; i < nr; i++)
@@ -6245,7 +6245,7 @@
               OCTAVE_LOCAL_BUFFER (double, Bx, b_nr);
               OCTAVE_LOCAL_BUFFER (double, Xx, b_nr);
 
-              // Take a first guess that the number of non-zero terms
+              // Take a first guess that the number of nonzero terms
               // will be as many as in b
               octave_idx_type x_nz = b.nnz ();
               octave_idx_type ii = 0;
@@ -6742,7 +6742,7 @@
               OCTAVE_LOCAL_BUFFER (double, Bx, b_nr);
               OCTAVE_LOCAL_BUFFER (double, Bz, b_nr);
 
-              // Take a first guess that the number of non-zero terms
+              // Take a first guess that the number of nonzero terms
               // will be as many as in b
               octave_idx_type x_nz = b.nnz ();
               octave_idx_type ii = 0;
@@ -7742,7 +7742,7 @@
 
   EMPTY_RETURN_CHECK (SparseMatrix);
 
-  // Count the number of non-zero elements
+  // Count the number of nonzero elements
   if (d < 0.)
     {
       result = SparseMatrix (nr, nc, d);
@@ -7893,7 +7893,7 @@
 
   EMPTY_RETURN_CHECK (SparseMatrix);
 
-  // Count the number of non-zero elements
+  // Count the number of nonzero elements
   if (d > 0.)
     {
       result = SparseMatrix (nr, nc, d);
--- a/liboctave/numeric/randmtzig.c	Sun May 11 02:28:33 2014 +0200
+++ b/liboctave/numeric/randmtzig.c	Sat Jun 14 13:24:46 2014 -0700
@@ -249,7 +249,7 @@
         }
     }
 
-  state[0] = 0x80000000UL; /* MSB is 1; assuring non-zero initial array */
+  state[0] = 0x80000000UL; /* MSB is 1; assuring nonzero initial array */
   left = 1;
   initf = 1;
 }
--- a/liboctave/operators/Sparse-op-defs.h	Sun May 11 02:28:33 2014 +0200
+++ b/liboctave/operators/Sparse-op-defs.h	Sat Jun 14 13:24:46 2014 -0700
@@ -1184,7 +1184,7 @@
       { \
         if (m1_nr != 0 || m1_nc != 0) \
           { \
-            /* Count num of non-zero elements */ \
+            /* Count num of nonzero elements */ \
             octave_idx_type nel = 0; \
             for (octave_idx_type j = 0; j < m1_nc; j++) \
               for (octave_idx_type i = 0; i < m1_nr; i++) \
@@ -1252,7 +1252,7 @@
       { \
         if (m1_nr != 0 || m1_nc != 0) \
           { \
-            /* Count num of non-zero elements */ \
+            /* Count num of nonzero elements */ \
             octave_idx_type nel = 0; \
             for (octave_idx_type j = 0; j < m1_nc; j++) \
               for (octave_idx_type i = 0; i < m1_nr; i++) \
@@ -1424,7 +1424,7 @@
       { \
         if (m1_nr != 0 || m1_nc != 0) \
           { \
-            /* Count num of non-zero elements */ \
+            /* Count num of nonzero elements */ \
             octave_idx_type nel = 0; \
             for (octave_idx_type j = 0; j < m1_nc; j++) \
               for (octave_idx_type i = 0; i < m1_nr; i++) \
@@ -1492,7 +1492,7 @@
       { \
         if (m1_nr != 0 || m1_nc != 0) \
           { \
-            /* Count num of non-zero elements */ \
+            /* Count num of nonzero elements */ \
             octave_idx_type nel = 0; \
             for (octave_idx_type j = 0; j < m1_nc; j++) \
               for (octave_idx_type i = 0; i < m1_nr; i++) \
@@ -1930,10 +1930,10 @@
           retval.change_capacity (nel); \
           /* The optimal break-point as estimated from simulations */ \
           /* Note that Mergesort is O(nz log(nz)) while searching all */ \
-          /* values is O(nr), where nz here is non-zero per row of */ \
+          /* values is O(nr), where nz here is nonzero per row of */ \
           /* length nr. The test itself was then derived from the */ \
           /* simulation with random square matrices and the observation */ \
-          /* of the number of non-zero elements in the output matrix */ \
+          /* of the number of nonzero elements in the output matrix */ \
           /* it was found that the breakpoints were */ \
           /*   nr: 500  1000  2000  5000 10000 */ \
           /*   nz:   6    25    97   585  2202 */ \
--- a/scripts/general/iscolumn.m	Sun May 11 02:28:33 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-## Copyright (C) 2012-2013 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave is free software; you can redistribute it and/or modify it
-## under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 3 of the License, or (at
-## your option) any later version.
-##
-## Octave is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {} iscolumn (@var{x})
-## Return true if @var{x} is a column vector.
-## @seealso{isrow, isscalar, isvector, ismatrix}
-## @end deftypefn
-
-## Author: Rik Wehbring
-
-function retval = iscolumn (x)
-
-  if (nargin != 1)
-    print_usage ();
-  endif
-
-  sz = size (x);
-  retval = (ndims (x) == 2 && (sz(2) == 1));
-
-endfunction
-
-
-%!assert (iscolumn ([1, 2, 3]), false)
-%!assert (iscolumn ([1; 2; 3]))
-%!assert (iscolumn (1))
-%!assert (iscolumn ([]), false)
-%!assert (iscolumn ([1, 2; 3, 4]), false)
-
-%!assert (iscolumn ("t"))
-%!assert (iscolumn ("test"), false)
-%!assert (iscolumn (["test"; "ing"]), false)
-
-%!test
-%! s.a = 1;
-%! assert (iscolumn (s));
-
-%% Test input validation
-%!error iscolumn ()
-%!error iscolumn ([1, 2], 2)
-
--- a/scripts/general/isrow.m	Sun May 11 02:28:33 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-## Copyright (C) 2012-2013 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave is free software; you can redistribute it and/or modify it
-## under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 3 of the License, or (at
-## your option) any later version.
-##
-## Octave is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {} isrow (@var{x})
-## Return true if @var{x} is a row vector.
-## @seealso{iscolumn, isscalar, isvector, ismatrix}
-## @end deftypefn
-
-## Author: Rik Wehbring
-
-function retval = isrow (x)
-
-  if (nargin != 1)
-    print_usage ();
-  endif
-
-  sz = size (x);
-  retval = (ndims (x) == 2 && (sz(1) == 1));
-
-endfunction
-
-
-%!assert (isrow ([1, 2, 3]))
-%!assert (isrow ([1; 2; 3]), false)
-%!assert (isrow (1))
-%!assert (isrow ([]), false)
-%!assert (isrow ([1, 2; 3, 4]), false)
-
-%!assert (isrow ("t"))
-%!assert (isrow ("test"))
-%!assert (isrow (["test"; "ing"]), false)
-
-%!test
-%! s.a = 1;
-%! assert (isrow (s));
-
-%% Test input validation
-%!error isrow ()
-%!error isrow ([1, 2], 2)
-
--- a/scripts/general/isscalar.m	Sun May 11 02:28:33 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-## Copyright (C) 1996-2013 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave is free software; you can redistribute it and/or modify it
-## under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 3 of the License, or (at
-## your option) any later version.
-##
-## Octave is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {} isscalar (@var{x})
-## Return true if @var{x} is a scalar.
-## @seealso{isvector, ismatrix}
-## @end deftypefn
-
-## Author: jwe
-
-function retval = isscalar (x)
-
-  if (nargin != 1)
-    print_usage ();
-  endif
-
-  retval = numel (x) == 1;
-
-endfunction
-
-
-%!assert (isscalar (1))
-%!assert (isscalar ([1, 2]), false)
-%!assert (isscalar ([]), false)
-%!assert (isscalar ([1, 2; 3, 4]), false)
-
-%!assert (isscalar ("t"))
-%!assert (isscalar ("test"), false)
-%!assert (isscalar (["test"; "ing"]), false)
-
-%!test
-%! s.a = 1;
-%! assert (isscalar (s));
-
-%% Test input validation
-%!error isscalar ()
-%!error isscalar (1, 2)
-
--- a/scripts/general/issquare.m	Sun May 11 02:28:33 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-## Copyright (C) 1996-2013 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave is free software; you can redistribute it and/or modify it
-## under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 3 of the License, or (at
-## your option) any later version.
-##
-## Octave is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {} issquare (@var{x})
-## Return true if @var{x} is a square matrix.
-## @seealso{isscalar, isvector, ismatrix, size}
-## @end deftypefn
-
-## Author: A. S. Hodel <scotte@eng.auburn.edu>
-## Created: August 1993
-## Adapted-By: jwe
-
-function retval = issquare (x)
-
-  if (nargin != 1)
-    print_usage ();
-  endif
-
-  if (ndims (x) == 2)
-    [r, c] = size (x);
-    retval = r == c;
-  else
-    retval = false;
-  endif
-
-endfunction
-
-
-%!assert (issquare ([]))
-%!assert (issquare (1))
-%!assert (! issquare ([1, 2]))
-%!assert (issquare ([1, 2; 3, 4]))
-%!assert (! issquare ([1, 2; 3, 4; 5, 6]))
-%!assert (! issquare (ones (3,3,3)))
-%!assert (issquare ("t"))
-%!assert (! issquare ("test"))
-%!assert (issquare (["test"; "ing"; "1"; "2"]))
-%!test
-%! s.a = 1;
-%! assert (issquare (s));
-%!assert (issquare ({1, 2; 3, 4}))
-%!assert (sparse (([1, 2; 3, 4])))
-
-%% Test input validation
-%!error issquare ()
-%!error issquare ([1, 2; 3, 4], 2)
-
--- a/scripts/general/isvector.m	Sun May 11 02:28:33 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-## Copyright (C) 1996-2013 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave is free software; you can redistribute it and/or modify it
-## under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 3 of the License, or (at
-## your option) any later version.
-##
-## Octave is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {} isvector (@var{x})
-## Return true if @var{x} is a vector.  A vector is a 2-D array
-## where one of the dimensions is equal to 1.  As a consequence a
-## 1x1 array, or scalar, is also a vector.
-## @seealso{isscalar, ismatrix, size, rows, columns, length}
-## @end deftypefn
-
-## Author: jwe
-
-function retval = isvector (x)
-
-  if (nargin != 1)
-    print_usage ();
-  endif
-
-  sz = size (x);
-  retval = (ndims (x) == 2 && (sz(1) == 1 || sz(2) == 1));
-
-endfunction
-
-
-%!assert (isvector (1))
-%!assert (isvector ([1; 2; 3]))
-%!assert (isvector ([]), false)
-%!assert (isvector ([1, 2; 3, 4]), false)
-
-%!assert (isvector ("t"))
-%!assert (isvector ("test"))
-%!assert (isvector (["test"; "ing"]), false)
-
-%!test
-%! s.a = 1;
-%! assert (isvector (s));
-
-%% Test input validation
-%!error isvector ()
-%!error isvector ([1, 2], 2)
-
--- a/scripts/general/module.mk	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/general/module.mk	Sat Jun 14 13:24:46 2014 -0700
@@ -39,14 +39,9 @@
   general/interp3.m \
   general/interpn.m \
   general/interpft.m \
-  general/iscolumn.m \
   general/isdir.m \
   general/isequal.m \
   general/isequaln.m \
-  general/isrow.m \
-  general/isscalar.m \
-  general/issquare.m \
-  general/isvector.m \
   general/loadobj.m \
   general/logspace.m \
   general/methods.m \
--- a/scripts/help/get_first_help_sentence.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/help/get_first_help_sentence.m	Sat Jun 14 13:24:46 2014 -0700
@@ -28,7 +28,7 @@
 ##
 ## The optional output argument @var{status} returns the status reported by
 ## @code{makeinfo}.  If only one output argument is requested, and @var{status}
-## is non-zero, a warning is displayed.
+## is nonzero, a warning is displayed.
 ##
 ## As an example, the first sentence of this help text is
 ##
--- a/scripts/image/image.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/image/image.m	Sat Jun 14 13:24:46 2014 -0700
@@ -111,6 +111,8 @@
       hax = newplot (hax);
     elseif (isempty (hax))
       hax = gca ();
+    else
+      hax = hax(1);
     endif
 
     htmp = __img__ (hax, do_new, x, y, img, varargin{chararg:end});
--- a/scripts/image/imwrite.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/image/imwrite.m	Sat Jun 14 13:24:46 2014 -0700
@@ -49,7 +49,7 @@
 ##
 ## @item DelayTime
 ## For formats that accept animations (such as GIF), controls for how long a
-## frame is displayed until it moves to the next one. The value must be scalar
+## frame is displayed until it moves to the next one.  The value must be scalar
 ## (which will applied to all frames in @var{img}), or a vector of length
 ## equal to the number of frames in @var{im}.  The value is in seconds, must
 ## be between 0 and 655.35, and defaults to 0.5.
--- a/scripts/miscellaneous/edit.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/miscellaneous/edit.m	Sat Jun 14 13:24:46 2014 -0700
@@ -23,7 +23,7 @@
 ## Edit the named function, or change editor settings.
 ##
 ## If @code{edit} is called with the name of a file or function as
-## its argument it will be opened in the text editor defined by @code{EDITOR}.
+## its argument it will be opened in the text editor defined by @env{EDITOR}.
 ##
 ## @itemize @bullet
 ## @item
--- a/scripts/optimization/fminunc.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/optimization/fminunc.m	Sat Jun 14 13:24:46 2014 -0700
@@ -63,11 +63,11 @@
 ## Last relative change in function value was less than @code{TolFun}.
 ##
 ## @item 0
-## Iteration limit exceeded---either maximum numer of algorithm iterations
+## Iteration limit exceeded---either maximum number of algorithm iterations
 ## @code{MaxIter} or maximum number of function evaluations @code{MaxFunEvals}.
 ##
 ## @item -1
-## Alogrithm terminated by @code{OutputFcn}.
+## Algorithm terminated by @code{OutputFcn}.
 ##
 ## @item -3
 ## The trust region radius became excessively small.
--- a/scripts/plot/appearance/text.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/plot/appearance/text.m	Sat Jun 14 13:24:46 2014 -0700
@@ -129,6 +129,8 @@
 
   if (isempty (hax))
     hax = gca ();
+  else
+    hax = hax(1);
   endif
 
   ## Position argument may alse be in PROP/VAL pair
--- a/scripts/plot/draw/line.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/plot/draw/line.m	Sat Jun 14 13:24:46 2014 -0700
@@ -49,6 +49,8 @@
 
   if (isempty (hax))
     hax = gca ();
+  else
+    hax = hax(1);
   endif
 
   htmp = __line__ (hax, varargin{:});
--- a/scripts/plot/draw/patch.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/plot/draw/patch.m	Sat Jun 14 13:24:46 2014 -0700
@@ -80,6 +80,8 @@
   
   if (isempty (hax))
     hax = gca ();
+  else
+    hax = hax(1);
   endif
   
   [htmp, failed] = __patch__ (hax, varargin{:});
--- a/scripts/plot/draw/pie.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/plot/draw/pie.m	Sat Jun 14 13:24:46 2014 -0700
@@ -30,7 +30,7 @@
 ## @code{pct = @var{x}(i) / sum (@var{x})}. 
 ##
 ## The optional input @var{explode} is a vector of the same length as @var{x}
-## that, if non-zero, "explodes" the slice from the pie chart.
+## that, if nonzero, "explodes" the slice from the pie chart.
 ##
 ## The optional input @var{labels} is a cell array of strings of the same
 ## length as @var{x} specifying the label for each slice.
--- a/scripts/plot/draw/pie3.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/plot/draw/pie3.m	Sat Jun 14 13:24:46 2014 -0700
@@ -31,7 +31,7 @@
 ## @code{pct = @var{x}(i) / sum (@var{x})}. 
 ##
 ## The optional input @var{explode} is a vector of the same length as @var{x}
-## that, if non-zero, "explodes" the slice from the pie chart.
+## that, if nonzero, "explodes" the slice from the pie chart.
 ##
 ## The optional input @var{labels} is a cell array of strings of the same
 ## length as @var{x} specifying the label for each slice.
--- a/scripts/plot/util/hgsave.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/plot/util/hgsave.m	Sat Jun 14 13:24:46 2014 -0700
@@ -29,12 +29,17 @@
 ## should be one of the following:
 ##
 ## @itemize @bullet
-## @item @code{-binary}, @code{-float-binary}
-## @item @code{-hdf5}, @code{-float-hdf5}
-## @item @code{-V7}, @code{-v7}, @code{-7}, @code{-mat7-binary}
-## @item @code{-V6}, @code{-v6}, @code{-6}, @code{-mat6-binary}
-## @item @code{-text}
-## @item @code{-zip}, @code{-z}
+## @item @option{-binary}, @option{-float-binary}
+##
+## @item @option{-hdf5}, @option{-float-hdf5}
+##
+## @item @option{-V7}, @option{-v7}, @code{-7}, @option{-mat7-binary}
+##
+## @item @option{-V6}, @option{-v6}, @code{-6}, @option{-mat6-binary}
+##
+## @item @option{-text}
+##
+## @item @option{-zip}, @option{-z}
 ## @end itemize
 ##
 ## When producing graphics for final publication use @code{print} or
--- a/scripts/sparse/colperm.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/sparse/colperm.m	Sat Jun 14 13:24:46 2014 -0700
@@ -20,9 +20,9 @@
 ## @deftypefn {Function File} {@var{p} =} colperm (@var{s})
 ## Return the column permutations such that the columns of
 ## @code{@var{s} (:, @var{p})} are ordered in terms of increase number
-## of non-zero elements.  If @var{s} is symmetric, then @var{p} is chosen
+## of nonzero elements.  If @var{s} is symmetric, then @var{p} is chosen
 ## such that @code{@var{s} (@var{p}, @var{p})} orders the rows and
-## columns with increasing number of non zeros elements.
+## columns with increasing number of nonzeros elements.
 ## @end deftypefn
 
 function p = colperm (s)
--- a/scripts/sparse/nonzeros.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/sparse/nonzeros.m	Sat Jun 14 13:24:46 2014 -0700
@@ -18,7 +18,8 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} nonzeros (@var{s})
-## Return a vector of the non-zero values of the sparse matrix @var{s}.
+## Return a vector of the nonzero values of the sparse matrix @var{s}.
+## @seealso{find, nnz}
 ## @end deftypefn
 
 function t = nonzeros (s)
--- a/scripts/sparse/spaugment.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/sparse/spaugment.m	Sat Jun 14 13:24:46 2014 -0700
@@ -18,7 +18,9 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {@var{s} =} spaugment (@var{A}, @var{c})
-## Create the augmented matrix of @var{A}.  This is given by
+## Create the augmented matrix of @var{A}.
+##
+## This is given by
 ##
 ## @example
 ## @group
@@ -47,7 +49,7 @@
 ## As the matrix @var{s} is symmetric indefinite it can be factorized
 ## with @code{lu}, and the minimum norm solution can therefore be found
 ## without the need for a @code{qr} factorization.  As the residual
-## error will be @code{zeros (@var{m}, @var{m})} for under determined
+## error will be @code{zeros (@var{m}, @var{m})} for underdetermined
 ## problems, and example can be
 ##
 ## @example
@@ -69,6 +71,7 @@
 ##
 ## In general the left division operator is more stable and faster than
 ## using the @code{spaugment} function.
+## @seealso{mldivide}
 ## @end deftypefn
 
 function s = spaugment (A, c)
--- a/scripts/sparse/spconvert.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/sparse/spconvert.m	Sat Jun 14 13:24:46 2014 -0700
@@ -18,12 +18,14 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {@var{x} =} spconvert (@var{m})
-## This function converts for a simple sparse matrix format easily
-## produced by other programs into Octave's internal sparse format.  The
-## input @var{x} is either a 3 or 4 column real matrix, containing
-## the row, column, real and imaginary parts of the elements of the
+## Convert a simple sparse matrix format easily generated by other programs
+## into Octave's internal sparse format.
+##
+## The input @var{m} is either a 3 or 4 column real matrix, containing
+## the row, column, real, and imaginary parts of the elements of the
 ## sparse matrix.  An element with a zero real and imaginary part can
 ## be used to force a particular matrix size.
+## @seealso{sparse}
 ## @end deftypefn
 
 function s = spconvert (m)
--- a/scripts/sparse/spdiags.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/sparse/spdiags.m	Sat Jun 14 13:24:46 2014 -0700
@@ -23,7 +23,7 @@
 ## @deftypefnx {Function File} {@var{A} =} spdiags (@var{v}, @var{d}, @var{A})
 ## @deftypefnx {Function File} {@var{A} =} spdiags (@var{v}, @var{d}, @var{m}, @var{n})
 ## A generalization of the function @code{diag}.  Called with a single
-## input argument, the non-zero diagonals @var{d} of @var{A} are extracted.
+## input argument, the nonzero diagonals @var{d} of @var{A} are extracted.
 ## With two arguments the diagonals to extract are given by the vector
 ## @var{d}.
 ##
--- a/scripts/sparse/speye.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/sparse/speye.m	Sat Jun 14 13:24:46 2014 -0700
@@ -17,17 +17,18 @@
 ## <http://www.gnu.org/licenses/>.
 
 ## -*- texinfo -*-
-## @deftypefn  {Function File} {@var{y} =} speye (@var{m})
-## @deftypefnx {Function File} {@var{y} =} speye (@var{m}, @var{n})
-## @deftypefnx {Function File} {@var{y} =} speye (@var{sz})
-## Return a sparse identity matrix.  This is significantly more
-## efficient than @code{sparse (eye (@var{m}))} as the full matrix
-## is not constructed.
+## @deftypefn  {Function File} {@var{s} =} speye (@var{m}, @var{n})
+## @deftypefnx {Function File} {@var{s} =} speye (@var{m})
+## @deftypefnx {Function File} {@var{s} =} speye (@var{sz})
+## Return a sparse identity matrix of size @var{m}x@var{n}.
 ##
-## Called with a single argument a square matrix of size @var{m} by
-## @var{m} is created.  Otherwise a matrix of @var{m} by @var{n} is
-## created.  If called with a single vector argument, this argument
-## is taken to be the size of the matrix to create.
+## The implementation is significantly more efficient than
+## @code{sparse (eye (@var{m}))} as the full matrix is not constructed.
+##
+## Called with a single argument a square matrix of size
+## @var{m}-by-@var{m} is created.  If called with a single vector argument
+## @var{sz}, this argument is taken to be the size of the matrix to create.
+## @seealso{sparse, spdiags, eye}
 ## @end deftypefn
 
 function s = speye (m, n)
--- a/scripts/sparse/spfun.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/sparse/spfun.m	Sat Jun 14 13:24:46 2014 -0700
@@ -18,7 +18,7 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {@var{y} =} spfun (@var{f}, @var{S})
-## Compute @code{f(@var{S})} for the non-zero values of @var{S}.
+## Compute @code{f(@var{S})} for the nonzero values of @var{S}.
 ## This results in a sparse matrix with the same structure as
 ## @var{S}.  The function @var{f} can be passed as a string, a
 ## function handle, or an inline function.
--- a/scripts/sparse/spones.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/sparse/spones.m	Sat Jun 14 13:24:46 2014 -0700
@@ -18,8 +18,9 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {@var{r} =} spones (@var{S})
-## Replace the non-zero entries of @var{S} with ones.  This creates a
+## Replace the nonzero entries of @var{S} with ones.  This creates a
 ## sparse matrix with the same structure as @var{S}.
+## @seealso{sparse, sprand, sprandn, sprandsym, spfun, spy}
 ## @end deftypefn
 
 function r = spones (S)
--- a/scripts/sparse/sprand.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/sparse/sprand.m	Sat Jun 14 13:24:46 2014 -0700
@@ -30,7 +30,7 @@
 ## the interval (0, 1).
 ##
 ## If called with a single matrix argument, a sparse matrix is generated with
-## random values wherever the matrix @var{s} is non-zero.
+## random values wherever the matrix @var{s} is nonzero.
 ##
 ## If called with a scalar fourth argument @var{rc}, a random sparse matrix
 ## with reciprocal condition number @var{rc} is generated.  If @var{rc} is
--- a/scripts/sparse/sprandn.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/sparse/sprandn.m	Sat Jun 14 13:24:46 2014 -0700
@@ -30,7 +30,7 @@
 ## mean of 0 and a variance of 1.
 ##
 ## If called with a single matrix argument, a sparse matrix is generated with
-## random values wherever the matrix @var{s} is non-zero.
+## random values wherever the matrix @var{s} is nonzero.
 ##
 ## If called with a scalar fourth argument @var{rc}, a random sparse matrix
 ## with reciprocal condition number @var{rc} is generated.  If @var{rc} is
--- a/scripts/sparse/sprandsym.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/sparse/sprandsym.m	Sat Jun 14 13:24:46 2014 -0700
@@ -20,15 +20,15 @@
 ## -*- texinfo -*-
 ## @deftypefn  {Function File} {} sprandsym (@var{n}, @var{d})
 ## @deftypefnx {Function File} {} sprandsym (@var{s})
-## Generate a symmetric random sparse matrix.  The size of the matrix will be
-## @var{n} by @var{n}, with a density of values given by @var{d}.
-## @var{d} should be between 0 and 1.  Values will be normally
-## distributed with mean of zero and variance 1.
+## Generate a symmetric random sparse matrix.
 ##
-## If called with a single matrix argument, a random sparse matrix is
-## generated wherever the matrix @var{S} is non-zero in its lower
-## triangular part.
-## @seealso{sprand, sprandn}
+## The size of the matrix will be @var{n}x@var{n}, with a density of values
+## given by @var{d}.  @var{d} must be between 0 and 1 inclusive.  Values will
+## be normally distributed with a mean of zero and a variance of 1.
+##
+## If called with a single matrix argument, a random sparse matrix is generated
+## wherever the matrix @var{S} is nonzero in its lower triangular part.
+## @seealso{sprand, sprandn, spones, sparse}
 ## @end deftypefn
 
 function S = sprandsym (n, d)
--- a/scripts/sparse/spstats.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/sparse/spstats.m	Sat Jun 14 13:24:46 2014 -0700
@@ -19,10 +19,10 @@
 ## -*- texinfo -*-
 ## @deftypefn  {Function File} {[@var{count}, @var{mean}, @var{var}] =} spstats (@var{S})
 ## @deftypefnx {Function File} {[@var{count}, @var{mean}, @var{var}] =} spstats (@var{S}, @var{j})
-## Return the stats for the non-zero elements of the sparse matrix @var{S}.
-## @var{count} is the number of non-zeros in each column, @var{mean}
-## is the mean of the non-zeros in each column, and @var{var} is the
-## variance of the non-zeros in each column.
+## Return the stats for the nonzero elements of the sparse matrix @var{S}.
+## @var{count} is the number of nonzeros in each column, @var{mean}
+## is the mean of the nonzeros in each column, and @var{var} is the
+## variance of the nonzeros in each column.
 ##
 ## Called with two input arguments, if @var{S} is the data and @var{j}
 ## is the bin number for the data, compute the stats for each bin.  In
--- a/scripts/sparse/spy.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/sparse/spy.m	Sat Jun 14 13:24:46 2014 -0700
@@ -20,11 +20,12 @@
 ## @deftypefn  {Function File} {} spy (@var{x})
 ## @deftypefnx {Function File} {} spy (@dots{}, @var{markersize})
 ## @deftypefnx {Function File} {} spy (@dots{}, @var{line_spec})
-## Plot the sparsity pattern of the sparse matrix @var{x}.  If the argument
-## @var{markersize} is given as a scalar value, it is used to determine the
-## point size in the plot.  If the string @var{line_spec} is given it is
-## passed to @code{plot} and determines the appearance of the plot.
-## @seealso{plot}
+## Plot the sparsity pattern of the sparse matrix @var{x}.
+## 
+## If the argument @var{markersize} is given as a scalar value, it is used to
+## determine the point size in the plot.  If the string @var{line_spec} is
+## given it is passed to @code{plot} and determines the appearance of the plot.
+## @seealso{plot, gplot}
 ## @end deftypefn
 
 function spy (x, varargin)
--- a/scripts/sparse/svds.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/sparse/svds.m	Sat Jun 14 13:24:46 2014 -0700
@@ -169,7 +169,7 @@
       ## The eigenvalues returns by eigs for sigma=0 are symmetric about 0.
       ## As we are only interested in the positive eigenvalues, we have to
       ## double k and then throw out the k negative eigenvalues.
-      ## Separately, if sigma is non-zero, but smaller than the smallest
+      ## Separately, if sigma is nonzero, but smaller than the smallest
       ## singular value, ARPACK may not return k eigenvalues. However, as
       ## computation scales with k we'd like to avoid doubling k for all
       ## scalar values of sigma.
--- a/scripts/special-matrix/gallery.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/special-matrix/gallery.m	Sat Jun 14 13:24:46 2014 -0700
@@ -1214,9 +1214,9 @@
   elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
     error ("gallery: N must be an integer for gearmat matrix.");
   elseif (! isnumeric (i) || ! isscalar (i) || i == 0 || abs (i) <= n)
-    error ("gallery: I must be a non-zero scalar, and abs (I) <= N for gearmat matrix.");
+    error ("gallery: I must be a nonzero scalar, and abs (I) <= N for gearmat matrix.");
   elseif (! isnumeric (j) || ! isscalar (j) || i == 0 || abs (j) <= n)
-    error ("gallery: J must be a non-zero scalar, and abs (J) <= N for gearmat matrix.");
+    error ("gallery: J must be a nonzero scalar, and abs (J) <= N for gearmat matrix.");
   endif
 
   A = diag (ones (n-1, 1), -1) + diag (ones (n-1, 1), 1);
--- a/scripts/statistics/base/moment.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/statistics/base/moment.m	Sat Jun 14 13:24:46 2014 -0700
@@ -103,6 +103,7 @@
 ##
 ## @end ifnottex
 ## @end table
+##
 ## If the optional argument @var{dim} is given, operate along this dimension.
 ##
 ## If both @var{type} and @var{dim} are given they may appear in any order.
--- a/scripts/statistics/tests/cor_test.m	Sun May 11 02:28:33 2014 +0200
+++ b/scripts/statistics/tests/cor_test.m	Sat Jun 14 13:24:46 2014 -0700
@@ -22,7 +22,7 @@
 ## populations.
 ##
 ## The optional argument string @var{alt} describes the alternative
-## hypothesis, and can be @qcode{"!="} or @qcode{"<>"} (non-zero),
+## hypothesis, and can be @qcode{"!="} or @qcode{"<>"} (nonzero),
 ## @qcode{">"} (greater than 0), or @qcode{"<"} (less than 0).  The
 ## default is the two-sided case.
 ##
--- a/src/mkoctfile.in.cc	Sun May 11 02:28:33 2014 +0200
+++ b/src/mkoctfile.in.cc	Sat Jun 14 13:24:46 2014 -0700
@@ -344,7 +344,10 @@
 {
   if (debug)
     std::cout << cmd << std::endl;
-  return system (cmd.c_str ());
+  int result = system (cmd.c_str ());
+  if (WIFEXITED (result))
+    result = WEXITSTATUS (result);
+  return result;
 }
 
 bool