CodePointRanges.java
/*
* Copyright (C) 2021 Google, LLC.
* SPDX-License-Identifier: BSD-3-Clause
*/
package de.jflex.ucd;
import com.google.common.collect.ImmutableList;
import java.util.List;
public class CodePointRanges {
public static ImmutableList<CodepointRange> merge(List<CodepointRange> ranges) {
ranges = sort(ranges);
ImmutableList.Builder<CodepointRange> retval = ImmutableList.builder();
CodepointRange prev = ranges.get(0);
for (int i = 1; i < ranges.size(); i++) {
CodepointRange block = ranges.get(i);
if (prev.end() + 1 == ranges.get(i).start()) {
// merge the two blocks
prev = CodepointRange.create(prev.start(), block.end());
} else {
retval.add(prev);
prev = block;
}
}
// add last
retval.add(prev);
return retval.build();
}
public static ImmutableList<CodepointRange> sort(List<CodepointRange> ranges) {
return ImmutableList.sortedCopyOf(CodepointRange.COMPARATOR, ranges);
}
private CodePointRanges() {}
}