blob: f89581c955f9c1ae0c312d313d5dc2ff1e37ba8b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
package it.niedermann.nextcloud.deck.util;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.util.regex.Pattern;
public class CardUtil {
private static final Pattern pLists = Pattern.compile("^\\s*[*+-]\\s+", Pattern.MULTILINE);
private static final Pattern pHeadings = Pattern.compile("^#+\\s+(.*?)\\s*#*$", Pattern.MULTILINE);
private static final Pattern pHeadingLine = Pattern.compile("^(?:=*|-*)$", Pattern.MULTILINE);
private static final Pattern pEmphasis = Pattern.compile("(\\*+|_+)(.*?)\\1", Pattern.MULTILINE);
private static final Pattern pSpace1 = Pattern.compile("^\\s+", Pattern.MULTILINE);
private static final Pattern pSpace2 = Pattern.compile("\\s+$", Pattern.MULTILINE);
private CardUtil() {
// You shall not pass
}
@NonNull
public static String generateTitleFromDescription(String description) {
if(description == null) return "";
return getLineWithoutMarkDown(description, 0);
}
/**
* Reads the requested line and strips all MarkDown. If line is empty, it will go ahead to find the next not-empty line.
*
* @param content String
* @param lineNumber int
* @return lineContent String
*/
@NonNull
private static String getLineWithoutMarkDown(@NonNull String content, @SuppressWarnings("SameParameterValue") int lineNumber) {
String line = "";
if (content.contains("\n")) {
String[] lines = content.split("\n");
int currentLine = lineNumber;
while (currentLine < lines.length && isEmptyLine(lines[currentLine])) {
currentLine++;
}
if (currentLine < lines.length) {
line = removeMarkDown(lines[currentLine]);
}
} else {
line = content;
}
return line;
}
/**
* Checks if a line is empty.
* <pre>
* " " -> empty
* "\n" -> empty
* "\n " -> empty
* " \n" -> empty
* " \n " -> empty
* </pre>
*
* @param line String - a single Line which ends with \n
* @return boolean isEmpty
*/
private static boolean isEmptyLine(@Nullable String line) {
return removeMarkDown(line).trim().length() == 0;
}
/**
* Strips all MarkDown from the given String
*
* @param s String - MarkDown
* @return Plain Text-String
*/
@NonNull
private static String removeMarkDown(@Nullable String s) {
if (s == null)
return "";
s = pLists.matcher(s).replaceAll("");
s = pHeadings.matcher(s).replaceAll("$1");
s = pHeadingLine.matcher(s).replaceAll("");
s = pEmphasis.matcher(s).replaceAll("$2");
s = pSpace1.matcher(s).replaceAll("");
s = pSpace2.matcher(s).replaceAll("");
return s;
}
}
|