summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Coleman <doug.coleman@gmail.com>2024-04-16 22:26:12 -0500
committerDoug Coleman <doug.coleman@gmail.com>2024-04-16 22:26:12 -0500
commit8b61f7232647f3e1188acc0894deb55aa405d8b1 (patch)
treef9e0599489bf8c243ec88365f2b1a6c74e2a9977
parent11e31854c6a5a2e4932c3890e6a8358576a78a8f (diff)
scryfall: parse mtga deck format
-rw-r--r--extra/scryfall/scryfall.factor22
1 files changed, 22 insertions, 0 deletions
diff --git a/extra/scryfall/scryfall.factor b/extra/scryfall/scryfall.factor
index e3f2d35bfc..b877532c53 100644
--- a/extra/scryfall/scryfall.factor
+++ b/extra/scryfall/scryfall.factor
@@ -611,6 +611,28 @@ CONSTANT: rarity-to-number H{
: cards-by-name ( seq name -- seq' ) filter-by-name-itext sort-by-release ;
: cards-by-name. ( seq name -- ) cards-by-name [ "name" of ] sort-by normal-cards. ;
+: parse-cards ( strings -- seq )
+ [
+ [ blank? ] trim
+ " " split1
+ [ string>number ]
+ [ standard-cards swap cards-by-name first ] bi* <array>
+ ] map concat ;
+
+: parse-mtga-deck ( string -- deck sideboard )
+ [ blank? ] trim
+ "Deck" ?head drop
+ string-lines
+ "Sideboard" split1
+ [ parse-cards ] bi@ ;
+
+: sort-by-deck-order ( seq -- seq' )
+ [ "Land" any-type? not ] partition
+ [ sort-by-set-colors ] bi@ append ;
+
+: deck. ( seq -- )
+ sort-by-deck-order normal-cards. ;
+
: filter-mtg-cheat-sheet ( seq -- seq' )
[
{