Location: cellLib @ 71a79f4273eb / Scripts / readComp.m

Author:
WeiweiAi <wai484@aucklanduni.ac.nz>
Date:
2022-04-22 10:49:38+12:00
Desc:
Remove interactive labeling; Specify index when using intersect to avoid order errors add buildComponents.m to wrap multiple building processes;
Permanent Source URI:
https://models.cellml.org/workspace/6bc/rawfile/71a79f4273ebfe232057a071766138694777ab84/Scripts/readComp.m

function comp=readComp(filename)
fid = fopen(filename);
comp={};
tline = fgetl(fid);
vars=[];
k = 0; % Counter for components.
while ischar(tline)
    compLocation = strfind(tline, '<component name=');
    if ~isempty(compLocation)
        k = k + 1;
        comp(k).name=string(extractBetween(tline,'"','"'));
        comp(k).children=[];
    end
    compEnd=strfind(tline, '</component>');
    if ~isempty(compEnd)
        comp(k).vars=vars;
        vars=[];
    end
    varLocation = strfind(tline, '<variable');
    if ~isempty(varLocation)
        vname=string(extractBetween(tline,'name="','"'));
        unit=string(extractBetween(tline,'units="','"'));
        init=string(extractBetween(tline,'initial_value="','"'));
        pub=string(extractBetween(tline,'public_interface="','"'));
        priv=string(extractBetween(tline,'private_interface="','"'));
        ctg="Para"; %default category is parameter
        if isempty(init)
            init="none";
        else            
            if (pub=="out")
                ctg=pub;
            else
                ctg="interVar";
            end
        end
        if isempty(pub)
            pub="none";
            ctg="interVar";
        else
            if pub=="out" %cannot be para; if "in", could be para or input, need to manually check later
                ctg=pub;
            end
        end        
        if isempty(priv)
            priv="none";        
        end        
        
        var=[vname,init,unit,init,pub,priv,"",ctg];
        vars=[vars;var];
    end
    tline = fgetl(fid);
end
fclose(fid);
end