40 lines
		
	
	
		
			905 B
		
	
	
	
		
			Awk
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			905 B
		
	
	
	
		
			Awk
		
	
	
	
	
	
| BEGIN {
 | |
|     FS = "[; ]";
 | |
|     i = 0;
 | |
| }
 | |
| $2 == "A" { 
 | |
|     code = code2 = strtonum(sprintf("0x%s", $1))
 | |
|     if (match($1, /[.]+[0-9A-Fa-f]+/)) {
 | |
| 	s = substr($1, RSTART, RLENGTH)
 | |
| 	sub(/[.]+/, "0x", s)
 | |
| 	code2 = strtonum(s)
 | |
|     }
 | |
|     for (; code <= code2; code++) {
 | |
| 	if (code >= 0x10000) { break }
 | |
| 	map[i] = sprintf("0x%04X", code)
 | |
| 	i++;
 | |
|     }
 | |
| }
 | |
| END {
 | |
|     n = 0;
 | |
|     start = map[0]
 | |
|     prev = strtonum(map[0]);
 | |
|     for (j = 1; j < i; j++) {
 | |
| 	cur = strtonum(map[j]);
 | |
| 	if (cur - prev > 1) {
 | |
| 	    map2[n] = sprintf("%s, %s", start, map[j - 1]);
 | |
| 	    n++;
 | |
| 	    start = map[j];
 | |
| 	}
 | |
| 	prev = cur;
 | |
|     }
 | |
|     if (i > 0) { map2[n] = sprintf("%s, %s", start, map[i - 1]); n++ }
 | |
| 
 | |
|     printf("static wc_map ucs_ambwidth_map[] = {\n");
 | |
|     for (j = 0; j < n; j++) {
 | |
| 	printf("   { %s },\n", map2[j]);
 | |
|     }
 | |
|     printf("};\n");
 | |
|     printf("#define N_ucs_ambwidth_map (sizeof(ucs_ambwidth_map) / sizeof(*ucs_ambwidth_map))\n");
 | |
| }
 |