Flash/AS2.0

한글 워드랩 메쏘드 //2007/03/10 17:49

괴수가면 2012. 6. 5. 12:49
//한글 워드랩 메쏘드, rts는 초기값 ""이나 undefined으로 시작
//TextField는 single line이어야 한다.
//** 약간의 오차가 있을 수 있다.
//TextField에는 setNewTextField가 설정되어 있어야 정상작동된다.(setTextField X)
function returnString(st:TextField, limit:Number, rts:String):String {
	st.autoSize = true;
	var wid:Number = st._width;
	//trace("width : " + wid);
	var str:String = st.text;
	var rtStr:String = rts == undefined ? "" : rts;
	//문장 길이가 제한보다 길면 잘라냄
	if (wid > limit) {
		var len:Number = str.length;
		var newLen:Number = Math.floor(len * (limit / wid));
		var cutLen:Number = len - newLen;
		//잘라낸 앞/뒤 문장
		var nstr:String = str.substr(0, newLen);
		var tstr:String = str.substr(-cutLen, cutLen);
		//trace("before - " + [nstr, tstr]);
		//앞문장의 끝이나, 뒷문장의 처음이 공백이 아니면 앞문장의 마지막
		//공백까지 다시 잘라냄
		if (tstr.charAt(0) != " " && nstr.charAt(newLen - 1) != " ") {
			var arr:Array = nstr.split(" ");
			//공백이 없으면 그냥 자른 상태로 패스
			if (arr.length == 1) {
			} else {
				tstr = arr.pop() + tstr;
				nstr = arr.join(" ");
				//trace("after - " + [nstr, tstr]);
			}
			//줄의 처음 공백 제거
		} else if (tstr.charAt(0) == " ") {
			tstr = tstr.slice(1);
			//줄의 마지막 공백 제거
		} else if (nstr.charAt(newLen - 1) == " ") {
			nstr = nstr.slice(0, newLen - 1);
		}
		rtStr += nstr + "\n";
		st.text = tstr;
		//뒷문장을 다시 처리
		return arguments.callee(st, limit, rtStr);
	} else {
		return rtStr + str;
	}
}