29#include <tqiodevice.h>
31#include <tqtextcodec.h>
32#include <tqtextstream.h>
35#include <kgenericfactory.h>
37#include <KoFilterChain.h>
38#include <KoFilterManager.h>
41#include <KWEFStructures.h>
42#include <KWEFBaseWorker.h>
43#include <KWEFKWordLeader.h>
45#include <ExportDialog.h>
46#include <asciiexport.h>
49class ASCIIExportFactory : KGenericFactory<ASCIIExport, KoFilter>
52 ASCIIExportFactory() : KGenericFactory<ASCIIExport, KoFilter>(
"kwordasciiexport")
57 virtual void setupTranslations(
void)
59 TDEGlobal::locale()->insertCatalogue(
"kofficefilters");
63K_EXPORT_COMPONENT_FACTORY(libasciiexport, ASCIIExportFactory())
69 ASCIIWorker() : m_ioDevice(NULL), m_streamOut(NULL), m_eol(
"\n")
74 virtual ~ASCIIWorker()
76 delete m_streamOut;
delete m_ioDevice;
80 virtual bool doOpenFile(
const TQString& filenameOut,
const TQString& to);
81 virtual bool doCloseFile(
void);
83 virtual bool doOpenDocument(
void);
84 virtual bool doCloseDocument(
void);
86 virtual bool doFullParagraphList(
const TQValueList<ParaData>& paraList);
87 virtual bool doFullParagraph(
const ParaData& para);
88 virtual bool doFullParagraph(
const TQString& paraText,
90 const ValueListFormatData& paraFormatDataList);
93 TQString getEndOfLine(
void)
const {
return m_eol; }
94 void setEndOfLine(
const TQString& str) { m_eol = str; }
96 TQTextCodec* getCodec(
void)
const {
return m_codec; }
97 void setCodec(TQTextCodec* codec) { m_codec = codec; }
100 virtual bool ProcessTable(
const Table& table);
101 virtual bool ProcessParagraphData (
const TQString& paraText,
102 const ValueListFormatData& paraFormatDataList);
105 TQIODevice* m_ioDevice;
106 TQTextStream* m_streamOut;
108 TQTextCodec* m_codec;
110 TQStringList m_automaticNotes;
111 TQString m_manualNotes;
114 CounterData::Style m_typeList;
121bool ASCIIWorker::doOpenFile(
const TQString& filenameOut,
const TQString& )
123 m_ioDevice =
new TQFile(filenameOut);
127 kdError(30502) <<
"No output file! Aborting!" << endl;
131 if (!m_ioDevice->open(IO_WriteOnly))
133 kdError(30502) <<
"Unable to open output file!" << endl;
137 m_streamOut =
new TQTextStream(m_ioDevice);
140 kdError(30502) <<
"Could not create output stream! Aborting!" << endl;
145 kdDebug(30502) <<
"Charset used: " << getCodec()->name() << endl;
149 kdError(30502) <<
"Could not create TQTextCodec! Aborting" << endl;
153 m_streamOut->setCodec(getCodec());
158bool ASCIIWorker::doCloseFile(
void)
167bool ASCIIWorker::doOpenDocument(
void)
173bool ASCIIWorker::doCloseDocument(
void)
176 if (!m_automaticNotes.empty())
178 *m_streamOut << m_eol;
180 for (TQStringList::Iterator it = m_automaticNotes.begin(); it != m_automaticNotes.end(); ++it)
182 *m_streamOut <<
"[" << noteNumber <<
"] " << *it;
187 if (!m_manualNotes.isEmpty())
188 *m_streamOut << m_eol << m_manualNotes;
193bool ASCIIWorker::doFullParagraphList(
const TQValueList<ParaData>& paraList)
195 for (TQValueList<ParaData>::ConstIterator it = paraList.begin();
196 it != paraList.end();
199 if (!doFullParagraph(*it))
return false;
205bool ASCIIWorker::doFullParagraph(
const ParaData& para)
207 return doFullParagraph(para.text, para.layout, para.formattingList);
210bool ASCIIWorker::doFullParagraph(
const TQString& paraText,
const LayoutData& layout,
211 const ValueListFormatData& paraFormatDataList)
213 kdDebug(30502) <<
"Entering ASCIIWorker::doFullParagraph" << endl;
222 if (!m_inList || (layout.counter.style!=m_typeList))
227 m_typeList=layout.counter.style;
234 case CounterData::STYLE_CUSTOMBULLET:
238 *m_streamOut <<
"- ";
241 case CounterData::STYLE_NONE:
246 case CounterData::STYLE_CIRCLEBULLET:
249 *m_streamOut <<
"o ";
252 case CounterData::STYLE_SQUAREBULLET:
255 *m_streamOut <<
"~ ";
258 case CounterData::STYLE_DISCBULLET:
261 *m_streamOut <<
"* ";
264 case CounterData::STYLE_NUM:
265 case CounterData::STYLE_CUSTOM:
268 *m_streamOut << TQString::number(m_counterList,10);
271 case CounterData::STYLE_ALPHAB_L:
275 for (
int i=m_counterList;i>0;i/=26)
276 strTemp=TQChar(0x40+i%26)+strTemp;
277 *m_streamOut << strTemp;
280 case CounterData::STYLE_ALPHAB_U:
284 for (
int i=m_counterList;i>0;i/=26)
285 strTemp=TQChar(0x40+i%26)+strTemp;
286 *m_streamOut << strTemp;
289 case CounterData::STYLE_ROM_NUM_L:
293 *m_streamOut << TQString::number(m_counterList,10);
296 case CounterData::STYLE_ROM_NUM_U:
300 *m_streamOut << TQString::number(m_counterList,10);
304 ProcessParagraphData ( paraText, paraFormatDataList);
312 if (!layout.counter.depth)
314 *m_streamOut <<
"###################################" << m_eol;
315 *m_streamOut <<
"# ";
316 ProcessParagraphData ( paraText, paraFormatDataList);
317 *m_streamOut <<
"###################################" << m_eol;
319 else if (layout.counter.depth==1)
321 *m_streamOut <<
"#### ";
322 ProcessParagraphData ( paraText, paraFormatDataList);
324 else if (layout.counter.depth==2)
326 *m_streamOut <<
"## ";
327 ProcessParagraphData ( paraText, paraFormatDataList);
329 else if (layout.counter.depth==3)
331 *m_streamOut <<
"# ";
332 ProcessParagraphData ( paraText, paraFormatDataList);
336 ProcessParagraphData ( paraText, paraFormatDataList);
341 ProcessParagraphData ( paraText, paraFormatDataList);
345 if (!layout.counter.
text.isEmpty())
346 *m_streamOut << layout.counter.
text <<
" ";
348 if (!ProcessParagraphData(paraText, paraFormatDataList))
return false;
351 kdDebug(30502) <<
"Exiting ASCIIWorker::doFullParagraph" << endl;
356bool ASCIIWorker::ProcessTable(
const Table& table)
358 kdDebug(30502) <<
"processTable CALLED!" << endl;
361 for (TQValueList<TableCell>::ConstIterator it = table.cellList.begin();
362 it != table.cellList.end();
365 if (!doFullParagraphList(*(*it).paraList))
return false;
374bool ASCIIWorker::ProcessParagraphData(
const TQString& paraText,
375 const ValueListFormatData& paraFormatDataList)
377 bool lastSegmentWasText =
true;
379 if (!paraText.isEmpty())
381 ValueListFormatData::ConstIterator paraFormatDataIt;
383 for (paraFormatDataIt = paraFormatDataList.begin ();
384 paraFormatDataIt != paraFormatDataList.end ();
387 lastSegmentWasText =
true;
389 switch ((*paraFormatDataIt).id)
393 TQString strText(paraText.mid((*paraFormatDataIt).pos,(*paraFormatDataIt).len));
394 strText = strText.replace(TQChar(10), m_eol,
true);
395 *m_streamOut << strText;
400 if (11==(*paraFormatDataIt).variable.m_type)
403 TQString value = (*paraFormatDataIt).variable.getFootnoteValue();
404 bool automatic = (*paraFormatDataIt).variable.getFootnoteAuto();
405 TQValueList<ParaData> *paraList = (*paraFormatDataIt).variable.getFootnotePara();
409 TQValueList<ParaData>::ConstIterator it;
410 TQValueList<ParaData>::ConstIterator end(paraList->end());
411 for (it=paraList->begin();it!=end;++it)
412 notestr += (*it).text.stripWhiteSpace().replace(TQChar(10), m_eol,
true) + m_eol;
417 *m_streamOut << m_automaticNotes.count() + 1;
418 m_automaticNotes.append(notestr);
423 *m_streamOut << value;
424 m_manualNotes +=
"[" + value +
"] " + notestr;
432 *m_streamOut << (*paraFormatDataIt).variable.m_text;
438 if ((*paraFormatDataIt).frameAnchor.type == 6)
440 if ((*paraFormatDataIt).pos)
441 *m_streamOut << m_eol;
443 if (!ProcessTable((*paraFormatDataIt).frameAnchor.table))
448 kdWarning(30502) <<
"Unsupported frame anchor type: "
449 << (*paraFormatDataIt).frameAnchor.type << endl;
452 lastSegmentWasText =
false;
457 kdWarning(30502) <<
"Not supported paragraph type: "
458 << (*paraFormatDataIt).id << endl;
465 if (lastSegmentWasText)
466 *m_streamOut << m_eol;
472ASCIIExport::ASCIIExport(KoFilter*,
const char*,
const TQStringList&)
477KoFilter::ConversionStatus ASCIIExport::convert(
const TQCString& from,
const TQCString& to)
479 if (to !=
"text/plain" || from !=
"application/x-kword")
481 return KoFilter::NotImplemented;
483 AsciiExportDialog* dialog = 0;
484 if (!m_chain->manager()->getBatchMode())
486 dialog =
new AsciiExportDialog();
489 kdError(30502) <<
"Dialog has not been created! Aborting!" << endl;
490 return KoFilter::StupidError;
495 kdError(30502) <<
"Dialog was aborted! Aborting filter!" << endl;
496 return KoFilter::UserCancelled;
499 ASCIIWorker* worker =
new ASCIIWorker();
503 kdError(30502) <<
"Cannot create Worker! Aborting!" << endl;
505 return KoFilter::StupidError;
509 codec = dialog->getCodec();
511 codec = TQTextCodec::codecForName(
"UTF-8");
515 kdError(30502) <<
"No codec!" << endl;
517 return KoFilter::StupidError;
520 worker->setCodec( codec );
522 worker->setEndOfLine(dialog->getEndOfLine());
524 worker->setEndOfLine(
"\n");
528 KWEFKWordLeader* leader =
new KWEFKWordLeader(worker);
532 kdError(30502) <<
"Cannot create Worker! Aborting!" << endl;
534 return KoFilter::StupidError;
537 KoFilter::ConversionStatus result = leader->convert(m_chain,from,to);
545#include <asciiexport.moc>
TQString text
text at the time of saving (no formatting info though)
@ NUM_LIST
Numbered as a list item.
@ NUM_CHAPTER
Numbered as a heading.
Base worker of the libexport system.