List of usage examples for com.google.common.collect RangeSet rangeContaining
Range<C> rangeContaining(C value);
From source file:org.rf.ide.core.testdata.model.table.keywords.names.EmbeddedKeywordNamesSupport.java
private static int startsWith(final String definitionName, final String occurrenceNamePrefix) { if (definitionName.startsWith(occurrenceNamePrefix)) { return occurrenceNamePrefix.length(); } else if (definitionName.indexOf('$') == -1) { return -1; }/*from w w w . j av a 2s. c o m*/ final RangeSet<Integer> varRanges = findEmbeddedArgumentsRanges(definitionName); int i = definitionName.length(); while (i >= 0) { final String shortenedDefinition = definitionName.substring(0, i); final boolean matches = matchesIgnoreCase(shortenedDefinition, occurrenceNamePrefix); if (matches) { return i; } i--; if (varRanges.contains(i)) { final Range<Integer> range = varRanges.rangeContaining(i); i = range.lowerEndpoint(); } } return -1; }
From source file:org.rf.ide.core.testdata.model.table.keywords.names.EmbeddedKeywordNamesSupport.java
private static String substituteVariablesWithRegex(final String definitionName, final boolean ignoreCase) { final StringBuilder wholeRegex = new StringBuilder(); final RangeSet<Integer> varRanges = findEmbeddedArgumentsRanges(definitionName); StringBuilder exactWordPatternRegex = new StringBuilder(); int i = 0;/*from ww w.j a va 2 s . c o m*/ while (i < definitionName.length()) { if (varRanges.contains(i)) { if (exactWordPatternRegex.length() > 0) { final String exactWordPattern = exactWordPatternRegex.toString(); wholeRegex .append(Pattern.quote(ignoreCase ? exactWordPattern.toLowerCase() : exactWordPattern)); exactWordPatternRegex = new StringBuilder(); } final Range<Integer> varRange = varRanges.rangeContaining(i); final String internalRegex = getEmbeddedArgumentRegex(definitionName, varRange); wholeRegex.append(internalRegex); i = varRange.upperEndpoint() + 1; } else { exactWordPatternRegex.append(definitionName.charAt(i)); i++; } } if (exactWordPatternRegex.length() > 0) { final String exactWordPattern = exactWordPatternRegex.toString(); wholeRegex.append(Pattern.quote(ignoreCase ? exactWordPattern.toLowerCase() : exactWordPattern)); } return wholeRegex.toString(); }
From source file:com.jeffreybosboom.lyne.Effector.java
public static Pair<Puzzle, ImmutableMap<Node, Region.Point>> parseImage(BufferedImage image) { ImmutableSet<Region> regions = Region.connectedComponents(image, Colors.LYNE_COLORS); List<Region> nodeRegions = regions.stream().filter(r -> Colors.NODE_COLORS.keySet().contains(r.color())) .collect(Collectors.toList()); //terminal markers and pips are inside node regions, so must be smaller int maxSize = nodeRegions.stream().mapToInt(r -> r.points().size()).max().getAsInt(); List<Region> terminalRegions = regions.stream().filter(r -> r.points().size() < maxSize) .filter(r -> r.color() == Colors.TERMINAL_CENTER).collect(Collectors.toList()); List<Region> pipRegions = regions.stream().filter(r -> r.points().size() < maxSize) .filter(r -> r.color() == Colors.PIP).collect(Collectors.toList()); RangeSet<Integer> rowRanges = TreeRangeSet.create(); nodeRegions.stream().map(Region::centroid).mapToInt(Region.Point::y) .mapToObj(i -> Range.closed(i - TOLERANCE, i + TOLERANCE)).forEachOrdered(rowRanges::add); List<Range<Integer>> rows = rowRanges.asRanges().stream().collect(Collectors.toList()); RangeSet<Integer> colRanges = TreeRangeSet.create(); nodeRegions.stream().map(Region::centroid).mapToInt(Region.Point::x) .mapToObj(i -> Range.closed(i - TOLERANCE, i + TOLERANCE)).forEachOrdered(colRanges::add); List<Range<Integer>> cols = colRanges.asRanges().stream().collect(Collectors.toList()); Node[][] puzzle = new Node[rows.size()][cols.size()]; ImmutableMap.Builder<Node, Region.Point> mapBuilder = ImmutableMap.builder(); for (Region r : nodeRegions) { Region.Point c = r.centroid(); Rectangle b = r.boundingBox(); int row = rows.indexOf(rowRanges.rangeContaining(c.y())); int col = cols.indexOf(colRanges.rangeContaining(c.x())); Node.Kind kind = Colors.NODE_COLORS.get(r.color()); Node node;/*w ww .j ava 2 s . c o m*/ if (kind == Node.Kind.OCTAGON) { int pips = (int) pipRegions.stream().filter(p -> b.contains(p.boundingBox())).count(); node = Node.octagon(row, col, pips); } else { boolean terminal = terminalRegions.stream().anyMatch(t -> b.contains(t.boundingBox())); node = terminal ? Node.terminal(row, col, kind) : Node.nonterminal(row, col, kind); } puzzle[row][col] = node; mapBuilder.put(node, c); } return new Pair<>(new Puzzle(puzzle), mapBuilder.build()); }
From source file:com.google.errorprone.bugpatterns.javadoc.UnescapedEntity.java
private RangeSet<Integer> fixGenerics(RangeSet<Integer> generics, RangeSet<Integer> preTags, RangeSet<Integer> dontEmitCodeFix, VisitorState state) { RangeSet<Integer> emittedFixes = TreeRangeSet.create(); for (Range<Integer> range : generics.asRanges()) { if (emittedFixes.intersects(range) || dontEmitCodeFix.intersects(range)) { continue; }//from w ww . j a va 2 s . co m Range<Integer> regionToWrap = preTags.rangeContaining(range.lowerEndpoint()); if (regionToWrap == null) { regionToWrap = range; } emittedFixes.add(regionToWrap); state.reportMatch( buildDescription(getDiagnosticPosition(range.lowerEndpoint(), state.getPath().getLeaf())) .setMessage( "This looks like a type with type parameters. The < and > characters here will " + "be interpreted as HTML, which can be avoided by wrapping it in a " + "{@code } tag.") .addFix(wrapInCodeTag(regionToWrap)).build()); } return emittedFixes; }