26#include <tqfileinfo.h>
27#include <tqvaluelist.h>
31#include <KoFilterChain.h>
32#include <kgenericfactory.h>
38typedef KGenericFactory<WMLImport, KoFilter> WMLImportFactory;
39K_EXPORT_COMPONENT_FACTORY( libwmlimport, WMLImportFactory(
"kofficefilters" ) )
41WMLImport::WMLImport( KoFilter *, const
char *, const TQStringList& ):
47class WMLConverter:
public WMLParser
51 TQString documentInfo;
53 virtual void parse(
const char* filename );
54 virtual bool doOpenCard( TQString, TQString );
55 virtual bool doCloseCard();
56 virtual bool doParagraph( TQString text, WMLFormatList formatList,
62WMLConverter::WMLConverter()
67static TQString WMLFormatAsXML( WMLFormat format )
71 if( format.href.isEmpty() )
73 TQFont font = KoGlobal::defaultFont();
74 TQString fontFamily = font.family();
75 TQString fontSize = TQString::number(
76 format.fontsize == WMLFormat::Big ? font.pointSizeFloat()+3 :
77 format.fontsize == WMLFormat::Small ? font.pointSizeFloat()-3 : font.pointSizeFloat() );
78 TQString boldness = format.bold ?
"75" :
"50";
79 TQString italic = format.italic ?
"1" :
"0";
80 TQString underline = format.underline ?
"1" :
"0";
82 result =
"<FORMAT id=\"1\" pos=\"" + TQString::number(format.pos) +
83 "\" len=\"" + TQString::number(format.len) +
"\">\n";
84 result.append(
" <FONT name=\"" + fontFamily +
"\" />\n" );
85 result.append(
" <SIZE value=\"" + fontSize +
"\" />\n" );
86 result.append(
" <WEIGHT value=\"" + boldness +
"\" />\n" );
87 result.append(
" <ITALIC value=\"" + italic +
"\" />\n" );
88 result.append(
" <UNDERLINE value=\"" + underline +
"\" />\n" );
89 result.append(
"</FORMAT>\n" );
94 result.append(
"<FORMAT id=\"4\" pos=\"" + TQString::number(format.pos) +
95 "\" len=\"" + TQString::number(format.len) +
"\">\n");
96 result.append(
"<VARIABLE>\n" );
97 result.append(
" <TYPE key=\"STRING\" type=\"9\" text=\"" + format.link +
"\" />\n" );
98 result.append(
" <LINK linkName=\"" + format.link +
"\" hrefName=\"" +
99 format.href +
"\" />\n" );
100 result.append(
"</VARIABLE>\n" );
101 result.append(
"</FORMAT>\n" );
108static TQString WMLLayoutAsXML( WMLLayout layout )
112 TQString align =
"left";
113 if( layout.align == WMLLayout::Center ) align =
"center";
114 if( layout.align == WMLLayout::Right ) align =
"right";
116 TQFont font = KoGlobal::defaultFont();
117 TQString fontFamily = font.family();
118 TQString fontSize = TQString::number( font.pointSizeFloat() );
120 result.append(
"<LAYOUT>\n" );
121 result.append(
" <NAME value=\"Standard\" />\n" );
122 result.append(
" <FLOW align=\"" + align +
"\" />\n" );
123 result.append(
" <LINESPACING value=\"0\" />\n" );
124 result.append(
" <LEFTBORDER width=\"0\" style=\"0\" />\n" );
125 result.append(
" <RIGHTBORDER width=\"0\" style=\"0\" />\n" );
126 result.append(
" <TOPBORDER width=\"0\" style=\"0\" />\n" );
127 result.append(
" <BOTTOMBORDER width=\"0\" style=\"0\" />\n" );
128 result.append(
" <INDENTS />\n" );
129 result.append(
" <OFFSETS />\n" );
130 result.append(
" <PAGEBREAKING />\n" );
131 result.append(
" <COUNTER />\n" );
132 result.append(
" <FORMAT id=\"1\">\n" );
133 result.append(
" <WEIGHT value=\"50\" />\n" );
134 result.append(
" <ITALIC value=\"0\" />\n" );
135 result.append(
" <UNDERLINE value=\"0\" />\n" );
136 result.append(
" <STRIKEOUT value=\"0\" />\n" );
137 result.append(
" <CHARSET value=\"0\" />\n" );
138 result.append(
" <VERTALIGN value=\"0\" />\n" );
139 result.append(
" <FONT name=\"" + fontFamily +
"\" />\n" );
140 result.append(
" <SIZE value=\"" + fontSize +
"\" />\n" );
141 result.append(
" </FORMAT>\n" );
142 result.append(
"</LAYOUT>\n" );
148bool WMLConverter::doOpenCard( TQString
id, TQString title )
150 if( m_title.isEmpty() )
151 m_title = ( !title.isEmpty() ) ? title : id;
157bool WMLConverter::doCloseCard()
160 return doParagraph(
" ", WMLFormatList(), WMLLayout() );
163bool WMLConverter::doParagraph( TQString atext, WMLFormatList formatList,
166 TQString text, formats;
170 text.replace(
'&',
"&" );
171 text.replace(
'<',
"<" );
172 text.replace(
'>',
">" );
175 WMLFormatList::iterator it;
176 for( it=formatList.begin(); it!=formatList.end(); ++it )
178 WMLFormat& format = *it;
179 formats.append( WMLFormatAsXML(format) );
183 root.append(
"<PARAGRAPH>\n" );
184 root.append(
"<TEXT>" + text +
"</TEXT>\n" );
185 root.append(
"<FORMATS>" + formats +
"</FORMATS>\n" );
186 root.append( WMLLayoutAsXML( layout) );
187 root.append(
"</PARAGRAPH>\n" );
192void WMLConverter::parse(
const char* filename )
194 WMLParser::parse( filename );
197 prolog +=
"<!DOCTYPE DOC>\n";
198 prolog +=
"<DOC mime=\"application/x-kword\" syntaxVersion=\"2\" editor=\"KWord\" >\n";
199 prolog +=
"<PAPER width=\"595\" spHeadBody=\"9\" format=\"1\" height=\"841\" fType=\"0\" orientation=\"0\" hType=\"0\" columnspacing=\"2\" spFootBody=\"9\" columns=\"1\" >\n";
200 prolog +=
"<PAPERBORDERS right=\"28\" left=\"28\" bottom=\"42\" top=\"42\" />\n";
201 prolog +=
"</PAPER>\n";
202 prolog +=
"<ATTRIBUTES hasTOC=\"0\" standardpage=\"1\" hasFooter=\"0\" hasHeader=\"0\" processing=\"0\" />\n";
203 prolog +=
"<FRAMESETS>\n";
204 prolog +=
"<FRAMESET frameType=\"1\" frameInfo=\"0\" name=\"Text Frameset 1\" visible=\"1\" >\n";
205 prolog +=
"<FRAME runaround=\"1\" copy=\"0\" right=\"567\" newFrameBehavior=\"0\" left=\"28\" bottom=\"799\" runaroundGap=\"2\" top=\"42\" />\n";
208 epilog =
"</FRAMESET>\n";
209 epilog +=
"</FRAMESETS>\n";
210 epilog +=
"</DOC>\n";
212 root.prepend( prolog );
213 root.append( epilog );
216 documentInfo =
"<!DOCTYPE document-info>\n";
217 documentInfo +=
"<document-info>\n";
218 documentInfo +=
"<log><text></text></log>\n";
219 documentInfo +=
"<author>\n";
220 documentInfo +=
"<full-name></full-name>\n";
221 documentInfo +=
"<title></title>\n";
222 documentInfo +=
"<company></company>\n";
223 documentInfo +=
"<email></email>\n";
224 documentInfo +=
"<telephone></telephone>\n";
225 documentInfo +=
"</author>\n";
226 documentInfo +=
"<about>\n";
227 documentInfo +=
"<abstract></abstract>\n";
228 documentInfo +=
"<title>" + m_title +
"</title>\n";
229 documentInfo +=
"</about>\n";
230 documentInfo +=
"</document-info>";
234KoFilter::ConversionStatus WMLImport::convert(
const TQCString& from,
const TQCString& to )
237 if( to!=
"application/x-kword" || from !=
"text/vnd.wap.wml" )
238 return KoFilter::NotImplemented;
242 filter.parse( m_chain->inputFile().latin1() );
246 if( filter.root.isEmpty() )
247 return KoFilter::StupidError;
249 TQString root = filter.root;
252 KoStoreDevice* out=m_chain->storageFile(
"root", KoStore::Write );
257 TQCString cstring = root.utf8();
258 cstring.prepend(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" );
259 out->writeBlock( (
const char*) cstring, cstring.length() );
263 TQString documentInfo = filter.documentInfo;
266 out = m_chain->storageFile(
"documentinfo.xml", KoStore::Write );
269 TQCString cstring = documentInfo.utf8();
270 cstring.prepend(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" );
272 out->writeBlock( (
const char*) cstring, cstring.length() );
278#include "wmlimport.moc"