40 #ifndef __OPENFLUID_BUDDIES_SIM2DOCBUDDY_HPP__    41 #define __OPENFLUID_BUDDIES_SIM2DOCBUDDY_HPP__    44 #if OPENFLUID_SIM2DOC_ENABLED    53 #include <boost/spirit/include/classic_core.hpp>    54 #include <boost/spirit/include/classic_file_iterator.hpp>    55 #include <boost/bind.hpp>    57 #include <openfluid/config.hpp>    64 using namespace BOOST_SPIRIT_CLASSIC_NS;
    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     std::string m_InputDirPath;
    81     std::string m_OutputDirPath;
    82     std::string m_InputFilePath;
    83     std::string m_OutputLatexFilePath;
    84     std::string m_TplFilePath;
    85     std::string 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     static std::string extractBetweenTags(std::string Content, 
const std::string& BeginTag, 
const std::string& EndTag);
   130     static std::string toLatexFriendly(std::string Content);
   132     static void addLatexDataCatBegin(std::string& Content, 
const std::string& Title, 
const std::string& ColsFormat);
   134     static void addLatexDataCatEnd(std::string& Content);
   136     std::string extractSignatureLines();
   138     void copyDocDirectory();
   140     void extractLatexDocFromCPP();
   142     void cpreprocessCPP();
   150     void buildParsedParam(
const char* First, 
const char* Last);
   155     void clearParsedParam();
   161     void storeDataIntoString(std::string *Str);
   167     void storeDataIntoVector(std::vector<std::string> *List);
   175     void storeDataIntoKey(SignatureData_t *SignatureData, 
const std::string& State);
   181     void storeDataIntoSignatureData(SignatureData_t *SignatureData);
   186     void storeDataIntoStatus();
   193     void storeDataIntoUnitsClass(std::vector<openfluid::ware::SignatureUnitsClassItem> *UpdatedUnitsClass,
   200     void setSchedulingFixed(
double Val);
   206     void setSchedulingRange(
double Max);
   213     void turnIntoLatexSyntax();
   215     void processSignature();
   217     void generateLatex();
   219     bool isErrorInPDFLatexLog();
   237     struct SimSignatureGrammar : 
public grammar<SimSignatureGrammar>
   239       Sim2DocBuddy *mp_Owner;       
   240       SimSignatureGrammar(Sim2DocBuddy *Owner) : mp_Owner(Owner) {}
   243       template <
typename ScannerT>
   247         rule<ScannerT> blank, linemarker, endLine, escapedQuote, string, varName, element, parameters, signature,
   248                         IDRule, NameRule, DescriptionRule, VersionRule, StatusRule, DomainRule, AuthorRule,
   249                         UsedParamRule, RequiredParamRule,
   250                         ProducedVarRule, UpdatedVarRule, RequiredVarRule, UsedVarRule,
   251                         ProducedAttributeRule, RequiredAttributeRule, UsedAttributeRule,
   253                         UsedExtraFilesRule, RequiredExtraFilesRule,
   254                         UpdatedUnitsGraphRule, UpdatedUnitsClassRule;
   266         definition(SimSignatureGrammar 
const& 
self)
   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_REQUIRED_PARAMETER") >> *blank >> 
'(' >> RequiredParamRule >> 
')' >> endLine
   282                     | str_p(
"DECLARE_USED_PARAMETER") >> *blank >> 
'(' >> UsedParamRule >> 
')' >> endLine
   285                     | str_p(
"DECLARE_SIMULATOR_PARAM") >> *blank >> 
'(' >> UsedParamRule >> 
')' >> endLine
   287                     | str_p(
"DECLARE_PRODUCED_VARIABLE") >> *blank >> 
'(' >> ProducedVarRule >> 
')' >> endLine
   288                     | str_p(
"DECLARE_UPDATED_VARIABLE") >> *blank >> 
'(' >> UpdatedVarRule >> 
')' >> endLine
   289                     | str_p(
"DECLARE_REQUIRED_VARIABLE") >> *blank >> 
'(' >> RequiredVarRule >> 
')' >> endLine
   290                     | str_p(
"DECLARE_USED_VARIABLE") >> *blank >> 
'(' >> UsedVarRule >> 
')' >> endLine
   293                     | str_p(
"DECLARE_PRODUCED_VAR") >> *blank >> 
'(' >> ProducedVarRule >> 
')' >> endLine
   294                     | str_p(
"DECLARE_UPDATED_VAR") >> *blank >> 
'(' >> UpdatedVarRule >> 
')' >> endLine
   295                     | str_p(
"DECLARE_REQUIRED_VAR") >> *blank >> 
'(' >> RequiredVarRule >> 
')' >> endLine
   296                     | str_p(
"DECLARE_USED_VAR") >> *blank >> 
'(' >> UsedVarRule >> 
')' >> endLine
   298                     | str_p(
"DECLARE_PRODUCED_ATTRIBUTE") >> *blank >> 
'(' >> ProducedAttributeRule >> 
')' >> endLine
   299                     | str_p(
"DECLARE_REQUIRED_ATTRIBUTE") >> *blank >> 
'(' >> RequiredAttributeRule >> 
')' >> endLine
   300                     | str_p(
"DECLARE_USED_ATTRIBUTE") >> *blank >> 
'(' >> UsedAttributeRule >> 
')' >> endLine
   302                     | str_p(
"DECLARE_USED_EVENTS") >> *blank >> 
'(' >> UsedEventsRule >> 
')' >> endLine
   303                     | str_p(
"DECLARE_USED_EXTRAFILE") >> *blank >> 
'(' >> UsedExtraFilesRule >> 
')' >> endLine
   304                     | str_p(
"DECLARE_REQUIRED_EXTRAFILE") >> *blank >> 
'(' >> RequiredExtraFilesRule >> 
')' >> endLine
   306                     | str_p(
"DECLARE_UPDATED_UNITSGRAPH") >> *blank >> 
'(' >> UpdatedUnitsGraphRule >> 
')' >> endLine
   307                     | str_p(
"DECLARE_UPDATED_UNITSCLASS") >> *blank >> 
'(' >> UpdatedUnitsClassRule >> 
')' >> endLine
   309                     | str_p(
"DECLARE_SCHEDULING_UNDEFINED")[boost::bind(&ware::SignatureTimeScheduling::setAsUndefined,
   310                         &
self.mp_Owner->m_TimeScheduling)] >> endLine
   311                     | str_p(
"DECLARE_SCHEDULING_DEFAULT")[boost::bind(
   312                         &ware::SignatureTimeScheduling::setAsDefaultDeltaT,
   313                         &
self.mp_Owner->m_TimeScheduling)] >> endLine
   314                     | str_p(
"DECLARE_SCHEDULING_FIXED") >> *blank >> 
'(' >> *blank
   315                             >> real_p[boost::bind(&Sim2DocBuddy::setSchedulingFixed, 
self.mp_Owner, _1)]
   316                             >> *blank >> 
')' >> endLine
   317                     | str_p(
"DECLARE_SCHEDULING_RANGE") >> *blank >> 
'('   318                             >> *blank >> real_p[boost::bind(&Sim2DocBuddy::setSchedulingFixed, 
self.mp_Owner, _1)]
   320                             >> *blank >> real_p[boost::bind(&Sim2DocBuddy::setSchedulingRange, 
self.mp_Owner, _1)]
   321                             >> *blank >>  
')' >> endLine
   323                     | linemarker >> endLine
   325               >> str_p(
"END_SIMULATOR_SIGNATURE") >> endLine
   334           linemarker =  
'#' >> *(anychar_p - eol_p) >> eol_p;
   336           blank = blank_p | eol_p;                        
   337           endLine = *(blank | 
';');
   338           escapedQuote = str_p(
"\\\"");
   340           string = *(escapedQuote | (anychar_p - 
'"'));   
   342           varName = *(print_p - 
')');
   345           element = (+(*blank >> 
'"' >> 
string[boost::bind(&Sim2DocBuddy::buildParsedParam, 
self.mp_Owner, _1, _2)]
   347                       | (*blank >> varName[boost::bind(&Sim2DocBuddy::buildParsedParam, 
self.mp_Owner, _1, _2)]
   351           parameters = element[boost::bind(&Sim2DocBuddy::clearParsedParam, 
self.mp_Owner)]
   352            >> *(
',' >> 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:221
 
Definition: ExternalProgram.hpp:54
 
Definition: BuddiesListener.hpp:54
 
#define OPENFLUID_API
Definition: dllexport.hpp:86
 
Definition: ApplicationException.hpp:47
 
Definition: SimulatorSignature.hpp:248