import re # массив строк g_lines = [] mass_oper = [] # оперативный массив ( записи ( ур отст, строка ) ) def get_prefixed_lines02( in_body ): global g_lines # # массив вложенностей global mass_indent, mass_tail, mass_oper mass_indent = [] mass_tail = [] # # pack lines in massiv with striping \n g_lines = [line.rstrip('\n') for line in in_body] # Добавим еще пустую строку, чтоб успешно закрылся тег g_lines.append("") # 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:]+'}} ' # если .content-layout elif ( stroka == '.content-layout' ) : stroka = '
' mass_tail[ind_m] = '
' # если .lside elif ( stroka == '.lside' ) : stroka = '
' mass_tail[ind_m] = '
' # если .rside elif ( stroka == '.rside' ) : stroka = '
' mass_tail[ind_m] = '
' # если %if elif ( stroka[0:3] == '%if' ) : stroka = '{'+stroka+'%}' mass_tail[ind_m] = '{% endif %}' # если %url elif ( stroka[0:4] == '%url' ) : stroka = '{'+stroka+'%}' # если %paginator elif ( stroka[0:10] == '%paginator' ) : stroka = '{'+stroka+'%}' # если .pages elif ( stroka == '.pages' ) : stroka = '
' mass_tail[ind_m] = '
' # если %spaceless elif ( stroka == '%spaceless' ) : stroka = '{'+stroka mass_tail[ind_m] = '%}' # если .clear elif ( stroka[0:6] == '.clear' ) : # атавизм # if ( stroka[-3:] == ' ||' ) : stroka = stroka[0:-3] # stroka = '
' # если .reklama |= belcanto_bottom elif ( stroka == '.reklama |= belcanto_bottom' ) : stroka = '
{{belcanto_bottom}}
' # if ( stroka != '' ) # end of проверка на наличие тегов # # ищем куда вставить закрыв тег # # если не первая строка if (ind_m > 0) : # если индент текущий < предыдущ if ( len(mass_indent[ind_m]) < len(mass_indent[ind_m-1] ) ): ''' # # временный индекс предыдущей строки v_ind = ind_m - 1 my_tail = "" # идем назад while ( ( v_ind >= 0 ) and ( mass_tail[v_ind]=="" ) ): v_ind = v_ind-1 #print ( 'v_ind ', v_ind, g_lines[v_ind] ) # if ( v_ind >= 0 ) : # хвостик для вывода my_tail = mass_tail[v_ind] # убираем необходимость вывода закрыв тега mass_tail[v_ind] = "" # Выводим заключ тег print ( mass_indent[v_ind] + my_tail ) ''' # #print ( 'len mas op ', len(mass_oper) ) #print ( mass_oper[-1][0] ) #print( len(mass_indent[ind_m] ) ) # если не пустой масс if ( len(mass_oper) > 0) : # пока ур отст посл зап масс опер < ур отст тек стр while ( mass_oper[-1][0] >= len(mass_indent[ind_m]) ) : #print ('mass_op wh ', mass_oper[-1][0]) v_ind = mass_oper[-1][1] print ( mass_indent[v_ind] + mass_tail[v_ind] ) del mass_oper[-1] if ( len(mass_oper) == 0) : break # # if ( len(mass # # если есть хвост, заносим пару в массив опер if ( mass_tail[ind_m] != '' ) : mass_oper.append( ( len(mass_indent[ind_m]), ind_m ) ) #print ('app ', len(mass_indent[ind_m]), ind_m ) # # Вывод текущей строки #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/blog.shpaml") #print (shpaml_text) get_prefixed_lines02( shpaml_text ) # end