blob: 7f980b490729f8c367b74a3ce5dbfaa5910ac081 [file] [log] [blame]
package org.wordpress.android.ui.reader.utils;
import android.net.Uri;
import org.wordpress.android.util.StringUtils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReaderHtmlUtils {
public interface HtmlScannerListener {
void onTagFound(String tag, String src);
}
// regex for matching oriwidth attributes in tags
private static final Pattern ORIGINAL_WIDTH_ATTR_PATTERN = Pattern.compile(
"data-orig-size\\s*=\\s*(?:'|\")(.*?),.*?(?:'|\")",
Pattern.DOTALL|Pattern.CASE_INSENSITIVE);
private static final Pattern ORIGINAL_HEIGHT_ATTR_PATTERN = Pattern.compile(
"data-orig-size\\s*=\\s*(?:'|\").*?,(.*?)(?:'|\")",
Pattern.DOTALL|Pattern.CASE_INSENSITIVE);
// regex for matching width attributes in tags
private static final Pattern WIDTH_ATTR_PATTERN = Pattern.compile(
"width\\s*=\\s*(?:'|\")(.*?)(?:'|\")",
Pattern.DOTALL|Pattern.CASE_INSENSITIVE);
// regex for matching height attributes in tags
private static final Pattern HEIGHT_ATTR_PATTERN = Pattern.compile(
"height\\s*=\\s*(?:'|\")(.*?)(?:'|\")",
Pattern.DOTALL|Pattern.CASE_INSENSITIVE);
// regex for matching src attributes in tags
private static final Pattern SRC_ATTR_PATTERN = Pattern.compile(
"src\\s*=\\s*(?:'|\")(.*?)(?:'|\")",
Pattern.DOTALL|Pattern.CASE_INSENSITIVE);
/*
* returns the integer value from the data-orig-size attribute in the passed html tag
*/
public static int getOriginalWidthAttrValue(final String tag) {
if (tag == null) {
return 0;
}
Matcher matcher = ORIGINAL_WIDTH_ATTR_PATTERN.matcher(tag);
if (matcher.find()) {
return StringUtils.stringToInt(matcher.group(1), 0);
} else {
return 0;
}
}
public static int getOriginalHeightAttrValue(final String tag) {
if (tag == null) {
return 0;
}
Matcher matcher = ORIGINAL_HEIGHT_ATTR_PATTERN.matcher(tag);
if (matcher.find()) {
return StringUtils.stringToInt(matcher.group(1), 0);
} else {
return 0;
}
}
/*
* returns the integer value from the width attribute in the passed html tag
*/
public static int getWidthAttrValue(final String tag) {
if (tag == null) {
return 0;
}
Matcher matcher = WIDTH_ATTR_PATTERN.matcher(tag);
if (matcher.find()) {
// remove "width=" and quotes from the result
return StringUtils.stringToInt(tag.substring(matcher.start() + 7, matcher.end() - 1), 0);
} else {
return 0;
}
}
public static int getHeightAttrValue(final String tag) {
if (tag == null) {
return 0;
}
Matcher matcher = HEIGHT_ATTR_PATTERN.matcher(tag);
if (matcher.find()) {
return StringUtils.stringToInt(tag.substring(matcher.start() + 8, matcher.end() - 1), 0);
} else {
return 0;
}
}
/*
* returns the value from the src attribute in the passed html tag
*/
public static String getSrcAttrValue(final String tag) {
if (tag == null) {
return null;
}
Matcher matcher = SRC_ATTR_PATTERN.matcher(tag);
if (matcher.find()) {
// remove "src=" and quotes from the result
return tag.substring(matcher.start() + 5, matcher.end() - 1);
} else {
return null;
}
}
/*
* returns the integer value of the passed query param in the passed url - returns zero
* if the url is invalid, or the param doesn't exist, or the param value could not be
* converted to an int
*/
public static int getIntQueryParam(final String url,
@SuppressWarnings("SameParameterValue") final String param) {
if (url == null
|| param == null
|| !url.startsWith("http")
|| !url.contains(param + "=")) {
return 0;
}
return StringUtils.stringToInt(Uri.parse(url).getQueryParameter(param));
}
}