diff options
Diffstat (limited to 'filters/kword/html/export/ExportBasic.cpp')
-rw-r--r-- | filters/kword/html/export/ExportBasic.cpp | 366 |
1 files changed, 366 insertions, 0 deletions
diff --git a/filters/kword/html/export/ExportBasic.cpp b/filters/kword/html/export/ExportBasic.cpp new file mode 100644 index 000000000..d222d7df4 --- /dev/null +++ b/filters/kword/html/export/ExportBasic.cpp @@ -0,0 +1,366 @@ +/* + This file is part of the KDE project + Copyright (C) 2001, 2002 Nicolas GOUTTE <goutte@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#include <tqstring.h> +#include <tqtextcodec.h> +#include <tqfile.h> + +#include <tdelocale.h> +#include <kdebug.h> + +#include <KWEFBaseWorker.h> + +#include "ExportFilter.h" +#include "ExportBasic.h" + +HtmlBasicWorker::HtmlBasicWorker( const TQString &cssURL ) +{ + m_cssURL = cssURL; +} + +TQString HtmlBasicWorker::textFormatToCss(const TextFormatting& formatData) const +{// PROVISORY + TQString strElement; + + // Font name + TQString fontName = formatData.fontName; + if ( !fontName.isEmpty() ) + { + strElement+="font-family: "; + strElement+=escapeHtmlText(fontName); // TODO: add alternative font names + strElement+="; "; + } + + const int size=formatData.fontSize; + if (size>0) + { + // We use absolute font sizes. + strElement+="font-size: "; + strElement+=TQString::number(size,10); + strElement+="pt; "; + } + + if ( formatData.fgColor.isValid() ) + { + // Give colour + strElement+="color: "; + strElement+=formatData.fgColor.name(); + strElement+="; "; + } + return strElement; +} + +TQString HtmlBasicWorker::getStartOfListOpeningTag(const CounterData::Style typeList, bool& ordered) +{ + TQString strResult; + switch (typeList) + { + case CounterData::STYLE_CUSTOMBULLET: // We cannot keep the custom type/style + default: + { + ordered=false; + strResult="<ul>\n"; + break; + } + case CounterData::STYLE_NONE: // We cannot specify "no bullet" + { + ordered=false; + strResult="<ul>\n"; + break; + } + case CounterData::STYLE_CIRCLEBULLET: + { + ordered=false; + strResult="<ul type=\"circle\">\n"; + break; + } + case CounterData::STYLE_SQUAREBULLET: + { + ordered=false; + strResult="<ul type=\"square\">\n"; + break; + } + case CounterData::STYLE_DISCBULLET: + { + ordered=false; + strResult="<ul type=\"disc\">\n"; + break; + } + case CounterData::STYLE_NUM: + { + ordered=true; + strResult="<ol type=\"1\">\n"; + break; + } + case CounterData::STYLE_ALPHAB_L: + { + ordered=true; + strResult="<ol type=\"a\">\n"; + break; + } + case CounterData::STYLE_ALPHAB_U: + { + ordered=true; + strResult="<ol type=\"A\">\n"; + break; + } + case CounterData::STYLE_ROM_NUM_L: + { + ordered=true; + strResult="<ol type=\"i\">\n"; + break; + } + case CounterData::STYLE_ROM_NUM_U: + { + ordered=true; + strResult="<ol type=\"I\">\n"; + break; + } + case CounterData::STYLE_CUSTOM: + { + // We cannot keep the custom type/style + ordered=true; + strResult="<ol>\n"; + break; + } + } + return strResult; +} + +void HtmlBasicWorker::writeDocType(void) +{ + // write <!DOCTYPE + *m_streamOut << "<!DOCTYPE "; + if (isXML()) + { + *m_streamOut << "html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\""; + *m_streamOut << " \"DTD/xhtml1-transitional.dtd\">\n"; + + } + else + { + *m_streamOut << "HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\""; + *m_streamOut << " \"http://www.w3.org/TR/html4/loose.dtd\">\n"; + } +} + +void HtmlBasicWorker::openFormatData(const FormatData& formatOrigin, + const FormatData& format, const bool force,const bool allowBold) +{ + bool useCSS = !m_cssURL.isEmpty(); + TQString attr; + + if( !useCSS && ( force || formatOrigin.text.fontName != format.text.fontName ) && !format.text.fontName.isEmpty() ) + { + attr += " face=\""; + attr += escapeHtmlText(format.text.fontName); // TODO: add alternative font names + attr += "\""; + } + + if( !useCSS && ( force || formatOrigin.text.fontSize != format.text.fontSize ) && format.text.fontSize > 0 ) + { + // We use absolute font sizes, as relative ones give too many problems. + int size=format.text.fontSize; + // 12pt is considered the normal size + size /= 4; + if (size<1) size=1; + if (size>7) size=7; + attr += " size=\""; // in XML numbers must be quoted! + attr += TQString::number(size,10); + attr += "\""; + } + + if( ( force || formatOrigin.text.fgColor != format.text.fgColor ) && + format.text.fgColor.isValid() ) + { + // Give colour + attr += " color=\""; + attr += format.text.fgColor.name(); + attr += "\""; + } + + if( !attr.isEmpty() ) + { + *m_streamOut << "<font" << attr << ">"; + } + + if (force || ((formatOrigin.text.weight>=75)!=(format.text.weight>=75))) + { + if (allowBold && (format.text.weight>=75)) + { + *m_streamOut << "<b>"; + } + } + + if (force || (formatOrigin.text.italic!=format.text.italic)) + { + if (format.text.italic) + { + *m_streamOut << "<i>"; + } + } + + if (force || (formatOrigin.text.underline!=format.text.underline)) + { + if (format.text.underline) + { + *m_streamOut << "<u>"; + } + } + + if (force || (formatOrigin.text.strikeout!=format.text.strikeout)) + { + if (format.text.strikeout) + { + *m_streamOut << "<s>"; + } + } + + if (force || (formatOrigin.text.verticalAlignment!=format.text.verticalAlignment)) + { + if (1==format.text.verticalAlignment) + { + *m_streamOut << "<sub>"; //Subscript + } + else if (2==format.text.verticalAlignment) + { + *m_streamOut << "<sup>"; //Superscript + } + } +} + +void HtmlBasicWorker::closeFormatData(const FormatData& formatOrigin, + const FormatData& format, const bool force,const bool allowBold) +{ + if (force || (formatOrigin.text.verticalAlignment!=format.text.verticalAlignment)) + { + if (2==format.text.verticalAlignment) + { + *m_streamOut << "</sup>"; //Superscript + } + else if (1==format.text.verticalAlignment) + { + *m_streamOut << "</sub>"; //Subscript + } + } + + if (force || (formatOrigin.text.strikeout!=format.text.strikeout)) + { + if (format.text.strikeout) + { + *m_streamOut << "</s>"; + } + } + + if (force || (formatOrigin.text.underline!=format.text.underline)) + { + if (format.text.underline) + { + *m_streamOut << "</u>"; + } + } + + if (force || (formatOrigin.text.italic!=format.text.italic)) + { + if (format.text.italic) + { + *m_streamOut << "</i>"; + } + } + + if (force || ((formatOrigin.text.weight>=75)!=(format.text.weight>=75))) + { + if (allowBold && (format.text.weight >= 75)) + { + *m_streamOut << "</b>"; + } + } + + bool fontName = ( force || formatOrigin.text.fontName != format.text.fontName ) && + !format.text.fontName.isEmpty(); + bool fontSize = ( force || formatOrigin.text.fontSize != format.text.fontSize ) && + format.text.fontSize>0; + bool fontColor = ( force ||formatOrigin.text.fgColor != format.text.fgColor ) && + format.text.fgColor.isValid(); + + if( ( m_cssURL.isEmpty() && ( fontName || fontSize ) ) || fontColor ) + { + *m_streamOut << "</font>"; + } + +} + +void HtmlBasicWorker::openParagraph(const TQString& strTag, + const LayoutData& layout, TQChar::Direction direction) +{ + *m_streamOut << '<' << strTag; + + if ( (layout.alignment=="left") || (layout.alignment== "right") + || (layout.alignment=="center") || (layout.alignment=="justify")) + { + *m_streamOut << " align=\"" << layout.alignment << "\""; + if ( (direction == TQChar::DirRLE) || (direction == TQChar::DirRLO) ) + *m_streamOut << " dir=\"rtl\""; + } + else if ( layout.alignment=="auto") + { + // Do nothing, the user-agent should be more intelligent than us. + } + else + { + kdWarning(30503) << "Unknown alignment: " << layout.alignment << endl; + } + + *m_streamOut << ">"; + + // Allow bold only if tag is not a heading! + openFormatData(layout.formatData,layout.formatData,true,(strTag[0]!='h')); +} + +void HtmlBasicWorker::closeParagraph(const TQString& strTag, + const LayoutData& layout) +{ + // Allow bold only if tag is not a heading! + closeFormatData(layout.formatData,layout.formatData,true,(strTag[0]!='h')); + + *m_streamOut << "</" << strTag << ">\n"; +} + +void HtmlBasicWorker::openSpan(const FormatData& formatOrigin, const FormatData& format) +{ + openFormatData(formatOrigin,format,false,true); +} + +void HtmlBasicWorker::closeSpan(const FormatData& formatOrigin, const FormatData& format) +{ + closeFormatData(formatOrigin,format,false,true); +} + +bool HtmlBasicWorker::doOpenBody(void) +{ + // Define the background colour as white! + *m_streamOut << "<body bgcolor=\"#FFFFFF\">\n"; + return true; +} + +TQString HtmlBasicWorker::customCSSURL(void) const +{ + return m_cssURL; +} |