/smack/source/org/jivesoftware/smackx/XHTMLText.java
https://github.com/joechen2010/IM · Java · 429 lines · 215 code · 36 blank · 178 comment · 38 complexity · 68e1b86f1022a5021a2b01ba7da834c6 MD5 · raw file
- /**
- * $RCSfile$
- * $Revision: 12440 $
- * $Date: 2011-06-01 02:39:05 -0500 (Wed, 01 Jun 2011) $
- *
- * Copyright 2003-2007 Jive Software.
- *
- * All rights reserved. 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;
- import org.jivesoftware.smack.util.StringUtils;
- /**
- * An XHTMLText represents formatted text. This class also helps to build valid
- * XHTML tags.
- *
- * @author Gaston Dombiak
- */
- public class XHTMLText {
- private StringBuilder text = new StringBuilder(30);
- /**
- * 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);
- }
- /**
- * 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
- */
- public void appendOpenAnchorTag(String href, String style) {
- StringBuilder sb = new StringBuilder("<a");
- if (href != null) {
- sb.append(" href=\"");
- sb.append(href);
- sb.append("\"");
- }
- if (style != null) {
- sb.append(" style=\"");
- sb.append(style);
- sb.append("\"");
- }
- sb.append(">");
- text.append(sb.toString());
- }
- /**
- * Appends a tag that indicates that an anchor section ends.
- *
- */
- public void appendCloseAnchorTag() {
- text.append("</a>");
- }
- /**
- * Appends a tag that indicates that a blockquote section begins.
- *
- * @param style the XHTML style of the blockquote
- */
- public void appendOpenBlockQuoteTag(String style) {
- StringBuilder sb = new StringBuilder("<blockquote");
- if (style != null) {
- sb.append(" style=\"");
- sb.append(style);
- sb.append("\"");
- }
- sb.append(">");
- text.append(sb.toString());
- }
- /**
- * Appends a tag that indicates that a blockquote section ends.
- *
- */
- public void appendCloseBlockQuoteTag() {
- text.append("</blockquote>");
- }
- /**
- * 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
- */
- private void appendOpenBodyTag(String style, String lang) {
- StringBuilder sb = new StringBuilder("<body");
- if (style != null) {
- sb.append(" style=\"");
- sb.append(style);
- sb.append("\"");
- }
- if (lang != null) {
- sb.append(" xml:lang=\"");
- sb.append(lang);
- sb.append("\"");
- }
- sb.append(">");
- text.append(sb.toString());
- }
- /**
- * Appends a tag that indicates that a body section ends.
- *
- */
- private String closeBodyTag() {
- return "</body>";
- }
- /**
- * Appends a tag that inserts a single carriage return.
- *
- */
- public void appendBrTag() {
- text.append("<br/>");
- }
- /**
- * Appends a tag that indicates a reference to work, such as a book, report or web site.
- *
- */
- public void appendOpenCiteTag() {
- text.append("<cite>");
- }
- /**
- * Appends a tag that indicates text that is the code for a program.
- *
- */
- public void appendOpenCodeTag() {
- text.append("<code>");
- }
- /**
- * Appends a tag that indicates end of text that is the code for a program.
- *
- */
- public void appendCloseCodeTag() {
- text.append("</code>");
- }
- /**
- * Appends a tag that indicates emphasis.
- *
- */
- public void appendOpenEmTag() {
- text.append("<em>");
- }
- /**
- * Appends a tag that indicates end of emphasis.
- *
- */
- public void appendCloseEmTag() {
- text.append("</em>");
- }
- /**
- * Appends a tag that indicates a header, a title of a section of the message.
- *
- * @param level the level of the Header. It should be a value between 1 and 3
- * @param style the XHTML style of the blockquote
- */
- public void appendOpenHeaderTag(int level, String style) {
- if (level > 3 || level < 1) {
- return;
- }
- StringBuilder sb = new StringBuilder("<h");
- sb.append(level);
- if (style != null) {
- sb.append(" style=\"");
- sb.append(style);
- sb.append("\"");
- }
- sb.append(">");
- text.append(sb.toString());
- }
- /**
- * Appends a tag that indicates that a header section ends.
- *
- * @param level the level of the Header. It should be a value between 1 and 3
- */
- public void appendCloseHeaderTag(int level) {
- if (level > 3 || level < 1) {
- return;
- }
- StringBuilder sb = new StringBuilder("</h");
- sb.append(level);
- sb.append(">");
- text.append(sb.toString());
- }
- /**
- * 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
- */
- public void appendImageTag(String align, String alt, String height, String src, String width) {
- StringBuilder sb = new StringBuilder("<img");
- if (align != null) {
- sb.append(" align=\"");
- sb.append(align);
- sb.append("\"");
- }
- if (alt != null) {
- sb.append(" alt=\"");
- sb.append(alt);
- sb.append("\"");
- }
- if (height != null) {
- sb.append(" height=\"");
- sb.append(height);
- sb.append("\"");
- }
- if (src != null) {
- sb.append(" src=\"");
- sb.append(src);
- sb.append("\"");
- }
- if (width != null) {
- sb.append(" width=\"");
- sb.append(width);
- sb.append("\"");
- }
- sb.append(">");
- text.append(sb.toString());
- }
- /**
- * Appends a tag that indicates the start of a new line item within a list.
- *
- * @param style the style of the line item
- */
- public void appendLineItemTag(String style) {
- StringBuilder sb = new StringBuilder("<li");
- if (style != null) {
- sb.append(" style=\"");
- sb.append(style);
- sb.append("\"");
- }
- sb.append(">");
- text.append(sb.toString());
- }
- /**
- * 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
- */
- public void appendOpenOrderedListTag(String style) {
- StringBuilder sb = new StringBuilder("<ol");
- if (style != null) {
- sb.append(" style=\"");
- sb.append(style);
- sb.append("\"");
- }
- sb.append(">");
- text.append(sb.toString());
- }
- /**
- * Appends a tag that indicates that an ordered list section ends.
- *
- */
- public void appendCloseOrderedListTag() {
- text.append("</ol>");
- }
- /**
- * 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
- */
- public void appendOpenUnorderedListTag(String style) {
- StringBuilder sb = new StringBuilder("<ul");
- if (style != null) {
- sb.append(" style=\"");
- sb.append(style);
- sb.append("\"");
- }
- sb.append(">");
- text.append(sb.toString());
- }
- /**
- * Appends a tag that indicates that an unordered list section ends.
- *
- */
- public void appendCloseUnorderedListTag() {
- text.append("</ul>");
- }
- /**
- * 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
- */
- public void appendOpenParagraphTag(String style) {
- StringBuilder sb = new StringBuilder("<p");
- if (style != null) {
- sb.append(" style=\"");
- sb.append(style);
- sb.append("\"");
- }
- sb.append(">");
- text.append(sb.toString());
- }
- /**
- * 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.
- *
- */
- public void appendCloseParagraphTag() {
- text.append("</p>");
- }
- /**
- * Appends a tag that indicates that an inlined quote section begins.
- *
- * @param style the style of the inlined quote
- */
- public void appendOpenInlinedQuoteTag(String style) {
- StringBuilder sb = new StringBuilder("<q");
- if (style != null) {
- sb.append(" style=\"");
- sb.append(style);
- sb.append("\"");
- }
- sb.append(">");
- text.append(sb.toString());
- }
- /**
- * Appends a tag that indicates that an inlined quote section ends.
- *
- */
- public void appendCloseInlinedQuoteTag() {
- text.append("</q>");
- }
- /**
- * Appends a tag that allows to set the fonts for a span of text.
- *
- * @param style the style for a span of text
- */
- public void appendOpenSpanTag(String style) {
- StringBuilder sb = new StringBuilder("<span");
- if (style != null) {
- sb.append(" style=\"");
- sb.append(style);
- sb.append("\"");
- }
- sb.append(">");
- text.append(sb.toString());
- }
- /**
- * Appends a tag that indicates that a span section ends.
- *
- */
- public void appendCloseSpanTag() {
- text.append("</span>");
- }
- /**
- * Appends a tag that indicates text which should be more forceful than surrounding text.
- *
- */
- public void appendOpenStrongTag() {
- text.append("<strong>");
- }
- /**
- * Appends a tag that indicates that a strong section ends.
- *
- */
- public void appendCloseStrongTag() {
- text.append("</strong>");
- }
- /**
- * Appends a given text to the XHTMLText.
- *
- * @param textToAppend the text to append
- */
- public void append(String textToAppend) {
- text.append(StringUtils.escapeForXML(textToAppend));
- }
- /**
- * Returns the text of the XHTMLText.
- *
- * Note: Automatically adds the closing body tag.
- *
- * @return the text of the XHTMLText
- */
- public String toString() {
- return text.toString().concat(closeBodyTag());
- }
- }