//
// aegis - project change supervisor
// Copyright (C) 1991-1993, 2001, 2002, 2004-2006, 2008, 2012 Peter Miller.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or (at
// your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
#ifndef LIBAEGIS_COL_H
#define LIBAEGIS_COL_H
#include
struct string_ty; // forward
/**
* The col class is used to represent an output capable of hosting
* multi-column output.
*/
class col
{
public:
typedef aegis_shared_ptr pointer;
/**
* The destructor.
*/
virtual ~col();
protected:
/**
* The default constructor.
*/
col();
public:
/**
* The open class method is a factory used to open a file for
* outputting columnar data.
*
* The style of formatting is controlled by the -UNFormatted option.
*
* Use the delete operator when you are done with it.
*
* @param filename
* name of file to write,
* pager is used if NULL pointer given.
*/
static col::pointer open(struct string_ty *filename);
/**
* The open class method is a factory used to open a file for
* outputting columnar data.
*
* The style of formatting is controlled by the -UNFormatted option.
*
* Use the delete operator when you are done with it.
*
* @param op
* the file to write the data to
*/
static col::pointer open(output::pointer op);
/**
* The create method is used to specify a range of locations for an
* output column.
*
* The contents will be de-tabbed and wrapped before output.
*
* @param left
* the left-hand edge of the column.
* If you say -1, it will use the righ-hand side of the
* previous column, plus one. (Note: NOT the right-most
* column.)
* @param right
* the right-hand edge of the column, plus one.
* zero means the rest of the line
* @param title
* the column title to use. Give NULL pointer for none.
*
* @returns
* output::pointer ; a pointer to an output stream to be used to write
* into this column. Use the delete operator when you are done
* with the column.
*/
virtual output::pointer create(int left, int right, const char *title)
= 0;
/**
* The title method is used to set the two lines of page
* headings. These are ignored for unformatted output.
*
* @param first
* first line of heading, NULL means blank
* @param second
* second line of heading, NULL means blank
*/
virtual void title(const char *first, const char *second);
/**
* The title method is used to set the two lines of page
* headings. These are ignored for unformatted output.
*
* @param first
* first line of heading, NULL means blank
* @param second
* second line of heading, NULL means blank
*/
virtual void title(const nstring &first, const nstring &second) = 0;
/**
* The eoln method is used to signal that an entire line of columns
* has been assembled and that it should be emitted to the output
* file or pager.
*
* Columns all receive an implicit newline, and are flushed before
* processing. All of the columns are thus aligned into rows,
* even when (due to newlines or wrapping) they would otherwise be
* different lengths.
*
* This is the interface used by clients of this subsystem.
*/
virtual void eoln() = 0;
/**
* The need method is used to nominate that
* a number of lines is needed before the end of the page.
* If the lines are available, a blank line is emitted,
* otherwise a new page is thrown.
*
* @param n
* the number of lines, not counting the blank line.
*/
virtual void need(int n) = 0;
/**
* The eject method is used to move to the top of the next page,
* if we aren't there already.
*/
virtual void eject() = 0;
/**
* The flush method is used to force output of all buffered data.
*/
virtual void flush() = 0;
/**
* The forget method is used to discontinue an output column.
*
* @param op
* The column to forget.
*/
virtual void forget(const output::pointer &op) = 0;
private:
/**
* The copy constructor. Do not use.
*/
col(const col &);
/**
* The assignment operator. Do not use.
*/
col &operator=(const col &);
};
#endif // LIBAEGIS_COL_H
// vim: set ts=8 sw=4 et :