X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2c48f0327582c9776c5cb43202406e3ac1aff360..2028c33ab5a39a12bd410ac953731a56ad6377ba:/src/richtext/richtexthtml.cpp diff --git a/src/richtext/richtexthtml.cpp b/src/richtext/richtexthtml.cpp index 95f6c4754d..6af5ab0ae5 100644 --- a/src/richtext/richtexthtml.cpp +++ b/src/richtext/richtexthtml.cpp @@ -101,33 +101,33 @@ bool wxRichTextHTMLHandler::DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& #else wxTextOutputStream str(stream, wxEOL_NATIVE); #endif - + wxTextAttr currentParaStyle = buffer->GetAttributes(); wxTextAttr currentCharStyle = buffer->GetAttributes(); - + if ((GetFlags() & wxRICHTEXT_HANDLER_NO_HEADER_FOOTER) == 0) str << wxT("\n"); - + OutputFont(currentParaStyle, str); - + m_font = false; m_inTable = false; - + m_indents.Clear(); m_listTypes.Clear(); - + wxRichTextObjectList::compatibility_iterator node = buffer->GetChildren().GetFirst(); while (node) { wxRichTextParagraph* para = wxDynamicCast(node->GetData(), wxRichTextParagraph); wxASSERT (para != NULL); - + if (para) { wxTextAttr paraStyle(para->GetCombinedAttributes()); - + BeginParagraphFormatting(currentParaStyle, paraStyle, str); - + wxRichTextObjectList::compatibility_iterator node2 = para->GetChildren().GetFirst(); while (node2) { @@ -137,41 +137,41 @@ bool wxRichTextHTMLHandler::DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& { wxTextAttr charStyle(para->GetCombinedAttributes(obj->GetAttributes())); BeginCharacterFormatting(currentCharStyle, charStyle, paraStyle, str); - + wxString text = textObj->GetText(); - + if (charStyle.HasTextEffects() && (charStyle.GetTextEffects() & wxTEXT_ATTR_EFFECT_CAPITALS)) text.MakeUpper(); - + wxString toReplace = wxRichTextLineBreakChar; text.Replace(toReplace, wxT("
")); - + str << text; - + EndCharacterFormatting(currentCharStyle, charStyle, paraStyle, str); } - + wxRichTextImage* image = wxDynamicCast(obj, wxRichTextImage); if( image && (!image->IsEmpty() || image->GetImageBlock().GetData())) WriteImage( image, stream ); - + node2 = node2->GetNext(); } - + EndParagraphFormatting(currentParaStyle, paraStyle, str); - + str << wxT("\n"); } node = node->GetNext(); } - + CloseLists(-1, str); - + str << wxT(""); - + if ((GetFlags() & wxRICHTEXT_HANDLER_NO_HEADER_FOOTER) == 0) str << wxT(""); - + str << wxT("\n"); } @@ -284,25 +284,59 @@ void wxRichTextHTMLHandler::BeginParagraphFormatting(const wxTextAttr& WXUNUSED( wxString align = GetAlignment(thisStyle); str << wxString::Format(wxT("

0.0)) + { + styleStr += wxString::Format(wxT("margin-left: %.2fmm; "), indentLeftMM); + } + float indentRightMM = thisStyle.GetRightIndent()/10.0; + if ((GetFlags() & wxRICHTEXT_HANDLER_USE_CSS) && thisStyle.HasRightIndent() && (indentRightMM > 0.0)) + { + styleStr += wxString::Format(wxT("margin-right: %.2fmm; "), indentRightMM); + } + // First line indentation + float firstLineIndentMM = - thisStyle.GetLeftSubIndent() / 10.0; + if ((GetFlags() & wxRICHTEXT_HANDLER_USE_CSS) && (firstLineIndentMM > 0.0)) + { + styleStr += wxString::Format(wxT("text-indent: %.2fmm; "), firstLineIndentMM); + } + + if (!styleStr.IsEmpty()) + str << wxT(" style=\"") << styleStr << wxT("\""); str << wxT(">"); - // Use a table - int indentTenthsMM = thisStyle.GetLeftIndent() + thisStyle.GetLeftSubIndent(); // TODO: convert to pixels - int indentPixels = indentTenthsMM/4; - str << wxString::Format(wxT("
"), indentPixels); + int indentPixels = static_cast(indentLeftMM*10/4); + + if ((GetFlags() & wxRICHTEXT_HANDLER_USE_CSS) == 0) + { + // Use a table to do indenting if we don't have CSS + str << wxString::Format(wxT("
"), indentPixels); + m_inTable = true; + } OutputFont(thisStyle, str); - if (thisStyle.GetLeftSubIndent() < 0) + if (((GetFlags() & wxRICHTEXT_HANDLER_USE_CSS) == 0) && (thisStyle.GetLeftSubIndent() < 0)) { str << SymbolicIndent( - thisStyle.GetLeftSubIndent()); } - - m_inTable = true; } } else @@ -312,8 +346,23 @@ void wxRichTextHTMLHandler::BeginParagraphFormatting(const wxTextAttr& WXUNUSED( wxString align = GetAlignment(thisStyle); str << wxString::Format(wxT("

"); }