function model = mttFetchApps(filename) if ~mttFileExists(filename) model = [] ; return ; end model.representation = 'apps' ; mttNotify(['...processing ',filename]) ; mttWriteNewLine ; model.source = mttCutText(filename,'_apps.txt') ; model_name = mttDetachText(model.source,'/') ; content = mttReadFile(filename) ; statements = mttExtractStatements(content) ; number_of_statements = length(statements) ; apps_declared = 0 ; next = 0 ; parsing = 1 ; while parsing next = next + 1 ; statement = statements{next} ; [keyword,line] = mttSeparateText(statement) ; switch keyword case 'apps', mttAssert(~apps_declared,... '"apps" declaration must be unique') ; apps_declared = 1 ; apps_name = line ; mttAssert(strcmp(apps_name,model_name),... ['Wrong name:[',apps_name,'] Expecting:[',model_name,']']) ; [apps,next] = fetch_apps(statements,next) ; model = mttAppendFields(model,apps) ; case '{', error('Unexpected "{" found') ; case '}', error('Unexpected "}" found') ; otherwise, error(['Unrecognised top-level keyword "',keyword,'"']) ; end if next==number_of_statements parsing = 0 ; end end function [apps,next] = fetch_apps(statements,next) apps = [] ; unit_name = 'apps' ; number_of_statements = length(statements) ; open = 0 ; counter = 0 ; parsing = 1 ; while parsing next = next + 1 ; statement = statements{next} ; [keyword,line] = mttSeparateText(statement) ; switch keyword case 'app', mttAssert(open,... ['"app" declarations must be contained inside {...} in "',unit_name,'"']) ; app_name = line ; counter = counter + 1 ; apps.app{counter} = app_name ; case '{', mttAssert(~open,['Unmatched "{" in "',unit_name,'"']) ; open = 1 ; case '}', mttAssert(open,['Unmatched "}" in "',unit_name,'"']) ; open = 0 ; otherwise, error(['Unrecognised_keyword "',keyword,'" in "',unit_name,'"']) ; end mttAssert(~(open & (next==number_of_statements)),... ['Missing "}" in "',unit_name,'"']) ; if (~open) | (next==number_of_statements) parsing = 0 ; end end apps = mttSetFieldDefault(apps,'app',[]) ;