import re # массив строк g_lines = [] def get_prefixed_lines02( in_body ): global g_lines # # массив вложенностей global mass_indent, mass_tail mass_indent = [] mass_tail = [] # # pack lines in massiv with striping \n g_lines = [line.rstrip('\n') for line in in_body] len_m = len(g_lines) # колич строк # расширение массивов for ii in range( len_m ): mass_indent.append("") mass_tail.append("") # # # шнуруем массив ind_m = 0 # текущ индекс массива for lin in g_lines: # # разбивка на индент и остав. строку result = re.match ( '(\s*)(.*)', lin ) vindent = result.group(1) stroka = result.group(2) mass_indent[ind_m] = vindent # колич нач пробелов # # если не пустая строка, проверка на наличие тегов if ( stroka != '' ) : # если # if ( stroka[0] == '#' ) : temp = re.sub( '#', '
' mass_tail[ind_m] = '
' # # если %extends elif ( stroka[0:8] == '%extends' ) : stroka = "{"+stroka+'%}' # # если %load elif ( stroka[0:5] == '%load' ) : stroka = "{"+stroka+'%}' # если %block elif ( stroka[0:6] == '%block' ) : stroka = "{"+stroka+'%}' mass_tail[ind_m] = '{%endblock%}' # если %include elif ( stroka[0:8] == '%include' ) : stroka = "{"+stroka+'%}' # если h1.title.clear elif ( stroka[0:14] == 'h1.title.clear' ) : stroka = '

.left-center || elif ( stroka == '.left-title > .left-center ||' ) : stroka = '
' # если .right-title > .right-center || elif ( stroka == '.right-title > .right-center ||' ) : stroka = '
' # если em |= elif ( stroka[0:6] == 'em |= ' ) : stroka = ' {{ "'+stroka[6:]+'}} ' # if ( stroka != '' ) # end of проверка на наличие тегов # # ищем куда вставить закрыв тег # # если не первая строка if (ind_m > 0) : # если индент текущий < предыдущ if ( len(mass_indent[ind_m]) < len(mass_indent[ind_m-1] ) ): #print ( 'len mas ind= ', len ( mass_indent[ind_m] ) ) # # временный индекс текущ строки v_ind = ind_m my_tail = "" # идем назад while ( ( v_ind >= 0 ) and ( mass_tail[v_ind]=="" ) ): v_ind = v_ind-1 # убираем необходимость вывода закрыв тега my_tail = mass_tail[v_ind] if ( my_tail != "" ) : mass_tail[v_ind] = "" # Выводим заключ тег print ( mass_indent[v_ind] + my_tail ) # # Вывод текущей строки #print ( vindent+stroka, len(vindent), ind_m ) print ( vindent+stroka ) # ind_m = ind_m + 1 # текущий индекс массива # # end for # return "" # main prog # if __name__ == "__main__": # if file name is given convert file, else convert stdin import sys shpaml_text = open("D:/Temp/test_shpaml.txt") #print (shpaml_text) get_prefixed_lines02( shpaml_text ) # end