class ZineBrewer::Application

Constants

Commons

Attributes

author[R]
converted[R]
corner[R]
css[R]
lead[R]
pic[R]
title[R]

Public Class Methods

new(path) click to toggle source
# File lib/zine_brewer/main.rb, line 17
def initialize(path)

  begin
    Encoding.default_external =  Kconv.guess(File.open(path, 'r:BINARY').read)
    input_data = File.open(path, 'rt').read.encode('UTF-8')
  rescue
    raise 'ERROR: The input file does not exist. Check it.'
  end

  @dir = File.dirname(path)

  @article_id = begin
                  File.open("#{@dir}/id.txt", "rt").read.chomp
                rescue
                  docdir = File.basename(@dir)
                  /^\d+$/ =~ docdir ? docdir : '■記事ID■'
                end

  header, body = /\A((?:.|\n)*?)<%-- page -->/.match(input_data).yield_self do |m|
    if m.nil?
      ['', "\n\n" + Commons + "\n\n" + input_data]
    else
      [m[1], '<%-- page -->' + "\n\n" + Commons + "\n\n" + m.post_match]
    end
  end

  @article_id = $+ if header.sub!(/^■記事ID■[^0-9]+(\d+)$/, '')
  h = header.strip.split(/\n\n+/)
  @corner = set_header_item(h[0], 'IT人材ラボの記事・ニュース')
  @title  = set_header_item(h[1], 'タイトル' )
  @lead   = set_header_item(h[2], 'リード')
  @pic    = set_header_item(h[3], 'dummy.png')
  @author = set_header_item(h[4], '著者 クレジット')
  @css    = set_header_item(h[5], '')

  @converted = convert(body)
end

Public Instance Methods

convert(body) click to toggle source

Converts markdown to html and returns body

# File lib/zine_brewer/main.rb, line 100
def convert(body)
  dkmn = Darkmouun.document.new(body, {:auto_ids => false, :input => 'sekd'}, :se_html)

  ### Sets templates
  dkmn.add_templates "#{__dir__}/templates/", *Dir['*.rb',base:"#{__dir__}/templates/"]

  ### Sets pre process
  dkmn.pre_process = lambda do |t|
  end

  ### Sets post process
  dkmn.post_process = lambda do |t|
    t.gsub!('(((BR)))', '<br/>')
    t.gsub!(/■記事ID■/, @article_id)
    t.gsub!(/—/, "―")
    t.gsub!(/[‘’]/, "'")
    t.gsub!(/<li>\\/, '<li>')
    t << "</div>" if /<div id="p1">/ =~ t
  end

  ### Converts a markdown document and returns that converted body
  dkmn.convert
end
make_proof_directory() click to toggle source
# File lib/zine_brewer/main.rb, line 72
def make_proof_directory
  @proof_dir = @dir + '/proof'
  begin
    Dir.mkdir(@proof_dir)
  rescue Errno::EEXIST
  end
end
set_header_item(target, default) click to toggle source
# File lib/zine_brewer/main.rb, line 55
def set_header_item(target, default)
  if /\A[\-%]+\Z/ =~ target || target.nil?
    default.define_singleton_method(:is_complete?){ false }
    default
  else
    target.define_singleton_method(:is_complete?){ true }
    target
  end
end
write_out() click to toggle source

Writing out header and body to each file

# File lib/zine_brewer/main.rb, line 66
def write_out
  make_proof_directory
  write_proof_header
  write_proof_body
end
write_proof_body() click to toggle source
# File lib/zine_brewer/main.rb, line 93
def write_proof_body
  File.open("#{@proof_dir}/body.txt", 'wb') do |f|
    f.write(@converted.gsub("<!-- page_delimiter -->\n", ''))
  end
end
write_proof_header() click to toggle source
# File lib/zine_brewer/main.rb, line 80
def write_proof_header
  header_output = ""
  header_output << "[コーナー]\n#{@corner}\n\n" if @corner.is_complete?
  header_output << "[タイトル]\n#{@title}\n\n" if @title.is_complete?
  header_output << "[リード]\n<p>#{@lead}</p>\n\n" if @lead.is_complete?
  header_output << "[タイトル画像]\n#{@pic}\n\n" if @pic.is_complete?
  header_output << "[著者クレジット]\n#{@author}\n\n" if @author.is_complete?
  header_output << "[追加CSS]\n#{@css}\n\n" if @css.is_complete?
  File.open("#{@proof_dir}/header.txt", 'wb') do |f|
    f.write(header_output)
  end
end