insilmaril@139: #include insilmaril@139: insilmaril@0: #include insilmaril@0: #include insilmaril@164: #include insilmaril@0: insilmaril@0: #include "misc.h" insilmaril@0: insilmaril@129: QString qpointToString (const QPoint &p) insilmaril@129: { insilmaril@129: return "(" + QString("%1").arg(p.x()) +","+ QString ("%1").arg (p.y()) +")"; insilmaril@129: } insilmaril@0: insilmaril@408: QString qpointfToString (const QPointF &p) insilmaril@408: { insilmaril@408: return "(" + QString("%1").arg(p.x()) +","+ QString ("%1").arg (p.y()) +")"; insilmaril@408: } insilmaril@408: insilmaril@0: ostream &operator<< (ostream &stream, QPoint const &p) insilmaril@0: { insilmaril@366: stream << "("<=0) insilmaril@0: return M_PI_2; insilmaril@0: else insilmaril@0: return 3* M_PI_2; insilmaril@0: } else insilmaril@0: { insilmaril@0: if (p.y()>0) insilmaril@408: return (qreal)(M_PI - atan ( (qreal)(p.x()) / (qreal)(p.y()) ) ); insilmaril@0: else insilmaril@0: if (p.x()<0) insilmaril@408: return (qreal)( 2*M_PI - atan ( (qreal)(p.x()) / (qreal)(p.y()) ) ); insilmaril@0: else insilmaril@408: return (qreal)( - atan ( (qreal)(p.x()) / (qreal)(p.y()) ) ); insilmaril@0: } insilmaril@0: } insilmaril@0: insilmaril@408: QPointF normalise(const QPointF &p) insilmaril@0: { insilmaril@0: // Calculate normalised position (fixed length) insilmaril@0: insilmaril@408: qreal px=p.x(); insilmaril@408: qreal py=p.y(); insilmaril@408: qreal x; insilmaril@408: qreal y; insilmaril@408: qreal r=150; insilmaril@0: insilmaril@0: if (px==0) insilmaril@0: { insilmaril@0: x=0; insilmaril@0: if (py>=0) insilmaril@0: y=r; insilmaril@0: else insilmaril@0: y=-r; insilmaril@0: } else insilmaril@0: { insilmaril@408: qreal sign; insilmaril@408: qreal a; insilmaril@0: if (px>0) insilmaril@0: sign=1; insilmaril@0: else insilmaril@0: sign=-1; insilmaril@0: insilmaril@0: a=atan (py / px); insilmaril@0: x=cos (a) * r *sign; insilmaril@0: y=sin (a) * r *sign; insilmaril@0: } insilmaril@0: return QPoint ((int) (x),(int) (y)); insilmaril@0: } insilmaril@0: insilmaril@166: insilmaril@0: // returns masked "<" ">" "&" insilmaril@0: QString quotemeta(const QString &s) insilmaril@0: { insilmaril@0: QString r=s; insilmaril@0: QRegExp rx("&(?!amp;)"); insilmaril@0: r.replace ( rx,"&"); insilmaril@0: rx.setPattern( ">"); insilmaril@0: r.replace ( rx,">"); insilmaril@0: rx.setPattern( "<"); insilmaril@0: r.replace ( rx,"<"); insilmaril@0: rx.setPattern( "\""); insilmaril@0: r.replace ( rx,"""); insilmaril@0: return r; insilmaril@0: } insilmaril@0: insilmaril@408: insilmaril@408: qreal max(qreal a, qreal b) insilmaril@0: { insilmaril@0: if (a>b) insilmaril@0: return a; insilmaril@0: return b; insilmaril@0: } insilmaril@0: insilmaril@0: int xmlObj::actindent=0; // make instance of actindent insilmaril@0: insilmaril@0: xmlObj::xmlObj() insilmaril@0: { insilmaril@0: indentwidth=4; insilmaril@0: } insilmaril@0: insilmaril@0: insilmaril@0: // returns insilmaril@0: QString xmlObj::singleElement(QString s, QString at) insilmaril@0: { insilmaril@0: return indent() + "<" + s +" " + at +" " + "/>\n"; insilmaril@0: } insilmaril@0: insilmaril@0: // returns insilmaril@0: QString xmlObj::beginElement(QString s) insilmaril@0: { insilmaril@0: return indent() + "<" + s + ">\n"; insilmaril@0: } insilmaril@0: insilmaril@0: // returns insilmaril@0: QString xmlObj::beginElement(QString s, QString at) insilmaril@0: { insilmaril@0: return indent() + "<" + s + " " + at + ">\n"; insilmaril@0: } insilmaril@0: insilmaril@0: // returns insilmaril@0: QString xmlObj::endElement(QString s) insilmaril@0: { insilmaril@0: return indent() + "\n"; insilmaril@0: } insilmaril@0: insilmaril@0: // returns at="val" insilmaril@0: QString xmlObj::attribut(QString at, QString val) insilmaril@0: { insilmaril@0: return " " + at + "=\"" + quotemeta (val) + "\""; insilmaril@0: } insilmaril@0: insilmaril@0: // returns val insilmaril@0: QString xmlObj::valueElement(QString el, QString val) insilmaril@0: { insilmaril@0: return indent() + "<" + el + ">" + quotemeta(val) + "\n"; insilmaril@0: } insilmaril@0: insilmaril@0: // returns val insilmaril@0: QString xmlObj::valueElement(QString el, QString val, QString at) insilmaril@0: { insilmaril@0: return indent() + "<" + el + " " + at + ">" + quotemeta(val) + "\n"; insilmaril@0: } insilmaril@0: insilmaril@0: void xmlObj::incIndent() insilmaril@0: { insilmaril@0: actindent++; insilmaril@0: } insilmaril@0: insilmaril@0: void xmlObj::decIndent() insilmaril@0: { insilmaril@0: actindent--; insilmaril@0: if (actindent<0) actindent=0; insilmaril@0: } insilmaril@0: insilmaril@0: QString xmlObj::indent() insilmaril@0: { insilmaril@0: QString s; insilmaril@0: int i; insilmaril@0: for (i=0; i