Mercurial > hg > ltpda
diff m-toolbox/classes/@plist/string.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/@plist/string.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,181 @@ +% STRING converts a plist object to a command string which will recreate the plist object. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: STRING converts a plist object to a command string which will +% recreate the plist object. +% +% CALL: cmd = string(pl) +% +% <a href="matlab:utils.helper.displayMethodInfo('plist', 'string')">Parameters Description</a> +% +% VERSION: $Id: string.m,v 1.45 2011/04/08 08:56:21 hewitson Exp $ +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +function varargout = string(varargin) + + %%% Check if this is a call for parameters + if utils.helper.isinfocall(varargin{:}) + varargout{1} = getInfo(varargin{3}); + return + end + + objs = utils.helper.collect_objects(varargin(:), 'plist'); + + pstr = '['; + + for ll = 1:numel(objs) + pl = objs(ll); + pstr = sprintf('%splist(', pstr); + for j=1:pl.nparams + p = pl.params(j); + pVal = p.getVal; + if ischar(pVal) + %---- CHAR + val = sprintf('''%s''', strrep(pVal, '''', '''''')); + + elseif isnumeric(pVal) + %---- NUMERIC + val = sprintf('[%s]', utils.helper.mat2str(pVal)); + + elseif islogical(pVal) + %---- LOGICAL + val = sprintf('[%s]', mat2str(pVal)); + + elseif isjava(pVal) + %---- JAVA + if strcmp(class(pVal), 'sun.util.calendar.ZoneInfo') + val = sprintf('java.util.TimeZone.getTimeZone(''%s'')',char(pVal.getID)); + else + error('### Unknown java object [%s]', class(pVal)); + end + + elseif iscell(pVal) + %---- CELL + val = sprintf('%s', utils.prog.mcell2str(pVal)); + + elseif isstruct(pVal) + %---- STRUCT + ss = pVal; + ss_str = '['; + fields = fieldnames(ss); + for oo = 1:numel(pVal) + ss_str = sprintf('%s struct(', ss_str); + for ii = 1:numel(fields) + if isnumeric(ss(oo).(fields{ii})) || islogical(ss(oo).(fields{ii})) + ss_str = sprintf('%s''%s'', [%s], ', ss_str, fields{ii}, mat2str(ss(oo).(fields{ii}), 17)); + elseif ischar(ss(oo).(fields{ii})) + ss_str = sprintf('%s''%s'', ''%s'', ',ss_str, fields{ii}, strrep(ss(oo).(fields{ii}), '''', '''''')); + elseif isa(ss(oo).(fields{ii}), 'ltpda_obj') + ss_str = sprintf('%s''%s'', %s, ', ss_str, fields{ii}, string(ss(oo).(fields{ii}))); + elseif isa(ss(oo).(fields{ii}), 'sym') + symstr = char(ss(oo).(fields{ii})); + ss_str = sprintf('%s''%s'', sym(''%s''), ', ss_str, fields{ii}, symstr); + elseif isjava(ss(oo).(fields{ii})) + if strcmp(class(ss(oo).(fields{ii})), 'sun.util.calendar.ZoneInfo') + ss_str = sprintf('%s''%s'', java.util.TimeZone.getTimeZone(''%s''), ', ss_str, fields{ii}, char(getID(ss(oo).(fields{ii})))); + else + error('### Unknown java object [%s]', class(ss(oo).(fields{ll}))); + end + else + error('### Unknown type [%s] in struct', class(ss(oo).(fields{ii}))); + end + end + ss_str = [ss_str(1:end-2), ')']; + end + val = sprintf('%s]', ss_str); + + elseif isa(pVal, 'sym') + %---- SYM + val = sprintf('sym(''%s'')', char(pVal)); + + elseif isa(pVal, 'history') + %---- HISTORY + if ~isa(pVal.inhists, 'history') + cmds = hist2m(pVal); + [s,r] = strtok(cmds{2}, '='); + val = regexprep(strtrim(r(2:end)), ';[ ]*%.*', ''); + else + error('### Can not run string on an object containing history. Use type() instead.'); + end + + elseif isa(pVal, 'ltpda_nuo') || isa(pVal, 'plist') + %---- Non-user object or plist + val = string(pVal); + + elseif isa(pVal, 'ltpda_uoh') + %---- Object with history + if isempty(pVal.hist) + val = string(pVal); + else + if ~isa(pVal.hist.inhists, 'history') + cmds = hist2m(pVal.hist); + [s,r] = strtok(cmds{2}, '='); + val = regexprep(strtrim(r(2:end)), ';[ ]*%.*', ''); + else + error('### Can not run string on an object containing history. Use type() instead.'); + end + end + else + error('!!! Can not handle the class [%s].', class(pVal)); + end + + pstr = sprintf('%s''%s'', %s, ', pstr, p.key, val); + + end + + pstr = strtrim(pstr); + if pstr(end)==',' + pstr = pstr(1:end-1); + end + + % close bracket + pstr = [pstr '), ']; + end + + % Finish string + pstr = strtrim(pstr); + pstr = pstr(1:end-1); + pstr = [pstr ']']; + + varargout{1} = pstr; +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Local Functions % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% FUNCTION: getInfo +% +% DESCRIPTION: Get Info Object +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +function ii = getInfo(varargin) + if nargin == 1 && strcmpi(varargin{1}, 'None') + sets = {}; + pl = []; + else + sets = {'Default'}; + pl = getDefaultPlist; + end + % Build info object + ii = minfo(mfilename, 'plist', 'ltpda', utils.const.categories.helper, '$Id: string.m,v 1.45 2011/04/08 08:56:21 hewitson Exp $', sets, pl); + ii.setModifier(false); + ii.setArgsmin(1); +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% FUNCTION: getDefaultPlist +% +% DESCRIPTION: Get Default Plist +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +function plo = getDefaultPlist() + plo = plist(); +end +