/// <summary>
 /// Get shapes to use for animation.
 /// If user does not select anything: Select shapes which have bullet points
 /// If user selects some shapes: Keep shapes from user selection which have bullet points
 /// If user selects some text: Keep shapes used to store text
 /// </summary>
 private static List<PowerPoint.Shape> GetShapesToUse(PowerPointSlide currentSlide, PowerPoint.ShapeRange selectedShapes)
 {
     return selectedShapes.Cast<PowerPoint.Shape>()
                         .Where(HasText)
                         .ToList();
 }
 /// <summary>
 /// Get shapes to use for animation.
 /// If user does not select anything: Select shapes which have bullet points
 /// If user selects some shapes: Keep shapes from user selection which have bullet points
 /// If user selects some text: Keep shapes used to store text
 /// </summary>
 private static List<PowerPoint.Shape> GetShapesToUse(PowerPointSlide currentSlide, PowerPoint.ShapeRange shapes)
 {
     var shapesToUse = shapes.Cast<PowerPoint.Shape>()
                             .Where(sh => !sh.Name.Contains("PPTLabsHighlightBackgroundShape")
                                             && HasText(sh))
                             .ToList();
     shapesToUse.ForEach(currentSlide.DeleteShapeAnimations);
     return shapesToUse;
 }