@@ -120,7 +120,7 @@ public SimpleViewOnlyStyledModel addSegment(String text) {
120120 public SimpleViewOnlyStyledModel addWithInlineAndStyleNames (String text , String style , String ... css ) {
121121 Objects .requireNonNull (text );
122122 StyleAttributeMap a = StyleAttributeMap .fromStyles (style , css );
123- Paragraph p = lastParagraph ();
123+ Paragraph p = textParagraph ();
124124 p .addSegment (text , a );
125125 return this ;
126126 }
@@ -136,7 +136,7 @@ public SimpleViewOnlyStyledModel addWithInlineAndStyleNames(String text, String
136136 public SimpleViewOnlyStyledModel addWithStyleNames (String text , String ... css ) {
137137 Objects .requireNonNull (text );
138138 StyleAttributeMap a = StyleAttributeMap .fromStyles (null , css );
139- Paragraph p = lastParagraph ();
139+ Paragraph p = textParagraph ();
140140 p .addSegment (text , a );
141141 return this ;
142142 }
@@ -152,7 +152,7 @@ public SimpleViewOnlyStyledModel addWithStyleNames(String text, String... css) {
152152 public SimpleViewOnlyStyledModel addWithInlineStyle (String text , String style ) {
153153 Objects .requireNonNull (text );
154154 StyleAttributeMap a = StyleAttributeMap .fromInlineStyle (style );
155- Paragraph p = lastParagraph ();
155+ Paragraph p = textParagraph ();
156156 p .addSegment (text , a );
157157 return this ;
158158 }
@@ -168,7 +168,7 @@ public SimpleViewOnlyStyledModel addWithInlineStyle(String text, String style) {
168168 public SimpleViewOnlyStyledModel addSegment (String text , StyleAttributeMap a ) {
169169 // TODO split into paragraphs if \n is found, or check for \n ?
170170 Objects .requireNonNull (a );
171- Paragraph p = lastParagraph ();
171+ Paragraph p = textParagraph ();
172172 p .addSegment (text , a );
173173 return this ;
174174 }
@@ -182,7 +182,7 @@ public SimpleViewOnlyStyledModel addSegment(String text, StyleAttributeMap a) {
182182 * @return this model instance
183183 */
184184 public SimpleViewOnlyStyledModel highlight (int start , int length , Color c ) {
185- Paragraph p = lastParagraph ();
185+ Paragraph p = textParagraph ();
186186 p .addHighlight (start , length , c );
187187 return this ;
188188 }
@@ -198,7 +198,7 @@ public SimpleViewOnlyStyledModel highlight(int start, int length, Color c) {
198198 * @since 25
199199 */
200200 public SimpleViewOnlyStyledModel highlight (int start , int length , String ... css ) {
201- Paragraph p = lastParagraph ();
201+ Paragraph p = textParagraph ();
202202 p .addHighlight (start , length , css );
203203 return this ;
204204 }
@@ -212,7 +212,7 @@ public SimpleViewOnlyStyledModel highlight(int start, int length, String ... css
212212 * @return this model instance
213213 */
214214 public SimpleViewOnlyStyledModel addWavyUnderline (int start , int length , Color c ) {
215- Paragraph p = lastParagraph ();
215+ Paragraph p = textParagraph ();
216216 p .addSquiggly (start , length , c );
217217 return this ;
218218 }
@@ -228,19 +228,24 @@ public SimpleViewOnlyStyledModel addWavyUnderline(int start, int length, Color c
228228 * @since 25
229229 */
230230 public SimpleViewOnlyStyledModel addWavyUnderline (int start , int length , String ... css ) {
231- Paragraph p = lastParagraph ();
231+ Paragraph p = textParagraph ();
232232 p .addSquiggly (start , length , css );
233233 return this ;
234234 }
235235
236- private Paragraph lastParagraph () {
236+ // returns the last text paragraph, adding one if necessary
237+ private Paragraph textParagraph () {
237238 int sz = paragraphs .size ();
238- if (sz == 0 ) {
239- Paragraph p = new Paragraph ();
240- paragraphs .add (p );
241- return p ;
239+ if (sz > 0 ) {
240+ Paragraph p = paragraphs .get (sz - 1 );
241+ if (p .isTextParagraph ()) {
242+ return p ;
243+ }
244+ // not a text paragraph, create new
242245 }
243- return paragraphs .get (sz - 1 );
246+ Paragraph p = new Paragraph ();
247+ paragraphs .add (p );
248+ return p ;
244249 }
245250
246251 /**
@@ -293,7 +298,7 @@ public SimpleViewOnlyStyledModel addParagraph(Supplier<Region> generator) {
293298 * @return this model instance
294299 */
295300 public SimpleViewOnlyStyledModel addNodeSegment (Supplier <Node > generator ) {
296- Paragraph p = lastParagraph ();
301+ Paragraph p = textParagraph ();
297302 p .addInlineNode (generator );
298303 return this ;
299304 }
@@ -345,7 +350,7 @@ public StyleAttributeMap getStyleAttributeMap(StyleResolver r, TextPos pos) {
345350 * @return this model instance
346351 */
347352 public SimpleViewOnlyStyledModel setParagraphAttributes (StyleAttributeMap a ) {
348- Paragraph p = lastParagraph ();
353+ Paragraph p = textParagraph ();
349354 p .setParagraphAttributes (a );
350355 return this ;
351356 }
@@ -359,6 +364,10 @@ static class Paragraph {
359364 public Paragraph () {
360365 }
361366
367+ public boolean isTextParagraph () {
368+ return true ;
369+ }
370+
362371 public static Paragraph of (Supplier <Region > paragraphGenerator ) {
363372 return new Paragraph () {
364373 @ Override
@@ -376,6 +385,11 @@ public void export(int start, int end, StyledOutput out) throws IOException {
376385 StyledSegment seg = StyledSegment .ofRegion (paragraphGenerator );
377386 out .consume (seg );
378387 }
388+
389+ @ Override
390+ public boolean isTextParagraph () {
391+ return false ;
392+ }
379393 };
380394 }
381395
0 commit comments