⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fontfile.cc

📁 source code: Covert TXT to PDF
💻 CC
📖 第 1 页 / 共 5 页
字号:
	if (nOps != 11) {	  error(-1, "Wrong number of args (%d) to Type 2 flex1", nOps);	}	eexecDumpNum(op[0], fp[0]);	eexecDumpNum(op[1], fp[1]);	eexecDumpNum(op[2], fp[2]);	eexecDumpNum(op[3], fp[3]);	eexecDumpNum(op[4], fp[4]);	eexecDumpNum(op[5], fp[5]);	eexecDumpOp1(8);	eexecDumpNum(op[6], fp[6]);	eexecDumpNum(op[7], fp[7]);	eexecDumpNum(op[8], fp[8]);	eexecDumpNum(op[9], fp[9]);	dx = op[0] + op[2] + op[4] + op[6] + op[8];	dy = op[1] + op[3] + op[5] + op[7] + op[9];	if (fabs(dx) > fabs(dy)) {	  eexecDumpNum(op[10], fp[10]);	  eexecDumpNum(-dy, fp[1] | fp[3] | fp[5] | fp[7] | fp[9]);	} else {	  eexecDumpNum(-dx, fp[0] | fp[2] | fp[4] | fp[6] | fp[8]);	  eexecDumpNum(op[10], fp[10]);	}	eexecDumpOp1(8);	break;      case 3:			// and      case 4:			// or      case 5:			// not      case 8:			// store      case 9:			// abs      case 10:			// add      case 11:			// sub      case 12:			// div      case 13:			// load      case 14:			// neg      case 15:			// eq      case 18:			// drop      case 20:			// put      case 21:			// get      case 22:			// ifelse      case 23:			// random      case 24:			// mul      case 26:			// sqrt      case 27:			// dup      case 28:			// exch      case 29:			// index      case 30:			// roll	error(-1, "Unimplemented Type 2 charstring op: 12.%d", s[i+1]);	break;      default:	error(-1, "Illegal Type 2 charstring op: 12.%d", s[i+1]);	break;      }      i += 2;      nOps = 0;    } else if (s[i] == 19) {	// hintmask      // ignored      if (first) {	cvtGlyphWidth(nOps == 1);	first = gFalse;      }      if (nOps > 0) {	if (nOps & 1) {	  error(-1, "Wrong number of args (%d) to Type 2 hintmask/vstemhm",		nOps);	}	nHints += nOps / 2;      }      i += 1 + ((nHints + 7) >> 3);      nOps = 0;    } else if (s[i] == 20) {	// cntrmask      // ignored      if (first) {	cvtGlyphWidth(nOps == 1);	first = gFalse;      }      if (nOps > 0) {	if (nOps & 1) {	  error(-1, "Wrong number of args (%d) to Type 2 cntrmask/vstemhm",		nOps);	}	nHints += nOps / 2;      }      i += 1 + ((nHints + 7) >> 3);      nOps = 0;    } else if (s[i] == 28) {      x = (s[i+1] << 8) + s[i+2];      if (x & 0x8000) {	x |= -1 << 15;      }      if (nOps < 48) {	fp[nOps] = gFalse;	op[nOps++] = x;      }      i += 3;    } else if (s[i] <= 31) {      switch (s[i]) {      case 4:			// vmoveto	if (first) {	  cvtGlyphWidth(nOps == 2);	  first = gFalse;	}	if (nOps != 1) {	  error(-1, "Wrong number of args (%d) to Type 2 vmoveto", nOps);	}	eexecDumpNum(op[0], fp[0]);	eexecDumpOp1(4);	break;      case 5:			// rlineto	if (nOps < 2 || nOps % 2 != 0) {	  error(-1, "Wrong number of args (%d) to Type 2 rlineto", nOps);	}	for (k = 0; k < nOps; k += 2) {	  eexecDumpNum(op[k], fp[k]);	  eexecDumpNum(op[k+1], fp[k+1]);	  eexecDumpOp1(5);	}	break;      case 6:			// hlineto	if (nOps < 1) {	  error(-1, "Wrong number of args (%d) to Type 2 hlineto", nOps);	}	for (k = 0; k < nOps; ++k) {	  eexecDumpNum(op[k], fp[k]);	  eexecDumpOp1((k & 1) ? 7 : 6);	}	break;      case 7:			// vlineto	if (nOps < 1) {	  error(-1, "Wrong number of args (%d) to Type 2 vlineto", nOps);	}	for (k = 0; k < nOps; ++k) {	  eexecDumpNum(op[k], fp[k]);	  eexecDumpOp1((k & 1) ? 6 : 7);	}	break;      case 8:			// rrcurveto	if (nOps < 6 || nOps % 6 != 0) {	  error(-1, "Wrong number of args (%d) to Type 2 rrcurveto", nOps);	}	for (k = 0; k < nOps; k += 6) {	  eexecDumpNum(op[k], fp[k]);	  eexecDumpNum(op[k+1], fp[k+1]);	  eexecDumpNum(op[k+2], fp[k+2]);	  eexecDumpNum(op[k+3], fp[k+3]);	  eexecDumpNum(op[k+4], fp[k+4]);	  eexecDumpNum(op[k+5], fp[k+5]);	  eexecDumpOp1(8);	}	break;      case 14:			// endchar / seac	if (first) {	  cvtGlyphWidth(nOps == 1 || nOps == 5);	  first = gFalse;	}	if (nOps == 4) {	  eexecDumpNum(0, 0);	  eexecDumpNum(op[0], fp[0]);	  eexecDumpNum(op[1], fp[1]);	  eexecDumpNum(op[2], fp[2]);	  eexecDumpNum(op[3], fp[3]);	  eexecDumpOp2(6);	} else if (nOps == 0) {	  eexecDumpOp1(14);	} else {	  error(-1, "Wrong number of args (%d) to Type 2 endchar", nOps);	}	break;      case 21:			// rmoveto	if (first) {	  cvtGlyphWidth(nOps == 3);	  first = gFalse;	}	if (nOps != 2) {	  error(-1, "Wrong number of args (%d) to Type 2 rmoveto", nOps);	}	eexecDumpNum(op[0], fp[0]);	eexecDumpNum(op[1], fp[1]);	eexecDumpOp1(21);	break;      case 22:			// hmoveto	if (first) {	  cvtGlyphWidth(nOps == 2);	  first = gFalse;	}	if (nOps != 1) {	  error(-1, "Wrong number of args (%d) to Type 2 hmoveto", nOps);	}	eexecDumpNum(op[0], fp[0]);	eexecDumpOp1(22);	break;      case 24:			// rcurveline	if (nOps < 8 || (nOps - 2) % 6 != 0) {	  error(-1, "Wrong number of args (%d) to Type 2 rcurveline", nOps);	}	for (k = 0; k < nOps - 2; k += 6) {	  eexecDumpNum(op[k], fp[k]);	  eexecDumpNum(op[k+1], fp[k+1]);	  eexecDumpNum(op[k+2], fp[k+2]);	  eexecDumpNum(op[k+3], fp[k+3]);	  eexecDumpNum(op[k+4], fp[k+4]);	  eexecDumpNum(op[k+5], fp[k+5]);	  eexecDumpOp1(8);	}	eexecDumpNum(op[k], fp[k]);	eexecDumpNum(op[k+1], fp[k]);	eexecDumpOp1(5);	break;      case 25:			// rlinecurve	if (nOps < 8 || (nOps - 6) % 2 != 0) {	  error(-1, "Wrong number of args (%d) to Type 2 rlinecurve", nOps);	}	for (k = 0; k < nOps - 6; k += 2) {	  eexecDumpNum(op[k], fp[k]);	  eexecDumpNum(op[k+1], fp[k]);	  eexecDumpOp1(5);	}	eexecDumpNum(op[k], fp[k]);	eexecDumpNum(op[k+1], fp[k+1]);	eexecDumpNum(op[k+2], fp[k+2]);	eexecDumpNum(op[k+3], fp[k+3]);	eexecDumpNum(op[k+4], fp[k+4]);	eexecDumpNum(op[k+5], fp[k+5]);	eexecDumpOp1(8);	break;      case 26:			// vvcurveto	if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) {	  error(-1, "Wrong number of args (%d) to Type 2 vvcurveto", nOps);	}	if (nOps % 2 == 1) {	  eexecDumpNum(op[0], fp[0]);	  eexecDumpNum(op[1], fp[1]);	  eexecDumpNum(op[2], fp[2]);	  eexecDumpNum(op[3], fp[3]);	  eexecDumpNum(0, gFalse);	  eexecDumpNum(op[4], fp[4]);	  eexecDumpOp1(8);	  k = 5;	} else {	  k = 0;	}	for (; k < nOps; k += 4) {	  eexecDumpNum(0, gFalse);	  eexecDumpNum(op[k], fp[k]);	  eexecDumpNum(op[k+1], fp[k+1]);	  eexecDumpNum(op[k+2], fp[k+2]);	  eexecDumpNum(0, gFalse);	  eexecDumpNum(op[k+3], fp[k+3]);	  eexecDumpOp1(8);	}	break;      case 27:			// hhcurveto	if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) {	  error(-1, "Wrong number of args (%d) to Type 2 hhcurveto", nOps);	}	if (nOps % 2 == 1) {	  eexecDumpNum(op[1], fp[1]);	  eexecDumpNum(op[0], fp[0]);	  eexecDumpNum(op[2], fp[2]);	  eexecDumpNum(op[3], fp[3]);	  eexecDumpNum(op[4], fp[4]);	  eexecDumpNum(0, gFalse);	  eexecDumpOp1(8);	  k = 5;	} else {	  k = 0;	}	for (; k < nOps; k += 4) {	  eexecDumpNum(op[k], fp[k]);	  eexecDumpNum(0, gFalse);	  eexecDumpNum(op[k+1], fp[k+1]);	  eexecDumpNum(op[k+2], fp[k+2]);	  eexecDumpNum(op[k+3], fp[k+3]);	  eexecDumpNum(0, gFalse);	  eexecDumpOp1(8);	}	break;      case 30:			// vhcurveto	if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) {	  error(-1, "Wrong number of args (%d) to Type 2 vhcurveto", nOps);	}	for (k = 0; k < nOps && k != nOps-5; k += 4) {	  if (k % 8 == 0) {	    eexecDumpNum(op[k], fp[k]);	    eexecDumpNum(op[k+1], fp[k+1]);	    eexecDumpNum(op[k+2], fp[k+2]);	    eexecDumpNum(op[k+3], fp[k+3]);	    eexecDumpOp1(30);	  } else {	    eexecDumpNum(op[k], fp[k]);	    eexecDumpNum(op[k+1], fp[k+1]);	    eexecDumpNum(op[k+2], fp[k+2]);	    eexecDumpNum(op[k+3], fp[k+3]);	    eexecDumpOp1(31);	  }	}	if (k == nOps-5) {	  if (k % 8 == 0) {	    eexecDumpNum(0, gFalse);	    eexecDumpNum(op[k], fp[k]);	    eexecDumpNum(op[k+1], fp[k+1]);	    eexecDumpNum(op[k+2], fp[k+2]);	    eexecDumpNum(op[k+3], fp[k+3]);	    eexecDumpNum(op[k+4], fp[k+4]);	  } else {	    eexecDumpNum(op[k], fp[k]);	    eexecDumpNum(0, gFalse);	    eexecDumpNum(op[k+1], fp[k+1]);	    eexecDumpNum(op[k+2], fp[k+2]);	    eexecDumpNum(op[k+4], fp[k+4]);	    eexecDumpNum(op[k+3], fp[k+3]);	  }	  eexecDumpOp1(8);	}	break;      case 31:			// hvcurveto	if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) {	  error(-1, "Wrong number of args (%d) to Type 2 hvcurveto", nOps);	}	for (k = 0; k < nOps && k != nOps-5; k += 4) {	  if (k % 8 == 0) {	    eexecDumpNum(op[k], fp[k]);	    eexecDumpNum(op[k+1], fp[k+1]);	    eexecDumpNum(op[k+2], fp[k+2]);	    eexecDumpNum(op[k+3], fp[k+3]);	    eexecDumpOp1(31);	  } else {	    eexecDumpNum(op[k], fp[k]);	    eexecDumpNum(op[k+1], fp[k+1]);	    eexecDumpNum(op[k+2], fp[k+2]);	    eexecDumpNum(op[k+3], fp[k+3]);	    eexecDumpOp1(30);	  }	}	if (k == nOps-5) {	  if (k % 8 == 0) {	    eexecDumpNum(op[k], fp[k]);	    eexecDumpNum(0, gFalse);	    eexecDumpNum(op[k+1], fp[k+1]);	    eexecDumpNum(op[k+2], fp[k+2]);	    eexecDumpNum(op[k+4], fp[k+4]);	    eexecDumpNum(op[k+3], fp[k+3]);	  } else {	    eexecDumpNum(0, gFalse);	    eexecDumpNum(op[k], fp[k]);	    eexecDumpNum(op[k+1], fp[k+1]);	    eexecDumpNum(op[k+2], fp[k+2]);	    eexecDumpNum(op[k+3], fp[k+3]);	    eexecDumpNum(op[k+4], fp[k+4]);	  }	  eexecDumpOp1(8);	}	break;      case 1:			// hstem	if (first) {	  cvtGlyphWidth(nOps & 1);	  first = gFalse;	}	if (nOps & 1) {	  error(-1, "Wrong number of args (%d) to Type 2 hstem", nOps);	}	d = 0;	dFP = gFalse;	for (k = 0; k < nOps; k += 2) {	  if (op[k+1] < 0) {	    d += op[k] + op[k+1];	    dFP |= fp[k] | fp[k+1];	    eexecDumpNum(d, dFP);	    eexecDumpNum(-op[k+1], fp[k+1]);	  } else {	    d += op[k];	    dFP |= fp[k];	    eexecDumpNum(d, dFP);	    eexecDumpNum(op[k+1], fp[k+1]);	    d += op[k+1];	    dFP |= fp[k+1];	  }	  eexecDumpOp1(1);	}	nHints += nOps / 2;	break;      case 3:			// vstem	if (first) {	  cvtGlyphWidth(nOps & 1);	  first = gFalse;	}	if (nOps & 1) {	  error(-1, "Wrong number of args (%d) to Type 2 vstem", nOps);	}	d = 0;	dFP = gFalse;	for (k = 0; k < nOps; k += 2) {	  if (op[k+1] < 0) {	    d += op[k] + op[k+1];	    dFP |= fp[k] | fp[k+1];	    eexecDumpNum(d, dFP);	    eexecDumpNum(-op[k+1], fp[k+1]);	  } else {	    d += op[k];	    dFP |= fp[k];	    eexecDumpNum(d, dFP);	    eexecDumpNum(op[k+1], fp[k+1]);	    d += op[k+1];	    dFP |= fp[k+1];	  }	  eexecDumpOp1(3);	}	nHints += nOps / 2;	break;      case 18:			// hstemhm	// ignored	if (first) {	  cvtGlyphWidth(nOps & 1);	  first = gFalse;	}	if (nOps & 1) {	  error(-1, "Wrong number of args (%d) to Type 2 hstemhm", nOps);	}	nHints += nOps / 2;	break;      case 23:			// vstemhm	// ignored	if (first) {	  cvtGlyphWidth(nOps & 1);	  first = gFalse;	}	if (nOps & 1) {	  error(-1, "Wrong number of args (%d) to Type 2 vstemhm", nOps);	}	nHints += nOps / 2;	break;      case 10:			// callsubr      case 11:			// return      case 16:			// blend      case 29:			// callgsubr	error(-1, "Unimplemented Type 2 charstring op: %d", s[i]);	break;      default:	error(-1, "Illegal Type 2 charstring op: %d", s[i]);	break;      }      ++i;      nOps = 0;    } else if (s[i] <= 246) {      if (nOps < 48) {	fp[nOps] = gFalse;	op[nOps++] = (int)s[i] - 139;      }      ++i;    } else if (s[i] <= 250) {      if (nOps < 48) {	fp[nOps] = gFalse;	op[nOps++] = (((int)s[i] - 247) << 8) + (int)s[i+1] + 108;      }      i += 2;    } else if (s[i] <= 254) {      if (nOps < 48) {	fp[nOps] = gFalse;	op[nOps++] = -(((int)s[i] - 251) << 8) - (int)s[i+1] - 108;      }      i += 2;    } else {      x = (s[i+1] << 24) | (s[i+2] << 16) | (s[i+3] << 8) | s[i+4];      if (x & 0x80000000)	x |= -1 << 31;      if (nOps < 48) {	fp[nOps] = gTrue;	op[nOps++] = (double)x / 65536.0;      }      i += 5;    }  }  // charstring encryption  r2 = 4330;  for (i = 0; i < charBuf->getLength(); ++i) {    byte = charBuf->getChar(i) ^ (r2 >> 8);    charBuf->setChar(i, byte);    r2 = (byte + r2) * 52845 + 22719;  }}void Type1CFontFile::cvtGlyphWidth(GBool useOp) {  double w;  GBool wFP;  int i;  if (useOp) {    w = nominalWidthX + op[0];    wFP = nominalWidthXFP | fp[0];    for (i = 1; i < nOps; ++i) {      op[i-1] = op[i];      fp[i-1] = fp[i];    }    --nOps;  } else {    w = defaultWidthX;    wFP = defaultWidthXFP;  }  eexecDumpNum(0, gFalse);  eexecDumpNum(w, wFP);  eexecDumpOp1(13);}void Type1CFontFile::eexecDumpNum(double x, GBool fpA) {  Guchar buf[12];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -