/*
	カーニングペアの定義
	単位はem。 -0.5(em) でボックス0.5個分詰まる。
	"*く" と定義した場合、"あく"、"いく"、"うく"、というように、全ての"○く"の組み合わせにカーニングが設定される。
	"あく" と定義をした場合、 "あく"という文字のペアのみにカーニングが設定される。
	ワイルドカードペアと直接指定のペアが衝突する場合、直接指定のペアが優先される。
*/
var p = {};

//前後の文字をワイルドカード指定した汎用のカーニングペア


p["¥*"] = -0.002;
p["*ッ"] = -0.05;

p["A*"] = -0.08;
p["B*"] = -0.06;
p["D*"] = -0.05;
p["G*"] = -0.06;
p["E*"] = -0.06;
p["F*"] = -0.06;
p["I*"] = -0.06;
p["K*"] = -0.08;
p["L*"] = -0.08;
p["M*"] = -0.08;
p["N*"] = -0.11;
p["O*"] = -0.08;
p["P*"] = -0.01;
p["R*"] = -0.06;
p["S*"] = -0.06;
p["T*"] = -0.06;
p["U*"] = -0.11;
p["*U"] = -0.16;
p["W*"] = -0.07;

p["a*"] = -0.06;
p["c*"] = -0.06;
p["d*"] = -0.08;
p["e*"] = -0.04;
p["*f"] = -0.01;
p["f*"] = -0.01;
p["g*"] = -0.06;
p["h*"] = -0.05;
p["*h"] = -0.02;
p["i*"] = -0.06;
p["n*"] = -0.06;
p["k*"] = -0.06;
p["l*"] = -0.08;
p["m*"] = -0.06;
p["o*"] = -0.08;
p["p*"] = -0.05;
p["s*"] = -0.04;
p["t*"] = -0.06;
p["u*"] = -0.06;
p["v*"] = -0.05;
p["w*"] = -0.05;
p["*w"] = -0.05;
p["x*"] = -0.04;

p["!*"] = -0.05;

p["0*"] = -0.05;
p["1*"] = -0.08;
p["2*"] = -0.02;
p["3*"] = -0.02;
p["5*"] = -0.05;
p["8*"] = -0.05;
p["9*"] = -0.05;

p[" *"] = -0.05;
p["(*"] = -0.01;
p[")*"] = -0.01;

//直接指定のカーニングペア
p["。*"] = -0.3;
p["」「"] = -0.75;
p["」。"] = -0.25;
p["」、"] = -0.25;
p["、「"] = -0.75;
p["。「"] = -0.75;
p["、『"] = -0.75;
p["。『"] = -0.75;
p["、（"] = -0.75;
p["。（"] = -0.75;


p[".1"] = -0.12;
p["1."] = 0;
p["12"] = -0.05;
p["13"] = 0.01;


p[" A"] = -0.15;
p["SA"] = -0.12;
p["BU"] = -0.12;
p["Te"] = -0.23;
p["ti"] = -0.02;
p["ip"] = -0.06;
p["rv"] = -0.04;
p["ri"] = -0.04;
p["f "] = -0.08;
p["l!"] = 0.06;
p["ll"] = -0.09;
p["co"] = -0.04;
p["Ko"] = -0.1;
p["yo"] = -0.08;
p["'s"] = -0.12;
p["Un"] = -0.06;
p["Yo"] = -0.15;
p[" U"] = -0.03;
p[" A"] = -0.03;
p["h "] = -0.15;
p[" ("] = -0.08;
p["Na"] = -0.06;
p["Ni"] = -0.05;
p["Dr"] = -0.03;
p["Bu"] = -0.08;
p["W "] = -0.25;
p["S-"] = -0.03;
p["ew"] = -0.05;
p["1,"] = -0.15;
p["M-"] = -0.03;
p["Th"] = -0.07;
p["Un"] = -0.08;
p["ve"] = -0.08;
p["er"] = -0.07;
p["rs"] = -0.06;
p["ni"] = -0.09;
p["In"] = -0.09;
p["i)"] = 0.06;
p["d)"] = 0.06;
p["SU"] = -0.08;
p["UM"] = -0.11;
p["MM"] = -0.11;
p["ME"] = -0.11;
p["ER"] = -0.09;
p["SO"] = -0.09;
p["IC"] = -0.09;
p["8/"] = 0.03;
p["CO"] = -0.09;
p["YR"] = -0.09;
p["RI"] = -0.09;
p["HT"] = -0.09;
p["©2"] = 0.01;
p["EU"] = -0.08;
p["NT"] = -0.03;
p["TA"] = -0.1;
p["Ne"] = -0.05;

//1文字は行頭専用のカーニングペア
p["「"] = -1;
p["『"] = -0.5;
p["（"] = -0.5;
p["【"] = -0.5;
p["“"] = -0.5;

p["B"] = -0.1;
p["D"] = -0.06;
p["N"] = -0.06;


/*
 * @class FLAutoKerning
 * @version 0.0.3 (2011/02/28)
 * 
 * テキストに文字詰めを適用するUtilityクラス。
 * インスタンス化せずに、スタティック関数として使用する。
 *
 * @author Takayuki Fukatsu, artandmobile.com, fladdict.net
 * @requires jQuery
 */
var FLAutoKerning = {};


/*
 * ディフォルトのカーニング情報を格納した定数。
 * ユーザーが任意のカーニング情報を適用しない場合は、この情報を基準にカーニングが設定される。
 */
FLAutoKerning.DEFAULT_KERNING_INFO = p;


/*
 * 渡された jQuery オブジェクト内のテキストに、字詰めを適用する。
 * 字詰めはスタイルシートのletter-spacingによって実現される。
 * 第2引数を指定することで、ユーザー独自のカーニング情報を適用することも可能。
 * 
 * @param {jQuery} elements テキストを内包したhtml要素の jQuery オブジェクト。
 * @param {Array} kerningInfo カーニングペア情報を格納した配列。省略した場合は、FLAutoKerning.DEFAULT_KERNING_INFO が適用される。
 */
FLAutoKerning.process = function( elements, kerningInfo )
{
	if(kerningInfo==undefined)
		kerningInfo = FLAutoKerning.DEFAULT_KERNING_INFO;
	
	elements.each(
		function(index, element){
			var html = $(element).html();
			var newHtml = "";
			var n = html.length;
			for(var i=0; i<n; i++)
			{
				var char = html.substr(i,1);
				var char2 = char;
				var nextChar = html.substr(i+1,1);
				var space = 0;
				
				if(kerningInfo[char+nextChar]){
					//明示的なカーニングペアの処理
					space = kerningInfo[char+nextChar];
				}else{
					//汎用カーニングペアの処理
					if(kerningInfo[char+"*"] )
						space += kerningInfo[char+"*"];
					if(kerningInfo["*"+nextChar] )
						space += kerningInfo["*"+nextChar];
				}
				if(space!=0)
					char2 = "<span style='letter-spacing:" + space + "em'>" + char + "</span>";
					
				//行頭約物の処理
				if(i == 0 && kerningInfo[char])
					char2 =  "<span style='margin-left:" + kerningInfo[char] + "em'/>" + char2;
					
				newHtml += char2;
			}
			$(element).html(newHtml);
		});
}

//tenpの変数を削除
delete p;
