2018년 6월 23일 토요일

Droid Sans Fallback 폰트 버그

http://cjonmart.net 라는 데를 들어가서 이것저것 장바구니에 담는데 중간중간 잘못 적힌 글자가 보였다. 처음 몇 번은 주말에 바빠서 오타를 냈나 싶었지만 같은 패턴이 반복되고 있었다.
가령 "건강식품관"이 "건가ㅈ식품관"처럼. "떡갈비"는 "떡가ᄅᅠ비"로. "밀감"이 "밀가ㅁ"로.

잘못 적힌 글자를 긁어다 복사해서 다른 창에 붙여보니 멀쩡하게 나왔다. 크롬이 폰트를 깨먹거나, 폰트가 잘못 만들어졌을 터였다.

브라우저에서 F12를 눌러 개발자 도구를 열고 잘못된 글자가 보이는 HTML 요소를 선택했다. 개발자 도구에서는 글자가 멀쩡하게 보였다.
 str=document.querySelector('[title="건강식품관"]').childNodes[0].text; for(i=str.length;i-->0;){console.log(str.charAt(i), str.charCodeAt(i), str.charCodeAt(i).toString(16));}
라고 가져다가 찍어봐도 "강"은 AC15로 잘 나왔다. 어쩌다 입력된 NFD가 잘못 표시되는 것도 아니란 얘기였다.

document.querySelector로 그 요소를 가져다가 window.getComputedStyle(x).fontFamily를 봤다. AppleSDGothicNeo-Medium, "Apple SD Gothic Neo Medium", "Noto Sans CJK Korean", "Noto Sans", "Droid Sans Fallback", "Malgun Gothic", sans-serif - 한켠에 gedit 설정창을 띄워서 폰트 이름을 찾아봤지만 애플도 Noto도 나오지 않았다. 잘못 표시되는 글자를 gedit 폰트 설정의 미리보기 칸에 넣고 차례로 폰트를 봤더니 Droid Sans Fallback이 깔려있었고, 실제로 글자도 크롬에서와 같이 잘못 나왔다.


하지만, 크롬이 gtk를 쓰던가? 폰트 파일의 잘못일 수도 있지만, 리눅스 세계이니만큼 폰트 래스터라이저를 먼저 의심해볼 필요가 있었다.

다시 파이어폭스에서 같은 주소를 열어봤다. 글자가 멀쩡하게 나왔다. F12를 눌러 요소를 선택하고 오른쪽에 어떤 폰트가 적용되었다는 설명을 열어보았다. 이번엔 Noto가 적용된 걸로 나왔다. Korean이라는 꼬리표가 붙은 폰트가 없기는 하지만 자동으로 KR로 적용하는 건지, 아니면 항상 Noto로 적용하는 건지. 이래서야 비교가 안 됐다. 다른 한글 폰트를 몽땅 제거해서 영문만 나오는 상태로 만든다면 확인이 되겠지만 그렇게까지 하고 싶지는 않았다.
혹시나 해서 Droid Sans Fallback을 웹폰트로 보여준다는 웹페이지도 몇 개 열어봤지만 증상을 재현해줄만한 상황은 아닌 것 같았다.

찾아보니 Droid Sans Fallback은 구글 안드로이드 때문에 배포되는 폰트인 것 같았다. 널리 쓰이는 걸 고려한 폰트인만큼 다국어 부문에서 잘못된 정보를 포함할 수도 있겠다 싶었다. gedit 설정창에 한글 AC00부터 11184글자를 모두 긁어다 붙여봤다. (설정창을 닫고 본문창에서는 증상이 나타나지 않았다) 과연, "가" 다음에 "각-갛" 범위의 글자가 모두 받침이 떨어진 상태로 나오고 있었다. "나" 이후로는 폰트 영역이 없을 때 나오는 채움 표시가 나오고 있었고 중간은 너무 많아서 다 못 봤지만, 끝에서는 다시 "힢힣" 두 글자가 나오는 걸로 끝이 났다. 빈 영역이 대부분인 걸로 봐서, 의도적으로 채워진 걸로는 보이지 않는다.

dpkg -l | grep -i droid 해보니 fonts-droid-fallback 패키지가 나온다. dpkg L fonts-droid-fallback 해보면 ttf 파일이 2개. fontstools 패키지의 ttx 명령으로 풀어보니 과연 HANGUL 어쩌고 하는 줄이 잔뜩 있다.

아마도 폰트가 잘못 만들어진 것 같긴 한데, 이걸 어디에 어떻게 전달을 할 수 있으려나 모르겠네.

https://github.com/google/fonts/issues/1352 첫번째 반응을 보면 Droid는 이제 Noto로 대체되었으니 그냥 바꾸고 말라는 얘기다. 그것도 2017년 말.
그래서 그냥 지웠다. apt remove fonts-droid-fallback -y