docs: private Path2D pathToShape(final List<List<AdobePathSegment>> paths) {
          GeneralPath path = new GeneralPath(Path2D.WIND_EVEN_ODD, paths.size());
          GeneralPath subpath = null;
  
          for (List<AdobePathSegment> points : paths) {
              int length = points.size();
  
              for (int i = 0; i < points.size(); i++) {
                  AdobePathSegment current = points.get(i);
  
                  int step = i == 0 ? 0 : i == length - 1 ? 2 : 1;
  
                  switch (step) {
                      // begin
                      case 0: {
                          subpath = new GeneralPath(Path2D.WIND_EVEN_ODD, length);
                          subpath.moveTo(current.apx, current.apy);
  
                          if (length > 1) {
                              AdobePathSegment next = points.get((i + 1));
                              subpath.curveTo(current.cplx, current.cply, next.cppx, next.cppy, next.apx, next.apy);
                          }
                          else {
                              subpath.lineTo(current.apx, current.apy);
                          }
  
                          break;
                      }
                      // middle
                      case 1: {
                          AdobePathSegment next = points.get((i + 1)); // we are always guaranteed one more.
                          subpath.curveTo(current.cplx, current.cply, next.cppx, next.cppy, next.apx, next.apy);
  
                          break;
                      }
                      // end
                      case 2: {
                          AdobePathSegment first = points.get(0);
  
                          if (first.selector == AdobePathSegment.CLOSED_SUBPATH_BEZIER_LINKED || first.selector == AdobePathSegment.CLOSED_SUBPATH_BEZIER_UNLINKED) {
                              subpath.curveTo(current.cplx, current.cply, first.cppx, first.cppy, first.apx, first.apy);
                              subpath.closePath();
                              path.append(subpath, false);
                          }
                          else {
                              subpath.lineTo(current.apx, current.apy);
                              path.append(subpath, true);
                          }
  
                          break;
                      }
                  }
              }
          }
  
          return path;
      }