prune 0.0.4

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.
Files changed (78) hide show
  1. data/CHANGELOG.ja.txt +16 -0
  2. data/CHANGELOG.txt +16 -0
  3. data/MIT-LICENSE.ja.txt +24 -0
  4. data/MIT-LICENSE.txt +20 -0
  5. data/Manifest.txt +77 -0
  6. data/PostInstall.txt +4 -0
  7. data/README.ja.rdoc +39 -0
  8. data/README.rdoc +39 -0
  9. data/Rakefile +28 -0
  10. data/demo/english_fonts.rb +66 -0
  11. data/demo/japanese_encodings_euc_jp.rb +27 -0
  12. data/demo/japanese_encodings_shift_jis.rb +27 -0
  13. data/demo/japanese_fonts.rb +54 -0
  14. data/demo/tables.rb +52 -0
  15. data/demo/text_decoration.rb +55 -0
  16. data/lib/prune.rb +90 -0
  17. data/lib/prune/constants.rb +39 -0
  18. data/lib/prune/document.rb +101 -0
  19. data/lib/prune/elements/base.rb +55 -0
  20. data/lib/prune/elements/catalog.rb +51 -0
  21. data/lib/prune/elements/font.rb +38 -0
  22. data/lib/prune/elements/font_descriptor.rb +38 -0
  23. data/lib/prune/elements/info.rb +44 -0
  24. data/lib/prune/elements/outlines.rb +19 -0
  25. data/lib/prune/elements/page.rb +115 -0
  26. data/lib/prune/elements/pages.rb +29 -0
  27. data/lib/prune/elements/procedure_sets.rb +22 -0
  28. data/lib/prune/elements/stream.rb +34 -0
  29. data/lib/prune/errors.rb +73 -0
  30. data/lib/prune/fonts/base.rb +92 -0
  31. data/lib/prune/fonts/base_en.rb +38 -0
  32. data/lib/prune/fonts/base_ja.rb +129 -0
  33. data/lib/prune/fonts/en/courier.rb +37 -0
  34. data/lib/prune/fonts/en/helvetica.rb +168 -0
  35. data/lib/prune/fonts/en/symbol.rb +60 -0
  36. data/lib/prune/fonts/en/times_roman.rb +168 -0
  37. data/lib/prune/fonts/en/zapf_dingbats.rb +60 -0
  38. data/lib/prune/fonts/ja/ms_gothic.rb +55 -0
  39. data/lib/prune/fonts/ja/ms_mincho.rb +55 -0
  40. data/lib/prune/fonts/ja/ms_p_gothic.rb +55 -0
  41. data/lib/prune/fonts/ja/ms_p_mincho.rb +55 -0
  42. data/lib/prune/fonts/ja/ms_pr_gothic.rb +55 -0
  43. data/lib/prune/fonts/ja/ms_ui_gothic.rb +55 -0
  44. data/lib/prune/functions.rb +18 -0
  45. data/lib/prune/p_objects/aliases.rb +37 -0
  46. data/lib/prune/p_objects/base.rb +45 -0
  47. data/lib/prune/p_objects/p_array.rb +62 -0
  48. data/lib/prune/p_objects/p_dictionary.rb +83 -0
  49. data/lib/prune/p_objects/p_hexadecimal_string.rb +27 -0
  50. data/lib/prune/p_objects/p_literal_string.rb +25 -0
  51. data/lib/prune/p_objects/p_name.rb +45 -0
  52. data/lib/prune/p_objects/p_stream.rb +29 -0
  53. data/lib/prune/parsers/base.rb +13 -0
  54. data/lib/prune/parsers/document/page/table/tr_parser.rb +77 -0
  55. data/lib/prune/parsers/document/page/table_parser.rb +32 -0
  56. data/lib/prune/parsers/document/page_parser.rb +91 -0
  57. data/lib/prune/parsers/document/property_parser.rb +45 -0
  58. data/lib/prune/parsers/document_parser.rb +26 -0
  59. data/lib/prune/shapes/base.rb +52 -0
  60. data/lib/prune/shapes/line.rb +55 -0
  61. data/lib/prune/shapes/rectangle.rb +64 -0
  62. data/lib/prune/shapes/text_box.rb +223 -0
  63. data/prune.gemspec +37 -0
  64. data/script/console +10 -0
  65. data/script/console.cmd +1 -0
  66. data/script/destroy +14 -0
  67. data/script/destroy.cmd +1 -0
  68. data/script/generate +14 -0
  69. data/script/generate.cmd +1 -0
  70. data/spec/prune/p_objects/p_array_spec.rb +46 -0
  71. data/spec/prune/p_objects/p_dictionary_spec.rb +61 -0
  72. data/spec/prune/p_objects/p_stream_spec.rb +29 -0
  73. data/spec/prune_spec.rb +38 -0
  74. data/spec/spec.opts +1 -0
  75. data/spec/spec_helper.rb +11 -0
  76. data/tasks/prune.rake +38 -0
  77. data/tasks/rspec.rake +21 -0
  78. 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
+