void visit( int indent, POLE::Storage* storage, std::string path ) { std::list<std::string> entries; entries = storage->entries( path ); std::list<std::string>::iterator it; for( it = entries.begin(); it != entries.end(); ++it ) { std::string name = *it; std::string fullname = path + name; for( int j = 0; j < indent; j++ ) std::cout << " "; POLE::Stream* ss = new POLE::Stream( storage, fullname ); std::cout << name; if( ss ) if( !ss->fail() )std::cout << " (" << ss->size() << ")"; std::cout << std::endl; delete ss; if( storage->isDirectory( fullname ) ) visit( indent+1, storage, fullname + "/" ); } }
KoFilter::ConversionStatus HancomWordImport::convert( const QByteArray& from, const QByteArray& to ) { if ( from != "application/x-hwp" ) return KoFilter::NotImplemented; if ( to != "application/vnd.oasis.opendocument.text" ) return KoFilter::NotImplemented; d->inputFile = m_chain->inputFile(); d->outputFile = m_chain->outputFile(); d->paragraphs.clear(); POLE::Storage storage( QFile::encodeName(d->inputFile) ); if( !storage.open() ) return KoFilter::WrongFormat; POLE::Stream* stream; stream = new POLE::Stream( &storage, "/PrvText" ); if( stream->fail() || (stream->size() == 0) ) { delete stream; return KoFilter::WrongFormat; } int len = stream->size() / 2; QString plaindoc; plaindoc.reserve( len ); unsigned char* buf = new unsigned char [stream->size()]; stream->read( buf, stream->size()); for(int i = 0; i < len; i++ ) plaindoc.append( QChar((int)readU16(buf + i*2) ) ); delete[] buf; delete stream; // split into paragraphs d->paragraphs = QStringList::split( "\n", plaindoc, true ); // create output store KoStore* storeout; storeout = KoStore::createStore( d->outputFile, KoStore::Write, "application/vnd.oasis.opendocument.text", KoStore::Zip ); if ( !storeout ) { kWarning() << "Couldn't open the requested file."; return KoFilter::FileNotFound; } if ( !storeout->open( "styles.xml" ) ) { kWarning() << "Couldn't open the file 'styles.xml'."; return KoFilter::CreationError; } storeout->write( d->createStyles() ); storeout->close(); if ( !storeout->open( "content.xml" ) ) { kWarning() << "Couldn't open the file 'content.xml'."; return KoFilter::CreationError; } storeout->write( d->createContent() ); storeout->close(); // store document manifest storeout->enterDirectory( "META-INF" ); if ( !storeout->open( "manifest.xml" ) ) { kWarning() << "Couldn't open the file 'META-INF/manifest.xml'."; return KoFilter::CreationError; } storeout->write( d->createManifest() ); storeout->close(); // we are done! d->inputFile.clear(); d->outputFile.clear(); delete storeout; return KoFilter::OK; }