KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
Your mode of life will be changed for the better because of good news soon.
FrontPage › OldGulim



기왕에 정리하는 참에 FontForge를 이용해서 예전에 OldGulim에 GSUB를 넣었던 작업을 다시 해봤습니다.
  1. OldGulim의 glyph이름을 바꾼다.
  2. 필요하면 glyph 위치를 옮겨준다.
  3. 은바탕 6x2x4조합을 만드는데 썼던 6x2x4.fea 파일을 살짝 변형해서 집어 넣는다.
의외로 매우 쉬웠습니다. 잘 정리해두신 JN님 김도현님께 감사.

  1. glyph이름 바꾸는 스크립트 : @fixsfd.pl.txt.txt (3.98 KB)
  2. 필요하면 glyph의 위치를 옮긴다 : @move.ff.txt (909 Bytes) (FontForge로 0x10000 위치 이후로 옮기니 자동으로 유니코드 값이 -1이 됨.) - feature file이 glyphindex 의존적이 아니라 glyphname 의존적이라 쉬워졌다. VOLT파일은 glyphindex 기준인듯)
  3. OldGulim의 변형된 feature 파일: @ogulim_6x2x4.fea.txt (45.09 KB)
  4. GSUB 들어간 새로운 OldGulim : @Ogulim_gsub.zip (206.69 KB) @Ogulim_gsub2.zip (214.71 KB) (glyph를 뒤쪽으로 옮긴 것)
    DeleteMe 감동할만큼 깔끔하고 명쾌한 fea 파일이네요. 기왕이면 글리프 유니코드값도 -1로 바꾸었으면 합니다. pdf에서 텍스트추출이 안 돼서요. 그리고 이건 딴 얘긴데 이 폰트에 세로쓰기를 위한 대체 자소 글리프들이 있습니다. 이걸 어떻게 써먹을 방법이 없는지 모르겠습니다. 저는 자소 글리프들의 세로쓰기를 한 번도 성공한 적이 없습니다.

    6x2x4 조합 feature file은 JN님과 김도현님께서 정리하신 것으로 알고있습니다~ 이 6x2x4조합은 아마도 옛한글자모굴림의 방식을 그대로 응용한 것이고 6x2x4 조합 및 glyph는 제 기억으로는 JN님께서 직접 그리고 만든 것일 듯. 세로쓰기용 glyph를 어떻게 써먹을 지 또 옛한글 자모굴림과 새굴림의 merge가 가능할 것 같은데.. fontforge 스크립트를 살펴보고 있습니다~ --WkPark

세로쓰기 조합 glyph 테스트

  1. OldGulim에 내장된 vert feature을 살짝 변환 @6x2x4-vert.fea.txt (36.26 KB)
  2. OldGulim에 vert 정보 넣음
    ...
    SetFontHasVerticalMetrics(1)
    Select(65536,66562) # vertical 자소 영역 - 중성/종성만 있음. 초성은 그대로 사용. (?????)
    SetVWidth(0) # zero width
    ...
    
  3. vert feature까지 모두 들어간 OldGulim : @Ogulim_vert.zip (216.93 KB)
  4. vertmetric.png


    다른 어플리케이션은 아는 게 없어 xetex으로 테스트해봤는데 문제가 있습니다. 그래서 다음과 같이 시도해 보았고 이를 기록해둡니다.
    1. *.vert 자소 글리프들의 수평 width를 1024로 수정한다.
    2. *.vert 자소 글리프들의 수직 width는 0로 그대로 유지한다.
    3. ttf를 만든다. vmtx 테이블에 tsb(top side bearing)이 제대로 들어가지 않는 문제가 있다.
    4. ttx로 vmtx 테이블을 추출하여 tsb가 0이 아닌 *모*든* 글리프의 tsb값을 수정한다. 새값 = 879 - 원래값. 879는 ascent값이다.
    5. 수정된 vmtx 테이블을 ttf에 집어넣는다.
    6. ogulim-vert.png
    7. 폭이 1024인 글리프 세 개가 나란히 오므로 줄 간격이 커지는 문제가 남아있다. 그렇다고 vert 글리프 폭을 0으로 줄이면 정상작동하지 않는다.
    8. 단어간 간격이 큰 문제는 vmtx 테이블에서 space의 height를 512로 줄이면 해결된다.

제가 별로 아는게 없어서 조금 하다 말은 결과물을 올려놓았었습니다~ FontForge에서도 이상하게 삐뚤빼뚤하고.... Vertical Width가 0이면서 -1024쪽으로 그리는 것은 이론상(?) 맞는데 xetex이 특별처리를 하는게 아닌가 생각되네요. 아무튼 수고하셨습니다~ GSUB의 ccmp=>l/v/tjmo feature가 적용된 후에 최종적으로 vert feature가 적용되는 원리도 확인하게 되는군요~ ^^ 그리고 이정도로 꽤 간단하다면 FontForge 스크립트로도 옛한글에서 vert를 지원하게끔 만들 수 있을 듯. -- WkPark 2010-03-05 12:36:37
xetex은 ICU 라이브러리를 이용합니다. 확신할 수는 없지만 ICU 라이브러리가 저렇게 처리하지 않나 싶습니다. 상식적인 tsb와는 좀 다르더군요. 어쨌든 fontforge의 tsb 값은 엉터리인게 분명합니다. 위 내용을 조금 수정하였습니다. y축 이동을 없애고 대신 tsb값을 조정하였습니다.

앗, fontforge의 tsb값은 전각 글자들에서도 문제가 있네요. ongulim.ttf의 한글 음절 tsb에 780이 넘는 엄청나게 큰 값이 들어가 있습니다. ascent에서 이 값을 빼줘야 제대로 되지 않을까 하는데... 크리티컬한 버그로군요. 위 내용을 수정하였습니다.
위에서 SetFontHasVerticalMetrics(1)를 해주어야 해서 살펴보니 OldGulim에는 원래부터 vmtx정보가 있더군요. FontForge에서 sfd로 저장할 때에.. vmtx 정보를 소실하는 버그가 있는지.. 아무튼 관련된 버그들이 보이는 것 같습니다.

워드패드 등등에서 FontForge로 갓 구워진(?) ONgulim을 세로쓰기 테스트 해보니 (글자 크기를 20 이상으로 크게해서) 글자가 오르락 내리락 합니다 :> FontForge의 버그는 확실한 것 같네요ㅋ (@새굴림 글꼴을 선택하면 워드패드에서 세로쓰기를 테스트해볼 수 있음)

함초롬에 적용해 본 무척 간단한 다른 방법을 메모해둡니다. 함초롬은 애초부터 세로쓰기 정보를 전혀 가지고 있지 않기 때문에 위 방법을 쓸 수 없습니다.
  1. setfonthasverticalmetrics만 설정하고 따로 vwidth를 주지도 gsub 글리프를 만들지도 않는다.
  2. 대신 gpos 테이블을 넣는다. vrt2 속성에 모든 중·종성 자소와 방점 글리프의 위치를 <500 1000 0 -1000>으로 설정한다. 즉 x축으로 0.5em, y축으로 1em만큼 이동하고 y advance를 1em 줄인다. (왜 0.5em인가. 베이스라인이 em폭을 반으로 가르기 때문. 윈도에서는 문제가 될 수 있음)
  3. ttf를 만든 후, vmtx 테이블을 수정한다.

gpos를 사용하는 방법도 있군요? 윈도우즈 등등에서도 범용적이려면 vert를 넣으면 좋겠지요~

OldGulim + Ngulim(새굴림)

이렇게 만들어진 OldGulim을 새굴림과 합친 것 - 한양PUA코드도 첫가끝도 됨.

glyph이름을 바꾸니 FontForge로 쉽게 merge되는군요 @@
  • @OnGulim.0306.ttf.zip (15.68 MB) 3/6일 업데이트 + AvgCharWidth문제 고침 ( /!\ 재배포에 문제있는 실험용입니다. 주의해주세요. /!\ )
  • ongulim.png
<!> 비트맵이 merge가 되지 않아서 지저분했던 것입니다. FontForge의 버그. 3월6일자로 다시 올림.

다음을 패치해주면 비트맵도 잘 merge됩니다.
--- fontforge-20090923.orig/fontforge/fvfonts.c   2009-09-01 12:24:26.000000000 +0900
+++ fontforge-20090923/fontforge/fvfonts.c   2010-03-06 22:08:46.000000000 +0900
@@ -595,7 +595,6 @@
            f_bdf = f_bdf->next;
        } else if ( t_bdf->pixelsize < f_bdf->pixelsize ) {
            t_bdf = t_bdf->next;
-           f_bdf = f_bdf->next;
        }
     }
 }

새바탕 + 옛한글 자모바탕 (비트맵도 잘 merge된 것)

^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-03-19 18:19:14
Processing time 0.0611 sec