prune 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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
+