diff options
| author | Anton Bobov <abobov@gmail.com> | 2020-10-30 20:58:19 +0500 |
|---|---|---|
| committer | Anton Bobov <abobov@gmail.com> | 2020-10-30 20:58:19 +0500 |
| commit | 5e03181459ac8f951b4cc94e25c153549f4f7cef (patch) | |
| tree | 9f64e483f547bb9a041fc1aba39cd5b0fc8a7ae6 /slugify | |
| parent | 98fea5f02034cb1f3b83b6c4c7dae757ac4b1c1d (diff) | |
Add slugify, fix remind scripts.
Diffstat (limited to 'slugify')
| -rwxr-xr-x | slugify | 67 |
1 files changed, 67 insertions, 0 deletions
@@ -0,0 +1,67 @@ +#!/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() |
