#include "KSGSText.h" #include "KSGSTyp.h" #include "../Error/Error.h" #include "KSGSBool.h" #include "KSGSInt.h" #include "KSGSDouble.h" using namespace KSGScript; // Inhalt der KSGSTextKlasse Klasse aus KSGSText.h // Konstruktor KSGSTextKlasse::KSGSTextKlasse( KSGScriptProcessor *zObj, const char *std ) : KSGSKlasseInstanz( KSGS_TEXT, 0, 0, zObj ) { val = new Text( std ); } // Destruktor KSGSTextKlasse::~KSGSTextKlasse() { val->release(); } // nicht constant KSGSVariable *KSGSTextKlasse::startFunktion( int id, bool access, RCArray< KSGSVariable > *parameter ) { KSGSVariable *ret = 0; switch( id ) { case 0: // void setSuchGrenzen( int, int ) if( parameter->getEintragAnzahl() < 2 ) error( 20, {}, obj ); val->setSuchGrenzen( (char)( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 ), (char)( parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 ) ); break; case 1: // void setText( Text ) if( parameter->getEintragAnzahl() < 1 ) error( 20, {}, obj ); val->setText( parameter->z( 0 ) ? parameter->z( 0 )->getText() : new Text( "" ) ); break; case 2: // void anhängen( Text ) if( parameter->getEintragAnzahl() < 1 ) error( 20, {}, obj ); val->append( parameter->z( 0 ) ? parameter->z( 0 )->getText() : new Text( "" ) ); break; case 3: // void einfügen( int, Text ) if( parameter->getEintragAnzahl() < 2 ) error( 20, {}, obj ); val->insert( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0, parameter->z( 1 ) ? parameter->z( 1 )->getText() : new Text( "" ) ); break; case 4: // void ersetzen( int, int, Text ) if( parameter->getEintragAnzahl() < 3 ) error( 20, {}, obj ); val->ersetzen( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0, parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0, parameter->z( 2 ) ? parameter->z( 2 )->getText() : new Text( "" ) ); break; case 5: // void löschen( int, int ) if( parameter->getEintragAnzahl() < 2 ) error( 20, {}, obj ); val->remove( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0, parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 ); break; case 6: // int getLänge() ret = new KSGSIntKlasse( obj, val->getLength() ); break; case 7: // bool hat( Text ) if( parameter->getEintragAnzahl() < 1 ) error( 20, {}, obj ); ret = new KSGSBoolKlasse( obj, val->hat( parameter->z( 0 ) ? parameter->z( 0 )->getText() : new Text( "" ) ) ); break; case 8: // bool istGleich( Text ) if( parameter->getEintragAnzahl() < 1 ) error( 20, {}, obj ); ret = new KSGSBoolKlasse( obj, val->istGleich( parameter->z( 0 ) ? parameter->z( 0 )->getText() : new Text( "" ) ) ); break; case 9: // int anzahlVon( Text ) if( parameter->getEintragAnzahl() < 1 ) error( 20, {}, obj ); ret = new KSGSIntKlasse( obj, val->anzahlVon( parameter->z( 0 ) ? parameter->z( 0 )->getText() : new Text( "" ) ) ); break; case 10: // int positionVon( Text, int ) if( parameter->getEintragAnzahl() < 2 ) error( 20, {}, obj ); ret = new KSGSIntKlasse( obj, val->positionVon( parameter->z( 0 ) ? parameter->z( 0 )->getText() : new Text( "" ), parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 ) ); break; case 11: // Text getTeilText( int, int ) if( 1 ) { Text *txt = val->getTeilText( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0, parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 ); if( !txt ) txt = new Text(); ret = new KSGSTextKlasse( obj, *txt ); txt->release(); } break; default: // unbekannt error( 19, {}, obj ); break; } parameter->release(); return ret; } KSGSVariable *KSGSTextKlasse::doOperator( int id, KSGSVariable *rechts ) { if( !rechts ) { error( 3, {}, obj ); return 0; } KSGSVariable *ret = 0; switch( id ) { case KSGS_O_SET: val->setText( rechts->getText() ); ret = dynamic_cast( getThis() ); break; case KSGS_O_PLUSSET: val->append( rechts->getText() ); ret = dynamic_cast( getThis() ); break; case KSGS_O_MINUSSET: val->append( rechts->getText() ); ret = dynamic_cast( getThis() ); break; case KSGS_O_GLEICH: ret = new KSGSBoolKlasse( obj, val->istGleich( rechts->getText() ) ); break; case KSGS_O_KLEINERGLEICH: if( 1 ) { Text *txt = rechts->getText(); ret = new KSGSBoolKlasse( obj, val->istGleich( rechts->getText() ) || *val < *txt ); txt->release(); } break; case KSGS_O_GREATERGLEICH: if( 1 ) { Text *txt = rechts->getText(); ret = new KSGSBoolKlasse( obj, val->istGleich( rechts->getText() ) || *val > *txt ); txt->release(); } break; case KSGS_O_UNGLEICH: ret = new KSGSBoolKlasse( obj, !val->istGleich( rechts->getText() ) ); break; case KSGS_O_KLEINER: if( 1 ) { Text *txt = rechts->getText(); ret = new KSGSBoolKlasse( obj, *val < *txt ); txt->release(); } break; case KSGS_O_GREATER: if( 1 ) { Text *txt = rechts->getText(); ret = new KSGSBoolKlasse( obj, *val > *txt ); txt->release(); } break; case KSGS_O_PLUS: if( 1 ) { Text *txt = rechts->getText(); ret = new KSGSTextKlasse( obj, Text( (char *)val ) += (char *)*txt ); txt->release(); } break; case KSGS_O_MINUS: if( 1 ) { Text t( (char *)val ); t.remove( rechts->getText() ); ret = new KSGSTextKlasse( obj, t ); } break; } if( !ret ) error( 21, {}, obj ); if( rechts ) rechts->release(); return ret; } // constant Text *KSGSTextKlasse::getVal() const { return dynamic_cast( val->getThis() ); } Text *KSGSTextKlasse::zVal() const { return val; } KSGSVariable *KSGSTextKlasse::umwandelnIn( int typ ) const { switch( typ ) { case KSGS_BOOL: if( val->istGleich( "true" ) ) return new KSGSBoolKlasse( obj, 1 ); if( val->istGleich( "false" ) ) return new KSGSBoolKlasse( obj, 0 ); return new KSGSBoolKlasse( obj, (int)*val != 0 ); case KSGS_INT: return new KSGSIntKlasse( obj, *val ); case KSGS_DOUBLE: return new KSGSDoubleKlasse( obj, *val ); } error( 16, {}, obj ); return 0; }