package com.door43.translationstudio.spannables;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import com.door43.tools.reporting.Logger;
import com.door43.translationstudio.AppContext;
import com.door43.translationstudio.R;
import java.util.regex.Pattern;
/**
* Created by joel on 12/2/2015.
*/
public class ArticleLinkSpan extends Span {
// e.g. [[en:ta:vol1:translate:translate_unknown|How to Translate Unknowns]]
public static final Pattern ADDRESS_PATTERN = Pattern.compile("\\[\\[(([-a-zA-Z0-9]+:ta:[-\\_a-z0-9]+:[-\\_a-z0-9]+:[-\\_a-z0-9]+)(\\|(((?!\\]\\]).)+))?)\\]\\]");
// e.g <a href="/en/ta/vol1/translate/figs_intro" title="en:ta:vol1:translate:figs_intro">Figures of Speech</a>
public static final Pattern LINK_PATTERN = Pattern.compile("<a(((?!<\\/a>).)*)href=\"\\/?([-a-zA-Z0-9]+\\/ta\\/[-\\_a-z0-9]+\\/[-\\_a-z0-9]+\\/[-\\_a-z0-9]+)\\/?\"(((?!<\\/a>).)*)>\\s*(((?!<\\/a>).)*)\\s*<\\/a>");
private final String title;
private final String address;
private SpannableStringBuilder mSpannable;
private String sourceLanguageSlug;
private String volume;
private String id;
private String manual;
/**
*
* @param title
* @param sourceLanguageSlug
* @param volume
* @param manual
* @param id
*/
protected ArticleLinkSpan(String title, String sourceLanguageSlug, String volume, String manual, String id) {
this.title = title;
this.address = buildAddress(sourceLanguageSlug, volume, manual, id);
this.sourceLanguageSlug = sourceLanguageSlug;
this.volume = volume;
this.manual = manual;
this.id = id;
init(this.title, address);
}
@Override
public SpannableStringBuilder render() {
if(mSpannable == null) {
mSpannable = super.render();
// apply custom styles
mSpannable.setSpan(new ForegroundColorSpan(AppContext.context().getResources().getColor(R.color.accent)), 0, mSpannable.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return mSpannable;
}
private String buildAddress(String sourceLanguageSlug, String volume, String manual, String id) {
// example: en:ta:vol2:translate:figs_euphemism
return sourceLanguageSlug + ":ta:" + volume + ":" + manual + ":" + id;
}
/**
* Changes the title of the passage link
* @param title
*/
public void setTitle(String title) {
setHumanReadable(title);
mSpannable = null;
}
public static ArticleLinkSpan parse(String address) {
return parse("", address);
}
public static ArticleLinkSpan parse(String title, String address) {
String[] parts = address.split(":");
if(parts.length == 5) {
// example: en:ta:vol2:translate:figs_euphemism
String sourceLanguageSlug = parts[0];
String taVolume = parts[2];
String taManual = parts[3];
String taId = parts[4];
return new ArticleLinkSpan(title, sourceLanguageSlug, taVolume, taManual, taId);
} else {
Logger.w(ArticleLinkSpan.class.getName(), "invalid translation academy link address " + address);
}
return null;
}
public String getSourceLanguageSlug() {
return sourceLanguageSlug;
}
public String getVolume() {
return volume;
}
public String getId() {
return id;
}
public String getManual() {
return manual;
}
}