
com.android.utils.HtmlBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of common Show documentation
Show all versions of common Show documentation
common library used by other Android tools libraries.
The newest version!
/*
* Copyright (C) 2013 The Android Open Source Project
*
* 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 com.android.utils;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import java.awt.Color;
import java.net.URL;
public class HtmlBuilder {
@NonNull private final StringBuilder mStringBuilder;
private String mTableDataExtra;
public HtmlBuilder(@NonNull StringBuilder stringBuilder) {
mStringBuilder = stringBuilder;
}
public HtmlBuilder() {
mStringBuilder = new StringBuilder(100);
}
public HtmlBuilder openHtmlBody() {
addHtml("");
return this;
}
public HtmlBuilder closeHtmlBody() {
addHtml("");
return this;
}
public HtmlBuilder addHtml(@NonNull String html) {
mStringBuilder.append(html);
return this;
}
public HtmlBuilder addNbsp() {
mStringBuilder.append(" ");
return this;
}
public HtmlBuilder addNbsps(int count) {
for (int i = 0; i < count; i++) {
addNbsp();
}
return this;
}
public HtmlBuilder newline() {
mStringBuilder.append("
");
return this;
}
public HtmlBuilder newlineIfNecessary() {
if (!SdkUtils.endsWith(mStringBuilder, "
")) {
mStringBuilder.append("
");
}
return this;
}
public HtmlBuilder beginNoBr() {
mStringBuilder.append("");
return this;
}
public HtmlBuilder endNoBr() {
mStringBuilder.append(" ");
return this;
}
public HtmlBuilder addLink(@Nullable String textBefore,
@NonNull String linkText,
@Nullable String textAfter,
@NonNull String url) {
if (textBefore != null) {
add(textBefore);
}
addLink(linkText, url);
if (textAfter != null) {
add(textAfter);
}
return this;
}
public HtmlBuilder addLink(@NonNull String text, @NonNull String url) {
int begin = 0;
int length = text.length();
for (; begin < length; begin++) {
char c = text.charAt(begin);
if (Character.isWhitespace(c)) {
mStringBuilder.append(c);
} else {
break;
}
}
mStringBuilder.append("");
XmlUtils.appendXmlTextValue(mStringBuilder, text.trim());
mStringBuilder.append("");
int end = length - 1;
for (; end > begin; end--) {
char c = text.charAt(begin);
if (Character.isWhitespace(c)) {
mStringBuilder.append(c);
}
}
return this;
}
public HtmlBuilder add(@NonNull String text) {
XmlUtils.appendXmlTextValue(mStringBuilder, text);
return this;
}
public HtmlBuilder add(@NonNull String text, int start, int end) {
XmlUtils.appendXmlTextValue(mStringBuilder, text, start, end);
return this;
}
@NonNull
public String getHtml() {
return mStringBuilder.toString();
}
public HtmlBuilder beginBold() {
mStringBuilder.append("");
return this;
}
public HtmlBuilder endBold() {
mStringBuilder.append("");
return this;
}
public HtmlBuilder beginUnderline() {
mStringBuilder.append("");
return this;
}
public HtmlBuilder endUnderline() {
mStringBuilder.append("");
return this;
}
public HtmlBuilder coloredText(@NonNull Color color, @NonNull String text) {
beginColor(color);
add(text);
endColor();
return this;
}
public HtmlBuilder beginColor(@NonNull Color color) {
mStringBuilder.append("");
return this;
}
public HtmlBuilder endColor() {
mStringBuilder.append("");
return this;
}
public HtmlBuilder addUnderlined(String text) {
beginUnderline();
add(text);
endUnderline();
return this;
}
public HtmlBuilder addBold(String text) {
beginBold();
add(text);
endBold();
return this;
}
public HtmlBuilder beginItalic() {
mStringBuilder.append("");
return this;
}
public HtmlBuilder endItalic() {
mStringBuilder.append("");
return this;
}
public HtmlBuilder addItalic(String text) {
beginItalic();
add(text);
endItalic();
return this;
}
private HtmlBuilder appendStyle(@Nullable String cssStyle) {
if (cssStyle != null) {
mStringBuilder.append(" style=\"");
mStringBuilder.append(cssStyle);
mStringBuilder.append("\"");
}
return this;
}
public HtmlBuilder beginDiv() {
return beginDiv(null);
}
public HtmlBuilder beginDiv(@Nullable String cssStyle) {
mStringBuilder.append("');
return this;
}
public HtmlBuilder endDiv() {
mStringBuilder.append("");
return this;
}
public HtmlBuilder beginSpan() {
return beginSpan(null);
}
public HtmlBuilder beginSpan(@Nullable String cssStyle) {
mStringBuilder.append("');
return this;
}
public HtmlBuilder beginClassSpan(@NonNull String cssClasses) {
mStringBuilder.append("");
return this;
}
public HtmlBuilder beginPre(@Nullable String styleClass) {
mStringBuilder.append("\n");
return this;
}
public HtmlBuilder endPre() {
mStringBuilder.append("
\n");
return this;
}
public HtmlBuilder endSpan() {
mStringBuilder.append("");
return this;
}
public HtmlBuilder addHeading(@NonNull String text, @NonNull String fontColor) {
mStringBuilder.append("");
add(text);
mStringBuilder.append("");
return this;
}
/**
* The JEditorPane HTML renderer creates really ugly bulleted lists; the
* size is hardcoded to use a giant heavy bullet. So, use a definition
* list instead.
*/
private static final boolean USE_DD_LISTS = true;
public HtmlBuilder beginList() {
if (USE_DD_LISTS) {
mStringBuilder.append("");
} else {
mStringBuilder.append("");
}
return this;
}
public HtmlBuilder endList() {
if (USE_DD_LISTS) {
mStringBuilder.append("
");
} else {
mStringBuilder.append("");
}
return this;
}
public HtmlBuilder listItem() {
if (USE_DD_LISTS) {
mStringBuilder.append("");
mStringBuilder.append("-&NBSP;");
} else {
mStringBuilder.append("");
}
return this;
}
public HtmlBuilder addImage(URL url, @Nullable String altText) {
String link = "";
try {
link = url.toURI().toURL().toExternalForm();
}
catch (Throwable t) {
// pass
}
mStringBuilder.append("
");
return this;
}
public HtmlBuilder addIcon(@Nullable String src) {
if (src != null) {
mStringBuilder.append("
");
}
return this;
}
public HtmlBuilder beginTable(@Nullable String tdExtra) {
mStringBuilder.append("");
mTableDataExtra = tdExtra;
return this;
}
public HtmlBuilder beginTable() {
return beginTable(null);
}
public HtmlBuilder endTable() {
mStringBuilder.append("
");
return this;
}
public HtmlBuilder beginTableRow() {
mStringBuilder.append("");
return this;
}
public HtmlBuilder endTableRow() {
mStringBuilder.append(" ");
return this;
}
public HtmlBuilder addTableRow(boolean isHeader, String... columns) {
if (columns == null || columns.length == 0) {
return this;
}
String tag = "t" + (isHeader ? 'h' : 'd');
beginTableRow();
for (String c : columns) {
mStringBuilder.append('<');
mStringBuilder.append(tag);
if (mTableDataExtra != null) {
mStringBuilder.append(' ');
mStringBuilder.append(mTableDataExtra);
}
mStringBuilder.append('>');
mStringBuilder.append(c);
mStringBuilder.append("");
mStringBuilder.append(tag);
mStringBuilder.append('>');
}
endTableRow();
return this;
}
public HtmlBuilder addTableRow(String... columns) {
return addTableRow(false, columns);
}
@NonNull
public StringBuilder getStringBuilder() {
return mStringBuilder;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy