X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=feedgenerator.rb;h=de64c8bdefbc3ff50f1a7c77e535405eb6a14a64;hb=18b4f1fe31de08881c56ad771f838bbc8a8a3ba4;hp=40924b21bbac10745790a8191a1ec0a113880a52;hpb=56fa1119e04f0433a65800c4ad227cb5f3736bc5;p=feedblog%2Ffeedgenerator.git diff --git a/feedgenerator.rb b/feedgenerator.rb index 40924b2..de64c8b 100644 --- a/feedgenerator.rb +++ b/feedgenerator.rb @@ -22,9 +22,13 @@ LOGINID = "login" # ãã°ã¤ã³ãã¹ã¯ã¼ã PASSWORD = "password" # ã¤ã³ã¿ã¼ãã§ã¼ã¹ã®ãã¼ãã«ã®å¹ -TABLEWIDTH = 800 +TABLEWIDTH = 1000 # XMLãã¡ã¤ã«æ ¼ç´å ã¾ã§ã®ç¸å¯¾ãã¹ XMLPATH = "./../lunardial/xml/" +# FeedBlogãè¨ç½®ãããã£ã¬ã¯ããªã®URL +HOMEBASE = "https://lunardial.sakura.ne.jp/" +# å ¥åããããã«ãã¹URL(HOMEBASE)ãç½®æããæåå +RELAYPATH = "./" # loglist.xmlãã¡ã¤ã«ã®å®ç¾© LISTXMLPATH = "#{XMLPATH}loglist.xml" # FeedBlogä¸ã®è¡¨ç¤ºãã¼ã¸ãããã°æ ¼ç´ãã£ã¬ã¯ããªã¾ã§ã®ãã¹ @@ -37,6 +41,13 @@ USEFILEMANAGER = true FILEMANAGER = "./filemanager.rb" # XMLã«æ¸ãè¾¼ãéãæ¹è¡é¨åãã®ã¾ã¾ä¿æããããæ¹è¡è¨å·ã«ç´ãã REPLACEBRTAG = false +# ãã¡ã¤ã«ã®æ¸ãè¾¼ã¿æã«ENTRYã®IDããã³URLããFEEDãªãã¸ã§ã¯ãããèªåçæããå¤ã«ç½®æãããå¦ã +REPLACEENTRYIDANDURL = false + +# EXPERIMENTAL AREA START +TO_HTML_ENTRYTEMPLATE = 'htmltemp/diary.html.erb' +TO_HTML_MAINTEMPLATE = 'htmltemp/main.html.erb' +# EXPERIMENTAL AREA END # ãã¼ã¸ã§ã³æ å ±ã示ãæååã§ã APPVERSION = "- FeedGenerator for Ruby version 2.0.0.0 -Copyright(c) 2009 Kureha.H (http://lunardial.sakura.ne.jp/) & Yui Naruse (http://airemix.com/)" @@ -56,9 +67,16 @@ class Object # _arg[1]_ :: ã¢ã¼ãã®æå®ãä¾ : w:utf-8(æ¸ãè¾¼ã¿ã¢ã¼ãã»UTF-8ã¨ã³ã³ã¼ãã§ãã¡ã¤ã«ãéã) def myopen(*arg) mode = arg[1] - arg[1] = mode[/[^:]+/] if mode && RUBY_VERSION < "1.8.7" && mode.include?(':') + rdonly_p = true + case mode + when String + arg[1] = mode[/[^:]+/] if RUBY_VERSION < "1.8.7" && mode.include?(':') + rdonly_p = /\A[^:]*[wa+]/ !~ mode + when Numeric + rdonly_p = !(mode & (IO::WRONY | IO::RDWR)) + end open(*arg) do |f| - f.flock(/\A\w+r/ =~ mode ? File::LOCK_SH : File::LOCK_EX) + f.flock(rdonly_p ? File::LOCK_SH : File::LOCK_EX) return yield(f) end end @@ -254,7 +272,8 @@ class Feed < AbstractEntry def to_s buf = [] - buf.push("") + # buf.push("") + buf.push(""); buf.push("#{@attr[:title]}") buf.push("#{@attr[:subtitle]}") buf.push("") @@ -283,7 +302,31 @@ class Feed < AbstractEntry # # _feed_ :: Feedãªãã¸ã§ã¯ã # _entry_ :: Entryãªãã¸ã§ã¯ãã®é å - def self.to_xml(path, feed, entrylist) + def self.to_xml(path, feed, entrylist_tmp) + buf = [] + entrylist = entrylist_tmp.dup + buf.push("") + buf.push("#{feed.to_s}\n") + entrylist.each { |entry| + if REPLACEENTRYIDANDURL + entry.entryid.gsub!(/^[^\?]*\?/, "") + entry.entryid = feed.url + "?" + entry.entryid + entry.url = feed.url + "#" + entry.entryid + end + buf.push("#{entry.to_s}\n") + } + buf.push("") + + myopen(path, "w") do |f| + f.print buf.join("\n") + end + end + + # XMLãã¡ã¤ã«åºåç¨ã¡ã½ããã§ã + # + # _feed_ :: Feedãªãã¸ã§ã¯ã + # _entry_ :: Entryãªãã¸ã§ã¯ãã®é å + def self.to_xml_plain(path, feed, entrylist) buf = [] buf.push("") buf.push("#{feed.to_s}\n") @@ -319,7 +362,7 @@ class Entry < AbstractEntry # å¯è¦ã»ä¸å¯è¦ã示ãããã·ã¥ãã¼ãæ ¼ç´ããé åã§ã @display = {"entryid" => "none", "title" => "", "summary" => "", "published" => "none", - "updated" => "none", "url" => "none", + "updated" => "none", "url" => "", "content" => "", "others"=>"none"} # ãããã°ã¢ã¼ãã®å ´åãå ¨ã¦ã®å ¥åè¦ç´ ã表示ãã¾ã @@ -374,6 +417,45 @@ class Entry < AbstractEntry return entrylist end + # Atom XMLãã¡ã¤ã«ãèªã¿è¾¼ãã§è§£æãããã³ãã¬ã¼ããã¡ã¤ã«ã«ãããã£ã¦HTMLã«å¤æããã¡ã½ããã§ã + def self.to_html(xmlpath, destpath, entry_temppath, html_temppath) + # å¼æ°ãã§ã㯠- å ¨å¿ é + if xmlpath.empty? or destpath.empty? or entry_temppath.empty? or html_temppath.empty? + raise ArgumentError + end + + # å¿ é ãã¡ã¤ã«åå¨ãã§ã㯠+ unless File.exist?(xmlpath) and File.exist?(entry_temppath) and File.exist?(html_temppath) + raise IOError + end + + # XMLèªã¿è¾¼ã¿ + entrylist = Entry.readxml(xmlpath) + + body = '' + entrylist.each { |e| + # Entryæ¯ã®HTML表示é¨åãçæ + body << e.to_template(entry_temppath) + } + + # HTMLå ¨ä½ã®ãã³ãã¬ã¼ããçæ + html_temp = HtmlWriter.new(html_temppath, binding) + + # HTMLã«æ¸ã込㿠+ myopen(destpath, 'w:utf-8') { |f| + f.write(CGI.pretty(html_temp.to_code)) + } + end + + # Entryããã³ãã¬ã¼ãã«æ²¿ã£ã¦å¤å½¢ããã¡ã½ãã + def to_template(temppath) + erb = HtmlWriter.new(temppath, binding) + title = CGI.unescapeHTML(@attr[:title]) + date = @attr[:published] + content = CGI.unescapeHTML(@attr[:content]) + erb.to_code + end + # Entryæ¿å ¥ã¡ã½ãã def self.insert(path, entry) feed = Feed.readxml(path) @@ -443,7 +525,7 @@ class Entry < AbstractEntry str.strip! str.gsub!(/(<\/(?:p|h\d|div)(?:>|>))\n/i, '\1') str.gsub!(/\n/, '<br>') if REPLACEBRTAG - str.gsub!(/(<(?:(?!>).)*?)#{Regexp.escape(FEEDXMLDIR)}/) { "#$1#{XMLPATH}" } + str.gsub!(/(<(?:(?!>).)*?)#{Regexp.escape(RELAYPATH)}/) { "#$1#{HOMEBASE}" } str end @@ -453,9 +535,9 @@ class Entry < AbstractEntry str = CGI.unescapeHTML(str) str.strip! str.gsub!(/(\r\n|\n)/, "") - str.gsub!(//i, "\n") if REPLACEBRTAG - str.gsub!(/(|<\/p>|<\/h\d>|<\/div>)(?=[^\n])/i) { "#$1\n" } unless REPLACEBRTAG - str.gsub!(/(<[^>]*?)#{Regexp.escape(XMLPATH)}/) { "#$1#{FEEDXMLDIR}" } + str.gsub!(/|/i, "\n") if REPLACEBRTAG + str.gsub!(/(||<\/p>|<\/h\d>|<\/div>)(?=[^\n])/i) { "#$1\n" } unless REPLACEBRTAG + str.gsub!(/(<[^>]*?)#{Regexp.escape(HOMEBASE)}/) { "#$1#{RELAYPATH}" } CGI.escapeHTML(str) end @@ -464,8 +546,8 @@ class Entry < AbstractEntry str = @attr[:content].dup str = CGI.unescapeHTML(str) str.strip! - str.gsub!(//i, "\n") if REPLACEBRTAG - str.gsub!(/(<[^>]*?)#{Regexp.escape(FEEDXMLDIR)}/) { "#$1#{XMLPATH}" } + str.gsub!(/|/i, "\n") if REPLACEBRTAG + str.gsub!(/(<[^>]*?)#{Regexp.escape(RELAYPATH)}/) { "#$1#{HOMEBASE}" } str end @@ -635,20 +717,24 @@ class Controller case params["action"] # 確èªç»é¢ when "confirm" + session["target_filepath"] = params["target_filepath"] db["newentry"] = Entry.new(params) db["newentry"].content = db["newentry"].content_for_blog # è¨äºã®è¿½è¨ãå®éã«ãã¡ã¤ã«ã«åæ when "exec" - successed = Entry.insert(XMLPATH + File.basename(session["filepath"]), Entry.new(params)) + session["target_filepath"] = params["target_filepath"] + successed = Entry.insert(XMLPATH + File.basename(params["target_filepath"]), Entry.new(params)) unless successed db["error"] = "æ¥è¨ã®æ°è¦è¿½å ã«å¤±æãã¾ããã" params["mode"] = "error" end # ç»é¢ãæ»ã£ãéã®å¦ç when "back" + session["target_filepath"] = params["target_filepath"] db["newentry"] = Entry.new(params) else # New Diary - Default + session["target_filepath"] = session["filepath"] db["feed"] = Feed.readxml(XMLPATH + File.basename(session["filepath"])) db["entry"] = Entry.readxml(XMLPATH + File.basename(session["filepath"])) end @@ -658,24 +744,29 @@ class Controller case params["action"] # ç·¨éç»é¢ when "edit" + session["target_filepath"] = params["target_filepath"] session["editid"] = cgi["editid"].to_s - db["editentry"] = Entry.select(XMLPATH + File.basename(session["filepath"]), session["editid"]) + db["editentry"] = Entry.select(XMLPATH + File.basename(session["target_filepath"]), session["editid"]) # 確èªç»é¢ when "confirm" + session["target_filepath"] = params["target_filepath"] session["editid"] = cgi["editid"].to_s db["editentry"] = Entry.new(params) db["editentry"].content = db["editentry"].content_for_blog # è¨äºã®å¤æ´ãå®éã«ãã¡ã¤ã«ã«åæ when "exec" - successed = Entry.update(XMLPATH + File.basename(session["filepath"]), Entry.new(params)) + session["target_filepath"] = params["target_filepath"] + successed = Entry.update(XMLPATH + File.basename(params["target_filepath"]), Entry.new(params)) unless successed db["error"] = "æ¥è¨ã®ç·¨éå¦çã«å¤±æãã¾ããã該å½ã®æ¥è¨ãæ¢ã«åå¨ããªãå¯è½æ§ãããã¾ãã" params["mode"] = "error" end when "back" + session["target_filepath"] = params["target_filepath"] db["editentry"] = Entry.new(params) else # Edit Diary - Default + session["target_filepath"] = session["filepath"] db["feed"] = Feed.readxml(XMLPATH + File.basename(session["filepath"])) db["entry"] = Entry.readxml(XMLPATH + File.basename(session["filepath"])) end @@ -685,17 +776,24 @@ class Controller case params["action"] # 確èªç»é¢ when "confirm" + session["target_filepath"] = params["target_filepath"] session["delid"] = cgi["delid"].to_s - db["delentry"] = Entry.select(XMLPATH + File.basename(session["filepath"]), session["delid"]) + db["delentry"] = Entry.select(XMLPATH + File.basename(session["target_filepath"]), session["delid"]) # è¨äºã®åé¤ãå®éã«ãã¡ã¤ã«ã«åæ when "exec" - successed = Entry.delete(XMLPATH + File.basename(session["filepath"]), cgi["delid"].to_s) + session["target_filepath"] = params["target_filepath"] + successed = Entry.delete(XMLPATH + File.basename(params["target_filepath"]), cgi["delid"].to_s) unless successed db["error"] = "æ¥è¨ã®ç·¨éå¦çã«å¤±æãã¾ããã該å½ã®æ¥è¨ãæ¢ã«åå¨ããªãå¯è½æ§ãããã¾ãã" params["mode"] = "error" end + when "back" + session["target_filepath"] = params["target_filepath"] + db["feed"] = Feed.readxml(XMLPATH + File.basename(session["target_filepath"])) + db["entry"] = Entry.readxml(XMLPATH + File.basename(session["target_filepath"])) else # Delete Diary - Default + session["target_filepath"] = session["filepath"] db["feed"] = Feed.readxml(XMLPATH + File.basename(session["filepath"])) db["entry"] = Entry.readxml(XMLPATH + File.basename(session["filepath"])) end @@ -705,14 +803,18 @@ class Controller case params["action"] # 確èªç»é¢ when "confirm" + session["target_filepath"] = params["target_filepath"] db["feed"] = Feed.new(params) # å®éã«Feedæ å ±ã®å¤æ´ããã¡ã¤ã«ã«åæ when "back" + session["target_filepath"] = params["target_filepath"] db["feed"] = Feed.new(params) when "exec" - Feed.update(XMLPATH + File.basename(session["filepath"]), Feed.new(params)) + session["target_filepath"] = params["target_filepath"] + Feed.update(XMLPATH + File.basename(params["target_filepath"]), Feed.new(params)) else - + session["target_filepath"] = session["filepath"] + db["feed"] = Feed.readxml(XMLPATH + File.basename(session["filepath"])) end # ãã°ç·¨éã¢ã¼ã @@ -940,10 +1042,8 @@ class Controller # ãã«ããã¼ããã©ã¼ã ã®å ´åã®å¦çã§ã def Controller.MultiForm(cgi, session, params, db) db.transaction do - # loglist.xmlããã¼ããã¾ã db["loglist"] = LogList.readxml(LISTXMLPATH) - case params["mode"] # ç¹å®ä½ç½®ã«æ¿å ¥ããå ´åã®å¦ç when "insert" @@ -1221,10 +1321,15 @@ def main end # ã¡ãã¥ã¼ã¨ãã¦è¡¨ç¤ºãããHTMLæååã§ã + if params["target_filepath"].blank? + menu = "ç¾å¨ç·¨éä¸ã®ãã¡ã¤ã« : #{session["filepath"]} " + else + menu = "ç¾å¨ç·¨éä¸ã®ãã¡ã¤ã« : #{session["target_filepath"]} " + end if USEFILEMANAGER == true - menu = "ç¾å¨ç·¨éä¸ã®ãã¡ã¤ã« : #{session["filepath"]} [ ä»ã®ãã¡ã¤ã«ãé¸æ ][ ããããã¼ã¸ | è¨äºç®¡ç ( ä½æ | ç·¨é | æ¶å» ) | XMLæ å ±ç·¨é | ãã°ç®¡ç | ã¤ã³ãã¼ã | ãã¡ã¤ã«ç®¡ç | åæå | ãã°ã¢ã¦ã ]" + menu += "[ ä»ã®ãã¡ã¤ã«ãé¸æ ][ ããããã¼ã¸ | è¨äºç®¡ç ( ä½æ | ç·¨é | æ¶å» ) | XMLæ å ±ç·¨é | ãã°ç®¡ç | ã¤ã³ãã¼ã | ãã¡ã¤ã«ç®¡ç | åæå | ãã°ã¢ã¦ã ]" else - menu = "ç¾å¨ç·¨éä¸ã®ãã¡ã¤ã« : #{session["filepath"]} [ ä»ã®ãã¡ã¤ã«ãé¸æ ][ ããããã¼ã¸ | è¨äºç®¡ç ( ä½æ | ç·¨é | æ¶å» ) | XMLæ å ±ç·¨é | ãã°ç®¡ç | ã¤ã³ãã¼ã | åæå | ãã°ã¢ã¦ã ]" + menu += "[ ä»ã®ãã¡ã¤ã«ãé¸æ ][ ããããã¼ã¸ | è¨äºç®¡ç ( ä½æ | ç·¨é | æ¶å» ) | XMLæ å ±ç·¨é | ãã°ç®¡ç | ã¤ã³ãã¼ã | åæå | ãã°ã¢ã¦ã ]" end # ãã¥ã¼é¨å