vic57ord() берёт значение кодовой точки из Unicode. То есть фактически ты опираешься на Юникод и его алфавит. Оттуда и буква “ё” отдельная, она отдельно стоит в Юникоде. А надо создать свой алфавит, без Юникода, в нём установить порядок символов, а потом уже сортировать по нему. Не всегда надо, например, чтобы буквы в верхнем регистре шли до букв в нижнем регистре; может потребоваться, чтобы было наоборот. И вот эти все вещи надо просто самому устанавливать на своём алфавите, а не подстраиваться под Юникод, как с буквой “ё”.
так это все и сортируется по ord
Посмотри на эту задачу, как программист, а не как кодер. Просто кодером ты мало что сможешь сделать, будешь всё время плестись то за Юникодом, то за тегами, то за классами, то ещё за чем-нибудь. И когда чего-то не окажется вдруг, ты ничего не сможешь сделать, потому что не умеешь.