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

📄 makeuctb.c

📁 基于rtos开发的浏览器!
💻 C
📖 第 1 页 / 共 2 页
字号:
	    if (un0 < 0) {		fprintf(stderr, "Bad input line: %s\n", buffer);		exit(EX_DATAERR);		fprintf(stderr,    "%s: Bad Unicode range corresponding to font position range 0x%x-0x%x\n",			tblname, fp0, fp1);		exit(EX_DATAERR);	    }	    un1 = un0;	    while (*p == ' ' || *p == '\t') {		p++;	    }	    if (*p == '-') {		p++;		while (*p == ' ' || *p == '\t') {		    p++;		}		un1 = getunicode(&p);		if (un1 < 0 || un1 < un0) {		    fprintf(stderr,			    "%s: Bad Unicode range U+%x-U+%x\n",			    tblname, un0, un1);		    fprintf(stderr, "Bad input line: %s\n", buffer);		    exit(EX_DATAERR);		}		while (*p == ' ' || *p == '\t') {		    p++;		}	    }	    if (*p != ':' && *p != '"') {		fprintf(stderr, "No ':' or '\"' where expected: %s\n",			buffer);		continue;	    }	    tbuf = (char *)malloc(4*strlen(p));	    if (!(p1 = tbuf)) {		fprintf(stderr, "%s: Out of memory\n", tblname);		exit(EX_DATAERR);	    }	    if (*p == '"') {		/*		 *  Handle "<C replace>".		 *  Copy chars verbatim until first '"' not \-escaped or		 *  end of buffer.		 */		int escaped = 0;		for (ch = *(++p); (ch = *p) != '\0'; p++) {		    if (escaped) {			escaped = 0;		    } else if (ch == '"') {			break;		    } else if (ch == '\\') {			escaped = 1;		    }		    *p1++ = ch;		}		if (escaped || ch != '"') {		    fprintf(stderr, "Warning: String not terminated: %s\n",			    buffer);		    if (escaped)			*p1++ = '\n';		}	    } else {		/*		 *  We had ':'.		 */		for (ch = *(++p); (ch = *p) != '\0'; p++, p1++) {		    if ((unsigned char)ch < 32 || ch == '\\' || ch == '\"' ||			(unsigned char)ch >= 127) {			sprintf(p1, "\\%.3o", (unsigned char)ch); #ifdef NOTDEFINED			fprintf(stderr, "%s\n", tbuf);#endif /* NOTDEFINED */			p1 += 3;		    } else {			*p1 = ch;		    }		}	    }	    *p1 = '\0';	    for (i = un0; i <= un1; i++) {#ifdef NOTDEFINED		printf("U+0x%x:%s\n", i, tbuf); */#endif /* NOTDEFINED */		addpair_str(tbuf,i);	    }	    continue;	}	/*	 *  Input line (after skipping spaces) doesn't start with one	 *  of the specially recognized characters, so try to interpret	 *  it as starting with a fontpos.	 */	fp0 = strtol(p, &p1, 0);	if (p1 == p) {	    fprintf(stderr, "Bad input line: %s\n", buffer);	    exit(EX_DATAERR);        }	p = p1;	while (*p == ' ' || *p == '\t') {	    p++;	}	if (*p == '-') {	    p++;	    fp1 = strtol(p, &p1, 0);	    if (p1 == p) {		fprintf(stderr, "Bad input line: %s\n", buffer);		exit(EX_DATAERR);	    }	    p = p1;        } else {	    fp1 = 0;	}	if (fp0 < 0 || fp0 >= fontlen) {	    fprintf(stderr,		    "%s: Glyph number (0x%x) larger than font length\n",		    tblname, fp0);	    exit(EX_DATAERR);	}	if (fp1 && (fp1 < fp0 || fp1 >= fontlen)) {	    fprintf(stderr,		    "%s: Bad end of range (0x%x)\n",		    tblname, fp1);	    exit(EX_DATAERR);	}	if (fp1) {	    /*	     *  We have a range; expect the word "idem"	     *  or a Unicode range of the same length.	     */	    while (*p == ' ' || *p == '\t') {		p++;	    }	    if (!strncmp(p, "idem", 4)) {		for (i = fp0; i <= fp1; i++) {		    addpair(i,i);		}		p += 4;	    } else {		un0 = getunicode(&p);		while (*p == ' ' || *p == '\t') {		    p++;		}		if (*p != '-') {		    fprintf(stderr,			    "%s: Corresponding to a range of font positions,",			    tblname);		    fprintf(stderr,			    " there should be a Unicode range.\n");		    exit(EX_DATAERR);	        }		p++;		un1 = getunicode(&p);		if (un0 < 0 || un1 < 0) {		    fprintf(stderr,     "%s: Bad Unicode range corresponding to font position range 0x%x-0x%x\n",			    tblname, fp0, fp1);		    exit(EX_DATAERR);	        }		if (un1 - un0 != fp1 - fp0) {		    fprintf(stderr,			"%s: Unicode range U+%x-U+%x not of the same length",			    tblname, un0, un1);		    fprintf(stderr,			    " as font position range 0x%x-0x%x\n",			    fp0, fp1);		    exit(EX_DATAERR);	        }		for (i = fp0; i <= fp1; i++) {		    addpair(i,un0-fp0+i);		}	    }	} else {	    /*	     *  No range; expect a list of unicode values	     *  or unicode ranges for a single font position,	     *  or the word "idem"	     */	    while (*p == ' ' || *p == '\t') {		p++;	    }	    if (!strncmp(p, "idem", 4)) {		addpair(fp0,fp0);		p += 4;	    }	    while ((un0 = getunicode(&p)) >= 0) {		addpair(fp0, un0);		while (*p == ' ' || *p == '\t') {		    p++;		}		if (*p == '-') {		    p++;		    un1 = getunicode(&p);		    if (un1 < un0) {			fprintf(stderr,				"%s: Bad Unicode range 0x%x-0x%x\n",				tblname, un0, un1);			exit(EX_DATAERR);		    }		    for (un0++; un0 <= un1; un0++) {			addpair(fp0, un0);		    }		}	    }	}	while (*p == ' ' || *p == '\t') {	    p++;	}	if (*p && *p != '#') {	    fprintf(stderr, "%s: trailing junk (%s) ignored\n", tblname, p);	}    }    /*     *  Okay, we hit EOF, now output tables.     */    fclose(ctbl);      /*     *  Compute total size of Unicode list.     */    nuni = 0;    for (i = 0 ; i < fontlen ; i++) {	nuni += unicount[i];    }    if (argc >= 3) {	strncpy(this_MIMEcharset,argv[2],UC_MAXLEN_MIMECSNAME);    } else if (this_MIMEcharset[0] == '\0') {	strncpy(this_MIMEcharset,tblname,UC_MAXLEN_MIMECSNAME);	if ((p = strchr(this_MIMEcharset,'.')) != 0) {	    *p = '\0';	}    }    for (p = this_MIMEcharset; *p; p++) {	*p = TOLOWER(*p);    }    if (argc >= 4) {	strncpy(this_LYNXcharset,argv[3],UC_MAXLEN_LYNXCSNAME);    } else if (this_LYNXcharset[0] == '\0') {	strncpy(this_LYNXcharset,this_MIMEcharset,UC_MAXLEN_LYNXCSNAME);    }    if ((i = strlen(this_LYNXcharset)) < UC_LEN_LYNXCSNAME) {	for (; i < UC_LEN_LYNXCSNAME; i++) {	    this_LYNXcharset[i] = ' ';	}	this_LYNXcharset[i] = '\0';    }#ifdef NOTDEFINED    fprintf(stderr,"this_MIMEcharset: %s.\n",this_MIMEcharset);    fprintf(stderr,"this_LYNXcharset: %s.\n",this_LYNXcharset);#endif /* NOTDEFINED */    if (this_isDefaultMap == -1) {	this_isDefaultMap = !strncmp(this_MIMEcharset,"iso-8859-1", 10);    }    fprintf(stderr,    	    "makeuctb: %s: %stranslation map", 	    this_MIMEcharset, (this_isDefaultMap ? "default " : ""));    if (this_isDefaultMap == 1) {	*id_append = '\0';    } else {	for (i = 0, p = this_MIMEcharset;	     *p && (i < UC_MAXLEN_ID_APPEND-1);	     p++, i++) {	    id_append[i+1] = isalnum(*p) ? *p : '_';	}    }    id_append[i+1] = '\0';    fprintf(stderr, " (%s).\n", id_append);    printf("\/*\n\ *  uni_hash.tbl\n\ *\n\ *  Do not edit this file; it was automatically generated by\n\ *\n\ *  %s %s\n\ *\n\ */\n\\n\static u8 dfont_unicount%s[%d] = \n\{\n\t", argv[0], argv[1], id_append, fontlen);    for (i = 0; i < fontlen; i++) {	if (i >= 128 && unicount[i] > 0 && i < lowest_eight) {	    lowest_eight = i;	}	printf("%3d", unicount[i]);	if (i == (fontlen - 1)) {	    printf("\n};\n");	} else if ((i % 8) == 7) {	    printf(",\n\t");	} else {	    printf(", ");	}    }    /*     *  If lowest_eightbit is anything else but 999,     *  this can't be 7-bit only.     */    if (lowest_eight != 999 && !RawOrEnc) {	RawOrEnc = UCT_ENC_8BIT;    }    if (nuni) {	printf("\nstatic u16 dfont_unitable%s[%d] = \n{\n\t",	       id_append, nuni);    } else {	printf("\nstatic u16 dfont_unitable%s[1]; /* dummy */\n", id_append);    }    fp0 = 0;    nent = 0;    for (i = 0; i < nuni; i++) {	while (nent >= unicount[fp0]) {	    fp0++;	    nent = 0;	}	printf("0x%04x", unitable[fp0][nent++]);	if (i == (nuni - 1)) {	    printf("\n};\n");	} else if ((i % 8) == 7) {	    printf(",\n\t");	} else {	    printf(", ");	}    }    if (themap_str.entry_ct) {	printf("\n\static struct unipair_str repl_map%s[%d] = \n\{\n\t", id_append, themap_str.entry_ct);    } else {	printf("\n\/* static struct unipair_str repl_map%s[]; */\n", id_append);    }        for (i = 0; i < themap_str.entry_ct; i++) {	printf("{0x%x,\"%s\"}",	       themap_str.entries[i].unicode,	       themap_str.entries[i].replace_str);	if (i == (themap_str.entry_ct - 1)) {	    printf("\n};\n");	} else if ((i % 4) == 3) {	    printf(",\n\t");	} else {	    printf(", ");	}    }    if (themap_str.entry_ct) {	printf("\n\static struct unimapdesc_str dfont_replacedesc%s = {%d,repl_map%s,",id_append, themap_str.entry_ct, id_append);    } else {	printf("\n\static struct unimapdesc_str dfont_replacedesc%s = {0,NULL,",id_append);    }    printf("%d,%d};\n",    this_isDefaultMap ? 1 : 0,    (useDefaultMap && !this_isDefaultMap) ? 1 : 0    );    printf("#define UC_CHARSET_SETUP%s UC_Charset_Setup(\\"%s\",\\\n\"%s\",\\\n\dfont_unicount%s,dfont_unitable%s,%d,\\\n\dfont_replacedesc%s,%d,%d)\n",id_append, this_MIMEcharset, this_LYNXcharset,id_append, id_append, nuni, id_append, lowest_eight, RawOrEnc);    exit(EX_OK);}

⌨️ 快捷键说明

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