2 # ---------------------------------------------------------------------
4 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
6 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
10 # This software is governed by the CeCILL-B license under French law and
11 # abiding by the rules of distribution of free software. You can use,
12 # modify and/ or redistribute the software under the terms of the CeCILL-B
13 # license as circulated by CEA, CNRS and INRIA at the following URL
14 # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
15 # or in the file LICENSE.txt.
17 # As a counterpart to the access to the source code and rights to copy,
18 # modify and redistribute granted by the license, users are provided only
19 # with a limited warranty and the software's author, the holder of the
20 # economic rights, and the successive licensors have only limited
23 # The fact that you are presently reading this means that you have had
24 # knowledge of the CeCILL-B license and that you accept its terms.
25 # ------------------------------------------------------------------------
31 * Created on: Nov 23, 2012
32 * Author: Daniel Felipe Gonzalez Obando
35 #include "CDMUtilities.h"
47 namespace CDMUtilities
49 template <typename Container>
50 Container& splitter::split
53 const typename Container::value_type& s,
54 const typename Container::value_type& delimiters,
63 if (empties == no_empties)
65 next = s.find_first_not_of(delimiters, next + 1);
66 if (next == Container::value_type::npos)
73 next = s.find_first_of(delimiters, current);
74 result.push_back(s.substr(current, next - current));
76 while (next != Container::value_type::npos);
80 const std::string fixPath(const std::string& path)
82 std::string pathFixed = "";
86 std::vector<std::string> pathSplit;
88 splitter::split(pathSplit, path, CDMUtilities::SLASH, splitter::no_empties);
90 if(0 < pathSplit.size())
91 pathFixed = pathSplit[0];
93 for (int i = 1; i < (int)(pathSplit.size()); i++)
95 pathFixed += CDMUtilities::SLASH + pathSplit[i];
98 // ------ LINUX / MacOS
99 //break path into folders
100 std::vector<std::string> pathSplit;
102 splitter::split(pathSplit, path, CDMUtilities::SLASH, splitter::no_empties);
104 for (int i = 0; i < pathSplit.size(); i++)
106 pathFixed += CDMUtilities::SLASH + pathSplit[i];
113 int openTextEditor(const std::string& file)
116 wxConfigBase* pConfig = wxConfigBase::Get();
117 std::string command = "start " + crea::wx2std(pConfig->Read(wxT("TEXT_EDITOR"), crea::std2wx(CDMUtilities::TEXT_EDITOR)));
120 command += " \"" + file + "\"";
122 wxConfigBase* pConfig = wxConfigBase::Get();
123 std::string command = crea::wx2std(pConfig->Read(wxT("TEXT_EDITOR"), crea::std2wx(CDMUtilities::TEXT_EDITOR)));
126 command += " \"" + file + "\"";
129 return system(command.c_str());
132 int openFileExplorer(const std::string& file)
135 wxConfigBase* pConfig = wxConfigBase::Get();
136 std::string command = "start " + crea::wx2std(pConfig->Read(wxT("FILE_EXPLORER"), crea::std2wx(CDMUtilities::FILE_EXPLORER)));
139 command += " \"" + file + "\"";
141 wxConfigBase* pConfig = wxConfigBase::Get();
142 std::string command = crea::wx2std(pConfig->Read(wxT("FILE_EXPLORER"), crea::std2wx(CDMUtilities::FILE_EXPLORER)));
145 command += " \"" + file + "\"";
148 return system(command.c_str());
151 int openFileWithCommand(const std::string& file, const std::string& command)
154 std::string comm = "start " + command;
156 comm += " \"" + file + "\"";
158 std::string comm = command;
160 comm += " \"" + file + "\"";
163 return system(comm.c_str());
169 std::string comm = "start bbEditor";
171 std::string comm = "bbEditor &";
173 return system(comm.c_str());
176 int openCreaToolsTools()
179 std::string comm = "start creaTools";
181 std::string comm = "creaTools.sh &";
184 return system(comm.c_str());
187 int openTerminal(const std::string& command)
189 wxConfigBase* pConfig = wxConfigBase::Get();
190 std::string comm = crea::wx2std(pConfig->Read(wxT("TERMINAl"), crea::std2wx(CDMUtilities::TERMINAL)));
192 comm += + " " + command;
194 return system(comm.c_str());
197 bool createEmptyClass(const std::string& name, const std::string& path)
199 std::vector<std::string> words;
200 splitter::split(words,name," \\/\",.'`",splitter::no_empties);
201 std::string fixedName = "";
202 for (int i = 0; i < (int)(words.size()); i++)
204 fixedName += words[i];
207 if(fixedName == "" || path == "")
212 std::string nameupper = fixedName;
213 std::transform(nameupper.begin(), nameupper.end(),nameupper.begin(),::toupper);
215 std::ofstream out((path + SLASH + fixedName + ".h").c_str());
221 out << "/*" << std::endl;
222 out << "# ---------------------------------------------------------------------" << std::endl;
223 out << "#" << std::endl;
224 out << "# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image" << std::endl;
225 out << "# pour la Sante)" << std::endl;
226 out << "# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton" << std::endl;
227 out << "# Previous Authors : Laurent Guigues, Jean-Pierre Roux" << std::endl;
228 out << "# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil" << std::endl;
229 out << "#" << std::endl;
230 out << "# This software is governed by the CeCILL-B license under French law and" << std::endl;
231 out << "# abiding by the rules of distribution of free software. You can use," << std::endl;
232 out << "# modify and/ or redistribute the software under the terms of the CeCILL-B" << std::endl;
233 out << "# license as circulated by CEA, CNRS and INRIA at the following URL" << std::endl;
234 out << "# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html" << std::endl;
235 out << "# or in the file LICENSE.txt." << std::endl;
236 out << "#" << std::endl;
237 out << "# As a counterpart to the access to the source code and rights to copy," << std::endl;
238 out << "# modify and redistribute granted by the license, users are provided only" << std::endl;
239 out << "# with a limited warranty and the software's author, the holder of the" << std::endl;
240 out << "# economic rights, and the successive licensors have only limited" << std::endl;
241 out << "# liability." << std::endl;
242 out << "#" << std::endl;
243 out << "# The fact that you are presently reading this means that you have had" << std::endl;
244 out << "# knowledge of the CeCILL-B license and that you accept its terms." << std::endl;
245 out << "# ------------------------------------------------------------------------" << std::endl;
246 out << "*/" << std::endl;
247 out << "" << std::endl;
248 out << "#ifndef _" << nameupper << "_H_" << std::endl;
249 out << "#define _" << nameupper << "_H_" << std::endl;
250 out << "" << std::endl;
251 out << "//---------------------------------------------" << std::endl;
252 out << "// Class Name: " << fixedName << "" << std::endl;
253 out << "// [classdescription]" << std::endl;
254 out << "//---------------------------------------------" << std::endl;
255 out << "" << std::endl;
256 out << "class " << fixedName << "" << std::endl;
257 out << "{" << std::endl;
258 out << "" << std::endl;
259 out << "//---------------------------------------------" << std::endl;
260 out << "//Methods and attributes exposed to other classes" << std::endl;
261 out << "//---------------------------------------------" << std::endl;
262 out << "public :" << std::endl;
263 out << " " << fixedName << "();" << std::endl;
264 out << " ~" << fixedName << "();" << std::endl;
265 out << "" << std::endl;
266 out << "//--Method template----------------------------" << std::endl;
267 out << "// void FunctionName(int& parameterA);" << std::endl;
268 out << "" << std::endl;
269 out << "" << std::endl;
270 out << "//---------------------------------------------" << std::endl;
271 out << "//Methods and attributes exposed only to classes" << std::endl;
272 out << "//that are derived from this class" << std::endl;
273 out << "//---------------------------------------------" << std::endl;
274 out << "protected:" << std::endl;
275 out << "" << std::endl;
276 out << "//---------------------------------------------" << std::endl;
277 out << "//Methods and attributes only visible by this class" << std::endl;
278 out << "//---------------------------------------------" << std::endl;
279 out << "private:" << std::endl;
280 out << "" << std::endl;
281 out << "};" << std::endl;
282 out << "" << std::endl;
283 out << "//-end of _" << nameupper << "_H_------------------------------------------------------" << std::endl;
284 out << "#endif" << std::endl;
288 out.open((path + CDMUtilities::SLASH + fixedName + ".cpp").c_str());
294 out << "/*" << std::endl;
295 out << "# ---------------------------------------------------------------------" << std::endl;
296 out << "#" << std::endl;
297 out << "# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image" << std::endl;
298 out << "# pour la Sante)" << std::endl;
299 out << "# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton" << std::endl;
300 out << "# Previous Authors : Laurent Guigues, Jean-Pierre Roux" << std::endl;
301 out << "# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil" << std::endl;
302 out << "#" << std::endl;
303 out << "# This software is governed by the CeCILL-B license under French law and" << std::endl;
304 out << "# abiding by the rules of distribution of free software. You can use," << std::endl;
305 out << "# modify and/ or redistribute the software under the terms of the CeCILL-B" << std::endl;
306 out << "# license as circulated by CEA, CNRS and INRIA at the following URL" << std::endl;
307 out << "# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html" << std::endl;
308 out << "# or in the file LICENSE.txt." << std::endl;
309 out << "#" << std::endl;
310 out << "# As a counterpart to the access to the source code and rights to copy," << std::endl;
311 out << "# modify and redistribute granted by the license, users are provided only" << std::endl;
312 out << "# with a limited warranty and the software's author, the holder of the" << std::endl;
313 out << "# economic rights, and the successive licensors have only limited" << std::endl;
314 out << "# liability." << std::endl;
315 out << "#" << std::endl;
316 out << "# The fact that you are presently reading this means that you have had" << std::endl;
317 out << "# knowledge of the CeCILL-B license and that you accept its terms." << std::endl;
318 out << "# ------------------------------------------------------------------------" << std::endl;
319 out << "*/" << std::endl;
320 out << "" << std::endl;
321 out << "#include \"" << fixedName << ".h\"" << std::endl;
322 out << "" << std::endl;
323 out << "" << fixedName << "::" << fixedName << "()" << std::endl;
324 out << "{" << std::endl;
325 out << "}" << std::endl;
326 out << "" << std::endl;
327 out << "" << fixedName << "::~" << fixedName << "()" << std::endl;
328 out << "{" << std::endl;
329 out << "}" << std::endl;
330 out << "" << std::endl;
331 out << "//---------------------------------------------" << std::endl;
332 out << "//Method template" << std::endl;
333 out << "//---------------------------------------------" << std::endl;
334 out << "/*" << std::endl;
335 out << "void " << fixedName << "::FunctionName(int& parameterA)" << std::endl;
336 out << "{" << std::endl;
337 out << " parameterA = 2 * parameterA;" << std::endl;
338 out << " return;" << std::endl;
339 out << "}" << std::endl;
340 out << "*/" << std::endl;
345 std::string stringify(const std::string& line)
348 for (int i = 0; i < (int)(line.size()); i++)
354 res.push_back(line[i]);
359 std::string readFile(const std::string& file_path)
362 std::ifstream file(file_path.c_str());
365 char ch = file.get();
376 bool writeFile(const std::string& file_path, const std::string& st)
378 std::ofstream file(file_path.c_str());
389 CMLFile readCMLFile(const std::string& file_path)
393 std::ifstream file(file_path.c_str());
396 char ch = file.get();
399 syntaxElement element;
402 //std::cout << "space" << std::endl;
403 element.first = "space";
404 element.second.push_back(std::string(1,ch));
408 //std::cout << "comment" << std::endl;
409 element.first = "comment";
410 std::string commentValue;
413 commentValue.push_back(ch);
420 commentValue.push_back('\n');
421 element.second.push_back(commentValue);
425 //std::cout << "command" << std::endl;
426 element.first = "command";
427 std::string commandValue;
432 while(!isspace(ch) && ch != '(' && ch != ')' && ch != '#')
436 if (commandValue.size()) {
437 element.second.push_back(commandValue);
438 commandValue.clear();
440 commandValue.push_back(ch);
442 while(!file.eof() && ch != '"')
446 commandValue.push_back(ch);
449 commandValue.push_back(ch);
453 commandValue.push_back(ch);
458 commandValue.push_back(ch);
459 element.second.push_back(commandValue);
460 commandValue.clear();
463 commandValue.push_back(ch);
468 if (!file.eof() && (isspace(ch) || ch == '(' || ch == ')' || ch == '#'))
470 if (commandValue.size()) {
471 element.second.push_back(commandValue);
472 commandValue.clear();
474 commandValue.push_back(ch);
480 commandValue.push_back(ch);
483 element.second.push_back(commandValue);
484 if (commandValue == ")")
486 commandValue.clear();
489 commandValue.clear();
497 res.push_back(element);
508 std::cout << "CMakeLists: " << file_path << std::endl;
509 for (int i = 0; i < res.size(); ++i) {
510 if (res[i].first == "command")
512 for (int j = 0; j < res[i].second.size(); ++j) {
513 std::cout << "~" << res[i].second[j];
515 if (res[i].first == "command")
518 std::cout << "End of file" << std::endl;
523 bool writeCMLFile(const std::string& file_path, const CMLFile& data)
525 std::ofstream file(file_path.c_str());
528 for (int i = 0; i < data.size(); ++i) {
529 for (int j = 0; j < data[i].second.size(); ++j) {
530 file << data[i].second[j];
542 normalizeStr(std::string& st)
544 while(st.size() && isspace(st[0]))
546 while(st.size() && isspace(st[st.size()-1]))
547 st.erase(st.size()-1,1);