From 82ca0e2e5d0fe62fe77ec162098d2b08dfa09161 Mon Sep 17 00:00:00 2001 From: Unknown Date: Fri, 13 Dec 2019 16:03:36 -0500 Subject: [PATCH] Fixes say code bug with 513 --- code/_global_vars/lists/misc.dm | 1 + code/modules/mob/emote.dm | 4 +-- code/modules/mob/hear_say.dm | 42 ++++++-------------------- code/modules/mob/language/synthetic.dm | 2 +- code/modules/mob/say.dm | 2 +- 5 files changed, 15 insertions(+), 36 deletions(-) create mode 100644 code/_global_vars/lists/misc.dm diff --git a/code/_global_vars/lists/misc.dm b/code/_global_vars/lists/misc.dm new file mode 100644 index 0000000000..aa9680a5f6 --- /dev/null +++ b/code/_global_vars/lists/misc.dm @@ -0,0 +1 @@ +GLOBAL_LIST_INIT(speech_toppings, list("|" = "i", "+" = "b", "_" = "u")) diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 858421143e..3ead9dedd4 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -22,7 +22,7 @@ if (message) - message = say_emphasis(message) + message = encode_html_emphasis(message) // Hearing gasp and such every five seconds is not good emotes were not global for a reason. // Maybe some people are okay with that. @@ -74,7 +74,7 @@ else input = message - input = say_emphasis(input) + input = encode_html_emphasis(input) if(input) log_ghostemote(input, src) diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 1fd71995dc..ad3689e8c5 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -45,7 +45,7 @@ if(italics) message = "[message]" - message = say_emphasis(message) + message = encode_html_emphasis(message) var/track = null if(istype(src, /mob/observer/dead)) @@ -115,36 +115,14 @@ /mob/living/silicon/ai/special_mentions() return list("AI") // AI door! -// Converts specific characters, like +, |, and _ to formatted output. -/mob/proc/say_emphasis(var/message) - message = encode_html_emphasis(message, "|", "i") - message = encode_html_emphasis(message, "+", "b") - message = encode_html_emphasis(message, "_", "u") - return message - -// Replaces a character inside message with html tags. Note that html var must not include brackets. -// Will not create an open html tag if it would not have a closing one. -/proc/encode_html_emphasis(var/message, var/char, var/html) - var/i = 20 // Infinite loop safety. - var/pattern = "(?") - 1 - - // Now replace both. - message = replacetext(message, char, "<[html]>", first, first + 1) - message = replacetext(message, char, "", second + length_increase, second + length_increase + 1) - - // Check again to see if we need to keep going. - first = re.Find(message) - second = re.Find(message, first + 1) - i-- - if(!i) - CRASH("Possible infinite loop occured in encode_html_emphasis().") - return message +/proc/encode_html_emphasis(message) + var/tagged_message = message + for(var/delimiter in GLOB.speech_toppings) + var/regex/R = new("\\[delimiter](.+?)\\[delimiter]","g") + var/tag = GLOB.speech_toppings[delimiter] + tagged_message = R.Replace(tagged_message,"<[tag]>$1") + + return tagged_message /mob/proc/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="") @@ -240,7 +218,7 @@ speaker_name = "[speaker.real_name] ([speaker_name])" track = "[speaker_name] ([ghost_follow_link(speaker, src)])" - message = say_emphasis(message) + message = encode_html_emphasis(message) var/formatted if(language) diff --git a/code/modules/mob/language/synthetic.dm b/code/modules/mob/language/synthetic.dm index 36dd57bc69..e39674e037 100644 --- a/code/modules/mob/language/synthetic.dm +++ b/code/modules/mob/language/synthetic.dm @@ -18,7 +18,7 @@ if (!message) return - message = speaker.say_emphasis(message) + message = encode_html_emphasis(message) var/message_start = "[name], [speaker.name]" var/message_body = "[speaker.say_quote(message)], \"[message]\"" diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 0b80b937b2..9a0a72ab92 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -47,7 +47,7 @@ usr << "You have deadchat muted." return - message = say_emphasis(message) + message = encode_html_emphasis(message) say_dead_direct("[pick("complains","moans","whines","laments","blubbers")], \"[message]\"", src)