X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/c7f552fd8888da2f0d8cfb228fe0f28d3df3a12c..b4b6f2ea75b9f0f3ca918f5b84016610bf7a4d4f:/interpretor/faust-0.9.47mr3/compiler/generator/description.cpp diff --git a/interpretor/faust-0.9.47mr3/compiler/generator/description.cpp b/interpretor/faust-0.9.47mr3/compiler/generator/description.cpp deleted file mode 100644 index eacd9a0..0000000 --- a/interpretor/faust-0.9.47mr3/compiler/generator/description.cpp +++ /dev/null @@ -1,339 +0,0 @@ -//------------------------------------ -// generation of an xml description -//------------------------------------ -#include -#include -#include - -#include "description.hh" -#include "Text.hh" - -/** - * Extracts metdata from a label : 'vol [unit: dB]' -> 'vol' + metadata - */ -void extractMetadata(const string& fulllabel, string& label, map >& metadata) -{ - enum {kLabel, kEscape1, kEscape2, kEscape3, kKey, kValue}; - int state = kLabel; int deep = 0; - string key, value; - - for (size_t i=0; i < fulllabel.size(); i++) { - char c = fulllabel[i]; - switch (state) { - case kLabel : - assert (deep == 0); - switch (c) { - case '\\' : state = kEscape1; break; - case '[' : state = kKey; deep++; break; - default : label += c; - } - break; - - case kEscape1 : - label += c; - state = kLabel; - break; - - case kEscape2 : - key += c; - state = kKey; - break; - - case kEscape3 : - value += c; - state = kValue; - break; - - case kKey : - assert (deep > 0); - switch (c) { - case '\\' : state = kEscape2; - break; - - case '[' : deep++; - key += c; - break; - - case ':' : if (deep == 1) { - state = kValue; - } else { - key += c; - } - break; - case ']' : deep--; - if (deep < 1) { - metadata[rmWhiteSpaces(key)].insert(""); - state = kLabel; - key=""; - value=""; - } else { - key += c; - } - break; - default : key += c; - } - break; - - case kValue : - assert (deep > 0); - switch (c) { - case '\\' : state = kEscape3; - break; - - case '[' : deep++; - value += c; - break; - - case ']' : deep--; - if (deep < 1) { - metadata[rmWhiteSpaces(key)].insert(rmWhiteSpaces(value)); - state = kLabel; - key=""; - value=""; - } else { - value += c; - } - break; - default : value += c; - } - break; - - default : - cerr << "ERROR unrecognized state " << state << endl; - } - } - label = rmWhiteSpaces(label); -} - -//------------------------ specific schema ------------------------- - -string extractName(Tree fulllabel) -{ - string name; - map > metadata; - - extractMetadata(tree2str(fulllabel), name, metadata); - return name; -} - - -/** - * removes enclosing quotes and transforms '<', '>' and '&' characters - */ -static string xmlize(const string& fullsrc) -{ - map > metadata; - string dst; - string src; - - extractMetadata(fullsrc, src, metadata); - - for (size_t i=0; i' : dst += ">"; break; - case '&' : dst += "&"; break; - default : dst += src[i]; - } - } - } - return dst; -} - -void Description::print(int n, ostream& fout) -{ - list::iterator s; - list::iterator t; - - tab(n,fout); fout << ""; - - tab(n+1,fout); fout << "" << xmlize(fName) << ""; - tab(n+1,fout); fout << "" << xmlize(fAuthor) << ""; - tab(n+1,fout); fout << "" << xmlize(fCopyright) << ""; - tab(n+1,fout); fout << "" << xmlize(fLicense) << ""; - tab(n+1,fout); fout << "" << xmlize(fVersion) << ""; - tab(n+1,fout); fout << "" << fInputs << ""; - tab(n+1,fout); fout << "" << fOutputs << ""; - - tab(n+1,fout); fout << ""; - - // active widget list - tab(n+2,fout); fout << ""; - tab(n+3,fout); fout << "" << fActiveWidgetCount << ""; - for (s = fActiveLines.begin(); s != fActiveLines.end(); s++) { - tab(n+3, fout); fout << *s; - } - tab(n+2,fout); fout << ""; - - tab(n+2,fout); - - // passive widget list - tab(n+2,fout); fout << ""; - tab(n+3,fout); fout << "" << fPassiveWidgetCount << ""; - for (s = fPassiveLines.begin(); s != fPassiveLines.end(); s++) { - tab(n+3, fout); fout << *s; - } - tab(n+2,fout); fout << ""; - - - tab(n+2,fout); - - // widget layout - tab(n+2,fout); fout << ""; - for ( t = fLayoutTabs.begin(), s = fLayoutLines.begin(); - s != fLayoutLines.end(); t++, s++) { - tab(n+3+*t, fout); fout << *s; - } - tab(n+2,fout); fout << ""; - - tab(n+1,fout); fout << ""; - - - tab(n,fout); fout << "" << endl; - -} - -void Description::ui(Tree t) -{ - addGroup(0,t); -} - - -void Description::addGroup(int level, Tree t) -{ - Tree label, elements, varname, sig; - const char* groupnames[] = {"vgroup", "hgroup", "tgroup"}; - - if (isUiFolder(t, label, elements)) { - - const int orient = tree2int(left(label)); - const char * str = tree2str(right(label)); - - addLayoutLine(level, subst("", groupnames[orient])); - addLayoutLine(level+1, subst("", xmlize(str))); - while (!isNil(elements)) { - addGroup(level+1, right(hd(elements))); - elements = tl(elements); - } - addLayoutLine(level, ""); - - } else if (isUiWidget(t, label, varname, sig)) { - - int w = addWidget(label, varname, sig); - addLayoutLine(level, subst("", T(w))); - - } else { - - fprintf(stderr, "error in user interface generation 2\n"); - exit(1); - - } -} - -void Description::tab (int n, ostream& fout) -{ - fout << '\n'; - while (n--) fout << '\t'; -} - -int Description::addWidget(Tree label, Tree varname, Tree sig) -{ - Tree path, c, x, y, z; - - // add an active widget description - - if ( isSigButton(sig, path) ) { - - fWidgetID++; - fActiveWidgetCount++; - addActiveLine(subst("", T(fWidgetID))); - addActiveLine(subst("\t", xmlize(tree2str(label)))); - addActiveLine(subst("\t$0", tree2str(varname))); - addActiveLine(""); - - } else if ( isSigCheckbox(sig, path) ) { - - fWidgetID++; - fActiveWidgetCount++; - addActiveLine(subst("", T(fWidgetID))); - addActiveLine(subst("\t", xmlize(tree2str(label)))); - addActiveLine(subst("\t$0", tree2str(varname))); - addActiveLine(""); - - } else if ( isSigVSlider(sig, path,c,x,y,z) ) { - - fWidgetID++; - fActiveWidgetCount++; - addActiveLine(subst("", T(fWidgetID))); - addActiveLine(subst("\t", xmlize(tree2str(label)))); - addActiveLine(subst("\t$0", tree2str(varname))); - addActiveLine(subst("\t$0", T(tree2double(c)))); - addActiveLine(subst("\t$0", T(tree2double(x)))); - addActiveLine(subst("\t$0", T(tree2double(y)))); - addActiveLine(subst("\t$0", T(tree2double(z)))); - addActiveLine(""); - - } else if ( isSigHSlider(sig, path,c,x,y,z) ) { - - fWidgetID++; - fActiveWidgetCount++; - addActiveLine(subst("", T(fWidgetID))); - addActiveLine(subst("\t", xmlize(tree2str(label)))); - addActiveLine(subst("\t$0", tree2str(varname))); - addActiveLine(subst("\t$0", T(tree2double(c)))); - addActiveLine(subst("\t$0", T(tree2double(x)))); - addActiveLine(subst("\t$0", T(tree2double(y)))); - addActiveLine(subst("\t$0", T(tree2double(z)))); - addActiveLine(""); - - } else if ( isSigNumEntry(sig, path,c,x,y,z) ) { - - fWidgetID++; - fActiveWidgetCount++; - addActiveLine(subst("", T(fWidgetID))); - addActiveLine(subst("\t", xmlize(tree2str(label)))); - addActiveLine(subst("\t$0", tree2str(varname))); - addActiveLine(subst("\t$0", T(tree2double(c)))); - addActiveLine(subst("\t$0", T(tree2double(x)))); - addActiveLine(subst("\t$0", T(tree2double(y)))); - addActiveLine(subst("\t$0", T(tree2double(z)))); - addActiveLine(""); - - - // add a passive widget description - - } else if ( isSigVBargraph(sig,path,x,y,z) ) { - - fWidgetID++; - fPassiveWidgetCount++; - addPassiveLine(subst("", T(fWidgetID))); - addPassiveLine(subst("\t", xmlize(tree2str(label)))); - addPassiveLine(subst("\t$0", tree2str(varname))); - addPassiveLine(subst("\t$0", T(tree2double(x)))); - addPassiveLine(subst("\t$0", T(tree2double(y)))); - addPassiveLine(""); - - } else if ( isSigHBargraph(sig,path,x,y,z) ) { - - fWidgetID++; - fPassiveWidgetCount++; - addPassiveLine(subst("", T(fWidgetID))); - addPassiveLine(subst("\t", xmlize(tree2str(label)))); - addPassiveLine(subst("\t$0", tree2str(varname))); - addPassiveLine(subst("\t$0", T(tree2double(x)))); - addPassiveLine(subst("\t$0", T(tree2double(y)))); - addPassiveLine(""); - - } else { - fprintf(stderr, "Error describing widget : unrecognized expression\n"); - exit(1); - } - - return fWidgetID; -} - - -