한글 8x4x4 비트맵 폰트에서 벌수에 대한 문의 드립니다.

keedi의 이미지

8x4x4 비트맵 폰트를 건드리고 있는 중입니다.
참고하던 아래 자료에서 이상한 점을 발견해서요.
탁 막혀 버렸네요. 도움 부탁드립니다.

중성에 해당하는 4개의 벌수에서

Quote:
중성 1벌 : 받침없는 'ㄱㅋ' 와 결합
중성 2벌 : 받침없는 'ㄱㅋ' 이외의 자음
중성 3벌 : 받침있는 'ㄱㅋ' 와 결합
중성 4벌 : 받침있는 'ㄱㅋ' 이외의 자음

로 찾았는데 여기에서 ㄱ 과 ㅋ 은 초성을 이야기 하는 것 아닌지요.
아래 소스 코드에 보면

            if(last==0) { /* 먼저 종성이 있는 지 없는 지를 조사 */
                   bul1=cho[middle];                   /* 초성 */
                   if(first==1||first==24) bul2=1;     /* 종성 */
                   else bul2=2;
                   ... /* 이부분에서 합성하고 출력하도록하죠. */
                   }
            else {
                   bul1=cho2[middle];                  /* 초성 */
                   if(first==1||first==24) bul2=3;     /* 종성 */
                   else bul2=4;
                   bul3=jong[middle];
                   ...
                 }

이라고 나오는데요. first == 1 | first == 24 부분이 오타인지 아니면
제대로 한것인지 잘 모르겠네요. 조합형 코드 순서에서 초성의 경우
ㄱ은 1, ㅋ은 16이고 종성의 경우 ㄱ은 1, ㅋ은 24 입니다만...

소스를 코딩하신 분이 실수하신것인지 아니면 저렇게 체크하는것이
맞는지 잘 모르겠네요.

여기서부터는 제가 참고한 자료 일부입니다.
김성익 님의 한글 폰트 출력과 벌수와 관련한 자료 였습니다.

Quote:

여기선 8x4x4에 대해 알아보죠.

8x4x4벌이란 초성 8벌,중성 4벌,종성 4벌을 나타냄니다.각 벌의 구
성을 알아보죠.그럼 아마 벌이란 무엇인지 아실검니다.

초성
초성 1벌 : 받침없는 'ㅏㅐㅑㅒㅓㅔㅕㅖㅣ' 와 결합
초성 2벌 : 받침없는 'ㅗㅛㅡ'
초성 3벌 : 받침없는 'ㅜㅠ'
초성 4벌 : 받침없는 'ㅘㅙㅚㅢ'
초성 5벌 : 받침없는 'ㅝㅞㅟ'
초성 6벌 : 받침있는 'ㅏㅐㅑㅒㅓㅔㅕㅖㅣ' 와 결합
초성 7벌 : 받침있는 'ㅗㅛㅜㅠㅡ'
초성 8벌 : 받침있는 'ㅘㅙㅚㅢㅝㅞㅟ'

중성
중성 1벌 : 받침없는 'ㄱㅋ' 와 결합
중성 2벌 : 받침없는 'ㄱㅋ' 이외의 자음
중성 3벌 : 받침있는 'ㄱㅋ' 와 결합
중성 4벌 : 받침있는 'ㄱㅋ' 이외의 자음

종성
종성 1벌 : 중성 'ㅏㅑㅘ' 와 결합
종성 2벌 : 중성 'ㅓㅕㅚㅝㅟㅢㅣ'
종성 3벌 : 중성 'ㅐㅒㅔㅖㅙㅞ'
종성 4벌 : 중성 'ㅗㅛㅜㅠㅡ'

대충 감을 잡으셨겠죠? 폰트가 다음과 같이 구성되어 있습니다. 폰
트에디터같은 걸로 보시면 초성문자 8묶음,중성 4묶음,종성 4묶음 씩
되어 있을 텐데... 각 묶음은 위와 같은 조건으로 그림거지요. 그럼
출력루틴을 만들어 보지요.

4. 벌수 분석

이제 한글 출력을 위한 모든 자료는 모였다고 볼수있습니다. 이제
출력을 위해 글자를 합성하기만 하면 되죠.앞에서 각 구성 코드로 나
누는 부분을 짜 보았고 이제 각 초성,중성,종성을 분석해서 벌수를
알아 내는 루틴을 만들어 보죠.

역시 테이블처리를 하면 간단합니다.

          unsigned char cho[]={
               0, 0,0,0,0,0,0,0,0,1,3,3,3,1,2,4,4,4,2,1,3,0
               };
          unsigned char cho2[]={
               0, 6,6,6,6,6,6,6,6,7,8,8,8,7,7,8,8,8,7,7,8,6
               };
          unsigned char jong[]={
               0, 0,2,0,2,1,2,1,2,3,0,2,1,3,3,1,2,1,3,3,1,1
               };

          void puthan(unsigned code)
          {
            char bul1,bul2,bul3; /* 초성,중성,종성 벌 저장변수 */
            ...

            if(last==0) { /* 먼저 종성이 있는 지 없는 지를 조사 */
                   bul1=cho[middle];                   /* 초성 */
                   if(first==1||first==24) bul2=1;     /* 종성 */
                   else bul2=2;
                   ... /* 이부분에서 합성하고 출력하도록하죠. */
                   }
            else {
                   bul1=cho2[middle];                  /* 초성 */
                   if(first==1||first==24) bul2=3;     /* 종성 */
                   else bul2=4;
                   bul3=jong[middle];
                   ...
                 }
          }

바로 이렇게 bul1,bul2,bul3 형태로 나누는 검니다. 초성의 경우
중성문자에 따라 벌수를 정하고 중성은 'ㄱㅋ'인지를 조사해서 벌
수를 정하고 종성은 중성에 따라 역시 정하면 되지요.

이렇게 벌수를 나누었는 데... 실제로 벌수는 어떻게 쓰일 까요?
바로 폰트를 읽어들인 버퍼에서 해당 글자의 위치를 벌수에 맞추어
이동시켜주면 됨니다.

colus의 이미지

변수 이름도 first로 되어 초성을 뜻하는 것 같고.
last == 0 안으로 들어가면 종성도 없는데 종성코드로 비교하면 이상하겠죠.

keedi의 이미지

그렇다면 if 문 내의 비교값을 바꾸어야 하는건가요?

원래 코드
first == 1 | first == 24

아래와 같이 바꾸어야 하는지요?
first == 1 | first == 16

----
use perl;

Keedi Kim

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.