diff options
Diffstat (limited to 'kig/scripting/python_type.cc')
-rw-r--r-- | kig/scripting/python_type.cc | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/kig/scripting/python_type.cc b/kig/scripting/python_type.cc new file mode 100644 index 00000000..0180e828 --- /dev/null +++ b/kig/scripting/python_type.cc @@ -0,0 +1,195 @@ +// Copyright (C) 2003 Dominique Devriese <devriese@kde.org> + +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +// 02110-1301, USA. + +#include "python_type.h" + +#include "python_scripter.h" + +#include "../objects/object_imp.h" +#include "../objects/bogus_imp.h" + +class PythonCompiledScriptImp + : public BogusImp +{ + mutable CompiledPythonScript mscript; +public: + typedef BogusImp Parent; + static const ObjectImpType* stype(); + const ObjectImpType* type() const; + + PythonCompiledScriptImp( const CompiledPythonScript& s ); + + void visit( ObjectImpVisitor* vtor ) const; + ObjectImp* copy() const; + bool equals( const ObjectImp& rhs ) const; + + bool isCache() const; + + CompiledPythonScript& data() const { return mscript; }; +}; + +PythonCompiledScriptImp::PythonCompiledScriptImp( const CompiledPythonScript& s ) + : BogusImp(), mscript( s ) +{ + +} + +const ObjectImpType* PythonCompiledScriptImp::stype() +{ + static const ObjectImpType t( BogusImp::stype(), "python-compiled-script-imp", + 0, 0, 0, 0, 0, 0, 0, 0, 0 ); + return &t; +} + +const ObjectImpType* PythonCompiledScriptImp::type() const +{ + return PythonCompiledScriptImp::stype(); +} + +void PythonCompiledScriptImp::visit( ObjectImpVisitor* ) const +{ + // TODO ? +} + +ObjectImp* PythonCompiledScriptImp::copy() const +{ + return new PythonCompiledScriptImp( mscript ); +} + +bool PythonCompiledScriptImp::equals( const ObjectImp& ) const +{ + // problem ? + return true; +} + +bool PythonCompiledScriptImp::isCache() const +{ + return true; +} + +KIG_INSTANTIATE_OBJECT_TYPE_INSTANCE( PythonCompileType ) + +PythonCompileType::PythonCompileType() + : ObjectType( "PythonCompileType" ) +{ +} + +PythonCompileType::~PythonCompileType() +{ +} + +const PythonCompileType* PythonCompileType::instance() +{ + static const PythonCompileType t; + return &t; +} + +const ObjectImpType* PythonCompileType::impRequirement( const ObjectImp*, const Args& ) const +{ + return StringImp::stype(); +} + +const ObjectImpType* PythonCompileType::resultId() const +{ + return PythonCompiledScriptImp::stype(); +} + +ObjectImp* PythonCompileType::calc( const Args& parents, const KigDocument& ) const +{ + assert( parents.size() == 1 ); + if ( !parents[0]->inherits( StringImp::stype() ) ) return new InvalidImp; + + const StringImp* si = static_cast<const StringImp*>( parents[0] ); + QString s = si->data(); + + CompiledPythonScript cs = PythonScripter::instance()->compile( s.latin1() ); + + if ( cs.valid() ) + return new PythonCompiledScriptImp( cs ); + else + return new InvalidImp(); +} + +KIG_INSTANTIATE_OBJECT_TYPE_INSTANCE( PythonExecuteType ) + +PythonExecuteType::PythonExecuteType() + : ObjectType( "PythonExecuteType" ) +{ +} + +PythonExecuteType::~PythonExecuteType() +{ +} + +const PythonExecuteType* PythonExecuteType::instance() +{ + static const PythonExecuteType t; + return &t; +} + +ObjectImp* PythonExecuteType::calc( const Args& parents, const KigDocument& d ) const +{ + assert( parents.size() >= 1 ); + if( !parents[0]->inherits( PythonCompiledScriptImp::stype() ) ) return new InvalidImp; + + CompiledPythonScript& script = static_cast<const PythonCompiledScriptImp*>( parents[0] )->data(); + + Args args( parents.begin() + 1, parents.end() ); + return script.calc( args, d ); +} + +const ObjectImpType* PythonExecuteType::impRequirement( const ObjectImp* o, const Args& parents ) const +{ + if ( o == parents[0] ) return PythonCompiledScriptImp::stype(); + else return ObjectImp::stype(); +} + +const ObjectImpType* PythonExecuteType::resultId() const +{ + return ObjectImp::stype(); +} + +std::vector<ObjectCalcer*> PythonCompileType::sortArgs( const std::vector<ObjectCalcer*>& args ) const +{ + return args; +} + +Args PythonCompileType::sortArgs( const Args& args ) const +{ + return args; +} + +std::vector<ObjectCalcer*> PythonExecuteType::sortArgs( const std::vector<ObjectCalcer*>& args ) const +{ + return args; +} + +Args PythonExecuteType::sortArgs( const Args& args ) const +{ + return args; +} + +bool PythonCompileType::isDefinedOnOrThrough( const ObjectImp*, const Args& ) const +{ + return false; +} + +bool PythonExecuteType::isDefinedOnOrThrough( const ObjectImp*, const Args& ) const +{ + return false; +} + |