]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkInterpreter.cxx
wxButtonExecBlackBox
[bbtk.git] / kernel / src / bbtkInterpreter.cxx
index c5a69ca1a5f6f44060f4f38c71161d7a32730e2f..5b0c26e81faa4f9e18fe6f8c0ed279241de2b0e2 100644 (file)
@@ -3,8 +3,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkInterpreter.cxx,v $ $
   Language:  C++
   Program:   bbtk
   Module:    $RCSfile: bbtkInterpreter.cxx,v $ $
   Language:  C++
-  Date:      $Date: 2008/02/05 12:16:55 $
-  Version:   $Revision: 1.24 $
+  Date:      $Date: 2008/02/06 10:53:02 $
+  Version:   $Revision: 1.28 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -54,6 +54,7 @@ Interpreter* Interpreter::mGlobalInterpreter = NULL;
 
     //    mFactory = new bbtk::Factory();
     mExecuter = new bbtk::Executer();
 
     //    mFactory = new bbtk::Factory();
     mExecuter = new bbtk::Executer();
+    //mExecuter = new bbtk::Transcriptor("GeneratedProgram.txt");
     //mExecuter->SetFactory(mFactory);
 
     // Builds the commands dict
     //mExecuter->SetFactory(mFactory);
 
     // Builds the commands dict
@@ -170,7 +171,7 @@ Interpreter* Interpreter::mGlobalInterpreter = NULL;
 
     info.syntax = "index [<filename> ['Initials'(default)|'Packages'|'Categories']]";
     info.help = "Creates an html index of known boxes. If filename is provided then save it to the file 'filename'. The default index entries are the initial letters of the names of the boxes. If 'Packages' or 'Categories' is provided then the entries are either the packages names or the categories";
 
     info.syntax = "index [<filename> ['Initials'(default)|'Packages'|'Categories']]";
     info.help = "Creates an html index of known boxes. If filename is provided then save it to the file 'filename'. The default index entries are the initial letters of the names of the boxes. If 'Packages' or 'Categories' is provided then the entries are either the packages names or the categories";
-    mCommandDict[info.keyword] = info;
+    mCommandDict[info.category] = info;
 
     info.category = "reset";  //EED
     info.argmin = 0;
 
     info.category = "reset";  //EED
     info.argmin = 0;
@@ -222,10 +223,10 @@ Interpreter* Interpreter::mGlobalInterpreter = NULL;
 
     info.category = "include";
     info.argmin = 1;
 
     info.category = "include";
     info.argmin = 1;
-    info.argmax = 1;
+    info.argmax = 2;
     info.code = cInclude;
     info.code = cInclude;
-    info.syntax = "include <filename>";
-    info.help = "Includes the file <filename>";
+    info.syntax = "include <filename> [source]";
+    info.help = "Includes the file <filename>.\n  'source' : If the keyword 'source' is provided then informs bbi that the included file is the source of the current box definition (Advanced; used to get the right 'Include' field in html doc of packages 'appli' scripts).";
     mCommandDict[info.category] = info;
 
     info.category = "quit";
     mCommandDict[info.category] = info;
 
     info.category = "quit";
@@ -297,7 +298,7 @@ Interpreter* Interpreter::mGlobalInterpreter = NULL;
    *  
    */
   void Interpreter::InterpretFile( const std::string& filename,  
    *  
    */
   void Interpreter::InterpretFile( const std::string& filename,  
-                                  bool use_configuration_file)
+                                   bool use_configuration_file)
   {
     bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretFile(\""<<filename<<"\")"<<std::endl);
 
   {
     bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretFile(\""<<filename<<"\")"<<std::endl);
 
@@ -463,7 +464,7 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
       case cDefine :
         if (mFileName.size()>0) 
         {
       case cDefine :
         if (mFileName.size()>0) 
         {
-           filename = Utilities::get_file_name(mFileName.back());
+         filename = mIncludeFileName.back(); //Utilities::get_file_name(mFileName.back());
         }
         if (words.size()==2) 
         {
         }
         if (words.size()==2) 
         {
@@ -564,6 +565,11 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
         {
             SwitchToFile(words[1], true ); // true : better pass use_config_file
         }
         {
             SwitchToFile(words[1], true ); // true : better pass use_config_file
         }
+       // if 'source' was given
+       if (words.size()==3) 
+         {
+           this->mExecuter->SetCurrentFileName(words[1]);
+         }
         break;
         
       case cLoad:
         break;
         
       case cLoad:
@@ -744,7 +750,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
         // It's a user intended message.
         // Please don't remove it.
       bbtkMessage("Interpreter",1,
         // It's a user intended message.
         // Please don't remove it.
       bbtkMessage("Interpreter",1,
-                 "look for : [" << name 
+                 "look for : [" << name
                  << "] (use_configuration_file == TRUE)" << std::endl);
       script_paths = ConfigurationFile::GetInstance().Get_bbs_paths();
     }
                  << "] (use_configuration_file == TRUE)" << std::endl);
       script_paths = ConfigurationFile::GetInstance().Get_bbs_paths();
     }
@@ -766,7 +772,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
         {
            if ((*i).substr((*i).size()-4, 4) != ".bbs")
               continue;      // ignore non .bbs files
         {
            if ((*i).substr((*i).size()-4, 4) != ".bbs")
               continue;      // ignore non .bbs files
-           LoadScript(*i);
+           LoadScript(*i,name);
            nbBssFiles++;
         }
         if (nbBssFiles==0)
            nbBssFiles++;
         }
         if (nbBssFiles==0)
@@ -816,7 +822,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
 
            if ((*i).substr((*i).size()-4, 4) != ".bbs")
               continue;      // ignore non .bbs files
 
            if ((*i).substr((*i).size()-4, 4) != ".bbs")
               continue;      // ignore non .bbs files
-           LoadScript(*i);
+           LoadScript(*i,name);
            nbBssFiles++;
         }
         if (nbBssFiles==0)
            nbBssFiles++;
         }
         if (nbBssFiles==0)
@@ -924,7 +930,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
        return;    
     }
     else
        return;    
     }
     else
-       LoadScript(fullPathScriptName);
+      LoadScript(fullPathScriptName,name);
 
     return;
   }   
 
     return;
   }   
@@ -932,7 +938,8 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
 
   //=======================================================================
 
 
   //=======================================================================
 
-  void Interpreter::LoadScript( std::string fullPathScriptName)
+  void Interpreter::LoadScript( std::string fullPathScriptName,
+                               std::string includeScriptName)
   {
     if (find(mFileName.begin(),mFileName.end(),fullPathScriptName)
        !=mFileName.end()) 
   {
     if (find(mFileName.begin(),mFileName.end(),fullPathScriptName)
        !=mFileName.end()) 
@@ -956,6 +963,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
 
     mFile.push_back(s);
     mFileName.push_back(fullPathScriptName);
 
     mFile.push_back(s);
     mFileName.push_back(fullPathScriptName);
+    mIncludeFileName.push_back(includeScriptName);
     mLine.push_back(0);
     return;  
   }
     mLine.push_back(0);
     return;  
   }
@@ -982,6 +990,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
                      " Closing file '"<<mFileName.back()<<"'"<<std::endl);
     
     mFileName.pop_back();
                      " Closing file '"<<mFileName.back()<<"'"<<std::endl);
     
     mFileName.pop_back();
+    mIncludeFileName.pop_back();
     mLine.pop_back();
     bbtkDebugMessage("Interpreter",9," Remains "
                      <<mFile.size()
     mLine.pop_back();
     bbtkDebugMessage("Interpreter",9," Remains "
                      <<mFile.size()
@@ -1008,6 +1017,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
       bbtkDebugMessage("Interpreter",9,
                       " Closing file '"<<mFileName.back()<<"'"<<std::endl);
       mFileName.pop_back();
       bbtkDebugMessage("Interpreter",9,
                       " Closing file '"<<mFileName.back()<<"'"<<std::endl);
       mFileName.pop_back();
+      mIncludeFileName.pop_back();
       mLine.pop_back();
     }
     bbtkDebugMessage("Interpreter",9,"EO Interpreter::CloseAllFiles()"
       mLine.pop_back();
     }
     bbtkDebugMessage("Interpreter",9,"EO Interpreter::CloseAllFiles()"
@@ -1128,7 +1138,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
   /// Displays the Configuration
   void Interpreter::Config() const
   {
   /// Displays the Configuration
   void Interpreter::Config() const
   {
-    bbtkDebugMessageInc("Core",9,"Factory::Config"<<std::endl);
+    bbtkDebugMessageInc("Kernel",9,"Factory::Config"<<std::endl);
     
     ConfigurationFile cf = ConfigurationFile::GetInstance();
     
     
     ConfigurationFile cf = ConfigurationFile::GetInstance();
     
@@ -1136,7 +1146,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
     const std::string description               = cf.Get_description();
     const std::string url                       = cf.Get_url();
     const std::string data_path                 = cf.Get_data_path();
     const std::string description               = cf.Get_description();
     const std::string url                       = cf.Get_url();
     const std::string data_path                 = cf.Get_data_path();
-    const std::string default_doc_tmp           = cf.Get_default_doc_tmp();    
+    const std::string default_temp_dir          = cf.Get_default_temp_dir();    
     const std::string file_separator            = cf.Get_file_separator();    
     const std::vector<std::string>bbs_paths     = cf.Get_bbs_paths();
     const std::vector<std::string>package_paths = cf.Get_package_paths();
     const std::string file_separator            = cf.Get_file_separator();    
     const std::vector<std::string>bbs_paths     = cf.Get_bbs_paths();
     const std::vector<std::string>package_paths = cf.Get_package_paths();
@@ -1147,7 +1157,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
     bbtkMessage("Help",1, "bbtk_config.xml   : [" << config_xml_full_path  << "]" << std::endl); 
     bbtkMessage("Help",1, "Documentation Url : [" << url             << "]" << std::endl);
     bbtkMessage("Help",1, "Data Path         : [" << data_path       << "]" << std::endl);
     bbtkMessage("Help",1, "bbtk_config.xml   : [" << config_xml_full_path  << "]" << std::endl); 
     bbtkMessage("Help",1, "Documentation Url : [" << url             << "]" << std::endl);
     bbtkMessage("Help",1, "Data Path         : [" << data_path       << "]" << std::endl);
-    bbtkMessage("Help",1, "Default Doc_tmp   : [" << default_doc_tmp << "]" << std::endl);
+    bbtkMessage("Help",1, "Default Temp-Dir  : [" << default_temp_dir << "]" << std::endl);
     bbtkMessage("Help",1, "File Separator    : [" << file_separator  << "]" << std::endl);
 
     std::vector<std::string>::const_iterator i;
     bbtkMessage("Help",1, "File Separator    : [" << file_separator  << "]" << std::endl);
 
     std::vector<std::string>::const_iterator i;
@@ -1164,7 +1174,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
       bbtkMessage("Help",1,"--- ["<<*i<<"]"<<std::endl);
     }
 
       bbtkMessage("Help",1,"--- ["<<*i<<"]"<<std::endl);
     }
 
-    bbtkDebugDecTab("Core",9);
+    bbtkDebugDecTab("Kernel",9);
   }  
 
   //=======================================================================
   }  
 
   //=======================================================================