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

📄 xglyph.c

📁 source code: Covert TXT to PDF
💻 C
📖 第 1 页 / 共 5 页
字号:
void showchar( Widget showcharbutton, XtPointer client_data, XtPointer call_data){  int i, j;  Arg args[10];    sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID);  sscanf( XawDialogGetValueString(dialogsize),"%f", &Size);  sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle);  sscanf( XawDialogGetValueString(dialogtestcharacter), "%d", &TestChar);  sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution);         if (FontID<0 || FontID>=T1_Get_no_fonts()) {    sprintf(statusstring, "t1lib: FontID out of range!");    i=0;    XtSetArg(args[i], XtNbitmap,NULL); i++;    XtSetArg(args[i], XtNwidth,380); i++;    XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;    XtSetArg(args[i], XtNlabel, statusstring); i++;    XtSetValues(labelstatus,args,i);    return;  }  if (CheckTransform()==0 && Angle==0.0){    matrixP=NULL;  }  else{    matrixP=T1_RotateMatrix( &matrix, Angle);  }    if (DeviceResolution!=last_resolution[FontID]){    /* Delete all size dependent data for that font */    for ( i=0; i<T1_Get_no_fonts(); i++)      T1_DeleteAllSizes( i);    /* Establish new device resolution */    T1_SetDeviceResolutions(DeviceResolution,DeviceResolution);    /* Store current resolution */    last_resolution[FontID]=DeviceResolution;  }  i=sscanf( XawDialogGetValueString(dialogencfile),"%s", (char *)EncodingFile);  if (i==EOF) EncodingFile[0]=0;  if (strcmp(EncodingFile,LastEncodingFile)){ /* encoding has changed */    if (strcmp( EncodingFile, "")==0){ /* -> reset to internal encoding */      for (i=0; i<T1_Get_no_fonts(); i++){	T1_DeleteAllSizes(i);	T1_ReencodeFont( i, NULL);      }      /* Take care that newly loaded fonts are encoded according to current	 encoding */      T1_SetDefaultEncoding( NULL);    }    else{      for (i=0; i<MAXENCODINGS; ){	if ( encstruct[i].encfilename != NULL)	  if (strcmp( encstruct[i].encfilename, EncodingFile)==0){	    i++;	    break;	  }	i++;      }      if (i==MAXENCODINGS){ /* Encoding from that file was not			       already loaded -> so load it */	i=0;	while (encstruct[i].encfilename != NULL)	  i++;	encstruct[i].encoding=T1_LoadEncoding(EncodingFile);	encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1);	if (encstruct[i].encoding==NULL){	  free( encstruct[i].encfilename);	  encstruct[i].encfilename=NULL;	}	i++;      }      for (j=0; j<T1_Get_no_fonts(); j++){	T1_DeleteAllSizes(j);	T1_ReencodeFont( j, encstruct[i-1].encoding);      }      /* Take care that newly loaded fonts are encoded according to current	 encoding */      T1_SetDefaultEncoding( encstruct[i-1].encoding);    }    strcpy( LastEncodingFile, EncodingFile);  }  sscanf( XawDialogGetValueString(dialogslant),"%f", &Slant);  if (Slant!=lastSlant[FontID]){    /* Delete all size dependent data */    T1_DeleteAllSizes(FontID);    T1_LoadFont(FontID);    T1_SlantFont( FontID, Slant);    lastSlant[FontID]=Slant;  }  sscanf( XawDialogGetValueString(dialogextent),"%f", &Extent);  if (Extent!=lastExtent[FontID]){    /* Delete all size dependent data */    T1_DeleteAllSizes(FontID);    T1_LoadFont(FontID);    T1_ExtendFont( FontID, Extent);    lastExtent[FontID]=Extent;  }      if (Size<=0.0){    sprintf(statusstring, "t1lib: Size must be positive!");    i=0;    XtSetArg(args[i], XtNbitmap,NULL); i++;    XtSetArg(args[i], XtNwidth,380); i++;    XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;    XtSetArg(args[i], XtNlabel, statusstring); i++;    XtSetValues(labelstatus,args,i);    return;  }  XSetForeground( display, DefaultGC( display, screennumber), black.pixel);  XSetBackground( display, DefaultGC( display, screennumber), white.pixel);  /* Reset T1_errno: */  T1_errno=0;  gettimeofday(time_ptr_start, void_ptr);  glyph=T1_SetChar( FontID, TestChar, Size, matrixP);    gettimeofday(time_ptr_stop, void_ptr);  if (glyph==NULL){    sprintf(statusstring, "t1lib: Couldn't generate Bitmap, T1_errno=%d!", T1_errno);    i=0;    XtSetArg(args[i], XtNbitmap,NULL); i++;    XtSetArg(args[i], XtNwidth,380); i++;    XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;    XtSetArg(args[i], XtNlabel, statusstring); i++;    XtSetValues(labelstatus,args,i);    return;  }  height=glyph->metrics.ascent - glyph->metrics.descent;  overallwidth=glyph->metrics.rightSideBearing - glyph->metrics.leftSideBearing;  width=overallwidth;  /* Prepare status message: */  sprintf(statusstring,"Elapsed time:        %ld Microseconds\nLeftSideBearing:     %d\nRightSideBearing:    %d\nAscent:              %d\nDescent:             %d\nAdvanceX:            %d\nAdvanceY:            %d\nBits Per Pixel:      %ld\nImage Size:          %ld Bytes\nPostScript Fontname: %s\nCharactername:       %s\nT1_errno:            %d\n",	  time_diff(time_ptr_start,time_ptr_stop),	  glyph->metrics.leftSideBearing, 	  glyph->metrics.rightSideBearing, 	  glyph->metrics.ascent,	  glyph->metrics.descent,	  glyph->metrics.advanceX,	  glyph->metrics.advanceY,	  glyph->bpp,	  PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent),	  T1_GetFontName(FontID),	  T1_GetCharName(FontID,(char)TestChar),	  T1_errno);  if (glyph->bits !=NULL) {    ximage=XCreateImage( display,			 DefaultVisual(display, screennumber),			 1, /* depths for bitmap is 1 */			 XYBitmap, /* XYBitmap or XYPixmap */			 0, /* No offset */			 glyph->bits,			 width,			 height,			 t1_pad,  /* lines padded to bytes */			 0 /*PAD(width,8)/8*/  /* number of bytes per line */			 );    /* Force bit and byte order */    ximage->bitmap_bit_order=0;    ximage->byte_order=0;    XFreePixmap(display,pixmap);    pixmap = XCreatePixmap(display,			   XtWindow(TopLevel),			   width,			   height,			   DefaultDepth(display,screennumber)   			   );    XPutImage(display,	      pixmap,	      DefaultGC( display, screennumber),	      ximage,	      0,  	      0,  	      0,  	      0,  	      width,	      height	      );    XDestroyImage(ximage);  }      i=0;  XtSetArg(args[i], XtNbitmap,NULL); i++;  XtSetArg(args[i], XtNwidth,380); i++;  XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;  XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++;  XtSetArg(args[i], XtNlabel, statusstring); i++;  XtSetValues(labelstatus,args,i);  i=0;  XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++;  XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++;  if (glyph->bits != NULL) {    XtSetArg( args[i], XtNbitmap, pixmap); i++;  }  else {    XtSetArg( args[i], XtNbitmap, 0); i++;  }  XtSetArg( args[i], XtNresize, 1);i++;  XtSetArg( args[i], XtNinternalWidth, 0); i++;  XtSetArg( args[i], XtNinternalHeight, 0); i++;  XtSetArg( args[i], XtNbackground, WhitePixel(display,screennumber)); i++;  XtSetArg( args[i], XtNforeground, BlackPixel(display,screennumber)); i++;  XtSetValues(OutputWindow ,args,i);       i=0;  XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++;  XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++;  if (glyph->bits != NULL) {    XtSetArg( args[i], XtNbitmap, pixmap); i++;  }  else {    XtSetArg( args[i], XtNbitmap, 0); i++;  }  XtSetArg( args[i], XtNresize, 1);i++;  XtSetArg( args[i], XtNinternalWidth, 0); i++;  XtSetArg( args[i], XtNinternalHeight, 0); i++;  XtSetValues(Output ,args,i);  glyph->bits=NULL;    /* Since XDestroyImage() free's this also! */}void showstring( Widget showstringbutton, XtPointer client_data, XtPointer call_data){  int i,j,k,l,m,none_found;  Arg args[10];  char *theString='\0';  char *ligtheString='\0';  char *succs, *ligs;  char buf_char;      sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID);  sscanf( XawDialogGetValueString(dialogsize),"%f", &Size);  sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle);  sscanf( XawDialogGetValueString(dialogspace),"%ld", &Space);  sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution);  if (FontID<0 || FontID>=T1_Get_no_fonts()) {    sprintf(statusstring, "t1lib: FontID out of range!");    i=0;    XtSetArg(args[i], XtNbitmap,NULL); i++;    XtSetArg(args[i], XtNwidth,380); i++;    XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;    XtSetArg(args[i], XtNlabel, statusstring); i++;    XtSetValues(labelstatus,args,i);    return;  }  if (CheckTransform()==0 && Angle==0.0){    matrixP=NULL;  }  else{    matrixP=T1_RotateMatrix( &matrix, Angle);  }    if (DeviceResolution!=last_resolution[FontID]){    /* Delete all size dependent data for that font */    for ( i=0; i<T1_Get_no_fonts(); i++)      T1_DeleteAllSizes( i);    /* Establish new device resolution */    T1_SetDeviceResolutions(DeviceResolution,DeviceResolution);    /* Store current resolution */    last_resolution[FontID]=DeviceResolution;  }  i=sscanf( XawDialogGetValueString(dialogencfile),"%s", (char *)EncodingFile);  if (i==EOF) EncodingFile[0]=0;  if (strcmp(EncodingFile,LastEncodingFile)){ /* encoding has changed */    if (strcmp( EncodingFile, "")==0){ /* -> reset to internal encoding */      for (i=0; i<T1_Get_no_fonts(); i++){	T1_DeleteAllSizes(i);	T1_ReencodeFont( i, NULL);      }      /* Take care that newly loaded fonts are encoded according to current	 encoding */      T1_SetDefaultEncoding( NULL);    }    else{      for (i=0; i<MAXENCODINGS; ){	if ( encstruct[i].encfilename != NULL)	  if (strcmp( encstruct[i].encfilename, EncodingFile)==0){	    i++;	    break;	  }	i++;      }      if (i==MAXENCODINGS){ /* Encoding from that file was not			       already loaded -> so load it */	i=0;	while (encstruct[i].encfilename != NULL)	  i++;	encstruct[i].encoding=T1_LoadEncoding(EncodingFile);	encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1);	if (encstruct[i].encoding==NULL){	  free( encstruct[i].encfilename);	  encstruct[i].encfilename=NULL;	}	i++;      }      for (j=0; j<T1_Get_no_fonts(); j++){	T1_DeleteAllSizes(j);	T1_ReencodeFont( j, encstruct[i-1].encoding);      }      /* Take care that newly loaded fonts are encoded according to current	 encoding */      T1_SetDefaultEncoding( encstruct[i-1].encoding);    }    strcpy( LastEncodingFile, EncodingFile);  }  sscanf( XawDialogGetValueString(dialogslant),"%f", &Slant);  if (Slant!=lastSlant[FontID]){    /* Delete all size dependent data */    T1_DeleteAllSizes(FontID);    T1_LoadFont(FontID);    T1_SlantFont( FontID, Slant);    lastSlant[FontID]=Slant;  }  sscanf( XawDialogGetValueString(dialogextent),"%f", &Extent);  if (Extent!=lastExtent[FontID]){    /* Delete all size dependent data */    T1_DeleteAllSizes(FontID);    T1_LoadFont(FontID);    T1_ExtendFont( FontID, Extent);    lastExtent[FontID]=Extent;  }  i=0;  XtSetArg(args[i], XtNstring, &theString); i++;  XtGetValues(dialogteststring,args,i);    if (Size<=0.0){    sprintf(statusstring, "t1lib: Size must be positive!");    i=0;    XtSetArg(args[i], XtNbitmap,NULL); i++;    XtSetArg(args[i], XtNwidth,380); i++;    XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;    XtSetArg(args[i], XtNlabel, statusstring); i++;    XtSetValues(labelstatus,args,i);    return;  }  /* Now comes the ligatur handling */  if (strcmp(theString,"")==0)    theString=(char *) TestString;  i=strlen(theString);  ligtheString=(char *)malloc((i+1)*sizeof(char));  if (LigDetect){    for (j=0,m=0;j<i;j++,m++){ /* Loop through the characters */      if ((k=T1_QueryLigs( FontID, theString[j], &succs, &ligs))>0){  	buf_char=theString[j];	while (k>0){  	  none_found=1;	  for (l=0;l<k;l++){ /* Loop through the ligatures */	    if (succs[l]==theString[j+1]){	      buf_char=ligs[l];	      j++;	      none_found=0;	      break;	    }	  }	  if (none_found)	    break;	  k=T1_QueryLigs( FontID, buf_char, &succs, &ligs);	}	ligtheString[m]=buf_char;      }      else{ /* There are no ligatures */	ligtheString[m]=theString[j];      }    }    ligtheString[m]=0;  }  else {    strcpy(ligtheString,theString);  }  /*  {    METRICSINFO metrics;        metrics=T1_GetMetricsInfo(FontID,(char *)ligtheString,0,Space,(Modflag & T1_KERNING));    printf("String's width: %d\n", metrics.width);    printf("String's BBox: llx = %d\n", metrics.bbox.llx);    printf("               lly = %d\n", metrics.bbox.lly);    printf("               urx = %d\n", metrics.bbox.urx);    printf("               ury = %d\n", metrics.bbox.ury);    printf("Number of chars in string: %d\n", metrics.numchars);    for (i=0;i<metrics.numchars;i++)      printf("Position of %d. character in string: %d afm-units\n", i+1, metrics.charpos[i]);  }  */  /*  {    int i,j;    T1_COMP_CHAR_INFO *ccd;    T1_COMP_PIECE *cp;        printf("Number of composite characters in font: %d\n",	   j=T1_GetNoCompositeChars(FontID));    for (i=0; i<j; i++) {      ccd=T1_GetCompCharDataByIndex( FontID, i);      if (ccd==NULL) {	printf("AFM-ind=%d, ccd=%p, T1_errno=%d\n", i, ccd, T1_errno);	T1_errno=0;      }      else {      printf( "AFM-ind=%d: Compchar %s (%d), has %d pieces:\n",	      i,	      ccd->compchar > -1 ? T1_GetCharName( FontID, ccd->compchar) : "not_enc",	      ccd->compchar,	      ccd->numPieces);      printf( "    basechar %s (%d)\n",	      ccd->pieces[0].piece > -1 ? T1_GetCharName( FontID, ccd->pieces[0].piece) : "not_enc",	      ccd->pieces[0].piece);      printf( "    accent %s (%d)\n",	      ccd->pieces[1].piece > -1 ? T1_GetCharName( FontID, ccd->pieces[1].piece) : "not_enc",	      ccd->pieces[1].piece);      }      T1_FreeCompCharData( ccd);    }  }  */    XSetForeground( display, DefaultGC( display, screennumber), black.pixel);  XSetBackground( display, DefaultGC( display, screennumber), white.pixel);  /* Reset T1_errno: */  T1_errno=0;  gettimeofday(time_ptr_start, void_ptr);  if( extraflags & CHECK_CONCATGLYPHS){    glyph2=T1_SetString(FontID,(char *)ligtheString,0,Space,Modflag,Size,matrixP);    glyph1=T1_CopyGlyph( glyph2);    glyph2=T1_SetString(FontID+1,(char *)ligtheString,0,Space,Modflag,Size,matrixP);    glyph=T1_ConcatGlyphs( glyph1, glyph2, 0, 0, Modflag);  }  else if( extraflags & CHECK_CONCATOUTLINES){

⌨️ 快捷键说明

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