Fixed the indexes bug for margin spans

This commit is contained in:
Dimitry Ivanov 2017-10-24 18:00:40 +03:00
parent d1d3f51704
commit 672ae215d9
5 changed files with 12 additions and 21 deletions

View File

@ -204,8 +204,7 @@ public class SpannableMarkdownVisitor extends AbstractVisitor {
setSpan(length, new OrderedListItemSpan( setSpan(length, new OrderedListItemSpan(
configuration.theme(), configuration.theme(),
String.valueOf(start) + "." + '\u00a0', String.valueOf(start) + "." + '\u00a0',
blockQuoteIndent, blockQuoteIndent
length
)); ));
// after we have visited the children increment start number // after we have visited the children increment start number
@ -219,8 +218,7 @@ public class SpannableMarkdownVisitor extends AbstractVisitor {
setSpan(length, new BulletListItemSpan( setSpan(length, new BulletListItemSpan(
configuration.theme(), configuration.theme(),
blockQuoteIndent, blockQuoteIndent,
listLevel - 1, listLevel - 1
length
)); ));
} }
@ -253,7 +251,7 @@ public class SpannableMarkdownVisitor extends AbstractVisitor {
setSpan(length, new HeadingSpan( setSpan(length, new HeadingSpan(
configuration.theme(), configuration.theme(),
heading.getLevel(), heading.getLevel(),
builder.length()) builder.length() - length)
); );
newLine(); newLine();

View File

@ -19,17 +19,14 @@ public class BulletListItemSpan implements LeadingMarginSpan {
private final int blockIndent; private final int blockIndent;
private final int level; private final int level;
private final int start;
public BulletListItemSpan( public BulletListItemSpan(
@NonNull SpannableTheme theme, @NonNull SpannableTheme theme,
@IntRange(from = 0) int blockIndent, @IntRange(from = 0) int blockIndent,
@IntRange(from = 0) int level, @IntRange(from = 0) int level) {
@IntRange(from = 0) int start) {
this.theme = theme; this.theme = theme;
this.blockIndent = blockIndent; this.blockIndent = blockIndent;
this.level = level; this.level = level;
this.start = start;
} }
@Override @Override
@ -41,7 +38,7 @@ public class BulletListItemSpan implements LeadingMarginSpan {
public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout layout) { public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout layout) {
// if there was a line break, we don't need to draw anything // if there was a line break, we don't need to draw anything
if (this.start != start) { if (!first) {
return; return;
} }

View File

@ -16,12 +16,12 @@ public class HeadingSpan extends MetricAffectingSpan implements LeadingMarginSpa
private final Rect rect = ObjectsPool.rect(); private final Rect rect = ObjectsPool.rect();
private final Paint paint = ObjectsPool.paint(); private final Paint paint = ObjectsPool.paint();
private final int level; private final int level;
private final int end; private final int textLength;
public HeadingSpan(@NonNull SpannableTheme theme, @IntRange(from = 1, to = 6) int level, @IntRange(from = 0) int end) { public HeadingSpan(@NonNull SpannableTheme theme, @IntRange(from = 1, to = 6) int level, @IntRange(from = 0) int textLength) {
this.theme = theme; this.theme = theme;
this.level = level; this.level = level;
this.end = end; this.textLength = textLength;
} }
@Override @Override
@ -50,8 +50,7 @@ public class HeadingSpan extends MetricAffectingSpan implements LeadingMarginSpa
if (level == 1 if (level == 1
|| level == 2) { || level == 2) {
if (this.end == end) { if ((start + textLength) == end) {
paint.set(p); paint.set(p);
theme.applyHeadingBreakStyle(paint); theme.applyHeadingBreakStyle(paint);

View File

@ -12,18 +12,15 @@ public class OrderedListItemSpan implements LeadingMarginSpan {
private final SpannableTheme theme; private final SpannableTheme theme;
private final String number; private final String number;
private final int blockIndent; private final int blockIndent;
private final int start;
public OrderedListItemSpan( public OrderedListItemSpan(
@NonNull SpannableTheme theme, @NonNull SpannableTheme theme,
@NonNull String number, @NonNull String number,
@IntRange(from = 0) int blockIndent, @IntRange(from = 0) int blockIndent
@IntRange(from = 0) int start
) { ) {
this.theme = theme; this.theme = theme;
this.number = number; this.number = number;
this.blockIndent = blockIndent; this.blockIndent = blockIndent;
this.start = start;
} }
@Override @Override
@ -35,7 +32,7 @@ public class OrderedListItemSpan implements LeadingMarginSpan {
public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout layout) { public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout layout) {
// if there was a line break, we don't need to draw anything // if there was a line break, we don't need to draw anything
if (this.start != start) { if (!first) {
return; return;
} }

View File

@ -32,7 +32,7 @@ public class TaskListSpan implements LeadingMarginSpan {
@Override @Override
public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout layout) { public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout layout) {
if (this.start != start) { if (!first) {
return; return;
} }