|
1 | 1 | import re |
2 | 2 |
|
3 | | -from .utils import get_languages |
4 | | - |
5 | 3 | from functools import total_ordering |
6 | 4 |
|
7 | 5 | @total_ordering |
8 | | -class LanguageTag(str): |
9 | | - |
| 6 | +class LanguageTag: |
10 | 7 | """Language tag supported by LanguageTool.""" |
11 | 8 | _LANGUAGE_RE = re.compile(r"^([a-z]{2,3})(?:[_-]([a-z]{2}))?$", re.I) |
12 | 9 |
|
13 | | - def __new__(cls, tag): |
14 | | - # Can't use super() here because of 3to2. |
15 | | - return str.__new__(cls, cls._normalize(tag)) |
| 10 | + def __init__(self, tag, languages): |
| 11 | + self.tag = tag |
| 12 | + self.languages = languages |
| 13 | + self.normalized_tag = self._normalize(tag) |
16 | 14 |
|
17 | | - def __eq__(self, other): |
18 | | - try: |
19 | | - other = self._normalize(other) |
20 | | - except ValueError: |
21 | | - pass |
22 | | - return str(self) == other |
| 15 | + def __eq__(self, other_tag): |
| 16 | + return self.normalized_tag == self._normalize(other_tag) |
23 | 17 |
|
24 | | - def __lt__(self, other): |
25 | | - try: |
26 | | - other = self._normalize(other) |
27 | | - except ValueError: |
28 | | - pass |
29 | | - return str(self) < other |
| 18 | + def __lt__(self, other_tag): |
| 19 | + return str(self) < self._normalize(other) |
| 20 | + |
| 21 | + def __str__(self): |
| 22 | + return self.normalized_tag |
30 | 23 |
|
31 | | - @classmethod |
32 | | - def _normalize(cls, tag): |
| 24 | + def _normalize(self, tag): |
33 | 25 | if not tag: |
34 | 26 | raise ValueError('empty language tag') |
35 | 27 | languages = {language.lower().replace('-', '_'): language |
36 | | - for language in get_languages()} |
| 28 | + for language in self.languages} |
37 | 29 | try: |
38 | 30 | return languages[tag.lower().replace('-', '_')] |
39 | 31 | except KeyError: |
40 | 32 | try: |
41 | | - return languages[cls._LANGUAGE_RE.match(tag).group(1).lower()] |
| 33 | + return languages[self._LANGUAGE_RE.match(tag).group(1).lower()] |
42 | 34 | except (KeyError, AttributeError): |
43 | 35 | raise ValueError('unsupported language: {!r}'.format(tag)) |
0 commit comments