Перейти к содержанию

Регистры#

На самом деле, snake, kebab и т. д. не являются функциями. Они являются экземплярами класса Case, который реализовал object.__call__ dunder метод для удобства: Case.__call__. Этот декларативный синтаксис позволяет гибко описывать текстовые случаи, сохраняя при этом всю функциональность.

Вы можете увидеть полный список всех встроенных случаев в Спецификации API.

Как работает преобразование регистра?

Преобразование регистра происходит в три этапа:

  1. Разделение: входной text делится на слова путем сканирования границ. Границы — это условия (или разделители), которые сигнализируют, где заканчивается одно слово и начинается другое. Например, граница может обнаружить подчеркивание, изменение со строчных букв на заглавные, или даже переход цифра-буква. Каждый раз, когда обнаруживается граница, строка разделяется в этой позиции.
  2. Преобразование: после того, как text разделен на слова, применяется transform. Эта функция (которую вы можете настроить) определяет, как будет преобразовано каждое слово. Например, к каждому слову можно применить преобразование к строчным буквам, капитализацию или полностью собственное преобразование.
  3. Объединение: наконец, преобразованные слова объединяются обратно вместе с помощью определенного delimiter. Этот delimiter специфичен для стиля регистра (например, подчеркивания ("_") для регистра snake или дефисы ("-") для регистра kebab).

Результатом является входной текст, преобразованный в нужный регистр.

Создание кастомных регистров#

Подобно Boundary, есть класс Case, который позволяет вам определить пользовательский регистр, который ведёт себя как встроенный:

cases/custom_case.py
1
2
3
4
5
6
7
8
from textcase import Case

dot = Case(delimiter=".", transform=lambda words: map(str.lower, words))

dot("Dot case var")  # dot.case.var (1)

dot.match("dot.case.var")  # True (2)
dot.match("Dot case var")  # False (3)
  1. 😄 Поскольку dot является экземпляром Case, он уже преобразует текст в регистр dot — просто вызовите его как функцию! 🎉
  2. 😄 Для dot вам не нужно писать пользовательскую функцию для проверки регистра; просто используйте его метод match! 🎉
  3. 😄 Опять же, используя метод match, вы можете легко проверить, находится ли строка в регистре dot без какого-либо дополнительного кода! 🎉

Чтобы узнать больше о создании кастомного регистра с нуля, взгляните на класс Case.