1
1
package com .vladsch .flexmark .util .ast ;
2
2
3
+ import com .vladsch .flexmark .util .misc .BitFieldSet ;
3
4
import com .vladsch .flexmark .util .misc .CharPredicate ;
4
5
import com .vladsch .flexmark .util .sequence .BasedSequence ;
5
6
import com .vladsch .flexmark .util .sequence .Range ;
13
14
public class SpaceInsertingSequenceBuilder implements ISequenceBuilder <SpaceInsertingSequenceBuilder , BasedSequence > {
14
15
@ NotNull
15
16
public static SpaceInsertingSequenceBuilder emptyBuilder (@ NotNull BasedSequence base ) {
16
- return new SpaceInsertingSequenceBuilder (SequenceBuilder .emptyBuilder (base ));
17
+ return new SpaceInsertingSequenceBuilder (SequenceBuilder .emptyBuilder (base ), false );
17
18
}
18
19
19
20
@ NotNull
20
21
public static SpaceInsertingSequenceBuilder emptyBuilder (@ NotNull BasedSequence base , @ NotNull SegmentOptimizer optimizer ) {
21
- return new SpaceInsertingSequenceBuilder (SequenceBuilder .emptyBuilder (base , optimizer ));
22
+ return new SpaceInsertingSequenceBuilder (SequenceBuilder .emptyBuilder (base , optimizer ), false );
22
23
}
23
24
24
25
@ NotNull
25
26
public static SpaceInsertingSequenceBuilder emptyBuilder (@ NotNull BasedSequence base , int options ) {
26
- return new SpaceInsertingSequenceBuilder (SequenceBuilder .emptyBuilder (base , options ));
27
+ return new SpaceInsertingSequenceBuilder (SequenceBuilder .emptyBuilder (base , options ), BitFieldSet . any ( options , TextContainer . F_ADD_SPACES_BETWEEN_NODES ) );
27
28
}
28
29
29
30
@ NotNull
30
31
public static SpaceInsertingSequenceBuilder emptyBuilder (@ NotNull BasedSequence base , int options , @ NotNull SegmentOptimizer optimizer ) {
31
- return new SpaceInsertingSequenceBuilder (SequenceBuilder .emptyBuilder (base , options , optimizer ));
32
+ return new SpaceInsertingSequenceBuilder (SequenceBuilder .emptyBuilder (base , options , optimizer ), BitFieldSet . any ( options , TextContainer . F_ADD_SPACES_BETWEEN_NODES ) );
32
33
}
33
34
34
35
@ NotNull
35
36
public static SpaceInsertingSequenceBuilder emptyBuilder (@ NotNull SequenceBuilder builder ) {
36
- return new SpaceInsertingSequenceBuilder (builder );
37
+ return new SpaceInsertingSequenceBuilder (builder , false );
37
38
}
38
39
39
40
final SequenceBuilder out ;
40
41
Node lastNode ;
41
- boolean addSpaceOnNonBlank ;
42
42
boolean needEol ;
43
+ final boolean addSpacesBetweenNodes ;
44
+ boolean addSpaces ;
43
45
44
- private SpaceInsertingSequenceBuilder (SequenceBuilder out ) {
46
+ private SpaceInsertingSequenceBuilder (SequenceBuilder out , boolean addSpacesBetweenNodes ) {
45
47
this .out = out ;
48
+ this .addSpacesBetweenNodes = addSpacesBetweenNodes ;
46
49
}
47
50
48
51
public SequenceBuilder getOut () {
@@ -54,14 +57,6 @@ public char charAt(int index) {
54
57
return out .charAt (index );
55
58
}
56
59
57
- public boolean isAddSpaceOnNonBlank () {
58
- return addSpaceOnNonBlank ;
59
- }
60
-
61
- public void setAddSpaceOnNonBlank (boolean addSpaceOnNonBlank ) {
62
- this .addSpaceOnNonBlank = addSpaceOnNonBlank ;
63
- }
64
-
65
60
public boolean isNeedEol () {
66
61
return needEol ;
67
62
}
@@ -79,10 +74,10 @@ public void setLastNode(Node lastNode) {
79
74
80
75
if (this .lastNode != null && this .lastNode .getEndOffset () < lastNode .getStartOffset ()) {
81
76
BasedSequence sequence = getBaseSequence ().subSequence (this .lastNode .getEndOffset (), lastNode .getStartOffset ());
82
- this .addSpaceOnNonBlank = sequence .indexOfAny (CharPredicate .SPACE_TAB_EOL ) != -1 ;
83
77
this .needEol = sequence .trim (CharPredicate .SPACE_TAB ).length () > 0 && sequence .trim (CharPredicate .WHITESPACE ).isEmpty ();
84
78
}
85
79
80
+ addSpaces = addSpacesBetweenNodes ;
86
81
this .lastNode = lastNode ;
87
82
}
88
83
@@ -155,14 +150,14 @@ public boolean needEol() {
155
150
156
151
@ Override
157
152
@ NotNull
158
- public SpaceInsertingSequenceBuilder getBuilder () {return new SpaceInsertingSequenceBuilder (out .getBuilder ());}
153
+ public SpaceInsertingSequenceBuilder getBuilder () {return new SpaceInsertingSequenceBuilder (out .getBuilder (), addSpacesBetweenNodes );}
159
154
160
155
@ Override
161
156
@ NotNull
162
157
public SpaceInsertingSequenceBuilder append (@ Nullable CharSequence chars , int startIndex , int endIndex ) {
163
- if (addSpaceOnNonBlank && chars != null && startIndex < endIndex && !CharPredicate .WHITESPACE .test (chars .charAt (startIndex )) && needSpace ()) {
158
+ if (addSpaces && chars != null && startIndex < endIndex && !CharPredicate .WHITESPACE .test (chars .charAt (startIndex )) && needSpace ()) {
164
159
out .append (' ' );
165
- addSpaceOnNonBlank = false ;
160
+ addSpaces = false ;
166
161
}
167
162
out .append (chars , startIndex , endIndex );
168
163
return this ;
@@ -171,9 +166,9 @@ public SpaceInsertingSequenceBuilder append(@Nullable CharSequence chars, int st
171
166
@ Override
172
167
@ NotNull
173
168
public SpaceInsertingSequenceBuilder append (char c ) {
174
- if (addSpaceOnNonBlank && !CharPredicate .WHITESPACE .test (c ) && needSpace ()) {
169
+ if (addSpaces && !CharPredicate .WHITESPACE .test (c ) && needSpace ()) {
175
170
out .append (' ' );
176
- addSpaceOnNonBlank = false ;
171
+ addSpaces = false ;
177
172
}
178
173
out .append (c );
179
174
return this ;
@@ -182,19 +177,19 @@ public SpaceInsertingSequenceBuilder append(char c) {
182
177
@ Override
183
178
@ NotNull
184
179
public SpaceInsertingSequenceBuilder append (char c , int count ) {
185
- if (addSpaceOnNonBlank && !CharPredicate .WHITESPACE .test (c ) && needSpace ()) {
180
+ if (addSpaces && !CharPredicate .WHITESPACE .test (c ) && needSpace ()) {
186
181
out .append (' ' );
187
- addSpaceOnNonBlank = false ;
182
+ addSpaces = false ;
188
183
}
189
184
out .append (c , count );
190
185
return this ;
191
186
}
192
187
193
188
@ NotNull
194
189
public SpaceInsertingSequenceBuilder append (int startOffset , int endOffset ) {
195
- if (addSpaceOnNonBlank && startOffset < endOffset && !CharPredicate .WHITESPACE .test (out .getBaseSequence ().charAt (startOffset )) && needSpace ()) {
190
+ if (addSpaces && startOffset < endOffset && !CharPredicate .WHITESPACE .test (out .getBaseSequence ().charAt (startOffset )) && needSpace ()) {
196
191
out .append (' ' );
197
- addSpaceOnNonBlank = false ;
192
+ addSpaces = false ;
198
193
}
199
194
out .append (startOffset , endOffset );
200
195
return this ;
0 commit comments