diff --git a/richtextfx-demos/src/main/java/org/fxmisc/richtext/demo/richtext/RichText.java b/richtextfx-demos/src/main/java/org/fxmisc/richtext/demo/richtext/RichText.java index 3cec92be8..9e1041828 100644 --- a/richtextfx-demos/src/main/java/org/fxmisc/richtext/demo/richtext/RichText.java +++ b/richtextfx-demos/src/main/java/org/fxmisc/richtext/demo/richtext/RichText.java @@ -46,15 +46,15 @@ public static void main(String[] args) { launch(args); } - private final StyledTextArea area = - AreaFactory.styledTextArea( - TextStyle.EMPTY.updateFontSize(12).updateFontFamily("Serif").updateTextColor(Color.BLACK), - ( text, style) -> text.setStyle(style.toCss()), + private final StyledTextArea area = + AreaFactory.styledTextArea( ParStyle.EMPTY, - ( paragraph, style) -> paragraph.setStyle(style.toCss())); + ( paragraph, style) -> paragraph.setStyle(style.toCss()), + TextStyle.EMPTY.updateFontSize(12).updateFontFamily("Serif").updateTextColor(Color.BLACK), + ( text, style) -> text.setStyle(style.toCss())); { area.setWrapText(true); - area.setStyleCodecs(TextStyle.CODEC, ParStyle.CODEC); + area.setStyleCodecs(ParStyle.CODEC, TextStyle.CODEC); } private final SuspendableNo updatingToolbar = new SuspendableNo(); @@ -150,7 +150,7 @@ protected boolean computeValue() { int startPar = area.offsetToPosition(selection.getStart(), Forward).getMajor(); int endPar = area.offsetToPosition(selection.getEnd(), Backward).getMajor(); - List> pars = area.getParagraphs().subList(startPar, endPar + 1); + List> pars = area.getParagraphs().subList(startPar, endPar + 1); @SuppressWarnings("unchecked") Optional[] alignments = pars.stream().map(p -> p.getParagraphStyle().alignment).distinct().toArray(Optional[]::new); @@ -237,7 +237,7 @@ protected boolean computeValue() { paragraphBackgroundPicker); panel2.getChildren().addAll(sizeCombo, familyCombo, textColorPicker, backgroundColorPicker); - VirtualizedScrollPane> vsPane = new VirtualizedScrollPane<>(area); + VirtualizedScrollPane> vsPane = new VirtualizedScrollPane<>(area); VBox vbox = new VBox(); VBox.setVgrow(vsPane, Priority.ALWAYS); vbox.getChildren().addAll(panel1, panel2, vsPane); @@ -331,7 +331,7 @@ private void updateParagraphStyleInSelection(Function update int startPar = area.offsetToPosition(selection.getStart(), Forward).getMajor(); int endPar = area.offsetToPosition(selection.getEnd(), Backward).getMajor(); for(int i = startPar; i <= endPar; ++i) { - Paragraph paragraph = area.getParagraph(i); + Paragraph paragraph = area.getParagraph(i); area.setParagraphStyle(i, updater.apply(paragraph.getParagraphStyle())); } } diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/AreaFactory.java b/richtextfx/src/main/java/org/fxmisc/richtext/AreaFactory.java index f92183c03..c8b1900ed 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/AreaFactory.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/AreaFactory.java @@ -20,59 +20,59 @@ public class AreaFactory { * ********************************************************************** */ // StyledTextArea 1 - public static StyledTextArea styledTextArea( - S initialStyle, BiConsumer applyStyle, - PS initialParagraphStyle, BiConsumer applyParagraphStyle + public static StyledTextArea styledTextArea( + PS initialParagraphStyle, BiConsumer applyParagraphStyle, + S initialStyle, BiConsumer applyStyle ) { - return new StyledTextArea( - initialStyle, applyStyle, + return new StyledTextArea( initialParagraphStyle, applyParagraphStyle, + initialStyle, applyStyle, true); } // Embeds StyledTextArea 1 - public static VirtualizedScrollPane> embeddedStyledTextArea( - S initialStyle, BiConsumer applyStyle, - PS initialParagraphStyle, BiConsumer applyParagraphStyle + public static VirtualizedScrollPane> embeddedStyledTextArea( + PS initialParagraphStyle, BiConsumer applyParagraphStyle, + S initialStyle, BiConsumer applyStyle ) { - return new VirtualizedScrollPane<>(styledTextArea(initialStyle, applyStyle, initialParagraphStyle, applyParagraphStyle)); + return new VirtualizedScrollPane<>(styledTextArea(initialParagraphStyle, applyParagraphStyle, initialStyle, applyStyle)); } // StyledTextArea 2 - public static StyledTextArea styledTextArea( - S initialStyle, BiConsumer applyStyle, + public static StyledTextArea styledTextArea( PS initialParagraphStyle, BiConsumer applyParagraphStyle, + S initialStyle, BiConsumer applyStyle, boolean preserveStyle ) { - return new StyledTextArea( - initialStyle, applyStyle, + return new StyledTextArea( initialParagraphStyle, applyParagraphStyle, + initialStyle, applyStyle, preserveStyle); } // Embeds StyledTextArea 2 - public static VirtualizedScrollPane> embeddedStyledTextArea( - S initialStyle, BiConsumer applyStyle, - PS initialParagraphStyle, BiConsumer applyParagraphStyle, boolean preserveStyle + public static VirtualizedScrollPane> embeddedStyledTextArea( + PS initialParagraphStyle, BiConsumer applyParagraphStyle, + S initialStyle, BiConsumer applyStyle, boolean preserveStyle ) { - return new VirtualizedScrollPane<>(styledTextArea(initialStyle, applyStyle, initialParagraphStyle, applyParagraphStyle, preserveStyle)); + return new VirtualizedScrollPane<>(styledTextArea(initialParagraphStyle, applyParagraphStyle, initialStyle, applyStyle, preserveStyle)); } // Clones StyledTextArea - public static StyledTextArea cloneStyleTextArea(StyledTextArea area) { - return new StyledTextArea(area.getInitialStyle(), area.getApplyStyle(), - area.getInitialParagraphStyle(), area.getApplyParagraphStyle(), + public static StyledTextArea cloneStyleTextArea(StyledTextArea area) { + return new StyledTextArea(area.getInitialParagraphStyle(), area.getApplyParagraphStyle(), + area.getInitialStyle(), area.getApplyStyle(), area.getModel().getContent(), area.isPreserveStyle()); } // Embeds cloned StyledTextArea - public static VirtualizedScrollPane> embeddedClonedStyledTextArea(StyledTextArea area) { + public static VirtualizedScrollPane> embeddedClonedStyledTextArea(StyledTextArea area) { return new VirtualizedScrollPane<>(cloneStyleTextArea(area)); } // Embeds a cloned StyledTextArea from an embedded StyledTextArea - public static VirtualizedScrollPane> embeddedClonedStyledTextArea( - VirtualizedScrollPane> virtualizedScrollPaneWithArea + public static VirtualizedScrollPane> embeddedClonedStyledTextArea( + VirtualizedScrollPane> virtualizedScrollPaneWithArea ) { return embeddedClonedStyledTextArea(virtualizedScrollPaneWithArea.getContent()); } diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/ClipboardActions.java b/richtextfx/src/main/java/org/fxmisc/richtext/ClipboardActions.java index 9bff6956f..74e44cd31 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/ClipboardActions.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/ClipboardActions.java @@ -19,9 +19,9 @@ /** * Clipboard actions for {@link TextEditingArea}. */ -public interface ClipboardActions extends EditActions { +public interface ClipboardActions extends EditActions { - Optional, Codec>> getStyleCodecs(); + Optional, Codec>> getStyleCodecs(); /** * Transfers the currently selected text to the clipboard, @@ -45,9 +45,9 @@ default void copy() { content.putString(getSelectedText()); getStyleCodecs().ifPresent(codecs -> { - Codec> codec = ReadOnlyStyledDocument.codec(codecs._1, codecs._2); + Codec> codec = ReadOnlyStyledDocument.codec(codecs._1, codecs._2); DataFormat format = dataFormat(codec.getName()); - StyledDocument doc = subDocument(selection.getStart(), selection.getEnd()); + StyledDocument doc = subDocument(selection.getStart(), selection.getEnd()); ByteArrayOutputStream os = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(os); try { @@ -72,14 +72,14 @@ default void paste() { Clipboard clipboard = Clipboard.getSystemClipboard(); if(getStyleCodecs().isPresent()) { - Tuple2, Codec> codecs = getStyleCodecs().get(); - Codec> codec = ReadOnlyStyledDocument.codec(codecs._1, codecs._2); + Tuple2, Codec> codecs = getStyleCodecs().get(); + Codec> codec = ReadOnlyStyledDocument.codec(codecs._1, codecs._2); DataFormat format = dataFormat(codec.getName()); if(clipboard.hasContent(format)) { byte[] bytes = (byte[]) clipboard.getContent(format); ByteArrayInputStream is = new ByteArrayInputStream(bytes); DataInputStream dis = new DataInputStream(is); - StyledDocument doc = null; + StyledDocument doc = null; try { doc = codec.decode(dis); } catch (IOException e) { diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/EditActions.java b/richtextfx/src/main/java/org/fxmisc/richtext/EditActions.java index e97d501a6..f26270a13 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/EditActions.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/EditActions.java @@ -5,7 +5,7 @@ /** * Extended edit actions for {@link TextEditingArea}. */ -public interface EditActions extends TextEditingArea { +public interface EditActions extends TextEditingArea { /** * Appends the given text to the end of the text content. @@ -17,7 +17,7 @@ default void appendText(String text) { /** * Appends the given rich-text content to the end of this text-editing area. */ - default void append(StyledDocument document) { + default void append(StyledDocument document) { insert(getLength(), document); } @@ -37,7 +37,7 @@ default void insertText(int index, String text) { * @param index The location to insert the text. * @param document The rich-text content to insert. */ - default void insert(int index, StyledDocument document) { + default void insert(int index, StyledDocument document) { replace(index, index, document); } @@ -105,7 +105,7 @@ default void replaceText(String replacement) { /** * Replaces the entire content with the given rich-text content. */ - default void replace(StyledDocument replacement) { + default void replace(StyledDocument replacement) { replace(0, getLength(), replacement); } @@ -125,7 +125,7 @@ default void replaceSelection(String replacement) { * caret position. If there was a selection, then the selection is cleared * and the given replacement text is inserted. */ - default void replaceSelection(StyledDocument replacement) { + default void replaceSelection(StyledDocument replacement) { replace(getSelection(), replacement); } @@ -136,7 +136,7 @@ default void moveSelectedText(int pos) { // no move, just position the caret selectRange(pos, pos); } else { - StyledDocument text = this.subDocument(sel.getStart(), sel.getEnd()); + StyledDocument text = this.subDocument(sel.getStart(), sel.getEnd()); if(pos > sel.getEnd()) pos -= sel.getLength(); deleteText(sel); diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/EditableStyledDocument.java b/richtextfx/src/main/java/org/fxmisc/richtext/EditableStyledDocument.java index 4cf72ceed..95709cd45 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/EditableStyledDocument.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/EditableStyledDocument.java @@ -30,7 +30,7 @@ * on styled text, but not worrying about additional aspects such as * caret or selection. */ -final class EditableStyledDocument extends StyledDocumentBase>> { +final class EditableStyledDocument extends StyledDocumentBase>> { /* ********************************************************************** * * * @@ -63,14 +63,14 @@ final class EditableStyledDocument extends StyledDocumentBase> getParagraphs() { + public ObservableList> getParagraphs() { return FXCollections.unmodifiableObservableList(paragraphs); } /** * Read-only snapshot of the current state of this document. */ - public ReadOnlyStyledDocument snapshot() { + public ReadOnlyStyledDocument snapshot() { return new ReadOnlyStyledDocument<>(paragraphs, ParagraphsPolicy.COPY); } @@ -104,22 +104,22 @@ public ReadOnlyStyledDocument snapshot() { private final EventSource insertedText = new EventSource<>(); - private final EventSource> insertedDocument = new EventSource<>(); + private final EventSource> insertedDocument = new EventSource<>(); private final EventSource styleChangeDone = new EventSource<>(); private final EventStream plainTextChanges; public EventStream plainTextChanges() { return plainTextChanges; } - private final EventStream> richChanges; - public EventStream> richChanges() { return richChanges; } + private final EventStream> richChanges; + public EventStream> richChanges() { return richChanges; } { EventStream removedText = EventStreams.zip(textChangePosition, textRemovalEnd).map(t2 -> t2.map((a, b) -> getText(a, b))); EventStream changePosition = EventStreams.merge(textChangePosition, styleChangePosition); EventStream removalEnd = EventStreams.merge(textRemovalEnd, styleChangeEnd); - EventStream> removedDocument = EventStreams.zip(changePosition, removalEnd).map(t2 -> t2.map((a, b) -> subSequence(a, b))); + EventStream> removedDocument = EventStreams.zip(changePosition, removalEnd).map(t2 -> t2.map((a, b) -> subSequence(a, b))); EventStream insertionEnd = styleChangeEnd.emitOn(styleChangeDone); - EventStream> insertedDocument = EventStreams.merge( + EventStream> insertedDocument = EventStreams.merge( this.insertedDocument, changePosition.emitBothOnEach(insertionEnd).map(t2 -> t2.map((a, b) -> subSequence(a, b)))); @@ -140,12 +140,12 @@ public ReadOnlyStyledDocument snapshot() { * ********************************************************************** */ @SuppressWarnings("unchecked") - EditableStyledDocument(Paragraph initialParagraph) { + EditableStyledDocument(Paragraph initialParagraph) { super(FXCollections.observableArrayList(initialParagraph)); } - EditableStyledDocument(S initialStyle, PS initialParagraphStyle) { + EditableStyledDocument(PS initialParagraphStyle, S initialStyle) { this(new Paragraph<>(initialParagraphStyle, "", initialStyle)); } @@ -164,12 +164,12 @@ public ReadOnlyStyledDocument snapshot() { * {@code start} in the current document. */ public void replaceText(int start, int end, String text) { - StyledDocument doc = ReadOnlyStyledDocument.fromString( - text, getStyleAtPosition(start), getParagraphStyleAtPosition(start)); + StyledDocument doc = ReadOnlyStyledDocument.fromString( + text, getParagraphStyleAtPosition(start), getStyleAtPosition(start)); replace(start, end, doc); } - public void replace(int start, int end, StyledDocument replacement) { + public void replace(int start, int end, StyledDocument replacement) { ensureValidRange(start, end); textChangePosition.push(start); @@ -183,12 +183,12 @@ public void replace(int start, int end, StyledDocument replacement) { int lastParTo = end2D.getMinor(); // Get the leftovers after cutting out the deletion - Paragraph firstPar = paragraphs.get(firstParIdx).trim(firstParFrom); - Paragraph lastPar = paragraphs.get(lastParIdx).subSequence(lastParTo); + Paragraph firstPar = paragraphs.get(firstParIdx).trim(firstParFrom); + Paragraph lastPar = paragraphs.get(lastParIdx).subSequence(lastParTo); - List> replacementPars = replacement.getParagraphs(); + List> replacementPars = replacement.getParagraphs(); - List> newPars = join(firstPar, replacementPars, lastPar); + List> newPars = join(firstPar, replacementPars, lastPar); setAll(firstParIdx, lastParIdx + 1, newPars); // update length, invalidate text @@ -203,7 +203,7 @@ public void replace(int start, int end, StyledDocument replacement) { // complete the change events insertedText.push(replacement.getText()); - StyledDocument doc = + StyledDocument doc = replacement instanceof ReadOnlyStyledDocument ? replacement : new ReadOnlyStyledDocument<>(replacement.getParagraphs(), COPY); @@ -224,22 +224,22 @@ public void setStyle(int from, int to, S style) { int lastParTo = end.getMinor(); if(firstParIdx == lastParIdx) { - Paragraph p = paragraphs.get(firstParIdx); + Paragraph p = paragraphs.get(firstParIdx); p = p.restyle(firstParFrom, lastParTo, style); paragraphs.set(firstParIdx, p); } else { int affectedPars = lastParIdx - firstParIdx + 1; - List> restyledPars = new ArrayList<>(affectedPars); + List> restyledPars = new ArrayList<>(affectedPars); - Paragraph firstPar = paragraphs.get(firstParIdx); + Paragraph firstPar = paragraphs.get(firstParIdx); restyledPars.add(firstPar.restyle(firstParFrom, firstPar.length(), style)); for(int i = firstParIdx + 1; i < lastParIdx; ++i) { - Paragraph p = paragraphs.get(i); + Paragraph p = paragraphs.get(i); restyledPars.add(p.restyle(style)); } - Paragraph lastPar = paragraphs.get(lastParIdx); + Paragraph lastPar = paragraphs.get(lastParIdx); restyledPars.add(lastPar.restyle(0, lastParTo, style)); setAll(firstParIdx, lastParIdx + 1, restyledPars); @@ -248,7 +248,7 @@ public void setStyle(int from, int to, S style) { } public void setStyle(int paragraph, S style) { - Paragraph p = paragraphs.get(paragraph); + Paragraph p = paragraphs.get(paragraph); int start = position(paragraph, 0).toOffset(); int end = start + p.length(); @@ -265,7 +265,7 @@ public void setStyle(int paragraph, int fromCol, int toCol, S style) { int end = parOffset + toCol; try(Guard commitOnClose = beginStyleChange(start, end)) { - Paragraph p = paragraphs.get(paragraph); + Paragraph p = paragraphs.get(paragraph); p = p.restyle(fromCol, toCol, style); paragraphs.set(paragraph, p); } @@ -296,23 +296,23 @@ public void setStyleSpans(int from, StyleSpans styleSpans) { int lastParTo = end.getMinor(); if(firstParIdx == lastParIdx) { - Paragraph p = paragraphs.get(firstParIdx); - Paragraph q = p.restyle(firstParFrom, styleSpans); + Paragraph p = paragraphs.get(firstParIdx); + Paragraph q = p.restyle(firstParFrom, styleSpans); if(q != p) { paragraphs.set(firstParIdx, q); } } else { - Paragraph firstPar = paragraphs.get(firstParIdx); + Paragraph firstPar = paragraphs.get(firstParIdx); Position spansFrom = styleSpans.position(0, 0); Position spansTo = spansFrom.offsetBy(firstPar.length() - firstParFrom, Backward); - Paragraph q = firstPar.restyle(firstParFrom, styleSpans.subView(spansFrom, spansTo)); + Paragraph q = firstPar.restyle(firstParFrom, styleSpans.subView(spansFrom, spansTo)); if(q != firstPar) { paragraphs.set(firstParIdx, q); } spansFrom = spansTo.offsetBy(1, Forward); // skip the newline for(int i = firstParIdx + 1; i < lastParIdx; ++i) { - Paragraph par = paragraphs.get(i); + Paragraph par = paragraphs.get(i); spansTo = spansFrom.offsetBy(par.length(), Backward); q = par.restyle(0, styleSpans.subView(spansFrom, spansTo)); if(q != par) { @@ -321,7 +321,7 @@ public void setStyleSpans(int from, StyleSpans styleSpans) { spansFrom = spansTo.offsetBy(1, Forward); // skip the newline } - Paragraph lastPar = paragraphs.get(lastParIdx); + Paragraph lastPar = paragraphs.get(lastParIdx); spansTo = spansFrom.offsetBy(lastParTo, Backward); q = lastPar.restyle(0, styleSpans.subView(spansFrom, spansTo)); if(q != lastPar) { @@ -339,8 +339,8 @@ public void setStyleSpans(int paragraph, int from, StyleSpans style int end = start + len; try(Guard commitOnClose = beginStyleChange(start, end)) { - Paragraph p = paragraphs.get(paragraph); - Paragraph q = p.restyle(from, styleSpans); + Paragraph p = paragraphs.get(paragraph); + Paragraph q = p.restyle(from, styleSpans); if(q != p) { paragraphs.set(paragraph, q); } @@ -349,13 +349,13 @@ public void setStyleSpans(int paragraph, int from, StyleSpans style public void setParagraphStyle(int parIdx, PS style) { ensureValidParagraphIndex(parIdx); - Paragraph par = paragraphs.get(parIdx); + Paragraph par = paragraphs.get(parIdx); int len = par.length(); int start = position(parIdx, 0).toOffset(); int end = start + len; try(Guard commitOnClose = beginStyleChange(start, end)) { - Paragraph q = par.setParagraphStyle(style); + Paragraph q = par.setParagraphStyle(style); paragraphs.set(parIdx, q); } } @@ -390,7 +390,7 @@ private int fullLength(int par) { } private int terminatorLengthToSkip(Position pos) { - Paragraph par = paragraphs.get(pos.getMajor()); + Paragraph par = paragraphs.get(pos.getMajor()); int skipSum = 0; while(pos.getMinor() == par.length() && pos.getMajor() < paragraphs.size() - 1) { skipSum += 1; @@ -418,14 +418,14 @@ private Guard beginStyleChange(int start, int end) { return () -> styleChangeDone.push(null); } - private List> join(Paragraph first, List> middle, Paragraph last) { + private List> join(Paragraph first, List> middle, Paragraph last) { int m = middle.size(); if(m == 0) { return Arrays.asList(first.concat(last)); } else if(m == 1) { return Arrays.asList(first.concat(middle.get(0)).concat(last)); } else { - List> res = new ArrayList<>(middle.size()); + List> res = new ArrayList<>(middle.size()); res.add(first.concat(middle.get(0))); res.addAll(middle.subList(1, m - 1)); res.add(middle.get(m-1).concat(last)); @@ -435,7 +435,7 @@ private List> join(Paragraph first, List> pars) { + private void setAll(int startIdx, int endIdx, Collection> pars) { if(startIdx > 0 || endIdx < paragraphs.size()) { paragraphs.subList(startIdx, endIdx).clear(); // note that paragraphs remains non-empty at all times paragraphs.addAll(startIdx, pars); diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/InlineCssTextArea.java b/richtextfx/src/main/java/org/fxmisc/richtext/InlineCssTextArea.java index 69842c793..793069b8c 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/InlineCssTextArea.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/InlineCssTextArea.java @@ -1,5 +1,6 @@ package org.fxmisc.richtext; + /** * Text area that uses inline css to define style of text segments and paragraph segments. */ @@ -11,8 +12,8 @@ public InlineCssTextArea() { public InlineCssTextArea(EditableStyledDocument document) { super( - "", (text, style) -> text.setStyle(style), "", (paragraph, style) -> paragraph.setStyle(style), + "", (text, style) -> text.setStyle(style), document, true ); diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/InlineStyleTextArea.java b/richtextfx/src/main/java/org/fxmisc/richtext/InlineStyleTextArea.java index 9d74a4696..f243c0e07 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/InlineStyleTextArea.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/InlineStyleTextArea.java @@ -10,7 +10,7 @@ * @deprecated */ @Deprecated -public class InlineStyleTextArea extends StyledTextArea { +public class InlineStyleTextArea extends StyledTextArea { /** * @@ -19,11 +19,10 @@ public class InlineStyleTextArea extends StyledTextArea { * @param styleToCss function that converts an instance of {@code S} * to a CSS string. */ - public InlineStyleTextArea(S initialStyle, Function styleToCss, PS initialParagraphStyle, Function paragraphStyleToCss) { - super(initialStyle, - (text, style) -> text.setStyle(styleToCss.apply(style)), - initialParagraphStyle, - (paragraph, style) -> paragraph.setStyle(paragraphStyleToCss.apply(style))); + public InlineStyleTextArea(PS initialParagraphStyle, Function paragraphStyleToCss, S initialStyle, Function styleToCss) { + super(initialParagraphStyle, (paragraph, style) -> paragraph.setStyle(paragraphStyleToCss.apply(style)), + initialStyle, (text, style) -> text.setStyle(styleToCss.apply(style)) + ); } } diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/NavigationActions.java b/richtextfx/src/main/java/org/fxmisc/richtext/NavigationActions.java index 4d2061891..980ee6947 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/NavigationActions.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/NavigationActions.java @@ -7,7 +7,7 @@ /** * Navigation actions for {@link TextEditingArea}. */ -public interface NavigationActions extends TextEditingArea { +public interface NavigationActions extends TextEditingArea { /** * Indicates how to treat selection when caret is moved. diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/Paragraph.java b/richtextfx/src/main/java/org/fxmisc/richtext/Paragraph.java index 66852f57b..80eb47123 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/Paragraph.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/Paragraph.java @@ -11,7 +11,7 @@ import org.fxmisc.richtext.TwoDimensional.Position; -public final class Paragraph { +public final class Paragraph { @SafeVarargs private static List list(T head, T... tail) { @@ -75,7 +75,7 @@ public String substring(int from) { return getText().substring(from); } - public Paragraph concat(Paragraph p) { + public Paragraph concat(Paragraph p) { if(p.length() == 0) { return this; } @@ -101,7 +101,7 @@ public Paragraph concat(Paragraph p) { } } - public Paragraph append(String str) { + public Paragraph append(String str) { if(str.length() == 0) { return this; } @@ -112,7 +112,7 @@ public Paragraph append(String str) { return new Paragraph<>(paragraphStyle, segs); } - public Paragraph insert(int offset, CharSequence str) { + public Paragraph insert(int offset, CharSequence str) { if(offset < 0 || offset > length()) { throw new IndexOutOfBoundsException(String.valueOf(offset)); } @@ -127,11 +127,11 @@ public Paragraph insert(int offset, CharSequence str) { return new Paragraph<>(paragraphStyle, segs); } - public Paragraph subSequence(int start, int end) { + public Paragraph subSequence(int start, int end) { return trim(end).subSequence(start); } - public Paragraph trim(int length) { + public Paragraph trim(int length) { if(length >= length()) { return this; } else { @@ -144,7 +144,7 @@ public Paragraph trim(int length) { } } - public Paragraph subSequence(int start) { + public Paragraph subSequence(int start) { if(start < 0) { throw new IllegalArgumentException("start must not be negative (was: " + start + ")"); } else if(start == 0) { @@ -161,34 +161,34 @@ public Paragraph subSequence(int start) { } } - public Paragraph delete(int start, int end) { + public Paragraph delete(int start, int end) { return trim(start).concat(subSequence(end)); } - public Paragraph restyle(S style) { + public Paragraph restyle(S style) { return new Paragraph<>(paragraphStyle, getText(), style); } - public Paragraph restyle(int from, int to, S style) { + public Paragraph restyle(int from, int to, S style) { if(from >= length()) { return this; } else { to = Math.min(to, length()); - Paragraph left = subSequence(0, from); - Paragraph middle = new Paragraph<>(paragraphStyle, substring(from, to), style); - Paragraph right = subSequence(to); + Paragraph left = subSequence(0, from); + Paragraph middle = new Paragraph<>(paragraphStyle, substring(from, to), style); + Paragraph right = subSequence(to); return left.concat(middle).concat(right); } } - public Paragraph restyle(int from, StyleSpans styleSpans) { + public Paragraph restyle(int from, StyleSpans styleSpans) { int len = styleSpans.length(); if(styleSpans.equals(getStyleSpans(from, from + len))) { return this; } - Paragraph left = trim(from); - Paragraph right = subSequence(from + len); + Paragraph left = trim(from); + Paragraph right = subSequence(from + len); String middleString = substring(from, from + len); List> middleSegs = new ArrayList<>(styleSpans.getSpanCount()); @@ -199,12 +199,12 @@ public Paragraph restyle(int from, StyleSpans styleSpans) { middleSegs.add(new StyledText<>(text, span.getStyle())); offset = end; } - Paragraph middle = new Paragraph<>(paragraphStyle, middleSegs); + Paragraph middle = new Paragraph<>(paragraphStyle, middleSegs); return left.concat(middle).concat(right); } - public Paragraph setParagraphStyle(PS paragraphStyle) { + public Paragraph setParagraphStyle(PS paragraphStyle) { return new Paragraph<>(paragraphStyle, segments); } diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/ParagraphBox.java b/richtextfx/src/main/java/org/fxmisc/richtext/ParagraphBox.java index 6e31a4395..bcf0aa450 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/ParagraphBox.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/ParagraphBox.java @@ -31,7 +31,7 @@ import org.reactfx.value.Val; import org.reactfx.value.Var; -class ParagraphBox extends Region { +class ParagraphBox extends Region { /** * An opaque class representing horizontal caret offset. @@ -46,7 +46,7 @@ private CaretOffsetX(double value) { } } - private final ParagraphText text; + private final ParagraphText text; private final ObjectProperty> graphicFactory = new SimpleObjectProperty<>(null); @@ -69,7 +69,7 @@ public ObjectProperty> graphicFactoryProperty() { public void setIndex(int index) { this.index.setValue(index); } public int getIndex() { return index.getValue(); } - ParagraphBox(Paragraph par, BiConsumer applyStyle, BiConsumer applyParagraphStyle) { + ParagraphBox(Paragraph par, BiConsumer applyParagraphStyle, BiConsumer applyStyle) { this.getStyleClass().add("paragraph-box"); this.text = new ParagraphText<>(par, applyStyle); applyParagraphStyle.accept(this.text, par.getParagraphStyle()); @@ -107,7 +107,7 @@ public String toString() { public Property selectionProperty() { return text.selectionProperty(); } - Paragraph getParagraph() { + Paragraph getParagraph() { return text.getParagraph(); } diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/ParagraphText.java b/richtextfx/src/main/java/org/fxmisc/richtext/ParagraphText.java index 76e536842..a0305e508 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/ParagraphText.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/ParagraphText.java @@ -20,7 +20,7 @@ import org.reactfx.value.Val; import org.reactfx.value.Var; -class ParagraphText extends TextFlowExt { +class ParagraphText extends TextFlowExt { // FIXME: changing it currently has not effect, because // Text.impl_selectionFillProperty().set(newFill) doesn't work @@ -39,7 +39,7 @@ public ObjectProperty highlightTextFillProperty() { public ObjectProperty selectionProperty() { return selection; } public void setSelection(IndexRange sel) { selection.set(sel); } - private final Paragraph paragraph; + private final Paragraph paragraph; private final Path caretShape = new Path(); private final Path selectionShape = new Path(); @@ -53,7 +53,7 @@ public ObjectProperty highlightTextFillProperty() { caretShape.visibleProperty().bind(caretVisible); } - public ParagraphText(Paragraph par, BiConsumer applyStyle) { + public ParagraphText(Paragraph par, BiConsumer applyStyle) { this.paragraph = par; getStyleClass().add("paragraph-text"); @@ -118,7 +118,7 @@ public ParagraphText(Paragraph par, BiConsumer applyS } } - public Paragraph getParagraph() { + public Paragraph getParagraph() { return paragraph; } diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/ReadOnlyStyledDocument.java b/richtextfx/src/main/java/org/fxmisc/richtext/ReadOnlyStyledDocument.java index b539a9e8b..53dccf09a 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/ReadOnlyStyledDocument.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/ReadOnlyStyledDocument.java @@ -11,16 +11,16 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -public class ReadOnlyStyledDocument extends StyledDocumentBase>> { +public class ReadOnlyStyledDocument extends StyledDocumentBase>> { private static final Pattern LINE_TERMINATOR = Pattern.compile("\r\n|\r|\n"); - public static ReadOnlyStyledDocument fromString(String str, S style, PS paragraphStyle) { + public static ReadOnlyStyledDocument fromString(String str, PS paragraphStyle, S style) { Matcher m = LINE_TERMINATOR.matcher(str); int n = 1; while(m.find()) ++n; - List> res = new ArrayList<>(n); + List> res = new ArrayList<>(n); int start = 0; m.reset(); @@ -40,9 +40,9 @@ enum ParagraphsPolicy { COPY, } - static Codec> codec(Codec tCodec, Codec pCodec) { - return new Codec>() { - private final Codec>> codec = Codec.listCodec(paragraphCodec(tCodec, pCodec)); + static Codec> codec(Codec pCodec, Codec tCodec) { + return new Codec>() { + private final Codec>> codec = Codec.listCodec(paragraphCodec(pCodec, tCodec)); @Override public String getName() { @@ -50,12 +50,12 @@ public String getName() { } @Override - public void encode(DataOutputStream os, StyledDocument doc) throws IOException { + public void encode(DataOutputStream os, StyledDocument doc) throws IOException { codec.encode(os, doc.getParagraphs()); } @Override - public StyledDocument decode(DataInputStream is) throws IOException { + public StyledDocument decode(DataInputStream is) throws IOException { return new ReadOnlyStyledDocument<>( codec.decode(is), ParagraphsPolicy.ADOPT); @@ -64,8 +64,8 @@ public StyledDocument decode(DataInputStream is) throws IOException { }; } - private static Codec> paragraphCodec(Codec tCodec, Codec pCodec) { - return new Codec>() { + private static Codec> paragraphCodec(Codec pCodec, Codec tCodec) { + return new Codec>() { private final Codec>> segmentsCodec = Codec.listCodec(styledTextCodec(tCodec)); @Override @@ -74,13 +74,13 @@ public String getName() { } @Override - public void encode(DataOutputStream os, Paragraph p) throws IOException { + public void encode(DataOutputStream os, Paragraph p) throws IOException { pCodec.encode(os, p.getParagraphStyle()); segmentsCodec.encode(os, p.getSegments()); } @Override - public Paragraph decode(DataInputStream is) throws IOException { + public Paragraph decode(DataInputStream is) throws IOException { PS paragraphStyle = pCodec.decode(is); List> segments = segmentsCodec.decode(is); return new Paragraph<>(paragraphStyle, segments); @@ -117,7 +117,7 @@ public StyledText decode(DataInputStream is) throws IOException { private String text = null; - ReadOnlyStyledDocument(List> paragraphs, ParagraphsPolicy policy) { + ReadOnlyStyledDocument(List> paragraphs, ParagraphsPolicy policy) { super(policy == ParagraphsPolicy.ADOPT ? paragraphs : new ArrayList<>(paragraphs)); } @@ -138,7 +138,7 @@ public String getText() { } @Override - public List> getParagraphs() { + public List> getParagraphs() { return Collections.unmodifiableList(paragraphs); } diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/RichTextChange.java b/richtextfx/src/main/java/org/fxmisc/richtext/RichTextChange.java index 977f89c73..9413115ff 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/RichTextChange.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/RichTextChange.java @@ -1,8 +1,8 @@ package org.fxmisc.richtext; -public class RichTextChange extends TextChange, RichTextChange> { +public class RichTextChange extends TextChange, RichTextChange> { - public RichTextChange(int position, StyledDocument removed, StyledDocument inserted) { + public RichTextChange(int position, StyledDocument removed, StyledDocument inserted) { super(position, removed, inserted); } @@ -17,17 +17,17 @@ protected int insertedLength() { } @Override - protected final StyledDocument concat(StyledDocument a, StyledDocument b) { + protected final StyledDocument concat(StyledDocument a, StyledDocument b) { return a.concat(b); } @Override - protected final StyledDocument sub(StyledDocument doc, int from, int to) { + protected final StyledDocument sub(StyledDocument doc, int from, int to) { return doc.subSequence(from, to); } @Override - protected final RichTextChange create(int position, StyledDocument removed, StyledDocument inserted) { + protected final RichTextChange create(int position, StyledDocument removed, StyledDocument inserted) { return new RichTextChange<>(position, removed, inserted); } diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/StyleClassedTextArea.java b/richtextfx/src/main/java/org/fxmisc/richtext/StyleClassedTextArea.java index 4738fbc77..f4f556538 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/StyleClassedTextArea.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/StyleClassedTextArea.java @@ -12,9 +12,9 @@ public class StyleClassedTextArea extends StyledTextArea, Col public StyleClassedTextArea(EditableStyledDocument, Collection> document, boolean preserveStyle) { super(Collections.emptyList(), - (text, styleClasses) -> text.getStyleClass().addAll(styleClasses), - Collections.emptyList(), (paragraph, styleClasses) -> paragraph.getStyleClass().addAll(styleClasses), + Collections.emptyList(), + (text, styleClasses) -> text.getStyleClass().addAll(styleClasses), document, preserveStyle ); diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/StyledDocument.java b/richtextfx/src/main/java/org/fxmisc/richtext/StyledDocument.java index 9a86b2dc9..c1b16e6b2 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/StyledDocument.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/StyledDocument.java @@ -4,25 +4,24 @@ import javafx.scene.control.IndexRange; -public interface StyledDocument extends TwoDimensional { +public interface StyledDocument extends TwoDimensional { int length(); String getText(); String getText(int start, int end); String getText(IndexRange range); - StyledDocument subSequence(int start, int end); - StyledDocument subSequence(IndexRange range); - StyledDocument subDocument(int paragraphIndex); + StyledDocument subSequence(int start, int end); + StyledDocument subSequence(IndexRange range); + StyledDocument subDocument(int paragraphIndex); - StyledDocument concat(StyledDocument latter); + StyledDocument concat(StyledDocument latter); S getStyleOfChar(int index); S getStyleOfChar(int paragraph, int column); S getStyleAtPosition(int position); S getStyleAtPosition(int paragraph, int position); - PS getParagraphStyleAtPosition(int position); IndexRange getStyleRangeAtPosition(int position); IndexRange getStyleRangeAtPosition(int paragraph, int position); @@ -31,5 +30,5 @@ public interface StyledDocument extends TwoDimensional { StyleSpans getStyleSpans(int paragraph); StyleSpans getStyleSpans(int paragraph, int from, int to); - List> getParagraphs(); + List> getParagraphs(); } diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/StyledDocumentBase.java b/richtextfx/src/main/java/org/fxmisc/richtext/StyledDocumentBase.java index eabd51817..bea744993 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/StyledDocumentBase.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/StyledDocumentBase.java @@ -11,8 +11,8 @@ import javafx.scene.control.IndexRange; -abstract class StyledDocumentBase>> -implements StyledDocument { +abstract class StyledDocumentBase>> +implements StyledDocument { protected final L paragraphs; protected final TwoLevelNavigator navigator; @@ -70,31 +70,31 @@ public char charAt(int index) { } @Override - public StyledDocument subSequence(IndexRange range) { + public StyledDocument subSequence(IndexRange range) { return subSequence(range.getStart(), range.getEnd()); } @Override - public StyledDocument subSequence(int start, int end) { + public StyledDocument subSequence(int start, int end) { return sub( start, end, p -> p, (p, a, b) -> p.subSequence(a, b), - (List> pars) -> new ReadOnlyStyledDocument<>(pars, ADOPT)); + (List> pars) -> new ReadOnlyStyledDocument<>(pars, ADOPT)); } @Override - public StyledDocument subDocument(int paragraphIndex) { + public StyledDocument subDocument(int paragraphIndex) { return new ReadOnlyStyledDocument<>(Arrays.asList(paragraphs.get(paragraphIndex)), ADOPT); } @Override - public final StyledDocument concat(StyledDocument that) { - List> pars1 = this.getParagraphs(); - List> pars2 = that.getParagraphs(); + public final StyledDocument concat(StyledDocument that) { + List> pars1 = this.getParagraphs(); + List> pars2 = that.getParagraphs(); int n1 = pars1.size(); int n2 = pars2.size(); - List> pars = new ArrayList<>(n1 + n2 - 1); + List> pars = new ArrayList<>(n1 + n2 - 1); pars.addAll(pars1.subList(0, n1 - 1)); pars.add(pars1.get(n1 - 1).concat(pars2.get(0))); pars.addAll(pars2.subList(1, n2)); @@ -125,10 +125,9 @@ public S getStyleAtPosition(int paragraph, int position) { return paragraphs.get(paragraph).getStyleAtPosition(position); } - @Override public PS getParagraphStyleAtPosition(int position) { Position pos = offsetToPosition(position, Forward); - Paragraph par = paragraphs.get(pos.getMajor()); + Paragraph par = paragraphs.get(pos.getMajor()); return par.getParagraphStyle(); } @@ -158,18 +157,18 @@ public StyleSpans getStyleSpans(int from, int to) { List> subSpans = new ArrayList<>(affectedPars); if(startParIdx == endParIdx) { - Paragraph par = paragraphs.get(startParIdx); + Paragraph par = paragraphs.get(startParIdx); subSpans.add(par.getStyleSpans(start.getMinor(), end.getMinor())); } else { - Paragraph startPar = paragraphs.get(startParIdx); + Paragraph startPar = paragraphs.get(startParIdx); subSpans.add(startPar.getStyleSpans(start.getMinor(), startPar.length() + 1)); for(int i = startParIdx + 1; i < endParIdx; ++i) { - Paragraph par = paragraphs.get(i); + Paragraph par = paragraphs.get(i); subSpans.add(par.getStyleSpans(0, par.length() + 1)); } - Paragraph endPar = paragraphs.get(endParIdx); + Paragraph endPar = paragraphs.get(endParIdx); subSpans.add(endPar.getStyleSpans(0, end.getMinor())); } @@ -234,8 +233,8 @@ private interface SubMap { */ private R sub( int start, int end, - Function, P> map, - SubMap, P> subMap, + Function, P> map, + SubMap, P> subMap, Function, R> combine) { Position start2D = navigator.offsetToPosition(start, Forward); @@ -252,7 +251,7 @@ private R sub( if(p1 == p2) { pars.add(subMap.subrange(paragraphs.get(p1), col1, col2)); } else { - Paragraph par1 = paragraphs.get(p1); + Paragraph par1 = paragraphs.get(p1); pars.add(subMap.subrange(par1, col1, par1.length())); for(int i = p1 + 1; i < p2; ++i) { diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/StyledTextArea.java b/richtextfx/src/main/java/org/fxmisc/richtext/StyledTextArea.java index 5f133003f..c9da7d1e5 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/StyledTextArea.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/StyledTextArea.java @@ -104,12 +104,12 @@ * * @param type of style that can be applied to text. */ -public class StyledTextArea extends Region +public class StyledTextArea extends Region implements - TextEditingArea, - EditActions, - ClipboardActions, - NavigationActions, + TextEditingArea, + EditActions, + ClipboardActions, + NavigationActions, UndoActions, TwoDimensional, Virtualized { @@ -268,16 +268,16 @@ public class StyledTextArea extends Region public void setUseInitialStyleForInsertion(boolean value) { model.setUseInitialStyleForInsertion(value); } public boolean getUseInitialStyleForInsertion() { return model.getUseInitialStyleForInsertion(); } - private Optional, Codec>> styleCodecs = Optional.empty(); + private Optional, Codec>> styleCodecs = Optional.empty(); /** * Sets codecs to encode/decode style information to/from binary format. * Providing codecs enables clipboard actions to retain the style information. */ - public void setStyleCodecs(Codec textStyleCodec, Codec paragraphStyleCodec) { - styleCodecs = Optional.of(t(textStyleCodec, paragraphStyleCodec)); + public void setStyleCodecs(Codec paragraphStyleCodec, Codec textStyleCodec) { + styleCodecs = Optional.of(t(paragraphStyleCodec, textStyleCodec)); } @Override - public Optional, Codec>> getStyleCodecs() { + public Optional, Codec>> getStyleCodecs() { return styleCodecs; } @@ -317,7 +317,7 @@ public Optional, Codec>> getStyleCodecs() { @Override public final ObservableValue textProperty() { return model.textProperty(); } // rich text - @Override public final StyledDocument getDocument() { return model.getDocument(); }; + @Override public final StyledDocument getDocument() { return model.getDocument(); }; // length @Override public final int getLength() { return model.getLength(); } @@ -348,7 +348,7 @@ public Optional, Codec>> getStyleCodecs() { @Override public final ObservableValue caretColumnProperty() { return model.caretColumnProperty(); } // paragraphs - @Override public ObservableList> getParagraphs() { return model.getParagraphs(); } + @Override public ObservableList> getParagraphs() { return model.getParagraphs(); } // beingUpdated public ObservableBooleanValue beingUpdatedProperty() { return model.beingUpdatedProperty(); } @@ -384,7 +384,7 @@ public Optional, Codec>> getStyleCodecs() { @Override public final EventStream plainTextChanges() { return model.plainTextChanges(); } // rich text changes - @Override public final EventStream> richChanges() { return model.richChanges(); } + @Override public final EventStream> richChanges() { return model.richChanges(); } /* ********************************************************************** * * * @@ -400,7 +400,7 @@ public Optional, Codec>> getStyleCodecs() { private final Val> _popupAnchorAdjustment; - private final VirtualFlow, Cell, ParagraphBox>> virtualFlow; + private final VirtualFlow, Cell, ParagraphBox>> virtualFlow; // used for two-level navigation, where on the higher level are // paragraphs and on the lower level are lines within a paragraph @@ -411,12 +411,12 @@ public Optional, Codec>> getStyleCodecs() { /** * model */ - private final StyledTextAreaModel model; + private final StyledTextAreaModel model; /** * @return this area's {@link StyledTextAreaModel} */ - protected final StyledTextAreaModel getModel() { + protected final StyledTextAreaModel getModel() { return model; } @@ -469,18 +469,18 @@ protected final StyledTextAreaModel getModel() { * a style, applies the style to the paragraph node. This function is * used by the default skin to apply style to paragraph nodes. */ - public StyledTextArea(S initialStyle, BiConsumer applyStyle, - PS initialParagraphStyle, BiConsumer applyParagraphStyle + public StyledTextArea(PS initialParagraphStyle, BiConsumer applyParagraphStyle, + S initialStyle, BiConsumer applyStyle ) { - this(initialStyle, applyStyle, initialParagraphStyle, applyParagraphStyle, true); + this(initialParagraphStyle, applyParagraphStyle, initialStyle, applyStyle, true); } - public StyledTextArea(S initialStyle, BiConsumer applyStyle, - PS initialParagraphStyle, BiConsumer applyParagraphStyle, + public StyledTextArea(PS initialParagraphStyle, BiConsumer applyParagraphStyle, + S initialStyle, BiConsumer applyStyle, boolean preserveStyle ) { - this(initialStyle, applyStyle, initialParagraphStyle, applyParagraphStyle, - new EditableStyledDocument(initialStyle, initialParagraphStyle), preserveStyle); + this(initialParagraphStyle, applyParagraphStyle, initialStyle, applyStyle, + new EditableStyledDocument(initialParagraphStyle, initialStyle), preserveStyle); } /** @@ -488,19 +488,19 @@ public StyledTextArea(S initialStyle, BiConsumer applySt * this constructor can be used to create another {@code StyledTextArea} object that * shares the same {@link EditableStyledDocument}. */ - public StyledTextArea(S initialStyle, BiConsumer applyStyle, - PS initialParagraphStyle, BiConsumer applyParagraphStyle, - EditableStyledDocument document + public StyledTextArea(PS initialParagraphStyle, BiConsumer applyParagraphStyle, + S initialStyle, BiConsumer applyStyle, + EditableStyledDocument document ) { - this(initialStyle, applyStyle, initialParagraphStyle, applyParagraphStyle, document, true); + this(initialParagraphStyle, applyParagraphStyle, initialStyle, applyStyle, document, true); } - public StyledTextArea(S initialStyle, BiConsumer applyStyle, - PS initialParagraphStyle, BiConsumer applyParagraphStyle, - EditableStyledDocument document, boolean preserveStyle + public StyledTextArea(PS initialParagraphStyle, BiConsumer applyParagraphStyle, + S initialStyle, BiConsumer applyStyle, + EditableStyledDocument document, boolean preserveStyle ) { - this.model = new StyledTextAreaModel(initialStyle, initialParagraphStyle, document, preserveStyle); + this.model = new StyledTextAreaModel(initialParagraphStyle, initialStyle, document, preserveStyle); this.applyStyle = applyStyle; this.applyParagraphStyle = applyParagraphStyle; @@ -512,13 +512,13 @@ public StyledTextArea(S initialStyle, BiConsumer applyStyle, // keeps track of currently used non-empty cells @SuppressWarnings("unchecked") - ObservableSet> nonEmptyCells = FXCollections.observableSet(); + ObservableSet> nonEmptyCells = FXCollections.observableSet(); // Initialize content virtualFlow = VirtualFlow.createVertical( getParagraphs(), par -> { - Cell, ParagraphBox> cell = createCell( + Cell, ParagraphBox> cell = createCell( par, applyStyle, initialParagraphStyle, @@ -613,13 +613,13 @@ ParagraphBox.CaretOffsetX getCaretOffsetX() { CharacterHit hit(ParagraphBox.CaretOffsetX x, TwoDimensional.Position targetLine) { int parIdx = targetLine.getMajor(); - ParagraphBox cell = virtualFlow.getCell(parIdx).getNode(); + ParagraphBox cell = virtualFlow.getCell(parIdx).getNode(); CharacterHit parHit = cell.hitTextLine(x, targetLine.getMinor()); return parHit.offset(getParagraphOffset(parIdx)); } CharacterHit hit(ParagraphBox.CaretOffsetX x, double y) { - VirtualFlowHit, ParagraphBox>> hit = virtualFlow.hit(0.0, y); + VirtualFlowHit, ParagraphBox>> hit = virtualFlow.hit(0.0, y); if(hit.isBeforeCells()) { return CharacterHit.insertionAt(0); } else if(hit.isAfterCells()) { @@ -627,7 +627,7 @@ CharacterHit hit(ParagraphBox.CaretOffsetX x, double y) { } else { int parIdx = hit.getCellIndex(); int parOffset = getParagraphOffset(parIdx); - ParagraphBox cell = hit.getCell().getNode(); + ParagraphBox cell = hit.getCell().getNode(); Point2D cellOffset = hit.getCellOffset(); CharacterHit parHit = cell.hitText(x, cellOffset.getY()); return parHit.offset(parOffset); @@ -651,7 +651,7 @@ CharacterHit hit(ParagraphBox.CaretOffsetX x, double y) { * @param y */ public CharacterHit hit(double x, double y) { - VirtualFlowHit, ParagraphBox>> hit = virtualFlow.hit(x, y); + VirtualFlowHit, ParagraphBox>> hit = virtualFlow.hit(x, y); if(hit.isBeforeCells()) { return CharacterHit.insertionAt(0); } else if(hit.isAfterCells()) { @@ -659,7 +659,7 @@ public CharacterHit hit(double x, double y) { } else { int parIdx = hit.getCellIndex(); int parOffset = getParagraphOffset(parIdx); - ParagraphBox cell = hit.getCell().getNode(); + ParagraphBox cell = hit.getCell().getNode(); Point2D cellOffset = hit.getCellOffset(); CharacterHit parHit = cell.hit(cellOffset); return parHit.offset(parOffset); @@ -676,7 +676,7 @@ public CharacterHit hit(double x, double y) { */ TwoDimensional.Position currentLine() { int parIdx = getCurrentParagraph(); - Cell, ParagraphBox> cell = virtualFlow.getCell(parIdx); + Cell, ParagraphBox> cell = virtualFlow.getCell(parIdx); int lineIdx = cell.getNode().getCurrentLineIndex(); return _position(parIdx, lineIdx); } @@ -695,17 +695,17 @@ public String getText(int paragraph) { return model.getText(paragraph); } - public Paragraph getParagraph(int index) { + public Paragraph getParagraph(int index) { return model.getParagraph(index); } @Override - public StyledDocument subDocument(int start, int end) { + public StyledDocument subDocument(int start, int end) { return model.subDocument(start, end); } @Override - public StyledDocument subDocument(int paragraphIndex) { + public StyledDocument subDocument(int paragraphIndex) { return model.subDocument(paragraphIndex); } @@ -845,7 +845,7 @@ void show(double y) { void showCaretAtBottom() { int parIdx = getCurrentParagraph(); - Cell, ParagraphBox> cell = virtualFlow.getCell(parIdx); + Cell, ParagraphBox> cell = virtualFlow.getCell(parIdx); Bounds caretBounds = cell.getNode().getCaretBounds(); double y = caretBounds.getMaxY(); virtualFlow.showAtOffset(parIdx, getViewportHeight() - y); @@ -853,7 +853,7 @@ void showCaretAtBottom() { void showCaretAtTop() { int parIdx = getCurrentParagraph(); - Cell, ParagraphBox> cell = virtualFlow.getCell(parIdx); + Cell, ParagraphBox> cell = virtualFlow.getCell(parIdx); Bounds caretBounds = cell.getNode().getCaretBounds(); double y = caretBounds.getMinY(); virtualFlow.showAtOffset(parIdx, -y); @@ -866,7 +866,7 @@ void requestFollowCaret() { private void followCaret() { int parIdx = getCurrentParagraph(); - Cell, ParagraphBox> cell = virtualFlow.getCell(parIdx); + Cell, ParagraphBox> cell = virtualFlow.getCell(parIdx); Bounds caretBounds = cell.getNode().getCaretBounds(); double graphicWidth = cell.getNode().getGraphicPrefWidth(); Bounds region = extendLeft(caretBounds, graphicWidth); @@ -964,7 +964,7 @@ public void replaceText(int start, int end, String text) { } @Override - public void replace(int start, int end, StyledDocument replacement) { + public void replace(int start, int end, StyledDocument replacement) { model.replace(start, end, replacement); } @@ -1020,13 +1020,13 @@ protected void layoutChildren() { * * * ********************************************************************** */ - private Cell, ParagraphBox> createCell( - Paragraph paragraph, + private Cell, ParagraphBox> createCell( + Paragraph paragraph, BiConsumer applyStyle, PS initialParagraphStyle, BiConsumer applyParagraphStyle) { - ParagraphBox box = new ParagraphBox<>(paragraph, applyStyle, applyParagraphStyle); + ParagraphBox box = new ParagraphBox<>(paragraph, applyParagraphStyle, applyStyle); box.highlightFillProperty().bind(highlightFill); box.highlightTextFillProperty().bind(highlightTextFill); @@ -1058,9 +1058,9 @@ private Cell, ParagraphBox> createCell( }, selectionProperty(), box.indexProperty()); box.selectionProperty().bind(cellSelection); - return new Cell, ParagraphBox>() { + return new Cell, ParagraphBox>() { @Override - public ParagraphBox getNode() { + public ParagraphBox getNode() { return box; } @@ -1086,11 +1086,11 @@ public void dispose() { }; } - private ParagraphBox getCell(int index) { + private ParagraphBox getCell(int index) { return virtualFlow.getCell(index).getNode(); } - private EventStream mouseOverTextEvents(ObservableSet> cells, Duration delay) { + private EventStream mouseOverTextEvents(ObservableSet> cells, Duration delay) { return merge(cells, c -> c.stationaryIndices(delay).map(e -> e.unify( l -> l.map((pos, charIdx) -> MouseOverTextEvent.beginAt(c.localToScreen(pos), getParagraphOffset(c.getIndex()) + charIdx)), r -> MouseOverTextEvent.end()))); diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/StyledTextAreaModel.java b/richtextfx/src/main/java/org/fxmisc/richtext/StyledTextAreaModel.java index 99575a482..d890b5b50 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/StyledTextAreaModel.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/StyledTextAreaModel.java @@ -34,11 +34,11 @@ * @param type of style that can be applied to text. * @param type of style that can be applied to Paragraph */ -public class StyledTextAreaModel +public class StyledTextAreaModel implements - TextEditingArea, - EditActions, - NavigationActions, + TextEditingArea, + EditActions, + NavigationActions, UndoActions, TwoDimensional { @@ -105,7 +105,7 @@ private static int clamp(int min, int val, int max) { @Override public final ObservableValue textProperty() { return text; } // rich text - @Override public final StyledDocument getDocument() { return content.snapshot(); }; + @Override public final StyledDocument getDocument() { return content.snapshot(); }; // length private final SuspendableVal length; @@ -145,8 +145,8 @@ private static int clamp(int min, int val, int max) { @Override public final ObservableValue caretColumnProperty() { return caretColumn; } // paragraphs - private final SuspendableList> paragraphs; - @Override public ObservableList> getParagraphs() { return paragraphs; } + private final SuspendableList> paragraphs; + @Override public ObservableList> getParagraphs() { return paragraphs; } // beingUpdated private final SuspendableNo beingUpdated = new SuspendableNo(); @@ -165,9 +165,9 @@ private static int clamp(int min, int val, int max) { public final EventStream plainTextChanges() { return plainTextChanges; } // rich text changes - private final SuspendableEventStream> richTextChanges; + private final SuspendableEventStream> richTextChanges; @Override - public final EventStream> richChanges() { return richTextChanges; } + public final EventStream> richChanges() { return richTextChanges; } /* ********************************************************************** * * * @@ -183,14 +183,14 @@ private static int clamp(int min, int val, int max) { /** * content model */ - private final EditableStyledDocument content; + private final EditableStyledDocument content; /** * Usually used to create another area (View) that shares * the same document (Model). * @return this area's {@link EditableStyledDocument} */ - protected final EditableStyledDocument getContent() { return content; } + protected final EditableStyledDocument getContent() { return content; } /** * Style used by default when no other style is provided. @@ -229,14 +229,14 @@ private static int clamp(int min, int val, int max) { * @param initialParagraphStyle style to use in places where no other style is * specified (yet). */ - public StyledTextAreaModel(S initialStyle, PS initialParagraphStyle) { - this(initialStyle, initialParagraphStyle, true); + public StyledTextAreaModel(PS initialParagraphStyle, S initialStyle) { + this(initialParagraphStyle, initialStyle, true); } - public StyledTextAreaModel(S initialStyle, PS initialParagraphStyle, boolean preserveStyle + public StyledTextAreaModel(PS initialParagraphStyle, S initialStyle, boolean preserveStyle ) { - this(initialStyle, initialParagraphStyle, - new EditableStyledDocument(initialStyle, initialParagraphStyle), preserveStyle); + this(initialParagraphStyle, initialStyle, + new EditableStyledDocument(initialParagraphStyle, initialStyle), preserveStyle); } /** @@ -244,14 +244,14 @@ public StyledTextAreaModel(S initialStyle, PS initialParagraphStyle, boolean * this constructor can be used to create another {@code StyledTextArea} object that * shares the same {@link EditableStyledDocument}. */ - public StyledTextAreaModel(S initialStyle, PS initialParagraphStyle, - EditableStyledDocument document + public StyledTextAreaModel(PS initialParagraphStyle, S initialStyle, + EditableStyledDocument document ) { - this(initialStyle, initialParagraphStyle, document, true); + this(initialParagraphStyle, initialStyle, document, true); } - public StyledTextAreaModel(S initialStyle, PS initialParagraphStyle, - EditableStyledDocument document, boolean preserveStyle + public StyledTextAreaModel(PS initialParagraphStyle, S initialStyle, + EditableStyledDocument document, boolean preserveStyle ) { this.initialStyle = initialStyle; this.initialParagraphStyle = initialParagraphStyle; @@ -379,17 +379,17 @@ public String getText(int paragraph) { return paragraphs.get(paragraph).getText(); } - public Paragraph getParagraph(int index) { + public Paragraph getParagraph(int index) { return paragraphs.get(index); } @Override - public StyledDocument subDocument(int start, int end) { + public StyledDocument subDocument(int start, int end) { return content.subSequence(start, end); } @Override - public StyledDocument subDocument(int paragraphIndex) { + public StyledDocument subDocument(int paragraphIndex) { return content.subDocument(paragraphIndex); } @@ -630,13 +630,13 @@ public void clearParagraphStyle(int paragraph) { @Override public void replaceText(int start, int end, String text) { - StyledDocument doc = ReadOnlyStyledDocument.fromString( - text, getStyleForInsertionAt(start), getParagraphStyleForInsertionAt(start)); + StyledDocument doc = ReadOnlyStyledDocument.fromString( + text, getParagraphStyleForInsertionAt(start), getStyleForInsertionAt(start)); replace(start, end, doc); } @Override - public void replace(int start, int end, StyledDocument replacement) { + public void replace(int start, int end, StyledDocument replacement) { try (Guard g = content.beingUpdatedProperty().suspend()) { start = clamp(0, start, getLength()); end = clamp(0, end, getLength()); @@ -714,8 +714,8 @@ private UndoManager createPlainUndoManager(UndoManagerFactory factory) { } private UndoManager createRichUndoManager(UndoManagerFactory factory) { - Consumer> apply = change -> replace(change.getPosition(), change.getPosition() + change.getRemoved().length(), change.getInserted()); - BiFunction, RichTextChange, Optional>> merge = (change1, change2) -> change1.mergeWith(change2); + Consumer> apply = change -> replace(change.getPosition(), change.getPosition() + change.getRemoved().length(), change.getInserted()); + BiFunction, RichTextChange, Optional>> merge = (change1, change2) -> change1.mergeWith(change2); return factory.create(richChanges(), RichTextChange::invert, apply, merge); } diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/TextEditingArea.java b/richtextfx/src/main/java/org/fxmisc/richtext/TextEditingArea.java index fd0e6e2ef..cedee7e97 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/TextEditingArea.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/TextEditingArea.java @@ -14,7 +14,7 @@ * * @param type of style that can be applied to text. */ -public interface TextEditingArea { +public interface TextEditingArea { /******************* * * @@ -39,7 +39,7 @@ public interface TextEditingArea { * The returned document is immutable, it does not reflect * subsequent edits of this text-editing area. */ - StyledDocument getDocument(); + StyledDocument getDocument(); /** * The current position of the caret, as a character offset in the text. @@ -90,7 +90,7 @@ public interface TextEditingArea { /** * Unmodifiable observable list of paragraphs in this text area. */ - ObservableList> getParagraphs(); + ObservableList> getParagraphs(); /********************* @@ -107,7 +107,7 @@ public interface TextEditingArea { /** * Stream of rich text changes. */ - EventStream> richChanges(); + EventStream> richChanges(); /*************** @@ -129,12 +129,12 @@ public interface TextEditingArea { /** * Returns rich-text content of the given paragraph. */ - StyledDocument subDocument(int paragraphIndex); + StyledDocument subDocument(int paragraphIndex); /** * Returns rich-text content of the given character range. */ - StyledDocument subDocument(int start, int end); + StyledDocument subDocument(int start, int end); /*************** * * @@ -163,7 +163,7 @@ public interface TextEditingArea { /** * Replaces a range of characters with the given rich-text document. */ - void replace(int start, int end, StyledDocument replacement); + void replace(int start, int end, StyledDocument replacement); /** * Replaces a range of characters with the given text. @@ -182,7 +182,7 @@ default void replaceText(IndexRange range, String text) { * Equivalent to * {@code replace(range.getStart(), range.getEnd(), replacement)}. */ - default void replace(IndexRange range, StyledDocument replacement) { + default void replace(IndexRange range, StyledDocument replacement) { replace(range.getStart(), range.getEnd(), replacement); } diff --git a/richtextfx/src/test/java/org/fxmisc/richtext/ParagraphTest.java b/richtextfx/src/test/java/org/fxmisc/richtext/ParagraphTest.java index 85cd6fe81..11e3dce5c 100644 --- a/richtextfx/src/test/java/org/fxmisc/richtext/ParagraphTest.java +++ b/richtextfx/src/test/java/org/fxmisc/richtext/ParagraphTest.java @@ -11,10 +11,10 @@ public class ParagraphTest { // This relates to merging text changes and issue #216. @Test public void concatEmptyParagraphsTest() { - Paragraph p1 = new Paragraph<>(null, "", true); - Paragraph p2 = new Paragraph<>(null, "", false); + Paragraph p1 = new Paragraph<>(null, "", true); + Paragraph p2 = new Paragraph<>(null, "", false); - Paragraph p = p1.concat(p2); + Paragraph p = p1.concat(p2); assertEquals(Boolean.TRUE, p.getStyleAtPosition(0)); } diff --git a/richtextfx/src/test/java/org/fxmisc/richtext/StyledTextAreaModelTest.java b/richtextfx/src/test/java/org/fxmisc/richtext/StyledTextAreaModelTest.java index 867f9e2a8..8b66e10d2 100644 --- a/richtextfx/src/test/java/org/fxmisc/richtext/StyledTextAreaModelTest.java +++ b/richtextfx/src/test/java/org/fxmisc/richtext/StyledTextAreaModelTest.java @@ -31,8 +31,8 @@ public void testUndoWithWinNewlines() { public void testForBug216() { // set up area with some styled text content boolean initialStyle = false; - StyledTextAreaModel model = new StyledTextAreaModel<>( - initialStyle, "", new EditableStyledDocument<>(initialStyle, ""), true); + StyledTextAreaModel model = new StyledTextAreaModel<>( + "", initialStyle, new EditableStyledDocument<>("", initialStyle), true); model.replaceText("testtest"); model.setStyle(0, 8, true);