tioga 1.8 → 1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Tioga_README +46 -11
- data/split/Dtable/dtable.c +2 -2
- data/split/Dtable/dvector.h +8 -0
- data/split/Dtable/namespace.h +16 -8
- data/split/Dtable/symbols.h +1 -1
- data/split/Dvector/dvector.c +77 -2
- data/split/Dvector/dvector_intern.h +2 -0
- data/split/Dvector/include/dvector.h +8 -0
- data/split/Dvector/lib/Dvector_extras.rb +12 -0
- data/split/Dvector/namespace.h +16 -8
- data/split/Dvector/symbols.h +1 -1
- data/split/Flate/namespace.h +16 -8
- data/split/Flate/symbols.h +1 -1
- data/split/Function/dvector.h +8 -0
- data/split/Function/function.c +2 -1
- data/split/Function/namespace.h +16 -8
- data/split/Function/symbols.h +1 -1
- data/split/Tioga/axes.c +217 -75
- data/split/Tioga/dvector.h +8 -0
- data/split/Tioga/figures.c +19 -2
- data/split/Tioga/figures.h +7 -6
- data/split/Tioga/generic.c +14 -1
- data/split/Tioga/generic.h +13 -0
- data/split/Tioga/init.c +5 -9
- data/split/Tioga/lib/Colormaps.rb +33 -2
- data/split/Tioga/lib/Doc.rb +30 -0
- data/split/Tioga/lib/Executive.rb +4 -2
- data/split/Tioga/lib/FigMkr.rb +219 -53
- data/split/Tioga/lib/Figures_and_Plots.rb +7 -0
- data/split/Tioga/lib/Images.rb +10 -2
- data/split/Tioga/lib/Legends.rb +7 -3
- data/split/Tioga/lib/Markers.rb +7 -0
- data/split/Tioga/lib/TexPreamble.rb +56 -56
- data/split/Tioga/lib/Utils.rb +7 -0
- data/split/Tioga/lib/maker.rb +1 -0
- data/split/Tioga/lib/tioga_ui_cmds.rb +6 -5
- data/split/Tioga/namespace.h +16 -8
- data/split/Tioga/pdfcolor.c +63 -7
- data/split/Tioga/pdfcoords.c +0 -16
- data/split/Tioga/pdfimage.c +16 -2
- data/split/Tioga/pdfs.h +1 -0
- data/split/Tioga/pdftext.c +223 -82
- data/split/Tioga/symbols.h +1 -1
- data/split/Tioga/texout.c +1 -1
- data/split/Tioga/wrappers.c +21 -10
- data/split/Tioga/wrappers.h +5 -0
- data/split/extconf.rb +27 -15
- data/split/namespace.h +16 -8
- data/split/scripts/tioga +0 -0
- data/split/symbols.h +1 -1
- data/tests/Icon_Test.pdf +0 -0
- data/tests/tc_Dvector.rb +24 -0
- metadata +38 -37
data/split/Tioga/pdfcoords.c
CHANGED
|
@@ -44,22 +44,6 @@ c_set_subframe(OBJ_PTR fmkr, FM *p,
|
|
|
44
44
|
double bottom_margin, int *ierr)
|
|
45
45
|
{
|
|
46
46
|
double x, y, w, h;
|
|
47
|
-
if (left_margin < 0 || right_margin < 0 || top_margin < 0
|
|
48
|
-
|| bottom_margin < 0) {
|
|
49
|
-
RAISE_ERROR("Sorry: margins for set_subframe must be non-negative",
|
|
50
|
-
ierr);
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
if (left_margin + right_margin >= 1.0) {
|
|
54
|
-
RAISE_ERROR_gg("Sorry: margins too large: left_margin (%g) "
|
|
55
|
-
"right_margin (%g)", left_margin, right_margin, ierr);
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
if (top_margin + bottom_margin >= 1.0) {
|
|
59
|
-
RAISE_ERROR_gg("Sorry: margins too large: top_margin (%g) "
|
|
60
|
-
"bottom_margin (%g)", top_margin, bottom_margin, ierr);
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
47
|
x = p->frame_left += left_margin * p->frame_width;
|
|
64
48
|
p->frame_right -= right_margin * p->frame_width;
|
|
65
49
|
p->frame_top -= top_margin * p->frame_height;
|
data/split/Tioga/pdfimage.c
CHANGED
|
@@ -157,7 +157,9 @@ Write_JPG(JPG_Info *xo, int *ierr)
|
|
|
157
157
|
xo->mask_obj_num, ierr);
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
|
|
160
|
+
extern void
|
|
161
|
+
str_hls_to_rgb_bang(unsigned char* str, long len);
|
|
162
|
+
|
|
161
163
|
void
|
|
162
164
|
Write_Sampled(Sampled_Info *xo, int *ierr)
|
|
163
165
|
{
|
|
@@ -168,9 +170,11 @@ Write_Sampled(Sampled_Info *xo, int *ierr)
|
|
|
168
170
|
fprintf(OF, "\t/Width %i\n", xo->width);
|
|
169
171
|
int i, len;
|
|
170
172
|
unsigned long new_len;
|
|
173
|
+
unsigned char *image_data;
|
|
171
174
|
unsigned char *buffer;
|
|
172
175
|
switch (xo->image_type) {
|
|
173
176
|
case RGB_IMAGE:
|
|
177
|
+
case HLS_IMAGE:
|
|
174
178
|
fprintf(OF, "\t/ColorSpace /DeviceRGB\n");
|
|
175
179
|
fprintf(OF, "\t/BitsPerComponent 8\n");
|
|
176
180
|
break;
|
|
@@ -214,9 +218,18 @@ Write_Sampled(Sampled_Info *xo, int *ierr)
|
|
|
214
218
|
&& xo->value_mask_min <= 255 && xo->value_mask_max <= 255
|
|
215
219
|
&& xo->value_mask_min <= xo->value_mask_max)
|
|
216
220
|
fprintf(OF, "\t/Mask [%i %i]\n", xo->value_mask_min, xo->value_mask_max);
|
|
221
|
+
|
|
222
|
+
if (xo->image_type == HLS_IMAGE) {
|
|
223
|
+
image_data = ALLOC_N_unsigned_char(xo->length);
|
|
224
|
+
memcpy(image_data, xo->image_data, xo->length);
|
|
225
|
+
str_hls_to_rgb_bang(image_data, xo->length);
|
|
226
|
+
} else {
|
|
227
|
+
image_data = xo->image_data;
|
|
228
|
+
}
|
|
229
|
+
|
|
217
230
|
new_len = (xo->length * 11)/10 + 100;
|
|
218
231
|
buffer = ALLOC_N_unsigned_char(new_len);
|
|
219
|
-
if (do_flate_compress(buffer, &new_len,
|
|
232
|
+
if (do_flate_compress(buffer, &new_len, image_data, xo->length)
|
|
220
233
|
!= FLATE_OK) {
|
|
221
234
|
free(buffer);
|
|
222
235
|
RAISE_ERROR("Error compressing image data", ierr);
|
|
@@ -229,6 +242,7 @@ Write_Sampled(Sampled_Info *xo, int *ierr)
|
|
|
229
242
|
return;
|
|
230
243
|
}
|
|
231
244
|
free(buffer);
|
|
245
|
+
if (xo->image_type == HLS_IMAGE) free(image_data);
|
|
232
246
|
fprintf(OF, "\nendstream\nendobj\n");
|
|
233
247
|
}
|
|
234
248
|
|
data/split/Tioga/pdfs.h
CHANGED
data/split/Tioga/pdftext.c
CHANGED
|
@@ -458,84 +458,74 @@ c_rotated_string_at_points(OBJ_PTR fmkr, FM *p, double rotation,
|
|
|
458
458
|
}
|
|
459
459
|
|
|
460
460
|
|
|
461
|
+
static OBJ_PTR get1_obj(bool is_list, OBJ_PTR obj, int indx, int* ierr) {
|
|
462
|
+
if (is_list) {
|
|
463
|
+
int len;
|
|
464
|
+
len = Array_Len(obj, ierr); if (*ierr != 0) return 0.0;
|
|
465
|
+
obj = Array_Entry(obj, indx % len, ierr); if (*ierr != 0) return 0.0;
|
|
466
|
+
}
|
|
467
|
+
return obj;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
static double get1_dbl(bool is_list, OBJ_PTR obj, int indx, int* ierr) {
|
|
472
|
+
if (is_list) {
|
|
473
|
+
int len = Array_Len(obj, ierr); if (*ierr != 0) return 0.0;
|
|
474
|
+
return Array_Entry_double(obj, indx % len, ierr); if (*ierr != 0) return 0.0;
|
|
475
|
+
}
|
|
476
|
+
return Number_to_double(obj, ierr);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
static int get1_int(bool is_list, OBJ_PTR obj, int indx, int* ierr) {
|
|
481
|
+
if (is_list) {
|
|
482
|
+
int len = Array_Len(obj, ierr); if (*ierr != 0) return 0.0;
|
|
483
|
+
return Array_Entry_int(obj, indx % len, ierr); if (*ierr != 0) return 0.0;
|
|
484
|
+
}
|
|
485
|
+
return Number_to_int(obj, ierr);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
|
|
461
489
|
void
|
|
462
|
-
c_private_show_marker(OBJ_PTR fmkr, FM *p, int
|
|
463
|
-
OBJ_PTR stroke_width, OBJ_PTR string,
|
|
464
|
-
OBJ_PTR x, OBJ_PTR y, OBJ_PTR x_vec, OBJ_PTR y_vec,
|
|
465
|
-
double h_scale, double v_scale, double scale,
|
|
466
|
-
double it_angle, double ascent_angle, double angle,
|
|
467
|
-
OBJ_PTR fill_color, OBJ_PTR stroke_color, int *ierr)
|
|
490
|
+
c_private_show_marker(OBJ_PTR fmkr, FM *p, OBJ_PTR args, int *ierr)
|
|
468
491
|
{
|
|
469
|
-
|
|
492
|
+
OBJ_PTR marker_obj, font_obj, mode_obj, align_obj, just_obj, stroke_width_obj, string, x, y, x_vec, y_vec,
|
|
493
|
+
h_scale_obj, v_scale_obj, scale_obj, it_angle_obj, ascent_angle_obj, angle_obj,
|
|
494
|
+
fill_color_obj, stroke_color_obj;
|
|
495
|
+
int c, alignment, justification, fnt_num, n, num_times, num_per_call, i, mode, len;
|
|
496
|
+
double h_scale, v_scale, scale, it_angle, ascent_angle, angle;
|
|
470
497
|
unsigned char *text = NULL, buff[2];
|
|
471
498
|
double *xs, *ys, xloc, yloc, prev_line_width = -1;
|
|
472
|
-
bool restore_fill_color = false, restore_stroke_color = false;
|
|
473
499
|
double stroke_color_R = 0.0, stroke_color_G = 0.0, stroke_color_B = 0.0;
|
|
474
|
-
double prev_stroke_color_R = 0.0, prev_stroke_color_G = 0.0,
|
|
475
|
-
prev_stroke_color_B = 0.0;
|
|
476
500
|
double fill_color_R = 0.0, fill_color_G = 0.0, fill_color_B = 0.0;
|
|
477
|
-
double
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|| mode == STROKE_AND_CLIP || mode == FILL_STROKE_AND_CLIP)) {
|
|
506
|
-
Unpack_RGB(stroke_color, &stroke_color_R, &stroke_color_G,
|
|
507
|
-
&stroke_color_B, ierr);
|
|
508
|
-
if (*ierr != 0) return;
|
|
509
|
-
if (stroke_color_R != p->stroke_color_R
|
|
510
|
-
|| stroke_color_G != p->stroke_color_G
|
|
511
|
-
|| stroke_color_B != p->stroke_color_B) {
|
|
512
|
-
prev_stroke_color_R = p->stroke_color_R;
|
|
513
|
-
prev_stroke_color_G = p->stroke_color_G;
|
|
514
|
-
prev_stroke_color_B = p->stroke_color_B;
|
|
515
|
-
restore_stroke_color = true;
|
|
516
|
-
c_stroke_color_set_RGB(fmkr, p, stroke_color_R, stroke_color_G,
|
|
517
|
-
stroke_color_B, ierr);
|
|
518
|
-
if (*ierr != 0) return;
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
if (fill_color != OBJ_NIL &&
|
|
522
|
-
(mode == FILL || mode == FILL_AND_STROKE
|
|
523
|
-
|| mode == FILL_AND_CLIP || mode == FILL_STROKE_AND_CLIP)) {
|
|
524
|
-
Unpack_RGB(fill_color, &fill_color_R, &fill_color_G, &fill_color_B,
|
|
525
|
-
ierr);
|
|
526
|
-
if (*ierr != 0) return;
|
|
527
|
-
if (fill_color_R != p->fill_color_R
|
|
528
|
-
|| fill_color_G != p->fill_color_G
|
|
529
|
-
|| fill_color_B != p->fill_color_B) {
|
|
530
|
-
prev_fill_color_R = p->fill_color_R;
|
|
531
|
-
prev_fill_color_G = p->fill_color_G;
|
|
532
|
-
prev_fill_color_B = p->fill_color_B;
|
|
533
|
-
restore_fill_color = true;
|
|
534
|
-
c_fill_color_set_RGB(fmkr, p, fill_color_R, fill_color_G,
|
|
535
|
-
fill_color_B, ierr);
|
|
536
|
-
if (*ierr != 0) return;
|
|
537
|
-
}
|
|
538
|
-
}
|
|
501
|
+
double prev_stroke_color_R, prev_stroke_color_G, prev_stroke_color_B;
|
|
502
|
+
double prev_fill_color_R, prev_fill_color_G, prev_fill_color_B;
|
|
503
|
+
OBJ_PTR fill_color, stroke_color, marker;
|
|
504
|
+
bool do_lists, fill_color_is_list, stroke_color_is_list, stroke_width_is_list, h_scale_is_list;
|
|
505
|
+
bool it_angle_is_list, ascent_angle_is_list, angle_is_list, v_scale_is_list, scale_is_list;
|
|
506
|
+
bool align_is_list, just_is_list, marker_is_list, mode_is_list, font_is_list;
|
|
507
|
+
|
|
508
|
+
i = 0;
|
|
509
|
+
marker_obj = Array_Entry(args, i, ierr); i++;
|
|
510
|
+
font_obj = Array_Entry(args, i, ierr); i++;
|
|
511
|
+
mode_obj = Array_Entry(args, i, ierr); i++;
|
|
512
|
+
align_obj = Array_Entry(args, i, ierr); i++;
|
|
513
|
+
just_obj = Array_Entry(args, i, ierr); i++;
|
|
514
|
+
stroke_width_obj = Array_Entry(args, i, ierr); i++;
|
|
515
|
+
string = Array_Entry(args, i, ierr); i++;
|
|
516
|
+
x = Array_Entry(args, i, ierr); i++;
|
|
517
|
+
y = Array_Entry(args, i, ierr); i++;
|
|
518
|
+
x_vec = Array_Entry(args, i, ierr); i++;
|
|
519
|
+
y_vec = Array_Entry(args, i, ierr); i++;
|
|
520
|
+
h_scale_obj = Array_Entry(args, i, ierr); i++;
|
|
521
|
+
v_scale_obj = Array_Entry(args, i, ierr); i++;
|
|
522
|
+
scale_obj = Array_Entry(args, i, ierr); i++;
|
|
523
|
+
it_angle_obj = Array_Entry(args, i, ierr); i++;
|
|
524
|
+
ascent_angle_obj = Array_Entry(args, i, ierr); i++;
|
|
525
|
+
angle_obj = Array_Entry(args, i, ierr); i++;
|
|
526
|
+
fill_color_obj = Array_Entry(args, i, ierr); i++;
|
|
527
|
+
stroke_color_obj = Array_Entry(args, i, ierr); i++;
|
|
528
|
+
|
|
539
529
|
if (x == OBJ_NIL) {
|
|
540
530
|
long xlen, ylen;
|
|
541
531
|
xs = Vector_Data_for_Read(x_vec, &xlen, ierr);
|
|
@@ -556,14 +546,165 @@ c_private_show_marker(OBJ_PTR fmkr, FM *p, int int_args,
|
|
|
556
546
|
if (*ierr != 0) return;
|
|
557
547
|
n = 1;
|
|
558
548
|
}
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
549
|
+
|
|
550
|
+
prev_stroke_color_R = p->stroke_color_R;
|
|
551
|
+
prev_stroke_color_G = p->stroke_color_G;
|
|
552
|
+
prev_stroke_color_B = p->stroke_color_B;
|
|
553
|
+
prev_fill_color_R = p->fill_color_R;
|
|
554
|
+
prev_fill_color_G = p->fill_color_G;
|
|
555
|
+
prev_fill_color_B = p->fill_color_B;
|
|
556
|
+
prev_line_width = p->line_width;
|
|
557
|
+
|
|
558
|
+
if (marker_obj == OBJ_NIL) {
|
|
559
|
+
marker_is_list = false;
|
|
560
|
+
} else {
|
|
561
|
+
marker = Array_Entry(marker_obj, 0, ierr); if (*ierr != 0) return;
|
|
562
|
+
marker_is_list = !Is_Kind_of_Number(marker);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
fill_color = Array_Entry(fill_color_obj, 0, ierr); if (*ierr != 0) return;
|
|
566
|
+
stroke_color = Array_Entry(stroke_color_obj, 0, ierr); if (*ierr != 0) return;
|
|
567
|
+
fill_color_is_list = !Is_Kind_of_Number(fill_color);
|
|
568
|
+
stroke_color_is_list = !Is_Kind_of_Number(stroke_color);
|
|
569
|
+
|
|
570
|
+
font_is_list = (font_obj != OBJ_NIL) && (!Is_Kind_of_Integer(font_obj));
|
|
571
|
+
align_is_list = !Is_Kind_of_Integer(align_obj);
|
|
572
|
+
just_is_list = !Is_Kind_of_Integer(just_obj);
|
|
573
|
+
mode_is_list = (mode_obj != OBJ_NIL) && (!Is_Kind_of_Number(mode_obj));
|
|
574
|
+
stroke_width_is_list = stroke_width_obj != OBJ_NIL && !Is_Kind_of_Number(stroke_width_obj);
|
|
575
|
+
h_scale_is_list = !Is_Kind_of_Number(h_scale_obj);
|
|
576
|
+
v_scale_is_list = !Is_Kind_of_Number(v_scale_obj);
|
|
577
|
+
scale_is_list = !Is_Kind_of_Number(scale_obj);
|
|
578
|
+
it_angle_is_list = !Is_Kind_of_Number(it_angle_obj);
|
|
579
|
+
ascent_angle_is_list = !Is_Kind_of_Number(ascent_angle_obj);
|
|
580
|
+
angle_is_list = !Is_Kind_of_Number(angle_obj);
|
|
581
|
+
|
|
582
|
+
do_lists = fill_color_is_list || stroke_color_is_list || h_scale_is_list || v_scale_is_list || scale_is_list ||
|
|
583
|
+
align_is_list || just_is_list || it_angle_is_list || ascent_angle_is_list || angle_is_list;
|
|
584
|
+
|
|
585
|
+
if (do_lists) {
|
|
586
|
+
num_times = n; num_per_call = 1;
|
|
587
|
+
} else {
|
|
588
|
+
num_times = 1; num_per_call = n;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
for (i=0; i<num_times; i++) {
|
|
592
|
+
alignment = get1_int(align_is_list, align_obj, i, ierr); if (*ierr != 0) return;
|
|
593
|
+
justification = 1+get1_int(just_is_list, just_obj, i, ierr); if (*ierr != 0) return;
|
|
594
|
+
h_scale = get1_dbl(h_scale_is_list, h_scale_obj, i, ierr); if (*ierr != 0) return;
|
|
595
|
+
v_scale = get1_dbl(v_scale_is_list, v_scale_obj, i, ierr); if (*ierr != 0) return;
|
|
596
|
+
scale = get1_dbl(scale_is_list, scale_obj, i, ierr); if (*ierr != 0) return;
|
|
597
|
+
it_angle = get1_dbl(it_angle_is_list, it_angle_obj, i, ierr); if (*ierr != 0) return;
|
|
598
|
+
ascent_angle = get1_dbl(ascent_angle_is_list, ascent_angle_obj, i, ierr); if (*ierr != 0) return;
|
|
599
|
+
angle = get1_dbl(angle_is_list, angle_obj, i, ierr); if (*ierr != 0) return;
|
|
600
|
+
fill_color = get1_obj(fill_color_is_list, fill_color_obj, i, ierr); if (*ierr != 0) return;
|
|
601
|
+
stroke_color = get1_obj(stroke_color_is_list, stroke_color_obj, i, ierr); if (*ierr != 0) return;
|
|
602
|
+
|
|
603
|
+
if (mode_obj != OBJ_NIL) {
|
|
604
|
+
mode = get1_int(mode_is_list, mode_obj, i, ierr); if (*ierr != 0) return;
|
|
605
|
+
} else {
|
|
606
|
+
mode = FILL;
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
if (font_obj != OBJ_NIL) {
|
|
610
|
+
fnt_num = get1_int(font_is_list, font_obj, i, ierr); if (*ierr != 0) return;
|
|
611
|
+
} else {
|
|
612
|
+
fnt_num = 1; // Times_Roman = 1
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
if (marker_obj == OBJ_NIL) {
|
|
616
|
+
text = (unsigned char *)(String_Ptr(string, ierr));
|
|
617
|
+
if (*ierr != 0) return;
|
|
618
|
+
} else {
|
|
619
|
+
marker = get1_obj(marker_is_list, marker_obj, i, ierr); if (*ierr != 0) return;
|
|
620
|
+
font_obj = Array_Entry(marker, 0, ierr); if (*ierr != 0) return;
|
|
621
|
+
fnt_num = Number_to_int(font_obj, ierr); if (*ierr != 0) return;
|
|
622
|
+
|
|
623
|
+
OBJ_PTR glyph_obj = Array_Entry(marker, 1, ierr); if (*ierr != 0) return;
|
|
624
|
+
c = Number_to_int(glyph_obj, ierr); if (*ierr != 0) return;
|
|
625
|
+
|
|
626
|
+
if (mode_obj == OBJ_NIL) {
|
|
627
|
+
len = Array_Len(marker, ierr); if (*ierr != 0) return;
|
|
628
|
+
if (len == 3) {
|
|
629
|
+
mode = STROKE;
|
|
630
|
+
if (stroke_width_obj == OBJ_NIL) {
|
|
631
|
+
OBJ_PTR s = Array_Entry(marker, 2, ierr); if (*ierr != 0) return;
|
|
632
|
+
double width = Number_to_double(s,ierr); if (*ierr != 0) return;
|
|
633
|
+
if (*ierr != 0) return;
|
|
634
|
+
fprintf(TF, "%0.6f w\n", width * ENLARGE);
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
font_obj = Array_Entry(marker, 0, ierr);
|
|
640
|
+
if (*ierr != 0) return;
|
|
641
|
+
fnt_num = Number_to_int(font_obj, ierr); if (*ierr != 0) return;
|
|
642
|
+
|
|
643
|
+
if (c < 0 || c > 255) {
|
|
644
|
+
RAISE_ERROR_i("Sorry: invalid character code (%i) : "
|
|
645
|
+
"must be between 0 and 255", c, ierr);
|
|
646
|
+
return;
|
|
647
|
+
}
|
|
648
|
+
text = buff; text[0] = c; text[1] = '\0';
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
if (stroke_width_obj != OBJ_NIL) {
|
|
652
|
+
double width = get1_dbl(stroke_width_is_list, stroke_width_obj, i, ierr); if (*ierr != 0) return;
|
|
653
|
+
if (*ierr != 0) return;
|
|
654
|
+
fprintf(TF, "%0.6f w\n", width * ENLARGE);
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
if (mode_obj != OBJ_NIL) {
|
|
658
|
+
mode = get1_int(mode_is_list, mode_obj, i, ierr); if (*ierr != 0) return;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
fprintf(TF, "%d Tr\n", mode);
|
|
662
|
+
|
|
663
|
+
if (stroke_color != OBJ_NIL &&
|
|
664
|
+
(mode == STROKE || mode == FILL_AND_STROKE
|
|
665
|
+
|| mode == STROKE_AND_CLIP || mode == FILL_STROKE_AND_CLIP)) {
|
|
666
|
+
Unpack_RGB(stroke_color, &stroke_color_R, &stroke_color_G,
|
|
667
|
+
&stroke_color_B, ierr);
|
|
668
|
+
if (*ierr != 0) return;
|
|
669
|
+
if (stroke_color_R != p->stroke_color_R
|
|
670
|
+
|| stroke_color_G != p->stroke_color_G
|
|
671
|
+
|| stroke_color_B != p->stroke_color_B) {
|
|
672
|
+
c_stroke_color_set_RGB(fmkr, p, stroke_color_R, stroke_color_G,
|
|
673
|
+
stroke_color_B, ierr);
|
|
674
|
+
if (*ierr != 0) return;
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
if (fill_color != OBJ_NIL &&
|
|
679
|
+
(mode == FILL || mode == FILL_AND_STROKE
|
|
680
|
+
|| mode == FILL_AND_CLIP || mode == FILL_STROKE_AND_CLIP)) {
|
|
681
|
+
Unpack_RGB(fill_color, &fill_color_R, &fill_color_G, &fill_color_B,
|
|
682
|
+
ierr);
|
|
683
|
+
if (*ierr != 0) return;
|
|
684
|
+
if (fill_color_R != p->fill_color_R
|
|
685
|
+
|| fill_color_G != p->fill_color_G
|
|
686
|
+
|| fill_color_B != p->fill_color_B) {
|
|
687
|
+
c_fill_color_set_RGB(fmkr, p, fill_color_R, fill_color_G,
|
|
688
|
+
fill_color_B, ierr);
|
|
689
|
+
if (*ierr != 0) return;
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
c_rotated_string_at_points(fmkr, p, angle, fnt_num, text, scale, num_per_call, xs+i, ys+i,
|
|
694
|
+
alignment, justification, h_scale, v_scale, it_angle, ascent_angle, ierr);
|
|
695
|
+
|
|
696
|
+
if (prev_line_width != p->line_width) c_line_width_set(fmkr, p, prev_line_width, ierr);
|
|
697
|
+
if (prev_fill_color_R != p->fill_color_R
|
|
698
|
+
|| prev_fill_color_G != p->fill_color_G
|
|
699
|
+
|| prev_fill_color_B != p->fill_color_B)
|
|
700
|
+
c_fill_color_set_RGB(fmkr, p, prev_fill_color_R, prev_fill_color_G,
|
|
701
|
+
prev_fill_color_B, ierr);
|
|
702
|
+
if (prev_stroke_color_R != p->stroke_color_R
|
|
703
|
+
|| prev_stroke_color_G != p->stroke_color_G
|
|
704
|
+
|| prev_stroke_color_B != p->stroke_color_B)
|
|
705
|
+
c_stroke_color_set_RGB(fmkr, p, prev_stroke_color_R, prev_stroke_color_G,
|
|
706
|
+
prev_stroke_color_B, ierr);
|
|
707
|
+
|
|
708
|
+
}
|
|
709
|
+
|
|
569
710
|
}
|
data/split/Tioga/symbols.h
CHANGED
|
@@ -22,7 +22,7 @@ PRIVATE void * rb_import_symbol_no_raise(VALUE module,
|
|
|
22
22
|
|
|
23
23
|
#define DECLARE_SYMBOL(ret_type,name,args) \
|
|
24
24
|
typedef ret_type (*rb_export_##name##_type) args;\
|
|
25
|
-
INTERN rb_export_##name##_type name
|
|
25
|
+
INTERN INTERN_EXTERN rb_export_##name##_type name
|
|
26
26
|
|
|
27
27
|
#define IMPLEMENT_SYMBOL(name)\
|
|
28
28
|
INTERN rb_export_##name##_type name = 0;
|
data/split/Tioga/texout.c
CHANGED
|
@@ -515,7 +515,7 @@ void c_private_save_measure(OBJ_PTR fmkr, OBJ_PTR measure_name,
|
|
|
515
515
|
of arrays (xy) of doubles
|
|
516
516
|
*/
|
|
517
517
|
OBJ_PTR points = Array_New(0);
|
|
518
|
-
OBJ_PTR current_point =
|
|
518
|
+
OBJ_PTR current_point = OBJ_NIL;
|
|
519
519
|
int i;
|
|
520
520
|
for(i = 0; i < 8; i++) {
|
|
521
521
|
char buf[4];
|
data/split/Tioga/wrappers.c
CHANGED
|
@@ -143,6 +143,14 @@ OBJ_PTR FM_yaxis_stroke_color_set(OBJ_PTR fmkr, OBJ_PTR val) { int ierr=0;
|
|
|
143
143
|
c_yaxis_stroke_color_set(fmkr, Get_FM(fmkr, &ierr), val, &ierr); RETURN_NIL; }
|
|
144
144
|
OBJ_PTR FM_yaxis_stroke_color_get(OBJ_PTR fmkr) { int ierr=0;
|
|
145
145
|
return c_yaxis_stroke_color_get(fmkr, Get_FM(fmkr, &ierr), &ierr); }
|
|
146
|
+
OBJ_PTR FM_string_hls_to_rgb_bang(OBJ_PTR fmkr, OBJ_PTR str) { int ierr=0;
|
|
147
|
+
c_string_hls_to_rgb_bang(fmkr, Get_FM(fmkr, &ierr),
|
|
148
|
+
(unsigned char *)String_Ptr(str, &ierr), String_Len(str, &ierr), &ierr);
|
|
149
|
+
return str; }
|
|
150
|
+
OBJ_PTR FM_string_rgb_to_hls_bang(OBJ_PTR fmkr, OBJ_PTR str) { int ierr=0;
|
|
151
|
+
c_string_rgb_to_hls_bang(fmkr, Get_FM(fmkr, &ierr),
|
|
152
|
+
(unsigned char *)String_Ptr(str, &ierr), String_Len(str, &ierr), &ierr);
|
|
153
|
+
return str; }
|
|
146
154
|
|
|
147
155
|
// pdfcoords.c
|
|
148
156
|
OBJ_PTR FM_private_set_subframe(OBJ_PTR fmkr, OBJ_PTR left_margin, OBJ_PTR right_margin,
|
|
@@ -258,6 +266,17 @@ OBJ_PTR FM_private_show_jpg(OBJ_PTR fmkr, OBJ_PTR filename,
|
|
|
258
266
|
OBJ_PTR width, OBJ_PTR height, OBJ_PTR image_destination, OBJ_PTR mask_obj_num) { int ierr=0;
|
|
259
267
|
c_private_show_jpg(fmkr, Get_FM(fmkr, &ierr), String_Ptr(filename, &ierr),
|
|
260
268
|
Number_to_int(width, &ierr), Number_to_int(height, &ierr), image_destination, Number_to_int(mask_obj_num, &ierr), &ierr); RETURN_NIL; }
|
|
269
|
+
|
|
270
|
+
OBJ_PTR FM_private_show_hls_image(OBJ_PTR fmkr, OBJ_PTR llx, OBJ_PTR lly, OBJ_PTR lrx, OBJ_PTR lry,
|
|
271
|
+
OBJ_PTR ulx, OBJ_PTR uly, OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_obj_num)
|
|
272
|
+
{ int ierr=0;
|
|
273
|
+
return c_private_show_image(fmkr, Get_FM(fmkr, &ierr), HLS_IMAGE, Number_to_double(llx, &ierr), Number_to_double(lly, &ierr),
|
|
274
|
+
Number_to_double(lrx, &ierr), Number_to_double(lry, &ierr),
|
|
275
|
+
Number_to_double(ulx, &ierr), Number_to_double(uly, &ierr), (interpolate != OBJ_FALSE), OBJ_FALSE,
|
|
276
|
+
Number_to_int(w, &ierr), Number_to_int(h, &ierr), (unsigned char *)String_Ptr(data, &ierr), String_Len(data, &ierr),
|
|
277
|
+
OBJ_NIL, OBJ_NIL, OBJ_NIL, OBJ_NIL, Number_to_int(mask_obj_num, &ierr), &ierr);
|
|
278
|
+
}
|
|
279
|
+
|
|
261
280
|
OBJ_PTR FM_private_show_rgb_image(OBJ_PTR fmkr, OBJ_PTR llx, OBJ_PTR lly, OBJ_PTR lrx, OBJ_PTR lry,
|
|
262
281
|
OBJ_PTR ulx, OBJ_PTR uly, OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_obj_num)
|
|
263
282
|
{ int ierr=0;
|
|
@@ -465,16 +484,8 @@ OBJ_PTR FM_register_font(OBJ_PTR fmkr, OBJ_PTR font_name) { int ierr=0;
|
|
|
465
484
|
OBJ_PTR FM_marker_string_info(OBJ_PTR fmkr, OBJ_PTR font_number, OBJ_PTR string, OBJ_PTR scale) { int ierr=0;
|
|
466
485
|
return c_marker_string_info(fmkr, Get_FM(fmkr, &ierr), Number_to_int(font_number, &ierr),
|
|
467
486
|
(unsigned char *)String_Ptr(string, &ierr), Number_to_double(scale, &ierr), &ierr); }
|
|
468
|
-
OBJ_PTR FM_private_show_marker(
|
|
469
|
-
|
|
470
|
-
OBJ_PTR x, OBJ_PTR y, OBJ_PTR x_vec, OBJ_PTR y_vec,
|
|
471
|
-
OBJ_PTR h_scale, OBJ_PTR v_scale, OBJ_PTR scale, OBJ_PTR it_angle,
|
|
472
|
-
OBJ_PTR ascent_angle, OBJ_PTR angle,
|
|
473
|
-
OBJ_PTR fill_color, OBJ_PTR stroke_color) { int ierr=0;
|
|
474
|
-
c_private_show_marker(fmkr, Get_FM(fmkr, &ierr), Number_to_int(integer_args, &ierr), stroke_width,
|
|
475
|
-
string, x, y, x_vec, y_vec, Number_to_double(h_scale, &ierr), Number_to_double(v_scale, &ierr),
|
|
476
|
-
Number_to_double(scale, &ierr), Number_to_double(it_angle, &ierr), Number_to_double(ascent_angle, &ierr), Number_to_double(angle, &ierr),
|
|
477
|
-
fill_color, stroke_color, &ierr); RETURN_NIL; }
|
|
487
|
+
OBJ_PTR FM_private_show_marker(OBJ_PTR fmkr, OBJ_PTR args) { int ierr=0;
|
|
488
|
+
c_private_show_marker(fmkr, Get_FM(fmkr, &ierr), args, &ierr); RETURN_NIL; }
|
|
478
489
|
|
|
479
490
|
// texout.c
|
|
480
491
|
OBJ_PTR FM_rescale_text(OBJ_PTR fmkr, OBJ_PTR scaling_factor) { int ierr=0;
|