         return style?.styleString(text: attributedString, range: range, defaultParagraphStyle: defaultParagraphStyle) ?? attributedString
     }
     
+    /**
+        Merges array of styles
+     
+        - parameter withStyles: Array of SKStyle objects
+     
+        - returns: Single SKStyle object, application of which gives the same result as application of styles from given array (in FIFO order)
+    */
     public class func style(withStyles styles: [SKStyle]) -> SKStyle? {
         
         guard let styleKit = sharedInstance else {

        return style?.styleString(text: attributedString, range: range, defaultParagraphStyle: defaultParagraphStyle) ?? attributedString
    }
    
    public class func string(withStyle style: SKStyle?,
                             string: String?,
                             range: NSRange? = nil,


public extension StyleKit {
    
    // MARK: - Initialization -
    
    /**
        Initializes style kit with default configuration
    */
    public class func initStyleKit() {
        initStyleKit(withConfiguration: StyleKitConfiguration.defaultConfiguration())
    }
    
    /**
        Initializes style kit with given configuration
     
        - parameter withConfiguration: Configuration to initialize style kit with
    */
    public class func initStyleKit(withConfiguration configuration: StyleKitConfiguration) {
        sharedInstance = StyleKit(withConfiguration: configuration)
    }
    
    /**
        Flag to check style kit current state
    */
    public class func isInitialized() -> Bool {
        return sharedInstance != nil
    }
    
    /**
        Method to get all available styles

        - returns: All available styles
    */
    public class func allStyles() -> [SKStyle]? {
        guard let styles = sharedInstance?.styles else { return nil }
        
