UltiSnips генерирует строку документации Python с упаковкой текста фиксированного размера - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь создать фрагмент, который позволит мне сгенерировать хороший шаблон для строки документации Python, такой как этот:

####################################################################################################
# ************************************************************************************************ #
# *                                       HOUSING DATASET                                        * #
# ************************************************************************************************ #
#                                                                                                  #
# This is what content would look like, multiple lines.                                            #
# The features of the 506 samples can be summarized as:                                            #
#                                                                                                  #
####################################################################################################

Я хочу, чтобы заголовок центрировался в шаблоне, пробелы расширялись вокруг негодо фиксированного размера.А для содержимого ниже я хочу, чтобы каждая строка начиналась с шаблона «#» и заканчивалась одним и тем же шаблоном.Опять же, я хочу, чтобы строки содержимого были фиксированного размера.Мне удалось сделать заглавную часть фрагмента с вдохновением от Honza pythonx и его all.snippets .

. У меня есть следующий код (остерегайтесь егоможет быть немного грязным, так как я все еще выясняю это):

global!p
def make_title(twidth, bwidth=None):
    b, e = '# *', '* #'
    bwidth_inner = bwidth - 3 - max(len(b), len(b + e)) if bwidth else twidth + 2
    nspaces = (bwidth_inner - twidth) // 2
    mlines = b + ' ' + ' ' * nspaces
    mlinee = ' ' + ' ' * (bwidth_inner - twidth -nspaces) + e
    return mlines, mlinee
endglobal

snippet header 'Module docstring' b
"""
####################################################################################################
# ************************************************************************************************ #
`!p
width = 80
box = make_title(len(t[1], width)
snip.rv = box[0]
`${1:${VISUAL:title}}`!p
snip.rv = box[1]`
# ************************************************************************************************ #

Этот код работает как задумано и генерирует заголовок так, как я хочу.Поэтому я попытался расширить концепцию до контентной части и написал следующее:

global!p
def make_title(twidth, bwidth=None):
    b, e = '# *', '* #'
    bwidth_inner = bwidth - 3 - max(len(b), len(b + e)) if bwidth else twidth + 2
    nspaces = (bwidth_inner - twidth) // 2
    mlines = b + ' ' + ' ' * nspaces
    mlinee = '  ' + ' ' * (bwidth_inner - twidth - nspaces) + e
    return mlines, mlinee
endglobal
def make_content_line(twidth, bwidth=None):
    b, e = '# ', ' #'
    bwidth_inner = bwidth - 3 - max(len(b), len(b + e)) if bwidth else twidth + 2
    nspaces = (bwidth_inner - twidth) // 2
    mlines = b + ' ' + ' ' * nspaces
    mlinee = '  ' + ' ' * (bwidth_inner - twidth - nspaces) + e
    return mlines, mlinee
endglobal

snippet header 'Module docstring' b
"""
####################################################################################################
# ************************************************************************************************ #
`!p
width = 80
box = make_title(len(t[1], width)
snip.rv = box[0]
`${1:${VISUAL:title}}`!p
snip.rv = box[1]`
# ************************************************************************************************ #
`!p
width = 80
box = make_title(len(t[1], width)
snip.rv = box[0]
`${2:${VISUAL:content}}`!p
snip.rv = box[1]`

Теперь это работает почти так, как я хотел, за исключением того, что первая визуальная часть, кажется, связана со второй и изменяет заголовокизменяет способ отображения содержимого изначально.Написание содержания не меняет название, и я могу встать на ноги.

Итак, у меня два вопроса: как я могу отсоединить эти две части фрагмента, чтобы они были независимыми, и как я могу это сделать?генерировать строки контента, когда я пишу контент?Я думаю, один из способов - генерировать новую content_line каждый раз, когда пользователь нажимает ярлык перехода вперед, но я не знаю, как это сделать.

...