48 lines
		
	
	
		
			952 B
		
	
	
	
		
			Awk
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			952 B
		
	
	
	
		
			Awk
		
	
	
	
	
	
| BEGIN {
 | |
|     FS = "[; ]";
 | |
|     i = 0;
 | |
| }
 | |
| $2 == "A" { 
 | |
|     code = sprintf("0x%s", $1);
 | |
|     if (strtonum(code) < 0x10000) {
 | |
| 	map[i] = code
 | |
| 	i++;
 | |
|     }
 | |
| }
 | |
| END {
 | |
|     n = 0;
 | |
|     start = map[0]
 | |
|     prev = strtonum(map[0]);
 | |
|     for (j = 1; j < i; j++) {
 | |
| 	cur = strtonum(map[j]);
 | |
| 	if (match(map[j], "[.]+")) {
 | |
| 	    map2[n] = sprintf("%s, %s", start, map[j - 1]);
 | |
| 	    n++;
 | |
| 	    gsub("[.]+", ", 0x", map[j])
 | |
| 	    map2[n] = map[j];
 | |
| 	    n++;
 | |
| 	    start = map[j + 1];
 | |
| 	    cur = strtonum(start);
 | |
| 	} else {
 | |
| 	    if (cur - prev > 2) {
 | |
| 		map2[n] = sprintf("%s, %s", start, map[j - 1]);
 | |
| 		start = map[j];
 | |
| 		n++;
 | |
| 	    }
 | |
| 
 | |
| 	    if (j == i - 1) {
 | |
| 		map2[n] = sprintf("%s, %s", start, map[j]);
 | |
| 		n++;
 | |
| 	    }
 | |
| 	}
 | |
| 	prev = cur;
 | |
|     }
 | |
| 
 | |
|     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");
 | |
| }
 |