Class: ZineBrewer::Application
- Inherits:
-
Object
- Object
- ZineBrewer::Application
- Defined in:
- lib/zine_brewer/main.rb
Constant Summary collapse
- Commons =
"[hlink]: common/hlink.svg"
Instance Attribute Summary collapse
-
#author ⇒ Object
readonly
Returns the value of attribute author.
-
#converted ⇒ Object
readonly
Returns the value of attribute converted.
-
#corner ⇒ Object
readonly
Returns the value of attribute corner.
-
#css ⇒ Object
readonly
Returns the value of attribute css.
-
#lead ⇒ Object
readonly
Returns the value of attribute lead.
-
#pic ⇒ Object
readonly
Returns the value of attribute pic.
-
#title ⇒ Object
readonly
Returns the value of attribute title.
Instance Method Summary collapse
-
#convert(body) ⇒ Object
Converts markdown to html and returns body.
-
#initialize(path) ⇒ Application
constructor
A new instance of Application.
- #make_pp_header ⇒ Object
- #make_proof_directory ⇒ Object
-
#pretty_print ⇒ Object
pretty print of the converted document.
- #set_header_item(value, alt) ⇒ Object
-
#write_out ⇒ Object
Writing out header and body to each file.
- #write_proof_body ⇒ Object
- #write_proof_header ⇒ Object
Constructor Details
#initialize(path) ⇒ Application
Returns a new instance of Application.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# 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, @title, @lead, @author = [0, 1, 2, 4].map{|i| set_header_item(h[i], '')} @pic = set_header_item(h[3], ''){ "#{@article_id}_#{h[3]}" } @css = set_header_item(h[5], ''){ h[5].each_line.map{|i| '.c-article_content ' + i }.join } @pp_header = make_pp_header @converted = convert(body) end |
Instance Attribute Details
#author ⇒ Object (readonly)
Returns the value of attribute author.
15 16 17 |
# File 'lib/zine_brewer/main.rb', line 15 def @author end |
#converted ⇒ Object (readonly)
Returns the value of attribute converted.
15 16 17 |
# File 'lib/zine_brewer/main.rb', line 15 def converted @converted end |
#corner ⇒ Object (readonly)
Returns the value of attribute corner.
15 16 17 |
# File 'lib/zine_brewer/main.rb', line 15 def corner @corner end |
#css ⇒ Object (readonly)
Returns the value of attribute css.
15 16 17 |
# File 'lib/zine_brewer/main.rb', line 15 def css @css end |
#lead ⇒ Object (readonly)
Returns the value of attribute lead.
15 16 17 |
# File 'lib/zine_brewer/main.rb', line 15 def lead @lead end |
#pic ⇒ Object (readonly)
Returns the value of attribute pic.
15 16 17 |
# File 'lib/zine_brewer/main.rb', line 15 def pic @pic end |
#title ⇒ Object (readonly)
Returns the value of attribute title.
15 16 17 |
# File 'lib/zine_brewer/main.rb', line 15 def title @title end |
Instance Method Details
#convert(body) ⇒ Object
Converts markdown to html and returns body
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/zine_brewer/main.rb', line 103 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_pp_header ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/zine_brewer/main.rb', line 64 def make_pp_header header_output = [] header_output << "[コーナー]\n#{@corner}" if @corner.is_complete? header_output << "[タイトル]\n#{@title}" if @title.is_complete? header_output << "[リード]\n<p>#{@lead}</p>" if @lead.is_complete? header_output << "[タイトル画像]\n#{@pic}" if @pic.is_complete? header_output << "[著者クレジット]\n#{@author}" if @author.is_complete? header_output << "[追加CSS]\n#{@css}" if @css.is_complete? header_output.join("\n\n") end |
#make_proof_directory ⇒ Object
82 83 84 85 86 87 88 |
# File 'lib/zine_brewer/main.rb', line 82 def make_proof_directory @proof_dir = @dir + '/proof' begin Dir.mkdir(@proof_dir) rescue Errno::EEXIST end end |
#pretty_print ⇒ Object
pretty print of the converted document
128 129 130 |
# File 'lib/zine_brewer/main.rb', line 128 def pretty_print @pp_header + "\n\n" + @converted end |
#set_header_item(value, alt) ⇒ Object
53 54 55 56 57 58 59 60 61 62 |
# File 'lib/zine_brewer/main.rb', line 53 def set_header_item(value, alt) if /\A\ufeff?[\-%]+\Z/ =~ value || value.nil? alt.define_singleton_method(:is_complete?){ false } alt else value = yield if block_given? value.define_singleton_method(:is_complete?){ true } value end end |
#write_out ⇒ Object
Writing out header and body to each file
76 77 78 79 80 |
# File 'lib/zine_brewer/main.rb', line 76 def write_out make_proof_directory write_proof_header write_proof_body end |
#write_proof_body ⇒ Object
96 97 98 99 100 |
# File 'lib/zine_brewer/main.rb', line 96 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 ⇒ Object
90 91 92 93 94 |
# File 'lib/zine_brewer/main.rb', line 90 def write_proof_header File.open("#{@proof_dir}/header.txt", 'wb') do |f| f.write(@pp_header) end end |