summaryrefslogtreecommitdiff
path: root/slugify
diff options
context:
space:
mode:
authorAnton Bobov <abobov@gmail.com>2020-10-30 20:58:19 +0500
committerAnton Bobov <abobov@gmail.com>2020-10-30 20:58:19 +0500
commit5e03181459ac8f951b4cc94e25c153549f4f7cef (patch)
tree9f64e483f547bb9a041fc1aba39cd5b0fc8a7ae6 /slugify
parent98fea5f02034cb1f3b83b6c4c7dae757ac4b1c1d (diff)
Add slugify, fix remind scripts.
Diffstat (limited to 'slugify')
-rwxr-xr-xslugify67
1 files changed, 67 insertions, 0 deletions
diff --git a/slugify b/slugify
new file mode 100755
index 0000000..26b58e0
--- /dev/null
+++ b/slugify
@@ -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()