@@ -82,53 +82,35 @@ public final class ParserCodecs {
8282 return Mth .X_AXIS ;
8383 }, ParserCodecs ::emptyCodecString );
8484
85- private static final Codec <Range > RANGE_ENTRY = TRIMMED_STRING .xmap (input -> {
86- if (input .contains ("-" )) {
87- final String [] parts = input .split ("-" );
88- if (parts .length == 2 ) {
89- final int min = safeParseInteger (parts [0 ], -1 );
90- final int max = safeParseInteger (parts [1 ], -1 );
91- if (min >= 0 && max >= 0 ) {
92- return new Range (min , max );
85+ private static Codec <Range > getRangeEntryCodec (final boolean allowNegative ) {
86+ final int minValue = allowNegative ? Integer .MIN_VALUE : -1 ;
87+ return TRIMMED_STRING .xmap (input -> {
88+ if (input .contains ("-" )) {
89+ final String [] parts = input .split ("-" );
90+ if (parts .length == 2 ) {
91+ final int min = safeParseInteger (parts [0 ], minValue );
92+ final int max = safeParseInteger (parts [1 ], minValue );
93+ if (!allowNegative ? (min >= 0 && max >= 0 ) : (min != Integer .MIN_VALUE && max != Integer .MIN_VALUE )) {
94+ return new Range (min , max );
95+ }
96+ }
97+ } else {
98+ final String croppedInput = allowNegative ? (input .startsWith ("(" ) && input .endsWith (")" ) ? input .substring (1 , input .length () - 1 ) : input ) : input ;
99+ final int value = safeParseInteger (croppedInput , minValue );
100+ if (!allowNegative ? (value >= 0 ) : (value != Integer .MIN_VALUE )) {
101+ return new Range (value , value );
93102 }
94103 }
95- } else {
96- final int value = safeParseInteger (input , -1 );
97- if (value >= 0 ) {
98- return new Range (value , value );
99- }
100- }
101-
102- return null ;
103- }, ParserCodecs ::emptyCodecString );
104104
105- private static final Codec <Range > NEGATIVE_RANGE_ENTRY = TRIMMED_STRING .xmap (input -> {
106- final String mapped = OPTIFINE_RANGE_SEPARATOR .matcher (input ).replaceAll ("$1=$2" );
107- if (mapped .contains ("=" )) {
108- final String [] parts = mapped .split ("=" );
109- if (parts .length == 2 ) {
110- final int j = safeParseInteger (parts [0 ], Integer .MIN_VALUE );
111- final int k = safeParseInteger (parts [1 ], Integer .MIN_VALUE );
112- if (j != Integer .MIN_VALUE && k != Integer .MIN_VALUE ) {
113- return new Range (Math .min (j , k ), Math .max (j , k ));
114- }
115- }
116- } else {
117- final String strippedBracketsInput = input .startsWith ("(" ) && input .endsWith (")" ) ? input .substring (1 , input .length () - 1 ) : input ;
118- final int i = safeParseInteger (strippedBracketsInput , Integer .MIN_VALUE );
119- if (i != Integer .MIN_VALUE ) {
120- return new Range (i , i );
121- }
122- }
123-
124- return null ;
125- }, ParserCodecs ::emptyCodecString );
105+ return null ;
106+ }, ParserCodecs ::emptyCodecString );
107+ }
126108
127- public static Codec <List <Range >> getRangeEntriesCodec (boolean allowNegative ) {
109+ public static Codec <List <Range >> getRangeEntriesCodec (final boolean allowNegative ) {
128110 return TRIMMED_STRING .xmap (input -> {
129111 final List <Range > entries = new ArrayList <>();
130112 for (String part : input .split ("\\ s*,\\ s*|\\ s+" )) {
131- final Range range = (allowNegative ? NEGATIVE_RANGE_ENTRY : RANGE_ENTRY ).parse (JavaOps .INSTANCE , part ).getOrThrow ();
113+ final Range range = getRangeEntryCodec (allowNegative ).parse (JavaOps .INSTANCE , part ).getOrThrow ();
132114 if (range != null ) {
133115 entries .add (range );
134116 }
0 commit comments