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