thinreports 0.9.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (213) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/test.yml +39 -0
  3. data/.gitignore +1 -0
  4. data/CHANGELOG.md +59 -2
  5. data/Dockerfile +12 -0
  6. data/Gemfile +7 -4
  7. data/README.md +44 -22
  8. data/Rakefile +14 -31
  9. data/lib/thinreports.rb +16 -15
  10. data/lib/thinreports/config.rb +2 -24
  11. data/lib/thinreports/core/errors.rb +6 -17
  12. data/lib/thinreports/core/format/base.rb +62 -61
  13. data/lib/thinreports/core/shape.rb +10 -12
  14. data/lib/thinreports/core/shape/base.rb +3 -12
  15. data/lib/thinreports/core/shape/base/interface.rb +34 -32
  16. data/lib/thinreports/core/shape/base/internal.rb +45 -43
  17. data/lib/thinreports/core/shape/basic.rb +12 -12
  18. data/lib/thinreports/core/shape/basic/block_format.rb +8 -6
  19. data/lib/thinreports/core/shape/basic/block_interface.rb +24 -22
  20. data/lib/thinreports/core/shape/basic/block_internal.rb +28 -26
  21. data/lib/thinreports/core/shape/basic/format.rb +11 -9
  22. data/lib/thinreports/core/shape/basic/interface.rb +79 -77
  23. data/lib/thinreports/core/shape/basic/internal.rb +17 -14
  24. data/lib/thinreports/core/shape/image_block.rb +9 -9
  25. data/lib/thinreports/core/shape/image_block/format.rb +7 -5
  26. data/lib/thinreports/core/shape/image_block/interface.rb +15 -13
  27. data/lib/thinreports/core/shape/image_block/internal.rb +10 -8
  28. data/lib/thinreports/core/shape/list.rb +13 -13
  29. data/lib/thinreports/core/shape/list/format.rb +83 -77
  30. data/lib/thinreports/core/shape/list/manager.rb +179 -176
  31. data/lib/thinreports/core/shape/list/page.rb +91 -93
  32. data/lib/thinreports/core/shape/list/page_state.rb +42 -40
  33. data/lib/thinreports/core/shape/list/section_format.rb +28 -26
  34. data/lib/thinreports/core/shape/list/section_interface.rb +42 -40
  35. data/lib/thinreports/core/shape/list/section_internal.rb +21 -19
  36. data/lib/thinreports/core/shape/manager.rb +4 -13
  37. data/lib/thinreports/core/shape/manager/format.rb +21 -19
  38. data/lib/thinreports/core/shape/manager/internal.rb +87 -84
  39. data/lib/thinreports/core/shape/manager/target.rb +93 -95
  40. data/lib/thinreports/core/shape/page_number.rb +9 -9
  41. data/lib/thinreports/core/shape/page_number/format.rb +20 -18
  42. data/lib/thinreports/core/shape/page_number/interface.rb +20 -18
  43. data/lib/thinreports/core/shape/page_number/internal.rb +46 -44
  44. data/lib/thinreports/core/shape/style.rb +5 -14
  45. data/lib/thinreports/core/shape/style/base.rb +121 -120
  46. data/lib/thinreports/core/shape/style/basic.rb +12 -10
  47. data/lib/thinreports/core/shape/style/graphic.rb +35 -33
  48. data/lib/thinreports/core/shape/style/text.rb +113 -107
  49. data/lib/thinreports/core/shape/text.rb +9 -9
  50. data/lib/thinreports/core/shape/text/format.rb +10 -9
  51. data/lib/thinreports/core/shape/text/interface.rb +13 -11
  52. data/lib/thinreports/core/shape/text/internal.rb +14 -12
  53. data/lib/thinreports/core/shape/text_block.rb +10 -10
  54. data/lib/thinreports/core/shape/text_block/format.rb +35 -33
  55. data/lib/thinreports/core/shape/text_block/formatter.rb +26 -24
  56. data/lib/thinreports/core/shape/text_block/formatter/basic.rb +25 -25
  57. data/lib/thinreports/core/shape/text_block/formatter/datetime.rb +15 -12
  58. data/lib/thinreports/core/shape/text_block/formatter/number.rb +52 -34
  59. data/lib/thinreports/core/shape/text_block/formatter/padding.rb +17 -14
  60. data/lib/thinreports/core/shape/text_block/interface.rb +25 -23
  61. data/lib/thinreports/core/shape/text_block/internal.rb +66 -68
  62. data/lib/thinreports/core/utils.rb +7 -3
  63. data/lib/thinreports/generator/pdf.rb +24 -25
  64. data/lib/thinreports/generator/pdf/document.rb +109 -110
  65. data/lib/thinreports/generator/pdf/document/draw_shape.rb +57 -51
  66. data/lib/thinreports/generator/pdf/document/draw_template_items.rb +50 -47
  67. data/lib/thinreports/generator/pdf/document/font.rb +67 -58
  68. data/lib/thinreports/generator/pdf/document/graphics.rb +32 -33
  69. data/lib/thinreports/generator/pdf/document/graphics/attributes.rb +121 -121
  70. data/lib/thinreports/generator/pdf/document/graphics/basic.rb +112 -114
  71. data/lib/thinreports/generator/pdf/document/graphics/image.rb +58 -150
  72. data/lib/thinreports/generator/pdf/document/graphics/text.rb +149 -137
  73. data/lib/thinreports/generator/pdf/document/page.rb +60 -64
  74. data/lib/thinreports/generator/pdf/document/parse_color.rb +37 -37
  75. data/lib/thinreports/generator/pdf/drawer/base.rb +41 -41
  76. data/lib/thinreports/generator/pdf/drawer/list.rb +56 -54
  77. data/lib/thinreports/generator/pdf/drawer/list_section.rb +42 -40
  78. data/lib/thinreports/generator/pdf/drawer/page.rb +101 -96
  79. data/lib/thinreports/generator/pdf/prawn_ext.rb +4 -30
  80. data/lib/thinreports/generator/pdf/prawn_ext/calc_image_dimensions.rb +32 -0
  81. data/lib/thinreports/generator/pdf/prawn_ext/width_of.rb +35 -0
  82. data/lib/thinreports/layout.rb +5 -7
  83. data/lib/thinreports/layout/base.rb +5 -9
  84. data/lib/thinreports/layout/format.rb +17 -13
  85. data/lib/thinreports/layout/legacy_schema.rb +17 -13
  86. data/lib/thinreports/layout/version.rb +22 -25
  87. data/lib/thinreports/report.rb +4 -6
  88. data/lib/thinreports/report/base.rb +24 -51
  89. data/lib/thinreports/report/internal.rb +13 -15
  90. data/lib/thinreports/report/page.rb +5 -11
  91. data/lib/thinreports/version.rb +2 -2
  92. data/thinreports.gemspec +10 -19
  93. metadata +13 -288
  94. data/.travis.yml +0 -19
  95. data/examples/character_spacing/character_spacing.rb +0 -8
  96. data/examples/character_spacing/character_spacing.tlf +0 -293
  97. data/examples/dynamic_image/dynamic_image.rb +0 -31
  98. data/examples/dynamic_image/dynamic_image.tlf +0 -661
  99. data/examples/dynamic_image/img200x100.png +0 -0
  100. data/examples/dynamic_image/img50x50.png +0 -0
  101. data/examples/dynamic_style/dynamic_style.rb +0 -150
  102. data/examples/dynamic_style/dynamic_style.tlf +0 -1835
  103. data/examples/dynamic_style/dynamic_style_in_list.tlf +0 -344
  104. data/examples/dynamic_style/image.png +0 -0
  105. data/examples/eudc/eudc.rb +0 -20
  106. data/examples/eudc/eudc.tlf +0 -180
  107. data/examples/eudc/eudc.ttf +0 -0
  108. data/examples/helper.rb +0 -50
  109. data/examples/hidden_shapes/hidden_shapes.rb +0 -9
  110. data/examples/hidden_shapes/hidden_shapes.tlf +0 -449
  111. data/examples/list_events/list_events.rb +0 -32
  112. data/examples/list_events/list_events.tlf +0 -361
  113. data/examples/list_manual_generation/list_manual_generation.rb +0 -22
  114. data/examples/list_manual_generation/list_manual_generation.tlf +0 -132
  115. data/examples/list_page_number/list_page_number.rb +0 -17
  116. data/examples/list_page_number/list_page_number.tlf +0 -254
  117. data/examples/page_number/page_number.rb +0 -33
  118. data/examples/page_number/page_number.tlf +0 -215
  119. data/examples/palleted_png/palleted_png.png +0 -0
  120. data/examples/palleted_png/palleted_png.rb +0 -11
  121. data/examples/palleted_png/palleted_png.tlf +0 -47
  122. data/examples/password_setting/password_setting.rb +0 -10
  123. data/examples/password_setting/password_setting.tlf +0 -45
  124. data/examples/report_callbacks/report_callbacks.rb +0 -14
  125. data/examples/report_callbacks/report_callbacks.tlf +0 -147
  126. data/examples/single_line_tblock/single_line_tblock.rb +0 -13
  127. data/examples/single_line_tblock/single_line_tblock.tlf +0 -170
  128. data/examples/tblock_overflow/tblock_overflow.rb +0 -20
  129. data/examples/tblock_overflow/tblock_overflow.tlf +0 -538
  130. data/examples/tblock_styles/font_size.tlf +0 -383
  131. data/examples/tblock_styles/tblock_styles.rb +0 -43
  132. data/examples/tblock_styles/tblock_styles.tlf +0 -889
  133. data/examples/text_align/text_align.rb +0 -8
  134. data/examples/text_align/text_align.tlf +0 -241
  135. data/examples/typeB_page_size/B4_ISO.tlf +0 -45
  136. data/examples/typeB_page_size/B4_JIS.tlf +0 -45
  137. data/examples/typeB_page_size/typeB_page_size.rb +0 -17
  138. data/examples/word_wrap/word_wrap.rb +0 -26
  139. data/examples/word_wrap/word_wrap.tlf +0 -297
  140. data/lib/thinreports/generator.rb +0 -29
  141. data/lib/thinreports/generator/base.rb +0 -40
  142. data/lib/thinreports/generator/configuration.rb +0 -31
  143. data/lib/thinreports/report/events.rb +0 -32
  144. data/test/data/font.ttf +0 -0
  145. data/test/data/image_normal.jpg +0 -0
  146. data/test/data/image_normal.png +0 -0
  147. data/test/data/image_normal_jpg_noext +0 -0
  148. data/test/data/image_normal_png_noext +0 -0
  149. data/test/data/image_pallete_based.png +0 -0
  150. data/test/data/legacy_layout/all-items.tlf +0 -1
  151. data/test/schema_helper.rb +0 -121
  152. data/test/test_helper.rb +0 -42
  153. data/test/tmp/.gitkeep +0 -0
  154. data/test/unit/core/format/test_base.rb +0 -152
  155. data/test/unit/core/shape/base/test_internal.rb +0 -87
  156. data/test/unit/core/shape/basic/test_block_format.rb +0 -23
  157. data/test/unit/core/shape/basic/test_block_interface.rb +0 -29
  158. data/test/unit/core/shape/basic/test_block_internal.rb +0 -55
  159. data/test/unit/core/shape/basic/test_format.rb +0 -37
  160. data/test/unit/core/shape/basic/test_interface.rb +0 -108
  161. data/test/unit/core/shape/basic/test_internal.rb +0 -55
  162. data/test/unit/core/shape/image_block/test_interface.rb +0 -24
  163. data/test/unit/core/shape/image_block/test_internal.rb +0 -31
  164. data/test/unit/core/shape/list/test_format.rb +0 -111
  165. data/test/unit/core/shape/list/test_manager.rb +0 -67
  166. data/test/unit/core/shape/list/test_page.rb +0 -82
  167. data/test/unit/core/shape/list/test_page_state.rb +0 -31
  168. data/test/unit/core/shape/list/test_section_format.rb +0 -36
  169. data/test/unit/core/shape/list/test_section_interface.rb +0 -75
  170. data/test/unit/core/shape/list/test_section_internal.rb +0 -50
  171. data/test/unit/core/shape/manager/test_format.rb +0 -38
  172. data/test/unit/core/shape/manager/test_internal.rb +0 -132
  173. data/test/unit/core/shape/manager/test_target.rb +0 -140
  174. data/test/unit/core/shape/page_number/test_format.rb +0 -55
  175. data/test/unit/core/shape/page_number/test_interface.rb +0 -33
  176. data/test/unit/core/shape/page_number/test_internal.rb +0 -81
  177. data/test/unit/core/shape/styles/test_base.rb +0 -191
  178. data/test/unit/core/shape/styles/test_basic.rb +0 -24
  179. data/test/unit/core/shape/styles/test_graphic.rb +0 -50
  180. data/test/unit/core/shape/styles/test_text.rb +0 -97
  181. data/test/unit/core/shape/text/test_format.rb +0 -44
  182. data/test/unit/core/shape/text/test_internal.rb +0 -20
  183. data/test/unit/core/shape/text_block/formatter/test_basic.rb +0 -24
  184. data/test/unit/core/shape/text_block/formatter/test_datetime.rb +0 -49
  185. data/test/unit/core/shape/text_block/formatter/test_number.rb +0 -76
  186. data/test/unit/core/shape/text_block/formatter/test_padding.rb +0 -77
  187. data/test/unit/core/shape/text_block/test_format.rb +0 -169
  188. data/test/unit/core/shape/text_block/test_formatter.rb +0 -28
  189. data/test/unit/core/shape/text_block/test_interface.rb +0 -63
  190. data/test/unit/core/shape/text_block/test_internal.rb +0 -128
  191. data/test/unit/core/test_shape.rb +0 -52
  192. data/test/unit/core/test_utils.rb +0 -68
  193. data/test/unit/generator/pdf/document/graphics/test_attributes.rb +0 -135
  194. data/test/unit/generator/pdf/document/graphics/test_basic.rb +0 -45
  195. data/test/unit/generator/pdf/document/graphics/test_image.rb +0 -150
  196. data/test/unit/generator/pdf/document/graphics/test_text.rb +0 -171
  197. data/test/unit/generator/pdf/document/test_font.rb +0 -84
  198. data/test/unit/generator/pdf/document/test_graphics.rb +0 -42
  199. data/test/unit/generator/pdf/document/test_page.rb +0 -122
  200. data/test/unit/generator/pdf/document/test_parse_color.rb +0 -30
  201. data/test/unit/generator/pdf/test_document.rb +0 -20
  202. data/test/unit/generator/test_base.rb +0 -40
  203. data/test/unit/generator/test_configuration.rb +0 -21
  204. data/test/unit/generator/test_pdf.rb +0 -24
  205. data/test/unit/layout/test_base.rb +0 -41
  206. data/test/unit/layout/test_format.rb +0 -100
  207. data/test/unit/layout/test_legacy_schema.rb +0 -574
  208. data/test/unit/layout/test_version.rb +0 -95
  209. data/test/unit/report/test_base.rb +0 -262
  210. data/test/unit/report/test_internal.rb +0 -206
  211. data/test/unit/test_config.rb +0 -51
  212. data/test/unit/test_layout.rb +0 -12
  213. data/test/unit/test_report.rb +0 -18
@@ -1,86 +1,82 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
4
  module Generator
5
+ class PDF
6
+ module Page
7
+ JIS_SIZES = {
8
+ 'B4' => [728.5, 1031.8],
9
+ 'B5' => [515.9, 728.5]
10
+ }.freeze
5
11
 
6
- module PDF::Page
7
- # Add JIS-B4,B5 page geometry
8
- ::PDF::Core::PageGeometry::SIZES.update(
9
- 'B4_JIS' => [728.5, 1031.8],
10
- 'B5_JIS' => [515.9, 728.5]
11
- )
12
+ # @param [Thinreports::Layout::Format] format
13
+ def start_new_page(format)
14
+ format_id =
15
+ if change_page_format?(format)
16
+ pdf.start_new_page(new_basic_page_options(format))
17
+ @current_page_format = format
12
18
 
13
- # @param [Thinreports::Layout::Format] format
14
- def start_new_page(format)
15
- format_id =
16
- if change_page_format?(format)
17
- pdf.start_new_page(new_basic_page_options(format))
18
- @current_page_format = format
19
-
20
- unless format_stamp_registry.include?(format.identifier)
21
- create_format_stamp(format)
19
+ create_format_stamp(format) unless format_stamp_registry.include?(format.identifier)
20
+ format.identifier
21
+ else
22
+ pdf.start_new_page(new_basic_page_options(current_page_format))
23
+ current_page_format.identifier
22
24
  end
23
- format.identifier
24
- else
25
- pdf.start_new_page(new_basic_page_options(current_page_format))
26
- current_page_format.identifier
27
- end
28
25
 
29
- stamp(format_id.to_s)
30
- end
26
+ stamp(format_id.to_s)
27
+ end
31
28
 
32
- def add_blank_page
33
- pdf.start_new_page(pdf.page_count.zero? ? {size: 'A4'} : {})
34
- end
29
+ def add_blank_page
30
+ pdf.start_new_page(pdf.page_count.zero? ? { size: 'A4' } : {})
31
+ end
35
32
 
36
- private
33
+ private
37
34
 
38
- # @return [Thinreports::Layout::Format]
39
- attr_reader :current_page_format
35
+ # @return [Thinreports::Layout::Format]
36
+ attr_reader :current_page_format
40
37
 
41
- # @param [Thinreports::Layout::Format] new_format
42
- # @return [Boolean]
43
- def change_page_format?(new_format)
44
- !current_page_format ||
45
- current_page_format.identifier != new_format.identifier
46
- end
38
+ # @param [Thinreports::Layout::Format] new_format
39
+ # @return [Boolean]
40
+ def change_page_format?(new_format)
41
+ !current_page_format ||
42
+ current_page_format.identifier != new_format.identifier
43
+ end
47
44
 
48
- # @param [Thinreports::Layout::Format] format
49
- def create_format_stamp(format)
50
- create_stamp(format.identifier.to_s) do
51
- draw_template_items(format.attributes['items'])
45
+ # @param [Thinreports::Layout::Format] format
46
+ def create_format_stamp(format)
47
+ create_stamp(format.identifier.to_s) do
48
+ draw_template_items(format.attributes['items'])
49
+ end
50
+ format_stamp_registry << format.identifier
52
51
  end
53
- format_stamp_registry << format.identifier
54
- end
55
52
 
56
- # @return [Array]
57
- def format_stamp_registry
58
- @format_stamp_registry ||= []
59
- end
53
+ # @return [Array]
54
+ def format_stamp_registry
55
+ @format_stamp_registry ||= []
56
+ end
60
57
 
61
- # @param [Thinreports::Layout::Format] format
62
- # @return [Hash]
63
- def new_basic_page_options(format)
64
- options = {layout: format.page_orientation.to_sym}
58
+ # @param [Thinreports::Layout::Format] format
59
+ # @return [Hash]
60
+ def new_basic_page_options(format)
61
+ options = { layout: format.page_orientation.to_sym }
65
62
 
66
- options[:size] =
67
- if format.user_paper_type?
68
- [format.page_width.to_f, format.page_height.to_f]
69
- else
70
- case format.page_paper_type
71
- # Convert B4(5)_ISO to B4(5)
72
- when 'B4_ISO', 'B5_ISO'
73
- format.page_paper_type.delete('_ISO')
74
- # Convert B4(5) to B4(5)_JIS
75
- when 'B4', 'B5'
76
- "#{format.page_paper_type}_JIS"
63
+ options[:size] =
64
+ if format.user_paper_type?
65
+ [format.page_width.to_f, format.page_height.to_f]
77
66
  else
78
- format.page_paper_type
67
+ case format.page_paper_type
68
+ # Convert B4(5)_ISO to B4(5)
69
+ when 'B4_ISO', 'B5_ISO'
70
+ format.page_paper_type.delete('_ISO')
71
+ when 'B4', 'B5'
72
+ JIS_SIZES[format.page_paper_type]
73
+ else
74
+ format.page_paper_type
75
+ end
79
76
  end
80
- end
81
- options
77
+ options
78
+ end
82
79
  end
83
80
  end
84
-
85
81
  end
86
82
  end
@@ -1,49 +1,49 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
4
  module Generator
5
+ class PDF
6
+ module ParseColor
7
+ # @param [String] color
8
+ # @return [String]
9
+ def parse_color(color)
10
+ color = color.downcase
5
11
 
6
- module PDF::ParseColor
7
- # @param [String] color
8
- # @return [String]
9
- def parse_color(color)
10
- color = color.downcase
11
-
12
- unless color =~ /^#?[\da-f]{6}$/
13
- find_color_from_name(color)
14
- else
15
- color.delete('#')
12
+ if color =~ /^#?[\da-f]{6}$/
13
+ color.delete('#')
14
+ else
15
+ find_color_from_name(color)
16
+ end
16
17
  end
17
- end
18
18
 
19
- private
19
+ private
20
20
 
21
- # Supported only SAFE COLORS.
22
- SUPPORTED_COLOR_NAMES = {
23
- 'red' => 'ff0000',
24
- 'yellow' => 'fff000',
25
- 'lime' => '00ff00',
26
- 'aqua' => '00ffff',
27
- 'blue' => '0000ff',
28
- 'fuchsia' => 'ff00ff',
29
- 'maroon' => '800000',
30
- 'olive' => '808000',
31
- 'green' => '008800',
32
- 'teal' => '008080',
33
- 'navy' => '000080',
34
- 'purple' => '800080',
35
- 'black' => '000000',
36
- 'gray' => '808080',
37
- 'silver' => 'c0c0c0',
38
- 'white' => 'ffffff'
39
- }
21
+ # Supported only SAFE COLORS.
22
+ SUPPORTED_COLOR_NAMES = {
23
+ 'red' => 'ff0000',
24
+ 'yellow' => 'fff000',
25
+ 'lime' => '00ff00',
26
+ 'aqua' => '00ffff',
27
+ 'blue' => '0000ff',
28
+ 'fuchsia' => 'ff00ff',
29
+ 'maroon' => '800000',
30
+ 'olive' => '808000',
31
+ 'green' => '008800',
32
+ 'teal' => '008080',
33
+ 'navy' => '000080',
34
+ 'purple' => '800080',
35
+ 'black' => '000000',
36
+ 'gray' => '808080',
37
+ 'silver' => 'c0c0c0',
38
+ 'white' => 'ffffff'
39
+ }.freeze
40
40
 
41
- def find_color_from_name(name)
42
- color = SUPPORTED_COLOR_NAMES[name]
43
- raise Thinreports::Errors::UnsupportedColorName, name unless color
44
- color
41
+ def find_color_from_name(name)
42
+ color = SUPPORTED_COLOR_NAMES[name]
43
+ raise Thinreports::Errors::UnsupportedColorName, name unless color
44
+ color
45
+ end
45
46
  end
46
47
  end
47
-
48
48
  end
49
49
  end
@@ -1,48 +1,48 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
- module Generator::PDF::Drawer
5
-
6
- # @abstract
7
- class Base
8
- # @param [Thinreports::Generator::PDF::Document] pdf
9
- # @param [Thinreports::Core::Shape::Manager::Format] format
10
- def initialize(pdf, format)
11
- @pdf = pdf
12
- @format = format
13
- @stamps = []
14
- @draw_at = nil
15
- end
16
-
17
- # @abstract
18
- def draw
19
- raise NotImplementedError
20
- end
21
-
22
- private
23
-
24
- # @param [Thinreports::Core::Shape::Base::Internal] shape
25
- # @return [String]
26
- def pdf_stamp_id(shape)
27
- "#{@format.identifier}#{shape.identifier}"
28
- end
29
-
30
- # @overload pdf_stamp(shape_id)
31
- # @param [String] shape_id
32
- # @overload pdf_stamp(shape)
33
- # @param [Thinreports::Core::Shape::Base::Internal] shape
34
- def pdf_stamp(shape)
35
- unless shape.is_a?(::String)
36
- shape = pdf_stamp_id(shape)
4
+ module Generator
5
+ class PDF
6
+ module Drawer
7
+ # @abstract
8
+ class Base
9
+ # @param [Thinreports::Generator::PDF::Document] pdf
10
+ # @param [Thinreports::Core::Shape::Manager::Format] format
11
+ def initialize(pdf, format)
12
+ @pdf = pdf
13
+ @format = format
14
+ @stamps = []
15
+ @draw_at = nil
16
+ end
17
+
18
+ # @abstract
19
+ def draw
20
+ raise NotImplementedError
21
+ end
22
+
23
+ private
24
+
25
+ # @param [Thinreports::Core::Shape::Base::Internal] shape
26
+ # @return [String]
27
+ def pdf_stamp_id(shape)
28
+ "#{@format.identifier}#{shape.identifier}"
29
+ end
30
+
31
+ # @overload pdf_stamp(shape_id)
32
+ # @param [String] shape_id
33
+ # @overload pdf_stamp(shape)
34
+ # @param [Thinreports::Core::Shape::Base::Internal] shape
35
+ def pdf_stamp(shape)
36
+ shape = pdf_stamp_id(shape) unless shape.is_a?(::String)
37
+ @pdf.stamp(shape, @draw_at)
38
+ end
39
+
40
+ # @param [Thinreports::Core::Shape::Base::Internal] shape
41
+ def create_pdf_stamp(shape, &block)
42
+ @pdf.create_stamp(pdf_stamp_id(shape), &block)
43
+ end
37
44
  end
38
- @pdf.stamp(shape, @draw_at)
39
- end
40
-
41
- # @param [Thinreports::Core::Shape::Base::Internal] shape
42
- def create_pdf_stamp(shape, &block)
43
- @pdf.create_stamp(pdf_stamp_id(shape), &block)
44
45
  end
45
46
  end
46
-
47
47
  end
48
48
  end
@@ -1,61 +1,63 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
- module Generator::PDF::Drawer
5
-
6
- class List < Base
7
- # @param (see PDF::Drawer::Base#initialize)
8
- def initialize(pdf, format)
9
- super
10
- @sections = {}
11
- end
12
-
13
- # @param [Thinreports::Core::Shape::List::PageState] list_page
14
- def draw(list_page)
15
- draw_section(list_page.header) if list_page.header
16
- list_page.rows.each do |row|
17
- draw_section(row)
18
- end
19
-
20
- # Returns Thinreports::Report::Page object
21
- manager = list_page.parent.manager
22
-
23
- list_id = list_page.id.to_s
24
- manager.format.shapes.each do |id, shape|
25
- next unless list_pageno?(list_id, shape)
26
-
27
- shape = manager.final_shape(id)
28
- @pdf.draw_shape_pageno(shape.internal,
29
- list_page.no, list_page.manager.page_count)
4
+ module Generator
5
+ class PDF
6
+ module Drawer
7
+ class List < Base
8
+ # @param (see PDF::Drawer::Base#initialize)
9
+ def initialize(pdf, format)
10
+ super
11
+ @sections = {}
12
+ end
13
+
14
+ # @param [Thinreports::Core::Shape::List::PageState] list_page
15
+ def draw(list_page)
16
+ draw_section(list_page.header) if list_page.header
17
+ list_page.rows.each do |row|
18
+ draw_section(row)
19
+ end
20
+
21
+ # Returns Thinreports::Report::Page object
22
+ manager = list_page.parent.manager
23
+
24
+ list_id = list_page.id.to_s
25
+ manager.format.shapes.each do |id, shape|
26
+ next unless list_pageno?(list_id, shape)
27
+
28
+ shape = manager.final_shape(id)
29
+ @pdf.draw_shape_pageno(shape.internal,
30
+ list_page.no, list_page.manager.page_count)
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ # @param [String] list_id
37
+ # @param [Thinreports::Core::Shape::Base::Format] shape
38
+ # @return [Boolean]
39
+ def list_pageno?(list_id, shape)
40
+ shape.type == Thinreports::Core::Shape::PageNumber::TYPE_NAME &&
41
+ shape.target == list_id
42
+ end
43
+
44
+ # @param [Thinreports::Core::Shape::List::SectionInterface] section
45
+ def draw_section(section)
46
+ internal = section.internal
47
+
48
+ base_top = @format.section_base_position_top(internal.section_name)
49
+ position = [internal.relative_left, base_top + internal.relative_top]
50
+
51
+ drawer(internal).draw(section, position)
52
+ end
53
+
54
+ # @param [Thinreports::Core::Shape::List::SectionInternal] section
55
+ # @return [Thinreports::Generator::PDF::Drawer::ListSection]
56
+ def drawer(section)
57
+ @sections[section.section_name] ||= ListSection.new(@pdf, section)
58
+ end
30
59
  end
31
60
  end
32
-
33
- private
34
-
35
- # @param [String] list_id
36
- # @param [Thinreports::Core::Shape::Base::Format] shape
37
- # @return [Boolean]
38
- def list_pageno?(list_id, shape)
39
- shape.type == Thinreports::Core::Shape::PageNumber::TYPE_NAME &&
40
- shape.target == list_id
41
- end
42
-
43
- # @param [Thinreports::Core::Shape::List::SectionInterface] section
44
- def draw_section(section)
45
- internal = section.internal
46
-
47
- base_top = @format.section_base_position_top(internal.section_name)
48
- position = [internal.relative_left, base_top + internal.relative_top]
49
-
50
- drawer(internal).draw(section, position)
51
- end
52
-
53
- # @param [Thinreports::Core::Shape::List::SectionInternal] section
54
- # @return [Thinreports::Generator::PDF::Drawer::ListSection]
55
- def drawer(section)
56
- @sections[section.section_name] ||= ListSection.new(@pdf, section)
57
- end
58
61
  end
59
-
60
62
  end
61
63
  end
@@ -1,47 +1,49 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
- module Generator::PDF::Drawer
5
-
6
- class ListSection < Page
7
- # @param pdf (see PDF::Drawer::Page#initialize)
8
- # @param section [Thinreports::Core::Shape::List::SectionInternal] section
9
- def initialize(pdf, section)
10
- super(pdf, section.format)
11
- @section = section
12
- @stamp_created = false
13
- end
14
-
15
- # @param [Thinreports::Core::Shape::List::SectionInternal] section
16
- # @param [Array<Numeric>] at
17
- def draw(section, at)
18
- @draw_at = at
19
- draw_section
20
- super(section)
21
- end
22
-
23
- private
24
-
25
- def draw_section
26
- id = @format.identifier.to_s
27
-
28
- unless @stamp_created
29
- @pdf.create_stamp(id) { @pdf.draw_template_items(@format.attributes['items']) }
30
- @stamp_created = true
4
+ module Generator
5
+ class PDF
6
+ module Drawer
7
+ class ListSection < Page
8
+ # @param pdf (see PDF::Drawer::Page#initialize)
9
+ # @param section [Thinreports::Core::Shape::List::SectionInternal] section
10
+ def initialize(pdf, section)
11
+ super(pdf, section.format)
12
+ @section = section
13
+ @stamp_created = false
14
+ end
15
+
16
+ # @param [Thinreports::Core::Shape::List::SectionInternal] section
17
+ # @param [Array<Numeric>] at
18
+ def draw(section, at)
19
+ @draw_at = at
20
+ draw_section
21
+ super(section)
22
+ end
23
+
24
+ private
25
+
26
+ def draw_section
27
+ id = @format.identifier.to_s
28
+
29
+ unless @stamp_created
30
+ @pdf.create_stamp(id) { @pdf.draw_template_items(@format.attributes['items']) }
31
+ @stamp_created = true
32
+ end
33
+ pdf_stamp(id)
34
+ end
35
+
36
+ # @see Thinreports::Generator::PDF::Drawer::Page#draw_tblock_shape
37
+ def draw_tblock_shape(shape)
38
+ @pdf.translate(*@draw_at) { super }
39
+ end
40
+
41
+ # @see Thinreports::Generator::PDF::Drawer::Page#draw_iblock_shape
42
+ def draw_iblock_shape(shape)
43
+ @pdf.translate(*@draw_at) { super }
44
+ end
31
45
  end
32
- pdf_stamp(id)
33
- end
34
-
35
- # @see Thinreports::Generator::PDF::Drawer::Page#draw_tblock_shape
36
- def draw_tblock_shape(shape)
37
- @pdf.translate(*@draw_at) { super }
38
- end
39
-
40
- # @see Thinreports::Generator::PDF::Drawer::Page#draw_iblock_shape
41
- def draw_iblock_shape(shape)
42
- @pdf.translate(*@draw_at) { super }
43
46
  end
44
47
  end
45
-
46
48
  end
47
49
  end