Skip to content

Instantly share code, notes, and snippets.

@kontur
Created February 17, 2023 10:37
Show Gist options
  • Save kontur/9a7a473f0f1d9e49f33814e59dddc087 to your computer and use it in GitHub Desktop.
Save kontur/9a7a473f0f1d9e49f33814e59dddc087 to your computer and use it in GitHub Desktop.
Cyrillic script alphabet order comparison
# The Cyrillic language comparison table from https://en.wikipedia.org/wiki/Cyrillic_alphabets#Summary_table (chruch slavonic as last line!)
table = """
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ю Я
А Б В Г Д Дж Дз Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ь Ю Я
А Б В Г Д Ѓ Ѕ Е Ж З И Ј К Л Љ М Н Њ О П Р С Т Ќ У Ф Х Ц Ч Џ Ш
А Б В Г Д Ђ Е Ж З И Ј К Л Љ М Н Њ О П Р С Т Ћ У Ф Х Ц Ч Џ Ш
А Б В Г Д Ђ Е Ж З З́ И Ј К Л Љ М Н Њ О П Р С С́ Т Ћ У Ф Х Ц Ч Џ Ш
А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
А Б В Г Ґ Д Е Ё Ж З І Й К Л М Н О П Р С Т У Ў Ф Х Ц Ч Ш ’ Ы Ь Э Ю Я
А Б В Г Ґ Д Е Є Ж З И І Ї Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ ’ Ь Ю Я
А Б В Г Ґ Д Е Є Ё Ж З И І Ы Ї Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ѣ Ь Ю Я
А Б В Г Г' Д Е Ә Ә' Ж З И Й К К' Л М Н О Ö П П' Р Р' С Т Т' У Ф Х Һ Һ' Ч Ч' Ш Щ Ь Э Ԛ Ԝ
А Ӕ Б В Г Гъ Д Дж Дз Е Ё Ж З И Й К Къ Л М Н О П Пъ Р С Т Тъ У Ф Х Хъ Ц Цъ Ч Чъ Ш Щ Ъ Ы Ь Э Ю Я
А Б В Г Ғ Д Е Ё Ж З И Ӣ Й К Қ Л М Н О П Р С Т У Ӯ Ф Х Ҳ Ч Ҷ Ш Ъ Э Ю Я
А Б В Г Д Е Ж Ӂ З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Ы Ь Э Ю Я
А Б В Г Д Е Ё Ж З И І Й К Л М Н О Ӧ П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
А Б В Г Д Е Ё Ж З И Й К Л М Н Ҥ О Ӧ П Р С Т У Ӱ Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
А Ӓ Б В Г Д Е Ё Ж З И Й К Л М Н О Ӧ П Р С Т У Ӱ Ф Х Ц Ч Ш Щ Ъ Ы Ӹ Ь Э Ю Я
А Ӓ Б В Г Д Е Ё Ж З И Й Ҋ Ј К Л Ӆ М Ӎ Н Ӊ Ӈ О П Р Ҏ С Т У Ф Х Һ Ц Ч Ш Щ Ъ Ы Ь Ҍ Э Ӭ Ю Я
А Б В Г Ғ Д Е Ә Ё Ж З Ы И Ј Й К Ҝ Л М Н О Ө П Р С Т У Ү Ф Х Һ Ц Ч Ҹ Ш Щ Ъ Ы Ь Э Ю Я
А Ә Б В Г Ғ Д Ҙ Е Ё Ж З И Й К Ҡ Л М Н Ң О Ө П Р С Ҫ Т У Ү Ф Х Һ Ц Ч Ш Щ Ъ Ы Ь Э Ә Ю Я
А Ӑ Б В Г Д Е Ё Ӗ Ж З И Й К Л М Н О П Р С Ҫ Т У Ӳ Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
А Ә Б В Г Ғ Д Е Ё Ж З И І Й К Қ Л М Н Ң О Ө П Р С Т У Ұ Ү Ф Х Һ Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
А Б Г Д Е Ё Ж З И Й К Л М Н Ң О Ө П Р С Т У Ү Х Ч Ш Ы Э Ю Я
А Ә Б В Г Д Е Ё Ж Җ З И Й К Л М Н Ң О Ө П Р С Т У Ү Ф Х Һ Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
А Б В Г Ғ Д Е Ё Ж З И Й К Қ Л М Н О П Р С Т У Ў Ф Х Ҳ Ч Ш Ъ Э Ю Я
А Б В Г Д Е Ё Ж З И Й Л М Н О Ө П Р С Т У Ү Х Һ Ц Ч Ш Ы Ь Э Ю Я
А Б В Г Д Е Ё Ж З И Й К Л М Н О Ө П Р С Т У Ү Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
А Ә Б В Г Һ Д Е Ж Җ З И Й К Л М Н Ң О Ө П Р С Т У Ү Х Ц Ч Ш Ь Э Ю Я
А Б В Г Ҕ Д Дә Џ Е Ҽ Ҿ Ж Жә З Ӡ Ӡә И Й К Қ Ҟ Л М Н О Ҩ П Ҧ Р С Т Тә Ҭ Ҭә У Ф Х Ҳ Ҳә Ц Цә Ҵ Ҵә Ч Ҷ Ш Шә Щ Ы
А Б В Г Д Е Ё Ж Җ З И Й К Л М Н Ң Ә О П Р С Т У Ў Ү Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
А Б В Г Д (Ѕ) Е Ж Ѕ/З И І К Л М Н О П Р С Т Оу (Ѡ) Ф Х Ц Ч Ш Щ Ъ Ы Ѣ Ь Ю Ꙗ Ѥ Ѧ Ѩ Ѫ Ѭ Ѯ Ѱ Ѳ Ѵ Ҁ
"""
def find_first_preceeding_char_position(all, chars):
"""
From the end of chars, find the first one that is present in all and return
its position
"""
if len(all) == 0:
return 0
for c in reversed(chars):
try:
print(f"{c} found in all at " + str(all.index(c)))
return all.index(c) + 1
except ValueError:
# not found, try next char
continue
# none of the chars found in all, append to end
return len(all) + 1
all = []
alphabets = table.split("\n")
import re
for a in alphabets:
a = re.sub("\(|\)", "", a)
chars = [c for c in a.split(" ") if c.strip() != "" and len(c) == 1]
for i, c in enumerate(chars):
if c not in all:
# For inserting c look through the chars of this alphabet before c
# and insert c into all after the first last char found; or simpler
# put: insert c in the "same relative position in the alphabet" in
# all
insert_index = find_first_preceeding_char_position(all, chars[0:i])
all.insert(insert_index, c)
print(" ".join(all))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment