diff options
| -rw-r--r-- | src/xmlcomposer.cpp | 21 | 
1 files changed, 17 insertions, 4 deletions
diff --git a/src/xmlcomposer.cpp b/src/xmlcomposer.cpp index 6b1b725..f94ce29 100644 --- a/src/xmlcomposer.cpp +++ b/src/xmlcomposer.cpp @@ -364,6 +364,13 @@ void XmlComposer::BaseAnalyser::applyParaFormatting(RtfFormatting* format,  	if(format == NULL)  		format = &(m_composer->getTextFormatting()); +	/* +	 * NOTE: All attributes set in this method must be reversible +	 * by calling again with different formatting. This is called +	 * multiple times per paragraph. Once when the paragraph is +	 * created, and again after the formatting has been finalized. +	 */ +  	string fix = kValPara;      // Is it a list? @@ -391,6 +398,9 @@ void XmlComposer::BaseAnalyser::applyParaFormatting(RtfFormatting* format,  		// Paragraph alignment  		switch(format->paraAlign())  		{ +		case RtfFormatting::LEFT: +			el.removeAttribute(kAtAlign); +			break;  		case RtfFormatting::CENTER:  			el.setAttribute(kAtAlign, kValCenter);  			break; @@ -403,7 +413,9 @@ void XmlComposer::BaseAnalyser::applyParaFormatting(RtfFormatting* format,  		};  		// Paragraph left indent -		if(format->paraIndent() != 0) +		if(format->paraIndent() == 0) +			el.removeAttribute(kAtIndent); +		else  			el.setAttribute(kAtIndent, formatInt(format->paraIndent()));  	} @@ -439,6 +451,10 @@ bool XmlComposer::BaseAnalyser::processTextContent(const string& cw, int flags,  		applyParaFormatting(&format, el);  	} +	// Clears all paragraph formatting +	if(cw == "pard") +		format.resetPara(); +      // Cells (used later in applyParaFormatting)  	else if(cw == "intbl")  		format.paraSetTable(true); @@ -544,10 +560,7 @@ bool XmlComposer::BaseAnalyser::processTextFormatting(const string& cw, int flag      // Clears all paragraph formatting  	if(cw == "pard") -	{  		format.resetPara(); -        // applyParaFormatting(); -	}      // Rest are pretty much self-explanatory  	else if(cw == "plain")  | 
