prune 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.ja.txt +16 -0
- data/CHANGELOG.txt +16 -0
- data/MIT-LICENSE.ja.txt +24 -0
- data/MIT-LICENSE.txt +20 -0
- data/Manifest.txt +77 -0
- data/PostInstall.txt +4 -0
- data/README.ja.rdoc +39 -0
- data/README.rdoc +39 -0
- data/Rakefile +28 -0
- data/demo/english_fonts.rb +66 -0
- data/demo/japanese_encodings_euc_jp.rb +27 -0
- data/demo/japanese_encodings_shift_jis.rb +27 -0
- data/demo/japanese_fonts.rb +54 -0
- data/demo/tables.rb +52 -0
- data/demo/text_decoration.rb +55 -0
- data/lib/prune.rb +90 -0
- data/lib/prune/constants.rb +39 -0
- data/lib/prune/document.rb +101 -0
- data/lib/prune/elements/base.rb +55 -0
- data/lib/prune/elements/catalog.rb +51 -0
- data/lib/prune/elements/font.rb +38 -0
- data/lib/prune/elements/font_descriptor.rb +38 -0
- data/lib/prune/elements/info.rb +44 -0
- data/lib/prune/elements/outlines.rb +19 -0
- data/lib/prune/elements/page.rb +115 -0
- data/lib/prune/elements/pages.rb +29 -0
- data/lib/prune/elements/procedure_sets.rb +22 -0
- data/lib/prune/elements/stream.rb +34 -0
- data/lib/prune/errors.rb +73 -0
- data/lib/prune/fonts/base.rb +92 -0
- data/lib/prune/fonts/base_en.rb +38 -0
- data/lib/prune/fonts/base_ja.rb +129 -0
- data/lib/prune/fonts/en/courier.rb +37 -0
- data/lib/prune/fonts/en/helvetica.rb +168 -0
- data/lib/prune/fonts/en/symbol.rb +60 -0
- data/lib/prune/fonts/en/times_roman.rb +168 -0
- data/lib/prune/fonts/en/zapf_dingbats.rb +60 -0
- data/lib/prune/fonts/ja/ms_gothic.rb +55 -0
- data/lib/prune/fonts/ja/ms_mincho.rb +55 -0
- data/lib/prune/fonts/ja/ms_p_gothic.rb +55 -0
- data/lib/prune/fonts/ja/ms_p_mincho.rb +55 -0
- data/lib/prune/fonts/ja/ms_pr_gothic.rb +55 -0
- data/lib/prune/fonts/ja/ms_ui_gothic.rb +55 -0
- data/lib/prune/functions.rb +18 -0
- data/lib/prune/p_objects/aliases.rb +37 -0
- data/lib/prune/p_objects/base.rb +45 -0
- data/lib/prune/p_objects/p_array.rb +62 -0
- data/lib/prune/p_objects/p_dictionary.rb +83 -0
- data/lib/prune/p_objects/p_hexadecimal_string.rb +27 -0
- data/lib/prune/p_objects/p_literal_string.rb +25 -0
- data/lib/prune/p_objects/p_name.rb +45 -0
- data/lib/prune/p_objects/p_stream.rb +29 -0
- data/lib/prune/parsers/base.rb +13 -0
- data/lib/prune/parsers/document/page/table/tr_parser.rb +77 -0
- data/lib/prune/parsers/document/page/table_parser.rb +32 -0
- data/lib/prune/parsers/document/page_parser.rb +91 -0
- data/lib/prune/parsers/document/property_parser.rb +45 -0
- data/lib/prune/parsers/document_parser.rb +26 -0
- data/lib/prune/shapes/base.rb +52 -0
- data/lib/prune/shapes/line.rb +55 -0
- data/lib/prune/shapes/rectangle.rb +64 -0
- data/lib/prune/shapes/text_box.rb +223 -0
- data/prune.gemspec +37 -0
- data/script/console +10 -0
- data/script/console.cmd +1 -0
- data/script/destroy +14 -0
- data/script/destroy.cmd +1 -0
- data/script/generate +14 -0
- data/script/generate.cmd +1 -0
- data/spec/prune/p_objects/p_array_spec.rb +46 -0
- data/spec/prune/p_objects/p_dictionary_spec.rb +61 -0
- data/spec/prune/p_objects/p_stream_spec.rb +29 -0
- data/spec/prune_spec.rb +38 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +11 -0
- data/tasks/prune.rake +38 -0
- data/tasks/rspec.rake +21 -0
- metadata +181 -0
@@ -0,0 +1,60 @@
|
|
1
|
+
# -*- coding:utf-8 -*-
|
2
|
+
|
3
|
+
module Prune
|
4
|
+
module Fonts
|
5
|
+
# Zapf dingbats font.
|
6
|
+
class ZapfDingbats < BaseEn
|
7
|
+
class << self
|
8
|
+
def key(options)
|
9
|
+
FontOptionError if bold?(options) || italic?(options)
|
10
|
+
PObjects.pn(font_name)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
WIDTHS = [
|
15
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
16
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
17
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
18
|
+
0, 0, 278, 974, 961, 974, 980, 719, 789, 790,
|
19
|
+
791, 690, 960, 939, 549, 855, 911, 933, 911, 945,
|
20
|
+
974, 755, 846, 762, 761, 571, 677, 763, 760, 759,
|
21
|
+
754, 494, 552, 537, 577, 692, 786, 788, 788, 790,
|
22
|
+
793, 794, 816, 823, 789, 841, 823, 833, 816, 831,
|
23
|
+
923, 744, 723, 749, 790, 792, 695, 776, 768, 792,
|
24
|
+
759, 707, 708, 682, 701, 826, 815, 789, 789, 707,
|
25
|
+
687, 696, 689, 786, 787, 713, 791, 785, 791, 873,
|
26
|
+
761, 762, 762, 759, 759, 892, 892, 788, 784, 438,
|
27
|
+
138, 277, 415, 392, 392, 668, 668, 0, 390, 390,
|
28
|
+
317, 317, 276, 276, 509, 509, 410, 410, 234, 234,
|
29
|
+
334, 334, 0, 0, 0, 0, 0, 0, 0, 0,
|
30
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
31
|
+
0, 732, 544, 544, 910, 667, 760, 760, 776, 595,
|
32
|
+
694, 626, 788, 788, 788, 788, 788, 788, 788, 788,
|
33
|
+
788, 788, 788, 788, 788, 788, 788, 788, 788, 788,
|
34
|
+
788, 788, 788, 788, 788, 788, 788, 788, 788, 788,
|
35
|
+
788, 788, 788, 788, 788, 788, 788, 788, 788, 788,
|
36
|
+
788, 788, 894, 838, 1016, 458, 748, 924, 748, 918,
|
37
|
+
927, 928, 928, 834, 873, 828, 924, 924, 917, 930,
|
38
|
+
931, 463, 883, 836, 836, 867, 867, 696, 696, 874,
|
39
|
+
0, 874, 760, 946, 771, 865, 771, 888, 967, 888,
|
40
|
+
831, 873, 927, 970, 918, 0
|
41
|
+
] unless const_defined?(:WIDTHS)
|
42
|
+
|
43
|
+
def initialize(document, options = {})
|
44
|
+
super(document)
|
45
|
+
self.name = self.class.key(options)
|
46
|
+
self.base_font = pn(:ZapfDingbats)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Get width of the text.
|
50
|
+
def width(string, font_size)
|
51
|
+
string_base_width = string.bytes.inject(0){|result, byte|
|
52
|
+
byte_width = WIDTHS[byte] || 1000
|
53
|
+
result + byte_width
|
54
|
+
}
|
55
|
+
string_base_width * font_size / 1000
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# -*- coding:utf-8 -*-
|
2
|
+
|
3
|
+
module Prune
|
4
|
+
module Fonts
|
5
|
+
class MsGothic < BaseJa
|
6
|
+
class << self
|
7
|
+
def key(options)
|
8
|
+
key = font_name
|
9
|
+
key << "_bold" if bold?(options)
|
10
|
+
key << "_italic" if italic?(options)
|
11
|
+
PObjects.pn(key)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(document, options = {})
|
16
|
+
super(document)
|
17
|
+
self.name = self.class.key(options)
|
18
|
+
if bold?(options) && italic?(options)
|
19
|
+
self.base_font = pn("MS-Gothic,BoldItalic")
|
20
|
+
self.flags = calculate_flags(
|
21
|
+
:fixed_pitch => true,
|
22
|
+
:symbolic => true,
|
23
|
+
:italic => true,
|
24
|
+
:force_bold => true)
|
25
|
+
self.italic_angle = -11
|
26
|
+
self.stem_v = 156
|
27
|
+
elsif bold?(options)
|
28
|
+
self.base_font = pn("MS-Gothic,Bold")
|
29
|
+
self.flags = calculate_flags(
|
30
|
+
:fixed_pitch => true,
|
31
|
+
:symbolic => true,
|
32
|
+
:force_bold => true)
|
33
|
+
self.italic_angle = 0
|
34
|
+
self.stem_v = 156
|
35
|
+
elsif italic?(options)
|
36
|
+
self.base_font = pn("MS-Gothic,Italic")
|
37
|
+
self.flags = calculate_flags(
|
38
|
+
:fixed_pitch => true,
|
39
|
+
:symbolic => true,
|
40
|
+
:italic => true)
|
41
|
+
self.italic_angle = -11
|
42
|
+
self.stem_v = 78
|
43
|
+
else
|
44
|
+
self.base_font = pn("MS-Gothic")
|
45
|
+
self.flags = calculate_flags(
|
46
|
+
:fixed_pitch => true,
|
47
|
+
:symbolic => true)
|
48
|
+
self.italic_angle = 0
|
49
|
+
self.stem_v = 78
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# -*- coding:utf-8 -*-
|
2
|
+
|
3
|
+
module Prune
|
4
|
+
module Fonts
|
5
|
+
class MsMincho < BaseJa
|
6
|
+
class << self
|
7
|
+
def key(options)
|
8
|
+
key = font_name
|
9
|
+
key << "_bold" if bold?(options)
|
10
|
+
key << "_italic" if italic?(options)
|
11
|
+
PObjects.pn(key)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(document, options = {})
|
16
|
+
super(document)
|
17
|
+
self.name = self.class.key(options)
|
18
|
+
if bold?(options) && italic?(options)
|
19
|
+
self.base_font = pn("MS-Mincho,BoldItalic")
|
20
|
+
self.flags = calculate_flags(
|
21
|
+
:fixed_pitch => true,
|
22
|
+
:symbolic => true,
|
23
|
+
:italic => true,
|
24
|
+
:force_bold => true)
|
25
|
+
self.italic_angle = -11
|
26
|
+
self.stem_v = 156
|
27
|
+
elsif bold?(options)
|
28
|
+
self.base_font = pn("MS-Mincho,Bold")
|
29
|
+
self.flags = calculate_flags(
|
30
|
+
:fixed_pitch => true,
|
31
|
+
:symbolic => true,
|
32
|
+
:force_bold => true)
|
33
|
+
self.italic_angle = 0
|
34
|
+
self.stem_v = 156
|
35
|
+
elsif italic?(options)
|
36
|
+
self.base_font = pn("MS-Mincho,Italic")
|
37
|
+
self.flags = calculate_flags(
|
38
|
+
:fixed_pitch => true,
|
39
|
+
:symbolic => true,
|
40
|
+
:italic => true)
|
41
|
+
self.italic_angle = -11
|
42
|
+
self.stem_v = 78
|
43
|
+
else
|
44
|
+
self.base_font = pn("MS-Mincho")
|
45
|
+
self.flags = calculate_flags(
|
46
|
+
:fixed_pitch => true,
|
47
|
+
:symbolic => true)
|
48
|
+
self.italic_angle = 0
|
49
|
+
self.stem_v = 78
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# -*- coding:utf-8 -*-
|
2
|
+
|
3
|
+
module Prune
|
4
|
+
module Fonts
|
5
|
+
class MsPGothic < BaseJa
|
6
|
+
class << self
|
7
|
+
def key(options)
|
8
|
+
key = font_name
|
9
|
+
key << "_bold" if bold?(options)
|
10
|
+
key << "_italic" if italic?(options)
|
11
|
+
PObjects.pn(key)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(document, options = {})
|
16
|
+
super(document)
|
17
|
+
self.name = self.class.key(options)
|
18
|
+
if bold?(options) && italic?(options)
|
19
|
+
self.base_font = pn("MS-PGothic,BoldItalic")
|
20
|
+
self.flags = calculate_flags(
|
21
|
+
:fixed_pitch => true,
|
22
|
+
:symbolic => true,
|
23
|
+
:italic => true,
|
24
|
+
:force_bold => true)
|
25
|
+
self.italic_angle = -11
|
26
|
+
self.stem_v = 156
|
27
|
+
elsif bold?(options)
|
28
|
+
self.base_font = pn("MS-PGothic,Bold")
|
29
|
+
self.flags = calculate_flags(
|
30
|
+
:fixed_pitch => true,
|
31
|
+
:symbolic => true,
|
32
|
+
:force_bold => true)
|
33
|
+
self.italic_angle = 0
|
34
|
+
self.stem_v = 156
|
35
|
+
elsif italic?(options)
|
36
|
+
self.base_font = pn("MS-PGothic,Italic")
|
37
|
+
self.flags = calculate_flags(
|
38
|
+
:fixed_pitch => true,
|
39
|
+
:symbolic => true,
|
40
|
+
:italic => true)
|
41
|
+
self.italic_angle = -11
|
42
|
+
self.stem_v = 78
|
43
|
+
else
|
44
|
+
self.base_font = pn("MS-PGothic")
|
45
|
+
self.flags = calculate_flags(
|
46
|
+
:fixed_pitch => true,
|
47
|
+
:symbolic => true)
|
48
|
+
self.italic_angle = 0
|
49
|
+
self.stem_v = 78
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# -*- coding:utf-8 -*-
|
2
|
+
|
3
|
+
module Prune
|
4
|
+
module Fonts
|
5
|
+
class MsPMincho < BaseJa
|
6
|
+
class << self
|
7
|
+
def key(options)
|
8
|
+
key = font_name
|
9
|
+
key << "_bold" if bold?(options)
|
10
|
+
key << "_italic" if italic?(options)
|
11
|
+
PObjects.pn(key)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(document, options = {})
|
16
|
+
super(document)
|
17
|
+
self.name = self.class.key(options)
|
18
|
+
if bold?(options) && italic?(options)
|
19
|
+
self.base_font = pn("MS-PMincho,BoldItalic")
|
20
|
+
self.flags = calculate_flags(
|
21
|
+
:fixed_pitch => true,
|
22
|
+
:symbolic => true,
|
23
|
+
:italic => true,
|
24
|
+
:force_bold => true)
|
25
|
+
self.italic_angle = -11
|
26
|
+
self.stem_v = 156
|
27
|
+
elsif bold?(options)
|
28
|
+
self.base_font = pn("MS-PMincho,Bold")
|
29
|
+
self.flags = calculate_flags(
|
30
|
+
:fixed_pitch => true,
|
31
|
+
:symbolic => true,
|
32
|
+
:force_bold => true)
|
33
|
+
self.italic_angle = 0
|
34
|
+
self.stem_v = 156
|
35
|
+
elsif italic?(options)
|
36
|
+
self.base_font = pn("MS-PMincho,Italic")
|
37
|
+
self.flags = calculate_flags(
|
38
|
+
:fixed_pitch => true,
|
39
|
+
:symbolic => true,
|
40
|
+
:italic => true)
|
41
|
+
self.italic_angle = -11
|
42
|
+
self.stem_v = 78
|
43
|
+
else
|
44
|
+
self.base_font = pn("MS-PMincho")
|
45
|
+
self.flags = calculate_flags(
|
46
|
+
:fixed_pitch => true,
|
47
|
+
:symbolic => true)
|
48
|
+
self.italic_angle = 0
|
49
|
+
self.stem_v = 78
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# -*- coding:utf-8 -*-
|
2
|
+
|
3
|
+
module Prune
|
4
|
+
module Fonts
|
5
|
+
class MsPrGothic < BaseJa
|
6
|
+
class << self
|
7
|
+
def key(options)
|
8
|
+
key = font_name
|
9
|
+
key << "_bold" if bold?(options)
|
10
|
+
key << "_italic" if italic?(options)
|
11
|
+
PObjects.pn(key)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(document, options = {})
|
16
|
+
super(document)
|
17
|
+
self.name = self.class.key(options)
|
18
|
+
if bold?(options) && italic?(options)
|
19
|
+
self.base_font = pn("MS-PRGothic,BoldItalic")
|
20
|
+
self.flags = calculate_flags(
|
21
|
+
:fixed_pitch => true,
|
22
|
+
:symbolic => true,
|
23
|
+
:italic => true,
|
24
|
+
:force_bold => true)
|
25
|
+
self.italic_angle = -11
|
26
|
+
self.stem_v = 156
|
27
|
+
elsif bold?(options)
|
28
|
+
self.base_font = pn("MS-PRGothic,Bold")
|
29
|
+
self.flags = calculate_flags(
|
30
|
+
:fixed_pitch => true,
|
31
|
+
:symbolic => true,
|
32
|
+
:force_bold => true)
|
33
|
+
self.italic_angle = 0
|
34
|
+
self.stem_v = 156
|
35
|
+
elsif italic?(options)
|
36
|
+
self.base_font = pn("MS-PRGothic,Italic")
|
37
|
+
self.flags = calculate_flags(
|
38
|
+
:fixed_pitch => true,
|
39
|
+
:symbolic => true,
|
40
|
+
:italic => true)
|
41
|
+
self.italic_angle = -11
|
42
|
+
self.stem_v = 78
|
43
|
+
else
|
44
|
+
self.base_font = pn("MS-PRGothic")
|
45
|
+
self.flags = calculate_flags(
|
46
|
+
:fixed_pitch => true,
|
47
|
+
:symbolic => true)
|
48
|
+
self.italic_angle = 0
|
49
|
+
self.stem_v = 78
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# -*- coding:utf-8 -*-
|
2
|
+
|
3
|
+
module Prune
|
4
|
+
module Fonts
|
5
|
+
class MsUiGothic < BaseJa
|
6
|
+
class << self
|
7
|
+
def key(options)
|
8
|
+
key = font_name
|
9
|
+
key << "_bold" if bold?(options)
|
10
|
+
key << "_italic" if italic?(options)
|
11
|
+
PObjects.pn(key)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(document, options = {})
|
16
|
+
super(document)
|
17
|
+
self.name = self.class.key(options)
|
18
|
+
if bold?(options) && italic?(options)
|
19
|
+
self.base_font = pn("MS-UIGothic,BoldItalic")
|
20
|
+
self.flags = calculate_flags(
|
21
|
+
:fixed_pitch => true,
|
22
|
+
:symbolic => true,
|
23
|
+
:italic => true,
|
24
|
+
:force_bold => true)
|
25
|
+
self.italic_angle = -11
|
26
|
+
self.stem_v = 156
|
27
|
+
elsif bold?(options)
|
28
|
+
self.base_font = pn("MS-UIGothic,Bold")
|
29
|
+
self.flags = calculate_flags(
|
30
|
+
:fixed_pitch => true,
|
31
|
+
:symbolic => true,
|
32
|
+
:force_bold => true)
|
33
|
+
self.italic_angle = 0
|
34
|
+
self.stem_v = 156
|
35
|
+
elsif italic?(options)
|
36
|
+
self.base_font = pn("MS-UIGothic,Italic")
|
37
|
+
self.flags = calculate_flags(
|
38
|
+
:fixed_pitch => true,
|
39
|
+
:symbolic => true,
|
40
|
+
:italic => true)
|
41
|
+
self.italic_angle = -11
|
42
|
+
self.stem_v = 78
|
43
|
+
else
|
44
|
+
self.base_font = pn("MS-UIGothic")
|
45
|
+
self.flags = calculate_flags(
|
46
|
+
:fixed_pitch => true,
|
47
|
+
:symbolic => true)
|
48
|
+
self.italic_angle = 0
|
49
|
+
self.stem_v = 78
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# -*- coding:utf-8 -*-
|
2
|
+
|
3
|
+
module Prune
|
4
|
+
module Functions
|
5
|
+
# Convert millimeter to points.
|
6
|
+
def mm_to_pt(mm)
|
7
|
+
pt = mm * 72.0 / 25.4
|
8
|
+
(pt * 100).round / 100.0
|
9
|
+
end
|
10
|
+
|
11
|
+
# Convert points to millimeter.
|
12
|
+
def pt_to_mm(pt)
|
13
|
+
mm = pt * 25.4 / 72.0
|
14
|
+
(mm * 100).round / 100.0
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# -*- coding:utf-8 -*-
|
2
|
+
|
3
|
+
module Prune
|
4
|
+
module PObjects
|
5
|
+
module_function
|
6
|
+
# Alias for PArray.new
|
7
|
+
def pa(*args)
|
8
|
+
PArray.new(*args)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Alias for PDictionary.new
|
12
|
+
def pd(hash = {})
|
13
|
+
PDictionary.new(hash)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Alias for PHexadecimalString.new
|
17
|
+
def ph(string)
|
18
|
+
PHexadecimalString.new(string)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Alias for PLiteralString.new
|
22
|
+
def pl(string)
|
23
|
+
PLiteralString.new(string)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Alias for PName.new
|
27
|
+
def pn(name)
|
28
|
+
PName.new(name)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Alias for PStream.new
|
32
|
+
def ps
|
33
|
+
PStream.new
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|