void get_key_str(void *key, int idx, char *out_str) { char t[128]; char *phostr; if (is_gtab) { int tlen; u_int64_t key64; if (ph_key_sz == 4) { u_int32_t key32; cp_ph_key(key, idx, &key32); key64 = key32; } else cp_ph_key(key, idx, &key64); gtab_key2name(pinmd, key64, t, &tlen); phostr = t; } else { phokey_t k; cp_ph_key(key, idx, &k); phostr = b_pinyin? phokey2pinyin(k):phokey_to_str(k); } strcpy(out_str, phostr); }
GtkWidget *create_pho_sel_area() { hbox_pho_sel = gtk_hbox_new (FALSE, 0); int i; for(i=0; i < bigphoN; i++) { bigpho[i].opt_menu = gtk_combo_box_new_text (); gtk_box_pack_start (GTK_BOX (hbox_pho_sel), bigpho[i].opt_menu, FALSE, FALSE, 0); int j; for(j=0; j < bigpho[i].phokeysN; j++) { char t[128]; char *phostr; if (is_gtab) { int tlen; u_int64_t key64; if (ph_key_sz == 4) { u_int32_t key32; cp_ph_key(bigpho[i].phokeys,j, &key32); key64 = key32; } else cp_ph_key(bigpho[i].phokeys,j, &key64); gtab_key2name(pinmd, key64, t, &tlen); // dbg("%d,%d] %s\n", i,j, t); phostr = t; } else { phokey_t k; cp_ph_key(bigpho[i].phokeys, j, &k); phostr = b_pinyin? phokey2pinyin(k):phokey_to_str(k); } gtk_combo_box_append_text (GTK_COMBO_BOX_TEXT (bigpho[i].opt_menu), phostr); } gtk_combo_box_set_active (GTK_COMBO_BOX(bigpho[i].opt_menu), 0); } GtkWidget *button_ok = gtk_button_new_with_label("OK to add"); gtk_box_pack_start (GTK_BOX (hbox_pho_sel), button_ok, FALSE, FALSE, 20); g_signal_connect (G_OBJECT (button_ok), "clicked", G_CALLBACK (cb_button_ok), NULL); GtkWidget *button_cancel = gtk_button_new_from_stock (GTK_STOCK_CANCEL); gtk_box_pack_start (GTK_BOX (hbox_pho_sel), button_cancel, FALSE, FALSE, 20); g_signal_connect (G_OBJECT (button_cancel), "clicked", G_CALLBACK (cb_button_cancel), NULL); return hbox_pho_sel; }
static void selection_received(GtkClipboard *pclip, const gchar *text, gpointer data) { if (!text) return; char *outtext = NULL; int outlen = 0; while (*text) { char tt[CH_SZ * 5 * MAX_SAME_PHO + 1]; int len = u8cpy(tt, (char *)text); tt[len]=0; phokey_t phokeys[MAX_SAME_PHO]; int phokeysN = utf8_pho_keys((char *)text, phokeys); int i; for(i=0; i <phokeysN ;i++) { char *phostr; if (b_pinyin) phostr = phokey2pinyin(phokeys[i]); else phostr = phokey_to_str(phokeys[i]); strcat(tt, phostr); } int ttlen = strlen(tt); outtext = (char *)realloc(outtext, outlen + ttlen + 1); memcpy(outtext + outlen, tt, ttlen); outlen+=ttlen; text += len; } outtext[outlen]=0; gtk_text_buffer_set_text (buffer, outtext, -1); free(outtext); all_wrap(); }
int main(int argc, char **argv) { FILE *fp; int i; char clen; usecount_t usecount; gboolean pr_usecount = TRUE; char *fname; char *fname_out = NULL; gtk_init(&argc, &argv); if (argc <= 1) { printf("%s: file name expected\n", argv[0]); exit(1); } init_TableDir(); gboolean b_pinyin = is_pinyin_kbm(); for(i=1; i < argc;) { if (!strcmp(argv[i], "-nousecount")) { i++; pr_usecount = FALSE; b_pinyin = FALSE; } else if (!strcmp(argv[i], "-o")) { if (i==argc-1) p_err("-o need out file name"); fname_out = argv[i+1]; i+=2; } else fname = argv[i++]; } FILE *fp_out; if (!fname_out) { fp_out = stdout; } else { dbg("%s use %s\n", argv[0], fname_out); fp_out = fopen(fname_out, "w"); if (!fp_out) p_err("cannot create %s\n", fname_out); } if (b_pinyin) fprintf(fp_out, "!!pinyin\n"); if ((fp=fopen(fname,"rb"))==NULL) p_err("Cannot open %s %s", fname, sys_err_strA()); TSIN_GTAB_HEAD head; int phsz = 2; fread(&head, sizeof(head), 1, fp); if (!strcmp(head.signature, TSIN_GTAB_KEY)) { if (head.maxkey * head.keybits > 32) phsz = 8; else phsz = 4; } else rewind(fp); if (phsz > 2) { fprintf(stderr, "phsz %d keybits:%d\n", phsz, head.keybits); fprintf(stderr, "keymap '%s'\n", head.keymap); fprintf(fp_out,TSIN_GTAB_KEY" %d %d %s\n", head.keybits, head.maxkey, head.keymap+1); } while (!feof(fp)) { phokey_t phbuf[MAX_PHRASE_LEN]; u_int phbuf32[MAX_PHRASE_LEN]; u_int64_t phbuf64[MAX_PHRASE_LEN]; gboolean is_deleted = FALSE; fread(&clen,1,1,fp); if (clen < 0) { clen = - clen; is_deleted = TRUE; } fread(&usecount, sizeof(usecount_t), 1,fp); if (!pr_usecount) usecount = 0; if (phsz==2) fread(phbuf, sizeof(phokey_t), clen, fp); else if (phsz==4) fread(phbuf32, 4, clen, fp); else if (phsz==8) fread(phbuf64, 8, clen, fp); char tt[512]; int ttlen=0; tt[0]=0; for(i=0;i<clen;i++) { char ch[CH_SZ]; int n = fread(ch, 1, 1, fp); if (n<=0) goto stop; int len=utf8_sz(ch); fread(&ch[1], 1, len-1, fp); memcpy(tt+ttlen, ch, len); ttlen+=len; } tt[ttlen]=0; if (!tt[0]) continue; if (is_deleted) continue; fprintf(fp_out, "%s ", tt); for(i=0;i<clen;i++) { if (phsz==2) { if (b_pinyin) { char *t = phokey2pinyin(phbuf[i]); // dbg("z %s\n", t); fprintf(fp_out, "%s", t); } else prph2(fp_out, phbuf[i]); } else { u_int64_t k; if (phsz==4) k = phbuf32[i]; else k = phbuf64[i]; char tkey[16]; get_keymap_str(k, head.keymap, head.keybits, tkey); fprintf(fp_out, "%s", tkey); } if (i!=clen-1) fprintf(fp_out, " "); } fprintf(fp_out, " %d\n", usecount); } stop: fclose(fp); fclose(fp_out); exit(0); }