]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/math_mathmlstream.C
temporary reversal of the 'don't write spaces' stuff as this was buggy...
[lyx.git] / src / mathed / math_mathmlstream.C
index 9f9c1dc7d5d52b538f5a1c7e45618744de316e4f..a1f73f0e3f15e37480b45b9bf5e5192b799a128b 100644 (file)
@@ -5,9 +5,106 @@
 #include "math_extern.h"
 #include "debug.h"
 #include "support/lyxalgo.h"
+#include "support/LOstream.h"
 
 
 using std::ostream;
+using std::strlen;
+
+
+WriteStream::WriteStream(ostream & os, bool fragile, bool latex)
+       : os_(os), fragile_(fragile), firstitem_(false), latex_(latex),
+         pendingspace_(false), line_(0)
+{}
+
+
+WriteStream::WriteStream(ostream & os)
+       : os_(os), fragile_(false), firstitem_(false), latex_(false),
+         pendingspace_(false), line_(0)
+{}
+
+
+WriteStream::~WriteStream()
+{
+       if (pendingspace_)
+               os_ << ' ';
+}
+
+
+void WriteStream::addlines(unsigned int n)
+{
+       line_ += n;
+}
+
+
+void WriteStream::pendingSpace(bool how)
+{
+       if (how)
+               os_ << ' ';
+       pendingspace_ = how;
+}
+
+
+WriteStream & operator<<(WriteStream & ws, MathAtom const & at)
+{
+       at->write(ws);
+       return ws;
+}
+
+
+WriteStream & operator<<(WriteStream & ws, MathArray const & ar)
+{
+       write(ar, ws);
+       return ws;
+}
+
+
+WriteStream & operator<<(WriteStream & ws, char const * s)
+{
+       if (ws.pendingSpace()) {
+               lyxerr << "writing a space in a string\n";
+               ws.os() << ' ';
+               ws.pendingSpace(false);
+       }
+       ws.os() << s;
+       ws.addlines(int(lyx::count(s, s + strlen(s), '\n')));
+       return ws;
+}
+
+
+WriteStream & operator<<(WriteStream & ws, char c)
+{
+       if (ws.pendingSpace()) {
+               //if (isalpha(c))
+               //      ws.os() << ' ';
+               if (!isalpha(c)) {
+                       lyxerr << "I'd like to suppress writing a space\n";
+               }
+               ws.os() << ' ';
+               ws.pendingSpace(false);
+       }
+       ws.os() << c;
+       if (c == '\n')
+               ws.addlines(1);
+       return ws;
+}
+
+
+WriteStream & operator<<(WriteStream & ws, int i)
+{
+       ws.os() << i;
+       return ws;
+}
+
+
+WriteStream & operator<<(WriteStream & ws, unsigned int i)
+{
+       ws.os() << i;
+       return ws;
+}
+
+
+//////////////////////////////////////////////////////////////////////
 
 
 MathMLStream::MathMLStream(ostream & os)
@@ -15,12 +112,9 @@ MathMLStream::MathMLStream(ostream & os)
 {}
 
 
-MathMLStream & operator<<(MathMLStream & ms, MathInset const * p)
+MathMLStream & operator<<(MathMLStream & ms, MathAtom const & at)
 {
-       if (p)
-               p->mathmlize(ms);
-       else
-               lyxerr << "operator<<(MathMLStream, NULL) called\n";
+       at->mathmlize(ms);
        return ms;
 }
 
@@ -77,12 +171,9 @@ void MathMLStream::cr()
 //////////////////////////////////////////////////////////////////////
 
 
-MapleStream & operator<<(MapleStream & ms, MathInset const * p)
+MapleStream & operator<<(MapleStream & ms, MathAtom const & at)
 {
-       if (p)
-               p->maplize(ms);
-       else
-               lyxerr << "operator<<(MapleStream, NULL) called\n";
+       at->maplize(ms);
        return ms;
 }
 
@@ -118,134 +209,118 @@ MapleStream & operator<<(MapleStream & ms, int i)
 //////////////////////////////////////////////////////////////////////
 
 
-OctaveStream & operator<<(OctaveStream & ns, MathInset const * p)
+MathematicaStream & operator<<(MathematicaStream & ms, MathAtom const & at)
 {
-       if (p)
-               p->octavize(ns);
-       else
-               lyxerr << "operator<<(OctaveStream, NULL) called\n";
-       return ns;
+       at->mathematicize(ms);
+       return ms;
 }
 
 
-OctaveStream & operator<<(OctaveStream & ns, MathArray const & ar)
+MathematicaStream & operator<<(MathematicaStream & ms, MathArray const & ar)
 {
-       octavize(ar, ns);
-       return ns;
+       mathematicize(ar, ms);
+       return ms;
 }
 
 
-OctaveStream & operator<<(OctaveStream & ns, char const * s)
+MathematicaStream & operator<<(MathematicaStream & ms, char const * s)
 {
-       ns.os() << s;
-       return ns;
+       ms.os() << s;
+       return ms;
 }
 
 
-OctaveStream & operator<<(OctaveStream & ns, char c)
+MathematicaStream & operator<<(MathematicaStream & ms, char c)
 {
-       ns.os() << c;
-       return ns;
+       ms.os() << c;
+       return ms;
 }
 
 
+MathematicaStream & operator<<(MathematicaStream & ms, int i)
+{
+       ms.os() << i;
+       return ms;
+}
+
+
+
 //////////////////////////////////////////////////////////////////////
 
 
-NormalStream & operator<<(NormalStream & ns, MathInset const * p)
+OctaveStream & operator<<(OctaveStream & ns, MathAtom const & at)
 {
-       if (p)
-               p->normalize(ns);
-       else
-               lyxerr << "operator<<(NormalStream, NULL) called\n";
+       at->octavize(ns);
        return ns;
 }
 
 
-NormalStream & operator<<(NormalStream & ns, MathArray const & ar)
+OctaveStream & operator<<(OctaveStream & ns, MathArray const & ar)
 {
-       normalize(ar, ns);
+       octavize(ar, ns);
        return ns;
 }
 
 
-NormalStream & operator<<(NormalStream & ns, char const * s)
+OctaveStream & operator<<(OctaveStream & ns, char const * s)
 {
        ns.os() << s;
        return ns;
 }
 
 
-NormalStream & operator<<(NormalStream & ns, char c)
+OctaveStream & operator<<(OctaveStream & ns, char c)
 {
        ns.os() << c;
        return ns;
 }
 
 
-
-//////////////////////////////////////////////////////////////////////
-
-
-WriteStream::WriteStream(ostream & os, bool fragile, bool latex)
-       : os_(os), fragile_(fragile), latex_(latex), firstitem_(false), line_(0)
-{}
+OctaveStream & operator<<(OctaveStream & ns, int i)
+{
+       ns.os() << i;
+       return ns;
+}
 
 
-WriteStream::WriteStream(ostream & os)
-       : os_(os), fragile_(false), latex_(false), firstitem_(false), line_(0)
-{}
+//////////////////////////////////////////////////////////////////////
 
 
-void WriteStream::addlines(unsigned int n)
+NormalStream & operator<<(NormalStream & ns, MathAtom const & at)
 {
-       line_ += n;
+       at->normalize(ns);
+       return ns;
 }
 
 
-WriteStream & operator<<(WriteStream & ws, MathInset const * p)
+NormalStream & operator<<(NormalStream & ns, MathArray const & ar)
 {
-       if (p)
-               p->write(ws);
-       else
-               lyxerr << "operator<<(WriteStream, NULL) called\n";
-       return ws;
+       normalize(ar, ns);
+       return ns;
 }
 
 
-WriteStream & operator<<(WriteStream & ws, MathArray const & ar)
+NormalStream & operator<<(NormalStream & ns, char const * s)
 {
-       write(ar, ws);
-       return ws;
+       ns.os() << s;
+       return ns;
 }
 
 
-WriteStream & operator<<(WriteStream & ws, char const * s)
+NormalStream & operator<<(NormalStream & ns, char c)
 {
-       ws.os() << s;
-       ws.addlines(int(lyx::count(s, s+strlen(s), '\n')));
-       return ws;
+       ns.os() << c;
+       return ns;
 }
 
 
-WriteStream & operator<<(WriteStream & ws, char c)
+NormalStream & operator<<(NormalStream & ns, int i)
 {
-       ws.os() << c;
-       if (c == '\n')
-               ws.addlines(1);
-       return ws;
+       ns.os() << i;
+       return ns;
 }
 
 
-WriteStream & operator<<(WriteStream & ws, int i)
-{
-       ws.os() << i;
-       return ws;
-}
 
+//////////////////////////////////////////////////////////////////////
 
-WriteStream & operator<<(WriteStream & ws, unsigned int i)
-{
-       ws.os() << i;
-       return ws;
-}