diff options
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | doc/rtfx.xsd | 5 | ||||
-rw-r--r-- | src/rtfformatting.h | 22 | ||||
-rw-r--r-- | src/tags.h | 4 | ||||
-rw-r--r-- | src/xmlcomposer.cpp | 29 |
5 files changed, 58 insertions, 3 deletions
@@ -2,6 +2,7 @@ Version 0.9.6 - Add character styles - Add <highlight> tag for highlighted text - Add <link> tag for hyperlink fields + - Add 'align' attribute to <para> tags for paragraph alignment Version 0.9.5 - Allow conversions on stdin and stdout diff --git a/doc/rtfx.xsd b/doc/rtfx.xsd index 2efbe90..70e981d 100644 --- a/doc/rtfx.xsd +++ b/doc/rtfx.xsd @@ -250,6 +250,11 @@ <xs:documentation>The paragraph style name.</xs:documentation> </xs:annotation> </xs:attribute> + <xs:attribute name="align" type="xs:string" default="left"> + <xs:annotation> + <xs:documentation>The paragraph alignment. Either 'left', 'center', 'right' or 'justify'</xs:documentation> + </xs:annotation> + </xs:attribute> </xs:complexType> </xs:element> diff --git a/src/rtfformatting.h b/src/rtfformatting.h index db687eb..cab1e4f 100644 --- a/src/rtfformatting.h +++ b/src/rtfformatting.h @@ -79,7 +79,8 @@ public: { return m_style == format.m_style && m_list == format.m_list && - m_inTbl == format.m_inTbl; + m_inTbl == format.m_inTbl && + m_align == format.m_align; } void copy(const RtfFormatting& format) @@ -99,12 +100,13 @@ public: m_style = format.m_style; m_list = format.m_list; m_inTbl = format.m_inTbl; + m_align = format.m_align; } void resetText() { m_bold = m_italic = m_strike = - m_underline = m_hidden = false; + m_underline = m_hidden = false; m_color = -1; m_highlight = -1; m_suscript = 0; @@ -117,6 +119,7 @@ public: { m_style = m_list = -1; m_inTbl = false; + m_align = LEFT; } bool textIsBold() const @@ -147,6 +150,8 @@ public: { return m_list; } bool paraInTable() const { return m_inTbl; } + int paraAlign() const + { return m_align; } void textSetBold(bool bold) { m_bold = bold; } @@ -176,6 +181,8 @@ public: { m_list = list; } void paraSetTable(bool inTable) { m_inTbl = inTable; } + void paraSetAlign(int align) + { m_align = align; } enum { @@ -183,13 +190,21 @@ public: SUBSCRIPT }; + enum + { + LEFT = 0, + CENTER, + RIGHT, + JUSTIFY + }; + protected: bool m_bold; bool m_italic; bool m_strike; bool m_underline; bool m_hidden; - int m_suscript; + int m_suscript; int m_color; int m_highlight; int m_font; @@ -199,6 +214,7 @@ protected: int m_style; int m_list; bool m_inTbl; + int m_align; }; #endif // __RTFFORMATTING_H__ @@ -105,6 +105,7 @@ static const char* kAtId = "id"; static const char* kAtTo = "to"; static const char* kAtSize = "size"; static const char* kAtHref = "href"; +static const char* kAtAlign = "align"; // Values static const char* kValDisc = "disc"; @@ -120,5 +121,8 @@ static const char* kValPara = "para"; static const char* kValTable = "table"; static const char* kValTrue = "true"; static const char* kValZero = "0"; +static const char* kValCenter = "center"; +static const char* kValRight = "right"; +static const char* kValJustify = "justify"; #endif // __TAGS_H__ diff --git a/src/xmlcomposer.cpp b/src/xmlcomposer.cpp index aa7485f..2f0a5ee 100644 --- a/src/xmlcomposer.cpp +++ b/src/xmlcomposer.cpp @@ -382,6 +382,19 @@ void XmlComposer::BaseAnalyser::applyParaFormatting(RtfFormatting* format, else el.removeAttribute(kElStyle); + switch(format->paraAlign()) + { + case RtfFormatting::CENTER: + el.setAttribute(kAtAlign, kValCenter); + break; + case RtfFormatting::RIGHT: + el.setAttribute(kAtAlign, kValRight); + break; + case RtfFormatting::JUSTIFY: + el.setAttribute(kAtAlign, kValJustify); + break; + }; + // These fix elements are later picked up in XmlFixups::fixBlocks el.setAttribute(kAtFix, fix); } @@ -452,6 +465,22 @@ bool XmlComposer::BaseAnalyser::processTextContent(const string& cw, int flags, else if(cw == "s" && HAS_PARAM) format.paraSetStyle(param); + // Left para alignment + else if(cw == "ql") + format.paraSetAlign(RtfFormatting::LEFT); + + // Center para alignment + else if(cw == "qc") + format.paraSetAlign(RtfFormatting::CENTER); + + // Right para alignment + else if(cw == "qr") + format.paraSetAlign(RtfFormatting::RIGHT); + + // Justify para alignment + else if(cw == "qj") + format.paraSetAlign(RtfFormatting::JUSTIFY); + // A line break else if(cw == "line") el = m_composer->createElement(kElLine); |