lyx_mirror/src/mathed/MathStream.h

317 lines
5.8 KiB
C
Raw Normal View History

// -*- C++ -*-
/**
* \file MathStream.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author Andr<EFBFBD> P<EFBFBD>nitz
*
* Full author contact details are available in file CREDITS.
*/
#ifndef MATH_MATHMLSTREAM_H
#define MATH_MATHMLSTREAM_H
// Please keep all four streams in one file until the interface has
// settled.
#include "MetricsInfo.h"
#include "support/docstream.h"
#include "support/docstring.h"
namespace lyx {
class MathData;
class InsetMath;
class MathAtom;
//
// LaTeX/LyX
//
class WriteStream {
public:
///
WriteStream(odocstream & os, bool fragile, bool latex);
///
explicit WriteStream(odocstream & os);
///
~WriteStream();
///
int line() const { return line_; }
///
bool fragile() const { return fragile_; }
///
bool latex() const { return latex_; }
///
odocstream & os() { return os_; }
///
bool & firstitem() { return firstitem_; }
///
void addlines(unsigned int);
/// writes space if next thing is isalpha()
void pendingSpace(bool how);
/// writes space if next thing is isalpha()
bool pendingSpace() const { return pendingspace_; }
private:
///
odocstream & os_;
/// do we have to write \\protect sometimes
bool fragile_;
/// are we at the beginning of an MathData?
bool firstitem_;
/// are we writing to .tex?
int latex_;
/// do we have a space pending?
bool pendingspace_;
///
int line_;
};
///
WriteStream & operator<<(WriteStream &, MathAtom const &);
///
WriteStream & operator<<(WriteStream &, MathData const &);
///
WriteStream & operator<<(WriteStream &, docstring const &);
///
WriteStream & operator<<(WriteStream &, char const * const);
///
WriteStream & operator<<(WriteStream &, char);
///
WriteStream & operator<<(WriteStream &, int);
///
WriteStream & operator<<(WriteStream &, unsigned int);
//
// MathML
//
class MTag {
public:
///
MTag(docstring const tag) : tag_(tag) {}
///
MTag(char const * const tag) : tag_(from_ascii(tag)) {}
///
docstring const tag_;
};
class ETag {
public:
///
ETag(docstring const tag) : tag_(tag) {}
///
ETag(char const * const tag) : tag_(from_ascii(tag)) {}
///
docstring const tag_;
};
class MathStream {
public:
///
explicit MathStream(odocstream & os);
///
void cr();
///
odocstream & os() { return os_; }
///
int line() const { return line_; }
///
int & tab() { return tab_; }
///
friend MathStream & operator<<(MathStream &, char const *);
private:
///
odocstream & os_;
///
int tab_;
///
int line_;
///
char lastchar_;
};
///
MathStream & operator<<(MathStream &, MathAtom const &);
///
MathStream & operator<<(MathStream &, MathData const &);
///
MathStream & operator<<(MathStream &, docstring const &);
///
MathStream & operator<<(MathStream &, char const *);
///
MathStream & operator<<(MathStream &, char);
///
MathStream & operator<<(MathStream &, MTag const &);
///
MathStream & operator<<(MathStream &, ETag const &);
//
// Debugging
//
class NormalStream {
public:
///
explicit NormalStream(odocstream & os) : os_(os) {}
///
odocstream & os() { return os_; }
private:
///
odocstream & os_;
};
///
NormalStream & operator<<(NormalStream &, MathAtom const &);
///
NormalStream & operator<<(NormalStream &, MathData const &);
///
NormalStream & operator<<(NormalStream &, docstring const &);
///
NormalStream & operator<<(NormalStream &, char const *);
///
NormalStream & operator<<(NormalStream &, char);
///
NormalStream & operator<<(NormalStream &, int);
//
// Maple
//
class MapleStream {
public:
///
explicit MapleStream(odocstream & os) : os_(os) {}
///
odocstream & os() { return os_; }
private:
///
odocstream & os_;
};
///
MapleStream & operator<<(MapleStream &, MathAtom const &);
///
MapleStream & operator<<(MapleStream &, MathData const &);
///
MapleStream & operator<<(MapleStream &, docstring const &);
///
MapleStream & operator<<(MapleStream &, char_type);
///
MapleStream & operator<<(MapleStream &, char const *);
///
MapleStream & operator<<(MapleStream &, char);
///
MapleStream & operator<<(MapleStream &, int);
//
// Maxima
//
class MaximaStream {
public:
///
explicit MaximaStream(odocstream & os) : os_(os) {}
///
odocstream & os() { return os_; }
private:
///
odocstream & os_;
};
///
MaximaStream & operator<<(MaximaStream &, MathAtom const &);
///
MaximaStream & operator<<(MaximaStream &, MathData const &);
///
MaximaStream & operator<<(MaximaStream &, docstring const &);
///
MaximaStream & operator<<(MaximaStream &, char_type);
///
MaximaStream & operator<<(MaximaStream &, char const *);
///
MaximaStream & operator<<(MaximaStream &, char);
///
MaximaStream & operator<<(MaximaStream &, int);
//
// Mathematica
//
class MathematicaStream {
public:
///
explicit MathematicaStream(odocstream & os) : os_(os) {}
///
odocstream & os() { return os_; }
private:
///
odocstream & os_;
};
///
MathematicaStream & operator<<(MathematicaStream &, MathAtom const &);
///
MathematicaStream & operator<<(MathematicaStream &, MathData const &);
///
MathematicaStream & operator<<(MathematicaStream &, docstring const &);
///
MathematicaStream & operator<<(MathematicaStream &, char const *);
///
MathematicaStream & operator<<(MathematicaStream &, char);
///
MathematicaStream & operator<<(MathematicaStream &, int);
//
// Octave
//
class OctaveStream {
public:
///
explicit OctaveStream(odocstream & os) : os_(os) {}
///
odocstream & os() { return os_; }
private:
///
odocstream & os_;
};
///
OctaveStream & operator<<(OctaveStream &, MathAtom const &);
///
OctaveStream & operator<<(OctaveStream &, MathData const &);
///
OctaveStream & operator<<(OctaveStream &, docstring const &);
///
OctaveStream & operator<<(OctaveStream &, char_type);
///
OctaveStream & operator<<(OctaveStream &, char const *);
///
OctaveStream & operator<<(OctaveStream &, char);
///
OctaveStream & operator<<(OctaveStream &, int);
} // namespace lyx
#endif