thinreports 0.7.6 → 0.8.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 (277) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -5
  3. data/.travis.yml +8 -4
  4. data/CHANGELOG.md +220 -0
  5. data/Gemfile +2 -9
  6. data/MIT-LICENSE +1 -1
  7. data/README.md +286 -0
  8. data/Rakefile +38 -8
  9. data/examples/character_spacing/character_spacing.rb +8 -0
  10. data/examples/character_spacing/character_spacing.tlf +1 -0
  11. data/examples/dynamic_image/dynamic_image.rb +31 -0
  12. data/examples/dynamic_image/dynamic_image.tlf +1 -0
  13. data/examples/dynamic_style/dynamic_style.rb +150 -0
  14. data/examples/dynamic_style/dynamic_style.tlf +1 -0
  15. data/examples/dynamic_style/dynamic_style_in_list.tlf +1 -0
  16. data/examples/eudc/eudc.rb +20 -0
  17. data/examples/eudc/eudc.tlf +1 -0
  18. data/examples/helper.rb +50 -0
  19. data/examples/hidden_shapes/hidden_shapes.rb +9 -0
  20. data/examples/hidden_shapes/hidden_shapes.tlf +1 -0
  21. data/examples/list_events/list_events.rb +59 -0
  22. data/examples/list_events/list_events_0_7_7.tlf +1 -0
  23. data/examples/list_events/list_events_0_8.tlf +1 -0
  24. data/examples/list_manual_generation/list_manual_generation.rb +22 -0
  25. data/examples/list_manual_generation/list_manual_generation.tlf +1 -0
  26. data/examples/list_page_number/list_page_number.rb +17 -0
  27. data/examples/list_page_number/list_page_number.tlf +1 -0
  28. data/examples/page_number/page_number.rb +33 -0
  29. data/examples/page_number/page_number.tlf +1 -0
  30. data/examples/password_setting/password_setting.rb +10 -0
  31. data/examples/password_setting/password_setting.tlf +1 -0
  32. data/examples/report_callbacks/report_callbacks.rb +31 -0
  33. data/examples/report_callbacks/report_callbacks.tlf +1 -0
  34. data/examples/single_line_tblock/single_line_tblock.rb +13 -0
  35. data/examples/single_line_tblock/single_line_tblock.tlf +1 -0
  36. data/examples/tblock_overflow/tblock_overflow.rb +20 -0
  37. data/examples/tblock_overflow/tblock_overflow.tlf +1 -0
  38. data/examples/tblock_styles/font_size.tlf +1 -0
  39. data/examples/tblock_styles/tblock_styles.rb +43 -0
  40. data/examples/tblock_styles/tblock_styles.tlf +1 -0
  41. data/examples/text_align/text_align.rb +8 -0
  42. data/examples/text_align/text_align.tlf +1 -0
  43. data/examples/typeB_page_size/B4_ISO.tlf +1 -0
  44. data/examples/typeB_page_size/B4_JIS.tlf +1 -0
  45. data/examples/typeB_page_size/typeB_page_size.rb +17 -0
  46. data/examples/word_wrap/word_wrap.rb +26 -0
  47. data/examples/word_wrap/word_wrap.tlf +1 -0
  48. data/lib/thinreports/config.rb +30 -10
  49. data/lib/thinreports/core/errors.rb +23 -20
  50. data/lib/thinreports/core/events.rb +18 -19
  51. data/lib/thinreports/core/format/base.rb +20 -25
  52. data/lib/thinreports/core/format/builder.rb +19 -27
  53. data/lib/thinreports/core/shape/base/interface.rb +15 -15
  54. data/lib/thinreports/core/shape/base/internal.rb +15 -20
  55. data/lib/thinreports/core/shape/base.rb +4 -5
  56. data/lib/thinreports/core/shape/basic/block_format.rb +3 -4
  57. data/lib/thinreports/core/shape/basic/block_interface.rb +9 -4
  58. data/lib/thinreports/core/shape/basic/block_internal.rb +9 -10
  59. data/lib/thinreports/core/shape/basic/format.rb +11 -10
  60. data/lib/thinreports/core/shape/basic/interface.rb +3 -3
  61. data/lib/thinreports/core/shape/basic/internal.rb +9 -6
  62. data/lib/thinreports/core/shape/basic.rb +1 -1
  63. data/lib/thinreports/core/shape/image_block/format.rb +5 -6
  64. data/lib/thinreports/core/shape/image_block/interface.rb +9 -7
  65. data/lib/thinreports/core/shape/image_block/internal.rb +5 -6
  66. data/lib/thinreports/core/shape/image_block.rb +1 -1
  67. data/lib/thinreports/core/shape/list/configuration.rb +37 -16
  68. data/lib/thinreports/core/shape/list/events.rb +11 -11
  69. data/lib/thinreports/core/shape/list/format.rb +27 -28
  70. data/lib/thinreports/core/shape/list/manager.rb +135 -95
  71. data/lib/thinreports/core/shape/list/page.rb +57 -51
  72. data/lib/thinreports/core/shape/list/page_state.rb +19 -17
  73. data/lib/thinreports/core/shape/list/section_format.rb +14 -15
  74. data/lib/thinreports/core/shape/list/section_interface.rb +15 -16
  75. data/lib/thinreports/core/shape/list/section_internal.rb +7 -8
  76. data/lib/thinreports/core/shape/list/store.rb +10 -11
  77. data/lib/thinreports/core/shape/list.rb +1 -1
  78. data/lib/thinreports/core/shape/manager/format.rb +10 -11
  79. data/lib/thinreports/core/shape/manager/internal.rb +22 -21
  80. data/lib/thinreports/core/shape/manager/target.rb +63 -34
  81. data/lib/thinreports/core/shape/manager.rb +1 -1
  82. data/lib/thinreports/core/shape/page_number/format.rb +25 -0
  83. data/lib/thinreports/core/shape/page_number/interface.rb +27 -0
  84. data/lib/thinreports/core/shape/page_number/internal.rb +57 -0
  85. data/lib/thinreports/core/shape/page_number.rb +15 -0
  86. data/lib/thinreports/core/shape/style/base.rb +29 -29
  87. data/lib/thinreports/core/shape/style/basic.rb +1 -1
  88. data/lib/thinreports/core/shape/style/graphic.rb +10 -25
  89. data/lib/thinreports/core/shape/style/text.rb +41 -31
  90. data/lib/thinreports/core/shape/style.rb +1 -1
  91. data/lib/thinreports/core/shape/text/format.rb +8 -9
  92. data/lib/thinreports/core/shape/text/interface.rb +2 -2
  93. data/lib/thinreports/core/shape/text/internal.rb +6 -7
  94. data/lib/thinreports/core/shape/text.rb +1 -1
  95. data/lib/thinreports/core/shape/text_block/format.rb +17 -17
  96. data/lib/thinreports/core/shape/text_block/formatter/basic.rb +13 -12
  97. data/lib/thinreports/core/shape/text_block/formatter/datetime.rb +8 -9
  98. data/lib/thinreports/core/shape/text_block/formatter/number.rb +11 -12
  99. data/lib/thinreports/core/shape/text_block/formatter/padding.rb +9 -32
  100. data/lib/thinreports/core/shape/text_block/formatter.rb +7 -8
  101. data/lib/thinreports/core/shape/text_block/interface.rb +2 -2
  102. data/lib/thinreports/core/shape/text_block/internal.rb +19 -20
  103. data/lib/thinreports/core/shape/text_block.rb +1 -1
  104. data/lib/thinreports/core/shape.rb +11 -13
  105. data/lib/thinreports/core/utils.rb +33 -32
  106. data/lib/thinreports/generator/base.rb +15 -24
  107. data/lib/thinreports/generator/configuration.rb +10 -9
  108. data/lib/thinreports/generator/pdf/configuration.rb +11 -6
  109. data/lib/thinreports/generator/pdf/document/draw_shape.rb +41 -32
  110. data/lib/thinreports/generator/pdf/document/font.rb +53 -44
  111. data/lib/thinreports/generator/pdf/document/graphics/attributes.rb +34 -25
  112. data/lib/thinreports/generator/pdf/document/graphics/basic.rb +25 -25
  113. data/lib/thinreports/generator/pdf/document/graphics/image.rb +15 -15
  114. data/lib/thinreports/generator/pdf/document/graphics/text.rb +43 -41
  115. data/lib/thinreports/generator/pdf/document/graphics.rb +8 -9
  116. data/lib/thinreports/generator/pdf/document/page.rb +37 -23
  117. data/lib/thinreports/generator/pdf/document/parse_color.rb +9 -10
  118. data/lib/thinreports/generator/pdf/document/parse_svg.rb +14 -15
  119. data/lib/thinreports/generator/pdf/document.rb +28 -28
  120. data/lib/thinreports/generator/pdf/drawer/base.rb +16 -22
  121. data/lib/thinreports/generator/pdf/drawer/list.rb +39 -21
  122. data/lib/thinreports/generator/pdf/drawer/list_section.rb +17 -18
  123. data/lib/thinreports/generator/pdf/drawer/page.rb +37 -26
  124. data/lib/thinreports/generator/pdf/prawn_ext.rb +18 -17
  125. data/lib/thinreports/generator/pdf.rb +28 -31
  126. data/lib/thinreports/generator.rb +6 -8
  127. data/lib/thinreports/layout/base.rb +24 -36
  128. data/lib/thinreports/layout/configuration.rb +11 -9
  129. data/lib/thinreports/layout/format.rb +26 -31
  130. data/lib/thinreports/layout/version.rb +8 -9
  131. data/lib/thinreports/layout.rb +2 -2
  132. data/lib/thinreports/report/base.rb +117 -109
  133. data/lib/thinreports/report/events.rb +5 -5
  134. data/lib/thinreports/report/internal.rb +48 -38
  135. data/lib/thinreports/{core → report}/page.rb +42 -32
  136. data/lib/thinreports/report.rb +10 -14
  137. data/lib/thinreports/version.rb +2 -3
  138. data/lib/thinreports.rb +14 -2
  139. data/test/data/font.ttf +0 -0
  140. data/test/data/layout_block.tlf +1 -0
  141. data/test/data/layout_list.tlf +1 -0
  142. data/test/data/layout_list_noheader.tlf +1 -0
  143. data/test/data/layout_text1.tlf +1 -0
  144. data/test/data/layout_text2.tlf +1 -0
  145. data/test/test_helper.rb +74 -0
  146. data/test/tmp/.gitkeep +0 -0
  147. data/test/unit/core/format/test_base.rb +14 -14
  148. data/test/unit/core/format/test_builder.rb +20 -25
  149. data/test/unit/core/shape/base/test_internal.rb +34 -37
  150. data/test/unit/core/shape/basic/test_basic_format.rb +4 -4
  151. data/test/unit/core/shape/basic/test_basic_interface.rb +15 -13
  152. data/test/unit/core/shape/basic/test_basic_internal.rb +19 -16
  153. data/test/unit/core/shape/basic/test_format.rb +4 -4
  154. data/test/unit/core/shape/basic/test_interface.rb +36 -46
  155. data/test/unit/core/shape/basic/test_internal.rb +29 -18
  156. data/test/unit/core/shape/image_block/test_format.rb +5 -5
  157. data/test/unit/core/shape/image_block/test_interface.rb +17 -16
  158. data/test/unit/core/shape/image_block/test_internal.rb +19 -16
  159. data/test/unit/core/shape/list/test_configuration.rb +50 -33
  160. data/test/unit/core/shape/list/test_events.rb +7 -7
  161. data/test/unit/core/shape/list/test_format.rb +16 -18
  162. data/test/unit/core/shape/list/test_manager.rb +15 -5
  163. data/test/unit/core/shape/list/test_page.rb +80 -22
  164. data/test/unit/core/shape/list/test_page_state.rb +13 -13
  165. data/test/unit/core/shape/list/test_section_format.rb +16 -17
  166. data/test/unit/core/shape/list/test_section_interface.rb +30 -22
  167. data/test/unit/core/shape/list/test_section_internal.rb +21 -19
  168. data/test/unit/core/shape/list/test_store.rb +7 -7
  169. data/test/unit/core/shape/manager/test_format.rb +11 -15
  170. data/test/unit/core/shape/manager/test_internal.rb +9 -9
  171. data/test/unit/core/shape/manager/test_target.rb +85 -57
  172. data/test/unit/core/shape/page_number/test_format.rb +73 -0
  173. data/test/unit/core/shape/page_number/test_interface.rb +33 -0
  174. data/test/unit/core/shape/page_number/test_internal.rb +81 -0
  175. data/test/unit/core/shape/styles/test_base.rb +9 -9
  176. data/test/unit/core/shape/styles/test_basic.rb +5 -5
  177. data/test/unit/core/shape/styles/test_graphic.rb +19 -33
  178. data/test/unit/core/shape/styles/test_text.rb +29 -7
  179. data/test/unit/core/shape/text/test_format.rb +6 -6
  180. data/test/unit/core/shape/text/test_internal.rb +11 -12
  181. data/test/unit/core/shape/text_block/formatter/test_basic.rb +16 -16
  182. data/test/unit/core/shape/text_block/formatter/test_datetime.rb +22 -20
  183. data/test/unit/core/shape/text_block/formatter/test_number.rb +34 -34
  184. data/test/unit/core/shape/text_block/formatter/test_padding.rb +44 -44
  185. data/test/unit/core/shape/text_block/test_format.rb +13 -8
  186. data/test/unit/core/shape/text_block/test_formatter.rb +17 -17
  187. data/test/unit/core/shape/text_block/test_interface.rb +37 -20
  188. data/test/unit/core/shape/text_block/test_internal.rb +38 -38
  189. data/test/unit/core/test_events.rb +10 -8
  190. data/test/unit/core/test_shape.rb +11 -7
  191. data/test/unit/core/test_utils.rb +68 -0
  192. data/test/unit/generator/pdf/document/graphics/test_attributes.rb +10 -4
  193. data/test/unit/generator/pdf/document/graphics/test_text.rb +60 -53
  194. data/test/unit/generator/pdf/document/test_draw_shape.rb +14 -6
  195. data/test/unit/generator/pdf/document/test_font.rb +79 -58
  196. data/test/unit/generator/pdf/document/test_graphics.rb +18 -19
  197. data/test/unit/generator/pdf/document/test_page.rb +68 -43
  198. data/test/unit/generator/pdf/document/test_parse_color.rb +5 -5
  199. data/test/unit/generator/pdf/test_configuration.rb +16 -9
  200. data/test/unit/generator/pdf/test_document.rb +8 -16
  201. data/test/unit/generator/test_base.rb +31 -42
  202. data/test/unit/generator/test_configuration.rb +6 -6
  203. data/test/unit/generator/test_pdf.rb +15 -21
  204. data/test/unit/layout/test_base.rb +34 -79
  205. data/test/unit/layout/test_configuration.rb +12 -37
  206. data/test/unit/layout/test_format.rb +36 -39
  207. data/test/unit/layout/test_version.rb +4 -4
  208. data/test/unit/report/test_base.rb +160 -192
  209. data/test/unit/report/test_events.rb +4 -4
  210. data/test/unit/report/test_internal.rb +102 -82
  211. data/test/unit/test_config.rb +31 -12
  212. data/test/unit/test_layout.rb +7 -7
  213. data/test/unit/test_report.rb +12 -24
  214. data/thinreports.gemspec +23 -26
  215. metadata +118 -181
  216. data/.yardopts +0 -1
  217. data/LICENSE +0 -1
  218. data/README.rdoc +0 -167
  219. data/doc/yardoc_templates/default/layout/html/footer.erb +0 -10
  220. data/lib/thinreports/core/ext/array.rb +0 -19
  221. data/lib/thinreports/core/ext/hash.rb +0 -19
  222. data/lib/thinreports/core/ext/object.rb +0 -25
  223. data/lib/thinreports/core/ext.rb +0 -5
  224. data/lib/thinreports/core/format.rb +0 -14
  225. data/lib/thinreports/core/ordered_hash.rb +0 -39
  226. data/lib/thinreports/core.rb +0 -20
  227. data/lib/thinreports/generator/pdf/drawer.rb +0 -16
  228. data/tasks/doc.rake +0 -13
  229. data/tasks/test.rake +0 -56
  230. data/test/benchmark/basic_estimate.tlf +0 -1
  231. data/test/benchmark/bench_basic_estimate.rb +0 -95
  232. data/test/case/character_spacing/character_spacing.rb +0 -7
  233. data/test/case/character_spacing/character_spacing.tlf +0 -1
  234. data/test/case/dynamic_image/dynamic_image.rb +0 -41
  235. data/test/case/dynamic_image/dynamic_image.tlf +0 -1
  236. data/test/case/dynamic_style/dynamic_style.rb +0 -154
  237. data/test/case/dynamic_style/dynamic_style.tlf +0 -1
  238. data/test/case/dynamic_style/dynamic_style_in_list.tlf +0 -1
  239. data/test/case/eudc/eudc.rb +0 -20
  240. data/test/case/eudc/eudc.tlf +0 -1
  241. data/test/case/helper.rb +0 -29
  242. data/test/case/hidden_shapes/hidden_shapes.rb +0 -13
  243. data/test/case/hidden_shapes/hidden_shapes.tlf +0 -1
  244. data/test/case/list_events/list_events.rb +0 -32
  245. data/test/case/list_events/list_events.tlf +0 -1
  246. data/test/case/list_header_inheriting/list_header_inheriting.rb +0 -17
  247. data/test/case/list_header_inheriting/list_header_inheriting.tlf +0 -1
  248. data/test/case/list_manual_generation/list_manual_generation.rb +0 -22
  249. data/test/case/list_manual_generation/list_manual_generation.tlf +0 -1
  250. data/test/case/single_line_tblock/single_line_tblock.rb +0 -15
  251. data/test/case/single_line_tblock/single_line_tblock.tlf +0 -1
  252. data/test/case/tblock_overflow/tblock_overflow.rb +0 -20
  253. data/test/case/tblock_overflow/tblock_overflow.tlf +0 -1
  254. data/test/case/tblock_styles/tblock_styles.rb +0 -27
  255. data/test/case/tblock_styles/tblock_styles.tlf +0 -1
  256. data/test/case/text_align/text_align.rb +0 -9
  257. data/test/case/text_align/text_align.tlf +0 -1
  258. data/test/unit/core/ext/array_spec.rb +0 -29
  259. data/test/unit/core/ext/hash_spec.rb +0 -29
  260. data/test/unit/core/ext/object_spec.rb +0 -30
  261. data/test/unit/core/ordered_hash_spec.rb +0 -51
  262. data/test/unit/core/shape/base/test_interface.rb +0 -52
  263. data/test/unit/core/utils_spec.rb +0 -56
  264. data/test/unit/data/basic_layout1.tlf +0 -1
  265. data/test/unit/data/basic_layout2.tlf +0 -1
  266. data/test/unit/data/basic_list_layout.tlf +0 -1
  267. data/test/unit/data/basic_list_noheader_layout.tlf +0 -1
  268. data/test/unit/helper.rb +0 -65
  269. /data/{test/case → examples}/dynamic_image/img200x100.png +0 -0
  270. /data/{test/case → examples}/dynamic_image/img50x50.png +0 -0
  271. /data/{test/case → examples}/dynamic_style/image.png +0 -0
  272. /data/{test/case → examples}/eudc/eudc.ttf +0 -0
  273. /data/{resources/fonts → fonts}/IPA_Font_License_Agreement_v1.0.txt +0 -0
  274. /data/{resources/fonts → fonts}/ipag.ttf +0 -0
  275. /data/{resources/fonts → fonts}/ipagp.ttf +0 -0
  276. /data/{resources/fonts → fonts}/ipam.ttf +0 -0
  277. /data/{resources/fonts → fonts}/ipamp.ttf +0 -0
@@ -2,23 +2,22 @@
2
2
 
3
3
  require 'bigdecimal'
4
4
 
5
- module ThinReports
5
+ module Thinreports
6
6
  module Core::Shape::TextBlock
7
-
8
- # @private
7
+
9
8
  class Formatter::Number < Formatter::Basic
10
-
9
+
11
10
  private
12
-
11
+
13
12
  def apply_format_to(value)
14
13
  precision = format.format_number_precision
15
14
  delimiter = format.format_number_delimiter
16
-
15
+
17
16
  if_applicable value do |val|
18
- unless precision.blank?
17
+ unless blank_value?(precision)
19
18
  val = number_with_precision(val, precision)
20
19
  end
21
- unless delimiter.blank?
20
+ unless blank_value?(delimiter)
22
21
  val = number_with_delimiter(val, delimiter)
23
22
  end
24
23
  val
@@ -34,16 +33,16 @@ module ThinReports
34
33
  end
35
34
  val.nil? ? value : block.call(val)
36
35
  end
37
-
36
+
38
37
  def number_with_delimiter(value, delimiter = ',')
39
38
  value.to_s.gsub(/(\d)(?=(\d{3})+(?!\d))/){ "#{$1}#{delimiter}" }
40
39
  end
41
-
40
+
42
41
  def number_with_precision(value, precision = 3)
43
42
  value = BigDecimal(value.to_s).round(precision)
44
43
  sprintf("%.#{precision}f", value)
45
44
  end
46
45
  end
47
-
46
+
48
47
  end
49
- end
48
+ end
@@ -1,45 +1,22 @@
1
1
  # coding: utf-8
2
2
 
3
- module ThinReports
3
+ module Thinreports
4
4
  module Core::Shape::TextBlock
5
-
6
- # @private
5
+
7
6
  class Formatter::Padding < Formatter::Basic
8
-
9
- private
10
-
11
- ruby_18 do
12
- def apply_format_to(value)
13
- value = value.to_s
14
-
15
- char_length = value.unpack('U*').length
16
- pad_length = format.format_padding_length
17
-
18
- if pad_length > char_length
19
- pad_strs = format.format_padding_char * (pad_length - char_length)
20
- if format.format_padding_rdir?
21
- value + pad_strs
22
- else
23
- pad_strs + value
24
- end
25
- else
26
- value
27
- end
28
- end
29
- end
30
-
31
- ruby_19 do
7
+
8
+ private
9
+
32
10
  def apply_format_to(value)
33
11
  value.to_s.send(format.format_padding_rdir? ? :ljust : :rjust,
34
12
  format.format_padding_length,
35
13
  format.format_padding_char)
36
14
  end
37
- end
38
-
15
+
39
16
  def applicable?(value)
40
- !format.format_padding_char.blank? && format.format_padding_length > 0
17
+ !blank_value?(format.format_padding_char) && format.format_padding_length > 0
41
18
  end
42
19
  end
43
-
20
+
44
21
  end
45
- end
22
+ end
@@ -1,14 +1,13 @@
1
1
  # coding: utf-8
2
2
 
3
- module ThinReports
3
+ module Thinreports
4
4
  module Core::Shape::TextBlock
5
-
6
- # @private
5
+
7
6
  module Formatter
8
- # @param [ThinReports::Core::Shape::TextBlock::Format] format
9
- # @return [ThinReports::Core::Shape::TextBlock::Formatter::Base]
7
+ # @param [Thinreports::Core::Shape::TextBlock::Format] format
8
+ # @return [Thinreports::Core::Shape::TextBlock::Formatter::Base]
10
9
  def self.setup(format)
11
- klass = if format.format_type.blank?
10
+ klass = if Thinreports.blank_value?(format.format_type)
12
11
  Basic
13
12
  else
14
13
  case format.format_type
@@ -16,13 +15,13 @@ module ThinReports
16
15
  when 'datetime' then Datetime
17
16
  when 'padding' then Padding
18
17
  else
19
- raise ThinReports::Errors::UnknownFormatterType
18
+ raise Thinreports::Errors::UnknownFormatterType
20
19
  end
21
20
  end
22
21
  klass.new(format)
23
22
  end
24
23
  end
25
-
24
+
26
25
  end
27
26
  end
28
27
 
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
2
 
3
- module ThinReports
3
+ module Thinreports
4
4
  module Core::Shape
5
5
 
6
6
  class TextBlock::Interface < Basic::BlockInterface
@@ -23,7 +23,7 @@ module ThinReports
23
23
 
24
24
  private
25
25
 
26
- # @see ThinReports::Core::Shape::Base::Interface#init_internal
26
+ # @see Thinreports::Core::Shape::Base::Interface#init_internal
27
27
  def init_internal(parent, format)
28
28
  TextBlock::Internal.new(parent, format)
29
29
  end
@@ -1,26 +1,25 @@
1
1
  # coding: utf-8
2
2
 
3
- module ThinReports
3
+ module Thinreports
4
4
  module Core::Shape
5
-
6
- # @private
5
+
7
6
  class TextBlock::Internal < Basic::BlockInternal
8
7
  format_delegators :multiple?
9
-
8
+
10
9
  def initialize(*args)
11
10
  super(*args)
12
-
11
+
13
12
  @reference = nil
14
13
  @formatter = nil
15
-
14
+
16
15
  @style = Style::Text.new(format)
17
16
  @style.accessible_styles.delete(:valign) unless multiple?
18
17
  end
19
-
18
+
20
19
  def style
21
20
  @style
22
21
  end
23
-
22
+
24
23
  def read_value
25
24
  if format.has_reference?
26
25
  @reference ||= parent.item(format.ref_id)
@@ -29,16 +28,16 @@ module ThinReports
29
28
  super
30
29
  end
31
30
  end
32
-
31
+
33
32
  def write_value(val)
34
33
  if format.has_reference?
35
34
  warn 'The set value was not saved, ' +
36
- "Because '#{format.id}' refers to '#{format.ref_id}'."
35
+ "Because '#{format.id}' has reference to '#{format.ref_id}'."
37
36
  else
38
37
  super
39
38
  end
40
39
  end
41
-
40
+
42
41
  def real_value
43
42
  if format_enabled?
44
43
  formatter.apply(read_value)
@@ -46,31 +45,31 @@ module ThinReports
46
45
  super
47
46
  end
48
47
  end
49
-
48
+
50
49
  def format_enabled(enabled)
51
50
  states[:format_enabled] = enabled
52
51
  end
53
-
52
+
54
53
  def format_enabled?
55
54
  return false if multiple?
56
-
55
+
57
56
  if states.key?(:format_enabled)
58
57
  states[:format_enabled]
59
58
  else
60
- !format.format_base.blank? || format.has_format?
59
+ !blank_value?(format.format_base) || format.has_format?
61
60
  end
62
61
  end
63
-
62
+
64
63
  def type_of?(type_name)
65
64
  type_name == :tblock || super
66
65
  end
67
-
66
+
68
67
  private
69
-
68
+
70
69
  def formatter
71
70
  @formatter ||= TextBlock::Formatter.setup(format)
72
71
  end
73
72
  end
74
-
73
+
75
74
  end
76
- end
75
+ end
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
2
 
3
- module ThinReports
3
+ module Thinreports
4
4
  module Core::Shape
5
5
 
6
6
  module TextBlock
@@ -1,44 +1,41 @@
1
1
  # coding: utf-8
2
2
 
3
- module ThinReports
3
+ module Thinreports
4
4
  module Core
5
-
5
+
6
6
  module Shape
7
- # @private
8
7
  def Interface(parent, format)
9
8
  find_by_type(format.type)::Interface.new(parent, format)
10
9
  end
11
-
12
- # @private
10
+
13
11
  def Format(type)
14
12
  find_by_type(type)::Format
15
13
  end
16
-
17
- # @private
14
+
18
15
  def Configuration(type)
19
16
  klass = find_by_type(type)
20
17
  unless klass.const_defined?(:Configuration)
21
- raise ThinReports::Errors::NoConfigurationFound, type
18
+ raise Thinreports::Errors::NoConfigurationFound, type
22
19
  end
23
20
  klass.const_get(:Configuration)
24
21
  end
25
-
22
+
26
23
  module_function :Interface, :Format, :Configuration
27
-
28
- # @private
24
+
29
25
  def self.find_by_type(type)
30
26
  case type
31
27
  when TextBlock::TYPE_NAME then TextBlock
32
28
  when ImageBlock::TYPE_NAME then ImageBlock
33
29
  when List::TYPE_NAME then List
34
30
  when Text::TYPE_NAME then Text
31
+ when PageNumber::TYPE_NAME then PageNumber
35
32
  when *Basic::TYPE_NAMES then Basic
36
33
  else
37
- raise ThinReports::Errors::UnknownShapeType
34
+ raise Thinreports::Errors::UnknownShapeType
38
35
  end
39
36
  end
40
37
  end
41
-
38
+
42
39
  end
43
40
  end
44
41
 
@@ -50,3 +47,4 @@ require 'thinreports/core/shape/text'
50
47
  require 'thinreports/core/shape/text_block'
51
48
  require 'thinreports/core/shape/image_block'
52
49
  require 'thinreports/core/shape/list'
50
+ require 'thinreports/core/shape/page_number'
@@ -1,40 +1,41 @@
1
1
  # coding: utf-8
2
2
 
3
- module ThinReports
4
- module Core
5
-
6
- # @private
7
- module Utils
8
- def block_exec_on(context, &block)
9
- return context unless block_given?
10
-
11
- if block.arity == 1
12
- block.call(context)
13
- else
14
- context.instance_eval(&block)
15
- end
16
- context
3
+ module Thinreports
4
+ module Utils
5
+ def self.included(klass)
6
+ klass.extend self
7
+ end
8
+
9
+ def deep_copy(src)
10
+ case src
11
+ when Hash
12
+ src.inject({}) {|h, (k, v)| h[k] = (v.dup rescue v); h }
13
+ when Array
14
+ src.map {|a| a.dup rescue a }
15
+ else
16
+ raise ArgumentError
17
+ end
18
+ end
19
+
20
+ def blank_value?(value)
21
+ case value
22
+ when String then value.empty?
23
+ when NilClass then true
24
+ else false
17
25
  end
18
-
19
- if RUBY_VERSION < '1.9'
20
- def ruby_18
21
- yield
22
- end
23
- def ruby_19
24
- false
25
- end
26
+ end
27
+
28
+ def call_block_in(scope, &block)
29
+ return scope unless block_given?
30
+
31
+ if block.arity == 1
32
+ block.call(scope)
26
33
  else
27
- def ruby_18
28
- false
29
- end
30
- def ruby_19
31
- yield
32
- end
34
+ scope.instance_eval(&block)
33
35
  end
36
+ scope
34
37
  end
35
-
36
38
  end
37
- end
38
39
 
39
- # Include global methods.
40
- include ThinReports::Core::Utils
40
+ extend Utils
41
+ end
@@ -1,49 +1,40 @@
1
1
  # coding: utf-8
2
2
 
3
- module ThinReports
3
+ module Thinreports
4
4
  module Generator
5
-
5
+
6
6
  # @abstract
7
7
  class Base
8
- # @return [ThinReports::Report::Base]
9
- # @private
8
+ # @return [Thinreports::Report::Base]
10
9
  attr_reader :report
11
10
 
12
11
  # @return [Hash]
13
- # @private
14
12
  attr_reader :options
15
-
16
- # @private
13
+
17
14
  def self.inherited(g)
18
15
  Generator.register(g.name.split('::').last.downcase.to_sym, g);
19
16
  end
20
-
21
- # @param [ThinReports::Report::Base] report
17
+
18
+ # @param [Thinreports::Report::Base] report
22
19
  # @param [Hash] options
23
20
  def initialize(report, options = {})
24
21
  report.finalize
25
-
22
+
26
23
  @report = report.internal
27
24
  @options = options || {}
28
25
  end
29
-
30
- # @return [String]
31
- # @abstract
32
- def generate
33
- raise NotImplementedError
34
- end
35
-
36
- # @param [String] filename
26
+
27
+ # @param [String, nil] filename
28
+ # @return [String, nil]
37
29
  # @abstract
38
- def generate_file(filename)
30
+ def generate(filename = nil)
39
31
  raise NotImplementedError
40
32
  end
41
-
42
- # @private
33
+
43
34
  def default_layout
44
35
  report.default_layout
45
- end
36
+ end
46
37
  end
47
-
38
+
48
39
  end
49
- end
40
+ end
@@ -1,30 +1,31 @@
1
1
  # coding: utf-8
2
2
 
3
- module ThinReports
3
+ module Thinreports
4
4
  module Generator
5
-
5
+
6
+ # @deprecated This class will be removed in the next major version.
6
7
  class Configuration
7
8
  # @return [Symbol]
8
9
  attr_reader :default
9
-
10
+
10
11
  def initialize
11
12
  @default = :pdf
12
13
  end
13
-
14
- # @return [ThinReports::Generator::PDF::Configuration]
14
+
15
+ # @return [Thinreports::Generator::PDF::Configuration]
15
16
  def pdf
16
17
  @pdf ||= PDF::Configuration.new
17
18
  end
18
-
19
+
19
20
  # @param [Symbol] type
20
21
  # @return [void]
21
22
  def default=(type)
22
23
  unless Generator.registry.key?(type)
23
- raise ThinReports::Errors::UnknownGeneratorType.new(type)
24
+ raise Thinreports::Errors::UnknownGeneratorType.new(type)
24
25
  end
25
26
  @default = type
26
27
  end
27
28
  end
28
-
29
+
29
30
  end
30
- end
31
+ end
@@ -1,20 +1,25 @@
1
1
  # coding: utf-8
2
2
 
3
- module ThinReports
3
+ module Thinreports
4
4
  module Generator
5
-
5
+
6
+ # @deprecated This class will be removed in the next major version.
6
7
  class PDF::Configuration
7
8
  # @return [Array]
8
9
  attr_reader :eudc_fonts
9
-
10
+
10
11
  def initialize
11
12
  @eudc_fonts = []
12
13
  end
13
-
14
+
14
15
  # @param [String, Array<String>] fonts
15
16
  def eudc_fonts=(fonts)
17
+ warn '[DEPRECATION] `eudc_fonts=` is deprecated and will be removed in ' +
18
+ 'the next major version of thinreports. ' +
19
+ 'Please use `Thinreports.config.fallback_fonts=` instead.'
20
+
16
21
  fonts = [fonts] unless fonts.is_a?(::Array)
17
-
22
+
18
23
  fonts.each do |f|
19
24
  unless File.extname(f.to_s) == '.ttf'
20
25
  raise ArgumentError, 'The EUDC Fonts can specify only the TTF file.'
@@ -23,6 +28,6 @@ module ThinReports
23
28
  @eudc_fonts = fonts
24
29
  end
25
30
  end
26
-
31
+
27
32
  end
28
33
  end
@@ -1,18 +1,17 @@
1
1
  # coding: utf-8
2
2
 
3
- module ThinReports
3
+ module Thinreports
4
4
  module Generator
5
-
6
- # @private
5
+
7
6
  module PDF::DrawShape
8
- # @param [ThinReports::Core::Shape::TextBlock::Internal] shape
7
+ # @param [Thinreports::Core::Shape::TextBlock::Internal] shape
9
8
  def draw_shape_tblock(shape)
10
9
  x, y, w, h = shape.box.values_at('x', 'y', 'width', 'height')
11
-
10
+
12
11
  content = shape.real_value.to_s
13
12
  unless content.empty?
14
13
  attrs = shape_text_attrs(shape)
15
-
14
+
16
15
  unless shape.multiple?
17
16
  content = content.gsub(/\n/, ' ')
18
17
  attrs[:single] = true
@@ -20,49 +19,56 @@ module ThinReports
20
19
  text_box(content, x, y, w, h, attrs)
21
20
  end
22
21
  end
23
-
24
- # @param [ThinReports::Core::Shape::Basic::Internal] shape
22
+
23
+ def draw_shape_pageno(shape, page_no, page_count)
24
+ x, y, w, h = shape.box.values_at('x', 'y', 'width', 'height')
25
+
26
+ text_box(shape.build_format(page_no, page_count), x, y, w, h,
27
+ common_text_attrs(shape.style.svg_attrs))
28
+ end
29
+
30
+ # @param [Thinreports::Core::Shape::Basic::Internal] shape
25
31
  def draw_shape_image(shape)
26
32
  x, y, w, h = shape.style.svg_attrs.values_at('x', 'y', 'width', 'height')
27
33
  base64image(extract_base64_string(shape.style.svg_attrs['xlink:href']),
28
34
  x, y, w, h)
29
35
  end
30
-
31
- # @param [ThinReports::Core::Shape::ImageBlock::Internal] shape
36
+
37
+ # @param [Thinreports::Core::Shape::ImageBlock::Internal] shape
32
38
  def draw_shape_iblock(shape)
33
39
  x, y, w, h = shape.box.values_at('x', 'y', 'width', 'height')
34
- unless shape.src.blank?
40
+ unless blank_value?(shape.src)
35
41
  posx = shape.format.position_x
36
42
  posy = shape.format.position_y
37
-
43
+
38
44
  image_box(shape.src, x, y, w, h,
39
- :position_x => posx ? posx.to_sym : nil,
40
- :position_y => posy ? posy.to_sym : nil)
45
+ position_x: posx ? posx.to_sym : nil,
46
+ position_y: posy ? posy.to_sym : nil)
41
47
  end
42
48
  end
43
-
44
- # @param [ThinReports::Core::Shape::Text::Internal] shape
49
+
50
+ # @param [Thinreports::Core::Shape::Text::Internal] shape
45
51
  def draw_shape_text(shape)
46
52
  x, y, w, h = shape.box.values_at('x', 'y', 'width', 'height')
47
- text(shape.text.join("\n"), x, y, w, h,
53
+ text(shape.text.join("\n"), x, y, w, h,
48
54
  shape_text_attrs(shape))
49
55
  end
50
-
51
- # @param [ThinReports::Core::Shape::Basic::Internal] shape
56
+
57
+ # @param [Thinreports::Core::Shape::Basic::Internal] shape
52
58
  def draw_shape_ellipse(shape)
53
59
  args = shape.style.svg_attrs.values_at('cx', 'cy', 'rx', 'ry')
54
60
  args << common_graphic_attrs(shape.style.svg_attrs)
55
61
  ellipse(*args)
56
62
  end
57
-
58
- # @param [ThinReports::Core::Shape::Basic::Internal] shape
63
+
64
+ # @param [Thinreports::Core::Shape::Basic::Internal] shape
59
65
  def draw_shape_line(shape)
60
66
  args = shape.style.svg_attrs.values_at('x1', 'y1', 'x2', 'y2')
61
67
  args << common_graphic_attrs(shape.style.svg_attrs)
62
68
  line(*args)
63
69
  end
64
-
65
- # @param [ThinReports::Core::Shape::Basic::Internal] shape
70
+
71
+ # @param [Thinreports::Core::Shape::Basic::Internal] shape
66
72
  def draw_shape_rect(shape)
67
73
  args = shape.style.svg_attrs.values_at('x', 'y', 'width', 'height')
68
74
  args << common_graphic_attrs(shape.style.svg_attrs) do |attrs|
@@ -70,26 +76,29 @@ module ThinReports
70
76
  end
71
77
  rect(*args)
72
78
  end
73
-
79
+
74
80
  private
75
-
76
- # @param [ThinReports::Core::Shape::Text::Internal, ThinReports::Core::Shape::TextBlock::Internal] shape
81
+
82
+ # @param [Thinreports::Core::Shape::Text::Internal, Thinreports::Core::Shape::TextBlock::Internal] shape
77
83
  # @return [Hash]
78
84
  def shape_text_attrs(shape)
79
85
  format = shape.format
80
-
86
+
81
87
  common_text_attrs(shape.style.svg_attrs) do |attrs|
82
88
  # Set the :line_height option.
83
- attrs[:line_height] = format.line_height unless format.line_height.blank?
89
+ attrs[:line_height] = format.line_height unless blank_value?(format.line_height)
84
90
  # Set the :valign option.
85
91
  attrs[:valign] = shape.style.valign
86
92
 
87
- # Set the :overflow option.
88
- attrs[:overflow] = text_overflow(format.overflow) if shape.type_of?(:tblock)
93
+ if shape.type_of?(:tblock)
94
+ # Set the :overflow option.
95
+ attrs[:overflow] = text_overflow(format.overflow)
96
+ # Set the :word_wrap option
97
+ attrs[:word_wrap] = text_word_wrap(format.word_wrap)
98
+ end
89
99
  end
90
100
  end
91
-
92
101
  end
93
-
102
+
94
103
  end
95
104
  end