private void navigate(boolean select, final @NotNull LogicalPosition pos) {
    int offset = myEditor.logicalPositionToOffset(pos);
    final SyntaxHighlighter highlighter = myPage.getHighlighter();

    String type;
    HighlightData highlightData = getDataFromOffset(offset);
    if (highlightData != null) {
      // tag-based navigation first
      type = RainbowHighlighter.isRainbowTempKey(highlightData.getHighlightKey())
             ? RainbowHighlighter.RAINBOW_TYPE
             : highlightData.getAdditionalColorKey() == null ? highlightData.getHighlightType()
                                                             : highlightData.getAdditionalColorKey().getExternalName();
    }
    else {
      // if failed, try the highlighter-based navigation
      type = selectItem(myEditor.getHighlighter().createIterator(offset), highlighter);
    }

    setCursor(type != null);

    if (select && type != null) {
      myDispatcher.getMulticaster().selectionInPreviewChanged(type);
    }
  }
private void navigate(boolean select, final @NotNull LogicalPosition pos)