| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- """This script handles conversion between snake and camel casing.
- """
- import re
- _words_expr = re.compile(r"([a-zA-Z][^A-Z0-9]*|[0-9]+)")
- _lower_snake_case_expr = re.compile(r'^[a-z][a-z0-9_]*$')
- _upper_snake_case_expr = re.compile(r'^[A-Z][A-Z0-9_]*$')
- def _is_snake_case(str):
- """Checks if the supplied string is already in snake case.
- """
- match = _lower_snake_case_expr.match(str)
- if match:
- return True
- match = _upper_snake_case_expr.match(str)
- if match:
- return True
- return False
- def _split_snake_case(str):
- """Splits up a string based on underscores, if it's in snake casing.
- """
- if _is_snake_case(str):
- return [s.lower() for s in str.split("_")]
- return str
- def _split_camel_case(str):
- """Splits up a string based on capitalised camel casing.
- """
- return _words_expr.findall(str)
- def _split_cased_words(str):
- return _split_snake_case(str) if _is_snake_case(str) else _split_camel_case(str)
- def to_snake(str):
- str = "_".join([word.strip().lower() for word in _split_cased_words(str)])
- # Fix acronyms
- str = str.replace('i_d', 'id')
- str = str.replace('x_a_p', 'xap')
- str = str.replace('q_m_k', 'qmk')
- return str
- def to_upper_snake(str):
- return to_snake(str).upper()
- def to_camel(str):
- def _acronym(w):
- if w.strip().lower() == 'qmk':
- return 'QMK'
- elif w.strip().lower() == 'xap':
- return 'XAP'
- elif w.strip().lower() == 'id':
- return 'ID'
- return w.title()
- return "".join([_acronym(word) for word in _split_cased_words(str)])
|