# Path: charset_normalizer/constant.py
# COMMON_SAFE_ASCII_CHARACTERS = {
#     "<",
#     ">",
#     "=",
#     ":",
#     "/",
#     "&",
#     ";",
#     "{",
#     "}",
#     "[",
#     "]",
#     ",",
#     "|",
#     '"',
#     "-",
# }  # type: Set[str]
# 
# UNICODE_SECONDARY_RANGE_KEYWORD = [
#     "Supplement",
#     "Extended",
#     "Extensions",
#     "Modifier",
#     "Marks",
#     "Punctuation",
#     "Symbols",
#     "Forms",
#     "Operators",
#     "Miscellaneous",
#     "Drawing",
#     "Block",
#     "Shapes",
#     "Supplemental",
#     "Tags",
# ]  # type: List[str]


from functools import lru_cache
from typing import List, Optional
from .constant import COMMON_SAFE_ASCII_CHARACTERS, UNICODE_SECONDARY_RANGE_KEYWORD
from .utils import (
    is_accentuated,
    is_ascii,
    is_case_variable,
    is_cjk,
    is_emoticon,
    is_hangul,
    is_hiragana,
    is_katakana,
    is_latin,
    is_punctuation,
    is_separator,
    is_symbol,
    is_thai,
    remove_accent,
    unicode_range,
)
def is_suspiciously_successive_range(
    unicode_range_a: Optional[str], unicode_range_b: Optional[str]
) -> bool:
    """
    Determine if two Unicode range seen next to each other can be considered as suspicious.
    """
    if unicode_range_a is None or unicode_range_b is None:
        return True

    if unicode_range_a == unicode_range_b:
        return False

    if "Latin" in unicode_range_a and "Latin" in unicode_range_b:
        return False

    if "Emoticons" in unicode_range_a or "Emoticons" in unicode_range_b:
        return False

    # Latin characters can be accompanied with a combining diacritical mark
    # eg. Vietnamese.
    if ("Latin" in unicode_range_a or "Latin" in unicode_range_b) and (
        "Combining" in unicode_range_a or "Combining" in unicode_range_b
    ):
        return False

    keywords_range_a, keywords_range_b = unicode_range_a.split(
        " "
    ), unicode_range_b.split(" ")

    for el in keywords_range_a:

# Path: charset_normalizer/constant.py
# COMMON_SAFE_ASCII_CHARACTERS = {
#     "<",
#     ">",
#     "=",
#     ":",
#     "/",
#     "&",
#     ";",
#     "{",
#     "}",
#     "[",
#     "]",
#     ",",
#     "|",
#     '"',
#     "-",
# }  # type: Set[str]
# 
# UNICODE_SECONDARY_RANGE_KEYWORD = [
#     "Supplement",
#     "Extended",
#     "Extensions",
#     "Modifier",
#     "Marks",
#     "Punctuation",
#     "Symbols",
#     "Forms",
#     "Operators",
#     "Miscellaneous",
#     "Drawing",
#     "Block",
#     "Shapes",
#     "Supplemental",
#     "Tags",
# ]  # type: List[str]


# Path: charset_normalizer/md.py
from functools import lru_cache
from typing import List, Optional
from .constant import COMMON_SAFE_ASCII_CHARACTERS, UNICODE_SECONDARY_RANGE_KEYWORD
from .utils import (
    is_accentuated,
    is_ascii,
    is_case_variable,
    is_cjk,
    is_emoticon,
    is_hangul,
    is_hiragana,
    is_katakana,
    is_latin,
    is_punctuation,
    is_separator,
    is_symbol,
    is_thai,
    remove_accent,
    unicode_range,
)

def is_suspiciously_successive_range(
    unicode_range_a: Optional[str], unicode_range_b: Optional[str]
) -> bool:
    """
    Determine if two Unicode range seen next to each other can be considered as suspicious.
    """
    if unicode_range_a is None or unicode_range_b is None:
        return True

    if unicode_range_a == unicode_range_b:
        return False

    if "Latin" in unicode_range_a and "Latin" in unicode_range_b:
        return False

    if "Emoticons" in unicode_range_a or "Emoticons" in unicode_range_b:
        return False

    # Latin characters can be accompanied with a combining diacritical mark
    # eg. Vietnamese.
    if ("Latin" in unicode_range_a or "Latin" in unicode_range_b) and (
        "Combining" in unicode_range_a or "Combining" in unicode_range_b
    ):
        return False

    keywords_range_a, keywords_range_b = unicode_range_a.split(
        " "
    ), unicode_range_b.split(" ")

    for el in keywords_range_a:

        if el in UNICODE_SECONDARY_RANGE_KEYWORD: