docs: function (x, y, rx, ry, startAngle, endAngle) {
      return new BVG('path', x.constructor.name === 'Object' ? x : {
        x: x,
        y: y,
        rx: rx,
        ry: ry,
        startAngle: startAngle,
        endAngle: endAngle
      }, function (tag, data) {
        var p1 = getPointOnEllipse(data.x, data.y, data.rx, data.ry, data.startAngle);
        var p2 = getPointOnEllipse(data.x, data.y, data.rx, data.ry, data.endAngle);
        var largeArc = (data.endAngle - data.startAngle) > Math.PI ? 1 : 0;
        var sweepArc = data.endAngle > data.startAngle ? 1 : 0;
        var d = [
          ['M', p1.x, p1.y],
          ['A', data.rx, data.ry, 0, largeArc, sweepArc, p2.x, p2.y]
        ];
        tag.setAttribute('d', d.map(function (x) {
          return x.join(' ');
        }).join(' '));
  
        function getPointOnEllipse(x, y, rx, ry, angle) {
          return {
            x: rx * Math.cos(angle) + x,
            y: ry * Math.sin(angle) + y
          };
        }
      });
    }