From 316de9d9157863c8b71d8c4e1f62daf9d99dbb27 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 27 May 2017 19:13:20 -0700 Subject: [PATCH 1/3] Write test: restyling newline char should not throw exception --- .../org/fxmisc/richtext/model/ParagraphTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/richtextfx/src/test/java/org/fxmisc/richtext/model/ParagraphTest.java b/richtextfx/src/test/java/org/fxmisc/richtext/model/ParagraphTest.java index d7ff9ec32..7708ea81f 100644 --- a/richtextfx/src/test/java/org/fxmisc/richtext/model/ParagraphTest.java +++ b/richtextfx/src/test/java/org/fxmisc/richtext/model/ParagraphTest.java @@ -20,4 +20,19 @@ public void concatEmptyParagraphsTest() { assertEquals(Boolean.TRUE, p.getStyleAtPosition(0)); } + // Relates to #345 and #505: calling `EditableStyledDocument::setStyleSpans` when the style spans + // would style an empty paragraph would throw an exception + @Test + public void restylingEmptyParagraphViaStyleSpansWorks() { + TextOps, Boolean> segOps = StyledText.textOps(); + Paragraph, Boolean> p = new Paragraph<>(null, segOps, segOps.createEmpty()); + + StyleSpansBuilder builder = new StyleSpansBuilder<>(); + builder.add(true, 2); + StyleSpans spans = builder.create(); + Paragraph, Boolean> restyledP = p.restyle(0, spans); + + assertEquals(p, restyledP); + } + } From 4044173f69ba89ed92fa78b9327391d01cb8225d Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 27 May 2017 19:13:35 -0700 Subject: [PATCH 2/3] Implement StyleSpansImpl::toString --- .../richtext/model/StyleSpansBuilder.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/model/StyleSpansBuilder.java b/richtextfx/src/main/java/org/fxmisc/richtext/model/StyleSpansBuilder.java index d6ed84f96..02f09e693 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/model/StyleSpansBuilder.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/model/StyleSpansBuilder.java @@ -40,6 +40,16 @@ public int getSpanCount() { public StyleSpan getStyleSpan(int index) { return spans.get(index); } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("StyleSpans(length=").append(length()) + .append(" spanCount=").append(getSpanCount()) + .append(" spans=").append(spans) + .append(")"); + return sb.toString(); + } } static StyleSpans overlay( @@ -276,6 +286,20 @@ public StyleSpan getStyleSpan(int index) { return original.getStyleSpan(firstIdxInOrig + index); } } + + @Override + public String toString() { + ArrayList> spans = new ArrayList<>(spanCount); + for (int i = 0; i < spanCount; i++) { + spans.add(getStyleSpan(i)); + } + StringBuilder sb = new StringBuilder(); + sb.append("SubSpans(length=").append(length) + .append(" spanCount=").append(getSpanCount()) + .append(" spans=").append(spans) + .append(")"); + return sb.toString(); + } } From 1653ae0f69ab3924e249423abe7e449658ecd93f Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 27 May 2017 19:14:01 -0700 Subject: [PATCH 3/3] Fix bug: restyling empty paragraph via style spans should return itself --- .../src/main/java/org/fxmisc/richtext/model/Paragraph.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/model/Paragraph.java b/richtextfx/src/main/java/org/fxmisc/richtext/model/Paragraph.java index ed80862e3..9cd41a4fb 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/model/Paragraph.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/model/Paragraph.java @@ -230,7 +230,7 @@ public Paragraph restyle(int from, int to, S style) { public Paragraph restyle(int from, StyleSpans styleSpans) { int len = styleSpans.length(); - if(styleSpans.equals(getStyleSpans(from, from + len))) { + if(styleSpans.equals(getStyleSpans(from, from + len)) || length() == 0) { return this; }