| |
소스자체 -> http://why-not.193d.com/ptext/test.php (사라졌음 -_-)
간단한 메모장 -> http://chak-yi.net/
-----------------------------
<?php
$jamo = array(
/*0 1 2 3 4 5 6 7 8 9 */
"ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄸ", "ㄹ", "ㄺ", /* 0~9 */
"ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅃ", "ㅄ", /* 10~19 */
"ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ", /* 20~29 */
"ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", /* 30~39 */
"ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", /* 40~49 */
"ㅣ", " "); /* 50~51 */
$jo['cho'] = array(
51, 51,
/* ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ */
0, 1, 3, 6, 7, 8,16,17,18,20,
/* ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ */
21,22,23,24,25,26,27,28,29
);
$jo['jung'] = array(
51, 51, 51,
/* ㅏ ㅐ ㅑ ㅒ ㅓ */
30,31,32,33,34,
51,51,
/* ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ */
35,36,37,38,39,40,
51,51,
/* ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ */
41,42,43,44,45,46,
51,51,
/* ㅠ ㅡ ㅢ ㅣ */
47,48,49,50
);
$jung_div = array(
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51,
51, //ㅗ, 0//ㅗ 38
30, //ㅗ, ㅏ, 1//ㅘ 39
31, //ㅗ, ㅐ, 2//ㅙ 40
51, 51,
50, //ㅗ, ㅣ, 3//ㅚ 41
51, //ㅛ, 4//ㅛ 42
51, //ㅜ, 5//ㅜ 43
34, //ㅜ, ㅓ, 6//ㅝ 44
35, //ㅜ, ㅔ, 7//ㅞ 45
50, //ㅜ, ㅣ, 8//ㅟ 46
51, 51,
51, //ㅠ, 9//ㅠ 47
51, //ㅡ, 10//ㅡ 48
50, //ㅡ, ㅣ 11//ㅢ 49
);
$jo['jong'] = array(
51,51,
/* ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ */
0, 1, 2, 3, 4, 5, 6, 8, 9,10,
/* ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ */
11,12,13,14,15,16,
51,
/* ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ */
17,19,20,21,22,23,25,26,27,28,
/* ㅎ */
29,
);
function font($text, $max)
{
global $jamo, $jo, $jung_div;
$jcode = w2j($text);
for($i=0, $line=0, $line_chk=0; $i < strlen($jcode); $i++)
{
if( ord($jcode[$i]) < 128 )
{
/* 한글이나 2바이트 문자가 아니면.. */
if( ord($jcode[$i]) == 32 )
{
$str[$line][0] .= " ";
$str[$line][1] .= " ";
$line_chk += 2;
}
else if( ord($jcode[$i]) == 13 && ord($jcode[$i+1]) == 10 )
{
$i++;
$line++;
$line_chk=0;
}
else if( ord($jcode[$i]) > 32 )
{
$str[$line][0] .= sprintf("%c", ord($jcode[$i]));
$str[$line][1] .= " ";
$line_chk++;
}
}
else
{
$cho = ( ord($jcode[$i]) & 0x7c ) >> 2;
$jung = ( (ord($jcode[$i]) & 0x3 ) << 3 )
| ( (ord($jcode[$i+1]) & 0xe0 ) >> 5 );
$jong = ord($jcode[$i+1]) & 0x1f ;
if( is_han($cho, $jung, $jong) )
{
/* 한글이 맞다! */
/* printf("%s%s%s ",
$jamo[$jo['cho'][$cho]],
$jamo[$jo['jung'][$jung]],
$jamo[$jo['jong'][$jong]] );
*/
$is_one = 0;
/* '과' -> '고ㅏ' 로 분리 할 때 '고' 만들기
위해 임시 중성 값 'ㅗ' 저장용 */
$jung_tmp = 0;
if( $jung >= 13 && $jung <= 28 )
{
/* ㅗ, ㅘ, ㅜ, ㅟ.. 같이 중성이 초성과 종성 가운데 (공, 광)
들어갈 경우.. */
switch($jung)
{
/* 단모음일 경우 $is_one 셋팅 */
case 13 : $is_one = 1; /* ㅗㅘㅙㅚ-> ㅗ */
case 14 : case 15 : case 18 :
$jung_tmp = 13;
break;
case 19 : $is_one = 1; /* ㅛ */
$jung_tmp = 19;
break;
case 20 : $is_one = 1; /* ㅜㅝㅞㅟ-> ㅜ */
case 21 : case 22 : case 23 :
$jung_tmp = 20;
break;
case 26 : $is_one = 1; /* ㅠ */
$jung_tmp = 26;
break;
case 27 : $is_one = 1; /* ㅡㅢ-> ㅡ */
case 28 :
$jung_tmp = 27;
break;
}
$tmp = 1 + ( $jung_tmp << 5 ) | 0x8000 | $cho << 10;
$str[$line][0] .= j2w(chr($tmp>>8) . chr($tmp));
}
else
{
$str[$line][0] .= $jamo[$jo['cho'][$cho]];
}
if( !$is_one ) {
$str[$line][0] .= $jamo[$jung_tmp ?
$jung_div[$jung] : $jo['jung'][$jung]] . " ";
$str[$line][1] .= " ";
$line_chk += 2;
}
else
$str[$line][0] .= " ";
$str[$line][1] .= $jamo[$jo['jong'][$jong]] . " ";
$line_chk += 2;
}
else
{
/* 한글이 아니네..
iconv를 이용해서 완성형을 조합형으로 바꾸?
한글을 제외한 2바이트 문자들도 바뀌니깐!
한글을 제외한 2바이트 문자들은 다시 완성형으로! */
$str[$line][0] .= j2w(sprintf("%c%c",
ord($jcode[$i]), ord($jcode[$i+1])));
$str[$line][1] .= " ";
$line_chk += 2;
}
$i++;
}
if($line_chk >= $max)
{
$line++;
$line_chk = 0;
}
}
for($i=0; $i <= $line; $i++)
{
if( $i != 0 )
$ret .= "<br>\n";
$ret .= $str[$i][0] . "<br>\n" . $str[$i][1];
}
return $ret;
}
/* ------------------------
함수 정의
------------------------ */
/* 변환된 조합형 코드가 한글인지 아닌지 */
function is_han($cho, $jung, $jong) {
return (
( $cho > 0 && $cho < 21 ) /* 초성 1~20 */
&&
(
( $jung > 1 && $jung < 8 ) || /* 중성 2~7 */
( $jung > 9 && $jung < 16 ) || /* 중성 10~15 */
( $jung > 17 && $jung < 24 ) || /* 중성 18~23 */
( $jung > 25 && $jung < 30 ) /* 중성 26~29 */
)
&&
(
( $jong > 0 && $jong < 18 ) || /* 종성 1~17 */
( $jong > 18 && $jong < 30 ) /* 종성 19~29 */
)
) ? 1 : 0;
}
/* 완성형을 조합형으로 */
function w2j($text)
{
return iconv("cp949","johab",$text);
}
/* 조합형을 완성형으로 */
function j2w($text)
{
return iconv("johab","cp949",$text);
}
echo font("와우! 안녕하세요, 반갑습니다! 뷁꿐퉾펤", 50);
?>
|