Index: trunk/src_plugins/io_bxl/bxl.h =================================================================== --- trunk/src_plugins/io_bxl/bxl.h (revision 30628) +++ trunk/src_plugins/io_bxl/bxl.h (revision 30629) @@ -44,15 +44,16 @@ char *pin_name; pcb_bxl_just_t hjust, vjust; pcb_bxl_test_style_t *text_style; - char *text_str; + char *text_str, *attr_key, *attr_val; pcb_pstk_proto_t proto; unsigned flipped:1; - unsigned invis:1; + unsigned is_visible:1; unsigned plated:1; unsigned nopaste:1; unsigned surface:1; unsigned delayed_poly:1; + unsigned is_text:1; } state; struct { @@ -72,6 +73,7 @@ void pcb_bxl_set_justify(pcb_bxl_ctx_t *ctx, const char *str); void pcb_bxl_set_text_str(pcb_bxl_ctx_t *ctx, char *str); void pcb_bxl_set_text_style(pcb_bxl_ctx_t *ctx, const char *name); +void pcb_bxl_set_attr_val(pcb_bxl_ctx_t *ctx, char *key, char *val); void pcb_bxl_add_property(pcb_bxl_ctx_t *ctx, pcb_any_obj_t *obj, const char *keyval); Index: trunk/src_plugins/io_bxl/bxl_gram.c =================================================================== --- trunk/src_plugins/io_bxl/bxl_gram.c (revision 30628) +++ trunk/src_plugins/io_bxl/bxl_gram.c (revision 30629) @@ -23,10 +23,11 @@ 33, 33, 33, 33, 33, 33, 33, 43, 34, 42, 42, 44, 44, 44, 44, 44, 44, 44, 46, 35, 45, 45, 47, 47, 47, 47, 47, 49, 36, 48, - 48, 50, 50, 50, 50, 37, 51, 51, 52, 52, - 52, 52, 54, 39, 53, 53, 55, 55, 55, 55, - 55, 55, 57, 40, 56, 56, 58, 58, 58, 58, - 58, 58, 41, 38, 59, 59, 60, 60, 60, 11, + 48, 50, 50, 50, 50, 52, 37, 51, 51, 53, + 53, 53, 53, 55, 39, 54, 54, 56, 56, 56, + 56, 56, 56, 58, 40, 57, 57, 59, 59, 59, + 59, 59, 59, 41, 38, 60, 60, 61, 61, 61, + 11, }; static const pcb_bxl_int_t pcb_bxl_len[] = { 2, 2, 0, 3, 1, 1, 1, 1, 1, 1, 1, @@ -38,10 +39,11 @@ 1, 1, 1, 1, 1, 1, 1, 0, 3, 0, 4, 2, 2, 2, 2, 2, 2, 1, 0, 3, 0, 4, 2, 3, 1, 1, 1, 0, 3, 0, - 4, 4, 1, 1, 1, 2, 0, 4, 3, 1, - 1, 1, 0, 3, 0, 4, 2, 2, 2, 1, - 1, 1, 0, 3, 0, 4, 2, 2, 2, 1, - 1, 1, 2, 2, 0, 4, 2, 2, 1, 6, + 4, 4, 1, 1, 1, 0, 3, 0, 4, 3, + 1, 1, 1, 0, 3, 0, 4, 2, 2, 2, + 1, 1, 1, 0, 3, 0, 4, 2, 2, 2, + 1, 1, 1, 2, 2, 0, 4, 2, 2, 1, + 6, }; static const pcb_bxl_int_t pcb_bxl_defred[] = { 0, 0, 0, 0, 13, 11, 0, 0, 0, 0, 1, @@ -51,120 +53,122 @@ 0, 0, 0, 0, 0, 0, 0, 53, 0, 14, 15, 27, 28, 29, 0, 16, 35, 8, 9, 36, 37, 38, 0, 0, 0, 0, 0, 0, 50, 0, - 130, 26, 34, 0, 0, 0, 0, 0, 52, 0, - 0, 0, 0, 0, 31, 68, 79, 88, 0, 103, - 113, 0, 0, 0, 0, 60, 61, 62, 63, 64, + 131, 26, 34, 0, 0, 0, 0, 0, 52, 0, + 0, 0, 0, 0, 31, 68, 79, 88, 96, 104, + 114, 0, 0, 0, 0, 60, 61, 62, 63, 64, 65, 66, 67, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 0, 0, 0, 123, 124, 57, 0, 54, - 55, 56, 0, 0, 0, 0, 69, 0, 80, 0, - 89, 0, 0, 0, 0, 0, 0, 100, 101, 102, - 0, 0, 104, 0, 114, 0, 0, 129, 0, 59, - 41, 32, 40, 0, 0, 0, 0, 0, 0, 78, - 0, 0, 0, 0, 85, 86, 87, 0, 0, 93, - 94, 95, 0, 18, 21, 0, 0, 17, 19, 0, - 0, 0, 0, 110, 111, 112, 0, 0, 0, 0, - 120, 121, 122, 0, 127, 128, 0, 0, 72, 73, - 74, 75, 76, 77, 0, 22, 83, 0, 0, 0, - 0, 0, 99, 98, 107, 108, 109, 0, 119, 117, - 118, 0, 126, 0, 0, 71, 84, 82, 0, 91, - 20, 106, 116, 0, 0, 47, 48, 0, 42, 92, - 45, 46, 0, 44, + 0, 0, 0, 0, 124, 125, 57, 0, 54, 55, + 56, 0, 0, 0, 0, 69, 0, 80, 0, 89, + 0, 97, 0, 105, 0, 115, 0, 0, 0, 130, + 0, 59, 41, 32, 40, 0, 0, 0, 0, 0, + 0, 78, 0, 0, 0, 0, 0, 85, 86, 87, + 0, 0, 93, 94, 95, 0, 0, 0, 0, 0, + 101, 102, 103, 0, 0, 0, 0, 111, 112, 113, + 0, 0, 0, 0, 121, 122, 123, 0, 0, 128, + 129, 0, 0, 72, 73, 74, 75, 76, 77, 0, + 22, 21, 83, 0, 0, 0, 0, 18, 0, 17, + 19, 0, 108, 109, 110, 0, 120, 118, 119, 0, + 0, 127, 0, 0, 71, 84, 82, 0, 91, 100, + 99, 107, 117, 20, 0, 0, 47, 48, 0, 42, + 92, 45, 46, 0, 44, }; static const pcb_bxl_int_t pcb_bxl_dgoto[] = { 2, 56, 57, 60, 3, 10, 11, 4, 12, 13, 14, - 15, 138, 139, 140, 167, 27, 21, 35, 29, 22, - 124, 107, 40, 125, 225, 198, 238, 46, 30, 47, + 15, 171, 140, 159, 160, 27, 21, 35, 29, 22, + 123, 107, 40, 124, 224, 193, 239, 46, 30, 47, 48, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 127, 108, 161, 129, 109, 168, 131, 110, 173, - 112, 141, 143, 113, 187, 145, 114, 194, 116, 149, + 103, 126, 108, 153, 128, 109, 161, 130, 110, 166, + 132, 111, 174, 134, 112, 181, 136, 113, 188, 115, + 141, }; -static const pcb_bxl_int_t pcb_bxl_sindex[] = { 5, - 5, 0, -236, 0, 0, -249, -239, -235, -227, 0, - 5, 0, 0, 0, 0, 0, 0, 5, -281, -236, - -5, -3, 0, -275, 0, -205, 0, -218, 5, -154, - -212, -192, -192, -192, 6, -192, -184, -184, -184, 27, - -219, 14, 46, 50, 52, -183, 5, 0, -220, 0, - 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, - 0, 0, -3, 41, -158, -192, -192, -192, 0, -154, - 0, 0, 0, -157, 5, 59, 62, 63, 0, 5, - -172, -192, -192, -192, 0, 0, 0, 0, 69, 0, - 0, 70, 70, -162, 5, 0, 0, 0, 0, 0, - 0, 0, 0, 79, 82, 84, -137, 95, 96, 102, - -215, 0, 103, 105, -267, 0, 0, 0, -172, 0, - 0, 0, -114, -121, -137, -115, 0, -225, 0, -193, - 0, -111, -107, -192, -109, -105, -184, 0, 0, 0, - 112, -186, 0, -247, 0, -103, -102, 0, 113, 0, - 0, 0, 0, -99, -100, -98, -97, -92, -192, 0, - 126, -192, -91, 124, 0, 0, 0, 137, -192, 0, - 0, 0, 138, 0, 0, 136, -79, 0, 0, 69, - -192, -192, -192, 0, 0, 0, 141, -192, -77, -184, - 0, 0, 0, 143, 0, 0, 70, 145, 0, 0, - 0, 0, 0, 0, 95, 0, 0, -192, 96, 142, - 102, -192, 0, 0, 0, 0, 0, 103, 0, 0, - 0, 105, 0, -136, 5, 0, 0, 0, -192, 0, - 0, 0, 0, -192, -71, 0, 0, 147, 0, 0, - 0, 0, 145, 0, +static const pcb_bxl_int_t pcb_bxl_sindex[] = { 6, + 6, 0, -241, 0, 0, -236, -230, -209, -221, 0, + 6, 0, 0, 0, 0, 0, 0, 6, -260, -241, + 15, 19, 0, -253, 0, -198, 0, -233, 6, -170, + -184, -217, -217, -217, 36, -217, -162, -162, -162, 50, + -176, 38, 61, 63, 64, -173, 6, 0, -206, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, + 0, 0, 19, 58, -141, -217, -217, -217, 0, -170, + 0, 0, 0, -136, 6, 82, 84, 86, 0, 6, + -249, -217, -217, -217, 0, 0, 0, 0, 0, 0, + 0, 99, 99, -140, 6, 0, 0, 0, 0, 0, + 0, 0, 0, 101, 102, 104, -124, 107, 108, 111, + 112, 113, 114, -276, 0, 0, 0, -249, 0, 0, + 0, -104, -109, -124, -154, 0, -225, 0, -193, 0, + -215, 0, -182, 0, -234, 0, -217, -100, -99, 0, + 121, 0, 0, 0, 0, -95, -94, -93, -92, -89, + -217, 0, 124, -217, -87, -88, 129, 0, 0, 0, + 133, -217, 0, 0, 0, 134, -84, -83, -79, -162, + 0, 0, 0, 138, -217, -217, -217, 0, 0, 0, + 139, -217, -78, -162, 0, 0, 0, 140, 141, 0, + 0, 99, 143, 0, 0, 0, 0, 0, 0, 107, + 0, 0, 0, -217, 108, 142, 111, 0, -76, 0, + 0, 112, 0, 0, 0, 113, 0, 0, 0, 114, + -217, 0, -189, 6, 0, 0, 0, -217, 0, 0, + 0, 0, 0, 0, -217, -71, 0, 0, 147, 0, + 0, 0, 0, 143, 0, }; static const pcb_bxl_int_t pcb_bxl_rindex[] = { 9, 1, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, - 180, 181, 0, 0, 0, 0, 0, 0, 0, -87, + 180, 181, 0, 0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, - 0, 0, 181, 0, 0, 0, 0, 0, 0, -87, + 0, 0, 181, 0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -88, 0, 0, 0, 0, 0, 0, 0, 184, 0, - 0, 185, 185, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -72, 187, 188, 190, - 0, 0, 191, 192, 0, 0, 0, 0, -88, 0, - 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, + -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 182, 182, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -74, 185, 186, 187, + 188, 190, 191, 0, 0, 0, 0, -82, 0, 0, + 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 193, 0, 0, - 0, 0, 0, 0, 187, 0, 0, 0, 188, 0, - 190, 0, 0, 0, 0, 0, 0, 191, 0, 0, - 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 193, 0, + 0, 182, 192, 0, 0, 0, 0, 0, 0, 185, + 0, 0, 0, 0, 186, 0, 187, 0, 0, 0, + 0, 188, 0, 0, 0, 190, 0, 0, 0, 191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 192, 0, }; static const pcb_bxl_int_t pcb_bxl_gindex[] = { 0, - -27, -64, -26, 0, 179, 0, -1, 0, 0, 0, - 0, 60, -57, -106, -116, 150, 0, 0, 144, 0, - 81, 0, 0, 0, -35, 0, 0, 139, 0, 0, - 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 2, 0, 0, 3, 0, 0, - 33, 0, -2, 0, 0, -7, 0, 0, -85, 0, + -27, -64, -26, 0, 183, 0, -1, 0, 0, 0, + 0, 69, -4, -108, -118, 150, 0, 0, 144, 0, + 85, 0, 0, 0, -38, 0, 0, 145, 0, 0, + 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 0, 0, 7, 0, 0, 4, 0, 0, + 2, 0, 0, -3, 0, 0, -2, 0, 0, -85, + 0, }; #define pcb_bxl_TABLESIZE 321 static const pcb_bxl_int_t pcb_bxl_table[] = { 5, - 10, 76, 77, 78, 52, 53, 54, 117, 12, 20, - 16, 61, 62, 172, 1, 132, 23, 104, 105, 106, - 17, 166, 134, 171, 18, 186, 6, 41, 19, 133, - 7, 24, 50, 51, 26, 185, 28, 193, 31, 146, - 147, 8, 134, 49, 188, 70, 55, 132, 162, 64, - 136, 133, 36, 37, 38, 189, 137, 148, 32, 33, - 34, 133, 190, 164, 134, 50, 51, 63, 160, 176, - 165, 65, 170, 81, 134, 9, 58, 59, 85, 163, - 162, 135, 136, 133, 184, 66, 192, 162, 137, 67, - 133, 68, 39, 119, 71, 69, 134, 206, 74, 75, - 80, 169, 82, 134, 210, 83, 84, 237, 111, 115, - 179, 223, 86, 181, 182, 183, 215, 236, 118, 120, - 87, 88, 121, 89, 122, 42, 90, 43, 44, 45, - 91, 204, 123, 92, 126, 128, 93, 162, 234, 235, - 133, 130, 142, 227, 144, 151, 152, 231, 174, 175, - 177, 178, 180, 197, 216, 217, 195, 196, 199, 200, - 219, 201, 202, 221, 240, 203, 205, 208, 207, 241, - 154, 155, 156, 157, 134, 158, 159, 209, 211, 212, - 213, 218, 220, 222, 224, 229, 242, 243, 2, 25, - 33, 51, 58, 97, 125, 39, 70, 81, 25, 90, - 105, 115, 43, 191, 72, 153, 73, 244, 79, 150, - 228, 226, 214, 230, 233, 232, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, + 10, 76, 77, 78, 52, 53, 54, 116, 12, 20, + 165, 61, 62, 137, 180, 1, 23, 104, 105, 106, + 164, 6, 173, 16, 179, 7, 187, 41, 167, 17, + 138, 139, 50, 51, 19, 86, 8, 36, 37, 38, + 50, 51, 155, 87, 88, 70, 89, 167, 154, 90, + 18, 155, 24, 91, 26, 137, 92, 182, 28, 93, + 31, 155, 157, 169, 137, 32, 33, 34, 183, 170, + 9, 49, 189, 81, 137, 184, 55, 39, 85, 156, + 154, 168, 169, 155, 154, 235, 236, 155, 170, 201, + 63, 154, 64, 118, 155, 65, 137, 206, 58, 59, + 66, 162, 67, 68, 238, 69, 222, 137, 71, 42, + 213, 43, 44, 45, 237, 74, 75, 175, 176, 177, + 152, 80, 158, 199, 163, 82, 172, 83, 178, 84, + 186, 146, 147, 148, 149, 137, 150, 151, 114, 226, + 117, 119, 120, 211, 121, 122, 125, 127, 214, 215, + 129, 131, 133, 135, 217, 143, 234, 219, 144, 190, + 191, 192, 194, 241, 200, 195, 196, 197, 198, 202, + 242, 203, 204, 205, 207, 208, 209, 210, 212, 216, + 220, 218, 223, 230, 221, 228, 243, 244, 2, 25, + 33, 126, 51, 39, 70, 81, 90, 98, 58, 106, + 116, 43, 25, 185, 72, 245, 73, 142, 145, 225, + 229, 227, 232, 231, 79, 0, 0, 233, 0, 0, + 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -178,28 +182,28 @@ }; static const pcb_bxl_int_t pcb_bxl_check[] = { 1, 0, 66, 67, 68, 32, 33, 34, 93, 0, 11, - 260, 38, 39, 130, 10, 263, 18, 82, 83, 84, - 260, 128, 290, 130, 260, 142, 263, 29, 256, 277, - 267, 313, 258, 259, 40, 142, 40, 144, 314, 307, - 308, 278, 290, 256, 292, 47, 41, 263, 274, 269, - 298, 277, 271, 272, 273, 303, 304, 115, 264, 265, - 266, 277, 310, 128, 290, 258, 259, 41, 126, 134, - 128, 58, 130, 75, 290, 312, 261, 262, 80, 305, - 274, 297, 298, 277, 142, 40, 144, 274, 304, 40, - 277, 40, 311, 95, 315, 279, 290, 162, 58, 258, - 258, 295, 44, 290, 169, 44, 44, 224, 40, 40, - 137, 197, 285, 300, 301, 302, 181, 224, 281, 41, - 293, 294, 41, 296, 41, 280, 299, 282, 283, 284, - 303, 159, 270, 306, 40, 40, 309, 274, 275, 276, - 277, 40, 40, 208, 40, 260, 268, 212, 260, 257, - 260, 257, 41, 41, 182, 183, 260, 260, 258, 260, - 188, 260, 260, 190, 229, 258, 41, 44, 260, 234, - 286, 287, 288, 289, 290, 291, 292, 41, 41, 44, - 260, 41, 260, 41, 40, 44, 258, 41, 0, 10, - 10, 279, 281, 10, 10, 268, 10, 10, 20, 10, - 10, 10, 10, 144, 55, 125, 63, 243, 70, 119, - 209, 205, 180, 211, 222, 218, -1, -1, -1, -1, - -1, -1, -1, 225, -1, -1, -1, -1, -1, -1, + 129, 38, 39, 290, 133, 10, 18, 82, 83, 84, + 129, 263, 131, 260, 133, 267, 135, 29, 263, 260, + 307, 308, 258, 259, 256, 285, 278, 271, 272, 273, + 258, 259, 277, 293, 294, 47, 296, 263, 274, 299, + 260, 277, 313, 303, 40, 290, 306, 292, 40, 309, + 314, 277, 127, 298, 290, 264, 265, 266, 303, 304, + 312, 256, 137, 75, 290, 310, 41, 311, 80, 305, + 274, 297, 298, 277, 274, 275, 276, 277, 304, 154, + 41, 274, 269, 95, 277, 58, 290, 162, 261, 262, + 40, 295, 40, 40, 223, 279, 192, 290, 315, 280, + 175, 282, 283, 284, 223, 58, 258, 300, 301, 302, + 125, 258, 127, 151, 129, 44, 131, 44, 133, 44, + 135, 286, 287, 288, 289, 290, 291, 292, 40, 204, + 281, 41, 41, 170, 41, 270, 40, 40, 176, 177, + 40, 40, 40, 40, 182, 260, 221, 184, 268, 260, + 260, 41, 258, 228, 41, 260, 260, 260, 258, 257, + 235, 260, 44, 41, 41, 260, 260, 257, 41, 41, + 41, 260, 40, 260, 44, 44, 258, 41, 0, 10, + 10, 10, 279, 268, 10, 10, 10, 10, 281, 10, + 10, 10, 20, 135, 55, 244, 63, 118, 124, 200, + 207, 205, 216, 212, 70, -1, -1, 220, -1, -1, + -1, -1, 224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -213,7 +217,7 @@ }; #define pcb_bxl_FINAL 2 #define pcb_bxl_MAXTOKEN 315 -#define pcb_bxl_UNDFTOKEN 378 +#define pcb_bxl_UNDFTOKEN 379 #define pcb_bxl_TRANSLATE(a) ((a) > pcb_bxl_MAXTOKEN ? pcb_bxl_UNDFTOKEN : (a)) #if pcb_bxl_DEBUG static const char *const pcb_bxl_name[] = { @@ -236,7 +240,7 @@ "T_PROPERTY","T_WIZARD","T_VARNAME","T_VARDATA","T_TEMPLATEDATA","T_ISFLIPPED", "T_NOPASTE","T_SYMBOL","T_ENDSYMBOL","T_COMPONENT","T_ENDCOMPONENT",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", }; static const char *const pcb_bxl_rule[] = { "$accept : full_file", @@ -335,7 +339,8 @@ "line_attr : common_origin", "line_attr : common_layer", "line_attr : common_width", -"attribute : T_ATTRIBUTE attribute_attrs", +"$$9 :", +"attribute : T_ATTRIBUTE $$9 attribute_attrs", "attribute_attrs :", "attribute_attrs : '(' attribute_attr ')' attribute_attrs", "attribute_attr : T_ATTR T_QSTR T_QSTR", @@ -342,8 +347,8 @@ "attribute_attr : common_attr_text", "attribute_attr : common_origin", "attribute_attr : common_layer", -"$$9 :", -"arc : T_ARC $$9 arc_attrs", +"$$10 :", +"arc : T_ARC $$10 arc_attrs", "arc_attrs :", "arc_attrs : '(' arc_attr ')' arc_attrs", "arc_attr : T_RADIUS coord", @@ -352,8 +357,8 @@ "arc_attr : common_origin", "arc_attr : common_layer", "arc_attr : common_width", -"$$10 :", -"text : T_TEXT $$10 text_attrs", +"$$11 :", +"text : T_TEXT $$11 text_attrs", "text_attrs :", "text_attrs : '(' text_attr ')' text_attrs", "text_attr : T_TEXT T_QSTR", @@ -608,7 +613,7 @@ break; case 19: #line 130 "../../src_plugins/io_bxl/bxl_gram.y" - { ctx->state.invis = yyctx->stack.l_mark[0].un.i; } + { ctx->state.is_visible = yyctx->stack.l_mark[0].un.i; } break; case 20: #line 134 "../../src_plugins/io_bxl/bxl_gram.y" @@ -754,47 +759,59 @@ #line 303 "../../src_plugins/io_bxl/bxl_gram.y" { ctx->state.endp_x = XCRD(yyctx->stack.l_mark[-2].un.c); ctx->state.endp_y = YCRD(yyctx->stack.l_mark[0].un.c); } break; -case 103: -#line 329 "../../src_plugins/io_bxl/bxl_gram.y" - { pcb_bxl_reset(ctx); } +case 96: +#line 311 "../../src_plugins/io_bxl/bxl_gram.y" + { pcb_bxl_reset(ctx); ctx->state.is_text = 0; } break; +case 97: +#line 312 "../../src_plugins/io_bxl/bxl_gram.y" + { pcb_bxl_add_text(ctx); pcb_bxl_reset(ctx); } +break; +case 100: +#line 321 "../../src_plugins/io_bxl/bxl_gram.y" + { pcb_bxl_set_attr_val(ctx, yyctx->stack.l_mark[-1].un.s, yyctx->stack.l_mark[0].un.s); /* $2 and $3 are taken over */ } +break; case 104: #line 330 "../../src_plugins/io_bxl/bxl_gram.y" + { pcb_bxl_reset(ctx); } +break; +case 105: +#line 331 "../../src_plugins/io_bxl/bxl_gram.y" { pcb_bxl_add_arc(ctx); pcb_bxl_reset(ctx); } break; -case 107: -#line 339 "../../src_plugins/io_bxl/bxl_gram.y" - { ctx->state.radius = yyctx->stack.l_mark[0].un.c; } -break; case 108: #line 340 "../../src_plugins/io_bxl/bxl_gram.y" - { ctx->state.arc_start = yyctx->stack.l_mark[0].un.d; } + { ctx->state.radius = yyctx->stack.l_mark[0].un.c; } break; case 109: #line 341 "../../src_plugins/io_bxl/bxl_gram.y" + { ctx->state.arc_start = yyctx->stack.l_mark[0].un.d; } +break; +case 110: +#line 342 "../../src_plugins/io_bxl/bxl_gram.y" { ctx->state.arc_delta = yyctx->stack.l_mark[0].un.d; } break; -case 113: -#line 349 "../../src_plugins/io_bxl/bxl_gram.y" - { pcb_bxl_reset(ctx); } -break; case 114: #line 350 "../../src_plugins/io_bxl/bxl_gram.y" + { pcb_bxl_reset(ctx); ctx->state.is_text = 1; } +break; +case 115: +#line 351 "../../src_plugins/io_bxl/bxl_gram.y" { pcb_bxl_add_text(ctx); pcb_bxl_reset(ctx); } break; -case 117: -#line 359 "../../src_plugins/io_bxl/bxl_gram.y" - { pcb_bxl_set_text_str(ctx, yyctx->stack.l_mark[0].un.s); /* $2 is taken over */ } -break; case 118: #line 360 "../../src_plugins/io_bxl/bxl_gram.y" - { ctx->state.flipped = yyctx->stack.l_mark[0].un.i; } + { pcb_bxl_set_text_str(ctx, yyctx->stack.l_mark[0].un.s); /* $2 is taken over */ } break; case 119: #line 361 "../../src_plugins/io_bxl/bxl_gram.y" + { ctx->state.flipped = yyctx->stack.l_mark[0].un.i; } +break; +case 120: +#line 362 "../../src_plugins/io_bxl/bxl_gram.y" { ctx->state.rot = yyctx->stack.l_mark[0].un.d; } break; -#line 810 "../../src_plugins/io_bxl/bxl_gram.c" +#line 827 "../../src_plugins/io_bxl/bxl_gram.c" } yyctx->stack.s_mark -= yyctx->yym; yyctx->state = *yyctx->stack.s_mark; Index: trunk/src_plugins/io_bxl/bxl_gram.y =================================================================== --- trunk/src_plugins/io_bxl/bxl_gram.y (revision 30628) +++ trunk/src_plugins/io_bxl/bxl_gram.y (revision 30629) @@ -127,7 +127,7 @@ common_attr_text: T_JUSTIFY T_ID { pcb_bxl_set_justify(ctx, $2); free($2); } | T_TEXTSTYLE T_QSTR { pcb_bxl_set_text_style(ctx, $2); free($2); } - | T_ISVISIBLE boolean { ctx->state.invis = $2; } + | T_ISVISIBLE boolean { ctx->state.is_visible = $2; } ; common_origin: @@ -308,7 +308,8 @@ /*** Attribute ***/ attribute: - T_ATTRIBUTE attribute_attrs + T_ATTRIBUTE { pcb_bxl_reset(ctx); ctx->state.is_text = 0; } + attribute_attrs { pcb_bxl_add_text(ctx); pcb_bxl_reset(ctx); } ; attribute_attrs: @@ -317,7 +318,7 @@ ; attribute_attr: - T_ATTR T_QSTR T_QSTR + T_ATTR T_QSTR T_QSTR { pcb_bxl_set_attr_val(ctx, $2, $3); /* $2 and $3 are taken over */ } | common_attr_text | common_origin | common_layer @@ -346,7 +347,7 @@ /*** Text ***/ text: - T_TEXT { pcb_bxl_reset(ctx); } + T_TEXT { pcb_bxl_reset(ctx); ctx->state.is_text = 1; } text_attrs { pcb_bxl_add_text(ctx); pcb_bxl_reset(ctx); } ; Index: trunk/src_plugins/io_bxl/read.c =================================================================== --- trunk/src_plugins/io_bxl/read.c (revision 30628) +++ trunk/src_plugins/io_bxl/read.c (revision 30629) @@ -122,6 +122,8 @@ void pcb_bxl_reset(pcb_bxl_ctx_t *ctx) { SKIP; + free(ctx->state.attr_key); + free(ctx->state.attr_val); memset(&ctx->state, 0, sizeof(ctx->state)); } @@ -186,6 +188,16 @@ free(tmp); } +void pcb_bxl_set_attr_val(pcb_bxl_ctx_t *ctx, char *key, char *val) +{ + free(ctx->state.attr_key); + free(ctx->state.attr_val); + + ctx->state.attr_key = key; + ctx->state.attr_val = val; +} + + void pcb_bxl_padstack_begin(pcb_bxl_ctx_t *ctx, char *name) { htsi_entry_t *e = htsi_getentry(&ctx->proto_name2id, name); @@ -350,25 +362,42 @@ void pcb_bxl_add_text(pcb_bxl_ctx_t *ctx) { + pcb_flag_values_t flg = 0; int scale; pcb_coord_t thickness; SKIP; - if (ctx->state.text_style != NULL) { -TODO("need to figure how text is scaled and justified in bxl"); - scale = ctx->state.text_style->height; - thickness = PCB_MIL_TO_COORD(ctx->state.text_style->width); + if (!ctx->state.is_text && (ctx->state.attr_key != NULL)) { + int is_refdes = (pcb_strcasecmp(ctx->state.attr_key, "refdes") == 0); + + if (is_refdes) { + strcpy(ctx->state.attr_key, "refdes"); + + /* make sure the text object is created properly */ + flg = PCB_FLAG_FLOATER | PCB_FLAG_DYNTEXT; + free(ctx->state.text_str); + ctx->state.text_str = pcb_strdup("%a.parent.refdes%"); + ctx->state.is_visible = 1; + } + pcb_attribute_put(&ctx->subc->Attributes, ctx->state.attr_key, ctx->state.attr_val); } - else { - scale = 100; - thickness = 0; - } + if ((ctx->state.text_str != NULL) && (ctx->state.is_visible)) { + if (ctx->state.text_style != NULL) { +TODO("need to figure how text is scaled and justified in bxl"); + scale = ctx->state.text_style->height; + thickness = PCB_MIL_TO_COORD(ctx->state.text_style->width); + } + else { + scale = 100; + thickness = 0; + } - pcb_text_new(ctx->state.layer, pcb_font(ctx->pcb, 0, 1), - ctx->state.origin_x, ctx->state.origin_y, - ctx->state.rot, scale, thickness, ctx->state.text_str, - pcb_flag_make(PCB_FLAG_CLEARLINE)); + pcb_text_new(ctx->state.layer, pcb_font(ctx->pcb, 0, 1), + ctx->state.origin_x, ctx->state.origin_y, + ctx->state.rot, scale, thickness, ctx->state.text_str, + pcb_flag_make(PCB_FLAG_CLEARLINE | flg)); + } free(ctx->state.text_str); ctx->state.text_str = NULL; }