00001 #ifndef __cmt_fragment_h__ 00002 #define __cmt_fragment_h__ 00003 00004 #include00005 00006 #include "cmt_parser.h" 00007 #include "cmt_system.h" 00008 00009 class Variable 00010 { 00011 public: 00012 00013 typedef cmt_vector VariableVector; 00014 00015 static Variable* find (VariableVector& vector, 00016 const cmt_string& name); 00017 00018 public: 00019 00020 Variable (); 00021 Variable (const cmt_string& n); 00022 00023 const cmt_string& macro_braces () const; 00024 const cmt_string& macro_pars () const; 00025 00026 void set (const cmt_string& new_name, 00027 const cmt_string& new_value = ""); 00028 00029 Variable& operator = (const Variable& other); 00030 Variable& operator = (const cmt_string& v); 00031 void operator += (const cmt_string& v); 00032 cmt_string operator + (const cmt_string& v) const; 00033 operator const cmt_string& () const; 00034 bool operator == (const cmt_string& v) const; 00035 bool operator != (const cmt_string& v) const; 00036 cmt_string name; 00037 cmt_string value; 00038 00039 private: 00040 cmt_string m_macro_braces; 00041 cmt_string m_macro_pars; 00042 }; 00043 00044 class Fragment 00045 { 00046 public: 00047 typedef cmt_vector FragmentVector; 00048 00049 static void action (const CmtSystem::cmt_string_vector& words, 00050 Use* use); 00051 static Fragment* find (const cmt_string& name); 00052 static void add (const cmt_string& name, 00053 const cmt_string& suffix, 00054 const cmt_string& header, 00055 const cmt_string& trailer, 00056 bool need_dependencies, 00057 Use* use); 00058 static void show (const cmt_string& name); 00059 static void show_all (); 00060 static void clear_all (); 00061 static bool copy (FILE* out, const cmt_string& name, int variables, ...); 00062 static bool copy (cmt_string& out, const cmt_string& name, int variables, ...); 00063 static bool copy (FILE* out, const cmt_string& name, 00064 const Variable::VariableVector& vector, int variables, ...); 00065 static bool copy (cmt_string& out, const cmt_string& name, 00066 const Variable::VariableVector& vector, int variables, ...); 00067 00068 static FragmentVector& fragments (); 00069 00070 public: 00071 Fragment (); 00072 Fragment (const cmt_string& fragment_name); 00073 ~Fragment (); 00074 void clear (); 00075 int print (); 00076 bool locate (); 00077 00078 bool copy (FILE* out, int variables, ...); 00079 bool copy (cmt_string& out, int variables, ...); 00080 bool copy (FILE* out, int variables, va_list ids); 00081 bool copy (cmt_string& out, int variables, va_list ids); 00082 bool wincopy (FILE* out, int variables, va_list ids); 00083 bool wincopy (cmt_string& out, int variables, va_list ids); 00084 00085 bool copy (FILE* out, const Variable::VariableVector& vector, int variables, ...); 00086 bool copy (cmt_string& out, const Variable::VariableVector& vector, int variables, ...); 00087 bool copy (FILE* out, const Variable::VariableVector& vector, int variables, va_list ids); 00088 bool copy (cmt_string& out, const Variable::VariableVector& vector, int variables, va_list ids); 00089 bool wincopy (FILE* out, const Variable::VariableVector& vector, int variables, va_list ids); 00090 bool wincopy (cmt_string& out, const Variable::VariableVector& vector, int variables, va_list ids); 00091 00092 cmt_string name; 00093 cmt_string suffix; 00094 cmt_string header; 00095 cmt_string trailer; 00096 bool need_dependencies; 00097 cmt_string path; 00098 UseRef use; 00099 }; 00100 00101 class FragmentHandle 00102 { 00103 public: 00104 FragmentHandle (); 00105 FragmentHandle (const cmt_string name); 00106 00107 FragmentHandle& operator = (const FragmentHandle& other); 00108 void reset (); 00109 void set (const cmt_string name); 00110 cmt_string& name (); 00111 cmt_string& suffix (); 00112 cmt_string& header (); 00113 cmt_string& trailer (); 00114 bool need_dependencies (); 00115 00116 bool copy (FILE* out, int variables, ...); 00117 bool copy (cmt_string& out, int variables, ...); 00118 bool wincopy (FILE* out, int variables, ...); 00119 bool wincopy (cmt_string& out, int variables, ...); 00120 00121 bool copy (FILE* out, const Variable::VariableVector& vector, int variables, ...); 00122 bool copy (cmt_string& out, const Variable::VariableVector& vector, int variables, ...); 00123 bool wincopy (FILE* out, const Variable::VariableVector& vector, int variables, ...); 00124 bool wincopy (cmt_string& out, const Variable::VariableVector& vector, int variables, ...); 00125 00126 private: 00127 bool setup (); 00128 00129 Fragment* _fragment; 00130 cmt_string _name; 00131 bool _initialized; 00132 }; 00133 00134 #endif