|
@@ -37,6 +37,7 @@
|
|
// Martins Mozeiko
|
|
// Martins Mozeiko
|
|
// Cap Petschulat
|
|
// Cap Petschulat
|
|
// Omar Cornut
|
|
// Omar Cornut
|
|
|
|
+// github:aloucks
|
|
//
|
|
//
|
|
// Misc other:
|
|
// Misc other:
|
|
// Ryan Gordon
|
|
// Ryan Gordon
|
|
@@ -1054,7 +1055,6 @@ STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codep
|
|
stbtt_uint16 searchRange = ttUSHORT(data+index_map+8) >> 1;
|
|
stbtt_uint16 searchRange = ttUSHORT(data+index_map+8) >> 1;
|
|
stbtt_uint16 entrySelector = ttUSHORT(data+index_map+10);
|
|
stbtt_uint16 entrySelector = ttUSHORT(data+index_map+10);
|
|
stbtt_uint16 rangeShift = ttUSHORT(data+index_map+12) >> 1;
|
|
stbtt_uint16 rangeShift = ttUSHORT(data+index_map+12) >> 1;
|
|
- stbtt_uint16 item, offset, start, end;
|
|
|
|
|
|
|
|
// do a binary search of the segments
|
|
// do a binary search of the segments
|
|
stbtt_uint32 endCount = index_map + 14;
|
|
stbtt_uint32 endCount = index_map + 14;
|
|
@@ -1071,8 +1071,8 @@ STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codep
|
|
// now decrement to bias correctly to find smallest
|
|
// now decrement to bias correctly to find smallest
|
|
search -= 2;
|
|
search -= 2;
|
|
while (entrySelector) {
|
|
while (entrySelector) {
|
|
|
|
+ stbtt_uint16 end;
|
|
searchRange >>= 1;
|
|
searchRange >>= 1;
|
|
- start = ttUSHORT(data + search + searchRange*2 + segcount*2 + 2);
|
|
|
|
end = ttUSHORT(data + search + searchRange*2);
|
|
end = ttUSHORT(data + search + searchRange*2);
|
|
if (unicode_codepoint > end)
|
|
if (unicode_codepoint > end)
|
|
search += searchRange*2;
|
|
search += searchRange*2;
|
|
@@ -1080,19 +1080,21 @@ STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codep
|
|
}
|
|
}
|
|
search += 2;
|
|
search += 2;
|
|
|
|
|
|
- item = (stbtt_uint16) ((search - endCount) >> 1);
|
|
|
|
|
|
+ {
|
|
|
|
+ stbtt_uint16 offset, start;
|
|
|
|
+ stbtt_uint16 item = (stbtt_uint16) ((search - endCount) >> 1);
|
|
|
|
|
|
- STBTT_assert(unicode_codepoint <= ttUSHORT(data + endCount + 2*item));
|
|
|
|
- start = ttUSHORT(data + index_map + 14 + segcount*2 + 2 + 2*item);
|
|
|
|
- end = ttUSHORT(data + index_map + 14 + 2 + 2*item);
|
|
|
|
- if (unicode_codepoint < start)
|
|
|
|
- return 0;
|
|
|
|
|
|
+ STBTT_assert(unicode_codepoint <= ttUSHORT(data + endCount + 2*item));
|
|
|
|
+ start = ttUSHORT(data + index_map + 14 + segcount*2 + 2 + 2*item);
|
|
|
|
+ if (unicode_codepoint < start)
|
|
|
|
+ return 0;
|
|
|
|
|
|
- offset = ttUSHORT(data + index_map + 14 + segcount*6 + 2 + 2*item);
|
|
|
|
- if (offset == 0)
|
|
|
|
- return (stbtt_uint16) (unicode_codepoint + ttSHORT(data + index_map + 14 + segcount*4 + 2 + 2*item));
|
|
|
|
|
|
+ offset = ttUSHORT(data + index_map + 14 + segcount*6 + 2 + 2*item);
|
|
|
|
+ if (offset == 0)
|
|
|
|
+ return (stbtt_uint16) (unicode_codepoint + ttSHORT(data + index_map + 14 + segcount*4 + 2 + 2*item));
|
|
|
|
|
|
- return ttUSHORT(data + offset + (unicode_codepoint-start)*2 + index_map + 14 + segcount*6 + 2 + 2*item);
|
|
|
|
|
|
+ return ttUSHORT(data + offset + (unicode_codepoint-start)*2 + index_map + 14 + segcount*6 + 2 + 2*item);
|
|
|
|
+ }
|
|
} else if (format == 12 || format == 13) {
|
|
} else if (format == 12 || format == 13) {
|
|
stbtt_uint32 ngroups = ttULONG(data+index_map+12);
|
|
stbtt_uint32 ngroups = ttULONG(data+index_map+12);
|
|
stbtt_int32 low,high;
|
|
stbtt_int32 low,high;
|
|
@@ -2421,6 +2423,7 @@ STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, unsigned char *fontd
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ STBTT_free(rects, spc->user_allocator_context);
|
|
return return_value;
|
|
return return_value;
|
|
}
|
|
}
|
|
|
|
|