00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <iostream>
00024 #include <fstream>
00025 #include <set>
00026 #include <time.h>
00027 #include <cstdlib>
00028 #include <errno.h>
00029
00030 #include "doc_notice.hh"
00031 #include "doc_lang.hh"
00032 #include "enrobage.hh"
00033 #include "compatibility.hh"
00034
00035
00036 map<string, bool> gDocNoticeFlagMap;
00037
00038 map<string, string> gDocNoticeStringMap;
00039 set<string> gDocNoticeKeySet;
00040
00041 static void initDocNoticeKeySet();
00042 static void initDocNoticeFlagMap();
00043 static void initCompilationDate();
00044 static void printDocNoticeStringMapContent();
00045
00046 static struct tm* getCompilationDate();
00047 static struct tm gCompilationDate;
00048
00049
00050
00051
00052
00053
00054
00055
00068 void printDocNotice(const string& faustversion, ostream& docout) {
00069
00070 if (! gDocNoticeStringMap.empty() ) {
00071
00072
00073
00074 docout << endl << "\\begin{itemize}" << endl;
00075
00076
00077 if(gDocNoticeFlagMap["compilstamp1"] && gDocNoticeFlagMap["compilstamp2"] && gDocNoticeFlagMap["compilstamp3"]) {
00078 char datebuf [150];
00079 strftime (datebuf, 150, "%B %d, %Y", getCompilationDate());
00080 docout << "\t\\item " << gDocNoticeStringMap["compilstamp1"] << faustversion;
00081 docout << gDocNoticeStringMap["compilstamp2"] << datebuf;
00082 docout << gDocNoticeStringMap["compilstamp3"] << endl;
00083 }
00084
00085
00086 if(gDocNoticeFlagMap["svgdir"]) docout << "\t\\item " << gDocNoticeStringMap["svgdir"] << endl;
00087 if(gDocNoticeFlagMap["nameconflicts"]) docout << "\t\\item " << gDocNoticeStringMap["nameconflicts"] << endl;
00088 if(gDocNoticeFlagMap["causality"]) docout << "\t\\item " << gDocNoticeStringMap["causality"] << endl;
00089
00090
00091 if(gDocNoticeFlagMap["fsamp"]) docout << "\t\\item " << gDocNoticeStringMap["fsamp"] << endl;
00092 if(gDocNoticeFlagMap["foreignfun"]) docout << "\t\\item " << gDocNoticeStringMap["foreignfun"] << endl;
00093 if(gDocNoticeFlagMap["intcast"]) docout << "\t\\item " << gDocNoticeStringMap["intcast"] << endl;
00094 if(gDocNoticeFlagMap["cdot"]) docout << "\t\\item " << gDocNoticeStringMap["cdot"] << endl;
00095
00096
00097 if(gDocNoticeFlagMap["intplus"] ||
00098 gDocNoticeFlagMap["intminus"] ||
00099 gDocNoticeFlagMap["intmult"] ||
00100 gDocNoticeFlagMap["intdiv"])
00101 {
00102 if(gDocNoticeFlagMap["intplus"]) docout << "\t\\item " << gDocNoticeStringMap["intplus"] << endl;
00103 if(gDocNoticeFlagMap["intminus"]) docout << "\t\\item " << gDocNoticeStringMap["intminus"] << endl;
00104 if(gDocNoticeFlagMap["intmult"]) docout << "\t\\item " << gDocNoticeStringMap["intmult"] << endl;
00105 if(gDocNoticeFlagMap["intdiv"]) docout << "\t\\item " << gDocNoticeStringMap["intdiv"] << endl;
00106 }
00107
00108
00109 if(gDocNoticeFlagMap["inputsig"]) docout << "\t\\item " << gDocNoticeStringMap["inputsig"] << endl;
00110 if(gDocNoticeFlagMap["inputsigs"]) docout << "\t\\item " << gDocNoticeStringMap["inputsigs"] << endl;
00111 if(gDocNoticeFlagMap["outputsig"]) docout << "\t\\item " << gDocNoticeStringMap["outputsig"] << endl;
00112 if(gDocNoticeFlagMap["outputsigs"]) docout << "\t\\item " << gDocNoticeStringMap["outputsigs"] << endl;
00113 if(gDocNoticeFlagMap["constsigs"]) docout << "\t\\item " << gDocNoticeStringMap["constsigs"] << endl;
00114 if(gDocNoticeFlagMap["paramsigs"]) docout << "\t\\item " << gDocNoticeStringMap["paramsigs"] << endl;
00115 if(gDocNoticeFlagMap["storedsigs"]) docout << "\t\\item " << gDocNoticeStringMap["storedsigs"] << endl;
00116 if(gDocNoticeFlagMap["buttonsigs"]) docout << "\t\\item " << gDocNoticeStringMap["buttonsigs"] << endl;
00117 if(gDocNoticeFlagMap["checkboxsigs"]) docout << "\t\\item " << gDocNoticeStringMap["checkboxsigs"] << endl;
00118 if(gDocNoticeFlagMap["slidersigs"]) docout << "\t\\item " << gDocNoticeStringMap["slidersigs"] << endl;
00119 if(gDocNoticeFlagMap["nentrysigs"]) docout << "\t\\item " << gDocNoticeStringMap["nentrysigs"] << endl;
00120 if(gDocNoticeFlagMap["tablesigs"]) docout << "\t\\item " << gDocNoticeStringMap["tablesigs"] << endl;
00121 if(gDocNoticeFlagMap["recursigs"]) docout << "\t\\item " << gDocNoticeStringMap["recursigs"] << endl;
00122 if(gDocNoticeFlagMap["prefixsigs"]) docout << "\t\\item " << gDocNoticeStringMap["prefixsigs"] << endl;
00123 if(gDocNoticeFlagMap["selectionsig"]) docout << "\t\\item " << gDocNoticeStringMap["selectionsig"] << endl;
00124 if(gDocNoticeFlagMap["selectionsigs"]) docout << "\t\\item " << gDocNoticeStringMap["selectionsigs"] << endl;
00125
00126 docout << "\\end{itemize}" << endl << endl;
00127 }
00128
00129 }
00130
00131
00140 void initDocNotice()
00141 {
00142 initDocNoticeKeySet();
00143 initDocNoticeFlagMap();
00144 }
00145
00146
00147
00148
00149
00150
00151
00152
00153
00157 static void initDocNoticeKeySet() {
00158
00159 gDocNoticeKeySet.insert("causality");
00160 gDocNoticeKeySet.insert("compilstamp1");
00161 gDocNoticeKeySet.insert("compilstamp2");
00162 gDocNoticeKeySet.insert("compilstamp3");
00163 gDocNoticeKeySet.insert("nameconflicts");
00164 gDocNoticeKeySet.insert("svgdir");
00165
00166 gDocNoticeKeySet.insert("fsamp");
00167 gDocNoticeKeySet.insert("foreignfun");
00168 gDocNoticeKeySet.insert("cdot");
00169 gDocNoticeKeySet.insert("intcast");
00170
00171 gDocNoticeKeySet.insert("intplus");
00172 gDocNoticeKeySet.insert("intminus");
00173 gDocNoticeKeySet.insert("intmult");
00174 gDocNoticeKeySet.insert("intdiv");
00175
00176 gDocNoticeKeySet.insert("inputsig");
00177 gDocNoticeKeySet.insert("inputsigs");
00178 gDocNoticeKeySet.insert("outputsig");
00179 gDocNoticeKeySet.insert("outputsigs");
00180 gDocNoticeKeySet.insert("constsigs");
00181 gDocNoticeKeySet.insert("paramsigs");
00182 gDocNoticeKeySet.insert("storedsigs");
00183 gDocNoticeKeySet.insert("recursigs");
00184 gDocNoticeKeySet.insert("prefixsigs");
00185 gDocNoticeKeySet.insert("selectionsig");
00186 gDocNoticeKeySet.insert("selectionsigs");
00187
00188 gDocNoticeKeySet.insert("buttonsigs");
00189 gDocNoticeKeySet.insert("checkboxsigs");
00190 gDocNoticeKeySet.insert("slidersigs");
00191 gDocNoticeKeySet.insert("nentrysigs");
00192 gDocNoticeKeySet.insert("tablesigs");
00193 }
00194
00195
00199 static void initDocNoticeFlagMap() {
00200
00201 for (set<string>::iterator it=gDocNoticeKeySet.begin(); it != gDocNoticeKeySet.end() ; ++it ) {
00202 gDocNoticeFlagMap[*it] = false;
00203 }
00204
00205 gDocNoticeFlagMap["compilstamp1"] = true;
00206 gDocNoticeFlagMap["compilstamp2"] = true;
00207 gDocNoticeFlagMap["compilstamp3"] = true;
00208 gDocNoticeFlagMap["causality"] = true;
00209 }
00210
00211
00215 static void printDocNoticeStringMapContent() {
00216 bool trace = false;
00217 if(trace) {
00218 cout << "gDocNoticeStringMap.size() = " << gDocNoticeStringMap.size() << endl;
00219 map<string,string>::iterator it;
00220 int i = 1;
00221 for(it = gDocNoticeStringMap.begin(); it!=gDocNoticeStringMap.end(); ++it)
00222 cout << i++ << ".\tgDocNoticeStringMap[" << it->first << "] \t= '" << it->second << "'" << endl;
00223 }
00224 }
00225
00226
00227
00228
00229
00230
00231 static struct tm* getCompilationDate()
00232 {
00233 initCompilationDate();
00234 return &gCompilationDate;
00235 }
00236
00237
00238 static void initCompilationDate()
00239 {
00240 time_t now;
00241
00242 time(&now);
00243 gCompilationDate = *localtime(&now);
00244 }
00245