"),
left_indent.c_str(), //Document-Wide Left Indent
right_indent.c_str()); //Document-Wide Right Indent
-
+
str << wxT(" | ");
*/
-
+
str << wxT("");
-
- str << wxString::Format(wxT(""),
- currentParaStyle.GetFont().GetFaceName(), Pt_To_Size( currentParaStyle.GetFont().GetPointSize() ),
- currentParaStyle.GetTextColour().Red(), currentParaStyle.GetTextColour().Green(),
- currentParaStyle.GetTextColour().Blue());
-
+
+ str << wxString::Format(wxT(""),
+ currentParaStyle.GetFont().GetFaceName().c_str(), Pt_To_Size( currentParaStyle.GetFont().GetPointSize() ),
+ currentParaStyle.GetTextColour().GetAsString(wxC2S_HTML_SYNTAX).c_str());
+
//wxString align = GetAlignment( currentParaStyle.GetAlignment() );
//str << wxString::Format(wxT(" "), align );
-
+
m_font = false;
m_indent = 0;
m_list = false;
-
+
wxRichTextObjectList::compatibility_iterator node = buffer->GetChildren().GetFirst();
while (node)
{
wxRichTextParagraph* para = wxDynamicCast(node->GetData(), wxRichTextParagraph);
wxASSERT (para != NULL);
-
+
if (para)
{
- OutputParagraphFormatting(currentParaStyle, para->GetAttributes(), stream);
+ wxTextAttrEx paraStyle(para->GetCombinedAttributes());
+ OutputParagraphFormatting(currentParaStyle, paraStyle, stream);
+
wxRichTextObjectList::compatibility_iterator node2 = para->GetChildren().GetFirst();
while (node2)
{
@@ -109,109 +109,110 @@ bool wxRichTextHTMLHandler::DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream&
wxRichTextPlainText* textObj = wxDynamicCast(obj, wxRichTextPlainText);
if (textObj && !textObj->IsEmpty())
{
- BeginCharacterFormatting(currentCharStyle, obj->GetAttributes(), stream);
-
+ wxTextAttrEx charStyle(para->GetCombinedAttributes(obj->GetAttributes()));
+ BeginCharacterFormatting(currentCharStyle, charStyle, paraStyle, stream);
+
str << textObj->GetText();
-
- EndCharacterFormatting(currentCharStyle, obj->GetAttributes(), stream);
+
+ EndCharacterFormatting(currentCharStyle, charStyle, paraStyle, stream);
}
-
+
wxRichTextImage* image = wxDynamicCast(obj, wxRichTextImage);
if( image && !image->IsEmpty())
Image_to_Base64( image, stream );
-
+
node2 = node2->GetNext();
}
+ str << wxT("\n");
//OutputParagraphFormatting(currentParaStyle, para->GetAttributes(), stream, false);
}
node = node->GetNext();
}
-
+
str << wxT(" | \n");
-
+
return true;
}
-void wxRichTextHTMLHandler::BeginCharacterFormatting(const wxTextAttrEx& currentStyle, const wxTextAttrEx& thisStyle, wxOutputStream& stream)
+void wxRichTextHTMLHandler::BeginCharacterFormatting(const wxTextAttrEx& currentStyle, const wxTextAttrEx& thisStyle, const wxTextAttrEx& paraStyle, wxOutputStream& stream)
{
wxTextOutputStream str(stream);
-
+
//Is the item bulleted one?
- if( thisStyle.GetBulletStyle() != wxTEXT_ATTR_BULLET_STYLE_NONE )
+ if( paraStyle.GetBulletStyle() != wxTEXT_ATTR_BULLET_STYLE_NONE )
{
//Is there any opened list?
if( m_list )
{
//Yes there is
-
+
//Is the item among the previous ones
//Is the item one of the previous list tag's child items
- if( (thisStyle.GetLeftIndent() == (m_indent + 100)) || (thisStyle.GetLeftIndent() < 100) )
+ if( (paraStyle.GetLeftIndent() == (m_indent + 100)) || (paraStyle.GetLeftIndent() < 100) )
str << wxT("");//Yes it is
else
{
//No it isn't
-
+
//So we should close the list tag
str << (m_is_ul ? wxT("") : wxT(""));
-
+
//And renavigate to new list's horizontal position
- NavigateToListPosition(thisStyle, str);
+ NavigateToListPosition(paraStyle, str);
//Ok it's done
-
+
//Get the appropriate tag, an ol for numerical values, an ul for dot, square etc.
wxString tag;
- TypeOfList(thisStyle, tag);
- str << wxString::Format(wxT("%s"), tag);
+ TypeOfList(paraStyle, tag);
+ str << tag << wxT("");
}
}
else
{
//No there isn't a list
-
+
//navigate to new list's horizontal position(indent)
- NavigateToListPosition(thisStyle, str);
-
+ NavigateToListPosition(paraStyle, str);
+
//Get the appropriate tag, an ol for numerical values, an ul for dot, square etc.
wxString tag;
- TypeOfList(thisStyle, tag);
- str << wxString::Format(wxT("%s"), tag);
-
+ TypeOfList(paraStyle, tag);
+ str << tag << wxT("");
+
//Now we have a list, mark it.
m_list = true;
- }
+ }
}
else if( m_list )
{
- //The item is not bulleted and there is a list what should be closed now.
+ //The item is not bulleted and there is a list what should be closed now.
//So close the list
str << (m_is_ul ? wxT("") : wxT(""));
//And mark as there is no an opened list
m_list = false;
}
-
+
// does the item have an indentation ?
- if( thisStyle.GetLeftIndent() )
+ if( paraStyle.GetLeftIndent() )
{
- if( thisStyle.GetBulletStyle() == wxTEXT_ATTR_BULLET_STYLE_NONE )
+ if( paraStyle.GetBulletStyle() == wxTEXT_ATTR_BULLET_STYLE_NONE )
{
if( m_indent )
{
- if( (thisStyle.GetLeftIndent() + thisStyle.GetLeftSubIndent()) == m_indent )
+ if( (paraStyle.GetLeftIndent() + paraStyle.GetLeftSubIndent()) == m_indent )
{
- if( thisStyle.GetLeftSubIndent() < 0 )
+ if( paraStyle.GetLeftSubIndent() < 0 )
{
- wxString symbolic_indent = SymbolicIndent(~thisStyle.GetLeftSubIndent());
- str << wxString::Format(wxT("%s"), symbolic_indent);
+ str << SymbolicIndent(~paraStyle.GetLeftSubIndent());
}
}
else
{
- if( thisStyle.GetLeftIndent() + thisStyle.GetLeftSubIndent() > m_indent )
+ if( paraStyle.GetLeftIndent() + paraStyle.GetLeftSubIndent() > m_indent )
{
- Indent(thisStyle, str);
- m_indent = thisStyle.GetLeftIndent() + thisStyle.GetLeftSubIndent();
+ Indent(paraStyle, str);
+ m_indent = paraStyle.GetLeftIndent() + paraStyle.GetLeftSubIndent();
m_indents.Add( m_indent );
}
else
@@ -219,29 +220,28 @@ void wxRichTextHTMLHandler::BeginCharacterFormatting(const wxTextAttrEx& current
int i = m_indents.size() - 1;
for(; i > -1; i--)
{
- if( m_indent < (thisStyle.GetLeftIndent() + thisStyle.GetLeftSubIndent()) )
+ if( m_indent < (paraStyle.GetLeftIndent() + paraStyle.GetLeftSubIndent()) )
{
- Indent(thisStyle, str);
- m_indent = thisStyle.GetLeftIndent() + thisStyle.GetLeftSubIndent();
+ Indent(paraStyle, str);
+ m_indent = paraStyle.GetLeftIndent() + paraStyle.GetLeftSubIndent();
m_indents.Add( m_indent );
-
+
break;
}
- else if( m_indent == (thisStyle.GetLeftIndent() + thisStyle.GetLeftSubIndent()) )
+ else if( m_indent == (paraStyle.GetLeftIndent() + paraStyle.GetLeftSubIndent()) )
{
- if( thisStyle.GetLeftSubIndent() < 0 )
+ if( paraStyle.GetLeftSubIndent() < 0 )
{
- wxString symbolic_indent = SymbolicIndent(~thisStyle.GetLeftSubIndent());
- str << wxString::Format(wxT("%s"), symbolic_indent);
+ str << SymbolicIndent(~paraStyle.GetLeftSubIndent());
}
break;
}
else
{
str << wxT(" |