igitar/src/igitar/constants.py

41 lines
1.1 KiB
Python

import re
KNOWN_DIRECTIVES = [
('title', 't'),
('subtitle', 'st'),
('artist',),
('composer',),
('lyricist',),
('arranger',),
('copyright',),
('album',),
('year',),
('key',),
('time',),
('tempo',),
('duration',),
('capo',),
('meta',),
('comment', 'c')
]
KNOWN_VERSE_TYPES = [
'verse',
'chorus',
'bridge',
'tab',
'grid'
]
ENGLISH_NOTES = '[CDEFGAB]'
GERMAN_NOTES = '[CDEFGAH]'
NEOLATIN_NOTES = '(Do|Re|Mi|Fa|Sol|La|Si)'
CHORD_SUFFIXES = '(b|bb)?(#)?(m|maj7|maj|min7|min|sus)?(1|2|3|4|5|6|7|8|9)?'
SLIM_CHARS = 'fiíIÍjlĺľrtť.,;/ ()|"\'!:\\'
DIRECTIVE = re.compile(r'\{(' + '|'.join([d for t in KNOWN_DIRECTIVES for d in t]) + r'): *(.*?)\}')
START_OF = re.compile(r'\{start_of_(' + '|'.join(KNOWN_VERSE_TYPES) + r')(: *(.*?))?\}')
END_OF = re.compile(r'\{end_of_(' + '|'.join(KNOWN_VERSE_TYPES) + r')\}')
CHORUS_MARKER = re.compile(r'\{chorus(: *(.*?))?\}')
VERSE_MARKER = re.compile(r'\{verse(: *(.*?))?\}')
BRIDGE_MARKER = re.compile(r'\{bridge(: *(.*?))?\}')
CHORD_WORD = re.compile(r'(.*?)\[(.*?)\]')
CHORD = re.compile(r'\[(.*?)\]')