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 |
# 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) 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+)$/, '') Regexp.last_match[1] else /^\d+/.match(File.basename(@dir)).yield_self{|m| m.nil? ? '■記事ID■' : m[0]} end 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
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# 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_pp_header ⇒ Object
61 62 63 64 65 66 67 68 69 70 |
# File 'lib/zine_brewer/main.rb', line 61 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
79 80 81 82 83 84 85 |
# File 'lib/zine_brewer/main.rb', line 79 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
125 126 127 |
# File 'lib/zine_brewer/main.rb', line 125 def pretty_print @pp_header + "\n\n" + @converted end |
#set_header_item(value, alt) ⇒ Object
50 51 52 53 54 55 56 57 58 59 |
# File 'lib/zine_brewer/main.rb', line 50 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
73 74 75 76 77 |
# File 'lib/zine_brewer/main.rb', line 73 def write_out make_proof_directory write_proof_header write_proof_body end |
#write_proof_body ⇒ Object
93 94 95 96 97 |
# 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 ⇒ Object
87 88 89 90 91 |
# File 'lib/zine_brewer/main.rb', line 87 def write_proof_header File.open("#{@proof_dir}/header.txt", 'wb') do |f| f.write(@pp_header) end end |