41 #ifndef __SIM2DOCBUDDY_H___
42 #define __SIM2DOCBUDDY_H___
51 #include <boost/filesystem/path.hpp>
59 #include <boost/spirit/include/classic_core.hpp>
60 #include <boost/spirit/include/classic_file_iterator.hpp>
61 #include <boost/bind.hpp>
65 using namespace BOOST_SPIRIT_CLASSIC_NS;
67 namespace openfluid {
namespace buddies {
69 class BuddiesListener;
75 typedef std::map< std::string,std::vector<std::string> > SignatureData_t;
77 std::string m_CPPFile;
78 std::string m_LatexOutFile;
80 boost::filesystem::path m_InputDirPath;
81 boost::filesystem::path m_OutputDirPath;
82 boost::filesystem::path m_InputFilePath;
83 boost::filesystem::path m_OutputLatexFilePath;
84 boost::filesystem::path m_TplFilePath;
85 boost::filesystem::path m_CProcessedFilePath;
92 std::string m_ExtractedLatexDoc;
95 std::string m_NewCommands;
97 std::string m_SimName;
98 std::string m_SimVersion;
99 std::string m_SimStatus;
100 std::vector<std::string> m_SimAuthorsNames;
101 std::vector<std::string> m_SimAuthorsEmails;
102 std::string m_SimDomain;
103 std::string m_SimDescription;
104 std::string m_SimData;
106 std::string m_BeginSignatureTag;
107 std::string m_EndSignatureTag;
108 std::string m_BeginSim2DocTag;
109 std::string m_EndSim2DocTag;
111 std::string m_CurrentKeyValue;
112 std::string m_CurrentBuiltParam;
114 std::string m_HTMLPackageLatexCommand;
116 SignatureData_t m_InVars;
117 SignatureData_t m_OutVars;
118 SignatureData_t m_ModVars;
119 SignatureData_t m_InAttrs;
120 SignatureData_t m_OutAttrs;
121 SignatureData_t m_ParamsData;
122 SignatureData_t m_Events;
123 SignatureData_t m_ExtraFiles;
128 std::string extractBetweenTags(std::string Content,
const std::string BeginTag,
const std::string EndTag);
130 std::string toLatexFriendly(std::string Content);
132 void addLatexDataCatBegin(std::string& Content,
const std::string Title,
const std::string ColsFormat);
134 void addLatexDataCatEnd(std::string& Content);
136 std::string extractSignatureLines();
138 std::vector<std::string> searchStringLitterals(std::string StrToParse);
140 void copyDocDirectory();
142 void extractLatexDocFromCPP();
144 void cpreprocessCPP();
152 void buildParsedParam(
const char* First,
const char* Last);
157 void clearParsedParam();
163 void storeDataIntoString(std::string *Str);
169 void storeDataIntoVector(std::vector<std::string> *List);
177 void storeDataIntoKey(SignatureData_t *SignatureData,
const std::string& State);
183 void storeDataIntoSignatureData(SignatureData_t *SignatureData);
188 void storeDataIntoStatus();
195 void storeDataIntoUnitsClass(std::vector<openfluid::ware::SignatureHandledUnitsClassItem> *UpdatedUnitsClass,
202 void setSchedulingFixed(
double Val);
208 void setSchedulingRange(
double Max);
215 void turnIntoLatexSyntax();
217 void processSignature();
219 void generateLatex();
221 bool isErrorInPDFLatexLog();
245 template <
typename ScannerT>
249 rule<ScannerT> blank, linemarker, endLine, escapedQuote, string, varName, element, parameters, signature,
250 IDRule, NameRule, DescriptionRule,
VersionRule, StatusRule, DomainRule, AuthorRule,
251 SimulatorParamRule, ProducedVarRule, UpdatedVarRule, RequiredVarRule, UsedVarRule,
252 ProducedAttributeRule, RequiredAttributeRule, UsedAttributeRule,
253 UsedEventsRule, UsedExtraFilesRule, RequiredExtraFilesRule,
254 UpdatedUnitsGraphRule, UpdatedUnitsClassRule;
270 signature = str_p(
"BEGIN_SIMULATOR_SIGNATURE") >> *blank >>
'(' >> IDRule >>
')' >> endLine
271 >> *(str_p(
"DECLARE_NAME") >> *blank >>
'(' >> NameRule >>
')' >> endLine
272 | str_p(
"DECLARE_DESCRIPTION") >> *blank >>
'(' >> DescriptionRule >>
')' >> endLine
273 | str_p(
"DECLARE_VERSION") >> *blank >>
'(' >> VersionRule >>
')' >> endLine
274 | str_p(
"DECLARE_SDKVERSION") >> endLine
275 | str_p(
"DECLARE_STATUS") >> *blank >>
'(' >> StatusRule >>
')' >> endLine
276 | str_p(
"DECLARE_DOMAIN") >> *blank >>
'(' >> DomainRule >>
')' >> endLine
277 | str_p(
"DECLARE_PROCESS") >> *blank >>
'(' >> parameters >>
')' >> endLine
278 | str_p(
"DECLARE_METHOD") >> *blank >>
'(' >> parameters >>
')' >> endLine
279 | str_p(
"DECLARE_AUTHOR") >> *blank >>
'(' >> AuthorRule >>
')' >> endLine
281 | str_p(
"DECLARE_SIMULATOR_PARAM") >> *blank >>
'(' >> SimulatorParamRule >>
')' >> endLine
283 | str_p(
"DECLARE_PRODUCED_VAR") >> *blank >>
'(' >> ProducedVarRule >>
')' >> endLine
284 | str_p(
"DECLARE_UPDATED_VAR") >> *blank >>
'(' >> UpdatedVarRule >>
')' >> endLine
285 | str_p(
"DECLARE_REQUIRED_VAR") >> *blank >>
'(' >> RequiredVarRule >>
')' >> endLine
286 | str_p(
"DECLARE_USED_VAR") >> *blank >>
'(' >> UsedVarRule >>
')' >> endLine
288 | str_p(
"DECLARE_PRODUCED_ATTRIBUTE") >> *blank >>
'(' >> ProducedAttributeRule >>
')' >> endLine
289 | str_p(
"DECLARE_REQUIRED_ATTRIBUTE") >> *blank >>
'(' >> RequiredAttributeRule >>
')' >> endLine
290 | str_p(
"DECLARE_USED_ATTRIBUTE") >> *blank >>
'(' >> UsedAttributeRule >>
')' >> endLine
292 | str_p(
"DECLARE_USED_EVENTS") >> *blank >>
'(' >> UsedEventsRule >>
')' >> endLine
293 | str_p(
"DECLARE_USED_EXTRAFILE") >> *blank >>
'(' >> UsedExtraFilesRule >>
')' >> endLine
294 | str_p(
"DECLARE_REQUIRED_EXTRAFILE") >> *blank >>
'(' >> RequiredExtraFilesRule >>
')' >> endLine
296 | str_p(
"DECLARE_UPDATED_UNITSGRAPH") >> *blank >>
'(' >> UpdatedUnitsGraphRule >>
')' >> endLine
297 | str_p(
"DECLARE_UPDATED_UNITSCLASS") >> *blank >>
'(' >> UpdatedUnitsClassRule >>
')' >> endLine
299 | str_p(
"DECLARE_SCHEDULING_UNDEFINED")[boost::bind(&ware::SignatureTimeScheduling::setAsUndefined,
300 &
self.mp_Owner->m_TimeScheduling)] >> endLine
301 | str_p(
"DECLARE_SCHEDULING_DEFAULT")[boost::bind(&ware::SignatureTimeScheduling::setAsDefaultDeltaT,
302 &
self.mp_Owner->m_TimeScheduling)] >> endLine
303 | str_p(
"DECLARE_SCHEDULING_FIXED") >> *blank >>
'(' >> *blank >> real_p[boost::bind(&Sim2DocBuddy::setSchedulingFixed,
self.mp_Owner, _1)]
304 >> *blank >>
')' >> endLine
305 | str_p(
"DECLARE_SCHEDULING_RANGE") >> *blank >>
'(' >> *blank >> real_p[boost::bind(&Sim2DocBuddy::setSchedulingFixed,
self.mp_Owner, _1)]
306 >> *blank >>
',' >> *blank >> real_p[boost::bind(&Sim2DocBuddy::setSchedulingRange,
self.mp_Owner, _1)] >> *blank >>
')' >> endLine
308 | linemarker >> endLine
310 >> str_p(
"END_SIMULATOR_SIGNATURE") >> endLine
319 linemarker =
'#' >> *(anychar_p - eol_p) >> eol_p;
321 blank = blank_p | eol_p;
322 endLine = *(blank |
';');
323 escapedQuote = str_p(
"\\\"");
325 string = *(escapedQuote | (anychar_p -
'"'));
327 varName = *(print_p -
')');
330 element = (+(*blank >>
'"' >>
string[boost::bind(&Sim2DocBuddy::buildParsedParam,
self.mp_Owner, _1, _2)] >>
'"' >> *blank))
331 | (*blank >> varName[boost::bind(&Sim2DocBuddy::buildParsedParam,
self.mp_Owner, _1, _2)] >> *blank);
334 parameters = element[boost::bind(&Sim2DocBuddy::clearParsedParam,
self.mp_Owner)]
335 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::clearParsedParam,
self.mp_Owner)]);
341 IDRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoString,
self.mp_Owner, &
self.mp_Owner->m_SimID)];
342 NameRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoString,
self.mp_Owner, &
self.mp_Owner->m_SimName)];
343 DescriptionRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoString,
self.mp_Owner, &
self.mp_Owner->m_SimDescription)];
344 VersionRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoString,
self.mp_Owner, &
self.mp_Owner->m_SimVersion)];
346 StatusRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoStatus,
self.mp_Owner)];
348 DomainRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoString,
self.mp_Owner, &
self.mp_Owner->m_SimDomain)];
349 AuthorRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoVector,
self.mp_Owner, &
self.mp_Owner->m_SimAuthorsNames)]
350 >>
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoVector,
self.mp_Owner, &
self.mp_Owner->m_SimAuthorsEmails)];
352 SimulatorParamRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner, &
self.mp_Owner->m_ParamsData,
"")]
353 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
self.mp_Owner, &
self.mp_Owner->m_ParamsData)]);
355 ProducedVarRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner, &
self.mp_Owner->m_OutVars,
"produced")]
356 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
self.mp_Owner, &
self.mp_Owner->m_OutVars)]);
357 UpdatedVarRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner, &
self.mp_Owner->m_OutVars,
"updated")]
358 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
self.mp_Owner, &
self.mp_Owner->m_OutVars)]);
359 RequiredVarRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner, &
self.mp_Owner->m_InVars,
"required")]
360 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
self.mp_Owner, &
self.mp_Owner->m_InVars)]);
361 UsedVarRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner, &
self.mp_Owner->m_InVars,
"used")]
362 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
self.mp_Owner, &
self.mp_Owner->m_InVars)]);
364 ProducedAttributeRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner, &
self.mp_Owner->m_OutAttrs,
"produced")]
365 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
self.mp_Owner, &
self.mp_Owner->m_OutAttrs)]);
366 RequiredAttributeRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner, &
self.mp_Owner->m_InAttrs,
"required")]
367 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
self.mp_Owner, &
self.mp_Owner->m_InAttrs)]);
368 UsedAttributeRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner, &
self.mp_Owner->m_InAttrs,
"used")]
369 >> *(
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoSignatureData,
self.mp_Owner, &
self.mp_Owner->m_InAttrs)]);
371 UsedEventsRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner, &
self.mp_Owner->m_Events,
"")];
372 UsedExtraFilesRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner, &
self.mp_Owner->m_ExtraFiles,
"used")];
373 RequiredExtraFilesRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoKey,
self.mp_Owner, &
self.mp_Owner->m_ExtraFiles,
"required")];
375 UpdatedUnitsGraphRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoString,
self.mp_Owner, &
self.mp_Owner->m_UnitsGraph.UpdatedUnitsGraph)];
376 UpdatedUnitsClassRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoUnitsClass,
self.mp_Owner, &
self.mp_Owner->m_UnitsGraph.UpdatedUnitsClass, 1)]
377 >>
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoUnitsClass,
self.mp_Owner, &
self.mp_Owner->m_UnitsGraph.UpdatedUnitsClass, 2)];
383 rule<ScannerT>
const&
start()
const {
return signature; }
Definition: SimulatorSignature.hpp:384
Definition: Sim2DocBuddy.hpp:239
Sim2DocBuddy * mp_Owner
Definition: Sim2DocBuddy.hpp:241
Definition: OpenFLUIDBuddy.hpp:54
SimSignatureGrammar(Sim2DocBuddy *Owner)
Definition: Sim2DocBuddy.hpp:242
Definition: SimulatorSignature.hpp:369
Definition: Sim2DocBuddy.hpp:246
definition(SimSignatureGrammar const &self)
Definition: Sim2DocBuddy.hpp:266
rule< ScannerT > VersionRule
Definition: Sim2DocBuddy.hpp:249
Definition: ExternalProgram.hpp:54
Definition: BuddiesListener.hpp:55
Definition: Sim2DocBuddy.hpp:72
rule< ScannerT > const & start() const
Definition: Sim2DocBuddy.hpp:383
#define DLLEXPORT
Definition: dllexport.hpp:51