Files
Bubberstation/code/datums/components/codeword_hearing.dm
SkyratBot 9096f96997 [MIRROR] Split malf AI antag datum away from traitor, enable malf AI roundstart ruleset. (#5635)
* Split malf AI antag datum away from traitor, enable malf AI roundstart ruleset.

* AAAAA

* AAAAA

Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
Co-authored-by: Gandalf <jzo123@hotmail.com>
2021-05-13 15:13:09 +01:00

51 lines
2.1 KiB
Plaintext

/**
* Component that allows for highlighting of words or phrases in chat based on regular expressions.
*
* Hooks into the parent's COMSIG_MOVABLE_HEAR signal to wrap every regex match in the message
* between <span class=''></span> tags with the provided span class. This modifies the output that
* is sent to the parent's chat window.
*
* Removal of this component should be done by calling [GetComponents(/datum/component/codeword_hearing)]
* on the parent and then iterating through all components calling [delete_if_from_source(source)].
*/
/datum/component/codeword_hearing
dupe_mode = COMPONENT_DUPE_ALLOWED
/// Regex for matching words or phrases you want highlighted.
var/regex/replace_regex
/// The <span class=''> to use for highlighting matches.
var/span_class
/// The source of this component. Used to identify the source in delete_if_from_source since this component is COMPONENT_DUPE_ALLOWED.
var/source
/datum/component/codeword_hearing/Initialize(regex/codeword_regex, highlight_span_class, component_source)
if(!ismovable(parent))
return COMPONENT_INCOMPATIBLE
replace_regex = codeword_regex
span_class = highlight_span_class
source = component_source
return ..()
/datum/component/codeword_hearing/RegisterWithParent()
RegisterSignal(parent, COMSIG_MOVABLE_HEAR, .proc/handle_hearing)
/datum/component/codeword_hearing/UnregisterFromParent()
UnregisterSignal(parent, COMSIG_MOVABLE_HEAR)
/// Callback for COMSIG_MOVABLE_HEAR which highlights syndicate code phrases in chat.
/datum/component/codeword_hearing/proc/handle_hearing(datum/source, list/hearing_args)
SIGNAL_HANDLER
var/message = hearing_args[HEARING_RAW_MESSAGE]
message = replace_regex.Replace(message, "<span class='[span_class]'>$1</span>")
hearing_args[HEARING_RAW_MESSAGE] = message
/// Since a parent can have multiple of these components on them simultaneously, this allows a datum to delete components from a specific source.
/datum/component/codeword_hearing/proc/delete_if_from_source(component_source)
if(source == component_source)
qdel(src)
return TRUE
return FALSE