Skip to content

Commit

Permalink
Merge pull request #172 from kjd/optimize-contextj
Browse files Browse the repository at this point in the history
More efficient resolution of joiner contexts
  • Loading branch information
kjd authored Apr 11, 2024
2 parents cd58a23 + 0394ec7 commit c1b3154
Show file tree
Hide file tree
Showing 3 changed files with 2,164 additions and 62 deletions.
16 changes: 8 additions & 8 deletions idna/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,11 @@ def valid_contextj(label: str, pos: int) -> bool:
joining_type = idnadata.joining_types.get(ord(label[i]))
if joining_type == ord('T'):
continue
if joining_type in [ord('L'), ord('D')]:
elif joining_type in [ord('L'), ord('D')]:
ok = True
break
else:
break

if not ok:
return False
Expand All @@ -162,9 +164,11 @@ def valid_contextj(label: str, pos: int) -> bool:
joining_type = idnadata.joining_types.get(ord(label[i]))
if joining_type == ord('T'):
continue
if joining_type in [ord('R'), ord('D')]:
elif joining_type in [ord('R'), ord('D')]:
ok = True
break
else:
break
return ok

if cp_value == 0x200d:
Expand Down Expand Up @@ -236,12 +240,8 @@ def check_label(label: Union[str, bytes, bytearray]) -> None:
if intranges_contain(cp_value, idnadata.codepoint_classes['PVALID']):
continue
elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTJ']):
try:
if not valid_contextj(label, pos):
raise InvalidCodepointContext('Joiner {} not allowed at position {} in {}'.format(
_unot(cp_value), pos+1, repr(label)))
except ValueError:
raise IDNAError('Unknown codepoint adjacent to joiner {} at position {} in {}'.format(
if not valid_contextj(label, pos):
raise InvalidCodepointContext('Joiner {} not allowed at position {} in {}'.format(
_unot(cp_value), pos+1, repr(label)))
elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTO']):
if not valid_contexto(label, pos):
Expand Down
Loading

0 comments on commit c1b3154

Please sign in to comment.