wfile.close
# выгрызаем заголовок
fbtitle=/<SPAN CLASS='titleSet'>(.+)<font color='#FF0000'>(#d{1,3})</font>(.+)< /SPAN>/.match(ltext).captures
# выгрызаем ссылки на статьи и разделители
filtr=/<SPAN CLASS='minSet'>(.+)</SPAN>|<a href='(d{3}/d.htm)'>(.+)< /a>/
lmas = ltext.grep(filtr)
# начинаем формировать выходной текст
outtext='<title><p>'+fbtitle[0]+fbtitle[1]+fbtitle[2]+'</p></title> '
# начинаем формировать аннотацию
annotation='<p>Содержание номера:</p> '
# флажок открытой секции раздела
flagSect=false
# прокручиваем список ссылок
lmas.each do |line|
if line.include? 'SPAN' then # ССЫЛКА ИЛИ РАЗДЕЛИТЕЛЬ?
if flagSect then outtext=outtext+'</section> ' end # РАЗДЕЛИТЕЛЬ. Секцию закрывать надо?
/<SPAN CLASS='minSet'>(.+)</SPAN>/.match(line) # выгрызаем разделитель...
outtext=outtext+'<section> <title><p>'+$1+'</p></title> ' # открываем секцию раздела
annotation=annotation+'<p>'+$1+':</p> ' # и дополняем аннотацию
flagSect=true # секция осталась открыта...
else # НЕ-ЕТ, ВСЕ-ТАКИ ССЫЛКА...
filtr.match(line)
pathf = $2 # берем путь к первому файлу статьи...
annotation=annotation+'<p>'+(149).chr+' '+$3+'</p> ' # дополняем аннотацию...
puts pathf[0..2] # это чтобы не скучно было ждать...
outtext=outtext+'<section> ' # открыли секцию...
while File::exists?(pathf) do # обрабатываем статью
# считали файлик в текстовую строку...
wfile=File.open(pathf)
wtext=wfile.readlines.to_s
wfile.close
wtext[/<html>.+?</p>/m]='' # чик! головка...
wtext[/<center>.+</html>/m]='' # чик! хвостик...
# заголовок статьи оставлять?
wtext = pathf[4,2].to_i == 1 ? wtext.sub(/.* (.* .* ).* .* /,' 1') : wtext.sub(/.* .* .* .* .* /,' 1')
outtext=outtext+wtext # оставшийся текст - к основному массиву
# модифицируем имя файла
if pathf[4,2].to_i >= 10
pathf[4,2] = (pathf[4,2].to_i + 1).to_s
else
pathf[4] = (pathf[4,2].to_i + 1).to_s
end
end # конец цикла
outtext=outtext+'</section> ' # закрываем секцию
end # усе. статью оформили...
end # все статьи собрали в одну строку...
# модифицируем выходной текст под FB2
outtext.gsub!('<p><big><big><big><strong>','<title><p>')
outtext.gsub!('</strong></big></big></big></p>','</p></title>')
outtext.gsub!('<p><big><strong>','<epigraph><p>')
outtext.gsub!('</strong></big></p>','</p></epigraph>')
outtext.gsub!(' ',(160).chr)
outtext.gsub!(/&(?!lt;|gt;)/,'&')
annotation.gsub!(/&(?!lt;|gt;)/,'&')
outtext.gsub!('<br>','</p><p>')
outtext.gsub!('<br>','</p><p>')
# чистим мусор
outtext.gsub!(/x01|x12|x18|x1E/, '?') # удаляем непечатные символы
# корректируем неправильное использование '<' и '>'
# заодно прибиваем ненужные тэги
outtext.gsub!(/(<p>)(.*)(</p>)/) do |line|
subl1,subl2,subl3 = $1,$2,$3
subl2.gsub!('<','x8b')
subl2.gsub!('>','x9b')
line=subl1+subl2+subl3
end
# а линки выделим жирным
outtext.gsub!(/x8Ba href.+?x9B(.*?)x8B/ax9B/) {|line| line='<strong>'+$1+'</strong>'}
# компьютерное тире - в типографское
outtext.gsub!(/s-s/,' x97 ')
outtext.gsub!('<p>-', '<p>x97')
annotation.gsub!(/s-s/,' x97 ')
# добавляем заголовок
outtext='<?xml version='1.0' encoding='windows-1251'?>
<FictionBook xmlns='http://www.gribuser.ru/xml/fictionbook/2.0' xmlns:l= 'http://www.w3.org/1999/xlink'>
<description>
<title-info>
<genre>nonfiction</genre>
<author>
<nickname>Редакция журнала</nickname>
</author>
<book-title>'+fbtitle[0]+fbtitle[1]+fbtitle[2]+'</book-title>
<annotation> '+annotation+'</annotation>
<date>'+fbtitle[2][-7,4]+'</date>
<lang>ru</lang>
<sequence name=''+fbtitle[0]+'' number=''+fbtitle[1][1,2]+''/>
</title-info>
<document-info>
<program-used>Yuzich Ruby script (WiseSoft -> FB2)</program-used>
<src-url>http://www.wisesoft.ru</src-url>
</document-info>
</description>