// Copyright (C) 2005  Davis E. King (davis@dlib.net)
// License: Boost Software License   See LICENSE.txt for the full license.
#undef DLIB_CPP_PRETTY_PRINTER_KERNEl_ABSTRACT_
#ifdef DLIB_CPP_PRETTY_PRINTER_KERNEl_ABSTRACT_
#include <string>
#include <ioswfd>
namespace dlib
{
    class cpp_pretty_printer 
    {
        /*!
            INITIAL VALUE
                This object does not have any state associated with it.
            WHAT THIS OBJECT REPRESENTS
                This object represents an HTML pretty printer for C++ source code. 
        !*/
    public:
        cpp_pretty_printer (        
        );
        /*!
            ensures                
                - #*this is properly initialized
            throws
                - std::bad_alloc
        !*/
        virtual ~cpp_pretty_printer (
        );
        /*!
            ensures
                - any resources associated with *this have been released
        !*/
        void print (
            std::istream& in,
            std::ostream& out,
            const std::string& title
        ) const;
        /*!
            ensures
                - treats data from in as C++ source code and pretty prints it in
                  HTML and writes it to out.
                - The title of the HTML document written to out will be title
            throws
                - std::ios_base::failure
                    If there was a problem writing to out then this exception will 
                    be thrown.                      
                - any other exception
                    This exception may be thrown if there is any other problem. 
        !*/
        void print_and_number (
            std::istream& in,
            std::ostream& out,
            const std::string& title
        ) const;
        /*!
            ensures
                - treats data from in as C++ source code and pretty prints it in
                  HTML with line numbers and writes it to out.
                - The title of the HTML document written to out will be title
            throws
                - std::ios_base::failure
                    If there was a problem writing to out then this exception will 
                    be thrown.                      
                - any other exception
                    This exception may be thrown if there is any other problem. 
        !*/
    private:
        // restricted functions
        cpp_pretty_printer(const cpp_pretty_printer&);        // copy constructor
        cpp_pretty_printer& operator=(const cpp_pretty_printer&);    // assignment operator
    };    
}
#endif // DLIB_CPP_PRETTY_PRINTER_KERNEl_ABSTRACT_