--- /dev/null
+%% Copyright (c) 2011 Juan Pablo Carbajal <carbajal@ifi.uzh.ch>
+%%
+%% This program 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
+%% any later version.
+%%
+%% This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+
+function Paths = loadpaths (obj, svg, varargin)
+
+ here = which ("@svg/loadpaths");
+ here = fileparts (here);
+ script = fullfile (here, 'parsePath.py');
+
+ %% Call python script
+ if exist (svg,'file')
+ % read from file
+ [st str]=system (sprintf ('python %s %s', script, svg));
+
+ else
+ % inline SVG
+ [st str]=system (sprintf ('python %s < %s', script, svg));
+ end
+
+ %% Parse ouput
+ strpath = strsplit (str(1:end-1), '$', true);
+
+ npaths = numel (strpath);
+
+ %% Convert path data to polynoms
+ for ip = 1:npaths
+
+ eval (strpath{ip});
+ %% FIXME: intialize struct with cell field
+ svgpath2.cmd = svgpath(1).cmd;
+ svgpath2.data = {svgpath.data};
+
+ nD = length(svgpath2.cmd);
+ pathdata = cell (nD-1,1);
+
+ point_end=[];
+ %% If the path is closed, last command is Z and we set initial point == final
+ if svgpath2.cmd(end) == 'Z'
+ nD -= 1;
+ point_end = svgpath2.data{1};
+ svgpath2.data(end) = [];
+ end
+
+ %% Initial point
+ points(1,:) = svgpath2.data{1};
+
+ for jp = 2:nD
+ switch svgpath2.cmd(jp)
+ case 'L'
+ %% Straigth segment to polygon
+ points(2,:) = svgpath2.data{jp};
+ pp = [(points(2,:)-points(1,:))' points(1,:)'];
+ clear points
+ points(1,:) = [polyval(pp(1,:),1) polyval(pp(2,:),1)];
+
+ case 'C'
+ %% Cubic bezier to polygon
+ points(2:4,:) = reshape (svgpath2.data{jp}, 2, 3).';
+ pp = cbezier2poly (points);
+ clear points
+ points(1,:) = [polyval(pp(1,:),1) polyval(pp(2,:),1)];
+ end
+
+ pathdata{jp-1} = pp;
+ end
+
+ if ~isempty(point_end)
+ %% Straight segment to close the path
+ points(2,:) = point_end;
+ pp = [(points(2,:)-points(1,:))' points(1,:)'];
+
+ if all ( abs(pp(:,1)) < sqrt(eps) )
+ % Final point of last segment is already initial point
+ pathdata(end) = [];
+ else
+ pathdata{end} = pp;
+ end
+
+ end
+ %% TODO
+ % pathdata = shapetransform(pathdata);
+
+ Paths.(svgpathid).data = pathdata;
+ end
+endfunction