Mercurial > forge
changeset 12651:b3fcb76b0b96 octave-forge
remove old strsplit
author | abarth93 |
---|---|
date | Mon, 22 Jun 2015 20:33:12 +0000 |
parents | 8d2bdadecce4 |
children | 1bd0f6f40c56 |
files | extra/cgi/DESCRIPTION extra/cgi/NEWS extra/cgi/doc/test_cgi.sh extra/cgi/doc/test_cgi_upload.m extra/cgi/doc/test_cgi_upload.sh extra/cgi/inst/@cgi/cgi.m extra/cgi/inst/@cgi/private/parseline.m extra/cgi/inst/@cgi/private/strsplit.m |
diffstat | 8 files changed, 81 insertions(+), 135 deletions(-) [+] |
line wrap: on
line diff
--- a/extra/cgi/DESCRIPTION Mon Jun 22 16:01:54 2015 +0000 +++ b/extra/cgi/DESCRIPTION Mon Jun 22 20:33:12 2015 +0000 @@ -1,11 +1,11 @@ Name: cgi -Version: 0.1.0 -Date: 2012-11-20 +Version: 0.1.1 +Date: 2015-06-22 Author: Alexander Barth <barth.alexander@gmail.com> Maintainer: Alexander Barth <barth.alexander@gmail.com> Title: cgi Description: Common Gatway Interface for Octave Categories: Web development -Depends: octave (>= 3.4.0) +Depends: octave (>= 3.8.0) License: GPLv2+ Url: http://octave.sf.net, http://modb.oce.ulg.ac.be/mediawiki/index.php/CGI_programming_with_Octave
--- a/extra/cgi/NEWS Mon Jun 22 16:01:54 2015 +0000 +++ b/extra/cgi/NEWS Mon Jun 22 20:33:12 2015 +0000 @@ -1,7 +1,7 @@ Summary of important user-visible changes for cgi 0.1.1: ------------------------------------------------------------------- - ** Implemented semicolon as parameter separator + ** Implement semicolon as parameter separator Summary of important user-visible changes for cgi 0.1.0: -------------------------------------------------------------------
--- a/extra/cgi/doc/test_cgi.sh Mon Jun 22 16:01:54 2015 +0000 +++ b/extra/cgi/doc/test_cgi.sh Mon Jun 22 20:33:12 2015 +0000 @@ -1,3 +1,4 @@ + export DOCUMENT_ROOT=/var/www export REQUEST_METHOD=GET export QUERY_STRING="x=50%2C1,2&y=1,2,3&len=10&name=test&field=random_field"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extra/cgi/doc/test_cgi_upload.m Mon Jun 22 20:33:12 2015 +0000 @@ -0,0 +1,3 @@ +CGI = cgi(); +assert(strcmp(getfirst(CGI,'submit-name'),'Larry')); +disp('All tests passed'); \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extra/cgi/doc/test_cgi_upload.sh Mon Jun 22 20:33:12 2015 +0000 @@ -0,0 +1,23 @@ +export DOCUMENT_ROOT=/var/www +export REQUEST_METHOD=POST +export CONTENT_TYPE=multipart/form-data + +# from http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2 + +octave -q --eval test_cgi_upload <<EOF +Content-Type: multipart/form-data; boundary=AaB03x + +--AaB03x +Content-Disposition: form-data; name="submit-name" + +Larry +--AaB03x +Content-Disposition: form-data; name="files"; filename="file1.txt" +Content-Type: text/plain + +... contents of file1.txt ... +--AaB03x-- +EOF + + +
--- a/extra/cgi/inst/@cgi/cgi.m Mon Jun 22 16:01:54 2015 +0000 +++ b/extra/cgi/inst/@cgi/cgi.m Mon Jun 22 20:33:12 2015 +0000 @@ -25,11 +25,35 @@ % POST request content_type = getenv('CONTENT_TYPE'); content_length = str2double(getenv('CONTENT_LENGTH')); - assert(content_type,'application/x-www-form-urlencoded'); - self.query_string = fscanf(stdin,'%c',content_length); + + if strcmp(content_type,'application/x-www-form-urlencoded') + self.query_string = fscanf(stdin,'%c',content_length); + + % elseif strcmp(content_type,'multipart/form-data') + % % Content-Type: multipart/form-data; boundary=AaB03x + % line = fgetl(stdin) + + % [header_type,header_value,attrib] = parseline(line); + % assert(header_type,'Content-Type'); + % assert(header_value,'multipart/form-data') + + % line = fgetl(stdin) + % line = fgetl(stdin) + % line = fgetl(stdin) + % [header_type,header_value,attrib] = parseline(line) + % line = fgetl(stdin) + % line = fgetl(stdin) + % self.params{end+1} = attrib.name; + % self.vals{end+1} = line; + + % self.query_string = ''; + + else + error('unsupported content_type %s',content_type); + end %fprintf(stderr,'query_string "%s" "%s" "%d"',self.query_string,content_type,content_length); else - error('unsupported requested method',self.request_method); + error('unsupported requested method %s',self.request_method); end @@ -38,11 +62,14 @@ for i=1:length(p) pp = strsplit(p{i},'='); - - self.params{end+1} = unquote(pp{1}); - self.vals{end+1} = unquote(pp{2}); + + if length(pp) == 2 + self.params{end+1} = unquote(pp{1}); + self.vals{end+1} = unquote(pp{2}); + end end + retval = class(self,'cgi'); % replace strings like 'abc%20def' to 'abc def'
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extra/cgi/inst/@cgi/private/parseline.m Mon Jun 22 20:33:12 2015 +0000 @@ -0,0 +1,17 @@ +% Content-Type: multipart/form-data; boundary=AaB03x +% todo: handle quotes + +function [header_type,header_value,attrib] = parseline(line) + +parts = strsplit(line,':'); +header_type = parts{1}; + +parts2 = strsplit(parts{2},';'); + +header_value = strtrim(parts2{1}); + + +for i = 2:length(parts2) + parts3 = strsplit(strtrim(parts2{i}),'='); + attrib.(strtrim(parts3{1})) = parts3{2}; +end
--- a/extra/cgi/inst/@cgi/private/strsplit.m Mon Jun 22 16:01:54 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,125 +0,0 @@ -## Copyright (C) 2009-2012 Jaroslav Hajek -## -## 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/>. -## -## FIXME: this file is here to avoid conflicts with new Octave versions. Matlab -## has recently added strplit function (used to exist in Octave only) but -## their syntax is not compatible with ours. Rather than timing the -## release of each octave forge package that used strsplit, a copy of the -## old version was placed as private. Once the new Octave version is -## released, this file can be removed, and the calls to strsplit fixed. - -## -*- texinfo -*- -## @deftypefn {Function File} {[@var{cstr}] =} strsplit (@var{s}, @var{sep}) -## @deftypefnx {Function File} {[@var{cstr}] =} strsplit (@var{s}, @var{sep}, @var{strip_empty}) -## Split the string @var{s} using one or more separators @var{sep} and return -## a cell array of strings. Consecutive separators and separators at -## boundaries result in empty strings, unless @var{strip_empty} is true. -## The default value of @var{strip_empty} is false. -## -## 2-D character arrays are split at separators and at the original column -## boundaries. -## -## Example: -## -## @example -## @group -## strsplit ("a,b,c", ",") -## @result{} -## @{ -## [1,1] = a -## [1,2] = b -## [1,3] = c -## @} -## -## strsplit (["a,b" ; "cde"], ",") -## @result{} -## @{ -## [1,1] = a -## [1,2] = b -## [1,3] = cde -## @} -## @end group -## @end example -## @seealso{strtok} -## @end deftypefn - -function cstr = strsplit (s, sep, strip_empty = false) - - if (nargin < 2 || nargin > 3) - print_usage (); - elseif (! ischar (s) || ! ischar (sep)) - error ("strsplit: S and SEP must be string values"); - elseif (! isscalar (strip_empty)) - error ("strsplit: STRIP_EMPTY must be a scalar value"); - endif - - if (isempty (s)) - cstr = cell (size (s)); - else - if (rows (s) > 1) - ## For 2-D arrays, add separator character at line boundaries - ## and transform to single string - s(:, end+1) = sep(1); - s = reshape (s.', 1, numel (s)); - s(end) = []; - endif - - ## Split s according to delimiter - if (isscalar (sep)) - ## Single separator - idx = find (s == sep); - else - ## Multiple separators - idx = strchr (s, sep); - endif - - ## Get substring lengths. - if (isempty (idx)) - strlens = length (s); - else - strlens = [idx(1)-1, diff(idx)-1, numel(s)-idx(end)]; - endif - ## Remove separators. - s(idx) = []; - if (strip_empty) - ## Omit zero lengths. - strlens = strlens(strlens != 0); - endif - - ## Convert! - cstr = mat2cell (s, 1, strlens); - endif - -endfunction - - -%!assert (strsplit ("road to hell", " "), {"road", "to", "hell"}) -%!assert (strsplit ("road to^hell", " ^"), {"road", "to", "hell"}) -%!assert (strsplit ("road to--hell", " -", true), {"road", "to", "hell"}) -%!assert (strsplit (["a,bc";",de"], ","), {"a", "bc", char(ones(1,0)), "de "}) -%!assert (strsplit (["a,bc";",de"], ",", true), {"a", "bc", "de "}) -%!assert (strsplit (["a,bc";",de"], ", ", true), {"a", "bc", "de"}) - -%% Test input validation -%!error strsplit () -%!error strsplit ("abc") -%!error strsplit ("abc", "b", true, 4) -%!error <S and SEP must be string values> strsplit (123, "b") -%!error <S and SEP must be string values> strsplit ("abc", 1) -%!error <STRIP_EMPTY must be a scalar value> strsplit ("abc", "def", ones (3,3)) -