Skip to content

Commit 956661b

Browse files
committed
add tracked offset resolution when outside paragraph or table element
1 parent d1e29fb commit 956661b

File tree

9 files changed

+123
-26
lines changed

9 files changed

+123
-26
lines changed

VERSION-TODO.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -219,10 +219,12 @@ Please give feedback on the upcoming changes if you have concerns about breaking
219219

220220
## Next 0.59.92
221221

222-
* [ ] Fix: multi-caret mode caret extraction seems to mess up
223-
* [ ] Fix: formatter tracking offset adjustment when tracking offset is not in table or
224-
paragraph, ie. not resolved after formatting then resolve in Formatter.render when using
225-
builder.
222+
* [ ] Fix: add item/child and first/rest continuation prefix tracking to allow separate prefix
223+
style to be used on item paragraph (item) and following child elements (child). The
224+
first/rest distinction applies to first line of item with rest being the continuation
225+
lines.
226+
* Fix: formatter tracking offset adjustment when tracking offset is not in table or paragraph,
227+
ie. not resolved after formatting then resolve in Formatter.render when using builder.
226228
* Add: `SpecExampleExtension` formatting for spec test files.
227229
* Add: `NodeFormatterContext.delegateRender()` method to delegate to format handler registered
228230
after the current one. If none then will delegate to `Node` renderer, with

flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/FormatterSpecTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.jetbrains.annotations.NotNull;
1414
import org.jetbrains.annotations.Nullable;
1515

16+
import java.text.Normalizer;
1617
import java.util.ArrayList;
1718
import java.util.Arrays;
1819
import java.util.List;
@@ -47,11 +48,10 @@ public void parse(CharSequence input) {
4748

4849
@Override
4950
protected @NotNull String renderHtml() {
50-
String html = super.renderHtml();
51-
5251
if (trackedOffsets == null) {
53-
return html;
52+
return getRenderer().render(getDocument());
5453
} else {
54+
String html = ((Formatter)getRenderer()).render(getDocument(), getDocument().getDocument().getChars().getBuilder());
5555
List<TrackedOffset> trackedOffsetList = Formatter.TRACKED_OFFSETS.get(getDocument().getDocument());
5656
assert trackedOffsetList == trackedOffsets;
5757

flexmark-core-test/src/test/resources/core_formatter_spec.md

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3456,9 +3456,9 @@ and more text.
34563456
````````````````````````````````
34573457

34583458

3459-
### Tracked Offset
3459+
## Tracked Offset
34603460

3461-
```````````````````````````````` example(Wrap - Tracked Offset: 1) options(margin[31])
3461+
```````````````````````````````` example(Tracked Offset: 1) options(margin[31])
34623462
* Paragraph with hard break ⦙and more text. [Test](test) text.
34633463
34643464
1. Paragraph with soft break and more text. ![Test](test) text.
@@ -3474,7 +3474,7 @@ and more text.
34743474
````````````````````````````````
34753475

34763476

3477-
```````````````````````````````` example(Wrap - Tracked Offset: 2) options(margin[31])
3477+
```````````````````````````````` example(Tracked Offset: 2) options(margin[31])
34783478
* Paragraph with hard break⦙ and more text. [Test](test) text.
34793479
34803480
1. Paragraph with soft break and more text. ![Test](test) text.
@@ -3490,7 +3490,7 @@ and more text.
34903490
````````````````````````````````
34913491

34923492

3493-
```````````````````````````````` example(Wrap - Tracked Offset: 3) options(margin[31])
3493+
```````````````````````````````` example(Tracked Offset: 3) options(margin[31])
34943494
* Paragraph with hard break and more text. [Test](test) text.
34953495
34963496
1. Paragraph with soft break ⦙and more text. ![Test](test) text.
@@ -3506,7 +3506,7 @@ and more text.
35063506
````````````````````````````````
35073507

35083508

3509-
```````````````````````````````` example(Wrap - Tracked Offset: 4) options(margin[31])
3509+
```````````````````````````````` example(Tracked Offset: 4) options(margin[31])
35103510
* Paragraph with hard break and more text. [Test](test) text.
35113511
35123512
1. Paragraph with soft break⦙ and more text. ![Test](test) text.
@@ -3522,7 +3522,7 @@ and more text.
35223522
````````````````````````````````
35233523

35243524

3525-
```````````````````````````````` example(Wrap - Tracked Offset: 5) options(margin[31], explicit-links-at-start)
3525+
```````````````````````````````` example(Tracked Offset: 5) options(margin[31], explicit-links-at-start)
35263526
* Paragraph with hard break and more text.⦙ [Test](test) text.
35273527
35283528
1. Paragraph with soft break and more text. ![Test](test) text.
@@ -3539,7 +3539,7 @@ and more text.
35393539
````````````````````````````````
35403540

35413541

3542-
```````````````````````````````` example(Wrap - Tracked Offset: 6) options(margin[31], explicit-links-at-start, image-links-at-start)
3542+
```````````````````````````````` example(Tracked Offset: 6) options(margin[31], explicit-links-at-start, image-links-at-start)
35433543
* Paragraph with hard break and more text.⦙ [Test](test) text.
35443544
35453545
1. Paragraph with soft break and more text. ![Test](test) text.
@@ -3556,7 +3556,7 @@ and more text.
35563556
````````````````````````````````
35573557

35583558

3559-
```````````````````````````````` example(Wrap - Tracked Offset: 7) options(margin[31], explicit-links-at-start, image-links-at-start)
3559+
```````````````````````````````` example(Tracked Offset: 7) options(margin[31], explicit-links-at-start, image-links-at-start)
35603560
* Paragraph with hard break and more text. ⦙[Test](test) text.
35613561
35623562
1. Paragraph with soft break and more text. ![Test](test) text.
@@ -3573,7 +3573,7 @@ and more text.
35733573
````````````````````````````````
35743574

35753575

3576-
```````````````````````````````` example(Wrap - Tracked Offset: 8) options(margin[31], explicit-links-at-start, image-links-at-start)
3576+
```````````````````````````````` example(Tracked Offset: 8) options(margin[31], explicit-links-at-start, image-links-at-start)
35773577
* Paragraph with hard break and more text. [Test](test) text.⦙
35783578
35793579
1. Paragraph with soft break and more text. ![Test](test) text.
@@ -3590,7 +3590,7 @@ and more text.
35903590
````````````````````````````````
35913591

35923592

3593-
```````````````````````````````` example(Wrap - Tracked Offset: 9) options(margin[31], explicit-links-at-start, image-links-at-start)
3593+
```````````````````````````````` example(Tracked Offset: 9) options(margin[31], explicit-links-at-start, image-links-at-start)
35943594
* Paragraph with hard break and more text. [Test](test) text.
35953595
35963596
1. Paragraph with soft break and more text.⦙ ![Test](test) text.
@@ -3607,7 +3607,7 @@ and more text.
36073607
````````````````````````````````
36083608

36093609

3610-
```````````````````````````````` example(Wrap - Tracked Offset: 10) options(margin[31], explicit-links-at-start, image-links-at-start)
3610+
```````````````````````````````` example(Tracked Offset: 10) options(margin[31], explicit-links-at-start, image-links-at-start)
36113611
* Paragraph with hard break and more text. [Test](test) text.
36123612
36133613
1. Paragraph with soft break and more text. ⦙![Test](test) text.
@@ -3624,7 +3624,7 @@ and more text.
36243624
````````````````````````````````
36253625

36263626

3627-
```````````````````````````````` example(Wrap - Tracked Offset: 11) options(margin[31], explicit-links-at-start, image-links-at-start)
3627+
```````````````````````````````` example(Tracked Offset: 11) options(margin[31], explicit-links-at-start, image-links-at-start)
36283628
* Paragraph with hard break and more text. [Test](test) text.
36293629
36303630
1. Paragraph with soft break and more text. ![Test](test) text.⦙
@@ -3641,7 +3641,7 @@ and more text.
36413641
````````````````````````````````
36423642

36433643

3644-
```````````````````````````````` example(Wrap - Tracked Offset: 12) options(margin[31], explicit-links-at-start, image-links-at-start)
3644+
```````````````````````````````` example(Tracked Offset: 12) options(margin[31], explicit-links-at-start, image-links-at-start)
36453645
* Paragraph with hard break and⦙ ⦙more text.⦙ ⦙[Test](test) text.⦙
36463646
36473647
1. Paragraph with soft break⦙ ⦙and more text.⦙ ⦙![Test](test) text.⦙
@@ -3658,6 +3658,45 @@ and more text.
36583658
````````````````````````````````
36593659

36603660

3661+
```````````````````````````````` example(Tracked Offset: 13) options(margin[31], explicit-links-at-start, image-links-at-start)
3662+
⦙* Paragraph with hard break and more text. [Test](test) text.
3663+
3664+
.
3665+
⦙* Paragraph with hard break and
3666+
more text.
3667+
[Test](test) text.
3668+
3669+
````````````````````````````````
3670+
3671+
3672+
```````````````````````````````` example(Tracked Offset: 14) options(margin[31], explicit-links-at-start, image-links-at-start)
3673+
*⦙ Paragraph with hard break and more text. [Test](test) text.
3674+
3675+
.
3676+
*⦙ Paragraph with hard break and
3677+
more text.
3678+
[Test](test) text.
3679+
3680+
````````````````````````````````
3681+
3682+
3683+
```````````````````````````````` example(Tracked Offset: 15) options(margin[31], explicit-links-at-start, image-links-at-start)
3684+
⦙*⦙ ⦙Paragraph with hard break and⦙ ⦙more text.⦙ ⦙[Test](test) text.⦙
3685+
3686+
⦙1⦙.⦙ ⦙Paragraph with soft break⦙ ⦙and more text.⦙ ⦙![Test](test) text.⦙
3687+
3688+
.
3689+
⦙*⦙ ⦙Paragraph with hard break and⦙
3690+
⦙more text.⦙
3691+
⦙[Test](test) text.⦙
3692+
3693+
⦙1⦙.⦙ ⦙Paragraph with soft break⦙
3694+
⦙and more text.⦙
3695+
⦙![Test](test) text.⦙
3696+
3697+
````````````````````````````````
3698+
3699+
36613700
## Issue
36623701

36633702
### 243

flexmark-ext-tables/src/test/resources/ext_tables_formatter_spec.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1547,9 +1547,23 @@ fails in md nav
15471547
````````````````````````````````
15481548

15491549

1550+
```````````````````````````````` example(Tracked Offset - Indented: 11) options(left-align-marker-add, NO_FILE_EOL)
1551+
|name⦙|display|title_en|title_de|
1552+
|---|---|---|---|
1553+
|no⦙ne| | | |
1554+
|Prof⦙.|Prof.⦙|Prof.|Prof.|
1555+
.
1556+
| name⦙ | display | title_en | title_de |
1557+
|:------|:--------|:---------|:---------|
1558+
| no⦙ne | | | |
1559+
| Prof⦙. | Prof.⦙ | Prof. | Prof. |
1560+
1561+
````````````````````````````````
1562+
1563+
15501564
in item
15511565

1552-
```````````````````````````````` example Tracked Offset - Indented: 11
1566+
```````````````````````````````` example Tracked Offset - Indented: 12
15531567
- Add: live templates starting with `.`
15541568
15551569
| Element | Abbreviation | Expansion |

flexmark-util/src/main/java/com/vladsch/flexmark/util/format/MarkdownWriterBase.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ public M tailBlankLine() {
4949
public abstract M tailBlankLine(int count);
5050

5151
// @formatter:off
52+
@Override public void setLinePrefixIndex(int lineIndex, int prefixEndIndex) { appendable.setLinePrefixIndex(lineIndex, prefixEndIndex); }
53+
@Override public void setLinePrefixIndex(int lineIndex, @NotNull CharSequence prefix, @NotNull CharSequence content) { appendable.setLinePrefixIndex(lineIndex, prefix, content); }
5254
@Override public boolean isPendingSpace() { return appendable.isPendingSpace(); }
5355
@Override public boolean isPreFormatted() { return appendable.isPreFormatted(); }
5456
@Override public boolean isPreFormattedLine(int line) { return appendable.isPreFormattedLine(line); }
@@ -65,14 +67,13 @@ public M tailBlankLine() {
6567
@Override public int textOnlyOffset() { return appendable.textOnlyOffset(); }
6668
@Override public int textOnlyOffsetWithPending() { return appendable.textOnlyOffsetWithPending(); }
6769
@Override public int getLinePrefixIndex(int lineIndex) { return appendable.getLinePrefixIndex(lineIndex); }
68-
@Override public void setLinePrefixIndex(int lineIndex, int prefixEndIndex) { appendable.setLinePrefixIndex(lineIndex, prefixEndIndex); }
69-
@Override public void setLinePrefixIndex(int lineIndex, @NotNull CharSequence prefix, @NotNull CharSequence content) { appendable.setLinePrefixIndex(lineIndex, prefix, content); }
7070
@NotNull @Override public int[] getLinesPrefixIndex(int startLine, int endLine) { return appendable.getLinesPrefixIndex(startLine, endLine); }
7171
@NotNull @Override public CharSequence[] getLinesPrefix(int startLine, int endLine) { return appendable.getLinesPrefix(startLine, endLine); }
7272
@NotNull @Override public CharSequence[] getLinesContent(int startLine, int endLine) { return appendable.getLinesContent(startLine, endLine); }
7373
@NotNull @Override public CharSequence[] getLines(int startLine, int endLine) { return appendable.getLines(startLine, endLine); }
7474
@Override @NotNull public BitFieldSet<Options> getOptionSet() { return appendable.getOptionSet();}
7575
@Override public int getAfterEolPrefixDelta() { return appendable.getAfterEolPrefixDelta(); }
76+
@Override @Nullable public SequenceBuilder getBuilder() { return appendable.getBuilder(); }
7677
@Override @NotNull public M pushOptions() { appendable.pushOptions(); return (M) this;}
7778
@Override @NotNull public M popOptions() { appendable.popOptions(); return (M) this;}
7879
@Override @NotNull public M changeOptions(int addFlags, int removeFlags) { appendable.changeOptions(addFlags, removeFlags); return (M) this;}

flexmark-util/src/main/java/com/vladsch/flexmark/util/html/HtmlFormattingAppendableBase.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,8 @@ public T tagLineIndent(@NotNull CharSequence tagName, @NotNull Runnable runnable
414414

415415
// delegated to LineFormattingAppendable
416416
// @formatter:off
417+
@Override public void setLinePrefixIndex(int lineIndex, int prefixEndIndex) { appendable.setLinePrefixIndex(lineIndex, prefixEndIndex); }
418+
@Override public void setLinePrefixIndex(int lineIndex, @NotNull CharSequence prefix, @NotNull CharSequence content) { appendable.setLinePrefixIndex(lineIndex, prefix, content); }
417419
@Override @NotNull public LineAppendable pushOptions() { return appendable.pushOptions(); }
418420
@Override @NotNull public LineAppendable popOptions() { return appendable.popOptions(); }
419421
@Override @NotNull public LineAppendable changeOptions(int addFlags, int removeFlags) { return appendable.changeOptions(addFlags, removeFlags); }
@@ -433,18 +435,17 @@ public T tagLineIndent(@NotNull CharSequence tagName, @NotNull Runnable runnable
433435
@Override public int textOnlyOffset() { return appendable.textOnlyOffset(); }
434436
@Override public int textOnlyOffsetWithPending() { return appendable.textOnlyOffsetWithPending(); }
435437
@Override public int getLinePrefixIndex(int lineIndex) { return appendable.getLinePrefixIndex(lineIndex); }
436-
@Override public void setLinePrefixIndex(int lineIndex, int prefixEndIndex) { appendable.setLinePrefixIndex(lineIndex, prefixEndIndex); }
437-
@Override public void setLinePrefixIndex(int lineIndex, @NotNull CharSequence prefix, @NotNull CharSequence content) { appendable.setLinePrefixIndex(lineIndex, prefix, content); }
438438
@NotNull @Override public int[] getLinesPrefixIndex(int startLine, int endLine) { return appendable.getLinesPrefixIndex(startLine, endLine); }
439439
@NotNull @Override public CharSequence[] getLinesPrefix(int startLine, int endLine) { return appendable.getLinesPrefix(startLine, endLine); }
440440
@NotNull @Override public CharSequence[] getLinesContent(int startLine, int endLine) { return appendable.getLinesContent(startLine, endLine); }
441441
@NotNull @Override public CharSequence[] getLines(int startLine, int endLine) { return appendable.getLines(startLine, endLine); }
442442
@Override public String toString(int maxBlankLines) { return appendable.toString(maxBlankLines); }
443443
@Override @NotNull public BitFieldSet<Options> getOptionSet() { return appendable.getOptionSet();}
444+
@Override public int getAfterEolPrefixDelta() { return appendable.getAfterEolPrefixDelta(); }
445+
@Override @Nullable public SequenceBuilder getBuilder() { return appendable.getBuilder(); }
444446
@NotNull @Override public T addIndentOnFirstEOL(@NotNull Runnable runnable) { appendable.addIndentOnFirstEOL(runnable); return (T)this; }
445447
@NotNull @Override public T addPrefix(@NotNull CharSequence prefix) { appendable.addPrefix(prefix); return (T)this; }
446448
@NotNull @Override public T addPrefix(@NotNull CharSequence prefix, boolean afterEol) { appendable.addPrefix(prefix, afterEol); return (T)this; }
447-
@Override public int getAfterEolPrefixDelta() { return appendable.getAfterEolPrefixDelta(); }
448449
@NotNull @Override public T append(char c) { appendable.append(c); return (T)this; }
449450
@NotNull @Override public T append(@NotNull CharSequence csq) { appendable.append(csq); return (T)this; }
450451
@NotNull @Override public T append(@NotNull CharSequence csq, int start, int end) { appendable.append(csq, start, end); return (T)this; }

flexmark-util/src/main/java/com/vladsch/flexmark/util/html/LineAppendable.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,13 @@ default LineAppendable setOptions(BitFieldSet<Options> options) {
158158
return setOptions(options.toInt());
159159
}
160160

161+
/**
162+
* Get builder used for accumulation or null if none
163+
* @return builder used for accumulation or null if none
164+
*/
165+
@Nullable
166+
SequenceBuilder getBuilder();
167+
161168
// these methods are monitored for content and formatting applied
162169
@Override
163170
@NotNull LineAppendable append(@NotNull CharSequence csq);

flexmark-util/src/main/java/com/vladsch/flexmark/util/html/LineFormattingAppendableImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,11 @@ public LineAppendable append(@NotNull CharSequence csq) {
586586
return this;
587587
}
588588

589+
@Override
590+
public @Nullable SequenceBuilder getBuilder() {
591+
return builder;
592+
}
593+
589594
@NotNull
590595
@Override
591596
public LineAppendable append(@NotNull CharSequence csq, int start, int end) {

0 commit comments

Comments
 (0)