삽질하는플머

'태국어'에 해당되는 글 1건

  1. 다국어 입력... 또 하나의 산. 2

다국어 입력... 또 하나의 산.

탐구생활/Uniscribe
델마당 겜제작란에 올린 글을 옮겨붙여둠. 

솔직히 지금까지 출력만 잘 해결하면 입력은 윈도가 알아서 해주는 줄 알았는데...
글립엔진을 붙이고 있는 막내가 낑낑거리기에 참견하러 갔더니, 태국어 입력이 엉뚱하게 처리되고 있더라구요. 

앞서 이 길을 걸어가셨던 엘비스님께 도움을 청하니... "응? 그냥 되던데요?" 
태국어에 대해 Zupet님이 남기신 주옥같은 글에는... "그냥 WM_CHAR를 받아 찍으면 된다~"

두 분 모두 키워드는 "그냥~" 음냐... 도대체 안되는 이유가 뭘까 고민하니... 
아... 저희 게임윈도는 유니코드기반이었습니다. 2년쯤 전 중국어 간체로 된 게임제목이 한글윈도에서 깨져보이는 게 짜증나 바꿔버렸습죠. 로케일을 특정 국가로 고정하고 안시 API를 사용할 때에는 입력된 CharCode값을 해당 국가코드로 간주해 조립하면 되지만, 동시에 여러국가 언어를 입력받기 위해 유니코드 지원 윈도를 만들었을 때는 얘기가 다르더라구요. wParam의 LoWord에  255가, HiWord에 해당 UCS2 코드가 박혀날아옵니다. 이걸 Char로 형변환해 찍었으니 요상한 글자가 나올 수 밖에요. 어흙... 

일단 여기까지 해서 한시름 놓았는데... 다시 또 하나의 산이 가로막습니다. 태국어 입력기를 설치하고 'i' 'e' 를 차례로 입력하면 아래와 같은 글자가 찍힙니다. 

รำ

두 개 처럼 보이지만 뒤에 붙은 놈은 앞의 글자를 꾸며주는 물건이고 때문에 이 글자는 하나의 글자입니다. 그런데 여기에 다시 'e'를 눌러보면 어떻게 될까요. 표준 윈도 컨트롤을 제외한 입력창, 심지어 지금 제가 글을 적고있는 구글 크롬에서도 빈 문자가 뒤에 적층됩니다. 때문에 백스페이스로 글자를 지우려 하면 'e'를 누른 횟수만큼 커서가 제자리에 멈추게 되지요. 


รำรำรำ
รำำำรำำำรำ


위의 두 문자는 겉보기에는 똑같이 생겼지만 메모장같은 곳으로 복사해 백스페이스로 지워보면 처음것은 여섯번, 두번째 것은 열 번을 눌러야 지울 수 있습니다. 즉 이런 입력은 허용되어서는 안된다는 얘기입니다. (아이폰용 사파리에서는 입력한 대로 보이는군요.)  

막내와 머리를 쥐어짜기 시작했습니다. 처음에 떠오른 생각은 태국어의 조합원리를 조사해 예외처리를 하자는 것... 하지만 이 방법은 아무리 삽질을 좋아하는 저도 썩 내키지 않더군요. 그래서 새로운 글자가 입력되기 전과 후의 글립모양을 살펴서 동일할 경우 입력을 취소하자는 꽁수를 떠올렸습니다. 이 때 글립폭이 0인 녀석들은 제외하면 실제 보이는 모양만 비교할 수 있겠다 싶었지요.

그런데... 'i' 와 'h'를 입력할 경우처럼 두번째 글립이 앞부분에 옵셋되어 합쳐질 때, 

ร + ่ = ร่

이런 경우 유니스크라이브는 두번째 글립의 폭이 0이라고 알려줍니다. 하지만 모양이 틀림없이 변하므로 빼고 생각할 수는 없습니다. 결국 실제로 폰트에서 뽑아낸 글립의 크기값이 필요해지네요. 유니스크라이브의 고수준 API인 ScriptString을 쓰지 못하는게 처음에는 많이 아쉬웠는데... 그 때 휘둘렀던 삽자국이 이리도 유용하게 쓰일줄은 몰랐습니다. 흐흐흐~~

사실 크롬도 동일한 현상을 보인다는 걸 미리 알았다면, 그냥 사용자가 조심해서 쓰라고 하고 끝냈을텐데... 그건 이 글을 적으면서 깨달은거니... ^^;;

암튼 짧지만 굵은 삽질기였습니다. 솔직히... 이런거 갖고 고민할때가 제일 재미나는 것 같아요~~