made a few exceptions to quote parser for emoticons and quotes
This commit is contained in:
parent
00e8ba00c4
commit
2302122d8e
|
@ -352,7 +352,8 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
|
|||
char current = body.length() > i ? body.charAt(i) : '\n';
|
||||
if (lineStart == -1) {
|
||||
if (previous == '\n') {
|
||||
if ((current == '>' && UIHelper.isPositionFollowedByQuoteableCharacter(body,i)) || current == '\u00bb') {
|
||||
if ((current == '>' && UIHelper.isPositionFollowedByQuoteableCharacter(body,i))
|
||||
|| current == '\u00bb' && !UIHelper.isPositionFollowedByQuote(body,i)) {
|
||||
// Line start with quote
|
||||
lineStart = i;
|
||||
if (quoteStart == -1) quoteStart = i;
|
||||
|
|
|
@ -8,7 +8,6 @@ import android.widget.PopupMenu;
|
|||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
@ -25,8 +24,6 @@ import eu.siacs.conversations.entities.Message;
|
|||
import eu.siacs.conversations.entities.MucOptions;
|
||||
import eu.siacs.conversations.entities.Presence;
|
||||
import eu.siacs.conversations.entities.Transferable;
|
||||
import eu.siacs.conversations.ui.XmppActivity;
|
||||
import eu.siacs.conversations.xmpp.chatstate.ChatState;
|
||||
import eu.siacs.conversations.xmpp.jid.Jid;
|
||||
|
||||
public class UIHelper {
|
||||
|
@ -233,7 +230,8 @@ public class UIHelper {
|
|||
}
|
||||
|
||||
public static boolean isPositionFollowedByQuoteableCharacter(CharSequence body, int pos) {
|
||||
return !isPositionFollowedByNumber(body, pos) && !isPositionFollowedByBigGrin(body,pos);
|
||||
return !isPositionFollowedByNumber(body, pos)
|
||||
&& !isPositionFollowedByEmoticon(body,pos);
|
||||
}
|
||||
|
||||
private static boolean isPositionFollowedByNumber(CharSequence body, int pos) {
|
||||
|
@ -251,9 +249,45 @@ public class UIHelper {
|
|||
return previousWasNumber;
|
||||
}
|
||||
|
||||
private static boolean isPositionFollowedByBigGrin(CharSequence body, int pos) {
|
||||
return body.length() <= pos + 1
|
||||
|| ((body.charAt(pos + 1) == '<') && (body.length() == pos + 2 || Character.isWhitespace(body.charAt(pos + 2))));
|
||||
private static boolean isPositionFollowedByEmoticon(CharSequence body, int pos) {
|
||||
if (body.length() <= pos +1) {
|
||||
return false;
|
||||
} else {
|
||||
final char first = body.charAt(pos +1);
|
||||
return first == ';'
|
||||
|| first == ':'
|
||||
|| smallerThanBeforeWhitespace(body,pos+1);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean smallerThanBeforeWhitespace(CharSequence body, int pos) {
|
||||
for(int i = pos; i < body.length(); ++i) {
|
||||
final char c = body.charAt(i);
|
||||
if (Character.isWhitespace(c)) {
|
||||
return false;
|
||||
} else if (c == '<') {
|
||||
return body.length() == i + 1 || Character.isWhitespace(body.charAt(i + 1));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isPositionFollowedByQuote(CharSequence body, int pos) {
|
||||
if (body.length() <= pos + 1 || Character.isWhitespace(body.charAt(pos+1))) {
|
||||
return false;
|
||||
}
|
||||
boolean previousWasWhitespace = false;
|
||||
for (int i = pos +1; i < body.length(); i++) {
|
||||
char c = body.charAt(i);
|
||||
if (c == '\n' || c == '»') {
|
||||
return false;
|
||||
} else if (c == '«' && !previousWasWhitespace) {
|
||||
return true;
|
||||
} else {
|
||||
previousWasWhitespace = Character.isWhitespace(c);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static String getDisplayName(MucOptions.User user) {
|
||||
|
|
Loading…
Reference in a new issue