
#include <string>
#include <vector>
#include <iostream>
#include <sstream>
using namespace std;



#include <primitivewindow.h>



void primitiveWindow::addparagraph
(
  string const & s, 
  uintc len
)
{
  uint slen = s.size();
  uint k=0;
  uint k2;
  uint k3;
  uint k4;

  for ( ; k<slen; )
  {
    k4 = k + len;
    // Test if at the end of the iteration.
    //if (slen-k <= len )
    if (k4 >= slen)
    {
      addline(s.substr(k));
      return;
    }

    k2 = s.find(" ",k4);
    if (k2==string::npos)
    {
      addline(s.substr(k));
      return;
    }

    addline(s.substr(k,k2-k));

    k=k2;

    k3 = s.find_first_not_of(" ",k);
    if (k3==string::npos)
      return;

    k = k3;
  }
}








primitiveWindow::primitiveWindow
(
  point3<double> const & X0_,
  doublec columnchange_,
  void * font_
)
  : gobjContainer(true), X0(X0_), X(X0), columnchange(columnchange_), font(font_)  
{

}


void primitiveWindow::eval(string const & s)
{
  nuke();

  vector<string> vs;
  interpretString(vs,s);
  uintc sz=vs.size();
  for (uint i=0; i<sz; ++i)
  {
    push( new gobjMyBitmapCharacter(vs[i],X,font) );
    X.y -= columnchange;
  }
}


void primitiveWindow::interpretString(vector<string> &v, string const & s)
{
  v.clear();

  if (s.empty())
    return;

  int delimeter=10;

  uint sz = s.size();
//cout << "sz=" << sz << endl;
  uint i0=0;
  uint i=0;
  for ( ; i<sz; ++i)
  {
    if (s[i]!=delimeter)
      continue;

    if (i0==i)
    {
      i0=i+1;
      continue;
    }

    v.push_back( s.substr(i0,i-i0) );
    i0=i+1;

    if (i+1<sz)
    {
      if( s[i+1]==delimeter )
      {
        v.push_back("");
        i0=i+2;
        ++i;
      }
    }
  }

  if (i0==0)
    v.push_back(s);

//cout << "Test" << endl;
//cout << SHOW(v.size());
//for (uint i=0; i<v.size(); ++i)
//{
//  cout << "*" << v[i] << "*" << endl;
//}

}




