Index: bxl.h =================================================================== --- bxl.h (revision 30603) +++ bxl.h (revision 30604) @@ -7,6 +7,14 @@ #include "obj_poly.h" #include +typedef enum { + PCB_BXL_JUST_TOP = 1, + PCB_BXL_JUST_LEFT = 1, + PCB_BXL_JUST_CENTER = 2, + PCB_BXL_JUST_BOTTOM = 4, + PCB_BXL_JUST_RIGHT = 4 +} pcb_bxl_just_t; + typedef struct pcb_bxl_ctx_s { pcb_subc_t *subc; char in_target_fp; /* 1 if we are parsing the target footprint; else skip */ @@ -19,6 +27,7 @@ pcb_coord_t origin_x, origin_y, endp_x, endp_y, width, radius; pcb_poly_t *poly; double arc_start, arc_delta; + pcb_bxl_just_t hjust, vjust; unsigned delayed_poly:1; } state; @@ -33,6 +42,7 @@ void pcb_bxl_pattern_end(pcb_bxl_ctx_t *ctx); void pcb_bxl_reset(pcb_bxl_ctx_t *ctx); void pcb_bxl_set_layer(pcb_bxl_ctx_t *ctx, const char *layer_name); +void pcb_bxl_set_justify(pcb_bxl_ctx_t *ctx, const char *str); void pcb_bxl_add_property(pcb_bxl_ctx_t *ctx, pcb_any_obj_t *obj, const char *keyval); Index: bxl_gram.c =================================================================== --- bxl_gram.c (revision 30603) +++ bxl_gram.c (revision 30604) @@ -589,6 +589,10 @@ #line 121 "../../src_plugins/io_bxl/bxl_gram.y" { yyctx->val.un.c = PCB_MIL_TO_COORD(yyctx->stack.l_mark[0].un.d); } break; +case 17: +#line 125 "../../src_plugins/io_bxl/bxl_gram.y" + { pcb_bxl_set_justify(ctx, yyctx->stack.l_mark[0].un.s); free(yyctx->stack.l_mark[0].un.s); } +break; case 20: #line 131 "../../src_plugins/io_bxl/bxl_gram.y" { ctx->state.origin_x = yyctx->stack.l_mark[-2].un.c; ctx->state.origin_y = yyctx->stack.l_mark[0].un.c; } @@ -657,7 +661,7 @@ #line 334 "../../src_plugins/io_bxl/bxl_gram.y" { ctx->state.arc_delta = yyctx->stack.l_mark[0].un.d; } break; -#line 673 "../../src_plugins/io_bxl/bxl_gram.c" +#line 677 "../../src_plugins/io_bxl/bxl_gram.c" } yyctx->stack.s_mark -= yyctx->yym; yyctx->state = *yyctx->stack.s_mark; Index: bxl_gram.y =================================================================== --- bxl_gram.y (revision 30603) +++ bxl_gram.y (revision 30604) @@ -122,7 +122,7 @@ ; common_attr_text: - T_JUSTIFY T_ID + T_JUSTIFY T_ID { pcb_bxl_set_justify(ctx, $2); free($2); } | T_TEXTSTYLE T_QSTR | T_ISVISIBLE boolean ; Index: read.c =================================================================== --- read.c (revision 30603) +++ read.c (revision 30604) @@ -141,6 +141,20 @@ } } +void pcb_bxl_set_justify(pcb_bxl_ctx_t *ctx, const char *str) +{ + /* special case for single center */ + if (pcb_strcasecmp(str, "center") == 0) { ctx->state.hjust = ctx->state.vjust = PCB_BXL_JUST_CENTER; return; } + + if (pcb_strncasecmp(str, "lower", 5) == 0) { ctx->state.vjust = PCB_BXL_JUST_BOTTOM; str+=5; } + else if (pcb_strncasecmp(str, "upper", 5) == 0) { ctx->state.vjust = PCB_BXL_JUST_TOP; str+=5; } + else if (pcb_strncasecmp(str, "center", 6) == 0) { ctx->state.vjust = PCB_BXL_JUST_CENTER; str+=6; } + + if (pcb_strncasecmp(str, "left", 4) == 0) ctx->state.hjust = PCB_BXL_JUST_LEFT; + else if (pcb_strncasecmp(str, "right", 5) == 0) ctx->state.hjust = PCB_BXL_JUST_RIGHT; + else if (pcb_strncasecmp(str, "center", 6) == 0) ctx->state.hjust = PCB_BXL_JUST_CENTER; +} + void pcb_bxl_add_property(pcb_bxl_ctx_t *ctx, pcb_any_obj_t *obj, const char *keyval) { char *tmp, *val;