Index: src/obj_text.c =================================================================== --- src/obj_text.c (revision 35640) +++ src/obj_text.c (revision 35641) @@ -1332,7 +1332,31 @@ return rnd_round((double)h * scy); } +int pcb_text_invalid_chars(pcb_board_t *pcb, pcb_font_t *FontPtr, pcb_text_t *Text) +{ + unsigned char *s, *rendered; + int ctr = 0; + pcb_symbol_t *symbol; + if (FontPtr == NULL) + FontPtr = pcb_font(pcb, Text->fid, 1); + + symbol = FontPtr->Symbol; + + rendered = pcb_text_render_str(Text); + if (rendered == NULL) + return 0; + + for(s = rendered; *s != '\0'; s++) + if ((*s > PCB_MAX_FONTPOSITION) || (!symbol[*s].Valid)) + ctr++; + + pcb_text_free_str(Text, rendered); + + return ctr; +} + + RND_INLINE void cheap_text_line(rnd_hid_gc_t gc, pcb_xform_mx_t mx, rnd_coord_t x1, rnd_coord_t y1, rnd_coord_t x2, rnd_coord_t y2, rnd_coord_t xordx, rnd_coord_t xordy) { rnd_coord_t tx1, ty1, tx2, ty2; Index: src/obj_text.h =================================================================== --- src/obj_text.h (revision 35640) +++ src/obj_text.h (revision 35641) @@ -125,6 +125,9 @@ /* Return the minimum width the text object needs to have on a specific layer */ rnd_coord_t pcb_text_min_thickness(const pcb_layer_t *layer); +/* Return the number of invalid characters (with the given font) the text contains */ +int pcb_text_invalid_chars(pcb_board_t *pcb, pcb_font_t *FontPtr, pcb_text_t *Text); + /* hash and eq */ int pcb_text_eq(const pcb_host_trans_t *tr1, const pcb_text_t *t1, const pcb_host_trans_t *tr2, const pcb_text_t *t2); unsigned int pcb_text_hash(const pcb_host_trans_t *tr, const pcb_text_t *t);