Cтруктура файла по in-line комментариям

bb.slipers
Posts: 31
Joined: 18.08.2023 06:15

Post by bb.slipers »

для ваших 4х лексеров
Я пока с одним ковыряюсь )))
main Alexey
Posts: 2245
Joined: 25.08.2021 18:15

Post by main Alexey »

Command Palette: command 'plugins: reset python plugins'.
можете задать ей хоткей - в Палитре нажмите F9.
bb.slipers
Posts: 31
Joined: 18.08.2023 06:15

Post by bb.slipers »

Кое-что получается, пока корявенько но я добью )))

Code: Select all

import re

ICON_TAG = -1

def get_indent(str): 
    match = re.search(r"^\s*", str) 
    return 0 if not match else match.end()
    
def get_headers(filename, lines):
    x = 0
    y = -1
    getter = []
    for line in lines:
        y += 1
        indent = get_indent(line)
        if line.lstrip().startswith('#'):
            continue
        posdpt = line.find(':')            
        posrem = line.find('#')
        if posdpt == -1 and posrem == -1:
            continue
        caption = ''
        if posdpt != -1:
            caption = caption + line[:posdpt + 1]
        if posrem != -1:
            caption = caption + ' ' + line[posrem + 1:].lstrip()                        
        getter.append(((x,y,x + len(line),y),int(indent/2),caption,ICON_TAG))
            
    return getter
Attachments
1.JPG
main Alexey
Posts: 2245
Joined: 25.08.2021 18:15

Post by main Alexey »

match = re.search(r"^\s*", str)
это замедлит. можно просто циклом пройти и найти indent.
и потом ТАБы надо "расширить" в Н пробелов

tab_size = ed.get_prop(PROP_TAB_SIZE, '')
s = s.replace('\t', ' '*tab_size)
bb.slipers
Posts: 31
Joined: 18.08.2023 06:15

Post by bb.slipers »

Если табы заменить то и цикл не нужен

Code: Select all

len(line) - len(line.lstrip())
Спасибо, я не подумал о табах, мы их просто всегда сразу отрубаем в настройках.
main Alexey
Posts: 2245
Joined: 25.08.2021 18:15

Post by main Alexey »

>Если табы заменить то и цикл не нужен
заменить только _ведущие табы_. в середине не надо
bb.slipers
Posts: 31
Joined: 18.08.2023 06:15

Post by bb.slipers »

Command Palette: command 'plugins: reset python plugins'.
Не срабатывает, видимо остается в кеше.
Т.е. пока я не перезапущу редактор я не вижу внесенных изменений.
main Alexey
Posts: 2245
Joined: 25.08.2021 18:15

Post by main Alexey »

да. при работе хелпера cuda_tree_textile:

Code: Select all

>>> d=[i for i in dir() if 'cuda' in i]
>>> d
['xxcuda_breadcrumbs', 'xxcuda_git_status', 'xxcuda_lsp', 'xxcuda_runner', 'xxcuda_tab_icons']
модуля cuda_tree_textile нету тут. надо разбираться.
main Alexey
Posts: 2245
Joined: 25.08.2021 18:15

Post by main Alexey »

недочет Куд. tree helpers на записываются в locals().
bb.slipers
Posts: 31
Joined: 18.08.2023 06:15

Post by bb.slipers »

У меня все получилось с yalm разметкой для визуальных новелл.
Там оказалось еще засада с тем что внутри структурных элементов может быть inline-html.
Пришлось немного потанцевать с бубном в присядку. Но в итоге все работает так как нам надо.
Не могу не выразить восхищения функционалом редактора, позволяющим решить такую нетривиальную задачу.

Code: Select all

import re
from cudatext import *
from cudax_lib import get_opt

TAG_ICON = -1
TAB_SIZE = ed.get_prop(PROP_TAB_SIZE,'')
OPT_YAML1 = get_opt('yaml_codetree_show_comment',0)

def get_indent(str): 
    match = re.search(r"^\s*", str) 
    return 0 if not match else match.end()

def get_indent_fast(str): 
    return len(str) - len(str.lstrip())
    
def get_headers(filename, lines):
    y = -1
    getter = []
    for line in lines:
        y += 1
        line = line.replace('\t',' ' * TAB_SIZE)
        
        if line.lstrip().startswith('#'):
            if OPT_YAML1 == 0:
                continue
            if OPT_YAML1 == 1:
                yup = max([0,y-1])
                if yup != y:
                    lineup = lines[yup]
                    if lineup.lstrip().startswith('#'):
                        continue                                     
        
        caption = ''
        posdpt = line.find(':')            
        posrem = line.rfind('#')
        postag1 = line.find('<')
        postag2 = line.rfind('>')        
        if posdpt == -1 and posrem == -1:
            continue
        if (posdpt != -1) and ((postag1 == -1) or (postag1 > posdpt)):
            caption = line[:posdpt + 1]
        if (posrem != -1) and ((postag2 == -1) or (postag2 < posrem)):
            if caption != '':
                caption = caption + ' '
            caption = caption + line[posrem + 1:].lstrip()   
        if caption == '':
            continue                         
        getter.append(((0,y,len(line),y),1,caption,TAG_ICON))
        # getter.append(((0,y,len(line),y),get_indent(line),caption,TAG_ICON))         
        # getter.append(((0,y,len(line),y),get_indent_fast(line),caption,TAG_ICON))        
            
    return getter
Attachments
1.JPG
Post Reply