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> 
   64 using namespace BOOST_SPIRIT_CLASSIC_NS;
 
   66 namespace openfluid { 
namespace buddies {
 
   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,
 
  423                                                       &
self.mp_Owner->m_UnitsGraph.UpdatedUnitsGraph)];
 
  424           UpdatedUnitsClassRule = element[boost::bind(&Sim2DocBuddy::storeDataIntoUnitsClass, 
self.mp_Owner,
 
  425                                                       &
self.mp_Owner->m_UnitsGraph.UpdatedUnitsClass, 1)]
 
  426                   >> 
',' >> element[boost::bind(&Sim2DocBuddy::storeDataIntoUnitsClass, 
self.mp_Owner,
 
  427                                                 &
self.mp_Owner->m_UnitsGraph.UpdatedUnitsClass, 2)];
 
  433         rule<ScannerT> 
const& 
start()
 const { 
return signature; }
 
Definition: SimulatorSignature.hpp:223
Definition: SimulatorSignature.hpp:250
Definition: BuddiesListener.hpp:55
definition(SimSignatureGrammar const &self)
Definition: Sim2DocBuddy.hpp:265
Definition: OpenFLUIDBuddy.hpp:55
SimSignatureGrammar(Sim2DocBuddy *Owner)
Definition: Sim2DocBuddy.hpp:239
Definition: Sim2DocBuddy.hpp:243
rule< ScannerT > VersionRule
Definition: Sim2DocBuddy.hpp:246
Definition: ExternalProgram.hpp:53
Definition: Sim2DocBuddy.hpp:236
Definition: Sim2DocBuddy.hpp:71
#define OPENFLUID_API
Definition: dllexport.hpp:87
rule< ScannerT > const & start() const 
Definition: Sim2DocBuddy.hpp:433
Sim2DocBuddy * mp_Owner
Definition: Sim2DocBuddy.hpp:238