#!/usr/bin/env python3 import argparse import re import sys # https://en.wikipedia.org/wiki/Romanization_of_Russian # System: Passport (2013), ICAO TRANSLIT_RU_EN = str.maketrans({ 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'e', 'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'i', 'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 'ф': 'f', 'х': 'kh', 'ц': 'ts', 'ч': 'ch', 'ш': 'sh', 'щ': 'shch', 'ъ': 'ie', 'ы': 'y', 'ь': None, 'ю': 'iu', 'я': 'ua', }) def get_names(args): if args.words: return args.words return [line.rstrip() for line in sys.stdin] def main(): parser = argparse.ArgumentParser() parser.add_argument("-t", "--translit", action='store_true', help="Transliterate Russian") parser.add_argument("words", nargs="*", help="Words to slugify") args = parser.parse_args() pattern = r"[^\w\d]+" for name in get_names(args): slug = re.sub(pattern, "-", name) slug = re.sub(pattern + "$", "", slug) slug = re.sub("^" + pattern, "", slug) slug = slug.lower() if args.translit: slug = slug.translate(TRANSLIT_RU_EN) print(slug) if __name__ == "__main__": main()