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
+