poppler 0.20.0

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.
@@ -0,0 +1,56 @@
1
+ #ifndef __RBPOPPLER_PRIVATE_H__
2
+ #define __RBPOPPLER_PRIVATE_H__
3
+
4
+ #include "rbpoppler.h"
5
+
6
+ #ifdef POPPLER_WITH_GDK
7
+ # include <rbgdk.h>
8
+ #endif
9
+
10
+ extern void Init_poppler_document(VALUE mPoppler);
11
+ extern void Init_poppler_page(VALUE mPoppler);
12
+ extern void Init_poppler_attachment(VALUE mPoppler);
13
+ extern void Init_poppler_action(VALUE mPoppler);
14
+ extern void Init_poppler_annotation(VALUE mPoppler);
15
+ extern void Init_poppler_form_field(VALUE mPoppler);
16
+
17
+ #define DEF_READER(prefix, name, member, self_to_c, member_to_rb) \
18
+ static VALUE \
19
+ prefix ## _get_ ## name(VALUE self) \
20
+ { \
21
+ return member_to_rb((self_to_c(self))->member); \
22
+ }
23
+
24
+ #define DEF_WRITER(prefix, name, member, self_to_c, value_to_c) \
25
+ static VALUE \
26
+ prefix ## _set_ ## name(VALUE self, VALUE value) \
27
+ { \
28
+ (self_to_c(self))->member = value_to_c(value); \
29
+ return Qnil; \
30
+ }
31
+
32
+ #define DEF_WRITER_WITH_SETTER(prefix, name, member, \
33
+ self_to_c, value_setter) \
34
+ static VALUE \
35
+ prefix ## _set_ ## name(VALUE self, VALUE value) \
36
+ { \
37
+ value_setter((self_to_c(self))->member, value); \
38
+ return Qnil; \
39
+ }
40
+
41
+ #define DEF_ACCESSOR(prefix, member, self_to_c, member_to_rb, value_to_c) \
42
+ DEF_READER(prefix, member, member, self_to_c, member_to_rb) \
43
+ DEF_WRITER(prefix, member, member, self_to_c, value_to_c) \
44
+
45
+ #define DEF_ACCESSOR_WITH_SETTER(prefix, member, self_to_c, \
46
+ member_to_rb, value_setter) \
47
+ DEF_READER(prefix, member, member, self_to_c, member_to_rb) \
48
+ DEF_WRITER_WITH_SETTER(prefix, member, member, self_to_c, value_setter)
49
+
50
+ #define DEF_ACCESSOR_WITH_NAME(prefix, name, member, self_to_c, \
51
+ member_to_rb, value_to_c) \
52
+ DEF_READER(prefix, name, member, self_to_c, member_to_rb) \
53
+ DEF_WRITER(prefix, name, member, self_to_c, value_to_c)
54
+
55
+
56
+ #endif
@@ -0,0 +1,90 @@
1
+ /* -*- c-file-style: "ruby" -*- */
2
+ /**********************************************************************
3
+
4
+ rbpoppler.c -
5
+
6
+ Copyright (C) 2006-2008 Ruby-GNOME2 Project Team
7
+
8
+ **********************************************************************/
9
+
10
+ #include "rbpoppler-private.h"
11
+
12
+ static VALUE
13
+ get_backend(VALUE self)
14
+ {
15
+ return GENUM2RVAL(poppler_get_backend(), POPPLER_TYPE_BACKEND);
16
+ }
17
+
18
+ static VALUE
19
+ get_version(VALUE self)
20
+ {
21
+ return CSTR2RVAL(poppler_get_version());
22
+ }
23
+
24
+ static VALUE
25
+ cairo_available(VALUE self)
26
+ {
27
+ #ifdef RB_POPPLER_CAIRO_AVAILABLE
28
+ return Qtrue;
29
+ #else
30
+ return Qfalse;
31
+ #endif
32
+ }
33
+
34
+
35
+ void
36
+ Init_poppler(void)
37
+ {
38
+ VALUE mPoppler;
39
+
40
+ mPoppler = rb_define_module("Poppler");
41
+
42
+ rb_define_const(mPoppler, "BUILD_VERSION",
43
+ rb_ary_new3(3,
44
+ INT2FIX(POPPLER_MAJOR_VERSION),
45
+ INT2FIX(POPPLER_MINOR_VERSION),
46
+ INT2FIX(POPPLER_MICRO_VERSION)));
47
+
48
+ G_DEF_CLASS(POPPLER_TYPE_ERROR, "Error", mPoppler);
49
+ G_DEF_CLASS(POPPLER_TYPE_ORIENTATION, "Orientation", mPoppler);
50
+
51
+ G_DEF_CLASS(POPPLER_TYPE_PAGE_TRANSITION_TYPE,
52
+ "PageTransitionType", mPoppler);
53
+ G_DEF_CLASS(POPPLER_TYPE_PAGE_TRANSITION_ALIGNMENT,
54
+ "PageTransitionAlignment", mPoppler);
55
+ G_DEF_CLASS(POPPLER_TYPE_PAGE_TRANSITION_DIRECTION,
56
+ "PageTransitionDirection", mPoppler);
57
+ G_DEF_CLASS(POPPLER_TYPE_SELECTION_STYLE, "SelectionStyle", mPoppler);
58
+ G_DEF_CLASS(POPPLER_TYPE_FORM_BUTTON_TYPE, "FormButtonType", mPoppler);
59
+ G_DEF_CLASS(POPPLER_TYPE_FORM_TEXT_TYPE, "FormTextType", mPoppler);
60
+ G_DEF_CLASS(POPPLER_TYPE_FORM_CHOICE_TYPE, "FormChoiceType", mPoppler);
61
+
62
+ G_RENAME_NICK("3D", "TYPE_3D");
63
+ G_DEF_CLASS(POPPLER_TYPE_ANNOT_TYPE, "AnnotationType", mPoppler);
64
+ G_DEF_CLASS(POPPLER_TYPE_ANNOT_FLAG, "AnnotationFlag", mPoppler);
65
+ G_DEF_CLASS(POPPLER_TYPE_ANNOT_MARKUP_REPLY_TYPE,
66
+ "AnnotationMarkupReplyType", mPoppler);
67
+ G_RENAME_NICK("3D", "TYPE_3D");
68
+ G_DEF_CLASS(POPPLER_TYPE_ANNOT_EXTERNAL_DATA_TYPE,
69
+ "AnnotationExternalDataType", mPoppler);
70
+ # if !POPPLER_CHECK_VERSION(0, 9, 0)
71
+ G_DEF_CLASS(POPPLER_TYPE_ANNOT_TEXT_ICON, "AnnotationTextIcon", mPoppler);
72
+ # endif
73
+ G_DEF_CLASS(POPPLER_TYPE_ANNOT_TEXT_STATE, "AnnotationTextState", mPoppler);
74
+ G_DEF_CLASS(POPPLER_TYPE_ANNOT_FREE_TEXT_QUADDING,
75
+ "AnnotationFreeTextQuadding", mPoppler);
76
+
77
+
78
+ G_DEF_CLASS(POPPLER_TYPE_BACKEND, "Backend", mPoppler);
79
+
80
+ rb_define_module_function(mPoppler, "backend", get_backend, 0);
81
+ rb_define_module_function(mPoppler, "version", get_version, 0);
82
+ rb_define_module_function(mPoppler, "cairo_available?", cairo_available, 0);
83
+
84
+ Init_poppler_document(mPoppler);
85
+ Init_poppler_page(mPoppler);
86
+ Init_poppler_attachment(mPoppler);
87
+ Init_poppler_action(mPoppler);
88
+ Init_poppler_annotation(mPoppler);
89
+ Init_poppler_form_field(mPoppler);
90
+ }
@@ -0,0 +1,60 @@
1
+ #ifndef __RBPOPPLER_H__
2
+ #define __RBPOPPLER_H__
3
+
4
+ #include "rbpopplerversion.h"
5
+
6
+ #include <ruby.h>
7
+
8
+ #include <rbglib.h>
9
+ #include <rbgobject.h>
10
+
11
+ #include <poppler.h>
12
+ #include "rbglib.h"
13
+
14
+ #define RBPOPPLER_MAJOR_VERSION RBGLIB_MAJOR_VERSION
15
+ #define RBPOPPLER_MINOR_VERSION RBGLIB_MINOR_VERSION
16
+ #define RBPOPPLER_MICRO_VERSION RBGLIB_MICRO_VERSION
17
+
18
+ #ifndef POPPLER_TYPE_INDEX_ITER
19
+ # define POPPLER_TYPE_INDEX_ITER (poppler_index_iter_get_type ())
20
+ #endif
21
+ #ifndef POPPLER_TYPE_FONTS_ITER
22
+ # define POPPLER_TYPE_FONTS_ITER (poppler_fonts_iter_get_type ())
23
+ #endif
24
+
25
+ #ifndef POPPLER_TYPE_DEST
26
+ extern GType poppler_dest_get_type (void) G_GNUC_CONST;
27
+ # define POPPLER_TYPE_DEST (poppler_dest_get_type ())
28
+ # define RB_POPPLER_TYPE_DEST_NOT_DEFINED
29
+ #endif
30
+
31
+ #if defined(HAVE_RB_CAIRO_H) && defined(POPPLER_HAS_CAIRO)
32
+ # define RB_POPPLER_CAIRO_AVAILABLE 1
33
+ # include <rb_cairo.h>
34
+ #endif
35
+
36
+ #define POPPLER_RECT2RVAL(obj) (BOXED2RVAL(obj, POPPLER_TYPE_RECTANGLE))
37
+ #define RVAL2POPPLER_RECT(obj) ((PopplerRectangle *)RVAL2BOXED(obj, POPPLER_TYPE_RECTANGLE))
38
+
39
+ #ifdef POPPLER_TYPE_COLOR
40
+ extern PopplerColor *rb_poppler_ruby_object_to_color(VALUE color);
41
+ extern VALUE rb_poppler_ruby_object_from_color_with_free(PopplerColor *color);
42
+ # define RVAL2POPPLER_COLOR(obj) (rb_poppler_ruby_object_to_color(obj))
43
+ # define POPPLER_COLOR2RVAL(obj) (BOXED2RVAL(obj, POPPLER_TYPE_COLOR))
44
+ # define POPPLER_COLOR2RVAL_FREE(obj) (rb_poppler_ruby_object_from_color_with_free(obj))
45
+ #endif
46
+
47
+
48
+ #define POPPLER_ANNOT2RVAL(obj) (GOBJ2RVAL(obj))
49
+ #define RVAL2POPPLER_ANNOT(obj) (POPPLER_ANNOT(RVAL2GOBJ(obj)))
50
+
51
+ #define POPPLER_ACTION2RVAL(obj) (rb_poppler_ruby_object_from_action(obj))
52
+ #define RVAL2POPPLER_ACTION(obj) (rb_poppler_action_from_ruby_object(obj))
53
+ #define POPPLER_FORM_FIELD2RVAL(obj) (rb_poppler_ruby_object_from_form_field(obj))
54
+ #define RVAL2POPPLER_FORM_FIELD(obj) (POPPLER_FORM_FIELD(RVAL2GOBJ(obj)))
55
+
56
+ extern VALUE rb_poppler_ruby_object_from_action(PopplerAction *action);
57
+ extern PopplerAction *rb_poppler_action_from_ruby_object(VALUE action);
58
+ extern VALUE rb_poppler_ruby_object_from_form_field(PopplerFormField *field);
59
+
60
+ #endif
@@ -0,0 +1,24 @@
1
+ /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
+ /************************************************
3
+
4
+ rbpopplerversion.h -
5
+
6
+ This file was generated by mkmf-gnome2.rb.
7
+
8
+ ************************************************/
9
+
10
+ #ifndef __RBPOPPLER_VERSION_H__
11
+ #define __RBPOPPLER_VERSION_H__
12
+
13
+ #define POPPLER_MAJOR_VERSION (0)
14
+ #define POPPLER_MINOR_VERSION (12)
15
+ #define POPPLER_MICRO_VERSION (1)
16
+
17
+ #define POPPLER_CHECK_VERSION(major,minor,micro) \
18
+ (POPPLER_MAJOR_VERSION > (major) || \
19
+ (POPPLER_MAJOR_VERSION == (major) && POPPLER_MINOR_VERSION > (minor)) || \
20
+ (POPPLER_MAJOR_VERSION == (major) && POPPLER_MINOR_VERSION == (minor) && \
21
+ POPPLER_MICRO_VERSION >= (micro)))
22
+
23
+
24
+ #endif /* __RBPOPPLER_VERSION_H__ */
@@ -0,0 +1,47 @@
1
+ require 'open-uri'
2
+ require 'fileutils'
3
+
4
+ module PopplerTestUtils
5
+ def ensure_dir(dir)
6
+ FileUtils.mkdir_p(dir)
7
+ dir
8
+ end
9
+
10
+ def test_dir
11
+ File.expand_path(File.dirname(__FILE__))
12
+ end
13
+
14
+ def fixtures_dir
15
+ ensure_dir(File.join(test_dir, "fixtures"))
16
+ end
17
+
18
+ def tmp_dir
19
+ ensure_dir(File.join(test_dir, "tmp"))
20
+ end
21
+
22
+ def form_pdf
23
+ file = File.join(fixtures_dir, "form.pdf")
24
+ return file if File.exist?(file)
25
+ pdf = open("http://www.irs.gov/pub/irs-pdf/fw9.pdf").read
26
+ File.open(file, "wb") do |output|
27
+ output.print(pdf)
28
+ end
29
+ file
30
+ end
31
+
32
+ def image_pdf
33
+ File.join(fixtures_dir, "image.pdf")
34
+ end
35
+
36
+ def later_version?(major, minor, micro=nil)
37
+ micro ||= 0
38
+ (Poppler::BUILD_VERSION <=> [major, minor, micro]) >= 0
39
+ end
40
+
41
+ def only_poppler_version(major, minor, micro=nil)
42
+ micro ||= 0
43
+ unless later_version?(major, minor, micro)
44
+ omit("Require Poppler >= #{major}.#{minor}.#{micro}")
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ base_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
4
+
5
+ if system("which make > /dev/null")
6
+ system("cd #{base_dir.dump} && make > /dev/null") or exit(1)
7
+ end
8
+
9
+ glib_dir = File.expand_path(File.join(base_dir, "..", "glib"))
10
+ gtk_dir = File.expand_path(File.join(base_dir, "..", "gtk"))
11
+
12
+ $LOAD_PATH.unshift(glib_dir)
13
+ require 'test/glib-test-init'
14
+
15
+ [gtk_dir, glib_dir, base_dir].each do |dir|
16
+ $LOAD_PATH.unshift(File.join(dir, "src"))
17
+ $LOAD_PATH.unshift(File.join(dir, "src", "lib"))
18
+ end
19
+ require "poppler"
20
+
21
+ $LOAD_PATH.unshift(File.join(base_dir, "test"))
22
+ require 'poppler-test-utils'
23
+ class Test::Unit::TestCase
24
+ include PopplerTestUtils
25
+ end
26
+
27
+ exit Test::Unit::AutoRunner.run(true)
@@ -0,0 +1,84 @@
1
+ class TestAnnotation < Test::Unit::TestCase
2
+ def test_type
3
+ only_poppler_version(0, 7, 2)
4
+ assert_kind_of(Poppler::AnnotationType, annotation.type)
5
+ end
6
+
7
+ def test_contents
8
+ only_poppler_version(0, 7, 2)
9
+ assert_nil(annotation.contents)
10
+ end
11
+
12
+ def test_name
13
+ only_poppler_version(0, 7, 2)
14
+ assert_nil(annotation.name)
15
+ end
16
+
17
+ def test_modified
18
+ only_poppler_version(0, 7, 2)
19
+ assert_nil(annotation.modified)
20
+ end
21
+
22
+ def test_flags
23
+ only_poppler_version(0, 7, 2)
24
+ assert_kind_of(Poppler::AnnotationFlag, annotation.flags)
25
+ end
26
+
27
+ def test_color
28
+ only_poppler_version(0, 7, 2)
29
+ assert_nil(annotation.color)
30
+ end
31
+
32
+ def test_markup
33
+ only_poppler_version(0, 7, 2)
34
+ # We don't have a PDF that has annotation markup...
35
+ assert_method_defined(Poppler::AnnotationMarkup, :label)
36
+ assert_method_defined(Poppler::AnnotationMarkup, :popup_is_open?)
37
+ assert_method_defined(Poppler::AnnotationMarkup, :opacity)
38
+ assert_method_defined(Poppler::AnnotationMarkup, :date)
39
+ assert_method_defined(Poppler::AnnotationMarkup, :subject)
40
+ assert_method_defined(Poppler::AnnotationMarkup, :reply_to)
41
+ assert_method_defined(Poppler::AnnotationMarkup, :external_data)
42
+ end
43
+
44
+ def test_text
45
+ only_poppler_version(0, 7, 2)
46
+ # We don't have a PDF that has annotation text...
47
+ assert_method_defined(Poppler::AnnotationText, :open?)
48
+ assert_method_defined(Poppler::AnnotationText, :icon)
49
+ assert_method_defined(Poppler::AnnotationText, :state)
50
+ end
51
+
52
+ def test_free_text
53
+ only_poppler_version(0, 7, 2)
54
+ # We don't have a PDF that has annotation free text...
55
+ assert_method_defined(Poppler::AnnotationFreeText, :quadding)
56
+ assert_method_defined(Poppler::AnnotationFreeText, :callout_line)
57
+ end
58
+
59
+ def test_callout_line
60
+ only_poppler_version(0, 7, 2)
61
+ callout_line = Poppler::AnnotationCalloutLine.new(true,
62
+ 1.1, 2.2, 3.3,
63
+ 4.4, 5.5, 6.6)
64
+ assert(callout_line.multiline?)
65
+ assert_equal(1.1, callout_line.x1)
66
+ assert_equal(2.2, callout_line.y1)
67
+ assert_equal(3.3, callout_line.x2)
68
+ assert_equal(4.4, callout_line.y2)
69
+ assert_equal(5.5, callout_line.x3)
70
+ assert_equal(6.6, callout_line.y3)
71
+ assert_equal([true, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6], callout_line.to_a)
72
+ end
73
+
74
+ private
75
+ def annotation
76
+ document = Poppler::Document.new(form_pdf)
77
+ page = document[0]
78
+ page.annotation_mapping[0].annotation
79
+ end
80
+
81
+ def assert_method_defined(object, method)
82
+ assert_send([object, :method_defined?, method])
83
+ end
84
+ end
@@ -0,0 +1,26 @@
1
+ class TestColor < Test::Unit::TestCase
2
+ def test_initialize
3
+ only_poppler_version(0, 7, 2)
4
+ rose = Poppler::Color.new(65535, 0, 32639)
5
+ assert_equal([65535, 0, 32639], [rose.red, rose.green, rose.blue])
6
+ assert_equal([65535, 0, 32639], rose.to_a)
7
+ end
8
+
9
+ def test_accessor
10
+ only_poppler_version(0, 7, 2)
11
+ white = Poppler::Color.new(65535, 65535, 65535)
12
+ red = white.dup
13
+ red.green = 0
14
+ red.blue = 0
15
+ assert_equal([65535, 65535, 65535], [white.red, white.green, white.blue])
16
+ assert_equal([65535, 0, 0], [red.red, red.green, red.blue])
17
+ end
18
+
19
+ def test_inspect
20
+ only_poppler_version(0, 7, 2)
21
+ color = Poppler::Color.new(0, 32767, 65535)
22
+ rgb = '[0, 32767, 65535]'
23
+ assert_match(/\A#<Poppler::Color:.*: #{Regexp.escape(rgb)}>\z/,
24
+ color.inspect)
25
+ end
26
+ end
@@ -0,0 +1,30 @@
1
+ class TestConstants < Test::Unit::TestCase
2
+ def test_annotation
3
+ if later_version?(0, 7, 2)
4
+ assertion = :assert_const_defined
5
+ else
6
+ assertion = :assert_not_const_defined
7
+ end
8
+ send(assertion, Poppler, :AnnotationType)
9
+ if assertion == :assert_const_defined
10
+ assert_equal("3d", Poppler::AnnotationType::TYPE_3D.nick)
11
+ end
12
+ send(assertion, Poppler, :AnnotationFlag)
13
+ send(assertion, Poppler, :AnnotationMarkupReplyType)
14
+ send(assertion, Poppler, :AnnotationExternalDataType)
15
+ if assertion == :assert_const_defined
16
+ assert_equal("3d", Poppler::AnnotationExternalDataType::TYPE_3D.nick)
17
+ end
18
+ if later_version?(0, 9, 0)
19
+ assert_not_const_defined(Poppler, :AnnotationTextIcon)
20
+ else
21
+ send(assertion, Poppler, :AnnotationTextIcon)
22
+ end
23
+ send(assertion, Poppler, :AnnotationTextState)
24
+ send(assertion, Poppler, :AnnotationFreeTextQuadding)
25
+ end
26
+
27
+ def test_permissions
28
+ assert_const_defined(Poppler, :Permissions)
29
+ end
30
+ end