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!('&nbsp;',(160).chr)

outtext.gsub!(/&(?!lt;|gt;)/,'&amp;')

annotation.gsub!(/&(?!lt;|gt;)/,'&amp;')

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>

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату