+ " " split1
+ [ string>number ]
+ [
+ remove-set-and-num
+ standard-cards swap cards-by-name first
+ ] bi* <array> ;
+
+: parse-standard-cards ( strings -- seq )
+ [ parse-mtga-card-line ] map concat ;
+
+TUPLE: mtga-deck about deck sideboard section ;
+
+: <mtga-deck> ( -- mtga-deck )
+ mtga-deck new "Deck" >>section ;
+
+ERROR: unknown-mtga-deck-section section ;
+: parse-mtga-standard-deck ( string -- mtga-deck )
+ string-lines [ [ blank? ] trim ] map harvest
+ { "About" "Deck" "Sideboard" } split*
+ [ <mtga-deck> ] dip
+ [
+ dup { "About" "Deck" "Sideboard" } intersects? [
+ first >>section
+ ] [
+ over section>> {
+ { "About" [ >>about ] }
+ { "Deck" [ parse-standard-cards >>deck ] }
+ { "Sideboard" [ parse-standard-cards >>sideboard ] }
+ [ unknown-mtga-deck-section ]
+ } case
+ ] if
+ ] each ;