thinreports 0.9.1 → 0.11.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.
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