diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 04d63e0e862..e97fb5729ea 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -545,6 +545,35 @@ proc/checkhtml(var/t) text = copytext(text, 1, MAX_PAPER_MESSAGE_LEN) return text +/proc/convert_pencode_arg(text, tag, arg) + arg = replacetext(replacetext(html_encode(arg), "'", ""), "\"", "") + if(tag == "class") + return "" + + if(tag == "style") + return "" + + if(tag == "img") + var/list/img_props = splittext(arg, ";") + if(img_props.len == 3) + return "" + if(img_props.len == 2) + return "" + return "" + + return text + +/proc/admin_pencode_to_html() + var/text = pencode_to_html(arglist(args)) + var/regex/R = new(@"\[(.*?) (.*?)\]", "ge") + text = R.Replace(text, /proc/convert_pencode_arg) + + text = replacetext(text, "\[/class\]", "") + text = replacetext(text, "\[/style\]", "") + text = replacetext(text, "\[/img\]", "") + + return text + /proc/html_to_pencode(text) text = replacetext(text, "
", "\n") text = replacetext(text, "
", "\[center\]") diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 3b282fa6893..8201a7cc303 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -642,7 +642,7 @@ var/list/admin_verbs_ticket = list( if(!message) return for(var/mob/V in hearers(O)) - V.show_message(message, 2) + V.show_message(admin_pencode_to_html(message), 2) log_admin("[key_name(usr)] made [O] at [O.x], [O.y], [O.z] make a sound") message_admins("[key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z] make a sound") feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index ebe2219d90b..69f9813627f 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2181,7 +2181,7 @@ if(!input) qdel(P) return - input = P.parsepencode(input) // Encode everything from pencode to html + input = admin_pencode_to_html(html_encode(input)) // Encode everything from pencode to html var/customname = clean_input("Pick a title for the fax.", "Fax Title", , owner) if(!customname) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 1d35a621217..126b1d14d14 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -110,7 +110,7 @@ if(!msg) return else - msg = pencode_to_html(msg) + msg = admin_pencode_to_html(msg) var/recieve_span = "playerreply" var/send_pm_type = " " diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 6a4d1e8dc18..7484850f5e2 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -58,6 +58,9 @@ if(!msg) return + + msg = admin_pencode_to_html(msg) + if(usr) if(usr.client) if(usr.client.holder) @@ -136,7 +139,7 @@ if( !msg ) return - msg = pencode_to_html(msg) + msg = admin_pencode_to_html(msg) to_chat(M, msg) log_admin("DirectNarrate: [key_name(usr)] to ([key_name(M)]): [msg]")