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.R; import com.door43.translationstudio.AppContext; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by joel on 2/18/2015. */ public class PassageLinkSpan extends Span { // e.g. [[:en:bible:notes:gen:01:03|1:5]] public static final Pattern PATTERN = Pattern.compile("\\[\\[:(((?!\\]\\]).)*)\\|(((?!\\]\\]).)*)\\]\\]");//\\[\\[:((?!\\]\\])(.*)\\|(.*))\\]\\]"); private static String mTitle; private static String mAddress; private SpannableStringBuilder mSpannable; private String mLanguageId; private String mProjectId; private String mChapterId; private String mFrameId; /** * Creates a new passage link * @param title the title of the link e.g. 1:5 * @param address the address to the link e.g. en:bible:notes:gen:01:03 */ public PassageLinkSpan(String title, String address) { super(title, address); mTitle = title; mAddress = address; explodeAddress(address); } /** * Changes the title of the passage link * @param title */ public void setTitle(String title) { setHumanReadable(title); } @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; } /** * Returns the project id from the address * @return */ public String getProjectId() { return mProjectId; } /** * Returns teh chapter id from the address * @return */ public String getChapterId() { return mChapterId; } /** * Returns the frame id from the address * @return */ public String getFrameId() { return mFrameId; } /** * Returns the language id from the address * @return */ public String getLanguageId() { return mLanguageId; } /** * Breaks the address appart into it's components * @param address */ private void explodeAddress(String address) { String[] parts = address.split(":"); if(parts.length == 6 && parts[1].equals("bible")) { // example: en:bible:notes:gen:03:04 mLanguageId = parts[0]; mProjectId = parts[3]; mChapterId = parts[4]; mFrameId = parts[5]; } else if(parts.length == 5 && parts[3].equals("frames")) { // example: en:obs:notes:frames:01-11 String[] chapterFrame = parts[4].split("-"); if(chapterFrame.length == 2) { mLanguageId = parts[0]; mProjectId = parts[1]; mChapterId = chapterFrame[0]; mFrameId = chapterFrame[1]; } } else { Logger.w(this.getClass().getName(), "invalid passage link address "+address); } } // /** // * Returns the human readable name of the link // * @param rawLink // * @return // */ // public void parseLink(String rawLink) { // Matcher matcher = PATTERN.matcher(rawLink); // while(matcher.find()) { // mTitle = matcher.group(3); // mAddress = matcher.group(2); // explodeAddress(mAddress); // } // } /** * Returns the link title * @return */ public String getTitle() { return mTitle; } /** * Returns the link address * @return */ public String getAddress() { return mAddress; } }