return new prezi.graphics.text.FontInfo(this.fontId,this.otfFont.unitsPerEm,ascent,descent,lineGap,this.otfFont.italicAngle,this.otfFont.underlinePosition,this.otfFont.underlineThickness);
var skipHeaderBytes = prezi.graphics.text.backend.AbstractHarfBuzzFont.isKegFile(fileData)?prezi.graphics.text.backend.AbstractHarfBuzzFont.KEG_HEADER.length:0;
this.fontData = new (harfbuzz.array(harfbuzz.Char, fileData.length - skipHeaderBytes))();
stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0; return ret; },
staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + size)|0;STATICTOP = ((((STATICTOP)+7)>>3)<<3); return ret; },
dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + size)|0;DYNAMICTOP = ((((DYNAMICTOP)+7)>>3)<<3); return ret; },
alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 8))*(quantum ? quantum : 8); return ret; },
makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? (((low)>>>(0))+(((high)>>>(0))*4294967296)) : (((low)>>>(0))+(((high)|(0))*4294967296))); return ret; },
GLOBAL_BASE: 8,
QUANTUM_SIZE: 4,
__dummy__: 0
}
//========================================
// Runtime essentials
//========================================
var __THREW__ = 0; // Used in checking for thrown exceptions.
var setjmpId = 1; // Used in setjmp/longjmp
var setjmpLabels = {};
var ABORT = false;
var undef = 0;
// tempInt is used for 32-bit signed values or smaller. tempBigInt is used
// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt
return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts
: Math.pow(2, bits) + value;
}
function reSign(value, bits, ignore, sig) {
if (value <= 0) {
return value;
}
var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32
: Math.pow(2, bits-1);
if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that
// but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
// TODO: In i64 mode 1, resign the two parts separately and safely
value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
}
return value;
}
if (!Math.imul) Math.imul = function(a, b) {
var ah = a >>> 16;
var al = a & 0xffff;
var bh = b >>> 16;
var bl = b & 0xffff;
return (al*bl + ((ah*bl + al*bh) << 16))|0;
};
// A counter of dependencies for calling run(). If we need to
// do asynchronous work before running, increment this and
// decrement it. Incrementing must happen in a place like
// PRE_RUN_ADDITIONS (used by emcc to add file preloading).
// Note that you can add dependencies in preRun, even though
// it happens right before run - run will be postponed until
if (!___setErrNo.ret) ___setErrNo.ret = allocate([0], 'i32', ALLOC_NORMAL);
HEAP[___setErrNo.ret]=value
return value;
}
var ERRNO_CODES={E2BIG:7,EACCES:13,EADDRINUSE:98,EADDRNOTAVAIL:99,EAFNOSUPPORT:97,EAGAIN:11,EALREADY:114,EBADF:9,EBADMSG:74,EBUSY:16,ECANCELED:125,ECHILD:10,ECONNABORTED:103,ECONNREFUSED:111,ECONNRESET:104,EDEADLK:35,EDESTADDRREQ:89,EDOM:33,EDQUOT:122,EEXIST:17,EFAULT:14,EFBIG:27,EHOSTUNREACH:113,EIDRM:43,EILSEQ:84,EINPROGRESS:115,EINTR:4,EINVAL:22,EIO:5,EISCONN:106,EISDIR:21,ELOOP:40,EMFILE:24,EMLINK:31,EMSGSIZE:90,EMULTIHOP:72,ENAMETOOLONG:36,ENETDOWN:100,ENETRESET:102,ENETUNREACH:101,ENFILE:23,ENOBUFS:105,ENODATA:61,ENODEV:19,ENOENT:2,ENOEXEC:8,ENOLCK:37,ENOLINK:67,ENOMEM:12,ENOMSG:42,ENOPROTOOPT:92,ENOSPC:28,ENOSR:63,ENOSTR:60,ENOSYS:38,ENOTCONN:107,ENOTDIR:20,ENOTEMPTY:39,ENOTRECOVERABLE:131,ENOTSOCK:88,ENOTSUP:95,ENOTTY:25,ENXIO:6,EOPNOTSUPP:45,EOVERFLOW:75,EOWNERDEAD:130,EPERM:1,EPIPE:32,EPROTO:71,EPROTONOSUPPORT:93,EPROTOTYPE:91,ERANGE:34,EROFS:30,ESPIPE:29,ESRCH:3,ESTALE:116,ETIME:62,ETIMEDOUT:110,ETXTBSY:26,EWOULDBLOCK:11,EXDEV:18};function _sysconf(name) {
var ERRNO_MESSAGES={1:"Operation not permitted",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"Input/output error",6:"No such device or address",8:"Exec format error",9:"Bad file descriptor",10:"No child processes",11:"Resource temporarily unavailable",12:"Cannot allocate memory",13:"Permission denied",14:"Bad address",16:"Device or resource busy",17:"File exists",18:"Invalid cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Inappropriate ioctl for device",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read-only file system",31:"Too many links",32:"Broken pipe",33:"Numerical argument out of domain",34:"Numerical result out of range",35:"Resource deadlock avoided",36:"File name too long",37:"No locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many levels of symbolic links",42:"No message of desired type",43:"Identifier removed",45:"Op not supported on transport endpoint",60:"Device not a stream",61:"No data available",62:"Timer expired",63:"Out of streams resources",67:"Link has been severed",71:"Protocol error",72:"Multihop attempted",74:"Bad message",75:"Value too large for defined data type",84:"Invalid or incomplete multibyte or wide character",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Protocol not supported",95:"Operation not supported",97:"Address family not supported by protocol",98:"Address already in use",99:"Cannot assign requested address",100:"Network is down",101:"Network is unreachable",102:"Network dropped connection on reset",103:"Software caused connection abort",104:"Connection reset by peer",105:"No buffer space available",106:"Transport endpoint is already connected",107:"Transport endpoint is not connected",110:"Connection timed out",111:"Connection refused",113:"No route to host",114:"Operation already in progress",115:"Operation now in progress",116:"Stale NFS file handle",122:"Disk quota exceeded",125:"Operation canceled",130:"Owner died",131:"State not recoverable"};function _strerror_r(errnum, strerrbuf, buflen) {
if (errnum in ERRNO_MESSAGES) {
if (ERRNO_MESSAGES[errnum].length > buflen - 1) {
return ___setErrNo(ERRNO_CODES.ERANGE);
} else {
var msg = ERRNO_MESSAGES[errnum];
for (var i = 0; i < msg.length; i++) {
HEAP[(strerrbuf)+(i)]=msg.charCodeAt(i)
}
HEAP[(strerrbuf)+(i)]=0
return 0;
}
} else {
return ___setErrNo(ERRNO_CODES.EINVAL);
}
}function _strerror(errnum) {
if (!_strerror.buffer) _strerror.buffer = _malloc(256);
assert(DYNAMIC_BASE < TOTAL_MEMORY); // Stack must fit in TOTAL_MEMORY; allocations from here on may enlarge TOTAL_MEMORY
var FUNCTION_TABLE = [0,0,__ZL31hb_font_get_glyph_v_kerning_nilP9hb_font_tPvjjS1_,0,__ZL30normalization_preference_indicPK23hb_segment_properties_t,0,__ZN11hb_ot_map_t13feature_map_t3cmpEPKS0_S2_,0,__ZL23collect_features_arabicP21hb_ot_shape_planner_t,0,__ZL21compare_myanmar_orderPK15hb_glyph_info_tS1_
if (__ZN2OT17PosLookupSubTable8sanitizeEPNS_21hb_sanitize_context_tEj(HEAP[$obj_i_i_i_i_i_i_i], HEAP[$c_addr_i_i_i_i_i_i_i], HEAP[$user_data_addr_i_i_i_i_i_i_i])) {
if (!__ZN2OT14GenericArrayOfINS_7IntTypeItLj2EEENS_8OffsetToINS_8CoverageEEEE8sanitizeEPNS_21hb_sanitize_context_tEPv(HEAP[$input_i], HEAP[$c_addr_i], $this1_i)) {
if (__ZN2OT14GenericArrayOfINS_7IntTypeItLj2EEENS_8OffsetToINS_8CoverageEEEE8sanitizeEPNS_21hb_sanitize_context_tEPv(HEAP[$lookahead_i], HEAP[$c_addr_i], $this1_i)) {
if (__ZN2OT19SubstLookupSubTable8sanitizeEPNS_21hb_sanitize_context_tEj(HEAP[$obj_i_i_i_i_i_i_i], HEAP[$c_addr_i_i_i_i_i_i_i], HEAP[$user_data_addr_i_i_i_i_i_i_i])) {
if (__ZN2OT14GenericArrayOfINS_7IntTypeItLj2EEENS_8OffsetToINS_8CoverageEEEE8sanitizeEPNS_21hb_sanitize_context_tEPv(HEAP[$lookahead_i_i], HEAP[$c_addr_i_i392], $this1_i_i435)) {
var fontManagerBackend = new prezi.graphics.text.backend.FontManagerBackend(this.harfbuzz,defaultFontData,prezi.graphics.text.backend.JsServer._fontInstalled,prezi.graphics.text.backend.JsServer._fontInstallationFailed);
this.charStringsIndex = new prezi.graphics.text.otf.CffIndex("CharStrings",reader,topDict.charStringsOffset);
var localSubrsOffset = privateDict.localSubrsOffset;
var localSubrIndex;
if(localSubrsOffset != null) localSubrIndex = new prezi.graphics.text.otf.CffIndex("Local Subr",reader,localSubrsOffset); else localSubrIndex = new prezi.graphics.text.otf._CffTable.EmptyCffIndex();
this.outlineProcessor = new prezi.graphics.text.otf.CffCharStringProcessor(reader,privateDict.defaultWidthX,privateDict.nominalWidthX,globalSubrIndex,localSubrIndex);