41 #ifndef __OPENFLUID_BUDDIES_SIM2DOCBUDDY_HPP__ 42 #define __OPENFLUID_BUDDIES_SIM2DOCBUDDY_HPP__ 45 #if !defined(OPENFLUID_OS_MAC) 59 #include <boost/spirit/include/classic_core.hpp> 60 #include <boost/spirit/include/classic_file_iterator.hpp> 61 #include <boost/bind.hpp> 68 class BuddiesListener;
74 typedef std::map< std::string,std::vector<std::string> > SignatureData_t;
76 std::string m_CPPFile;
77 std::string m_LatexOutFile;
79 std::string m_InputDirPath;
80 std::string m_OutputDirPath;
81 std::string m_InputFilePath;
82 std::string m_OutputLatexFilePath;
83 std::string m_TplFilePath;
84 std::string m_CProcessedFilePath;
91 std::string m_ExtractedLatexDoc;
94 std::string m_NewCommands;
96 std::string m_SimName;
97 std::string m_SimVersion;
98 std::string m_SimStatus;
99 std::vector<std::string> m_SimAuthorsNames;
100 std::vector<std::string> m_SimAuthorsEmails;
101 std::string m_SimDomain;
102 std::string m_SimDescription;
103 std::string m_SimData;
105 std::string m_BeginSignatureTag;
106 std::string m_EndSignatureTag;
107 std::string m_BeginSim2DocTag;
108 std::string m_EndSim2DocTag;
110 std::string m_CurrentKeyValue;
111 std::string m_CurrentBuiltParam;
113 std::string m_HTMLPackageLatexCommand;
115 SignatureData_t m_InVars;
116 SignatureData_t m_OutVars;
117 SignatureData_t m_ModVars;
118 SignatureData_t m_InAttrs;
119 SignatureData_t m_OutAttrs;
120 SignatureData_t m_ParamsData;
121 SignatureData_t m_Events;
122 SignatureData_t m_ExtraFiles;
127 static std::string extractBetweenTags(std::string Content,
const std::string& BeginTag,
const std::string& EndTag);
129 static std::string toLatexFriendly(std::string Content);
131 static void addLatexDataCatBegin(std::string& Content,
const std::string& Title,
const std::string& ColsFormat);
133 static void addLatexDataCatEnd(std::string& Content);
135 std::string extractSignatureLines();
137 void copyDocDirectory();
139 void extractLatexDocFromCPP();
141 void cpreprocessCPP();
149 void buildParsedParam(
const char* First,
const char* Last);
154 void clearParsedParam();
160 void storeDataIntoString(std::string *Str);
166 void storeDataIntoVector(std::vector<std::string> *List);
174 void storeDataIntoKey(SignatureData_t *SignatureData,
const std::string& State);
180 void storeDataIntoSignatureData(SignatureData_t *SignatureData);
185 void storeDataIntoStatus();
192 void storeDataIntoUnitsClass(std::vector<openfluid::ware::SignatureUnitsClassItem> *UpdatedUnitsClass,
199 void setSchedulingFixed(
double Val);
205 void setSchedulingRange(
double Max);
212 void turnIntoLatexSyntax();
214 void processSignature();
216 void generateLatex();
218 bool isErrorInPDFLatexLog();
242 template <
typename ScannerT>
246 rule<ScannerT> blank, linemarker, endLine, escapedQuote, string, varName, element, parameters, signature,
247 IDRule, NameRule, DescriptionRule,
VersionRule, StatusRule, DomainRule, AuthorRule,
248 UsedParamRule, RequiredParamRule,
249 ProducedVarRule, UpdatedVarRule, RequiredVarRule, UsedVarRule,
250 ProducedAttributeRule, RequiredAttributeRule, UsedAttributeRule,
252 UsedExtraFilesRule, RequiredExtraFilesRule,
253 UpdatedUnitsGraphRule, UpdatedUnitsClassRule;
269 signature = str_p(
"BEGIN_SIMULATOR_SIGNATURE") >> *blank >>
'(' >> IDRule >>
')' >> endLine
270 >> *(str_p(
"DECLARE_NAME") >> *blank >>
'(' >> NameRule >>
')' >> endLine
271 | str_p(
"DECLARE_DESCRIPTION") >> *blank >>
'(' >> DescriptionRule >>
')' >> endLine
272 | str_p(
"DECLARE_VERSION") >> *blank >>
'(' >> VersionRule >>
')' >> endLine
273 | str_p(
"DECLARE_SDKVERSION") >> endLine
274 | str_p(
"DECLARE_STATUS") >> *blank >>
'(' >> StatusRule >>
')' >> endLine
275 | str_p(
"DECLARE_DOMAIN") >> *blank >>
'(' >> DomainRule >>
')' >> endLine
276 | str_p(
"DECLARE_PROCESS") >> *blank >>
'(' >> parameters >>
')' >> endLine
277 | str_p(
"DECLARE_METHOD") >> *blank >>
'(' >> parameters >>
')' >> endLine
278 | str_p(
"DECLARE_AUTHOR") >> *blank >>
'(' >> AuthorRule >>
')' >> endLine
280 | str_p(
"DECLARE_REQUIRED_PARAMETER") >> *blank >>
'(' >> RequiredParamRule >>
')' >> endLine
281 | str_p(
"DECLARE_USED_PARAMETER") >> *blank >>
'(' >> UsedParamRule >>
')' >> endLine
284 | str_p(
"DECLARE_SIMULATOR_PARAM") >> *blank >>
'(' >> UsedParamRule >>
')' >> endLine
286 | str_p(
"DECLARE_PRODUCED_VARIABLE") >> *blank >>
'(' >> ProducedVarRule >>
')' >> endLine
287 | str_p(
"DECLARE_UPDATED_VARIABLE") >> *blank >>
'(' >> UpdatedVarRule >>
')' >> endLine
288 | str_p(
"DECLARE_REQUIRED_VARIABLE") >> *blank >>
'(' >> RequiredVarRule >>
')' >> endLine
289 | str_p(
"DECLARE_USED_VARIABLE") >> *blank >>
'(' >> UsedVarRule >>
')' >> endLine
292 | str_p(
"DECLARE_PRODUCED_VAR") >> *blank >>
'(' >> ProducedVarRule >>
')' >> endLine
293 | str_p(
"DECLARE_UPDATED_VAR") >> *blank >>
'(' >> UpdatedVarRule >>
')' >> endLine
294 | str_p(
"DECLARE_REQUIRED_VAR") >> *blank >>
'(' >> RequiredVarRule >>
')' >> endLine
295 | str_p(
"DECLARE_USED_VAR") >> *blank >>
'(' >> UsedVarRule >>
')' >> endLine
297 | str_p(
"DECLARE_PRODUCED_ATTRIBUTE") >> *blank >>
'(' >> ProducedAttributeRule >>
')' >> endLine
298 | str_p(
"DECLARE_REQUIRED_ATTRIBUTE") >> *blank >>
'(' >> RequiredAttributeRule >>
')' >> endLine
299 | str_p(
"DECLARE_USED_ATTRIBUTE") >> *blank >>
'(' >> UsedAttributeRule >>
')' >> endLine
301 | str_p(
"DECLARE_USED_EVENTS") >> *blank >>
'(' >> UsedEventsRule >>
')' >> endLine
302 | str_p(
"DECLARE_USED_EXTRAFILE") >> *blank >>
'(' >> UsedExtraFilesRule >>
')' >> endLine
303 | str_p(
"DECLARE_REQUIRED_EXTRAFILE") >> *blank >>
'(' >> RequiredExtraFilesRule >>
')' >> endLine
305 | str_p(
"DECLARE_UPDATED_UNITSGRAPH") >> *blank >>
'(' >> UpdatedUnitsGraphRule >>
')' >> endLine
306 | str_p(
"DECLARE_UPDATED_UNITSCLASS") >> *blank >>
'(' >> UpdatedUnitsClassRule >>
')' >> endLine
308 | str_p(
"DECLARE_SCHEDULING_UNDEFINED")[boost::bind(&ware::SignatureTimeScheduling::setAsUndefined,
309 &
self.mp_Owner->m_TimeScheduling)] >> endLine
310 | str_p(
"DECLARE_SCHEDULING_DEFAULT")[boost::bind(
311 &ware::SignatureTimeScheduling::setAsDefaultDeltaT,
312 &
self.mp_Owner->m_TimeScheduling)] >> endLine
313 | str_p(
"DECLARE_SCHEDULING_FIXED") >> *blank >>
'(' >> *blank
314 >> real_p[boost::bind(&Sim2DocBuddy::setSchedulingFixed,
self.mp_Owner, _1)]
315 >> *blank >>
')' >> endLine
316 | str_p(
"DECLARE_SCHEDULING_RANGE") >> *blank >>
'(' 317 >> *blank >> real_p[boost::bind(&Sim2DocBuddy::setSchedulingFixed,
self.mp_Owner, _1)]
319 >> *blank >> real_p[boost::bind(&Sim2DocBuddy::setSchedulingRange,
self.mp_Owner, _1)]
320 >> *blank >>
')' >> endLine
322 | linemarker >> endLine
324 >> str_p(
"END_SIMULATOR_SIGNATURE") >> endLine
333 linemarker =
'#' >> *(anychar_p - eol_p) >> eol_p;
335 blank = blank_p | eol_p;
336 endLine = *(blank |
';');
337 escapedQuote = str_p(
"\\\"");
339 string = *(escapedQuote | (anychar_p -
'"'));
341 varName = *(print_p -
')');
344 element = (+(*blank >>
'"' >>
string[boost::bind(&Sim2DocBuddy::buildParsedParam,
self.mp_Owner, _1, _2)]
346 | (*blank >> varName[boost::bind(&Sim2DocBuddy::buildParsedParam,
self.mp_Owner, _1, _2)]
350 parameters = element[boost::bind(&Sim2DocBuddy::clearParsedParam,
self.mp_Owner)]
351 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::clearParsedParam,
self.mp_Owner)]);
358 element[boost::bind(&Sim2DocBuddy::storeDataIntoString,
self.mp_Owner, &
self.mp_Owner->m_SimID)];
360 element[boost::bind(&Sim2DocBuddy::storeDataIntoString,
self.mp_Owner, &
self.mp_Owner->m_SimName)];
362 element[boost::bind(&Sim2DocBuddy::storeDataIntoString,
self.mp_Owner, &
self.mp_Owner->m_SimDescription)];
364 element[boost::bind(&Sim2DocBuddy::storeDataIntoString,
self.mp_Owner, &
self.mp_Owner->m_SimVersion)];
366 StatusRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoStatus,
self.mp_Owner)];
369 element[boost::bind(&Sim2DocBuddy::storeDataIntoString,
self.mp_Owner, &
self.mp_Owner->m_SimDomain)];
371 element[boost::bind(&Sim2DocBuddy::storeDataIntoVector,
self.mp_Owner, &
self.mp_Owner->m_SimAuthorsNames)]
373 element[boost::bind(&Sim2DocBuddy::storeDataIntoVector,
self.mp_Owner,
374 &
self.mp_Owner->m_SimAuthorsEmails)];
376 UsedParamRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
377 self.mp_Owner, &
self.mp_Owner->m_ParamsData,
"used")]
378 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
379 self.mp_Owner, &
self.mp_Owner->m_ParamsData)]);
380 RequiredParamRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
381 self.mp_Owner, &
self.mp_Owner->m_ParamsData,
"required")]
382 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
383 self.mp_Owner, &
self.mp_Owner->m_ParamsData)]);
385 ProducedVarRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner,
386 &
self.mp_Owner->m_OutVars,
"produced")]
387 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
388 self.mp_Owner, &
self.mp_Owner->m_OutVars)]);
389 UpdatedVarRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner,
390 &
self.mp_Owner->m_OutVars,
"updated")]
391 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
392 self.mp_Owner, &
self.mp_Owner->m_OutVars)]);
393 RequiredVarRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner,
394 &
self.mp_Owner->m_InVars,
"required")]
395 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
396 self.mp_Owner, &
self.mp_Owner->m_InVars)]);
397 UsedVarRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner,
398 &
self.mp_Owner->m_InVars,
"used")]
399 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
400 self.mp_Owner, &
self.mp_Owner->m_InVars)]);
402 ProducedAttributeRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner,
403 &
self.mp_Owner->m_OutAttrs,
"produced")]
404 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
self.mp_Owner,
405 &
self.mp_Owner->m_OutAttrs)]);
406 RequiredAttributeRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner,
407 &
self.mp_Owner->m_InAttrs,
"required")]
408 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
self.mp_Owner,
409 &
self.mp_Owner->m_InAttrs)]);
410 UsedAttributeRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner,
411 &
self.mp_Owner->m_InAttrs,
"used")]
412 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
self.mp_Owner,
413 &
self.mp_Owner->m_InAttrs)]);
415 UsedEventsRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner,
416 &
self.mp_Owner->m_Events,
"")];
417 UsedExtraFilesRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner,
418 &
self.mp_Owner->m_ExtraFiles,
"used")];
419 RequiredExtraFilesRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner,
420 &
self.mp_Owner->m_ExtraFiles,
"required")];
422 UpdatedUnitsGraphRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoString,
self.mp_Owner,
424 UpdatedUnitsClassRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoUnitsClass,
self.mp_Owner,
426 >>
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoUnitsClass,
self.mp_Owner,
433 rule<ScannerT>
const&
start()
const {
return signature; }
rule< ScannerT > const & start() const
Definition: Sim2DocBuddy.hpp:433
std::string UpdatedUnitsGraph
Definition: SimulatorSignature.hpp:227
std::vector< SignatureUnitsClassItem > UpdatedUnitsClass
Definition: SimulatorSignature.hpp:229
#define OPENFLUID_API
Definition: dllexport.hpp:87
SimSignatureGrammar(Sim2DocBuddy *Owner)
Definition: Sim2DocBuddy.hpp:239
rule< ScannerT > VersionRule
Definition: Sim2DocBuddy.hpp:246
Definition: OpenFLUIDBuddy.hpp:55
definition(SimSignatureGrammar const &self)
Definition: Sim2DocBuddy.hpp:265
Definition: ApplicationException.hpp:47
Definition: SimulatorSignature.hpp:223
Sim2DocBuddy * mp_Owner
Definition: Sim2DocBuddy.hpp:238
Definition: Sim2DocBuddy.hpp:236
Definition: ExternalProgram.hpp:53
Definition: BuddiesListener.hpp:55
Definition: Sim2DocBuddy.hpp:71
Definition: Sim2DocBuddy.hpp:243
Definition: SimulatorSignature.hpp:250