1import dataclasses
2
3from sphinxcontrib.bibtex.style.template import reference, entry_label
4from typing import TYPE_CHECKING, List, Iterable
5from . import BaseReferenceStyle, BracketStyle
6
7if TYPE_CHECKING:
8    from pybtex.richtext import BaseText
9    from pybtex.style.template import Node
10
11
12@dataclasses.dataclass
13class ExtraLabelReferenceStyle(BaseReferenceStyle):
14    """Reference just by label."""
15
16    #: Bracket style.
17    bracket: BracketStyle = BracketStyle()
18
19    def role_names(self) -> Iterable[str]:
20        return ['label', 'labelpar']
21
22    def outer(self, role_name: str, children: List["BaseText"]) -> "Node":
23        return self.bracket.outer(
24            children,
25            brackets='par' in role_name,
26            capfirst=False,
27        )
28
29    def inner(self, role_name: str) -> "Node":
30        return reference[entry_label]
31