LDRの本文とか弄るGreasemonkey (& Opera Safari3対応)

livedoor Readerでフィードの本文中の改行コードをbrタグに変換するGreasemonkeyスクリプト - むぅもぉ.jpの件。

こういうのに使えそうなScriptとして、id:brazil さん作の LDR - PrefavというScriptがあります。これに追加するのがスマートかなと思い、Opera、Safari3(GreaseKit1.4)対応しつつ書いてみた。

んですが、どういうときに改行を変換するかというルールが面倒なことに気が付く。。フィードごとに追加するのは確実だけど、メンテが面倒すぎる。なので、タグっぽいものがあったら何もしないで、タグっぽいものがなかったら変換してみるテスト。いい加減なチェックな分、変換する必要がないのに間違って変換してしまうことはない。と思う。
しばらく使ってチューニングしてみるので、使っていただける方はフィードバックもらえると助かります。

http://ss-o.net/userjs/ldrprefav.user.js

// ==UserScript==
// @name           LDR - Prefav
// @namespace      http://coderepos.org/
// @include        http://reader.livedoor.com/reader/
// @include        http://fastladder.com/reader/
// ==/UserScript==
(function(unsafeWindow){
with(unsafeWindow){
	var filters = {
/*************************************省略*******************************************/
		"convert break to br" : function(f){
			foreach(f.items, function(i){
				if(!i.body.match(/<\s*?\w/))
					i.body = i.body.replace(/(\r\n|\r|\n)/g, '<br>$1');
			})
		}
	}
	
	register_hook('BEFORE_PRINTFEED', function(feed) {
		if(! subs_item(feed.subscribe_id).unread_count)
			return;
		
		for(var n in filters)
			filters[n](feed);
	});
}

// -- [Utility] ----------------------------------------------------------------------
function filter(arr, func){
	for (var i=0,len=arr.length; i<len; i++){
		if(!func(arr[i])){
			arr.splice(i--, 1);
			len--;
		}
	}
}
})(this.unsafeWindow||window);