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; }
/************************************************************************ 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) ; }