- if (p <= last_) {
- need_size(last_ + shift);
- memmove(&bf_[p + shift], &bf_[p], last_ - p);
- last_ += shift;
- bf_[last_] = 0;
+ for (const_iterator it = begin(); it != end(); ++it)
+ os << "<" << it->nucleus() << ">";
+}
+
+
+std::ostream & operator<<(std::ostream & os, MathArray const & ar)
+{
+ ar.dump2(os);
+ return os;
+}
+
+
+// returns sequence of char with same code starting at it up to end
+// it might be less, though...
+string charSequence(MathArray::const_iterator it, MathArray::const_iterator end)
+{
+ string s;
+ MathCharInset const * p = it->nucleus()->asCharInset();
+ if (!p)
+ return s;
+
+ for (MathTextCodes c = p->code(); it != end; ++it) {
+ if (!it->nucleus())
+ break;
+ p = it->nucleus()->asCharInset();
+ if (!p || p->code() != c)
+ break;
+ s += p->getChar();