extension Map { static func parse(content: String) -> ParsedMap { let parsers = [ AnyMapParserStrategy(NoteParserStrategy()), AnyMapParserStrategy(VertexParserStrategy()), AnyMapParserStrategy(EdgeParserStrategy()), AnyMapParserStrategy(BlockerParserStrategy()), AnyMapParserStrategy(OpportunityParserStrategy()), AnyMapParserStrategy(StageParserStrategy()), ] let builder = MapBuilder() let lines = content.split(whereSeparator: \.isNewline) for (index, line) in lines.enumerated() { for parser in parsers { if parser.canHandle(line: String(line)) { let (type, object) = parser.handle( index: index, line: String(line), vertices: builder.vertices) builder.addObjectToMap(type: type, object: object) break } } } return builder.build() } }