All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Utils.cpp
Go to the documentation of this file.
1 // ===========================================================================
2 // Include files
3 // ===========================================================================
4 #include "Utils.h"
5 // ===========================================================================
6 // Boost
7 // ===========================================================================
8 #include <boost/regex.hpp>
9 #include <boost/algorithm/string.hpp>
10 // ===========================================================================
11 // Gaudi
12 // ===========================================================================
13 #include "GaudiKernel/System.h"
14 // ===========================================================================
15 
16 namespace gpu=Gaudi::Parsers::Utils;
17 
19  static const boost::regex expression("\\$(([A-Za-z0-9_]+)|\\(([A-Za-z0-9_]+)\\))");
20 
21  std::string result=input;
22  auto start = input.begin();
23  auto end = input.end();
24  boost::match_results<std::string::const_iterator> what;
25  boost::match_flag_type flags = boost::match_default;
26  while ( boost::regex_search(start, end, what, expression, flags ) )
27  {
28  std::string var{what[2].first,what[2].second};
29  if (var.empty()) var = std::string{what[3].first,what[3].second};
30  std::string env;
31  if ( System::getEnv( var, env ) ) {
32  boost::algorithm::replace_first(result,
33  std::string{ what[0].first, what[0].second },
34  env);
35  }
36  start = what[0].second;
37  // update flags:
38  flags |= boost::match_prev_avail;
39  flags |= boost::match_not_bob;
40  }
41  return result;
42 }
43 // ===========================================================================
GAUDI_API std::string getEnv(const char *var)
get a particular environment variable (returning "UNKNOWN" if not set)
Definition: System.cpp:550
T end(T...args)
std::string replaceEnvironments(const std::string &input)
Definition: Utils.cpp:18
STL class.
start
Definition: IOTest.py:88
auto end(reverse_wrapper< T > &w)
Definition: reverse.h:49
T begin(T...args)