static char *GuessWeight(char *fontname) { int i; for (i=0; knownweights[i] != NULL; ++i) if (strstr(fontname, knownweights[i]) != NULL) return (fastrdup(realweights[i])); return (fastrdup("Regular")); }
char *getFontAnvilShareDir(void) { #if defined(__MINGW32__) # ifndef MAX_PATH # define MAX_PATH 4096 # endif static char *sharedir=NULL; if (!sharedir) { char path[MAX_PATH+32]; char *c=path; char *tail=0; unsigned int len=GetModuleFileNameA(NULL, path, MAX_PATH); path[len]='\0'; for (; *c; *c++) { if (*c=='\\') { tail=c; *c='/'; } } if (!tail) tail=c; strcpy(tail, "/share/fontanvil"); sharedir=fastrdup(path); } return sharedir; #elif defined(SHAREDIR) return (SHAREDIR "/fontanvil"); #elif defined(PREFIX) return (PREFIX "/share/fontanvil"); #else return (NULL); #endif }
static char *despace(char *fontname) { char *pt, *npt; fontname=fastrdup(fontname); for (pt=npt=fontname; *pt; ++pt) if (*pt != ' ') *npt++=*pt; *npt='\0'; return (fontname); }
int GetPrefs(char *name, Val * val) { int i, j; for (i=0; prefs_list[i] != NULL; ++i) for (j=0; prefs_list[i][j].name != NULL; ++j) { if (strcmp(prefs_list[i][j].name, name)==0) { struct prefs_list *pf=&prefs_list[i][j]; if (pf->type==pr_bool || pf->type==pr_int || pf->type==pr_unicode) { val->type=v_int; val->u.ival=*((int *) (pf->val)); } else if (pf->type==pr_string || pf->type==pr_file) { val->type=v_str; char *tmpstr = pf->val?*((char **) (pf->val)):(char *) (pf->get) (); val->u.sval=fastrdup(tmpstr?tmpstr:""); if (!pf->val) free(tmpstr); } else if (pf->type==pr_encoding) { val->type=v_str; if (*((NameList **) (pf->val))==NULL) val->u.sval=fastrdup("NULL"); else val->u.sval=fastrdup((*((Encoding **) (pf->val)))->enc_name); } else if (pf->type==pr_namelist) { val->type=v_str; val->u.sval=fastrdup((*((NameList **) (pf->val)))->title); } else if (pf->type==pr_real) { val->type=v_real; val->u.fval=*((float *) (pf->val)); } else return (false); return (true); } } return (false); }
static char *GuessFamily(char *fontname) { char *fpt, *pt; int i, j; if ((fpt=strchr(fontname, '-')) != NULL && fpt != fontname) return (copyn(fontname, fpt - fontname)); if ((fpt=strchr(fontname, '.')) != NULL && fpt != fontname) return (copyn(fontname, fpt - fontname)); for (i=0; mods[i] != NULL; ++i) for (j=0; mods[i][j] != NULL; ++j) { pt=strstr(fontname, mods[i][j]); if (pt != NULL && (fpt==NULL || pt < fpt)) fpt=pt; } if (fpt==NULL) return (fastrdup(fontname)); return (copyn(fontname, fpt - fontname)); }
char *GFileMakeAbsoluteName(char *name) { char buffer[1025]; GFileGetAbsoluteName(name, buffer, sizeof(buffer)); return (fastrdup(buffer)); }
int SetPrefs(char *name, Val * val1, Val * val2) { int i, j; for (i=0; prefs_list[i] != NULL; ++i) for (j=0; prefs_list[i][j].name != NULL; ++j) { if (strcmp(prefs_list[i][j].name, name)==0) { struct prefs_list *pf=&prefs_list[i][j]; if (pf->type==pr_bool || pf->type==pr_int || pf->type==pr_unicode) { if ((val1->type != v_int && val1->type != v_unicode) || val2 != NULL) return (-1); *((int *) (pf->val))=val1->u.ival; } else if (pf->type==pr_real) { if (val1->type==v_real && val2==NULL) *((float *) (pf->val))=val1->u.fval; else if (val1->type != v_int || (val2 != NULL && val2->type != v_int)) return (-1); else *((float *) (pf->val)) = (val2 == NULL?val1->u.ival:val1->u.ival / (double) val2->u.ival); } else if (pf->type==pr_string || pf->type==pr_file) { if (val1->type != v_str || val2 != NULL) return (-1); if (pf->set) { pf->set(val1->u.sval); } else { free(*((char **) (pf->val))); *((char **) (pf->val))=fastrdup(val1->u.sval); } } else if (pf->type==pr_encoding) { if (val2 != NULL) return (-1); else if (val1->type==v_str && pf->val==&default_encoding) { Encoding *enc=FindOrMakeEncoding(val1->u.sval); if (enc==NULL) return (-1); *((Encoding **) (pf->val))=enc; } else return (-1); } else if (pf->type==pr_namelist) { if (val2 != NULL) return (-1); else if (val1->type==v_str) { NameList *nl=NameListByName(val1->u.sval); if (strcmp(val1->u.sval, "NULL")==0 && pf->val != &namelist_for_new_fonts) nl=NULL; else if (nl==NULL) return (-1); *((NameList **) (pf->val))=nl; } else return (-1); } else return (false); return (true); } } return (false); }