add system for (To keyword, ...) reminder text (#69)

-added handle_action_rt(to:"name", "Action") to be used in keyword code. It will return either "To name, action" or "Action" depending on if the reminder text is removed from the keyword.
Example: {handle_action_rt(to:"populate", "Create")} a token that's a copy of a creature token you control.
-added handle_merged_rt("Normal", moved:"Alternate") to be used in keyword code. It will typically return "Normal", but will return "Alternate" if its keyword gets moved.
Example: {handle_merged_rt(if param1.value == "ns" then "They’re artifacts" else "It’s an artifact", moved:"A Food token is an artifact")} with "2, T, Sacrifice this artifact: You gain 3 life."
This commit is contained in:
cajun
2024-09-22 08:32:25 -05:00
committed by GitHub
parent b1afc302de
commit 0e8925a64e
3 changed files with 81 additions and 38 deletions

View File

@@ -41,6 +41,8 @@ OTHER UPDATES
• Added support for Custom Watermarks up to a maximum size of 1024x1024. Watermarks that aren't 500x500 will still need to include their height and width. • Added support for Custom Watermarks up to a maximum size of 1024x1024. Watermarks that aren't 500x500 will still need to include their height and width.
• Split the "blend with colors" watermark option into one that applies to custom watermarks and one that applies to default watermarks. • Split the "blend with colors" watermark option into one that applies to custom watermarks and one that applies to default watermarks.
• Reorganized the Set tab into something hopefully easier to navigate. • Reorganized the Set tab into something hopefully easier to navigate.
• Added the keyword utility handle_action_rt(to:"name", "Action"). This can be used to add "To {name}," before the reminder text when it isn't right next to the keyword, such as handle_action_rt(to:"forage", "Exile"). capitalization matters here.
• Added the keyword utility handle_merged_rt("Normal", moved:"Alternate"). This can be used to add clarifying text when reminder text is merged, like in [card]Cache Grab[/card]. Unlike the previous, this only changes during reminder text merges, not any distance from the keyword.
• Added the up and down triangles as mainframe transform options. • Added the up and down triangles as mainframe transform options.
• Added support for dungeons with 8 levels. • Added support for dungeons with 8 levels.
• Added option to remove backface rarity symbol to Mainframe DFC. • Added option to remove backface rarity symbol to Mainframe DFC.

View File

@@ -380,8 +380,8 @@ keyword:
match: Scry <atom-param>number</atom-param> match: Scry <atom-param>number</atom-param>
mode: core mode: core
reminder: reminder:
To scry {param1}, look at the top { { handle_action_rt(to:"scry {param1}", "Look")} at the top {
if param1.value=="1" then "card of your library. You may put that card on the bottom." if param1.value=="1" then "card of your library. You may put that card on the bottom of your library."
else "{english_number(param1)} cards of your library, then put any number of them on the bottom and the rest on top in any order." else "{english_number(param1)} cards of your library, then put any number of them on the bottom and the rest on top in any order."
} }
keyword: keyword:
@@ -580,8 +580,8 @@ keyword:
match: Fateseal <atom-param>number</atom-param> match: Fateseal <atom-param>number</atom-param>
mode: action mode: action
reminder: reminder:
To fateseal {param1}, look at the top { {handle_action_rt(to:"fateseal "+param1, "Look")} at the top {
if param1.value=="1" then "card of an opponents library, then you may put that card on the bottom of that players library." if param1.value=="1" then "card of an opponents library, then you may put it on the bottom of that players library."
else "{english_number(param1)} cards of an opponents library, then put any number of them on the bottom of that players library and the rest on top in any order." else "{english_number(param1)} cards of an opponents library, then put any number of them on the bottom of that players library and the rest on top in any order."
} }
keyword: keyword:
@@ -780,7 +780,7 @@ keyword:
keyword: Proliferate keyword: Proliferate
match: Proliferate match: Proliferate
mode: action mode: action
reminder: Choose any number of permanents and/or players, then give each another counter of each kind already there. reminder: {handle_action_rt(to:"proliferate", "Choose")} any number of permanents and/or players, then give each another counter of each kind already there.
keyword: keyword:
keyword: Metalcraft keyword: Metalcraft
match: Metalcraft match: Metalcraft
@@ -872,7 +872,7 @@ keyword:
keyword: Populate keyword: Populate
match: populate match: populate
mode: action mode: action
reminder: Create a token that's a copy of a creature token you control. reminder: {handle_action_rt(to:"populate", "Create")} a token that's a copy of a creature token you control.
# Gatecrash # Gatecrash
keyword: keyword:
keyword: Extort keyword: Extort
@@ -1018,7 +1018,7 @@ keyword:
keyword: Bolster keyword: Bolster
match: bolster <atom-param>number</atom-param> match: bolster <atom-param>number</atom-param>
mode: action mode: action
reminder: Choose a creature with the least toughness among creatures you control and put {english_number_a(param1)} +1/+1 counter(s) on it. reminder: {handle_action_rt(to:"bolster {param1}", "Choose")} a creature with the least toughness among creatures you control and put {english_number_a(param1)} +1/+1 counter(s) on it.
keyword: keyword:
keyword: Dash keyword: Dash
match: Dash <atom-param>cost</atom-param> match: Dash <atom-param>cost</atom-param>
@@ -1028,7 +1028,7 @@ keyword:
keyword: Manifest keyword: Manifest
match: manifest match: manifest
mode: action mode: action
reminder: To manifest a card, put it onto the battlefield face down as a 2/2 creature. Turn it face up any time for its mana cost if it's a creature card. reminder: {handle_action_rt(to:"manifest a card", "Put")} it onto the battlefield face down as a 2/2 creature. Turn it face up any time for its mana cost if it's a creature card.
# Dragons of Tarkir # Dragons of Tarkir
keyword: keyword:
keyword: Exploit keyword: Exploit
@@ -1103,13 +1103,13 @@ keyword:
keyword: Support keyword: Support
match: Support <atom-param>number</atom-param> match: Support <atom-param>number</atom-param>
mode: action mode: action
reminder: Put a +1/+1 counter on {if param1.value!=1 then "each of "}up to {english_number(param1)}{if has_pt() then " other"} target creature(s). reminder: {handle_action_rt(to:"support {param1}", "Put")} a +1/+1 counter on {if param1.value!=1 then "each of "}up to {english_number(param1)}{if has_pt() then " other"} target creature(s).
# Shadows over Innistrad # Shadows over Innistrad
keyword: keyword:
keyword: Investigate keyword: Investigate
match: Investigate match: Investigate
mode: action mode: action
reminder: Create a Clue token. It's an artifact with "<sym>2</sym>, Sacrifice this artifact: Draw a card." reminder: {handle_action_rt(to:"investigate", "Create")} a Clue token. It's an artifact with "<sym>2</sym>, Sacrifice this artifact: Draw a card."
keyword: keyword:
keyword: Skulk keyword: Skulk
match: Skulk match: Skulk
@@ -1238,7 +1238,7 @@ keyword:
keyword: Explore keyword: Explore
match: explores match: explores
mode: action mode: action
reminder: 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 {this_or_that("creature")}, then put the card back or put it into your graveyard. reminder: {handle_action_rt(to:"explore", "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 {this_or_that("creature")}, then put the card back or put it into your graveyard.
#Unstable #Unstable
keyword: keyword:
keyword: Assemble a Contraption keyword: Assemble a Contraption
@@ -1326,7 +1326,7 @@ keyword:
keyword: Treasure token keyword: Treasure token
match: Treasure toke<atom-param>*s</atom-param> match: Treasure toke<atom-param>*s</atom-param>
mode: core mode: core
reminder: {if param1.value == "ns" then "Theyre artifacts" else "Its an artifact"} with "T, Sacrifice this artifact: Add one mana of any color." reminder: {handle_merged_rt(if param1.value == "ns" then "Theyre artifacts" else "Its an artifact", moved:"A Treasure token is an artifact")} with "T, Sacrifice this artifact: Add one mana of any color."
#Guilds of Ravnica #Guilds of Ravnica
keyword: keyword:
keyword: Jump-start keyword: Jump-start
@@ -1343,7 +1343,7 @@ keyword:
match: Surveil <atom-param>number</atom-param> match: Surveil <atom-param>number</atom-param>
mode: action mode: action
reminder: reminder:
Look at the top { {handle_action_rt(to:"surveil {param1}", "Look")} at the top {
if param1.value=="1" then "card of your library. You may put it into your graveyard." if param1.value=="1" then "card of your library. You may put it into your graveyard."
else "{english_number(param1)} cards of your library, then put any number of them into your graveyard and the rest on top of your library in any order." else "{english_number(param1)} cards of your library, then put any number of them into your graveyard and the rest on top of your library in any order."
} }
@@ -1383,7 +1383,7 @@ keyword:
keyword: Amass keyword: Amass
match: Amass <atom-param>name</atom-param> <atom-param>number</atom-param> match: Amass <atom-param>name</atom-param> <atom-param>number</atom-param>
mode: action mode: action
reminder: Put {english_number_a(param2)} +1/+1 counter(s) on an Army you control. It's also a {if param1.value == "Zombies" then "Zombie" else english_singular(param1)}. If you don't control an Army, create a 0/0 black {if param1.value == "Zombies" then "Zombie" else english_singular(param1)} Army creature token first. reminder: {handle_action_rt(to:"amass {param1} {param2}", "Create")} {english_number_a(param2)} +1/+1 counter(s) on an Army you control. It's also a {if param1.value == "Zombies" then "Zombie" else english_singular(param1)}. If you don't control an Army, create a 0/0 black {if param1.value == "Zombies" then "Zombie" else english_singular(param1)} Army creature token first.
#Throne of Eldraine #Throne of Eldraine
keyword: keyword:
keyword: Adamant keyword: Adamant
@@ -1394,7 +1394,7 @@ keyword:
keyword: Food token keyword: Food token
match: Food toke<atom-param>*s</atom-param> match: Food toke<atom-param>*s</atom-param>
mode: core mode: core
reminder: {if param1.value == "ns" then "Theyre artifacts" else "Its an artifact"} with "2, T, Sacrifice this artifact: You gain 3 life." reminder: {handle_merged_rt(if param1.value == "ns" then "Theyre artifacts" else "Its an artifact", moved:"A Food token is an artifact")} with "2, T, Sacrifice this artifact: You gain 3 life."
#Theros Beyond Death #Theros Beyond Death
keyword: keyword:
keyword: Escape keyword: Escape
@@ -1405,7 +1405,7 @@ keyword:
keyword: Gold token keyword: Gold token
match: Gold toke<atom-param>*s</atom-param> match: Gold toke<atom-param>*s</atom-param>
mode: core mode: core
reminder: {if param1.value == "ns" then "Theyre artifacts" else "Its an artifact"} with "Sacrifice this artifact: Add one mana of any color." reminder: {handle_merged_rt(if param1.value == "ns" then "Theyre artifacts" else "Its an artifact", moved:"A Gold token is an artifact")} with "Sacrifice this artifact: Add one mana of any color."
#Ikoria: Lair of Behemoths #Ikoria: Lair of Behemoths
keyword: keyword:
keyword: Mutate keyword: Mutate
@@ -1420,9 +1420,9 @@ keyword:
#Magic 2021 #Magic 2021
keyword: keyword:
keyword: Mill keyword: Mill
match: <atom-param>mill</atom-param> <atom-param>one_word</atom-param> match: <atom-param>mill</atom-param> <atom-param>one_word</atom-param> car<atom-param>*s</atom-param>
mode: core mode: core
reminder: {if param1.value == "mills" then "They put" else "Put"} the top {if param2.value == "a" then "" else param2 + " "}{if param2.value == "a" then "card" else "cards"} of {if param1.value == "mills" then "their library into their" else "your library into your"} graveyard. reminder: { if param1.value == "mills" then handle_action_rt(to:if param2 == "a" then "mill a card" else "mill {param2} cards", "They") + " put the top " + (if param2.value == "a" then "card " else param2 + " cards ") + "of their library into their graveyard." else handle_action_rt(to:if param2 == "a" then "mill a card" else "mill {param2} cards", "Put") + " the top " + (if param2.value == "a" then "card " else param2 + " cards ") + "of your library into your graveyard." }
keyword: keyword:
keyword: phases out keyword: phases out
match: phases out match: phases out
@@ -1445,7 +1445,7 @@ keyword:
keyword: Shard token keyword: Shard token
match: Shard toke<atom-param>*s</atom-param> match: Shard toke<atom-param>*s</atom-param>
mode: core mode: core
reminder: {if param1.value == "ns" then "Theyre enchantments" else "Its an enchantment"} with "2, Sacrifice this enchantment: Scry ]1[, then draw a card." reminder: {handle_merged_rt(if param1.value == "ns" then "Theyre enchantments" else "Its an enchantment", moved:"A Shard token is an enchantment")} with "2, Sacrifice this enchantment: Scry ]1[, then draw a card."
keyword: keyword:
keyword: Boast keyword: Boast
match: Boast match: Boast
@@ -1461,7 +1461,7 @@ keyword:
keyword: Learn keyword: Learn
match: learn match: learn
mode: action mode: action
reminder: You may reveal a Lesson card you own from outside the game and put it into your hand, or discard a card to draw a card. reminder: {handle_action_rt(to:"learn", "you")} may reveal a Lesson card you own from outside the game and put it into your hand, or discard a card to draw a card.
keyword: keyword:
keyword: Ward keyword: Ward
match: Ward <atom-param>cost</atom-param> match: Ward <atom-param>cost</atom-param>
@@ -1541,7 +1541,7 @@ keyword:
keyword: Blood token keyword: Blood token
match: Blood toke<atom-param>*s</atom-param> match: Blood toke<atom-param>*s</atom-param>
mode: expert mode: expert
reminder: {if param1.value == "ns" then "Theyre artifacts" else "Its an artifact"} with "1, T, Discard a card, Sacrifice this artifact: Draw a card." reminder: {handle_merged_rt(if param1.value == "ns" then "Theyre artifacts" else "Its an artifact", moved:"A Blood token is an artifact")} with "1, T, Discard a card, Sacrifice this artifact: Draw a card."
# Kamigawa Neon Dynasty # Kamigawa Neon Dynasty
keyword: keyword:
keyword: Reconfigure keyword: Reconfigure
@@ -1568,17 +1568,17 @@ keyword:
keyword: Connive keyword: Connive
match: connive match: connive
mode: action mode: action
reminder: To have a creature connive, draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on that creature. reminder: {handle_action_rt(to:"have a creature connive", "Draw")} a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on that creature.
keyword: keyword:
keyword: Connives keyword: Connives
match: connives match: connives
mode: action mode: action
reminder: Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on {this_or_that("creature")}. reminder: {handle_action_rt(to:"have a creature connive", "Draw")} a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on {this_or_that("creature")}.
keyword: keyword:
keyword: Connives N keyword: Connives N
match: connives <atom-param>number</atom-param> match: connives <atom-param>number</atom-param>
mode: action mode: action
reminder: Draw {english_number_a(param1)} card(s), then discard {english_number_a(param1)} card(s). Put a +1/+1 counter on {this_or_that("creature")} for each nonland card discarded this way. reminder: {handle_action_rt(to:"have a creature connive", "Draw")} {english_number_a(param1)} card(s), then discard {english_number_a(param1)} card(s). Put a +1/+1 counter on {this_or_that("creature")} for each nonland card discarded this way.
keyword: keyword:
keyword: Blitz keyword: Blitz
match: Blitz <atom-param>cost</atom-param> match: Blitz <atom-param>cost</atom-param>
@@ -1647,7 +1647,7 @@ keyword:
keyword: Powerstone token keyword: Powerstone token
match: Powerstone toke<atom-param>*s</atom-param> match: Powerstone toke<atom-param>*s</atom-param>
mode: expert mode: expert
reminder: {if param1.value == "ns" then "Theyre artifacts" else "Its an artifact"} with "[T]: Add [C]. This mana can't be spent to cast a nonartifact spell." reminder: {handle_merged_rt(if param1.value == "ns" then "Theyre artifacts" else "Its an artifact", moved:"A Powerstone token is an artifact")} with "[T]: Add [C]. This mana can't be spent to cast a nonartifact spell."
# Brother's War # Brother's War
keyword: keyword:
keyword: Prototype keyword: Prototype
@@ -1690,7 +1690,7 @@ keyword:
keyword: Incubate keyword: Incubate
match: Incubate <atom-param>number</atom-param> match: Incubate <atom-param>number</atom-param>
mode: action mode: action
reminder: Create an Incubator token with {english_number_a(param1)} +1/+1 counter(s) on it and "[2]: Transform this artifact." It transforms into a 0/0 Phyrexian artifact creature. reminder: {handle_action_rt(to:"incubate {param1}", "Create")} an Incubator token with {english_number_a(param1)} +1/+1 counter(s) on it and "[2]: Transform this artifact." It transforms into a 0/0 Phyrexian artifact creature.
# Wilds of Eldraine # Wilds of Eldraine
keyword: keyword:
keyword: Bargain keyword: Bargain
@@ -1769,7 +1769,7 @@ keyword:
keyword: Map token keyword: Map token
match: Map toke<atom-param>*s</atom-param> match: Map toke<atom-param>*s</atom-param>
mode: expert mode: expert
reminder: {if param1.value == "ns" then "Theyre artifacts" else "Its an artifact"} with "1, T, Sacrifice this artifact: Target creature you control explores. Activate only as a sorcery." reminder: {handle_merged_rt(if param1.value == "ns" then "Theyre artifacts" else "Its an artifact", moved:"A Map token is an artifact")} with "1, T, Sacrifice this artifact: Target creature you control explores. Activate only as a sorcery."
keyword: keyword:
keyword: Craft keyword: Craft
match: Craft with <atom-param>name</atom-param> <atom-param>cost</atom-param> match: Craft with <atom-param>name</atom-param> <atom-param>cost</atom-param>
@@ -1794,7 +1794,7 @@ keyword:
keyword: Discover keyword: Discover
match: Discover <atom-param>number</atom-param> match: Discover <atom-param>number</atom-param>
mode: action mode: action
reminder: Exile cards from the top of your library until you exile a nonland card with mana value {param1} or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order. reminder: {handle_action_rt(to:"discover {param1}", "Exile")} cards from the top of your library until you exile a nonland card with mana value {param1} or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.
keyword: keyword:
keyword: Finality counters keyword: Finality counters
match: finality counter match: finality counter
@@ -1805,12 +1805,12 @@ keyword:
keyword: Cloak keyword: Cloak
match: cloak match: cloak
mode: action mode: action
reminder: To cloak a card, put it onto the battlefield face down as a 2/2 creature with ward [2]. Turn it face up any time for its mana cost if it's a creature card. reminder: {handle_action_rt(to:"cloak a card", "Put")} it onto the battlefield face down as a 2/2 creature with ward [2]. Turn it face up any time for its mana cost if it's a creature card.
keyword: keyword:
keyword: Collect evidence keyword: Collect evidence
match: collect evidence <atom-param>number</atom-param> match: collect evidence <atom-param>number</atom-param>
mode: action mode: action
reminder: Exile cards with total mana value {param1} or greater from your graveyard. reminder: {handle_action_rt(to:"collect evidence {param1}", "Exile")} cards with total mana value {param1} or greater from your graveyard.
keyword: keyword:
keyword: Disguise keyword: Disguise
match: Disguise <atom-param>cost</atom-param> match: Disguise <atom-param>cost</atom-param>
@@ -1831,7 +1831,7 @@ keyword:
keyword: Junk token keyword: Junk token
match: Junk toke<atom-param>*s</atom-param> match: Junk toke<atom-param>*s</atom-param>
mode: expert mode: expert
reminder: {if param1.value == "ns" then "Theyre artifacts" else "Its an artifact"} with "T, Sacrifice this artifact: Exile the top card of your library. You may play that card this turn. Activate only as a sorcery." reminder: {handle_merged_rt(if param1.value == "ns" then "Theyre artifacts" else "Its an artifact", moved:"A Junk token is an artifact")} with "T, Sacrifice this artifact: Exile the top card of your library. You may play that card this turn. Activate only as a sorcery."
# Assassin's Creed # Assassin's Creed
keyword: keyword:
keyword: Freerunning keyword: Freerunning
@@ -1890,12 +1890,12 @@ keyword:
keyword: forage keyword: forage
match: forage match: forage
mode: action mode: action
reminder: Exile three cards from your graveyard or sacrifice a Food. reminder: {handle_action_rt(to:"forage", "Exile")} three cards from your graveyard or sacrifice a Food.
keyword: keyword:
keyword: forage keyword: forage
match: foraging match: foraging
mode: action mode: action
reminder: Exile three cards from your graveyard or sacrifice a Food. reminder: {handle_action_rt(to:"forage", "Exile")} three cards from your graveyard or sacrifice a Food.
keyword: keyword:
keyword: Gift a card keyword: Gift a card
match: Gift a card match: Gift a card

View File

@@ -32,7 +32,7 @@ include file: language
include file: statistics_script include file: statistics_script
include file: /magic-blends.mse-include/new-blends include file: /magic-blends.mse-include/new-blends
############################################################## Versioning ############################################################## Versioning
version_date := {"2024-05-27 Mainframe 1.3.f Showcase Catchup: Module Rollout"} version_date := {"2024-05-27 Mainframe 1.3.g Showcase Catchup: Action Check"}
version := version_date version := version_date
############################################################## Common filters ############################################################## Common filters
############################################################## Utility ############################################################## Utility
@@ -1178,6 +1178,16 @@ this_or_that := {
this_that + " " + type this_that + " " + type
}@(upper:false) }@(upper:false)
#### see if a keyword should have different text because it's merged with another reminder text
#### handle_merged_rt("Its a", moved:"A Food token is")
handle_merged_rt := {
"<use-if-moved>" + moved + "</use-if-moved><otherwise>" + input + "</otherwise>"
}
#### see if an action keyword should have different text because its distant from the keyword
#### handle_action_rt(to:"forage", "Exile")
handle_action_rt := {
"<use-if-bumped>To " + to + ", " + to_lower(input) + "</use-if-bumped><otherwise>" + input + "</otherwise>"
}
############################################################## Complex reminder texts ############################################################## Complex reminder texts
self_pro_check := match@(match:"You ha(ve|s) <kw-A><nospellcheck>protection") self_pro_check := match@(match:"You ha(ve|s) <kw-A><nospellcheck>protection")
@@ -1472,6 +1482,9 @@ text_filter :=
remove_tag@(tag: "<bullet>") + remove_tag@(tag: "<bullet>") +
remove_tag@(tag: "<align") + remove_tag@(tag: "<align") +
remove_tag@(tag: "<margin") + remove_tag@(tag: "<margin") +
remove_tag@(tag: "<moved>") +
remove_tag@(tag: "<blob>") +
remove_tag@(tag: "<key>") +
#### step 1b : remove zero-width space used for level spacers #### step 1b : remove zero-width space used for level spacers
replace@(match:"", replace:"") + replace@(match:"", replace:"") +
#### step 2a : temp fix for formatting buttons #### step 2a : temp fix for formatting buttons
@@ -1496,7 +1509,7 @@ text_filter :=
chosen(choice:if correct_case or mode == "action" then mode else "lower case", set.automatic_reminder_text) and chosen(choice:mode, set.automatic_reminder_text) chosen(choice:if correct_case or mode == "action" then mode else "lower case", set.automatic_reminder_text) and chosen(choice:mode, set.automatic_reminder_text)
}, },
combine: { combine: {
keyword := "<nospellcheck>{keyword}</nospellcheck>" keyword := "<nospellcheck><key>{keyword}</key></nospellcheck>"
reminder := process_english_hints(reminder) reminder := process_english_hints(reminder)
if mode == "pseudo" then "<i-auto>{keyword}</i-auto>" if mode == "pseudo" then "<i-auto>{keyword}</i-auto>"
else keyword + if expand then "<atom-reminder-{mode}> ({reminder})</atom-reminder-{mode}>" else "" else keyword + if expand then "<atom-reminder-{mode}> ({reminder})</atom-reminder-{mode}>" else ""
@@ -1509,13 +1522,41 @@ text_filter :=
) + ) +
#### step 2c : move action keywords' reminder text to the end of the line #### step 2c : move action keywords' reminder text to the end of the line
replace@( replace@(
match: "(<atom-reminder-[^>]+> (?:(?!</kw).*?)</atom-reminder-[^>]+></kw[^>]*>)([^\n]*)", #### removed "| ?<kw-" from lookahead match: "(<atom-reminder-[^>]+> (?:(?!</kw).*?)</atom-reminder-[^>]+></kw[^>]*>)([^\n]+)", #### removed "| ?<kw-" from lookahead
replace: "\\2\\1" replace: "\\2\\1"
) + ) +
#### step 2d : when there's an action keyword and another one, then move that to the end of the line #### step 2d : when there's an action keyword and another one, then move that to the end of the line
replace@( replace@(
match: "(<atom-reminder-[^>]+> (?:(?!</kw)[^\n]*?)</atom-reminder-[^>]+></kw[^>]*>)([^\n]*?)(<atom-reminder-[^>]+> (?:(?!</kw).*?)</atom-reminder-[^>]+></kw[^>]*>)([^\n]*)", match: "(<atom-reminder-[^>]+> (?:(?!</kw)[^\n]*?)</atom-reminder-[^>]+></kw[^>]*>)([^\n]*?)(<atom-reminder-[^>]+> (?:(?!</kw).*?)</atom-reminder-[^>]+></kw[^>]*>)([^\n]*)",
replace: "\\2\\4\\3\\1" replace: "\\2<blob>\\4\\3<moved>\\1</moved></blob>"
) +
#### step 2da : apply multikeyword reminder edits
#### A Food token is... vs It's a...
#### this one moved
replace@(
match: "(<moved><atom-reminder[^>]*> [(])<use-if-(?:moved|bumped)>(.*?)</use-if-(?:moved|bumped)><otherwise>(.*?)</otherwise>",
replace: "\\1\\2"
) +
#### this one didn't
replace@(
match: "<use-if-moved>(.*?)</use-if-moved><otherwise>(.*?)</otherwise>",
replace: "\\2"
) +
#### To forage, exile... vs Exile...
#### this was put in a combined rt
replace@(
match: "(<blob>.*?)<use-if-bumped>(.*?)</use-if-bumped><otherwise>(.*?)</otherwise>",
replace: "\\1\\2"
) +
#### this one wasn't bumped
replace@(
match: "(</key></nospellcheck>[.]?<atom-reminder[^>]*> [(])<use-if-bumped>(.*?)</use-if-bumped><otherwise>(.*?)</otherwise>",
replace: "\\1\\3"
) +
#### this one was bumped
replace@(
match: "<use-if-bumped>(.*?)</use-if-bumped><otherwise>(.*?)</otherwise>",
replace: "\\1"
) + ) +
#### step 2e : allow a sentence after lowercase reminder text for equips etc. #### step 2e : allow a sentence after lowercase reminder text for equips etc.
#replace@( #replace@(
@@ -1529,7 +1570,7 @@ text_filter :=
) + ) +
#### step 2g : combine reminder texts #### step 2g : combine reminder texts
replace@( replace@(
match: "[)](</atom-reminder-[^>]+></kw-[^>]><atom-reminder-[^>]+> )[(]" match: "[)](</atom-reminder-[^>]+></kw-[^>]>(?:</?moved>)?<atom-reminder-[^>]+> )[(]"
replace: "\\1" replace: "\\1"
) + ) +
#### step 2h : temp fix for formatting buttons #### step 2h : temp fix for formatting buttons