/* This file is part of the KDE project Copyright (C) 2001, 2002 Nicolas GOUTTE 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 #include #include #include #include #include #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="
    \n"; break; } case CounterData::STYLE_NONE: // We cannot specify "no bullet" { ordered=false; strResult="
      \n"; break; } case CounterData::STYLE_CIRCLEBULLET: { ordered=false; strResult="
        \n"; break; } case CounterData::STYLE_SQUAREBULLET: { ordered=false; strResult="
          \n"; break; } case CounterData::STYLE_DISCBULLET: { ordered=false; strResult="
            \n"; break; } case CounterData::STYLE_NUM: { ordered=true; strResult="
              \n"; break; } case CounterData::STYLE_ALPHAB_L: { ordered=true; strResult="
                \n"; break; } case CounterData::STYLE_ALPHAB_U: { ordered=true; strResult="
                  \n"; break; } case CounterData::STYLE_ROM_NUM_L: { ordered=true; strResult="
                    \n"; break; } case CounterData::STYLE_ROM_NUM_U: { ordered=true; strResult="
                      \n"; break; } case CounterData::STYLE_CUSTOM: { // We cannot keep the custom type/style ordered=true; strResult="
                        \n"; break; } } return strResult; } void HtmlBasicWorker::writeDocType(void) { // write \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 << ""; } if (force || ((formatOrigin.text.weight>=75)!=(format.text.weight>=75))) { if (allowBold && (format.text.weight>=75)) { *m_streamOut << ""; } } if (force || (formatOrigin.text.italic!=format.text.italic)) { if (format.text.italic) { *m_streamOut << ""; } } if (force || (formatOrigin.text.underline!=format.text.underline)) { if (format.text.underline) { *m_streamOut << ""; } } if (force || (formatOrigin.text.strikeout!=format.text.strikeout)) { if (format.text.strikeout) { *m_streamOut << ""; } } if (force || (formatOrigin.text.verticalAlignment!=format.text.verticalAlignment)) { if (1==format.text.verticalAlignment) { *m_streamOut << ""; //Subscript } else if (2==format.text.verticalAlignment) { *m_streamOut << ""; //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 << ""; //Superscript } else if (1==format.text.verticalAlignment) { *m_streamOut << ""; //Subscript } } if (force || (formatOrigin.text.strikeout!=format.text.strikeout)) { if (format.text.strikeout) { *m_streamOut << ""; } } if (force || (formatOrigin.text.underline!=format.text.underline)) { if (format.text.underline) { *m_streamOut << ""; } } if (force || (formatOrigin.text.italic!=format.text.italic)) { if (format.text.italic) { *m_streamOut << ""; } } if (force || ((formatOrigin.text.weight>=75)!=(format.text.weight>=75))) { if (allowBold && (format.text.weight >= 75)) { *m_streamOut << ""; } } 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 << ""; } } 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 << "\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 << "\n"; return true; } TQString HtmlBasicWorker::customCSSURL(void) const { return m_cssURL; }