WUBRG -> WUBRGO

This commit is contained in:
Sebastian Lundegård Kylander
2026-03-29 19:55:15 +02:00
parent c783f92e13
commit 77351a8a37
6 changed files with 38 additions and 38 deletions

View File

@@ -829,7 +829,7 @@ stamp_hybrid := [
# Putting it all together. # Putting it all together.
######################################################################## ########################################################################
blend_colors := { blend_colors := {
colors := sort_text( order: if card_is_wedge(input) then "(wbgur)" else "(wubrg)" colors := sort_text( order: if card_is_wedge(input) then "(wbguro)" else "(wubrgo)"
, (if chosen(choice:"white" ) then "w") , (if chosen(choice:"white" ) then "w")
+ (if chosen(choice:"blue" ) then "u") + (if chosen(choice:"blue" ) then "u")
+ (if chosen(choice:"black" ) then "b") + (if chosen(choice:"black" ) then "b")
@@ -1116,7 +1116,7 @@ font_color_positions := [
font_white := { font_white := {
hybrid := chosen(choice:"hybrid" ) hybrid := chosen(choice:"hybrid" )
artifact := chosen(choice:"artifact" ) artifact := chosen(choice:"artifact" )
colors := sort_text( order: "(wubrg)" colors := sort_text( order: "(wubrgo)"
, (if chosen(choice:"white" ) then "w") , (if chosen(choice:"white" ) then "w")
+ (if chosen(choice:"blue" ) then "u") + (if chosen(choice:"blue" ) then "u")
+ (if chosen(choice:"black" ) then "b") + (if chosen(choice:"black" ) then "b")

View File

@@ -806,7 +806,7 @@ symbol:
text margin right: .21 text margin right: .21
text margin top: -.15 text margin top: -.15
text margin bottom: -.06 text margin bottom: -.06
code: [0-9](?!/[WUBRGCSTQ2])|. code: [0-9](?!/[WUBRGOCSTQ2])|.
regex: yes regex: yes
draw text: 0 draw text: 0
text font: text font:

View File

@@ -29,7 +29,7 @@ keyword mode:
keyword parameter type: keyword parameter type:
name: mana name: mana
match: [HSVCTQXYZI0-9WUBRG/|]+ match: [HSVCTQXYZI0-9WUBRGO/|]+
refer script: refer script:
name: normal name: normal
description: No changes made description: No changes made
@@ -48,7 +48,7 @@ keyword parameter type:
# By pichoro and bunnierein # By pichoro and bunnierein
keyword parameter type: keyword parameter type:
name: cost name: cost
match: [ ][HSVECTQXYZI0-9WUBRG/|]*|[-—][^(\r\n]* match: [ ][HSVECTQXYZI0-9WUBRGO/|]*|[-—][^(\r\n]*
separator before is: [ —-] separator before is: [ —-]
separator after is: [.] separator after is: [.]
optional: false optional: false

View File

@@ -1304,12 +1304,12 @@ reverse_list :=
cost_parameter_script := cost_parameter_script :=
{ {
input := remove_tag(input, tag:"<sym-auto>") input := remove_tag(input, tag:"<sym-auto>")
replace(input, match:"\\b([HSVECTQXYZI0-9WUBRG/|]+)\\b(|,|<|$)", replace:"<sym-auto>\\1</sym-auto>\\2") replace(input, match:"\\b([HSVECTQXYZI0-9WUBRGO/|]+)\\b(|,|<|$)", replace:"<sym-auto>\\1</sym-auto>\\2")
} }
cost_parameter_script_nonspace := cost_parameter_script_nonspace :=
{ {
input := remove_tag(input, tag:"<sym-auto>") input := remove_tag(input, tag:"<sym-auto>")
replace(input, match:"(?<!<)([HSVECTQXYZI0-9WUBRG/|]+)", replace:"<sym-auto>\\1</sym-auto>") replace(input, match:"(?<!<)([HSVECTQXYZI0-9WUBRGO/|]+)", replace:"<sym-auto>\\1</sym-auto>")
} }
cost_parameter_dash := cost_parameter_dash :=
{ {
@@ -1318,7 +1318,7 @@ cost_parameter_dash :=
} }
localized_phy_reminder := localized_phy_reminder :=
{ {
phy_matches := break_text(card.casting_cost, match:"H(/[WUBRGC])*") phy_matches := break_text(card.casting_cost, match:"H(/[WUBRGOC])*")
if length(phy_matches) < 1 then "" else ( if length(phy_matches) < 1 then "" else (
multiple := length(phy_matches) > 1 multiple := length(phy_matches) > 1
phy_matches := make_list_unique(reverse_list(sort_list(phy_matches, order_by: length))) #First symbol is used for reminder text. Prefer using hybrid mana. phy_matches := make_list_unique(reverse_list(sort_list(phy_matches, order_by: length))) #First symbol is used for reminder text. Prefer using hybrid mana.

View File

@@ -312,7 +312,7 @@ get_alpha_percentage :=
############################################################## For the user ############################################################## For the user
#### Remove card codes #### Remove card codes
cc_filter := replace@(match:"^[CURMSL][WUBRGMZACL][0-9]+ ?[-—]? ?", replace:"") cc_filter := replace@(match:"^[CURMSL][WUBRGOMZACL][0-9]+ ?[-—]? ?", replace:"")
has_alchemy := contains@(match:"alchemy") has_alchemy := contains@(match:"alchemy")
strip_card_codes := { strip_card_codes := {
save := input save := input
@@ -507,25 +507,25 @@ crop_multi_image := {
############################################################## Sorting mana symbols ############################################################## Sorting mana symbols
#### correctly sort a mana symbol (no guild mana) #### correctly sort a mana symbol (no guild mana)
mana_sort := sort_text@(order: "\\?XYZI[0123456789]VHSFCAI(EKPLO)(WUBRG)") mana_sort := sort_text@(order: "\\?XYZI[0123456789]VHSFCAI(EKPLO)(WUBRGO)")
#### correctly sort wedge mana #### correctly sort wedge mana
mana_sort_wedge := sort_text@(order: "\\?XYZI[0123456789]VHSFCAI(EPOKL)(WBGUR)") mana_sort_wedge := sort_text@(order: "\\?XYZI[0123456789]VHSFCAI(EPOKL)(WBGUR)")
#### sort nothing #### sort nothing
mana_unsort := sort_text@(order:"[/\\?XYZI0123456789VHSCAIEKPLOMWUBRG]") mana_unsort := sort_text@(order:"[/\\?XYZI0123456789VHSCAIEKPLOMWUBRGO]")
#### correctly sort guild mana #### correctly sort guild mana
mana_sort_guild := sort_text@(order: "[\\?XYZI01234567890VHSFCAIEKPLOWUBRG/|]") + mana_sort_guild := sort_text@(order: "[\\?XYZI01234567890VHSFCAIEKPLOWUBRGO/|]") +
replace@( replace@(
#### No lookbehind :( #### No lookbehind :(
#match: "(?<!/)(./.|././.|./././.|.[|])(?!/)", #match: "(?<!/)(./.|././.|./././.|.[|])(?!/)",
match: "./.|././.|./././.|.[|]", match: "./.|././.|./././.|.[|]",
in_context: "(^|[^/])<match>($|[^/])", in_context: "(^|[^/])<match>($|[^/])",
replace: {sort_text(order:"in_place((WUBRG))")} replace: {sort_text(order:"in_place((WUBRGO))")}
) )
#### mana filter helpers #### mana filter helpers
mana_has_guild := match@(match: "[/|]") #### Is there guild or half mana in the input? mana_has_guild := match@(match: "[/|]") #### Is there guild or half mana in the input?
mana_is_wedge := { chosen(set.mana_cost_sorting, choice: "tarkir wedge sorting") and ( number_of_items(in: sort_text(order:"<WUBRG>", input), filter: "<WUBRG>") == 3 ) } mana_is_wedge := { chosen(set.mana_cost_sorting, choice: "tarkir wedge sorting") and ( number_of_items(in: sort_text(order:"<WUBRGO>", input), filter: "<WUBRGO>") == 3 ) }
mana_has_wedge := { mana_has_wedge := {
wedge_check := sort_text(order:"<WUBRG>", input) wedge_check := sort_text(order:"<WUBRGO>", input)
mana_is_wedge() and (wedge_check == "WUR" or wedge_check == "WBR" or wedge_check == "WBG" or wedge_check == "UBG" or wedge_check == "URG") mana_is_wedge() and (wedge_check == "WUR" or wedge_check == "WBR" or wedge_check == "WBG" or wedge_check == "UBG" or wedge_check == "URG")
} }
@@ -640,7 +640,7 @@ color_names_3 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + c
color_names_4 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + color_name(colors.2) + ", " + color_name(colors.3) } color_names_4 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + color_name(colors.2) + ", " + color_name(colors.3) }
color_names_5 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + color_name(colors.2) + ", " + color_name(colors.3) + ", " + color_name(colors.4) } color_names_5 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + color_name(colors.2) + ", " + color_name(colors.3) + ", " + color_name(colors.4) }
#### color based on mana cost, input == a mana cost #### color based on mana cost, input == a mana cost
color_filter := sort_text@(order: "<WUBRG>") color_filter := sort_text@(order: "<WUBRGO>")
color_filterH := sort_text@(order: "</>") color_filterH := sort_text@(order: "</>")
mana_to_color := { mana_to_color := {
count := number_of_items(in: colors) count := number_of_items(in: colors)
@@ -690,7 +690,7 @@ color_text_filter :=
) + ) +
#### keep only mana #### keep only mana
filter_text@(match: "<sym[^>]*>([^<]+)") + color_filter; filter_text@(match: "<sym[^>]*>([^<]+)") + color_filter;
#### get the land frame for a "WUBRG"-style input. #### get the land frame for a "WUBRGO"-style input.
land_multicolor := { land_multicolor := {
count := number_of_items(in: colors) count := number_of_items(in: colors)
if count == 0 then "land" if count == 0 then "land"
@@ -716,7 +716,7 @@ text_to_color := {
text := filter_text(match: "is (colorless|all colors|((blue|white|green|red|black|orange)((,|,? and) (blue|white|green|red|black|orange))*))", in_context: regex_escape(card_name)+"(</[-a-z]+>)* <match>\\.") text := filter_text(match: "is (colorless|all colors|((blue|white|green|red|black|orange)((,|,? and) (blue|white|green|red|black|orange))*))", in_context: regex_escape(card_name)+"(</[-a-z]+>)* <match>\\.")
if text != "" then ( if text != "" then (
if contains(text, match: "all colors") then ( if contains(text, match: "all colors") then (
colors := "WUBRG" colors := "WUBRGO"
if land == true then land_multicolor() if land == true then land_multicolor()
else mana_to_color(hybrid: "") else mana_to_color(hybrid: "")
) else ( ) else (
@@ -775,7 +775,7 @@ list_colors := {
list := replace(list, match:", ", replace:", and ", in_context:"<match>[^ ]+$") list := replace(list, match:", ", replace:", and ", in_context:"<match>[^ ]+$")
list list
} }
#### convert card_color to WUBRG #### convert card_color to WUBRGO
card_color_to_letters := { card_color_to_letters := {
color_string := trim_colors(input) color_string := trim_colors(input)
(if contains(color_string, match:"white") then "W" else "") (if contains(color_string, match:"white") then "W" else "")
@@ -878,7 +878,7 @@ basic_land_sort := {
else "MA" #### other basic lands else "MA" #### other basic lands
} }
hybrid_color_pair_sort := { hybrid_color_pair_sort := {
colors := sort_text(casting_cost, order: "<WUBRG>") colors := sort_text(casting_cost, order: "<WUBRGO>")
if not set.sort_hybrid_in_pairs then "HK" if not set.sort_hybrid_in_pairs then "HK"
else if colors == "WU" then "HA" else if colors == "WU" then "HA"
else if colors == "UB" then "HB" else if colors == "UB" then "HB"
@@ -893,7 +893,7 @@ hybrid_color_pair_sort := {
else "HK" else "HK"
} }
multi_color_pair_sort := { multi_color_pair_sort := {
colors := sort_text(casting_cost, order: "<WUBRG>") colors := sort_text(casting_cost, order: "<WUBRGO>")
if not set.sort_multicolor_in_pairs then "GK" if not set.sort_multicolor_in_pairs then "GK"
else if colors == "WU" then "GA" else if colors == "WU" then "GA"
else if colors == "UB" then "GB" else if colors == "UB" then "GB"
@@ -1040,11 +1040,11 @@ rarity_code := {
is_unsorted := { false } is_unsorted := { false }
############################################################## Statistics utilities ############################################################## Statistics utilities
#### Converted mana cost #### Converted mana cost
is_half_mana := match@(match: "1/2|[|][WUBRGS]") is_half_mana := match@(match: "1/2|[|][WUBRGOS]")
is_half_generic := match@(match: "1/2") is_half_generic := match@(match: "1/2")
is_colored_mana := match@(match: "[WUBRG]") is_colored_mana := match@(match: "[WUBRGO]")
only_numbers := filter_text@(match: "^[0123456789]+") only_numbers := filter_text@(match: "^[0123456789]+")
cmc_split := break_text@(match: "(?ix) 1/2 | [|][WUBRGC] | TK | [0-9](/[WUBRGCVHSCEKPLOTQ2]) | [0-9]+(?!/[WUBRGCVHSCEKPLOTQ2]) | [WUBRGCVHS0-9](/[WUBRGCVHS])\{0,4} ") cmc_split := break_text@(match: "(?ix) 1/2 | [|][WUBRGOC] | TK | [0-9](/[WUBRGOCVHSCEKPLOTQ2]) | [0-9]+(?!/[WUBRGOCVHSCEKPLOTQ2]) | [WUBRGOCVHS0-9](/[WUBRGOCVHS])\{0,4} ")
cmc := {to_number( cmc := {to_number(
for each sym in cmc_split(to_text()) do ( for each sym in cmc_split(to_text()) do (
numbers := only_numbers(sym) numbers := only_numbers(sym)
@@ -1237,11 +1237,11 @@ digital_map := [
for_mana_costs := { for_mana_costs := {
if input.separator_before == "—" and contains(input.param, match: " ") then ( #### multi word if input.separator_before == "—" and contains(input.param, match: " ") then ( #### multi word
if comma_count(input.param) == "," then ( #### two part if comma_count(input.param) == "," then ( #### two part
if match(match: "^[VHSCAIETKPLOQ\\?XYZIWUBRG0-9/|]+,", input.param) then #### starts with mana if match(match: "^[VHSCAIETKPLOQ\\?XYZIWUBRGO0-9/|]+,", input.param) then #### starts with mana
"{add}<param-cost>{alternative_cost(input.param, trim:combined_cost, s:action)}</param-cost>" #### "add" mana "{add}<param-cost>{alternative_cost(input.param, trim:combined_cost, s:action)}</param-cost>" #### "add" mana
else "<param-cost>{alternative_cost(input.param, trim:combined_cost, s:action)}</param-cost>{non}" #### else cost "non" else "<param-cost>{alternative_cost(input.param, trim:combined_cost, s:action)}</param-cost>{non}" #### else cost "non"
) else if contains(input.param, match: ",") then ( #### three+ parts ) else if contains(input.param, match: ",") then ( #### three+ parts
if match(match: "^[VHSCAIETKPLOQ\\?XYZIWUBRG0-9/|]+,", input.param) then #### starts with mana if match(match: "^[VHSCAIETKPLOQ\\?XYZIWUBRGO0-9/|]+,", input.param) then #### starts with mana
"{add}<param-cost>{alternative_cost(input.param, trim:long_cost, s:action)}</param-cost>" #### "add" mana with long formatting "{add}<param-cost>{alternative_cost(input.param, trim:long_cost, s:action)}</param-cost>" #### "add" mana with long formatting
else "<param-cost>{alternative_cost(input.param, trim:long_nomana_cost, s:action)}</param-cost>{non}" #### else cost "non" with long formatting else "<param-cost>{alternative_cost(input.param, trim:long_nomana_cost, s:action)}</param-cost>{non}" #### else cost "non" with long formatting
) else ) else
@@ -1253,7 +1253,7 @@ for_mana_costs := {
}@(non:" in addition to any other costs", action:false, add:"") }@(non:" in addition to any other costs", action:false, add:"")
#### return bool; is the input is a simple mana cost? #### return bool; is the input is a simple mana cost?
is_mana_cost := { is_mana_cost := {
match(match: "^[VHSCAIETKPLOQ\\?XYZIWUBRG0-9/|]+$", input.param) match(match: "^[VHSCAIETKPLOQ\\?XYZIWUBRGO0-9/|]+$", input.param)
} }
#### Convert extra costs #### Convert extra costs
long_cost := replace@(match:", [A-Z]", replace: { to_lower() } ) long_cost := replace@(match:", [A-Z]", replace: { to_lower() } )
@@ -1262,7 +1262,7 @@ long_nomana_cost := replace@(match:"[A-Z]", replace: { to_lower() })
lower_first := replace@(match:"^[A-Z]", replace: { to_lower() }) lower_first := replace@(match:"^[A-Z]", replace: { to_lower() })
combined_cost := replace@(match:", [A-Z]", replace: { to_lower() })+ combined_cost := replace@(match:", [A-Z]", replace: { to_lower() })+
replace@(match:",", replace:" and")+ replace@(match:",", replace:" and")+
replace@(match:"^[VHSCETKPLOQ\\?XYZIWUBRG0-9/|]+", in_context: "(^|[[:space:]])<match>(?![a-z])", replace: "<sym-auto>&</sym-auto>")+ replace@(match:"^[VHSCETKPLOQ\\?XYZIWUBRGO0-9/|]+", in_context: "(^|[[:space:]])<match>(?![a-z])", replace: "<sym-auto>&</sym-auto>")+
replace@(match:"^[A-Z]", replace: { to_lower() }) replace@(match:"^[A-Z]", replace: { to_lower() })
alternative_cost := { alternative_cost := {
input := trim(input) input := trim(input)
@@ -1323,7 +1323,7 @@ protection_code := {
else if match(input, match:"^(converted|mana|power|toughness)") then "anything with " + replace(input, match:"and from", replace:"or", in_context:" <match> ") else if match(input, match:"^(converted|mana|power|toughness)") then "anything with " + replace(input, match:"and from", replace:"or", in_context:" <match> ")
else if contains(input, match:"the chosen player") then "anything " + replace(input, match:"the chosen", replace:"controlled by that") else if contains(input, match:"the chosen player") then "anything " + replace(input, match:"the chosen", replace:"controlled by that")
else if contains(input, match:"the chosen") then "anything with " + replace(input, match:"the chosen", replace:"that") else if contains(input, match:"the chosen") then "anything with " + replace(input, match:"the chosen", replace:"that")
else if contains(input, match:"all colors") then "anything " + replace(input, match:"all colors", replace:"that's white, blue, black, red, or green") else if contains(input, match:"all colors") then "anything " + replace(input, match:"all colors", replace:"that's white, blue, black, red, green, or orange")
else if match(input, match:"^you$") then "anything you control" else if match(input, match:"^you$") then "anything you control"
else if match(input, match:"^its owner$") then "anything its owner controls" else if match(input, match:"^its owner$") then "anything its owner controls"
else if match(input, match:"^(each of )?your opponents$") then "anything " + replace(input, match:"(each of )?your opponents", replace:"controlled by those players") else if match(input, match:"^(each of )?your opponents$") then "anything " + replace(input, match:"(each of )?your opponents", replace:"controlled by those players")
@@ -1349,7 +1349,7 @@ protection_code := {
output output
} }
phy_reminder := { phy_reminder := {
phy_match := filter_text(input, match:"(/[WUBRG])+", in_context:"H<match>") phy_match := filter_text(input, match:"(/[WUBRGO])+", in_context:"H<match>")
letters := split_text(phy_match, match:"/") letters := split_text(phy_match, match:"/")
reminder_text := "" reminder_text := ""
if length(letters) == 2 then if length(letters) == 2 then
@@ -1533,8 +1533,8 @@ mana_context :=
| <match>[ ]can[ ]be[ ]paid | <match>[ ]can[ ]be[ ]paid
| (pays?|additional|costs?|the|adds?|pay(ed)?[ ](with|using)) #### pay X. creatures cost 1 less. pay an additional G. | (pays?|additional|costs?|the|adds?|pay(ed)?[ ](with|using)) #### pay X. creatures cost 1 less. pay an additional G.
([ ]either)? #### pay either X or Y ([ ]either)? #### pay either X or Y
([ ](<sym[^>]*>)?[-+=]?[VHSCETKPLOQ\\?XYZIEWUBRG0-9/|]+(</sym[^>]*>)?,)* #### pay X, Y or Z ([ ](<sym[^>]*>)?[-+=]?[VHSCETKPLOQ\\?XYZIEWUBRGO0-9/|]+(</sym[^>]*>)?,)* #### pay X, Y or Z
([ ](<sym[^>]*>)?[-+=]?[VHSCETKPLOQ\\?XYZIEWUBRG0-9/|]+(</sym[^>]*>)?[ ](and|or|and/or))* #### pay X or Y ([ ](<sym[^>]*>)?[-+=]?[VHSCETKPLOQ\\?XYZIEWUBRGO0-9/|]+(</sym[^>]*>)?[ ](and|or|and/or))* #### pay X or Y
[ ]<match> [ ]<match>
( (
[,.)\"”]|$ #### (end of word) [,.)\"”]|$ #### (end of word)
@@ -1894,7 +1894,7 @@ text_filter :=
} + } +
#### step 4 : explict non mana symbols #### step 4 : explict non mana symbols
replace@( replace@(
match: "\\][-+=]?[VHSCEKPLOTQINF\\?XYZIWUBRG0-9/|]+\\[", match: "\\][-+=]?[VHSCEKPLOTQINF\\?XYZIWUBRGO0-9/|]+\\[",
replace: {"<nosym>" + mana_filter_t() + "</nosym>"} replace: {"<nosym>" + mana_filter_t() + "</nosym>"}
) + ) +
#### step 5 : add mana & tap symbols #### step 5 : add mana & tap symbols
@@ -1909,13 +1909,13 @@ text_filter :=
replace: {"<sym-auto>" + _1 + "</sym-auto>" + _3} replace: {"<sym-auto>" + _1 + "</sym-auto>" + _3}
) + ) +
replace@( replace@(
match: "\\b[VHSCEKPLOTQ\\?XYZIWUBRG0-9/|]+\\b", match: "\\b[VHSCEKPLOTQ\\?XYZIWUBRGO0-9/|]+\\b",
in_context: mana_context, in_context: mana_context,
replace: {"<sym-auto>" + mana_filter_t() + "</sym-auto>"} replace: {"<sym-auto>" + mana_filter_t() + "</sym-auto>"}
) + ) +
#### step 5b : remove false positive mana & tap symbols #### step 5b : remove false positive mana & tap symbols
replace@( replace@(
match: "<sym-auto>([VHSCEKPLOTQ\\?XYZIWUBRG0-9/|]+)</sym-auto>", match: "<sym-auto>([VHSCEKPLOTQ\\?XYZIWUBRGO0-9/|]+)</sym-auto>",
in_context: mana_un_context, in_context: mana_un_context,
replace: "\\1" replace: "\\1"
) + ) +
@@ -1925,7 +1925,7 @@ text_filter :=
replace: {"<sym>INF</sym>" } replace: {"<sym>INF</sym>" }
) + ) +
replace@( replace@(
match: "\\[[-+=]?[VHSCEKPLOTQ\\?XYZIWUBRG0-9/|]+\\]", match: "\\[[-+=]?[VHSCEKPLOTQ\\?XYZIWUBRGO0-9/|]+\\]",
replace: {"<sym>" + mana_filter_t() + "</sym>"} replace: {"<sym>" + mana_filter_t() + "</sym>"}
) + ) +
#### step 6a : auto reminder #### step 6a : auto reminder

View File

@@ -397,8 +397,8 @@ devotion_filters_statistic := [
G: filter_text@(match:"O") G: filter_text@(match:"O")
C: filter_text@(match:"C") C: filter_text@(match:"C")
] ]
color_pip_break_statistic := break_text@(match:"([A-Z0-9]/|[|])*[WUBRG]") color_pip_break_statistic := break_text@(match:"([A-Z0-9]/|[|])*[WUBRGO]")
color_code_break_statistic := break_text@(match:"[WUBRGC]") color_code_break_statistic := break_text@(match:"[WUBRGOC]")
symbol_aggregate_statistic := symbol_aggregate_statistic :=
{ {
devotion := devotion_filters_statistic[symbol](input) devotion := devotion_filters_statistic[symbol](input)