diff options
author | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2019-02-14 16:53:10 +0300 |
---|---|---|
committer | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2019-02-15 20:30:28 +0300 |
commit | ea4d8ca08dbe1b2db5347bae8456c8babb2381c1 (patch) | |
tree | 2f08be187e237754605e104c5c97ae1074073244 /sphinx/roles.py | |
parent | cd13a905118620cd5cfa11bfcec5d05c8bb7be68 (diff) |
Replace :guilabel: and :menuselection: roles by class based implementation
Diffstat (limited to 'sphinx/roles.py')
-rw-r--r-- | sphinx/roles.py | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/sphinx/roles.py b/sphinx/roles.py index c77feeb62..db3feddc3 100644 --- a/sphinx/roles.py +++ b/sphinx/roles.py @@ -325,6 +325,9 @@ _amp_re = re.compile(r'(?<!&)&(?![&\s])') def menusel_role(typ, rawtext, text, lineno, inliner, options={}, content=[]): # type: (str, str, str, int, Inliner, Dict, List[str]) -> Tuple[List[nodes.Node], List[nodes.system_message]] # NOQA + warnings.warn('menusel_role() is deprecated. ' + 'Please use MenuSelection or GUILabel class instead.', + RemovedInSphinx40Warning, stacklevel=2) env = inliner.document.settings.env if not typ: assert env.temp_data['default_role'] @@ -357,6 +360,32 @@ def menusel_role(typ, rawtext, text, lineno, inliner, options={}, content=[]): return [node], [] +class GUILabel(SphinxRole): + amp_re = re.compile(r'(?<!&)&(?![&\s])') + + def run(self): + # type: () -> Tuple[List[nodes.Node], List[nodes.system_message]] + node = nodes.inline(rawtext=self.rawtext, classes=[self.name]) + spans = self.amp_re.split(self.text) + node += nodes.Text(spans.pop(0)) + for span in spans: + span = span.replace('&&', '&') + + letter = nodes.Text(span[0]) + accelerator = nodes.inline('', '', letter, classes=['accelerator']) + node += accelerator + node += nodes.Text(span[1:]) + + return [node], [] + + +class MenuSelection(GUILabel): + def run(self): + # type: () -> Tuple[List[nodes.Node], List[nodes.system_message]] + self.text = self.text.replace('-->', '\N{TRIANGULAR BULLET}') # type: ignore + return super().run() + + _litvar_re = re.compile('{([^}]+)}') parens_re = re.compile(r'(\\*{|\\*})') @@ -507,8 +536,8 @@ specific_docroles = { 'pep': PEP(), 'rfc': RFC(), - 'guilabel': menusel_role, - 'menuselection': menusel_role, + 'guilabel': GUILabel(), + 'menuselection': MenuSelection(), 'file': emph_literal_role, 'samp': emph_literal_role, 'abbr': Abbreviation(), |