diff options
Diffstat (limited to 'Map/Data/Models/Map+parse.swift')
| -rw-r--r-- | Map/Data/Models/Map+parse.swift | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/Map/Data/Models/Map+parse.swift b/Map/Data/Models/Map+parse.swift new file mode 100644 index 0000000..5181daf --- /dev/null +++ b/Map/Data/Models/Map+parse.swift @@ -0,0 +1,29 @@ +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() + } +} |