// 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 writen 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 writen 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_