bool IE_Imp_EPUB::pasteFromBuffer(PD_DocumentRange* pDocRange, const unsigned char* pData, UT_uint32 lenData, const char* /*szEncoding*/) { UT_return_val_if_fail(getDoc() == pDocRange->m_pDoc,false); UT_return_val_if_fail(pDocRange->m_pos1 == pDocRange->m_pos2,false); PD_Document * newDoc = new PD_Document(); newDoc->createRawDocument(); IE_Imp_EPUB * pEPUBImp = new IE_Imp_EPUB(newDoc); // // Turn pData into something that can be imported by the open documenb // importer. // GsfInput * pInStream = gsf_input_memory_new((const guint8 *) pData, (gsf_off_t) lenData, FALSE); pEPUBImp->loadFile(newDoc, pInStream); newDoc->finishRawCreation(); IE_Imp_PasteListener * pPasteListen = new IE_Imp_PasteListener(getDoc(), pDocRange->m_pos1, newDoc); newDoc->tellListener(static_cast<PL_Listener *> (pPasteListen)); delete pPasteListen; delete pEPUBImp; UNREFP( newDoc); return true; }
bool IE_Imp_OpenDocument::pasteFromBuffer(PD_DocumentRange * pDocRange, const unsigned char * pData, UT_uint32 lenData, const char * /*szEncoding*/) { UT_return_val_if_fail(getDoc() == pDocRange->m_pDoc,false); UT_return_val_if_fail(pDocRange->m_pos1 == pDocRange->m_pos2,false); PD_Document * newDoc = new PD_Document(); newDoc->createRawDocument(); IE_Imp_OpenDocument * pODImp = new IE_Imp_OpenDocument(newDoc); // // Turn pData into something that can be imported by the open documenb // importer. // GsfInput * pInStream = gsf_input_memory_new((const guint8 *) pData, (gsf_off_t) lenData, FALSE); pODImp->loadFile(newDoc, pInStream); // pInStream deleted after load. newDoc->finishRawCreation(); // Handle RDF for the newdoc { PD_DocumentRDFHandle rdf = newDoc->getDocumentRDF(); rdf->dumpModel("about to broadcast..."); PD_DocumentRDFMutationHandle m = getDoc()->getDocumentRDF()->createMutation(); m->add( rdf ); m->commit(); } // // OK Broadcast from the just filled source document into our current // doc via the paste listener // IE_Imp_PasteListener * pPasteListen = new IE_Imp_PasteListener(getDoc(),pDocRange->m_pos1,newDoc); newDoc->tellListener(static_cast<PL_Listener *>(pPasteListen)); delete pPasteListen; delete pODImp; UNREFP( newDoc); return true; }
UT_Error IE_Imp_EPUB::readStructure() { getDoc()->createRawDocument(); getDoc()->finishRawCreation(); for (std::vector<std::string>::iterator i = m_spine.begin(); i != m_spine.end(); i++) { std::map<std::string, std::string>::iterator iter = m_manifestItems.find(*i); if (iter == m_manifestItems.end()) { UT_DEBUGMSG(("Manifest item with id %s not found\n", (*i).c_str())); return UT_ERROR; } std::string itemPath = m_tmpDir + G_DIR_SEPARATOR_S + (iter->second); PT_DocPosition posEnd = 0; getDoc()->getBounds(true, posEnd); if (i != m_spine.begin()) { getDoc()->insertStrux(posEnd, PTX_Section, NULL, NULL); getDoc()->insertStrux(posEnd+1, PTX_Block, NULL, NULL); posEnd+=2; } GsfInput* itemInput = UT_go_file_open(itemPath.c_str(), NULL); if (itemInput == NULL) { UT_DEBUGMSG(("Can`t open item for reading\n")); return UT_ERROR; } PD_Document *currentDoc = new PD_Document(); currentDoc->createRawDocument(); const char *suffix = strchr(itemPath.c_str(), '.'); XAP_App::getApp()->getPrefs()->setIgnoreNextRecent(); if (currentDoc->importFile(itemPath.c_str(), IE_Imp::fileTypeForSuffix(suffix), true, false, NULL) != UT_OK) { UT_DEBUGMSG(("Failed to import file %s\n", itemPath.c_str())); return UT_ERROR; } currentDoc->finishRawCreation(); // const gchar * attributes[3] = { // "listid", // "0", // 0 // }; // PT_DocPosition pos; // currentDoc->getBounds(true, pos); // currentDoc->insertStrux(pos, PTX_Block, attributes, NULL, NULL); IE_Imp_PasteListener * pPasteListener = new IE_Imp_PasteListener( getDoc(), posEnd, currentDoc); currentDoc->tellListener(static_cast<PL_Listener *> (pPasteListener)); DELETEP(pPasteListener); UNREFP(currentDoc); g_object_unref(G_OBJECT(itemInput)); } return UT_OK; }