Merge pull request #104 from noties/v2.0.2
# v2.0.2 * Extend task list parsing (#99) Thanks @Tunous * Fix deep nested bullet lists for Nougat
This commit is contained in:
commit
550165402a
@ -6,7 +6,7 @@ org.gradle.configureondemand=true
|
||||
android.enableBuildCache=true
|
||||
android.buildCacheDir=build/pre-dex-cache
|
||||
|
||||
VERSION_NAME=2.0.1
|
||||
VERSION_NAME=2.0.2-SNAPSHOT
|
||||
|
||||
GROUP=ru.noties
|
||||
POM_DESCRIPTION=Markwon
|
||||
|
@ -58,14 +58,28 @@ public class BulletListItemSpan implements LeadingMarginSpan {
|
||||
|
||||
final int marginLeft = (width - side) / 2;
|
||||
|
||||
// @since 2.0.2
|
||||
// There is a bug in Android Nougat, when this span receives an `x` that
|
||||
// doesn't correspond to what it should be (text is placed correctly though).
|
||||
// Let's make this a general rule -> manually calculate difference between expected/actual
|
||||
// and add this difference to resulting left/right values. If everything goes well
|
||||
// we do not encounter a bug -> this `diff` value will be 0
|
||||
final int diff;
|
||||
if (dir < 0) {
|
||||
// rtl
|
||||
diff = x - (layout.getWidth() - (width * level));
|
||||
} else {
|
||||
diff = (width * level) - x;
|
||||
}
|
||||
|
||||
// in order to support RTL
|
||||
final int l;
|
||||
final int r;
|
||||
{
|
||||
final int left = x + (dir * marginLeft);
|
||||
final int right = left + (dir * side);
|
||||
l = Math.min(left, right);
|
||||
r = Math.max(left, right);
|
||||
l = Math.min(left, right) + (dir * diff);
|
||||
r = Math.max(left, right) + (dir * diff);
|
||||
}
|
||||
|
||||
final int t = baseline + (int) ((paint.descent() + paint.ascent()) / 2.F + .5F) - (side / 2);
|
||||
|
@ -23,7 +23,7 @@ import java.util.regex.Pattern;
|
||||
@SuppressWarnings("WeakerAccess")
|
||||
class TaskListBlockParser extends AbstractBlockParser {
|
||||
|
||||
private static final Pattern PATTERN = Pattern.compile("\\s*-\\s+\\[(x|X|\\s)\\]\\s+(.*)");
|
||||
private static final Pattern PATTERN = Pattern.compile("\\s*([-*+]|\\d{1,9}[.)])\\s+\\[(x|X|\\s)]\\s+(.*)");
|
||||
|
||||
private final TaskListBlock block = new TaskListBlock();
|
||||
|
||||
@ -88,9 +88,9 @@ class TaskListBlockParser extends AbstractBlockParser {
|
||||
continue;
|
||||
}
|
||||
listItem = new TaskListItem()
|
||||
.done(isDone(matcher.group(1)))
|
||||
.done(isDone(matcher.group(2)))
|
||||
.indent(item.indent / 2);
|
||||
inlineParser.parse(matcher.group(2), listItem);
|
||||
inlineParser.parse(matcher.group(3), listItem);
|
||||
block.appendChild(listItem);
|
||||
}
|
||||
}
|
||||
|
57
markwon/src/test/resources/tests/task-list.yaml
Normal file
57
markwon/src/test/resources/tests/task-list.yaml
Normal file
@ -0,0 +1,57 @@
|
||||
input: |-
|
||||
- [ ] First
|
||||
- [x] Second
|
||||
- [X] Third
|
||||
* [ ] First star
|
||||
* [x] Second star
|
||||
* [X] Third star
|
||||
+ [ ] First plus
|
||||
+ [x] Second plus
|
||||
+ [X] Third plus
|
||||
1. [x] Number with dot
|
||||
3) [ ] Number
|
||||
|
||||
output:
|
||||
- task-list: "First"
|
||||
blockIdent: 1
|
||||
done: false
|
||||
- text: "\n"
|
||||
- task-list: "Second"
|
||||
blockIdent: 1
|
||||
done: true
|
||||
- text: "\n"
|
||||
- task-list: "Third"
|
||||
blockIdent: 1
|
||||
done: true
|
||||
- text: "\n"
|
||||
- task-list: "First star"
|
||||
blockIdent: 1
|
||||
done: false
|
||||
- text: "\n"
|
||||
- task-list: "Second star"
|
||||
blockIdent: 1
|
||||
done: true
|
||||
- text: "\n"
|
||||
- task-list: "Third star"
|
||||
blockIdent: 1
|
||||
done: true
|
||||
- text: "\n"
|
||||
- task-list: "First plus"
|
||||
blockIdent: 1
|
||||
done: false
|
||||
- text: "\n"
|
||||
- task-list: "Second plus"
|
||||
blockIdent: 1
|
||||
done: true
|
||||
- text: "\n"
|
||||
- task-list: "Third plus"
|
||||
blockIdent: 1
|
||||
done: true
|
||||
- text: "\n"
|
||||
- task-list: "Number with dot"
|
||||
blockIdent: 1
|
||||
done: true
|
||||
- text: "\n"
|
||||
- task-list: "Number"
|
||||
blockIdent: 1
|
||||
done: false
|
Loading…
x
Reference in New Issue
Block a user