Пример #1
0
Файл: eaw.c Проект: depp/uniset
struct map *
eaw_getmap(void)
{
    struct mapbuilder m;
    struct datafile *fl;
    struct field f[MAX_FIELDS];
    unsigned int r, first, last;
    eaw_t eaw;
    mapbuilder_init(&m, EAW_N);
    fl = datafile_open("EastAsianWidth.txt");
    while ((r = datafile_read(fl, &first, &last, f))) {
        if (f[1].ptr + 1 == f[1].end) {
            eaw = eaw_decode_fast(f[1].ptr[0], '\0');
            if (eaw == (eaw_t)-1)
                goto err;
        } else if (f[1].ptr + 2 == f[1].end &&
                   f[1].ptr[0] == 'N' && f[1].ptr[1] == 'a') {
            eaw = EAW_Na;
        } else
            goto err;
        mapbuilder_insert(&m, first, last, eaw);
    }
    return mapbuilder_finish(&m);
err:
    fputs("Invalid east Asian width in data file: '", stderr);
    fwrite(f[1].ptr, f[1].end - f[1].ptr, 1, stderr);
    fputs("'\n", stderr);
    exit(1);
    return 0;
}
Пример #2
0
/************************************************************************

  Dump a text data file 
  containing geometric properties of the objects in a list, sorted
  according to prop, if this is nonzero and != GEO_NONE.

  */
rc_t geo_dump_info(objl_t *ol, const char *fn, 
		   geo_t prop, const char *fn_img) {

  const char *fn_default = "obj-info.dat" ;
  const char *fmt = 
    "1=obj_num 2=y 3=x 4=area 5=aspect_ratio 6=axis_angle 7=compactness" ;
  datafile_reg_t dfr ;
  obj_t *ob ;
  double xcom,ycom,rrg2,yax,xax,aspect,ang ;
  int o ;
  FILE *fp ;
  const char *me = "geo_dump_info" ;

  if (!fn || !strlen(fn)) fn = fn_unique(fn_default) ;
  datafile_init(&dfr,me,__FILE__,__DATE__,__TIME__) ;
  if (!(fp = datafile_open((char *)fn,0,&dfr))) 
    return(subfail(__FILE__,__LINE__,me)) ;
  fprintf(fp,"# contents = description of objects in image file.\n") ;
  if (fn_img) fprintf(fp,"# image file = %s\n",fn_img) ;
  fprintf(fp,"# number of objects = %d\n",ol->n) ;
  fprintf(fp,"# format = %s\n",fmt) ;
  geo_sort(ol,prop,0) ;
  for(o=0;o<ol->n;o++) {
    ob = ol->obj[o] ;
    geo_com(ob,&ycom,&xcom) ;
    rrg2 = geo_rrg2(ob) ;
    aspect = geo_aspect(ob) ;
    geo_axis(ob,&yax,&xax) ;
    ang = 180.0/M_PI * atan2(yax,xax) ;
    fprintf(fp,"%d\t%f\t%f\t%d\t%f\t\t%f\t%f\n",
	    o,ycom,xcom,ob->n,aspect,ang,rrg2) ;
  } ;
  fclose(fp) ;
  if (verbosity < MSG_NONE)
    printf("%s [%s:%d]: wrote geometry of %d objs to \"%s\".\n",
	   me,__FILE__,__LINE__,o,fn) ;
  return(OK) ;
}