more cleanup and organizing of TODOs
This commit is contained in:
		
							parent
							
								
									72b8052f70
								
							
						
					
					
						commit
						904e4120dd
					
				
							
								
								
									
										1
									
								
								PDFGen
								
								
								
								
							
							
								
								
								
								
								
								
							
						
						
									
										1
									
								
								PDFGen
								
								
								
								
							|  | @ -1 +0,0 @@ | ||||||
| Subproject commit 53ea781d446d51ce70492a796c2523286490633f |  | ||||||
							
								
								
									
										2129
									
								
								output.pdf
								
								
								
								
							
							
						
						
									
										2129
									
								
								output.pdf
								
								
								
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										12
									
								
								pandoc.old
								
								
								
								
							
							
						
						
									
										12
									
								
								pandoc.old
								
								
								
								
							|  | @ -1,12 +0,0 @@ | ||||||
| const PandocOptions = &[_][]const u8{ "pandoc", "out.md", "-o", "out.pdf", "--pdf-engine", "xelatex", "-V", "mainfont:Liberation Mono", "-V", "geometry:margin=0cm" }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     try allPrinted.appendSlice(markdownFormatString); |  | ||||||
|         var pandocProcess = std.process.Child.init(PandocOptions, allocator); |  | ||||||
|         _ = try pandocProcess.spawnAndWait(); |  | ||||||
| 
 |  | ||||||
|         try allPrinted.appendSlice(markdownFormatString); |  | ||||||
| 
 |  | ||||||
|         try cwd.writeFile(.{ .sub_path = "out.md", .data = allPrinted.items }); |  | ||||||
| 
 |  | ||||||
| const markdownFormatString = "```" ++ (" " ** (pageWidth - 4)) ++ "\n"; |  | ||||||
							
								
								
									
										490
									
								
								src/out.md
								
								
								
								
							
							
						
						
									
										490
									
								
								src/out.md
								
								
								
								
							|  | @ -1,490 +0,0 @@ | ||||||
| ```                                                                                           |  | ||||||
| |Prismatic Vista (Land) >>     |Mox Jet {0} (Artifact) >>     |Tenth District Hero {1}{W}     |  | ||||||
| |{T}, Pay 1 life, Sacrifice    |{T}: Add {B}.                 |(Creature  Human) >> {1}{W},   |  | ||||||
| |Prismatic Vista: Search your  |                              |Collect evidence 2: Tenth      |  | ||||||
| |library for a basic land      |                              |District Hero becomes a Human  |  | ||||||
| |card, put it onto the         |                              |Detective with base power and  |  | ||||||
| |battlefield, then shuffle.    |                              |toughness 4/4 and gains        |  | ||||||
| |                              |                              |vigilance. {2}{W}, Collect     |  | ||||||
| |                              |                              |evidence 4: If Tenth District  |  | ||||||
| |                              |                              |Hero is a Detective, it        |  | ||||||
| |                              |                              |becomes a legendary creature   |  | ||||||
| |                              |                              |named Mileva, the Stalwart,    |  | ||||||
| |                              |                              |it has base power and          |  | ||||||
| |                              |                              |toughness 5/5, and it gains    |  | ||||||
| |                              |                              |"Other creatures you control   |  | ||||||
| |                              |                              |have indestructible." (2/3)    |  | ||||||
| |                              |                              |                               |  | ||||||
| |Wasteland (Land) >> {T}: Add  |Misty Rainforest (Land) >>    |Green Sun's Zenith {X}{G}      |  | ||||||
| |{C}. {T}, Sacrifice           |{T}, Pay 1 life, Sacrifice    |(Sorcery) >> Search your       |  | ||||||
| |Wasteland: Destroy target     |Misty Rainforest: Search your |library for a green creature   |  | ||||||
| |nonbasic land.                |library for a Forest or       |card with mana value X or      |  | ||||||
| |                              |Island card, put it onto the  |less, put it onto the          |  | ||||||
| |                              |battlefield, then shuffle.    |battlefield, then shuffle.     |  | ||||||
| |                              |                              |Shuffle Green Sun's Zenith     |  | ||||||
| |                              |                              |into its owner's library.      |  | ||||||
| |                              |                              |                               |  | ||||||
| |Grist, the Hunger Tide        |Wrenn and Six {R}{G}          |Thalia, Heretic Cathar {2}{W}  |  | ||||||
| |{1}{B}{G} (Legendary          |(Legendary Planeswalker       |(Legendary Creature  Human     |  | ||||||
| |Planeswalker  Grist) >> As    |Wrenn) >> +1: Return up to    |Soldier) >> First strike       |  | ||||||
| |long as Grist, the Hunger     |one target land card from     |Creatures and nonbasic lands   |  | ||||||
| |Tide isn't on the             |your graveyard to your hand.  |your opponents control enter   |  | ||||||
| |battlefield, it's a 1/1       |1: Wrenn and Six deals 1      |the battlefield tapped. (3/2)  |  | ||||||
| |Insect creature in addition   |damage to any target. 7: You  |                               |  | ||||||
| |to its other types. +1:       |get an emblem with "Instant   |                               |  | ||||||
| |Create a 1/1 black and green  |and sorcery cards in your     |                               |  | ||||||
| |Insect creature token, then   |graveyard have retrace." (You |                               |  | ||||||
| |mill a card. If an Insect     |may cast instant and sorcery  |                               |  | ||||||
| |card was milled this way, put |cards from your graveyard by  |                               |  | ||||||
| |a loyalty counter on Grist    |discarding a land card in     |                               |  | ||||||
| |and repeat this process. 2:   |addition to paying their      |                               |  | ||||||
| |You may sacrifice a creature. |other costs.)                 |                               |  | ||||||
| |When you do, destroy target   |                              |                               |  | ||||||
| |creature or planeswalker. 5:  |                              |                               |  | ||||||
| |Each opponent loses life      |                              |                               |  | ||||||
| |equal to the number of        |                              |                               |  | ||||||
| |creature cards in your        |                              |                               |  | ||||||
| |graveyard.                    |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Badlands (Land  Swamp         |Stomping Ground (Land         |Fatal Push {B} (Instant) >>    |  | ||||||
| |Mountain) >> ({T}: Add {B} or |Mountain Forest) >> ({T}: Add |Destroy target creature if it  |  | ||||||
| |{R}.)                         |{R} or {G}.) As Stomping      |has mana value 2 or less.      |  | ||||||
| |                              |Ground enters the             |Revolt  Destroy that creature  |  | ||||||
| |                              |battlefield, you may pay 2    |if it has mana value 4 or      |  | ||||||
| |                              |life. If you don't, it enters |less instead if a permanent    |  | ||||||
| |                              |the battlefield tapped.       |you controlled left the        |  | ||||||
| |                              |                              |battlefield this turn.         |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Inti, Seneschal of the Sun    |Mental Misstep {U/P}          |Abrupt Decay {B}{G} (Instant)  |  | ||||||
| |{1}{R} (Legendary Creature    |(Instant) >> ({U/P} can be    |>> This spell can't be         |  | ||||||
| |Human Knight) >> Whenever you |paid with either {U} or 2     |countered. Destroy target      |  | ||||||
| |attack, you may discard a     |life.) Counter target spell   |nonland permanent with mana    |  | ||||||
| |card. When you do, put a      |with mana value 1.            |value 3 or less.               |  | ||||||
| |+1/+1 counter on target       |                              |                               |  | ||||||
| |attacking creature. It gains  |                              |                               |  | ||||||
| |trample until end of turn.    |                              |                               |  | ||||||
| |Whenever you discard one or   |                              |                               |  | ||||||
| |more cards, exile the top     |                              |                               |  | ||||||
| |card of your library. You may |                              |                               |  | ||||||
| |play that card until your     |                              |                               |  | ||||||
| |next end step. (2/2)          |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Gitaxian Probe {U/P}          |Opposition Agent {2}{B}       |Scavenging Ooze {1}{G}         |  | ||||||
| |(Sorcery) >> ({U/P} can be    |(Creature  Human Rogue) >>    |(Creature  Ooze) >> {G}:       |  | ||||||
| |paid with either {U} or 2     |Flash You control your        |Exile target card from a       |  | ||||||
| |life.) Look at target         |opponents while they're       |graveyard. If it was a         |  | ||||||
| |player's hand. Draw a card.   |searching their libraries.    |creature card, put a +1/+1     |  | ||||||
| |                              |While an opponent is          |counter on Scavenging Ooze     |  | ||||||
| |                              |searching their library, they |and you gain 1 life. (2/2)     |  | ||||||
| |                              |exile each card they find.    |                               |  | ||||||
| |                              |You may play those cards for  |                               |  | ||||||
| |                              |as long as they remain        |                               |  | ||||||
| |                              |exiled, and you may spend     |                               |  | ||||||
| |                              |mana as though it were mana   |                               |  | ||||||
| |                              |of any color to cast them.    |                               |  | ||||||
| |                              |(3/2)                         |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Dark Confidant {1}{B}         |Troll of Khazad-dm {5}{B}     |Taiga (Land  Mountain Forest)  |  | ||||||
| |(Creature  Human Wizard) >>   |(Creature  Troll) >> Troll of |>> ({T}: Add {R} or {G}.)      |  | ||||||
| |At the beginning of your      |Khazad-dm can't be blocked    |                               |  | ||||||
| |upkeep, reveal the top card   |except by three or more       |                               |  | ||||||
| |of your library and put that  |creatures. Swampcycling {1}   |                               |  | ||||||
| |card into your hand. You lose |({1}, Discard this card:      |                               |  | ||||||
| |life equal to its mana value. |Search your library for a     |                               |  | ||||||
| |(2/1)                         |Swamp card, reveal it, put it |                               |  | ||||||
| |                              |into your hand, then          |                               |  | ||||||
| |                              |shuffle.) (6/5)               |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Deathrite Shaman {B/G}        |Windswept Heath (Land) >>     |Prismatic Ending {X}{W}        |  | ||||||
| |(Creature  Elf Shaman) >>     |{T}, Pay 1 life, Sacrifice    |(Sorcery) >> Converge  Exile   |  | ||||||
| |{T}: Exile target land card   |Windswept Heath: Search your  |target nonland permanent if    |  | ||||||
| |from a graveyard. Add one     |library for a Forest or       |its mana value is less than    |  | ||||||
| |mana of any color. {B}, {T}:  |Plains card, put it onto the  |or equal to the number of      |  | ||||||
| |Exile target instant or       |battlefield, then shuffle.    |colors of mana spent to cast   |  | ||||||
| |sorcery card from a           |                              |this spell.                    |  | ||||||
| |graveyard. Each opponent      |                              |                               |  | ||||||
| |loses 2 life. {G}, {T}: Exile |                              |                               |  | ||||||
| |target creature card from a   |                              |                               |  | ||||||
| |graveyard. You gain 2 life.   |                              |                               |  | ||||||
| |(1/2)                         |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Undermountain Adventurer      |Lotus Petal {0} (Artifact) >> |Duress {B} (Sorcery) >>        |  | ||||||
| |{3}{G} (Creature  Giant       |{T}, Sacrifice Lotus Petal:   |Target opponent reveals their  |  | ||||||
| |Warrior) >> Vigilance When    |Add one mana of any color.    |hand. You choose a             |  | ||||||
| |Undermountain Adventurer      |                              |noncreature, nonland card      |  | ||||||
| |enters the battlefield, you   |                              |from it. That player discards  |  | ||||||
| |take the initiative. {T}: Add |                              |that card.                     |  | ||||||
| |{G}{G}. If you've completed a |                              |                               |  | ||||||
| |dungeon, add six {G} instead. |                              |                               |  | ||||||
| |(3/4)                         |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Forth Eorlingas! {X}{R}{W}    |Mox Emerald {0} (Artifact) >> |Inquisition of Kozilek {B}     |  | ||||||
| |(Sorcery) >> Create X 2/2 red |{T}: Add {G}.                 |(Sorcery) >> Target player     |  | ||||||
| |Human Knight creature tokens  |                              |reveals their hand. You        |  | ||||||
| |with trample and haste.       |                              |choose a nonland card from it  |  | ||||||
| |Whenever one or more          |                              |with mana value 3 or less.     |  | ||||||
| |creatures you control deal    |                              |That player discards that      |  | ||||||
| |combat damage to one or more  |                              |card.                          |  | ||||||
| |players this turn, you become |                              |                               |  | ||||||
| |the monarch.                  |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Minsc & Boo, Timeless Heroes  |Tarmogoyf (Token Creature     |Sungold Sentinel {1}{W}        |  | ||||||
| |{2}{R}{G} (Legendary          |Lhurgoyf) >> Tarmogoyf's      |(Creature  Human Soldier) >>   |  | ||||||
| |Planeswalker  Minsc) >> When  |power is equal to the number  |Whenever Sungold Sentinel      |  | ||||||
| |Minsc & Boo, Timeless Heroes  |of card types among cards in  |enters the battlefield or      |  | ||||||
| |enters the battlefield and at |all graveyards and its        |attacks, exile up to one       |  | ||||||
| |the beginning of your upkeep, |toughness is equal to that    |target card from a graveyard.  |  | ||||||
| |you may create Boo, a         |number plus 1. (This token's  |Coven  {1}{W}: Choose a        |  | ||||||
| |legendary 1/1 red Hamster     |mana cost is {1}{G}.) (*/1+*) |color. Sungold Sentinel gains  |  | ||||||
| |creature token with trample   |                              |hexproof from that color       |  | ||||||
| |and haste. +1: Put three      |                              |until end of turn and can't    |  | ||||||
| |+1/+1 counters on up to one   |                              |be blocked by creatures of     |  | ||||||
| |target creature with trample  |                              |that color this turn.          |  | ||||||
| |or haste. 2: Sacrifice a      |                              |Activate only if you control   |  | ||||||
| |creature. When you do, Minsc  |                              |three or more creatures with   |  | ||||||
| |& Boo, Timeless Heroes deals  |                              |different powers. (3/2)        |  | ||||||
| |X damage to any target, where |                              |                               |  | ||||||
| |X is that creature's power.   |                              |                               |  | ||||||
| |If the sacrificed creature    |                              |                               |  | ||||||
| |was a Hamster, draw X cards.  |                              |                               |  | ||||||
| |Minsc & Boo, Timeless Heroes  |                              |                               |  | ||||||
| |can be your commander.        |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Simian Spirit Guide {2}{R}    |Eladamri's Call {G}{W}        |Unearth {B} (Sorcery) >>       |  | ||||||
| |(Creature  Ape Spirit) >>     |(Instant) >> Search your      |Return target creature card    |  | ||||||
| |Exile Simian Spirit Guide     |library for a creature card,  |with mana value 3 or less      |  | ||||||
| |from your hand: Add {R}.      |reveal that card, put it into |from your graveyard to the     |  | ||||||
| |(2/2)                         |your hand, then shuffle.      |battlefield. Cycling {2}       |  | ||||||
| |                              |                              |({2}, Discard this card: Draw  |  | ||||||
| |                              |                              |a card.)                       |  | ||||||
| |                              |                              |                               |  | ||||||
| |Tidehollow Sculler {W}{B}     |White Plume Adventurer {2}{W} |Swamp (Basic Land  Swamp) >>   |  | ||||||
| |(Artifact Creature  Zombie)   |(Creature  Orc Cleric) >>     |({T}: Add {B}.)                |  | ||||||
| |>> When Tidehollow Sculler    |When White Plume Adventurer   |                               |  | ||||||
| |enters the battlefield,       |enters the battlefield, you   |                               |  | ||||||
| |target opponent reveals their |take the initiative. At the   |                               |  | ||||||
| |hand and you choose a nonland |beginning of each opponent's  |                               |  | ||||||
| |card from it. Exile that      |upkeep, untap a creature you  |                               |  | ||||||
| |card. When Tidehollow Sculler |control. If you've completed  |                               |  | ||||||
| |leaves the battlefield,       |a dungeon, untap all          |                               |  | ||||||
| |return the exiled card to its |creatures you control         |                               |  | ||||||
| |owner's hand. (2/2)           |instead. (3/3)                |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Mosswood Dreadknight // Dread |Karakas (Legendary Land) >>   |Legolas's Quick Reflexes {G}   |  | ||||||
| |Whispers {1}{G} // {1}{B}     |{T}: Add {W}. {T}: Return     |(Instant) >> Split second (As  |  | ||||||
| |(Creature  Human Knight //    |target legendary creature to  |long as this spell is on the   |  | ||||||
| |Sorcery  Adventure) >>  (3/2) |its owner's hand.             |stack, players can't cast      |  | ||||||
| |Trample When Mosswood         |                              |spells or activate abilities   |  | ||||||
| |Dreadknight dies, you may     |                              |that aren't mana abilities.)   |  | ||||||
| |cast it from your graveyard   |                              |Untap target creature. Until   |  | ||||||
| |as an Adventure until the end |                              |end of turn, it gains          |  | ||||||
| |of your next turn. (3/2)      |                              |hexproof, reach, and           |  | ||||||
| |                        //    |                              |"Whenever this creature        |  | ||||||
| |You draw a card and you lose  |                              |becomes tapped, it deals       |  | ||||||
| |1 life. (Then exile this      |                              |damage equal to its power to   |  | ||||||
| |card. You may cast the        |                              |up to one target creature."    |  | ||||||
| |creature later from exile.)   |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Seasoned Dungeoneer {3}{W}    |Mother of Runes {W} (Creature |Wooded Foothills (Land) >>     |  | ||||||
| |(Creature  Human Warrior) >>  | Human Cleric) >> {T}: Target |{T}, Pay 1 life, Sacrifice     |  | ||||||
| |When Seasoned Dungeoneer      |creature you control gains    |Wooded Foothills: Search your  |  | ||||||
| |enters the battlefield, you   |protection from the color of  |library for a Mountain or      |  | ||||||
| |take the initiative. Whenever |your choice until end of      |Forest card, put it onto the   |  | ||||||
| |you attack, target attacking  |turn. (1/1)                   |battlefield, then shuffle.     |  | ||||||
| |Cleric, Rogue, Warrior, or    |                              |                               |  | ||||||
| |Wizard gains protection from  |                              |                               |  | ||||||
| |creatures until end of turn.  |                              |                               |  | ||||||
| |It explores. (Reveal the top  |                              |                               |  | ||||||
| |card of your library. Put     |                              |                               |  | ||||||
| |that card into your hand if   |                              |                               |  | ||||||
| |it's a land. Otherwise, put a |                              |                               |  | ||||||
| |+1/+1 counter on the          |                              |                               |  | ||||||
| |creature, then put the card   |                              |                               |  | ||||||
| |back or put it into your      |                              |                               |  | ||||||
| |graveyard.) (3/4)             |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Verdant Catacombs (Land) >>   |Hexdrinker {G} (Creature      |Elvish Spirit Guide {2}{G}     |  | ||||||
| |{T}, Pay 1 life, Sacrifice    |Snake) >> Level up {1} ({1}:  |(Creature  Elf Spirit) >>      |  | ||||||
| |Verdant Catacombs: Search     |Put a level counter on this.  |Exile Elvish Spirit Guide      |  | ||||||
| |your library for a Swamp or   |Level up only as a sorcery.)  |from your hand: Add {G}.       |  | ||||||
| |Forest card, put it onto the  |LEVEL 3-7 4/4 Protection from |(2/2)                          |  | ||||||
| |battlefield, then shuffle.    |instants LEVEL 8+ 6/6         |                               |  | ||||||
| |                              |Protection from everything    |                               |  | ||||||
| |                              |(2/1)                         |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Savannah (Land  Forest        |Godless Shrine (Land  Plains  |Kellan, Daring Traveler //     |  | ||||||
| |Plains) >> ({T}: Add {G} or   |Swamp) >> ({T}: Add {W} or    |Journey On {1}{W} // {G}       |  | ||||||
| |{W}.)                         |{B}.) As Godless Shrine       |(Legendary Creature  Human     |  | ||||||
| |                              |enters the battlefield, you   |Faerie Scout // Sorcery        |  | ||||||
| |                              |may pay 2 life. If you don't, |Adventure) >>  (2/3) Whenever  |  | ||||||
| |                              |it enters the battlefield     |Kellan, Daring Traveler        |  | ||||||
| |                              |tapped.                       |attacks, reveal the top card   |  | ||||||
| |                              |                              |of your library. If it's a     |  | ||||||
| |                              |                              |creature card with mana value  |  | ||||||
| |                              |                              |3 or less, put it into your    |  | ||||||
| |                              |                              |hand. Otherwise, you may put   |  | ||||||
| |                              |                              |it into your graveyard. (2/3)  |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |// Create X Map tokens, where  |  | ||||||
| |                              |                              |X is one plus the number of    |  | ||||||
| |                              |                              |opponents who control an       |  | ||||||
| |                              |                              |artifact. (Then exile this     |  | ||||||
| |                              |                              |card. You may cast the         |  | ||||||
| |                              |                              |creature later from exile.)    |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Witherbloom Command {B}{G}    |Mox Pearl {0} (Artifact) >>   |Underground Mortuary (Land     |  | ||||||
| |(Sorcery) >> Choose two       |{T}: Add {W}.                 |Swamp Forest) >> ({T}: Add     |  | ||||||
| |Target player mills three     |                              |{B} or {G}.) Underground       |  | ||||||
| |cards, then you return a land |                              |Mortuary enters the            |  | ||||||
| |card from your graveyard to   |                              |battlefield tapped. When       |  | ||||||
| |your hand.  Destroy target    |                              |Underground Mortuary enters    |  | ||||||
| |noncreature, nonland          |                              |the battlefield, surveil 1.    |  | ||||||
| |permanent with mana value 2   |                              |(Look at the top card of your  |  | ||||||
| |or less.  Target creature     |                              |library. You may put it into   |  | ||||||
| |gets -3/-1 until end of turn. |                              |your graveyard.)               |  | ||||||
| | Target opponent loses 2 life |                              |                               |  | ||||||
| |and you gain 2 life.          |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Shadowspear {1} (Legendary    |Razorverge Thicket (Land) >>  |Overgrown Tomb (Land  Swamp    |  | ||||||
| |Artifact  Equipment) >>       |Razorverge Thicket enters the |Forest) >> ({T}: Add {B} or    |  | ||||||
| |Equipped creature gets +1/+1  |battlefield tapped unless you |{G}.) As Overgrown Tomb        |  | ||||||
| |and has trample and lifelink. |control two or fewer other    |enters the battlefield, you    |  | ||||||
| |{1}: Permanents your          |lands. {T}: Add {G} or {W}.   |may pay 2 life. If you don't,  |  | ||||||
| |opponents control lose        |                              |it enters the battlefield      |  | ||||||
| |hexproof and indestructible   |                              |tapped.                        |  | ||||||
| |until end of turn. Equip {2}  |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Noble Hierarch {G} (Creature  |Thalia, Guardian of Thraben   |Reanimate {B} (Sorcery) >>     |  | ||||||
| |Human Druid) >> Exalted       |{1}{W} (Legendary Creature    |Put target creature card from  |  | ||||||
| |(Whenever a creature you      |Human Soldier) >> First       |a graveyard onto the           |  | ||||||
| |control attacks alone, that   |strike Noncreature spells     |battlefield under your         |  | ||||||
| |creature gets +1/+1 until end |cost {1} more to cast. (2/1)  |control. You lose life equal   |  | ||||||
| |of turn.) {T}: Add {G}, {W},  |                              |to its mana value.             |  | ||||||
| |or {U}. (0/1)                 |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Laelia, the Blade Reforged    |Sentinel of the Nameless City |Anointed Peacekeeper {2}{W}    |  | ||||||
| |{2}{R} (Legendary Creature    |{2}{G} (Creature  Merfolk     |(Creature  Human Cleric) >>    |  | ||||||
| |Spirit Warrior) >> Haste      |Warrior Scout) >> Vigilance   |Vigilance As Anointed          |  | ||||||
| |Whenever Laelia, the Blade    |Whenever Sentinel of the      |Peacekeeper enters the         |  | ||||||
| |Reforged attacks, exile the   |Nameless City enters the      |battlefield, look at an        |  | ||||||
| |top card of your library. You |battlefield or attacks,       |opponent's hand, then choose   |  | ||||||
| |may play that card this turn. |create a Map token. (It's an  |any card name. Spells your     |  | ||||||
| |Whenever one or more cards    |artifact with "{1}, {T},      |opponents cast with the        |  | ||||||
| |are put into exile from your  |Sacrifice this artifact:      |chosen name cost {2} more to   |  | ||||||
| |library and/or your           |Target creature you control   |cast. Activated abilities of   |  | ||||||
| |graveyard, put a +1/+1        |explores. Activate only as a  |sources with the chosen name   |  | ||||||
| |counter on Laelia. (2/2)      |sorcery.") (3/4)              |cost {2} more to activate      |  | ||||||
| |                              |                              |unless they're mana            |  | ||||||
| |                              |                              |abilities. (3/3)               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Swords to Plowshares {W}      |Forest (Basic Land  Forest)   |Leyline Binding {5}{W}         |  | ||||||
| |(Instant) >> Exile target     |>> ({T}: Add {G}.)            |(Enchantment) >> Flash Domain  |  | ||||||
| |creature. Its controller      |                              | This spell costs {1} less to  |  | ||||||
| |gains life equal to its       |                              |cast for each basic land type  |  | ||||||
| |power.                        |                              |among lands you control. When  |  | ||||||
| |                              |                              |Leyline Binding enters the     |  | ||||||
| |                              |                              |battlefield, exile target      |  | ||||||
| |                              |                              |nonland permanent an opponent  |  | ||||||
| |                              |                              |controls until Leyline         |  | ||||||
| |                              |                              |Binding leaves the             |  | ||||||
| |                              |                              |battlefield.                   |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Questing Beast {2}{G}{G}      |Generous Ent {5}{G} (Creature |Bayou (Land  Swamp Forest) >>  |  | ||||||
| |(Legendary Creature  Beast)   | Treefolk) >> Reach When      |({T}: Add {B} or {G}.)         |  | ||||||
| |>> Vigilance, deathtouch,     |Generous Ent enters the       |                               |  | ||||||
| |haste Questing Beast can't be |battlefield, create a Food    |                               |  | ||||||
| |blocked by creatures with     |token. (It's an artifact with |                               |  | ||||||
| |power 2 or less. Combat       |"{2}, {T}, Sacrifice this     |                               |  | ||||||
| |damage that would be dealt by |artifact: You gain 3 life.")  |                               |  | ||||||
| |creatures you control can't   |Forestcycling {1} ({1},       |                               |  | ||||||
| |be prevented. Whenever        |Discard this card: Search     |                               |  | ||||||
| |Questing Beast deals combat   |your library for a Forest     |                               |  | ||||||
| |damage to an opponent, it     |card, reveal it, put it into  |                               |  | ||||||
| |deals that much damage to     |your hand, then shuffle.)     |                               |  | ||||||
| |target planeswalker that      |(5/7)                         |                               |  | ||||||
| |player controls. (4/4)        |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Plains (Basic Land  Plains)   |Boseiju, Who Endures          |Arid Mesa (Land) >> {T}, Pay   |  | ||||||
| |>> ({T}: Add {W}.)            |(Legendary Land) >> {T}: Add  |1 life, Sacrifice Arid Mesa:   |  | ||||||
| |                              |{G}. Channel  {1}{G}, Discard |Search your library for a      |  | ||||||
| |                              |Boseiju, Who Endures: Destroy |Mountain or Plains card, put   |  | ||||||
| |                              |target artifact, enchantment, |it onto the battlefield, then  |  | ||||||
| |                              |or nonbasic land an opponent  |shuffle.                       |  | ||||||
| |                              |controls. That player may     |                               |  | ||||||
| |                              |search their library for a    |                               |  | ||||||
| |                              |land card with a basic land   |                               |  | ||||||
| |                              |type, put it onto the         |                               |  | ||||||
| |                              |battlefield, then shuffle.    |                               |  | ||||||
| |                              |This ability costs {1} less   |                               |  | ||||||
| |                              |to activate for each          |                               |  | ||||||
| |                              |legendary creature you        |                               |  | ||||||
| |                              |control.                      |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Plateau (Land  Mountain       |Endurance {1}{G}{G} (Creature |Scrubland (Land  Plains        |  | ||||||
| |Plains) >> ({T}: Add {R} or   | Elemental Incarnation) >>    |Swamp) >> ({T}: Add {W} or     |  | ||||||
| |{W}.)                         |Flash Reach When Endurance    |{B}.)                          |  | ||||||
| |                              |enters the battlefield, up to |                               |  | ||||||
| |                              |one target player puts all    |                               |  | ||||||
| |                              |the cards from their          |                               |  | ||||||
| |                              |graveyard on the bottom of    |                               |  | ||||||
| |                              |their library in a random     |                               |  | ||||||
| |                              |order. EvokeExile a green     |                               |  | ||||||
| |                              |card from your hand. (3/4)    |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Ignoble Hierarch {G}          |Scalding Tarn (Land) >> {T},  |Luminarch Aspirant {1}{W}      |  | ||||||
| |(Creature  Goblin Shaman) >>  |Pay 1 life, Sacrifice         |(Creature  Human Cleric) >>    |  | ||||||
| |Exalted (Whenever a creature  |Scalding Tarn: Search your    |At the beginning of combat on  |  | ||||||
| |you control attacks alone,    |library for an Island or      |your turn, put a +1/+1         |  | ||||||
| |that creature gets +1/+1      |Mountain card, put it onto    |counter on target creature     |  | ||||||
| |until end of turn.) {T}: Add  |the battlefield, then         |you control. (1/1)             |  | ||||||
| |{B}, {R}, or {G}. (0/1)       |shuffle.                      |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Archon of Emeria {2}{W}       |Once Upon a Time {1}{G}       |Mana Confluence (Land) >>      |  | ||||||
| |(Creature  Archon) >> Flying  |(Instant) >> If this spell is |{T}, Pay 1 life: Add one mana  |  | ||||||
| |Each player can't cast more   |the first spell you've cast   |of any color.                  |  | ||||||
| |than one spell each turn.     |this game, you may cast it    |                               |  | ||||||
| |Nonbasic lands your opponents |without paying its mana cost. |                               |  | ||||||
| |control enter the battlefield |Look at the top five cards of |                               |  | ||||||
| |tapped. (2/3)                 |your library. You may reveal  |                               |  | ||||||
| |                              |a creature or land card from  |                               |  | ||||||
| |                              |among them and put it into    |                               |  | ||||||
| |                              |your hand. Put the rest on    |                               |  | ||||||
| |                              |the bottom of your library in |                               |  | ||||||
| |                              |a random order.               |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Birds of Paradise {G}         |Cankerbloom {1}{G} (Creature  |Path to Exile {W} (Instant)    |  | ||||||
| |(Creature  Bird) >> Flying    |Phyrexian Fungus) >> {1},     |>> Exile target creature. Its  |  | ||||||
| |{T}: Add one mana of any      |Sacrifice Cankerbloom: Choose |controller may search their    |  | ||||||
| |color. (0/1)                  |one   Destroy target          |library for a basic land       |  | ||||||
| |                              |artifact.  Destroy target     |card, put that card onto the   |  | ||||||
| |                              |enchantment.  Proliferate.    |battlefield tapped, then       |  | ||||||
| |                              |(Choose any number of         |shuffle.                       |  | ||||||
| |                              |permanents and/or players,    |                               |  | ||||||
| |                              |then give each another        |                               |  | ||||||
| |                              |counter of each kind already  |                               |  | ||||||
| |                              |there.) (3/2)                 |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Marsh Flats (Land) >> {T},    |Broadside Bombardiers {2}{R}  |Caves of Chaos Adventurer      |  | ||||||
| |Pay 1 life, Sacrifice Marsh   |(Creature  Goblin Pirate) >>  |{3}{R} (Creature  Human        |  | ||||||
| |Flats: Search your library    |Menace, haste Boast           |Barbarian) >> Trample When     |  | ||||||
| |for a Plains or Swamp card,   |Sacrifice another creature or |Caves of Chaos Adventurer      |  | ||||||
| |put it onto the battlefield,  |artifact: Broadside           |enters the battlefield, you    |  | ||||||
| |then shuffle.                 |Bombardiers deals damage      |take the initiative. Whenever  |  | ||||||
| |                              |equal to 2 plus the           |Caves of Chaos Adventurer      |  | ||||||
| |                              |sacrificed permanent's mana   |attacks, exile the top card    |  | ||||||
| |                              |value to any target.          |of your library. If you've     |  | ||||||
| |                              |(Activate only if this        |completed a dungeon, you may   |  | ||||||
| |                              |creature attacked this turn   |play that card this turn       |  | ||||||
| |                              |and only once each turn.)     |without paying its mana cost.  |  | ||||||
| |                              |(2/2)                         |Otherwise, you may play that   |  | ||||||
| |                              |                              |card this turn. (5/3)          |  | ||||||
| |                              |                              |                               |  | ||||||
| |Mawloc {X}{R}{G} (Creature    |Comet, Stellar Pup {2}{R}{W}  |Orcish Bowmasters {1}{B}       |  | ||||||
| |Tyranid) >> Ravenous (This    |(Legendary Planeswalker       |(Creature  Orc Archer) >>      |  | ||||||
| |creature enters the           |Comet) >> 0: Roll a six-sided |Flash When Orcish Bowmasters   |  | ||||||
| |battlefield with X +1/+1      |die. 1 or 2  [+2], then       |enters the battlefield and     |  | ||||||
| |counters on it. If X is 5 or  |create two 1/1 green Squirrel |whenever an opponent draws a   |  | ||||||
| |more, draw a card when it     |creature tokens. They gain    |card except the first one      |  | ||||||
| |enters.) Terror from the Deep |haste until end of turn. 3    |they draw in each of their     |  | ||||||
| | When Mawloc enters the       |[1], then return a card with  |draw steps, Orcish Bowmasters  |  | ||||||
| |battlefield, it fights up to  |mana value 2 or less from     |deals 1 damage to any target.  |  | ||||||
| |one target creature an        |your graveyard to your hand.  |Then amass Orcs 1. (1/1)       |  | ||||||
| |opponent controls. If that    |4 or 5  Comet, Stellar Pup    |                               |  | ||||||
| |creature would die this turn, |deals damage equal to the     |                               |  | ||||||
| |exile it instead. (2/2)       |number of loyalty counters on |                               |  | ||||||
| |                              |him to a creature or player,  |                               |  | ||||||
| |                              |then [2]. 6  [+1], and you    |                               |  | ||||||
| |                              |may activate Comet, Stellar   |                               |  | ||||||
| |                              |Pup's loyalty ability two     |                               |  | ||||||
| |                              |more times this turn.         |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Chrome Mox {0} (Artifact) >>  |Thoughtseize {B} (Sorcery) >> |Polluted Delta (Land) >> {T},  |  | ||||||
| |Imprint  When Chrome Mox      |Target player reveals their   |Pay 1 life, Sacrifice          |  | ||||||
| |enters the battlefield, you   |hand. You choose a nonland    |Polluted Delta: Search your    |  | ||||||
| |may exile a nonartifact,      |card from it. That player     |library for an Island or       |  | ||||||
| |nonland card from your hand.  |discards that card. You lose  |Swamp card, put it onto the    |  | ||||||
| |{T}: Add one mana of any of   |2 life.                       |battlefield, then shuffle.     |  | ||||||
| |the exiled card's colors.     |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |City of Brass (Land) >>       |Mox Diamond {0} (Artifact) >> |Flooded Strand (Land) >> {T},  |  | ||||||
| |Whenever City of Brass        |If Mox Diamond would enter    |Pay 1 life, Sacrifice Flooded  |  | ||||||
| |becomes tapped, it deals 1    |the battlefield, you may      |Strand: Search your library    |  | ||||||
| |damage to you. {T}: Add one   |discard a land card instead.  |for a Plains or Island card,   |  | ||||||
| |mana of any color.            |If you do, put Mox Diamond    |put it onto the battlefield,   |  | ||||||
| |                              |onto the battlefield. If you  |then shuffle.                  |  | ||||||
| |                              |don't, put it into its        |                               |  | ||||||
| |                              |owner's graveyard. {T}: Add   |                               |  | ||||||
| |                              |one mana of any color.        |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Temple Garden (Land  Forest   |Lord Skitter, Sewer King      |Bloodstained Mire (Land) >>    |  | ||||||
| |Plains) >> ({T}: Add {G} or   |{2}{B} (Legendary Creature    |{T}, Pay 1 life, Sacrifice     |  | ||||||
| |{W}.) As Temple Garden enters |Rat Noble) >> Whenever        |Bloodstained Mire: Search      |  | ||||||
| |the battlefield, you may pay  |another Rat enters the        |your library for a Swamp or    |  | ||||||
| |2 life. If you don't, it      |battlefield under your        |Mountain card, put it onto     |  | ||||||
| |enters the battlefield        |control, exile up to one      |the battlefield, then          |  | ||||||
| |tapped.                       |target card from an           |shuffle.                       |  | ||||||
| |                              |opponent's graveyard. At the  |                               |  | ||||||
| |                              |beginning of combat on your   |                               |  | ||||||
| |                              |turn, create a 1/1 black Rat  |                               |  | ||||||
| |                              |creature token with "This     |                               |  | ||||||
| |                              |creature can't block." (3/3)  |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| |Ayara's Oathsworn {1}{B}      |                              |                               |  | ||||||
| |(Creature  Human Knight) >>   |                              |                               |  | ||||||
| |Menace Whenever Ayara's       |                              |                               |  | ||||||
| |Oathsworn deals combat damage |                              |                               |  | ||||||
| |to a player, if it has fewer  |                              |                               |  | ||||||
| |than four +1/+1 counters on   |                              |                               |  | ||||||
| |it, put a +1/+1 counter on    |                              |                               |  | ||||||
| |it. Then if it has exactly    |                              |                               |  | ||||||
| |four +1/+1 counters on it,    |                              |                               |  | ||||||
| |search your library for a     |                              |                               |  | ||||||
| |card, put it into your hand,  |                              |                               |  | ||||||
| |then shuffle. (2/2)           |                              |                               |  | ||||||
| |                              |                              |                               |  | ||||||
| ```                                                                                           |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/out.pdf
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								src/out.pdf
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -1,9 +1,20 @@ | ||||||
| //c library usage based on https://medium.com/@eddo2626/lets-learn-zig-4-using-c-libraries-in-zig-5fcc3206f0dc | //TODO: change references to "HeightMayVary" to "constantHeight" | ||||||
|  | //TODO: add loyalty for planeswalkers | ||||||
|  | //TODO: print mana cost beside each name for dual-faced cards | ||||||
|  | //TODO: consider eliminating the TextCard struct | ||||||
|  | //TODO: add some kind of "update" command to support pulling new oracle data | ||||||
|  | //TODO: implement oracleFileName as a cli arg | ||||||
|  | //TODO: add more robust tests | ||||||
| const std = @import("std"); | const std = @import("std"); | ||||||
|  | 
 | ||||||
|  | // https://github.com/Hejsil/zig-clap | ||||||
| const clap = @import("clap"); | const clap = @import("clap"); | ||||||
| 
 | 
 | ||||||
| //using the zg lib: https://codeberg.org/dude_the_builder/zg | // https://codeberg.org/dude_the_builder/zg | ||||||
| const DisplayWidth = @import("DisplayWidth"); | const DisplayWidth = @import("DisplayWidth"); | ||||||
|  | 
 | ||||||
|  | // https://github.com/AndreRenaud/PDFGen | ||||||
|  | // including the header file only works for a full build, "zig run" can't find it | ||||||
| const c = @cImport({ | const c = @cImport({ | ||||||
|     @cInclude("pdfgen.h"); |     @cInclude("pdfgen.h"); | ||||||
| }); | }); | ||||||
|  | @ -44,15 +55,20 @@ const cardWidth = 30; | ||||||
| const cardHeight = 32; | const cardHeight = 32; | ||||||
| const minCardHeight = 5; | const minCardHeight = 5; | ||||||
| const pageHeight = 66;       | const pageHeight = 66;       | ||||||
| var heightMayVary = true;   //whether or not cards must have a constant height | const pdfHeight = c.PDF_LETTER_HEIGHT; | ||||||
|  | const pdfWidth = c.PDF_LETTER_WIDTH; | ||||||
| 
 | 
 | ||||||
| const formatString = "{s: <" ++ std.fmt.digits2(cardWidth) ++ "}"; | const formatString = "{s: <" ++ std.fmt.digits2(cardWidth) ++ "}"; | ||||||
| const lineFormatter = "|" ++ formatString; | const lineFormatter = "|" ++ formatString; | ||||||
| const spacer: []const u8 = "|" ++ (" " ** cardWidth); | const spacer: []const u8 = "|" ++ (" " ** cardWidth); | ||||||
| const oracleFileName = "/home/lumenk/Documents/code/zig/proxy-print/src/oracle-cards-20240701090158.json"; //"oracle-cards-20240205220208.js"; |  | ||||||
| const fullWidthSpacer = (spacer ** 3) ++ "\n"; | const fullWidthSpacer = (spacer ** 3) ++ "\n"; | ||||||
| const pageWidth = fullWidthSpacer.len; | const pageWidth = fullWidthSpacer.len; | ||||||
| 
 | 
 | ||||||
|  | //values that may vary depending on user-supplied arguments | ||||||
|  | var oracleFileName = "oracle-data/oracle-cards-20240701090158.json"; | ||||||
|  | var listFileName: []const u8 = undefined;   //the name of the file with the list of cards to print | ||||||
|  | var heightMayVary = true;                   //whether or not cards must have a constant height | ||||||
|  | 
 | ||||||
| test "Check constants" { | test "Check constants" { | ||||||
|     var gpa = std.heap.GeneralPurposeAllocator(.{}){}; |     var gpa = std.heap.GeneralPurposeAllocator(.{}){}; | ||||||
|     const paddedLine = try std.fmt.allocPrint(gpa.allocator(), lineFormatter, .{"hello> woooooooooooooooooooorl"}); |     const paddedLine = try std.fmt.allocPrint(gpa.allocator(), lineFormatter, .{"hello> woooooooooooooooooooorl"}); | ||||||
|  | @ -60,8 +76,6 @@ test "Check constants" { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub fn main() !void { | pub fn main() !void { | ||||||
|     // var args = try std.process.argsWithAllocator(std.heap.page_allocator); |  | ||||||
| 
 |  | ||||||
|     var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); |     var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); | ||||||
|     defer arena.deinit(); |     defer arena.deinit(); | ||||||
|     const allocator = arena.allocator(); |     const allocator = arena.allocator(); | ||||||
|  | @ -69,7 +83,7 @@ pub fn main() !void { | ||||||
|     const params = comptime clap.parseParamsComptime( |     const params = comptime clap.parseParamsComptime( | ||||||
|         \\-h, --help            Display this help and exit. |         \\-h, --help            Display this help and exit. | ||||||
|         \\-l, --listFile <str>  The list of cards to print        |         \\-l, --listFile <str>  The list of cards to print        | ||||||
|         \\ |         \\-c, --constant <str>  "true" or "false" (case-sensitive, whether or not the height of cards may vary) | ||||||
|     ); |     ); | ||||||
| 
 | 
 | ||||||
|     const res = clap.parse(clap.Help, ¶ms, clap.parsers.default, .{ |     const res = clap.parse(clap.Help, ¶ms, clap.parsers.default, .{ | ||||||
|  | @ -77,8 +91,15 @@ pub fn main() !void { | ||||||
|     }) catch |err| { |     }) catch |err| { | ||||||
|         return err; |         return err; | ||||||
|     }; |     }; | ||||||
|     if(res.args.listFile == null) return error.ExpectedArgument; |     if(res.args.listFile) |name| { | ||||||
|     const listFileName = res.args.listFile.?; |         listFileName = name; | ||||||
|  |     } else { | ||||||
|  |       return error.ExpectedArgument; | ||||||
|  |     } | ||||||
|  |     //TODO (FIXME): passing "false" currently causes the program to hang and then crash | ||||||
|  |     if(res.args.constant) |choice| { | ||||||
|  |         heightMayVary = stringToBool(choice); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     const oracleFile = try cwd.openFile(oracleFileName, .{}); |     const oracleFile = try cwd.openFile(oracleFileName, .{}); | ||||||
|     var jsonReader = json.reader(allocator, oracleFile.reader()); |     var jsonReader = json.reader(allocator, oracleFile.reader()); | ||||||
|  | @ -106,8 +127,6 @@ pub fn main() !void { | ||||||
| 
 | 
 | ||||||
|     cards.sort(CardSortContext{ .list = cards.values() }); |     cards.sort(CardSortContext{ .list = cards.values() }); | ||||||
|     var allPrinted = std.ArrayList([]const u8).init(allocator); |     var allPrinted = std.ArrayList([]const u8).init(allocator); | ||||||
|     const pdfHeight = c.PDF_LETTER_HEIGHT; |  | ||||||
|     const pdfWidth = c.PDF_LETTER_WIDTH; |  | ||||||
|     const pdf_doc: *c.pdf_doc = @ptrCast(c.pdf_create(pdfWidth, pdfHeight, &c.pdf_info{ .creator = ("My Software" ++ " " ** 53).* }).?); |     const pdf_doc: *c.pdf_doc = @ptrCast(c.pdf_create(pdfWidth, pdfHeight, &c.pdf_info{ .creator = ("My Software" ++ " " ** 53).* }).?); | ||||||
| 
 | 
 | ||||||
|     var rowToPrint = std.ArrayList(TextCard).init(allocator); |     var rowToPrint = std.ArrayList(TextCard).init(allocator); | ||||||
|  |  | ||||||
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue