Index: trunk/src_plugins/io_bxl/bxl.h =================================================================== --- trunk/src_plugins/io_bxl/bxl.h (revision 30613) +++ trunk/src_plugins/io_bxl/bxl.h (revision 30614) @@ -39,7 +39,8 @@ pcb_poly_t *poly; double arc_start, arc_delta; double rot; - int num_shapes, pad_type, shape_type; + int num_shapes, pad_type, shape_type, pin_number; + char *pin_name; pcb_bxl_just_t hjust, vjust; pcb_bxl_test_style_t *text_style; char *text_str; @@ -86,4 +87,7 @@ void pcb_bxl_padstack_begin_shape(pcb_bxl_ctx_t *ctx, const char *name); void pcb_bxl_padstack_end_shape(pcb_bxl_ctx_t *ctx); +void pcb_bxl_pad_begin(pcb_bxl_ctx_t *ctx); +void pcb_bxl_pad_end(pcb_bxl_ctx_t *ctx); +void pcb_bxl_pad_set_style(pcb_bxl_ctx_t *ctx, const char *pstkname); #endif Index: trunk/src_plugins/io_bxl/bxl_gram.c =================================================================== --- trunk/src_plugins/io_bxl/bxl_gram.c (revision 30613) +++ trunk/src_plugins/io_bxl/bxl_gram.c (revision 30614) @@ -20,13 +20,13 @@ 22, 9, 19, 19, 23, 23, 23, 23, 21, 21, 26, 24, 25, 25, 27, 27, 27, 27, 29, 10, 28, 28, 30, 30, 30, 30, 31, 32, 32, 33, - 33, 33, 33, 33, 33, 33, 33, 34, 42, 42, - 43, 43, 43, 43, 43, 43, 43, 45, 35, 44, - 44, 46, 46, 46, 46, 46, 48, 36, 47, 47, - 49, 49, 49, 49, 37, 50, 50, 51, 51, 51, - 51, 53, 39, 52, 52, 54, 54, 54, 54, 54, - 54, 56, 40, 55, 55, 57, 57, 57, 57, 57, - 57, 41, 38, 58, 58, 59, 59, 59, 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, }; static const pcb_bxl_int_t pcb_bxl_len[] = { 2, 2, 0, 3, 1, 1, 1, 1, 1, 1, 1, @@ -35,13 +35,13 @@ 0, 12, 0, 4, 2, 2, 2, 2, 0, 2, 0, 5, 0, 4, 2, 2, 1, 1, 0, 6, 0, 3, 1, 6, 6, 6, 6, 0, 3, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 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, + 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, }; static const pcb_bxl_int_t pcb_bxl_defred[] = { 0, 0, 0, 0, 13, 11, 0, 0, 0, 0, 1, @@ -51,120 +51,120 @@ 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, - 129, 26, 34, 0, 0, 0, 0, 0, 52, 0, - 0, 0, 0, 0, 31, 0, 78, 87, 0, 102, - 112, 0, 0, 0, 0, 60, 61, 62, 63, 64, - 65, 66, 67, 0, 0, 0, 0, 0, 68, 0, - 0, 0, 95, 0, 0, 0, 122, 123, 57, 0, - 54, 55, 56, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 77, 0, 0, 79, 0, 88, 0, - 0, 0, 0, 0, 99, 100, 101, 0, 0, 103, - 0, 113, 0, 0, 128, 0, 59, 41, 32, 40, - 71, 72, 73, 74, 0, 75, 76, 0, 0, 0, - 0, 84, 85, 86, 0, 0, 92, 93, 94, 0, - 18, 21, 0, 17, 19, 0, 0, 0, 0, 109, - 110, 111, 0, 0, 0, 0, 119, 120, 121, 0, - 126, 127, 0, 0, 0, 70, 22, 82, 0, 0, - 0, 0, 98, 97, 106, 107, 108, 0, 118, 116, - 117, 0, 125, 0, 0, 20, 83, 81, 0, 90, - 105, 115, 0, 0, 47, 48, 0, 42, 91, 45, - 46, 0, 44, + 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, + 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, }; static const pcb_bxl_int_t pcb_bxl_dgoto[] = { 2, 56, 57, 60, 3, 10, 11, 4, 12, 13, 14, - 15, 145, 134, 147, 174, 27, 21, 35, 29, 22, - 125, 107, 40, 126, 225, 204, 237, 46, 30, 47, + 15, 138, 139, 140, 167, 27, 21, 35, 29, 22, + 124, 107, 40, 125, 225, 198, 238, 46, 30, 47, 48, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 109, 135, 137, 110, 175, 139, 111, 180, 113, - 148, 150, 114, 193, 152, 115, 200, 117, 156, + 103, 127, 108, 161, 129, 109, 168, 131, 110, 173, + 112, 141, 143, 113, 187, 145, 114, 194, 116, 149, }; -static const pcb_bxl_int_t pcb_bxl_sindex[] = { 13, - 13, 0, -242, 0, 0, -230, -198, -194, -195, 0, - 13, 0, 0, 0, 0, 0, 0, 13, -245, -242, - 29, 31, 0, -233, 0, -212, 0, -231, 13, -207, - -173, -225, -225, -225, 54, -225, -217, -217, -217, 55, - -169, 45, 64, 67, 77, -155, 13, 0, -189, 0, - 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 0, 0, 31, 70, -127, -225, -225, -225, 0, -207, - 0, 0, 0, -125, 13, 90, 92, 93, 0, 13, - -174, -225, -225, -225, 0, 98, 0, 0, 99, 0, - 0, 100, 100, -139, 13, 0, 0, 0, 0, 0, - 0, 0, 0, 103, 105, 106, -121, -199, 0, 110, - 111, -239, 0, 112, 113, -251, 0, 0, 0, -174, - 0, 0, 0, -106, -113, -121, -102, -103, -101, -100, - -225, -95, -225, 0, 117, -227, 0, -147, 0, -96, - -91, -92, -86, -217, 0, 0, 0, 131, -192, 0, - -255, 0, -87, -85, 0, 133, 0, 0, 0, 0, - 0, 0, 0, 0, 132, 0, 0, 98, -225, -83, - 134, 0, 0, 0, 138, -225, 0, 0, 0, 139, - 0, 0, -79, 0, 0, 99, -225, -225, -225, 0, - 0, 0, 141, -225, -77, -217, 0, 0, 0, 143, - 0, 0, 100, 145, -225, 0, 0, 0, -225, 110, - 142, 111, 0, 0, 0, 0, 0, 112, 0, 0, - 0, 113, 0, -161, 13, 0, 0, 0, -225, 0, - 0, 0, -225, -71, 0, 0, 147, 0, 0, 0, - 0, 145, 0, +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_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, -84, + 180, 181, 0, 0, 0, 0, 0, 0, 0, -87, 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, -84, + 0, 0, 181, 0, 0, 0, 0, 0, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -89, 0, 0, 0, 0, 183, 0, 0, 184, 0, - 0, 186, 186, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -70, 0, 0, 187, - 190, 0, 0, 191, 192, 0, 0, 0, 0, -89, - 0, 0, 0, 0, 0, -70, 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, 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, 183, 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, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 186, 193, 0, 0, 0, 0, 0, 187, - 0, 190, 0, 0, 0, 0, 0, 191, 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, 193, 0, + 0, 0, 193, 0, }; static const pcb_bxl_int_t pcb_bxl_gindex[] = { 0, -27, -64, -26, 0, 179, 0, -1, 0, 0, 0, - 0, 53, -52, -122, -123, 150, 0, 0, 144, 0, - 80, 0, 0, 0, -34, 0, 0, 140, 0, 0, - 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 43, 0, 2, 0, 0, 3, 0, 0, 27, - 0, -4, 0, 0, -6, 0, 0, -82, 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, }; #define pcb_bxl_TABLESIZE 321 static const pcb_bxl_int_t pcb_bxl_table[] = { 5, - 10, 76, 77, 78, 52, 53, 54, 140, 12, 20, - 118, 61, 62, 173, 179, 178, 23, 104, 105, 106, - 6, 141, 1, 140, 7, 192, 191, 41, 199, 16, - 50, 51, 50, 51, 131, 8, 194, 141, 131, 36, - 37, 38, 143, 58, 59, 70, 169, 195, 144, 141, - 131, 32, 33, 34, 196, 153, 154, 142, 143, 146, - 19, 17, 131, 155, 144, 18, 165, 24, 26, 9, - 28, 171, 42, 81, 43, 44, 45, 170, 85, 39, - 31, 169, 49, 172, 141, 177, 127, 128, 129, 130, - 131, 132, 133, 120, 55, 63, 190, 131, 198, 64, - 236, 235, 65, 66, 207, 167, 67, 187, 188, 189, - 86, 211, 169, 233, 234, 141, 68, 185, 87, 88, - 223, 89, 215, 69, 90, 71, 169, 74, 91, 141, - 75, 92, 80, 82, 93, 83, 84, 108, 112, 116, - 226, 119, 131, 121, 227, 122, 123, 176, 124, 136, - 138, 149, 151, 158, 159, 161, 162, 168, 163, 164, - 216, 217, 166, 181, 239, 182, 219, 183, 240, 221, - 184, 186, 201, 203, 202, 205, 208, 209, 210, 212, - 213, 218, 220, 222, 224, 229, 241, 242, 2, 25, - 33, 58, 69, 96, 51, 124, 80, 39, 25, 89, - 104, 114, 43, 197, 72, 160, 73, 243, 157, 79, - 206, 228, 214, 231, 230, 232, 0, 0, 0, 0, - 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, + 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, 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, @@ -177,28 +177,28 @@ 12, }; static const pcb_bxl_int_t pcb_bxl_check[] = { 1, - 0, 66, 67, 68, 32, 33, 34, 263, 0, 11, - 93, 38, 39, 136, 138, 138, 18, 82, 83, 84, - 263, 277, 10, 263, 267, 149, 149, 29, 151, 260, - 258, 259, 258, 259, 290, 278, 292, 277, 290, 271, - 272, 273, 298, 261, 262, 47, 274, 303, 304, 277, - 290, 264, 265, 266, 310, 307, 308, 297, 298, 112, - 256, 260, 290, 116, 304, 260, 131, 313, 40, 312, - 40, 136, 280, 75, 282, 283, 284, 305, 80, 311, - 314, 274, 256, 136, 277, 138, 286, 287, 288, 289, - 290, 291, 292, 95, 41, 41, 149, 290, 151, 269, - 224, 224, 58, 40, 169, 133, 40, 300, 301, 302, - 285, 176, 274, 275, 276, 277, 40, 144, 293, 294, - 203, 296, 187, 279, 299, 315, 274, 58, 303, 277, - 258, 306, 258, 44, 309, 44, 44, 40, 40, 40, - 205, 281, 290, 41, 209, 41, 41, 295, 270, 40, - 40, 40, 40, 260, 268, 258, 260, 41, 260, 260, - 188, 189, 258, 260, 229, 257, 194, 260, 233, 196, - 257, 41, 260, 41, 260, 44, 260, 44, 41, 41, + 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, 281, 10, 10, 279, 10, 10, 268, 20, 10, - 10, 10, 10, 151, 55, 126, 63, 242, 120, 70, - 168, 210, 186, 218, 212, 222, -1, -1, -1, -1, + 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -213,7 +213,7 @@ }; #define pcb_bxl_FINAL 2 #define pcb_bxl_MAXTOKEN 315 -#define pcb_bxl_UNDFTOKEN 377 +#define pcb_bxl_UNDFTOKEN 378 #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 +236,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,"illegal-symbol", +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", @@ -307,7 +307,8 @@ "data_chld : arc", "data_chld : text", "data_chld : wizard", -"pad : T_PAD pad_attrs", +"$$6 :", +"pad : T_PAD $$6 pad_attrs", "pad_attrs :", "pad_attrs : '(' pad_attr ')' pad_attrs", "pad_attr : T_NUMBER T_INTEGER", @@ -317,8 +318,8 @@ "pad_attr : T_ORIGINALPINNUMBER T_INTEGER", "pad_attr : T_ROTATE real", "pad_attr : common_origin", -"$$6 :", -"poly : T_POLY $$6 poly_attrs", +"$$7 :", +"poly : T_POLY $$7 poly_attrs", "poly_attrs :", "poly_attrs : '(' poly_attr ')' poly_attrs", "poly_attr : T_PROPERTY T_QSTR", @@ -326,8 +327,8 @@ "poly_attr : common_origin", "poly_attr : common_layer", "poly_attr : common_width", -"$$7 :", -"line : T_LINE $$7 line_attrs", +"$$8 :", +"line : T_LINE $$8 line_attrs", "line_attrs :", "line_attrs : '(' line_attr ')' line_attrs", "line_attr : T_ENDPOINT coord ',' coord", @@ -341,8 +342,8 @@ "attribute_attr : common_attr_text", "attribute_attr : common_origin", "attribute_attr : common_layer", -"$$8 :", -"arc : T_ARC $$8 arc_attrs", +"$$9 :", +"arc : T_ARC $$9 arc_attrs", "arc_attrs :", "arc_attrs : '(' arc_attr ')' arc_attrs", "arc_attr : T_RADIUS coord", @@ -351,8 +352,8 @@ "arc_attr : common_origin", "arc_attr : common_layer", "arc_attr : common_width", -"$$9 :", -"text : T_TEXT $$9 text_attrs", +"$$10 :", +"text : T_TEXT $$10 text_attrs", "text_attrs :", "text_attrs : '(' text_attr ')' text_attrs", "text_attr : T_TEXT T_QSTR", @@ -693,75 +694,107 @@ #line 209 "../../src_plugins/io_bxl/bxl_gram.y" { pcb_bxl_pattern_end(ctx); } break; -case 78: -#line 269 "../../src_plugins/io_bxl/bxl_gram.y" - { pcb_bxl_poly_begin(ctx); } +case 68: +#line 249 "../../src_plugins/io_bxl/bxl_gram.y" + { pcb_bxl_pad_begin(ctx); } break; +case 69: +#line 250 "../../src_plugins/io_bxl/bxl_gram.y" + { pcb_bxl_pad_end(ctx); } +break; +case 72: +#line 259 "../../src_plugins/io_bxl/bxl_gram.y" + { ctx->state.pin_number = yyctx->stack.l_mark[0].un.i; } +break; +case 73: +#line 260 "../../src_plugins/io_bxl/bxl_gram.y" + { ctx->state.pin_name = yyctx->stack.l_mark[0].un.s; /* takes over $2 */ } +break; +case 74: +#line 261 "../../src_plugins/io_bxl/bxl_gram.y" + { pcb_bxl_pad_set_style(ctx, yyctx->stack.l_mark[0].un.s); free(yyctx->stack.l_mark[0].un.s); } +break; +case 75: +#line 262 "../../src_plugins/io_bxl/bxl_gram.y" + { /* what's this?! */ free(yyctx->stack.l_mark[0].un.s); } +break; +case 76: +#line 263 "../../src_plugins/io_bxl/bxl_gram.y" + { /* what's this?! */ } +break; +case 77: +#line 264 "../../src_plugins/io_bxl/bxl_gram.y" + { ctx->state.rot = yyctx->stack.l_mark[0].un.d; } +break; case 79: #line 270 "../../src_plugins/io_bxl/bxl_gram.y" + { pcb_bxl_poly_begin(ctx); } +break; +case 80: +#line 271 "../../src_plugins/io_bxl/bxl_gram.y" { pcb_bxl_poly_end(ctx); } break; -case 82: -#line 280 "../../src_plugins/io_bxl/bxl_gram.y" +case 83: +#line 281 "../../src_plugins/io_bxl/bxl_gram.y" { pcb_bxl_add_property(ctx, (pcb_any_obj_t *)ctx->state.poly, yyctx->stack.l_mark[0].un.s); free(yyctx->stack.l_mark[0].un.s); } break; -case 83: -#line 281 "../../src_plugins/io_bxl/bxl_gram.y" +case 84: +#line 282 "../../src_plugins/io_bxl/bxl_gram.y" { pcb_bxl_poly_add_vertex(ctx, yyctx->stack.l_mark[-2].un.c, yyctx->stack.l_mark[0].un.c); } break; -case 87: -#line 289 "../../src_plugins/io_bxl/bxl_gram.y" +case 88: +#line 290 "../../src_plugins/io_bxl/bxl_gram.y" { pcb_bxl_reset(ctx); } break; -case 88: -#line 290 "../../src_plugins/io_bxl/bxl_gram.y" +case 89: +#line 291 "../../src_plugins/io_bxl/bxl_gram.y" { pcb_bxl_add_line(ctx); pcb_bxl_reset(ctx); } break; -case 91: -#line 299 "../../src_plugins/io_bxl/bxl_gram.y" +case 92: +#line 300 "../../src_plugins/io_bxl/bxl_gram.y" { ctx->state.endp_x = yyctx->stack.l_mark[-2].un.c; ctx->state.endp_y = yyctx->stack.l_mark[0].un.c; } break; -case 102: -#line 325 "../../src_plugins/io_bxl/bxl_gram.y" +case 103: +#line 326 "../../src_plugins/io_bxl/bxl_gram.y" { pcb_bxl_reset(ctx); } break; -case 103: -#line 326 "../../src_plugins/io_bxl/bxl_gram.y" +case 104: +#line 327 "../../src_plugins/io_bxl/bxl_gram.y" { pcb_bxl_add_arc(ctx); pcb_bxl_reset(ctx); } break; -case 106: -#line 335 "../../src_plugins/io_bxl/bxl_gram.y" - { ctx->state.radius = yyctx->stack.l_mark[0].un.c; } -break; case 107: #line 336 "../../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 108: #line 337 "../../src_plugins/io_bxl/bxl_gram.y" + { ctx->state.arc_start = yyctx->stack.l_mark[0].un.d; } +break; +case 109: +#line 338 "../../src_plugins/io_bxl/bxl_gram.y" { ctx->state.arc_delta = yyctx->stack.l_mark[0].un.d; } break; -case 112: -#line 345 "../../src_plugins/io_bxl/bxl_gram.y" +case 113: +#line 346 "../../src_plugins/io_bxl/bxl_gram.y" { pcb_bxl_reset(ctx); } break; -case 113: -#line 346 "../../src_plugins/io_bxl/bxl_gram.y" +case 114: +#line 347 "../../src_plugins/io_bxl/bxl_gram.y" { pcb_bxl_add_text(ctx); pcb_bxl_reset(ctx); } break; -case 116: -#line 355 "../../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 117: #line 356 "../../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 118: #line 357 "../../src_plugins/io_bxl/bxl_gram.y" + { ctx->state.flipped = yyctx->stack.l_mark[0].un.i; } +break; +case 119: +#line 358 "../../src_plugins/io_bxl/bxl_gram.y" { ctx->state.rot = yyctx->stack.l_mark[0].un.d; } break; -#line 777 "../../src_plugins/io_bxl/bxl_gram.c" +#line 810 "../../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 30613) +++ trunk/src_plugins/io_bxl/bxl_gram.y (revision 30614) @@ -246,7 +246,8 @@ /*** Pad ***/ pad: - T_PAD pad_attrs + T_PAD { pcb_bxl_pad_begin(ctx); } + pad_attrs { pcb_bxl_pad_end(ctx); } ; pad_attrs: @@ -255,12 +256,12 @@ ; pad_attr: - T_NUMBER T_INTEGER - | T_PINNAME T_QSTR - | T_PADSTYLE T_QSTR - | T_ORIGINALPADSTYLE T_QSTR - | T_ORIGINALPINNUMBER T_INTEGER - | T_ROTATE real + T_NUMBER T_INTEGER { ctx->state.pin_number = $2; } + | T_PINNAME T_QSTR { ctx->state.pin_name = $2; /* takes over $2 */ } + | T_PADSTYLE T_QSTR { pcb_bxl_pad_set_style(ctx, $2); free($2); } + | T_ORIGINALPADSTYLE T_QSTR { /* what's this?! */ free($2); } + | T_ORIGINALPINNUMBER T_INTEGER { /* what's this?! */ } + | T_ROTATE real { ctx->state.rot = $2; } | common_origin ; Index: trunk/src_plugins/io_bxl/read.c =================================================================== --- trunk/src_plugins/io_bxl/read.c (revision 30613) +++ trunk/src_plugins/io_bxl/read.c (revision 30614) @@ -200,8 +200,7 @@ pcb_cardinal_t i = pcb_pstk_proto_insert_forcedup(ctx->subc->data, &ctx->state.proto, 0, 0); if (ctx->proto_id-1 != i) pcb_message(PCB_MSG_WARNING, "bxl footprint error: failed to insert padstack '%s'\n", ctx->state.proto.name); - free(ctx->state.proto.name); - ctx->state.proto.name = NULL; + ctx->state.proto.name = NULL; /* do not free it as it is the hash key */ } void pcb_bxl_padstack_begin_shape(pcb_bxl_ctx_t *ctx, const char *name) @@ -249,7 +248,40 @@ } +void pcb_bxl_pad_begin(pcb_bxl_ctx_t *ctx) +{ + SKIP; +} +void pcb_bxl_pad_end(pcb_bxl_ctx_t *ctx) +{ + SKIP; + + free(ctx->state.pin_name); + ctx->state.pin_name = NULL; +} + +void pcb_bxl_pad_set_style(pcb_bxl_ctx_t *ctx, const char *pstkname) +{ + htsi_entry_t *e; + int xmirror = 0, smirror = 0; + + SKIP; + + e = htsi_getentry(&ctx->proto_name2id, pstkname); + if (e == NULL) { + pcb_message(PCB_MSG_WARNING, "bxl footprint error: invalid padstack reference '%s' - pad will not be created\n", pstkname); + return; + } + + pcb_pstk_new_tr(ctx->subc->data, -1, e->value, + ctx->state.origin_x, ctx->state.origin_y, + PCB_MM_TO_COORD(0.2), pcb_flag_make(PCB_FLAG_CLEARLINE), + ctx->state.rot, xmirror, smirror); +} + + + void pcb_bxl_add_line(pcb_bxl_ctx_t *ctx) { pcb_coord_t width; @@ -474,6 +506,8 @@ } htsp_uninit(&bctx->text_name2style); + for(e = htsp_first(&bctx->proto_name2id); e != NULL; e = htsp_next(&bctx->proto_name2id, e)) + free(e->key); htsi_uninit(&bctx->proto_name2id); }