삽질하는플머

기존 게임으로 피드백

탐구생활/Uniscribe

글립 캐시를 외부에서 사용할 수 있도록 DLL로 만들고, 기존 게임의 랜더링엔진에 대한 아답터루틴을 구현한 뒤 간단한 문자열을 올려보았다. 입력기를 새로 만들는 것 보다 기존 게임에서 쓰이는 입력기의 글자출력부분만 바꿔치는 방법이 좀 더 빠른 작업이 될 것 같아서... 또 어차피 기존 게임도 아랍어 등의 다국어 처리는 필요하니까.




DLL의 크기는 일단 160kb. 폰트링크에 쓰인 MLang 이 COM 이므로, 이에 대응하는 코드를 LVCL에 짜넣으면 훨씬 작게도 만들 수 있을 것이다.

힌두어 + 아랍어 + 태국어도 테스트. 자알~ 출력된다. (뿌듯~ 뿌듯~)
예제문자열 : ठऑक्षझॉيُساوِيเข้าหน้าสู่หน้าหลัก




지나가는 팁 한조각.

구버전 델파이는 코드편집기에 안시문자열을 사용한다. 때문에 위와같은 문자열을 코드에디터에서 지정하기가 쉽지 않다.
UTF-8 편집을 지원하는 상위버전 델파이라면 #숫자 와 같은 형식을 WideString 에 바로 때려넣는것도 가능하지만 

  myWSTR: WideString =
    #2336#2321#2325#2381#2359#2333#2377#1610#1615#1587#1575#1608 +
    #1616#1610#3648#3586#3657#3634#3627#3609#3657#3634#3626#3641 +
    #3656#3627#3609#3657#3634#3627#3621#3633#3585;

구버전에서는 이또한 여의치 않다.

유니코드 구세주인 TNT컨트롤의 TntSystem.pas 에 정의된 다음 두 함수를 써보자. 

  function WideStringToUTF7(const W: WideString): AnsiString;
  function UTF7ToWideString(const S: AnsiString): WideString;

WideStringToUTF7 함수로 위의 다국어를 변환해주면 다음과 같은 안시문자열을 얻을 수 있다.

      '+CSAJEQkVCU0JNwkdCUkGSgZPBjMGJwZIBlAGSg5ADgIOSQ4yDisOGQ5JDjIOKg4' +
      '5DkgOKw4ZDkkOMg4rDiUOMQ4B';

코드를 안짜고 간단히 얻으려면, 빈 폼에 TTntEdit 를 하나 올리고 여기에 원하는 다국어를 넣어준 뒤 마우스 우측버튼을 눌러 "View as Text" 메뉴를 선택하면 Text_UTF7 프로퍼티에 생성된 문자열을 복사해올 수 있다.




이렇게 얻어진 문자열을 대충 다음과 같이 UCS2로 변환해쓰면 된다. 

const
  myASTR :  AnsiString =
      '+CSAJEQkVCU0JNwkdCUkGSgZPBjMGJwZIBlAGSg5ADgIOSQ4yDisOGQ5JDjIOKg4' +
      '5DkgOKw4ZDkkOMg4rDiUOMQ4B';
var
  myWSTR: WideString;
......
  myWSTR := UTF7ToWideString(myASTR);

뭐 구버전 델파이의 코드에디터에서 유니코드를 직접 지정할 일이 얼마나 될까 싶지만...
(적어도 오늘까지는 단 한번도 없었... ^^)