summaryrefslogtreecommitdiffstats
path: root/filters/kword/html/export/ExportBasic.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filters/kword/html/export/ExportBasic.cpp')
-rw-r--r--filters/kword/html/export/ExportBasic.cpp366
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;
+}