Я пока с одним ковыряюсь )))для ваших 4х лексеров
Cтруктура файла по in-line комментариям
-
- Posts: 2245
- Joined: 25.08.2021 18:15
-
- Posts: 31
- Joined: 18.08.2023 06:15
Кое-что получается, пока корявенько но я добью )))
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
-
- Posts: 2245
- Joined: 25.08.2021 18:15
-
- Posts: 31
- Joined: 18.08.2023 06:15
Если табы заменить то и цикл не нужен
Спасибо, я не подумал о табах, мы их просто всегда сразу отрубаем в настройках.
Code: Select all
len(line) - len(line.lstrip())
-
- Posts: 2245
- Joined: 25.08.2021 18:15
-
- Posts: 31
- Joined: 18.08.2023 06:15
-
- Posts: 2245
- Joined: 25.08.2021 18:15
да. при работе хелпера cuda_tree_textile:
модуля 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']
-
- Posts: 2245
- Joined: 25.08.2021 18:15
-
- Posts: 31
- Joined: 18.08.2023 06:15
У меня все получилось с yalm разметкой для визуальных новелл.
Там оказалось еще засада с тем что внутри структурных элементов может быть inline-html.
Пришлось немного потанцевать с бубном в присядку. Но в итоге все работает так как нам надо.
Не могу не выразить восхищения функционалом редактора, позволяющим решить такую нетривиальную задачу.
Там оказалось еще засада с тем что внутри структурных элементов может быть 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