Как да добавите начални/крайни интервали към монопространствен текст в Sphinx reStructuredText

Заглавието казва всичко... това работи за създаване на монопространствен текст:

``foo``

но тези не:

`` foo``
``foo ``

Как мога да получа начални/крайни интервали в монопространствен текст? (преди някой да ми цитира XY проблем: това е точно това, което искам, нито повече, нито по-малко.)


person Jason S    schedule 25.08.2016    source източник


Отговори (3)


Grr. Изглежда, че това изисква глупаво хакерство на Sphinx/docutils за заобиколно решение с персонализирана роля.

добавено към conf.py:

import re
from docutils import nodes

tt_re = re.compile('^:tt:`\\|(.*)\\|`$')
def tt_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
    """
    Can be used as :tt:`|SOME_TEXT_HERE|`,
    where SOME_TEXT_HERE can include leading/trailing spaces
    """
    result = []
    m = tt_re.search(rawtext)
    if m:
        arg = m.group(1)
        result = [nodes.literal('', arg)]
    return result,[]

def setup(app):
    app.add_role('tt', tt_role)

Примерна употреба:

this :tt:`|  ab12    |` is just like ``foobar`` except it can have leading/trailing spaces.

CSS за code.literal също трябва да има шрифт с фиксирана ширина (интервалите се държат извън блоковете <span class="pre"> по някаква причина) и да използва white-space: pre; или white-space: pre-wrap;.

person Jason S    schedule 25.08.2016
comment
АРГХ! Това изключва интервали от моноширинен шрифт. @#%!%#@$%$#@%! - person Jason S; 30.08.2016
comment
Grr, това е нещо от CSS. - person Jason S; 30.08.2016

Изглежда, че работи с НУЛЕВА ШИРИНА SPACE в началото в източника

Find the file in our Google Drive folder It is located at ``​   foo``

където е ``<zwspace><space><space><space>foo`` в източника. Произвежда html:

<code class="docutils literal"><span class="pre">​</span>&#160;&#160; <span class="pre">foo</span></code>
person Community    schedule 06.03.2017

Човек може да използва интерпретирания текст (т.е. в рамките на единични обратни кавички), като първото пространство е екранирано с обратната наклонена черта и буквалната роля по подразбиране. Разгледайте следния пример::

.. default-role:: literal

This is the paragraph with inline 
codes: `` foo``, `\  foo` and `\  foo \ `.

Със sphinx-doc v1.7.4 получавам следния html код::

<p>This is the paragraph with inline codes: `` foo``, <code class="docutils literal  notranslate"> <span class="pre">foo</span></code> and <code class="docutils literal notranslate"> <span class="pre">foo</span> </code>.</p>

Текстът в двойни обратни кавички не се интерпретира изобщо, докато екранирането на обратната наклонена черта се извършва за съдържанието в единични обратни кавички. default-role е необходим за промяна на ролята по подразбиране от title-reference на literal.

person Anton T.    schedule 22.01.2019