 
 extension String {
 
-    func findParentheses(_ start: String.Index) throws -> (string: String, index: String.Index) {
-        return try findBlock(start, startSign: "(", endSign: ")")
-    }
-
-    func findSquare(_ start: String.Index) throws -> (string: String, index: String.Index) {
-        return try findBlock(start, startSign: "[", endSign: "]")
-    }
-
-    func findBlock(_ start: String.Index, startSign: String, endSign: Character) throws -> (string: String, index: String.Index) {
+    func findParentheses(_ start: String.Index, needFormat: Bool = true) throws -> (string: String, index: String.Index) {
+        return try findBlock(start, startSign: "(", endSign: ")", needFormat: needFormat)
+    }
+
+    func findSquare(_ start: String.Index, needFormat: Bool = true) throws -> (string: String, index: String.Index) {
+        return try findBlock(start, startSign: "[", endSign: "]", needFormat: needFormat)
+    }
+
+    func findBlock(_ start: String.Index, startSign: String, endSign: Character, needFormat: Bool) throws -> (string: String, index: String.Index) {
         var index = characters.index(after: start)
         var result = startSign
         while index < endIndex {

            let list: [Character] = ["?", "!", "."]
            if next.isAZ() || list.contains(next) { // TODO: check complex case
                result.append(next)
            } else if next == "[" {
                let block = try findSquare(index)
                index = block.index
                result += block.string
                continue
            } else if next == "(" {
                let block = try findParentheses(index)
                index = block.index
                result += block.string
                continue
            } else if next == "\"" {
                let quote = try findQuote(index)
                index = quote.index
                result += quote.string
                continue
            } else {
                if result.isEmpty {
                    return nil
                }
                return (result, index)
            }
            index = characters.index(after: index)
        }
        return nil
    }

                result += quote.string
                continue
            } else if next == "(" {
                let block = try findParentheses(index, needFormat: false)
                index = block.index
                result += block.string
                continue
