#!/usr/bin/env python3 """check-pride — поиск ЛГБТ-символики (🏳️🌈, 🏳️⚧️, ⚧, радуга) в шаблонах GtS. Надёжная проверка юникода (нормализация NFC/NFD) в отличие от grep-эмодзи. Использование: check_pride.py <каталог_шаблонов>""" import os import sys # Символы в NFKD-форме (нормализуем и искомое, и файлы) TARGETS = ["\U0001f3f3\ufe0f\u200d\U0001f308", # 🏳️‍🌈 "\U0001f3f3\ufe0f\u200d\U000026a7\ufe0f", # 🏳️‍⚧️ "\U000026a7\ufe0f", # ⚧️ "pride", "rainbow"] TARGETS_NFKD = [t.replace("\ufe0f", "") for t in ["\U0001f3f3\ufe0f\u200d\U0001f308", "\U0001f3f3\ufe0f\u200d\000026a7\ufe0f"]] # без VS def main(): if len(sys.argv) != 2: print("Usage: check_pride.py ", file=sys.stderr) return 2 root = sys.argv[1] import unicodedata targets = TARGETS + TARGETS_NFKD found = [] for dirpath, _dirnames, filenames in os.walk(root): for fn in filenames: p = os.path.join(dirpath, fn) try: data = open(p, "rb").read().decode("utf-8", errors="ignore") except OSError: continue nfd = unicodedata.normalize("NFD", data) nfkd = unicodedata.normalize("NFKD", data) for t in targets: tnfd = unicodedata.normalize("NFD", t) if tnfd in nfd or t in nfkd or t.lower() in data.lower(): found.append((p, t)) break if found: print("ОБНАРУЖЕНЫ ЛГБТ-символы:") for p, t in found[:10]: print(f" {p}: {t!r}") return 1 print("OK: флагов не найдено") return 0 if __name__ == "__main__": sys.exit(main())