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-title > .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