2010-04-22 4 views
4

폰트가 코코아에서 특정 유니 코드 문자를 렌더링 할 수 있는지 여부를 결정하는 방법이 있습니까? 또는 기본 대체 문자를 지정할 수 있습니까?폰트가 코코아 터치에서 유니 코드 문자를 렌더링 할 수 있는지 여부 확인하기

+0

당신은'NSTextView'를 사용하고 있습니까? 그렇지 않다면이 정보를 무엇에 사용하고 싶습니까? –

+0

아니요; iPhone OS의 UILabel에서 지원되지 않는 문자를 강조 표시하거나 대체 할 수 있기를 바랍니다. – conmulligan

+0

conmulligan : 그렇다면 코코아가 아니라 코코아 터치를 의미합니다. –

답변

3

iOS 이전 버전의 iOS (2.0)에는 CGFontGetGlyphWithGlyphName()을 사용할 수 있습니다. 애플은 그리 이름을 문서화하지 않는 것 그러나 나는 그들이이 어도비 목록에 해당 믿습니다

http://partners.adobe.com/public/developer/en/opentype/glyphlist.txt

는 예를 들어, é의 문자 모양 (U + 00E9)는 "피보호자"라는와 코드 다음과 같이 글리프가 표시됩니다.

CFStringRef name = CFStringCreateWithCString(NULL, "eacute", kCFStringEncodingUTF8); 
CGGlyph glyph = CGFontGetGlyphWithGlyphName(font, name); 
+1

에 의해 궁극적으로 작곡 될 수 있습니다. 조금 늦었지만 글자 이름은 글꼴마다 다르며 글꼴마다 다를 수 있습니다 (일부 글꼴에는 글리프 이름이 전혀 포함되지 않을 수도 있음). –

3

코어 텍스트 프레임 워크에서 CTFontGetGlyphsForCharacters을 확인하십시오. 지정된 Unicode 문자의 Glyph 인덱스에 제로가 돌려 주어지면, 그 문자는 그 폰트로 지원 (support)되지 않습니다. 글리프 (glyph)를 찾을 수 없으면 false를 반환합니다.

+0

Core Text는 iPad 용 버전 3.2 iPhone OS에만 도입 되었기 때문에 실제로 나를위한 옵션이 아닙니다. – conmulligan

+0

이 경우,'CGFontGetGlyphWithGlyphName'을 사용하고 문제의 문자 만있는 문자열을 전달할 수 있습니다. 나는 합성 문자에 대한 규칙이 무엇인지 모르겠다. 예를 들어 iPhone OS 3.1.3의 Helvetica는 e에 대한 글리프가 있지만 é, '에 대해서는 0을 반환하고 악센트를 결합합니다. – Tony

+0

이것은 글립 문자가 존재하지 않는다는 의미는 아니며 글 꼴 문자를 글립 문자에 매핑하는 표의 반영입니다. Apple Symbols 글꼴이 이에 대한 좋은 예입니다. 아마도 글꼴 파일의 글리프 인덱스에있는 유용한 글리프를 많이 제공하기 위해 사용되는 원본 글꼴 일 수도 있지만 반드시 문자에 매핑 할 필요는 없습니다. FontBook 및 특정 글꼴의 글립 문자에 대한 친숙도가 유용합니다. 하지만 iOS의 경우 특정 글꼴의 색인에있는 글리프를 검토하는 데 도움이되는 앱을 찾거나 만들어야 할 수 있습니다. – uchuugaka

1

iOS에 설치되었으므로이 기능을 구현하거나 앱을 찾아야 할 수 있습니다. 궁극적으로 정보가 개별적인 글리프에 대해 존재한다면 그것은 폰트 파일 자체의 테이블에 있으며 매우 낮은 수준의 C 작업입니다.

글꼴을 검사하고 글자 및 글자 색인 (CGGlyph 또는 NSGlyph 값)을 표시하는 도구를 작성하는 것이 훨씬 쉽고 그리핀 색인을 사용하십시오.