Mercurial > hg > ltpda
diff m-toolbox/classes/+utils/@prog/mcell2str.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/+utils/@prog/mcell2str.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,120 @@ +% MCELL2STR recursively converts a cell-array to an executable string. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: MCELL2STR recursively converts a cell-array to an executable +% string. +% +% CALL: s = wrapstring(s, n) +% +% INPUTS: s - String +% n - max length of each cell +% +% OUTPUTS: s - the wrapped cell string +% +% VERSION: $Id: mcell2str.m,v 1.8 2010/08/18 15:19:30 ingo Exp $ +% +% HISTORY: 05-02-2007 M Hewitson +% Creation +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function fstr = mcell2str(c) + + %----- Check the input + if ~iscell(c) + error('### The input must be a cell but it is from the class [%s]', class(c)); + end + + if isempty(c) + fstr = sprintf('cell(%d,%d)', size(c, 1), size(c,2)); + else + fstr = '{'; + Nj = size(c,1); + Nk = size(c,2); + for jj=1:Nj + for kk=1:Nk + if iscell(c{jj,kk}) + %----- cell + fstr = [fstr utils.prog.mcell2str(c{jj,kk}) ',']; + + elseif ischar(c{jj,kk}) + %----- char + fstr = sprintf('%s''%s'', ', fstr, strrep(c{jj, kk}, '''', '''''')); + + elseif isa(c{jj,kk}, 'sym') + %----- sym + fstr = [fstr 'sym(''' char(c{jj,kk}) '''),']; + + elseif isnumeric(c{jj,kk}) + %----- numeric + fstr = [fstr utils.helper.mat2str(c{jj,kk}) ',']; + + elseif islogical(c{jj,kk}) + %----- logical + fstr = [fstr utils.helper.mat2str(c{jj,kk}) ',']; + + elseif isjava(c{jj,kk}) + %----- java + if strcmp(class(c{jj,kk}), 'sun.util.calendar.ZoneInfo') + fstr = [fstr 'java.util.TimeZone.getTimeZone(''' char(getID(c{jj,kk})) '''),']; + else + error('### Unknown java object [%s]', class(c{jj,kk})); + end + + elseif isa(c{jj,kk}, 'ltpda_obj') + %----- ltpda_obj + + if isa(c{jj,kk}, 'history') + %----- history + cl = history.getObjectClass(c{jj,kk}); + ncl = numel(c{jj,kk}); + cstr = '['; + for ll=1:ncl + cstr = [cstr sprintf('%s(%s)', cl, string(c{jj,kk}(ll).plistUsed)) ', ']; + end + cstr = strtrim(cstr); + cstr(end) = ']'; + fstr = sprintf('%s%s, ', fstr, cstr); + else + fstr = sprintf('%s%s, ', fstr, string(c{jj,kk})); + end + + elseif isstruct(c{jj,kk}) + %----- structure + fn = fieldnames(c{jj,kk}); + fstr = [fstr 'struct(']; + for ii=1:numel(fn) + obj = c{jj,kk}; + if ischar(obj.(fn{ii})) + fstr = [fstr '''' fn{ii} ''',''' obj.(fn{ii}) ''',']; + elseif isnumeric(obj.(fn{ii})) || islogical(obj.(fn{ii})) + fstr = [fstr '''' fn{ii} ''',' utils.helper.mat2str(obj.(fn{ii})) ',']; + elseif isa(obj.(fn{ii}), 'sym') + fstr = [fstr '''' fn{ii} ''',' 'sym(''' char(obj.(fn{ii})) '''),']; + elseif isa(obj.(fn{ii}), 'ltpda_obj') + fstr = [fstr '''' fn{ii} ''',' string(obj.(fn{ii})) ',']; + end + end + fstr = [fstr(1:end-1) '),']; + + else + disp(c{jj,kk}); + error(['### unknown cell content: ' class(c{jj,kk})]); + end + end + fstr = strtrim(fstr); + if fstr(end) == ',' + fstr = fstr(1:end-1); + end + fstr = [fstr ';']; + end + + fstr = strtrim(fstr); + if fstr(end) == ',' + fstr = fstr(1:end-1); + end + if fstr(end) == ';' + fstr = fstr(1:end-1); + end + fstr = [fstr '}']; + end +end