0001 function splitc = splitcode(code)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 iquote = findstr(code,'''');
0015 quotetransp = [double('_''.)}]') ...
0016 double('A'):double('Z') ...
0017 double('0'):double('9') ...
0018 double('a'):double('z')];
0019 flagstring = 0;
0020 flagdoublequote = 0;
0021 jquote = [];
0022 for i=1:length(iquote)
0023 if ~flagstring
0024 if iquote(i) > 1 & any(quotetransp == double(code(iquote(i)-1)))
0025
0026 else
0027
0028 jquote(size(jquote,1)+1,:) = [iquote(i) length(code)];
0029 flagstring = 1;
0030 end
0031 else
0032 if flagdoublequote | ...
0033 (iquote(i) < length(code) & strcmp(code(iquote(i)+1),''''))
0034
0035 flagdoublequote = ~flagdoublequote;
0036 else
0037
0038 jquote(size(jquote,1),2) = iquote(i);
0039 flagstring = 0;
0040 end
0041 end
0042 end
0043
0044
0045 ipercent = findstr(code,'%');
0046 jpercent = [];
0047 for i=1:length(ipercent)
0048 if isempty(jquote) | ...
0049 ~any((ipercent(i) > jquote(:,1)) & (ipercent(i) < jquote(:,2)))
0050 jpercent = [ipercent(i) length(code)];
0051 break;
0052 end
0053 end
0054
0055
0056 icont = findstr(code,'...');
0057 for i=1:length(icont)
0058 if (isempty(jquote) | ...
0059 ~any((icont(i) > jquote(:,1)) & (icont(i) < jquote(:,2)))) & ...
0060 (isempty(jpercent) | ...
0061 icont(i) < jpercent(1))
0062 jpercent = [icont(i) length(code)];
0063 break;
0064 end
0065 end
0066
0067
0068 if ~isempty(jpercent) & ~isempty(jquote)
0069 jquote(find(jquote(:,1) > jpercent(1)),:) = [];
0070 end
0071
0072
0073 icode = [jquote ; jpercent];
0074 splitc = {};
0075 if isempty(icode)
0076 splitc{1} = code;
0077 elseif icode(1,1) > 1
0078 splitc{1} = code(1:icode(1,1)-1);
0079 end
0080 for i=1:size(icode,1)
0081 splitc{end+1} = code(icode(i,1):icode(i,2));
0082 if i < size(icode,1) & icode(i+1,1) > icode(i,2) + 1
0083 splitc{end+1} = code((icode(i,2)+1):(icode(i+1,1)-1));
0084 elseif i == size(icode,1) & icode(i,2) < length(code)
0085 splitc{end+1} = code(icode(i,2)+1:end);
0086 end
0087 end