aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/fontsrv/osx.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/fontsrv/osx.c')
-rw-r--r--src/cmd/fontsrv/osx.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/cmd/fontsrv/osx.c b/src/cmd/fontsrv/osx.c
index d1a31837..f48f5b49 100644
--- a/src/cmd/fontsrv/osx.c
+++ b/src/cmd/fontsrv/osx.c
@@ -17,17 +17,31 @@
extern void CGFontGetGlyphsForUnichars(CGFontRef, const UniChar[], const CGGlyph[], size_t);
+// In these fonts, it's too hard to distinguish U+2018 and U+2019,
+// so don't map the ASCII quotes there.
+// See https://github.com/9fans/plan9port/issues/86
+static char *skipquotemap[] = {
+ "Courier",
+ "Osaka",
+};
+
int
-mapUnicode(int i)
+mapUnicode(char *name, int i)
{
+ int j;
+
+ if(0xd800 <= i && i < 0xe0000) // surrogate pairs, will crash OS X libraries!
+ return 0xfffd;
+ for(j=0; j<nelem(skipquotemap); j++) {
+ if(strstr(name, skipquotemap[j]))
+ return i;
+ }
switch(i) {
case '\'':
return 0x2019;
case '`':
return 0x2018;
}
- if(0xd800 <= i && i < 0xe0000) // surrogate pairs, will crash OS X libraries!
- return 0xfffd;
return i;
}
@@ -273,7 +287,7 @@ mksubfont(XFont *f, char *name, int lo, int hi, int size, int antialias)
CFStringRef keys[] = { kCTFontAttributeName, kCTForegroundColorAttributeName };
CFTypeRef values[] = { font, white };
- sprint(buf, "%C", (Rune)mapUnicode(i));
+ sprint(buf, "%C", (Rune)mapUnicode(name, i));
str = c2mac(buf);
// See https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/CoreText_Programming/LayoutOperations/LayoutOperations.html#//apple_ref/doc/uid/TP40005533-CH12-SW2
@@ -298,7 +312,7 @@ mksubfont(XFont *f, char *name, int lo, int hi, int size, int antialias)
// fprint(2, "printed %#x: %g %g\n", mapUnicode(i), p1.x, p1.y);
p1 = CGContextGetTextPosition(ctxt);
- if(p1.x <= 0 || mapUnicode(i) == 0xfffd) {
+ if(p1.x <= 0 || mapUnicode(name, i) == 0xfffd) {
fc->width = 0;
fc->left = 0;
if(i == 0) {