package net.coding.program.common;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by chaochen on 14-10-25.
*/
public class HtmlContent {
private static final String REGX_PHOTO = "(?:<br>)? ?<a href=\"(?:[^\\\"]*)?\" (?:alt=\"\" )?target=\"_blank\" class=\"bubble-markdown-image-link\".*?><img src=\"(.*?)\" alt=\"(.*?)\".*?></a>(?:<br>)? ?";
private static final String REGX_PHOTO_OLD = "<div class='message-image-box'><a href=\'(?:[^\\\']*)?\' target='_blank'><img class='message-image' src='(.*?)'/?></a></div>";
private static final String REGX_PHOTO_IOS = "<div class=\"message-image-box\">(?:\\n)? ?<a href=\"(?:.*)\" target=\"_blank\"(?: rel=\"nofollow\")?><img class=\"message-image\" src=\"(.*?)\"></a>(?:\\n)? ?</div>";
private static final String REPLACE_PHOTO = "[图片]";
private static final String REGX_MONKEY = "<img class=\"emotion monkey\" src=\".*?\" title=\"(.*?)\">";
private static final String REGX_EMOJI = "<img class=\"emotion emoji\" src=\".*?\" title=\"(.*?)\">";
private static final String REGX_NET_PHOTO = "<img.*?alt=\"‘图片’\">";
private static final String REGX_CODE = "(<pre>)?<code(.*\\n)*</code>(</pre>)?";
private static final String REPLACE_CODE = "[代码]";
private static final String REGX_HTML = "<([A-Za-z][A-Za-z0-9]*)[^>]*>(.*?)</\\1>";
public static Global.MessageParse parseMessage(String s) {
Global.MessageParse parse = createMessageParse(s, REGX_PHOTO_OLD);
if (parse.uris.size() > 0) {
return parse;
}
Global.MessageParse parseIOS = createMessageParse(s, REGX_PHOTO_IOS);
if (parseIOS.uris.size() > 0) {
return parseIOS;
}
return createMessageParse(s, REGX_PHOTO);
}
public static String parseDynamic(String s) {
// Global.MessageParse parse = new Global.MessageParse();
// String replaceImage = s.replaceAll(HtmlContent.REGX_PHOTO, REPLACE_PHOTO);
//
// replaceImage = replaceImage.replaceAll(REGX_MONKEY, "<img src=\"$1\">");
//
// parse.text = replaceAllSpace(replaceImage);
return parseToText(s);
}
public static Global.MessageParse parseReplacePhoto(String s) {
Global.MessageParse parse = new Global.MessageParse();
String replaceImage = s.replaceAll(HtmlContent.REGX_PHOTO, REPLACE_PHOTO);
replaceImage = replaceImage.replaceAll(REGX_MONKEY, "<img src=\"$1\">");
parse.text = replaceAllSpace(replaceImage);
return parse;
}
public static String parseReplacePhotoEmoji(String s) {
return s.replaceAll(HtmlContent.REGX_PHOTO, REPLACE_PHOTO)
.replaceAll(REGX_PHOTO_OLD, REPLACE_PHOTO)
.replaceAll(REGX_PHOTO_IOS, REPLACE_PHOTO)
.replaceAll(REGX_MONKEY, ":$1:")
.replaceAll(REGX_EMOJI, ":$1:");
}
public static String parseReplaceHtml(String s) {
return parseReplacePhotoEmoji(s).replaceAll("<[^>]*>", "");
}
public static String parseReplacePhotoMonkey(String s) {
return s.replaceAll(REGX_MONKEY, REPLACE_PHOTO)
.replaceAll(REGX_PHOTO, REPLACE_PHOTO)
.replaceAll(REGX_PHOTO_OLD, REPLACE_PHOTO)
.replaceAll(REGX_PHOTO_IOS, REPLACE_PHOTO)
.replaceAll(REGX_NET_PHOTO, REPLACE_PHOTO);
}
// 去除加粗字体样式
public static String parseReplacePhotoMonkeySpecifyTitle(String s) {
return parseReplacePhotoMonkey(s).replaceAll("</?h\\w>", "");
}
public static String parseToText(String s) {
return s.replaceAll(REGX_MONKEY, "[$1]")
.replaceAll(REGX_PHOTO, REPLACE_PHOTO)
.replaceAll(REGX_PHOTO_OLD, REPLACE_PHOTO)
.replaceAll(REGX_PHOTO_IOS, REPLACE_PHOTO)
.replaceAll(REGX_CODE, REPLACE_CODE)
.replaceAll(REGX_HTML, "$2")
.replace("<sup>", "");
}
public static String parseToShareText(String s) {
return s.replaceAll(REGX_MONKEY, "[$1]")
.replaceAll(REGX_PHOTO, REPLACE_PHOTO)
.replaceAll(REGX_PHOTO_OLD, REPLACE_PHOTO)
.replaceAll(REGX_PHOTO_IOS, REPLACE_PHOTO)
.replaceAll(REGX_CODE, REPLACE_CODE)
.replaceAll(REGX_HTML, "$2")
.replace("<sup>", "")
.replaceAll("<(.*?)>", "");
}
private static Global.MessageParse createMessageParse(String s, String regx) {
Global.MessageParse parse = new Global.MessageParse();
// emoji 有时候会是类似于 image 的形式
String emojiSrc = "<a href=\"https://coding.net/static/emojis/(.*?)\" target=\"_blank\" class=\"bubble-markdown-image-link\" rel=\"nofollow\"><img class=\"emotion emoji bubble-markdown-image\" src=\"(.*?)\" title=\"(.*?)\"></a>";
String emojiDesc = "<img class=\"emotion emoji\" src=\"$2\" title=\"$3\">";
s = s.replaceAll(emojiSrc, emojiDesc);
Pattern pattern = Pattern.compile(regx);
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
parse.uris.add(matcher.group(1));
}
String replaceImage = s.replaceAll(regx, "");
parse.text = replaceAllSpace(replaceImage);
return parse;
}
private static String replaceAllSpace(String s) {
final String br = "<br>";
s = s.replaceAll("<p>", "").replaceAll("</p>", br);
if (s.endsWith(br)) {
s = s.substring(0, s.length() - br.length());
}
if (s.startsWith(br)) {
s = s.substring(br.length(), s.length());
}
String temp = s.replaceAll("<br>", "").replaceAll(" ", "").replaceAll("\n", "");
if (temp.isEmpty()) {
return "";
}
// s = s.replaceAll("( ?<br> ?)+", "<br>").replaceAll("( ?(<br>)? ?\n?)+$", "")
// .replaceAll("^( ?(<br>)? ?\n?)+", "");
s = s.replaceAll("( ?<br> ?)+", "<br>").replaceAll("( ?<br> ?\n?)+$", "").replaceAll("^( ?<br> ?\n?)+", "");
return s;
}
public static String createUserHtml(String globalKey, String name) {
final String format = "<font color='#3bbd79'><a href=\"/u/%s\">%s</a></font>";
return String.format(format, globalKey, name);
}
}