      - Parameter line: Current text line
      - Parameter glyph: Current glyph
      */
-    func enumerateGlyphs(_ callback: @escaping(_ line: TextPathLine, _ glyph: TextPathGlyph) -> ()) {
+    public func enumerateGlyphs(_ callback: @escaping(_ line: TextPathLine, _ glyph: TextPathGlyph) -> ()) {
         for line in lines {
             line.enumerateGlyphs(callback)
         }

        }
        
        let tp = TextPath(text: self, path: withPath ? finalPath : nil)
        tp.frames.append(contentsOf: frames)
        return tp
    }

/**
 Text path represents a CGPath representation of text frame, glyphs and typographic properties
 */
public class TextPath {
    
    /// Attributed text used to generate text path
    public fileprivate(set) var attributedString: NSAttributedString
    
    /// Text path composed for input text
    public fileprivate(set) var composedPath: CGPath?
    
    /// Composed text path bounding box
    public fileprivate(set) var composedBounds: CGRect
    
    /// text frames
    public fileprivate(set) var frames = [TextPathFrame]()
    
    init(text: NSAttributedString, path: CGPath? = nil) {
        self.attributedString = text
        self.composedPath = path
        self.composedBounds = path?.boundingBoxOfPath ?? CGRect.zero
    }
}

public extension NSAttributedString {
    
    /**
        Creates a text path and a collection of text lines and 
