Boost logo

Boost Users :

From: Olaf Peter (ope-devel_at_[hidden])
Date: 2008-08-13 09:04:33


Hi,

my member function write() get called with string arguments like:

Hello
\n
World
\n
Traceback ...\n
NameError
:
  name ... not defined
\n

etc.

I want to add a prefix (a prompt '>>>' concete) so that the result will
become:

>>> Hello
>>> World
>>> Traceback ....
>>> NameError: name ... not defined

Yes, this comes from redirected python output.

The simplest solution seems to use regex/xpressive:

     class redirector
     {
         const std::string m_prompt;
         const xpr::sregex m_re;
         const std::string m_re_fmt;

     public:
         redirector(const std::string& prompt = ">>> ")
             : m_prompt(prompt),
               m_re(xpr::sregex::compile("(\\n)!")),
               m_re_fmt(m_prompt + "\n")
         { }

         void write(const std::string& text) {

             std::cout << m_prompt
                       << xpr::regex_replace(text, m_re, m_re_fmt);
         }
     ...
     };

where my regex won't work. What is the correct one since I can get a
single '\n', a terminated '\n' or multiline strings separated by '\n'.
Is this approach good for this problem?

Anyway, I get a lot of warnings from constructor and write function, any
ideas why?

Thanks,
Olaf


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net