move the case-ref analysis to a helper
This commit is contained in:
parent
8fd19928b2
commit
169ec4fa59
1 changed files with 23 additions and 33 deletions
|
|
@ -235,6 +235,26 @@ class RecogError(Exception):
|
||||||
class LanguageError(Exception):
|
class LanguageError(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def _get_case_ref(string):
|
||||||
|
"""
|
||||||
|
Helper function which parses capitalization and
|
||||||
|
returns the appropriate case-ref character for emotes.
|
||||||
|
"""
|
||||||
|
# default to retaining the original case
|
||||||
|
case = "~"
|
||||||
|
# internal flags for the case used for the original /query
|
||||||
|
# - t for titled input (like /Name)
|
||||||
|
# - ^ for all upercase input (like /NAME)
|
||||||
|
# - v for lower-case input (like /name)
|
||||||
|
# - ~ for mixed case input (like /nAmE)
|
||||||
|
if string.istitle():
|
||||||
|
case = "t"
|
||||||
|
elif string.isupper():
|
||||||
|
case = "^"
|
||||||
|
elif string.islower():
|
||||||
|
case = "v"
|
||||||
|
|
||||||
|
return case
|
||||||
|
|
||||||
# emoting mechanisms
|
# emoting mechanisms
|
||||||
def parse_language(speaker, emote):
|
def parse_language(speaker, emote):
|
||||||
|
|
@ -368,22 +388,7 @@ def parse_sdescs_and_recogs(sender, candidates, string, search_mode=False, case_
|
||||||
# first, find and replace any self-refs
|
# first, find and replace any self-refs
|
||||||
for self_match in list(_RE_SELF_REF.finditer(string)):
|
for self_match in list(_RE_SELF_REF.finditer(string)):
|
||||||
matched = self_match.group()
|
matched = self_match.group()
|
||||||
case = "~" # retain original case of sdesc
|
case = _get_case_ref(matched.lstrip(_PREFIX)) if case_sensitive else "~"
|
||||||
if case_sensitive:
|
|
||||||
# case sensitive mode
|
|
||||||
# internal flags for the case used for the original /query
|
|
||||||
# - t for titled input (like /Name)
|
|
||||||
# - ^ for all upercase input (like /NAME)
|
|
||||||
# - v for lower-case input (like /name)
|
|
||||||
# - ~ for mixed case input (like /nAmE)
|
|
||||||
matchtext = matched.lstrip(_PREFIX)
|
|
||||||
if matchtext.istitle():
|
|
||||||
case = "t"
|
|
||||||
elif matchtext.isupper():
|
|
||||||
case = "^"
|
|
||||||
elif matchtext.islower():
|
|
||||||
case = "v"
|
|
||||||
|
|
||||||
key = f"#{sender.id}{case}"
|
key = f"#{sender.id}{case}"
|
||||||
# replaced with ref
|
# replaced with ref
|
||||||
string = string.replace(matched,f"{{{key}}}")
|
string = string.replace(matched,f"{{{key}}}")
|
||||||
|
|
@ -481,24 +486,9 @@ def parse_sdescs_and_recogs(sender, candidates, string, search_mode=False, case_
|
||||||
errors.append(_EMOTE_NOMATCH_ERROR.format(ref=marker_match.group()))
|
errors.append(_EMOTE_NOMATCH_ERROR.format(ref=marker_match.group()))
|
||||||
elif nmatches == 1:
|
elif nmatches == 1:
|
||||||
# a unique match - parse into intermediary representation
|
# a unique match - parse into intermediary representation
|
||||||
case = "~" # retain original case of sdesc
|
case = _get_case_ref(marker_match.group()) if case_sensitive else "~"
|
||||||
if case_sensitive:
|
|
||||||
# case sensitive mode
|
|
||||||
# internal flags for the case used for the original /query
|
|
||||||
# - t for titled input (like /Name)
|
|
||||||
# - ^ for all upercase input (like /NAME)
|
|
||||||
# - v for lower-case input (like /name)
|
|
||||||
# - ~ for mixed case input (like /nAmE)
|
|
||||||
matchtext = marker_match.group().lstrip(_PREFIX)
|
|
||||||
if matchtext.istitle():
|
|
||||||
case = "t"
|
|
||||||
elif matchtext.isupper():
|
|
||||||
case = "^"
|
|
||||||
elif matchtext.islower():
|
|
||||||
case = "v"
|
|
||||||
|
|
||||||
key = f"#{obj.id}{case}"
|
|
||||||
# recombine emote with matched text replaced by ref
|
# recombine emote with matched text replaced by ref
|
||||||
|
key = f"#{obj.id}{case}"
|
||||||
string = f"{head}{{{key}}}{tail}"
|
string = f"{head}{{{key}}}{tail}"
|
||||||
mapping[key] = obj
|
mapping[key] = obj
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue