tioga 1.17 → 1.18
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|