Smack/smack-extensions/src/main/java/org/jivesoftware/smackx/xhtmlim/XHTMLText.java

455 lines
12 KiB
Java

/**
*
* Copyright 2003-2007 Jive Software.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jivesoftware.smackx.xhtmlim;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.util.XmlStringBuilder;
/**
* An XHTMLText represents formatted text. This class also helps to build valid
* XHTML tags.
*
* @author Gaston Dombiak
*/
public class XHTMLText {
public static final String NAMESPACE = "http://www.w3.org/1999/xhtml";
private final XmlStringBuilder text = new XmlStringBuilder();
/**
* Creates a new XHTMLText with body tag params.
*
* @param style the XHTML style of the body
* @param lang the language of the body
*/
public XHTMLText(String style, String lang) {
appendOpenBodyTag(style, lang);
}
public static final String A = "a";
public static final String HREF = "href";
public static final String STYLE = "style";
/**
* Appends a tag that indicates that an anchor section begins.
*
* @param href indicates the URL being linked to
* @param style the XHTML style of the anchor
* @return this.
*/
public XHTMLText appendOpenAnchorTag(String href, String style) {
text.halfOpenElement(A);
text.optAttribute(HREF, href);
text.optAttribute(STYLE, style);
text.rightAngleBracket();
return this;
}
/**
* Appends a tag that indicates that an anchor section ends.
*
* @return this.
*/
public XHTMLText appendCloseAnchorTag() {
text.closeElement(A);
return this;
}
public static final String BLOCKQUOTE = "blockquote";
/**
* Appends a tag that indicates that a blockquote section begins.
*
* @param style the XHTML style of the blockquote
* @return this.
*/
public XHTMLText appendOpenBlockQuoteTag(String style) {
text.halfOpenElement(BLOCKQUOTE);
text.optAttribute(STYLE, style);
text.rightAngleBracket();
return this;
}
/**
* Appends a tag that indicates that a blockquote section ends.
*
* @return this.
*/
public XHTMLText appendCloseBlockQuoteTag() {
text.closeElement(BLOCKQUOTE);
return this;
}
/**
* Appends a tag that indicates that a body section begins.
*
* @param style the XHTML style of the body
* @param lang the language of the body
* @return this.
*/
private XHTMLText appendOpenBodyTag(String style, String lang) {
text.halfOpenElement(Message.BODY);
text.xmlnsAttribute(NAMESPACE);
text.optAttribute(STYLE, style);
text.xmllangAttribute(lang);
text.rightAngleBracket();
return this;
}
/**
* Appends a tag that indicates that the body section ends.
*
* @return this.
*/
public XHTMLText appendCloseBodyTag() {
text.closeElement(Message.BODY);
return this;
}
public static final String BR = "br";
public static final String CITE = "cite";
public static final String CODE = "code";
/**
* Appends a tag that inserts a single carriage return.
*
* @return this.
*/
public XHTMLText appendBrTag() {
text.emptyElement(BR);
return this;
}
/**
* Appends a tag that indicates a reference to work, such as a book, report or web site.
*
* @return this.
*/
public XHTMLText appendOpenCiteTag() {
text.openElement(CITE);
return this;
}
/**
* Appends a tag that indicates text that is the code for a program.
*
* @return this.
*/
public XHTMLText appendOpenCodeTag() {
text.openElement(CODE);
return this;
}
/**
* Appends a tag that indicates end of text that is the code for a program.
*
* @return this.
*/
public XHTMLText appendCloseCodeTag() {
text.closeElement(CODE);
return this;
}
public static final String EM = "em";
/**
* Appends a tag that indicates emphasis.
*
* @return this.
*/
public XHTMLText appendOpenEmTag() {
text.openElement(EM);
return this;
}
/**
* Appends a tag that indicates end of emphasis.
*
* @return this.
*/
public XHTMLText appendCloseEmTag() {
text.closeElement(EM);
return this;
}
public static final String H = "h";
/**
* Appends a tag that indicates a header, a title of a section of the message.
*
* @param level the level of the Header. It must be a value between 1 and 3
* @param style the XHTML style of the blockquote
*
* @return this.
*/
public XHTMLText appendOpenHeaderTag(int level, String style) {
if (level > 3 || level < 1) {
throw new IllegalArgumentException("Level must be between 1 and 3");
}
text.halfOpenElement(H + Integer.toString(level));
text.optAttribute(STYLE, style);
text.rightAngleBracket();
return this;
}
/**
* Appends a tag that indicates that a header section ends.
*
* @param level the level of the Header. It must be a value between 1 and 3
* @return this.
*/
public XHTMLText appendCloseHeaderTag(int level) {
if (level > 3 || level < 1) {
throw new IllegalArgumentException("Level must be between 1 and 3");
}
text.closeElement(H + Integer.toBinaryString(level));
return this;
}
public static final String IMG = "img";
/**
* Appends a tag that indicates an image.
*
* @param align how text should flow around the picture
* @param alt the text to show if you don't show the picture
* @param height how tall is the picture
* @param src where to get the picture
* @param width how wide is the picture
*
* @return this.
*/
public XHTMLText appendImageTag(String align, String alt, String height, String src, String width) {
text.halfOpenElement(IMG);
text.optAttribute("align", align);
text.optAttribute("alt", alt);
text.optAttribute("height", height);
text.optAttribute("src", src);
text.optAttribute("width", width);
text.rightAngleBracket();
return this;
}
public static final String LI = "li";
public static final String OL = "ol";
/**
* Appends a tag that indicates the start of a new line item within a list.
*
* @param style the style of the line item
*
* @return this.
*/
public XHTMLText appendLineItemTag(String style) {
text.halfOpenElement(LI);
text.optAttribute(STYLE, style);
text.rightAngleBracket();
return this;
}
/**
* Appends a tag that indicates that a line item section ends.
*
* @return this.
*/
public XHTMLText appendCloseLineItemTag() {
text.closeElement(LI);
return this;
}
/**
* Appends a tag that creates an ordered list. "Ordered" means that the order of the items
* in the list is important. To show this, browsers automatically number the list.
*
* @param style the style of the ordered list
*
* @return this.
*/
public XHTMLText appendOpenOrderedListTag(String style) {
text.halfOpenElement(OL);
text.optAttribute(STYLE, style);
text.rightAngleBracket();
return this;
}
/**
* Appends a tag that indicates that an ordered list section ends.
*
* @return this.
*/
public XHTMLText appendCloseOrderedListTag() {
text.closeElement(OL);
return this;
}
public static final String UL = "ul";
/**
* Appends a tag that creates an unordered list. The unordered part means that the items
* in the list are not in any particular order.
*
* @param style the style of the unordered list
*
* @return this.
*/
public XHTMLText appendOpenUnorderedListTag(String style) {
text.halfOpenElement(UL);
text.optAttribute(STYLE, style);
text.rightAngleBracket();
return this;
}
/**
* Appends a tag that indicates that an unordered list section ends.
*
* @return this.
*/
public XHTMLText appendCloseUnorderedListTag() {
text.closeElement(UL);
return this;
}
public static final String P = "p";
/**
* Appends a tag that indicates the start of a new paragraph. This is usually rendered
* with two carriage returns, producing a single blank line in between the two paragraphs.
*
* @param style the style of the paragraph
*
* @return this.
*/
public XHTMLText appendOpenParagraphTag(String style) {
text.halfOpenElement(P);
text.optAttribute(STYLE, style);
text.rightAngleBracket();
return this;
}
/**
* Appends a tag that indicates the end of a new paragraph. This is usually rendered
* with two carriage returns, producing a single blank line in between the two paragraphs.
*
* @return this.
*/
public XHTMLText appendCloseParagraphTag() {
text.closeElement(P);
return this;
}
public static final String Q = "q";
/**
* Appends a tag that indicates that an inlined quote section begins.
*
* @param style the style of the inlined quote
*
* @return this.
*/
public XHTMLText appendOpenInlinedQuoteTag(String style) {
text.halfOpenElement(Q);
text.optAttribute(STYLE, style);
text.rightAngleBracket();
return this;
}
/**
* Appends a tag that indicates that an inlined quote section ends.
*
* @return this.
*/
public XHTMLText appendCloseInlinedQuoteTag() {
text.closeElement(Q);
return this;
}
public static final String SPAN = "span";
/**
* Appends a tag that allows to set the fonts for a span of text.
*
* @param style the style for a span of text
*
* @return this.
*/
public XHTMLText appendOpenSpanTag(String style) {
text.halfOpenElement(SPAN);
text.optAttribute(STYLE, style);
text.rightAngleBracket();
return this;
}
/**
* Appends a tag that indicates that a span section ends.
*
* @return this.
*/
public XHTMLText appendCloseSpanTag() {
text.closeElement(SPAN);
return this;
}
public static final String STRONG = "strong";
/**
* Appends a tag that indicates text which should be more forceful than surrounding text.
*
* @return this.
*/
public XHTMLText appendOpenStrongTag() {
text.openElement(STRONG);
return this;
}
/**
* Appends a tag that indicates that a strong section ends.
*
* @return this.
*/
public XHTMLText appendCloseStrongTag() {
text.closeElement(STRONG);
return this;
}
/**
* Appends a given text to the XHTMLText.
*
* @param textToAppend the text to append
*
* @return this.
*/
public XHTMLText append(String textToAppend) {
text.escape(textToAppend);
return this;
}
/**
* Returns the text of the XHTMLText.
*
* @return the text of the XHTMLText
*/
@Override
public String toString() {
return text.toString();
}
public XmlStringBuilder toXML() {
return text;
}
}