tioga 1.17 → 1.18
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 +14 -3
- data/ext/Dobjects/Dvector/dvector.c +123 -28
- data/ext/Tioga/FigureMaker/__shared_axes.c +6 -2
- data/ext/Tioga/FigureMaker/__shared_pdfimage.c +256 -66
- data/ext/Tioga/FigureMaker/figures.c +12 -7
- data/ext/Tioga/FigureMaker/figures.h +18 -1
- data/ext/Tioga/FigureMaker/pdfs.h +8 -0
- data/ext/Tioga/FigureMaker/shared/axes.c +6 -2
- data/ext/Tioga/FigureMaker/shared/pdfimage.c +256 -66
- data/ext/Tioga/FigureMaker/wrappers.c +67 -41
- data/ext/Tioga/FigureMaker/wrappers.h +22 -18
- data/lib/Dobjects/Dvector_extras.rb +2 -0
- data/lib/Tioga/FigMkr.rb +175 -68
- data/lib/Tioga/Images.rb +64 -4
- data/tests/tc_Dvector.rb +45 -0
- metadata +2 -2
@@ -273,70 +273,96 @@ OBJ_PTR FM_private_create_monochrome_image_data(OBJ_PTR fmkr, OBJ_PTR data,
|
|
273
273
|
Number_to_int(first_row, &ierr), Number_to_int(last_row, &ierr), Number_to_int(first_column, &ierr), Number_to_int(last_column, &ierr),
|
274
274
|
Number_to_double(boundary, &ierr), reverse != OBJ_FALSE, &ierr);
|
275
275
|
}
|
276
|
-
OBJ_PTR
|
277
|
-
OBJ_PTR width, OBJ_PTR height, OBJ_PTR
|
278
|
-
|
279
|
-
|
276
|
+
OBJ_PTR FM_private_register_jpg(OBJ_PTR fmkr, OBJ_PTR filename,
|
277
|
+
OBJ_PTR width, OBJ_PTR height, OBJ_PTR mask_obj_num) { int ierr=0;
|
278
|
+
return Integer_New(c_private_register_jpg(fmkr, Get_FM(fmkr, &ierr), String_Ptr(filename, &ierr),
|
279
|
+
Number_to_int(width, &ierr), Number_to_int(height, &ierr), Number_to_int(mask_obj_num, &ierr), &ierr));
|
280
|
+
}
|
281
|
+
|
282
|
+
/* Get info on a JPEG file */
|
283
|
+
OBJ_PTR FM_jpg_info(OBJ_PTR fmkr, OBJ_PTR filename) {
|
284
|
+
int ierr = 0;
|
285
|
+
JPG_Info * info = Parse_JPG(String_Ptr(filename, &ierr));
|
286
|
+
if(info) {
|
287
|
+
OBJ_PTR hsh = Hash_New();
|
288
|
+
Hash_Set_Obj(hsh, "width", Integer_New(info->width));
|
289
|
+
Hash_Set_Obj(hsh, "height", Integer_New(info->height));
|
290
|
+
Hash_Set_Obj(hsh, "jpg", filename);
|
291
|
+
Free_JPG(info);
|
292
|
+
return hsh;
|
293
|
+
}
|
294
|
+
else
|
295
|
+
return OBJ_NIL;
|
296
|
+
}
|
297
|
+
|
298
|
+
#define Str_Or_NULL(obj, ierr) ((obj == OBJ_NIL) ? NULL : CString_Ptr(obj, ierr))
|
280
299
|
|
281
|
-
OBJ_PTR
|
282
|
-
|
300
|
+
OBJ_PTR FM_private_register_hls_image(OBJ_PTR fmkr,
|
301
|
+
OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_obj_num, OBJ_PTR components, OBJ_PTR filters)
|
283
302
|
{ int ierr=0;
|
284
|
-
return
|
285
|
-
|
286
|
-
Number_to_double(ulx, &ierr), Number_to_double(uly, &ierr), (interpolate != OBJ_FALSE), OBJ_FALSE,
|
303
|
+
return Integer_New(c_private_register_image(fmkr, Get_FM(fmkr, &ierr), HLS_IMAGE,
|
304
|
+
(interpolate != OBJ_FALSE), OBJ_FALSE,
|
287
305
|
Number_to_int(w, &ierr), Number_to_int(h, &ierr), (unsigned char *)String_Ptr(data, &ierr), String_Len(data, &ierr),
|
288
|
-
OBJ_NIL, OBJ_NIL, OBJ_NIL, OBJ_NIL, Number_to_int(mask_obj_num, &ierr),
|
306
|
+
OBJ_NIL, OBJ_NIL, OBJ_NIL, OBJ_NIL, Number_to_int(mask_obj_num, &ierr),
|
307
|
+
Number_to_int(components, &ierr),
|
308
|
+
Str_Or_NULL(filters, &ierr), &ierr));
|
289
309
|
}
|
290
310
|
|
291
|
-
OBJ_PTR
|
292
|
-
OBJ_PTR ulx, OBJ_PTR uly, OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_obj_num)
|
311
|
+
OBJ_PTR FM_private_register_rgb_image(OBJ_PTR fmkr, OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_obj_num, OBJ_PTR components, OBJ_PTR filters)
|
293
312
|
{ int ierr=0;
|
294
|
-
return
|
295
|
-
|
296
|
-
Number_to_double(ulx, &ierr), Number_to_double(uly, &ierr), (interpolate != OBJ_FALSE), OBJ_FALSE,
|
313
|
+
return Integer_New(c_private_register_image(fmkr, Get_FM(fmkr, &ierr), RGB_IMAGE,
|
314
|
+
(interpolate != OBJ_FALSE), OBJ_FALSE,
|
297
315
|
Number_to_int(w, &ierr), Number_to_int(h, &ierr), (unsigned char *)String_Ptr(data, &ierr), String_Len(data, &ierr),
|
298
|
-
OBJ_NIL, OBJ_NIL, OBJ_NIL, OBJ_NIL, Number_to_int(mask_obj_num, &ierr),
|
316
|
+
OBJ_NIL, OBJ_NIL, OBJ_NIL, OBJ_NIL, Number_to_int(mask_obj_num, &ierr),
|
317
|
+
Number_to_int(components, &ierr),
|
318
|
+
Str_Or_NULL(filters, &ierr), &ierr));
|
299
319
|
}
|
300
320
|
|
301
|
-
OBJ_PTR
|
302
|
-
OBJ_PTR ulx, OBJ_PTR uly, OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_obj_num)
|
321
|
+
OBJ_PTR FM_private_register_cmyk_image(OBJ_PTR fmkr, OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_obj_num, OBJ_PTR components, OBJ_PTR filters)
|
303
322
|
{ int ierr=0;
|
304
|
-
return
|
305
|
-
Number_to_double(lrx, &ierr), Number_to_double(lry, &ierr),
|
306
|
-
Number_to_double(ulx, &ierr), Number_to_double(uly, &ierr), (interpolate != OBJ_FALSE), false,
|
323
|
+
return Integer_New(c_private_register_image(fmkr, Get_FM(fmkr, &ierr), CMYK_IMAGE, (interpolate != OBJ_FALSE), false,
|
307
324
|
Number_to_int(w, &ierr), Number_to_int(h, &ierr), (unsigned char *)String_Ptr(data, &ierr), String_Len(data, &ierr),
|
308
|
-
OBJ_NIL, OBJ_NIL, OBJ_NIL, OBJ_NIL, Number_to_int(mask_obj_num, &ierr),
|
325
|
+
OBJ_NIL, OBJ_NIL, OBJ_NIL, OBJ_NIL, Number_to_int(mask_obj_num, &ierr),
|
326
|
+
Number_to_int(components, &ierr),
|
327
|
+
Str_Or_NULL(filters, &ierr), &ierr));
|
309
328
|
}
|
310
329
|
|
311
|
-
OBJ_PTR
|
312
|
-
OBJ_PTR ulx, OBJ_PTR uly, OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_obj_num)
|
330
|
+
OBJ_PTR FM_private_register_grayscale_image(OBJ_PTR fmkr, OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_obj_num, OBJ_PTR components, OBJ_PTR filters)
|
313
331
|
{ int ierr=0;
|
314
|
-
return
|
315
|
-
Number_to_double(lrx, &ierr), Number_to_double(lry, &ierr),
|
316
|
-
Number_to_double(ulx, &ierr), Number_to_double(uly, &ierr), (interpolate != OBJ_FALSE), false,
|
332
|
+
return Integer_New(c_private_register_image(fmkr, Get_FM(fmkr, &ierr), GRAY_IMAGE, (interpolate != OBJ_FALSE), false,
|
317
333
|
Number_to_int(w, &ierr), Number_to_int(h, &ierr), (unsigned char *)String_Ptr(data, &ierr), String_Len(data, &ierr),
|
318
|
-
OBJ_NIL, OBJ_NIL, OBJ_NIL, OBJ_NIL, Number_to_int(mask_obj_num, &ierr),
|
334
|
+
OBJ_NIL, OBJ_NIL, OBJ_NIL, OBJ_NIL, Number_to_int(mask_obj_num, &ierr),
|
335
|
+
Number_to_int(components, &ierr),
|
336
|
+
Str_Or_NULL(filters, &ierr), &ierr));
|
319
337
|
}
|
320
338
|
|
321
|
-
OBJ_PTR
|
322
|
-
OBJ_PTR ulx, OBJ_PTR uly, OBJ_PTR interpolate, OBJ_PTR reversed, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_obj_num)
|
339
|
+
OBJ_PTR FM_private_register_monochrome_image(OBJ_PTR fmkr, OBJ_PTR interpolate, OBJ_PTR reversed, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_obj_num, OBJ_PTR filters)
|
323
340
|
{ int ierr=0;
|
324
|
-
return
|
325
|
-
Number_to_double(lrx, &ierr), Number_to_double(lry, &ierr),
|
326
|
-
Number_to_double(ulx, &ierr), Number_to_double(uly, &ierr), (interpolate != OBJ_FALSE), (reversed == OBJ_TRUE),
|
341
|
+
return Integer_New(c_private_register_image(fmkr, Get_FM(fmkr, &ierr), MONO_IMAGE, (interpolate != OBJ_FALSE), (reversed == OBJ_TRUE),
|
327
342
|
Number_to_int(w, &ierr), Number_to_int(h, &ierr), (unsigned char *)String_Ptr(data, &ierr), String_Len(data, &ierr),
|
328
|
-
|
343
|
+
OBJ_NIL, OBJ_NIL, OBJ_NIL, OBJ_NIL, Number_to_int(mask_obj_num, &ierr), 1,
|
344
|
+
Str_Or_NULL(filters, &ierr), &ierr));
|
329
345
|
}
|
330
346
|
|
331
|
-
OBJ_PTR
|
332
|
-
OBJ_PTR
|
333
|
-
OBJ_PTR value_mask_min, OBJ_PTR value_mask_max, OBJ_PTR hival, OBJ_PTR lookup, OBJ_PTR mask_obj_num)
|
347
|
+
OBJ_PTR FM_private_register_image(OBJ_PTR fmkr,OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data,
|
348
|
+
OBJ_PTR value_mask_min, OBJ_PTR value_mask_max, OBJ_PTR hival, OBJ_PTR lookup, OBJ_PTR mask_obj_num, OBJ_PTR components, OBJ_PTR filters)
|
334
349
|
{ int ierr=0;
|
335
|
-
return
|
336
|
-
Number_to_double(lrx, &ierr), Number_to_double(lry, &ierr),
|
337
|
-
Number_to_double(ulx, &ierr), Number_to_double(uly, &ierr), (interpolate != OBJ_FALSE), false,
|
350
|
+
return Integer_New(c_private_register_image(fmkr, Get_FM(fmkr, &ierr), COLORMAP_IMAGE, (interpolate != OBJ_FALSE), false,
|
338
351
|
Number_to_int(w, &ierr), Number_to_int(h, &ierr), (unsigned char *)String_Ptr(data, &ierr), String_Len(data, &ierr),
|
339
|
-
value_mask_min, value_mask_max, hival, lookup, Number_to_int(mask_obj_num, &ierr),
|
352
|
+
value_mask_min, value_mask_max, hival, lookup, Number_to_int(mask_obj_num, &ierr),
|
353
|
+
Number_to_int(components, &ierr),
|
354
|
+
Str_Or_NULL(filters, &ierr), &ierr));
|
355
|
+
}
|
356
|
+
|
357
|
+
OBJ_PTR FM_private_show_image_from_ref(OBJ_PTR fmkr, OBJ_PTR ref, OBJ_PTR llx, OBJ_PTR lly, OBJ_PTR lrx, OBJ_PTR lry, OBJ_PTR ulx, OBJ_PTR uly)
|
358
|
+
{
|
359
|
+
int ierr=0;
|
360
|
+
c_private_show_image_from_ref(fmkr, Get_FM(fmkr, &ierr),
|
361
|
+
Number_to_int(ref, &ierr),
|
362
|
+
Number_to_double(llx, &ierr), Number_to_double(lly, &ierr),
|
363
|
+
Number_to_double(lrx, &ierr), Number_to_double(lry, &ierr),
|
364
|
+
Number_to_double(ulx, &ierr), Number_to_double(uly, &ierr), &ierr);
|
365
|
+
RETURN_NIL;
|
340
366
|
}
|
341
367
|
|
342
368
|
|
@@ -152,30 +152,34 @@ extern OBJ_PTR FM_pdf_grestore(OBJ_PTR fmkr);
|
|
152
152
|
|
153
153
|
/*======================================================================*/
|
154
154
|
// pdfimage.c
|
155
|
-
extern OBJ_PTR FM_private_show_jpg(OBJ_PTR fmkr, OBJ_PTR filename,
|
156
|
-
OBJ_PTR width, OBJ_PTR height, OBJ_PTR image_destination, OBJ_PTR mask_xo_num);
|
157
155
|
extern OBJ_PTR FM_private_create_image_data(OBJ_PTR fmkr, OBJ_PTR data,
|
158
156
|
OBJ_PTR first_row, OBJ_PTR last_row, OBJ_PTR first_column, OBJ_PTR last_column,
|
159
157
|
OBJ_PTR min_OBJ_PTR, OBJ_PTR max_OBJ_PTR, OBJ_PTR max_code, OBJ_PTR if_below_range, OBJ_PTR if_above_range);
|
160
158
|
extern OBJ_PTR FM_private_create_monochrome_image_data(OBJ_PTR fmkr, OBJ_PTR data,
|
161
159
|
OBJ_PTR first_row, OBJ_PTR last_row, OBJ_PTR first_column, OBJ_PTR last_column,
|
162
160
|
OBJ_PTR boundary, OBJ_PTR reverse);
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
extern OBJ_PTR
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
extern OBJ_PTR
|
173
|
-
|
174
|
-
OBJ_PTR
|
175
|
-
|
176
|
-
|
177
|
-
OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_xo_num);
|
178
|
-
extern OBJ_PTR
|
161
|
+
|
162
|
+
extern OBJ_PTR FM_private_show_image_from_ref(OBJ_PTR fmkr, OBJ_PTR ref, OBJ_PTR llx, OBJ_PTR lly, OBJ_PTR lrx, OBJ_PTR lry, OBJ_PTR ulx, OBJ_PTR uly);
|
163
|
+
|
164
|
+
extern OBJ_PTR FM_private_register_jpg(OBJ_PTR fmkr, OBJ_PTR filename,
|
165
|
+
OBJ_PTR width, OBJ_PTR height,
|
166
|
+
OBJ_PTR mask_xo_num);
|
167
|
+
|
168
|
+
extern OBJ_PTR FM_jpg_info(OBJ_PTR fmkr, OBJ_PTR filename);
|
169
|
+
|
170
|
+
extern OBJ_PTR FM_private_register_image(OBJ_PTR fmkr,
|
171
|
+
OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR OBJ_PTR_mask_min, OBJ_PTR OBJ_PTR_mask_max,
|
172
|
+
OBJ_PTR hival, OBJ_PTR lookup, OBJ_PTR mask_xo_num, OBJ_PTR components);
|
173
|
+
|
174
|
+
extern OBJ_PTR FM_private_register_hls_image(OBJ_PTR fmkr,
|
175
|
+
OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_xo_num, OBJ_PTR components);
|
176
|
+
extern OBJ_PTR FM_private_register_rgb_image(OBJ_PTR fmkr,
|
177
|
+
OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_xo_num, OBJ_PTR components);
|
178
|
+
extern OBJ_PTR FM_private_register_cmyk_image(OBJ_PTR fmkr,
|
179
|
+
OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_xo_num, OBJ_PTR components);
|
180
|
+
extern OBJ_PTR FM_private_register_grayscale_image(OBJ_PTR fmkr,
|
181
|
+
OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_xo_num, OBJ_PTR components);
|
182
|
+
extern OBJ_PTR FM_private_register_monochrome_image(OBJ_PTR fmkr,
|
179
183
|
OBJ_PTR interpolate, OBJ_PTR reversed, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_xo_num);
|
180
184
|
|
181
185
|
/*======================================================================*/
|
@@ -86,6 +86,8 @@ module Dobjects
|
|
86
86
|
'default' => 0.0/0.0, # defaults to NaN
|
87
87
|
'initial_size' => 5001,
|
88
88
|
'remove_space' => true ,# removes spaces at the beginning of the lines
|
89
|
+
'last_col' => -1, # Read all columns
|
90
|
+
'text_columns' => [], # Not a single column is text
|
89
91
|
}
|
90
92
|
|
91
93
|
# This function is a wrapper for #fast_fancy_read that reflects the
|
data/lib/Tioga/FigMkr.rb
CHANGED
@@ -23,6 +23,9 @@
|
|
23
23
|
require 'Tioga/FigureConstants.rb'
|
24
24
|
require 'Tioga/Utils'
|
25
25
|
|
26
|
+
require "tmpdir"
|
27
|
+
require "fileutils"
|
28
|
+
|
26
29
|
module Tioga
|
27
30
|
class FigureMaker
|
28
31
|
|
@@ -38,7 +41,7 @@ class FigureMaker
|
|
38
41
|
|
39
42
|
# This URL will contain tioga-(...) when it is exported from the
|
40
43
|
# SVN repository. This is where we'll look for version information.
|
41
|
-
SVN_URL = '$HeadURL: svn+ssh://rubyforge.org/var/svn/tioga/tags/tioga/Tioga%201.
|
44
|
+
SVN_URL = '$HeadURL: svn+ssh://rubyforge.org/var/svn/tioga/tags/tioga/Tioga%201.18/lib/Tioga/FigMkr.rb $'
|
42
45
|
|
43
46
|
TIOGA_VERSION = if SVN_URL =~ /tags\/tioga\/Tioga%20([^\/]+)/
|
44
47
|
$1
|
@@ -165,6 +168,11 @@ class FigureMaker
|
|
165
168
|
attr_accessor :measures_info
|
166
169
|
|
167
170
|
|
171
|
+
# Maximum number of pdflatex calls. If nil, then unlimited, but
|
172
|
+
# that could be a very bad idea.
|
173
|
+
attr_accessor :max_nested_pdflatex_calls
|
174
|
+
attr_reader :current_pdflatex_call
|
175
|
+
|
168
176
|
|
169
177
|
# If we want to use #legend_bounding_box. It is off by default
|
170
178
|
# as it causes a systematic second run of pdflatex.
|
@@ -317,6 +325,9 @@ class FigureMaker
|
|
317
325
|
# We don't measure legends by default.
|
318
326
|
@measure_legends = false
|
319
327
|
|
328
|
+
# Max number of pdflatex runs
|
329
|
+
@max_nested_pdflatex_calls = 3
|
330
|
+
|
320
331
|
# By default, we use Bill's algorithm for major ticks positions
|
321
332
|
self.vincent_or_bill = false
|
322
333
|
self.log_minor_ticks_limit = 10
|
@@ -1651,13 +1662,97 @@ class FigureMaker
|
|
1651
1662
|
|
1652
1663
|
|
1653
1664
|
@@keys_for_show_image = FigureMaker.make_name_lookup_hash([
|
1654
|
-
'll', 'lr', 'ul', 'w', 'width', 'height', 'h',
|
1655
|
-
'opacity_mask', 'stencil_mask',
|
1665
|
+
'll', 'lr', 'ul', 'w', 'width', 'height', 'h', 'ref',
|
1666
|
+
'opacity_mask', 'stencil_mask', 'bits', 'pdf_filters',
|
1656
1667
|
'jpg', 'JPG', 'jpeg', 'JPEG', 'interpolate', 'data', 'value_mask',
|
1657
1668
|
'color_space', 'color_map', 'colormap'])
|
1658
1669
|
def show_image(dict)
|
1659
1670
|
internal_show_image(dict, false)
|
1660
1671
|
end
|
1672
|
+
|
1673
|
+
# Only register an image
|
1674
|
+
def register_image(dict)
|
1675
|
+
internal_show_image(dict, true)
|
1676
|
+
end
|
1677
|
+
|
1678
|
+
def load_png(file)
|
1679
|
+
if File.readable?(file)
|
1680
|
+
Dir::mktmpdir do |dir|
|
1681
|
+
FileUtils::cp(file, "#{dir}/image.png")
|
1682
|
+
Dir::chdir(dir) do
|
1683
|
+
open("read.tex", "w") do |f|
|
1684
|
+
f.puts <<'EOD'
|
1685
|
+
\documentclass{article}
|
1686
|
+
\usepackage{graphicx}
|
1687
|
+
\pdfcompresslevel=0
|
1688
|
+
\pdfobjcompresslevel=0
|
1689
|
+
\begin{document}
|
1690
|
+
\includegraphics[width=1cm]{image}
|
1691
|
+
\end{document}
|
1692
|
+
EOD
|
1693
|
+
end
|
1694
|
+
pdflatex = "pdflatex"
|
1695
|
+
syscmd = "#{pdflatex} -interaction nonstopmode read.tex"
|
1696
|
+
IO::popen(syscmd, "r+") do |f|
|
1697
|
+
f.close_write
|
1698
|
+
for line in f
|
1699
|
+
# Shall we do something with those ?
|
1700
|
+
end
|
1701
|
+
end
|
1702
|
+
|
1703
|
+
# Now, we open the PDF file and have fun with it.
|
1704
|
+
open("read.pdf", 'rb') do |f|
|
1705
|
+
|
1706
|
+
ret = nil
|
1707
|
+
cur = nil
|
1708
|
+
len = nil
|
1709
|
+
while l = f.gets("\n")
|
1710
|
+
if ! ret && l =~ /\/Subtype\s*\/Image\s*/
|
1711
|
+
ret = {}
|
1712
|
+
cur = ret
|
1713
|
+
elsif cur && l=~ /\/Width\s*(\d+)\s*/
|
1714
|
+
cur['width'] = $1.to_i
|
1715
|
+
elsif cur && l=~ /\/Height\s*(\d+)\s*/
|
1716
|
+
cur['height'] = $1.to_i
|
1717
|
+
elsif cur && l =~ /\/Length\s*(\d+)\s*/
|
1718
|
+
len = $1.to_i
|
1719
|
+
elsif cur && l =~ /\/(Filter|DecodePar)/ && (!cur['data'])
|
1720
|
+
cur['pdf_filters'] ||= ''
|
1721
|
+
cur['pdf_filters'] << l
|
1722
|
+
elsif cur && l =~ /^\s*\/BitsPerComponent\s*(\d+)\s*/
|
1723
|
+
cur['bits'] = $1.to_i
|
1724
|
+
elsif cur && l =~ /\/ColorSpace\s*(\S+)\s*/
|
1725
|
+
cs = $1
|
1726
|
+
if cs == "/DeviceGray"
|
1727
|
+
cs = 'gray'
|
1728
|
+
elsif cs == "/DeviceRGB"
|
1729
|
+
cs = "rgb"
|
1730
|
+
else
|
1731
|
+
raise "Unsupported colorspace for file #{file}: '#{cs}'"
|
1732
|
+
end
|
1733
|
+
cur['color_space'] = cs
|
1734
|
+
elsif cur && l =~ /\/SMask\s*(\d+)\s*/
|
1735
|
+
cur['opacity_mask'] = {}
|
1736
|
+
elsif cur && len && l =~ /stream/
|
1737
|
+
cur['data'] = f.read(len)
|
1738
|
+
if cur['opacity_mask']
|
1739
|
+
cur = cur['opacity_mask']
|
1740
|
+
len = nil
|
1741
|
+
else
|
1742
|
+
return ret
|
1743
|
+
end
|
1744
|
+
end
|
1745
|
+
end
|
1746
|
+
return ret
|
1747
|
+
end
|
1748
|
+
|
1749
|
+
end
|
1750
|
+
end
|
1751
|
+
else
|
1752
|
+
raise "File #{file} not readable"
|
1753
|
+
end
|
1754
|
+
end
|
1755
|
+
|
1661
1756
|
|
1662
1757
|
@@keys_for_create_colormap = FigureMaker.make_name_lookup_hash(['length', 'points', 'Rs', 'Gs', 'Bs', 'Hs', 'Ls', 'Ss'])
|
1663
1758
|
def create_colormap(dict)
|
@@ -1944,19 +2039,20 @@ class FigureMaker
|
|
1944
2039
|
elsif loc == BOTTOM
|
1945
2040
|
shift = self.text_shift_on_bottom if shift == nil
|
1946
2041
|
else
|
2042
|
+
angle_add = 0
|
1947
2043
|
if (loc == AT_X_ORIGIN)
|
1948
2044
|
shift = self.text_shift_from_x_origin if shift == nil
|
1949
|
-
xloc = shift*self.
|
2045
|
+
xloc = shift*self.default_text_height_dx
|
1950
2046
|
yloc = convert_frame_to_figure_y(position)
|
1951
|
-
|
2047
|
+
angle_add = 90
|
1952
2048
|
elsif (loc == AT_Y_ORIGIN)
|
1953
2049
|
shift = self.text_shift_from_y_origin if shift == nil
|
1954
|
-
yloc = shift*self.
|
2050
|
+
yloc = shift*self.default_text_height_dx
|
1955
2051
|
xloc = convert_frame_to_figure_x(position)
|
1956
2052
|
else
|
1957
2053
|
raise "Sorry: 'loc' must be LEFT, RIGHT, TOP, BOTTOM, AT_X_ORIGIN, or AT_Y_ORIGIN for show_text"
|
1958
2054
|
end
|
1959
|
-
show_rotated_label(text, xloc, yloc, scale, angle, just, align,
|
2055
|
+
show_rotated_label(text, xloc, yloc, scale, angle + angle_add, just, align,
|
1960
2056
|
dict['measure'])
|
1961
2057
|
return
|
1962
2058
|
end
|
@@ -2148,17 +2244,25 @@ class FigureMaker
|
|
2148
2244
|
num = get_num_for_pdf(num)
|
2149
2245
|
result = start_making_pdf(num)
|
2150
2246
|
return unless result
|
2247
|
+
|
2248
|
+
@current_pdflatex_call ||= 0
|
2151
2249
|
begin
|
2152
2250
|
@figure_pdfs[num] = finish_making_pdf(@figure_names[num])
|
2153
2251
|
# If the keys have changed, we run that again.
|
2154
2252
|
rescue Exception => e
|
2155
2253
|
p e, e.backtrace
|
2156
2254
|
end
|
2157
|
-
|
2255
|
+
|
2158
2256
|
if @measures.keys != old_measure_keys
|
2159
|
-
|
2160
|
-
|
2257
|
+
@current_pdflatex_call += 1
|
2258
|
+
|
2259
|
+
# We limit
|
2260
|
+
if (!@max_nested_pdflatex_calls || (@current_pdflatex_call < @max_nested_pdflatex_calls))
|
2261
|
+
# we dont need to pass &cmd since it has now been defined
|
2262
|
+
make_pdf(num)
|
2263
|
+
end
|
2161
2264
|
end
|
2265
|
+
@current_pdflatex_call = nil
|
2162
2266
|
return @figure_pdfs[num]
|
2163
2267
|
end
|
2164
2268
|
|
@@ -2390,6 +2494,12 @@ EOE
|
|
2390
2494
|
# p @fm_data
|
2391
2495
|
private_save_measure(key, *val)
|
2392
2496
|
end
|
2497
|
+
|
2498
|
+
# Delete all keys in @
|
2499
|
+
extra = @measures_info.keys - @measures.keys
|
2500
|
+
for e in extra
|
2501
|
+
@measures_info.delete(e)
|
2502
|
+
end
|
2393
2503
|
|
2394
2504
|
result = $?
|
2395
2505
|
if !result
|
@@ -2441,74 +2551,71 @@ EOE
|
|
2441
2551
|
return false
|
2442
2552
|
end
|
2443
2553
|
|
2444
|
-
def internal_show_image(dict,
|
2445
|
-
|
2446
|
-
|
2447
|
-
|
2448
|
-
|
2449
|
-
|
2450
|
-
|
2451
|
-
|
2452
|
-
|
2453
|
-
|
2454
|
-
|
2455
|
-
|
2456
|
-
|
2457
|
-
|
2458
|
-
|
2459
|
-
|
2460
|
-
|
2554
|
+
def internal_show_image(dict, register_only)
|
2555
|
+
check_dict(dict, @@keys_for_show_image, 'show_image')
|
2556
|
+
ll = dict['ll']; lr = dict['lr']; ul = dict['ul']
|
2557
|
+
w = alt_names(dict, 'w', 'width')
|
2558
|
+
h = alt_names(dict, 'h', 'height')
|
2559
|
+
opacity_mask = alt_names(dict, 'opacity_mask', 'stencil_mask')
|
2560
|
+
bits = dict['bits'] || 8
|
2561
|
+
filters = dict['pdf_filters'] || nil
|
2562
|
+
ref = dict['ref'] || nil
|
2563
|
+
if opacity_mask != nil
|
2564
|
+
om = opacity_mask.dup
|
2565
|
+
mask_xo_num = om['ref'] || internal_show_image(om, true)
|
2566
|
+
else
|
2567
|
+
mask_xo_num = 0
|
2568
|
+
end
|
2569
|
+
filename = alt_names(dict, 'jpg', 'JPG')
|
2570
|
+
filename = dict['jpeg'] if filename == nil
|
2571
|
+
filename = dict['JPEG'] if filename == nil
|
2572
|
+
if ref
|
2573
|
+
# Nothing to register, just reuse the image
|
2574
|
+
elsif filename != nil
|
2575
|
+
ref = private_register_jpg(filename, w, h, mask_xo_num)
|
2576
|
+
else
|
2461
2577
|
interpolate = get_if_given_else_default(dict, 'interpolate', true)
|
2462
2578
|
data = dict['data']
|
2463
2579
|
value_mask = dict['value_mask']
|
2464
2580
|
color_space = alt_names(dict, 'color_space', 'colormap')
|
2465
2581
|
color_space = dict['color_map'] if color_space == nil
|
2466
|
-
|
2467
|
-
|
2468
|
-
|
2469
|
-
|
2470
|
-
|
2471
|
-
|
2472
|
-
|
2473
|
-
|
2474
|
-
|
2475
|
-
|
2476
|
-
|
2477
|
-
|
2478
|
-
|
2479
|
-
|
2480
|
-
|
2481
|
-
|
2482
|
-
|
2483
|
-
|
2484
|
-
|
2485
|
-
|
2486
|
-
|
2487
|
-
end
|
2488
|
-
if color_space == 'RGB' || color_space == 'rgb'
|
2489
|
-
private_show_rgb_image(ll[0], ll[1], lr[0], lr[1], ul[0], ul[1], interpolate, w, h, data, mask_xo_num)
|
2490
|
-
return self
|
2491
|
-
end
|
2492
|
-
if color_space == 'HLS' || color_space == 'hls'
|
2493
|
-
private_show_hls_image(ll[0], ll[1], lr[0], lr[1], ul[0], ul[1], interpolate, w, h, data, mask_xo_num)
|
2494
|
-
return self
|
2495
|
-
end
|
2496
|
-
if color_space == 'CMYK' || color_space == 'cmyk'
|
2497
|
-
private_show_cmyk_image(ll[0], ll[1], lr[0], lr[1], ul[0], ul[1], interpolate, w, h, data, mask_xo_num)
|
2498
|
-
return self
|
2499
|
-
end
|
2500
|
-
if value_mask == nil
|
2582
|
+
case color_space
|
2583
|
+
when nil
|
2584
|
+
raise "Sorry: must specify 'color_space' for the image"
|
2585
|
+
when 'MONO', 'mono'
|
2586
|
+
raise "Sorry: monochrome image must not itself have a mask" unless mask_xo_num == 0
|
2587
|
+
reversed = get_if_given_else_default(dict, 'reversed', false)
|
2588
|
+
ref = private_register_monochrome_image(interpolate, reversed, w, h, data, ((register_only)? -1 : 0), filters)
|
2589
|
+
when 'GRAY', 'gray', 'GREY', 'grey'
|
2590
|
+
if register_only
|
2591
|
+
raise("Sorry: mask must not itself have a mask") unless mask_xo_num == 0
|
2592
|
+
mask_xo_num = -1
|
2593
|
+
end
|
2594
|
+
ref = private_register_grayscale_image(interpolate, w, h, data, mask_xo_num, bits, filters)
|
2595
|
+
when 'RGB', 'rgb'
|
2596
|
+
ref = private_register_rgb_image(interpolate, w, h, data, mask_xo_num, bits, filters)
|
2597
|
+
when 'HLS', 'hls'
|
2598
|
+
ref = private_register_hls_image(interpolate, w, h, data, mask_xo_num, bits, filters)
|
2599
|
+
when 'CMYK', 'cmyk'
|
2600
|
+
ref = private_register_cmyk_image(interpolate, w, h, data, mask_xo_num, bits, filters)
|
2601
|
+
else
|
2602
|
+
if value_mask == nil
|
2501
2603
|
value_mask_min = value_mask_max = 256
|
2502
|
-
|
2604
|
+
elsif value_mask.kind_of?Integer
|
2503
2605
|
value_mask_min = value_mask_max = value_mask
|
2504
|
-
|
2606
|
+
else
|
2505
2607
|
value_mask_min = value_mask[0];
|
2506
2608
|
value_mask_max = value_mask[1];
|
2609
|
+
end
|
2610
|
+
ref = private_register_image(interpolate,
|
2611
|
+
w, h, data, value_mask_min, value_mask_max, color_space[0], color_space[1], mask_xo_num, bits, filters)
|
2507
2612
|
end
|
2508
|
-
|
2509
|
-
|
2510
|
-
|
2511
|
-
|
2613
|
+
end
|
2614
|
+
if ! register_only
|
2615
|
+
private_show_image_from_ref(ref,
|
2616
|
+
ll[0], ll[1], lr[0], lr[1], ul[0], ul[1])
|
2617
|
+
end
|
2618
|
+
return ref
|
2512
2619
|
end
|
2513
2620
|
|
2514
2621
|
def report_error(er, msg)
|