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
@@ -1,6 +1,5 @@
1
1
  # coding: utf-8
2
2
 
3
- module ThinReports
4
- # The current version.
5
- VERSION = '0.7.6'
3
+ module Thinreports
4
+ VERSION = '0.8.0'
6
5
  end
data/lib/thinreports.rb CHANGED
@@ -1,8 +1,20 @@
1
1
  # coding: utf-8
2
2
 
3
+ module Thinreports
4
+ ROOT = File.expand_path File.join(File.dirname(__FILE__), '..')
5
+ end
6
+
3
7
  require 'thinreports/version'
4
8
  require 'thinreports/config'
5
- require 'thinreports/core'
9
+ require 'thinreports/core/utils'
10
+ require 'thinreports/core/errors'
11
+ require 'thinreports/core/events'
12
+ require 'thinreports/core/format/base'
13
+ require 'thinreports/core/shape'
14
+ require 'thinreports/core/utils'
6
15
  require 'thinreports/report'
7
16
  require 'thinreports/layout'
8
- require 'thinreports/generator'
17
+ require 'thinreports/generator'
18
+
19
+ # Alias for Thinreports
20
+ ThinReports = Thinreports
Binary file
@@ -0,0 +1 @@
1
+ {"version":"0.8.0","config":{"title":"","option":{},"page":{"paper-type":"A4","orientation":"portrait","margin-top":"20","margin-bottom":"20","margin-left":"20","margin-right":"20"}},"svg":"<svg width=\"595.2\" height=\"841.8\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" preserveAspectRatio=\"none\" viewBox=\"0 0 595.2 841.8\"><g class=\"canvas\"><!--SHAPE{\"type\":\"s-tblock\",\"id\":\"text_block1\",\"display\":\"true\",\"desc\":null,\"multiple\":\"false\",\"valign\":\"\",\"line-height\":\"\",\"box\":{\"x\":40,\"y\":60.9,\"width\":291.7,\"height\":21},\"inline-format\":\"false\",\"format\":{\"base\":\"\",\"type\":\"\"},\"value\":\"\",\"ref-id\":\"\",\"overflow\":\"\",\"word-wrap\":\"none\",\"svg\":{\"tag\":\"text\",\"attrs\":{\"x\":40,\"y\":77.9,\"xml:space\":\"preserve\",\"kerning\":\"auto\",\"letter-spacing\":\"normal\",\"id\":\"goog_773191970\",\"fill\":\"#000000\",\"fill-opacity\":\"1\",\"font-size\":\"18\",\"font-family\":\"Helvetica\",\"font-weight\":\"normal\",\"font-style\":\"normal\",\"text-anchor\":\"start\",\"text-decoration\":\"none\"}}}SHAPE--><!--LAYOUT<g xmlns=\"http://www.w3.org/2000/svg\" class=\"s-tblock\" x-format-type=\"\" x-value=\"\" x-format-base=\"\" x-ref-id=\"\" kerning=\"auto\" letter-spacing=\"normal\" x-display=\"true\" x-multiple=\"false\" id=\"goog_773191970\" x-id=\"text_block1\" fill=\"#000000\" fill-opacity=\"1\" font-size=\"18\" font-family=\"Helvetica\" font-weight=\"normal\" font-style=\"normal\" text-anchor=\"start\" text-decoration=\"none\" x-width=\"291.7\" x-height=\"21\" x-left=\"40\" x-top=\"60.9\"><rect class=\"s-tblock-box\" stroke=\"none\" fill=\"#0096fd\" fill-opacity=\"0.2\" width=\"291.7\" height=\"21\" x=\"40\" y=\"60.9\"/><text class=\"s-tblock-id\" font-size=\"10.5\" font-family=\"Helvetica\" font-weight=\"normal\" font-style=\"normal\" text-decoration=\"none\" text-anchor=\"start\" kerning=\"auto\" stroke=\"none\" fill=\"#0096fd\" fill-opacity=\"1\" x=\"44\" y=\"71.9\">text_block1</text></g>LAYOUT--><!--SHAPE{\"type\":\"s-tblock\",\"id\":\"text_block2\",\"display\":\"true\",\"desc\":null,\"multiple\":\"false\",\"valign\":\"\",\"line-height\":\"\",\"box\":{\"x\":40,\"y\":95,\"width\":291.7,\"height\":21},\"inline-format\":\"false\",\"format\":{\"base\":\"\",\"type\":\"\"},\"value\":\"\",\"ref-id\":\"\",\"overflow\":\"truncate\",\"word-wrap\":\"none\",\"svg\":{\"tag\":\"text\",\"attrs\":{\"x\":40,\"y\":112,\"xml:space\":\"preserve\",\"kerning\":\"auto\",\"letter-spacing\":\"normal\",\"id\":\"goog_773191972\",\"fill\":\"#000000\",\"fill-opacity\":\"1\",\"font-size\":\"18\",\"font-family\":\"Helvetica\",\"font-weight\":\"normal\",\"font-style\":\"normal\",\"text-decoration\":\"none\",\"text-anchor\":\"start\"}}}SHAPE--><!--LAYOUT<g xmlns=\"http://www.w3.org/2000/svg\" class=\"s-tblock\" x-format-type=\"\" x-value=\"\" x-format-base=\"\" x-ref-id=\"\" kerning=\"auto\" letter-spacing=\"normal\" x-display=\"true\" x-multiple=\"false\" id=\"goog_773191972\" x-id=\"text_block2\" x-width=\"291.7\" x-height=\"21\" x-left=\"40\" x-top=\"95\" fill=\"#000000\" fill-opacity=\"1\" font-size=\"18\" font-family=\"Helvetica\" font-weight=\"normal\" font-style=\"normal\" text-decoration=\"none\" text-anchor=\"start\" x-overflow=\"truncate\" x-word-wrap=\"none\" x-inline-format=\"false\"><rect class=\"s-tblock-box\" stroke=\"none\" fill=\"#0096fd\" fill-opacity=\"0.2\" width=\"291.7\" height=\"21\" x=\"40\" y=\"95\"/><text class=\"s-tblock-id\" font-size=\"10.5\" font-family=\"Helvetica\" font-weight=\"normal\" font-style=\"normal\" text-decoration=\"none\" text-anchor=\"start\" kerning=\"auto\" stroke=\"none\" fill=\"#0096fd\" fill-opacity=\"1\" x=\"44\" y=\"106\">text_block2</text></g>LAYOUT--><!--SHAPE{\"type\":\"s-iblock\",\"id\":\"image_block1\",\"display\":\"true\",\"desc\":null,\"box\":{\"x\":40,\"y\":150,\"width\":288.7,\"height\":127.8},\"position-x\":\"left\",\"position-y\":\"top\",\"svg\":{\"tag\":\"image\",\"attrs\":{\"x\":40,\"y\":150,\"width\":288.7,\"height\":127.8}}}SHAPE--><!--LAYOUT<g xmlns=\"http://www.w3.org/2000/svg\" class=\"s-iblock\" x-display=\"true\" id=\"goog_773191973\" x-id=\"image_block1\" x-width=\"288.7\" x-height=\"127.8\" x-left=\"40\" x-top=\"150\"><rect class=\"s-iblock-box\" stroke=\"none\" fill=\"#0096fd\" fill-opacity=\"0.2\" width=\"288.7\" height=\"127.8\" x=\"40\" y=\"150\"/><image width=\"16\" height=\"16\" class=\"s-iblock-mark\" opacity=\"0.5\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"assets/icons/x-image-mark.svg\" display=\"inline\" x=\"176\" y=\"205\"/><text class=\"s-iblock-id\" font-size=\"10.5\" font-family=\"Helvetica\" font-weight=\"normal\" font-style=\"normal\" text-decoration=\"none\" text-anchor=\"start\" kerning=\"auto\" stroke=\"none\" fill=\"#0096fd\" fill-opacity=\"1\" x=\"44\" y=\"161\">image_block1</text></g>LAYOUT--><!--SHAPE{\"type\":\"s-iblock\",\"id\":\"image_block2\",\"display\":\"true\",\"desc\":null,\"box\":{\"x\":40,\"y\":295,\"width\":288.7,\"height\":127.8},\"position-x\":\"left\",\"position-y\":\"top\",\"svg\":{\"tag\":\"image\",\"attrs\":{\"x\":40,\"y\":295,\"width\":288.7,\"height\":127.8}}}SHAPE--><!--LAYOUT<g xmlns=\"http://www.w3.org/2000/svg\" class=\"s-iblock\" x-display=\"true\" id=\"goog_773191974\" x-id=\"image_block2\" x-width=\"288.7\" x-height=\"127.8\" x-left=\"40\" x-top=\"295\" x-position-x=\"left\" x-position-y=\"top\"><rect class=\"s-iblock-box\" stroke=\"none\" fill=\"#0096fd\" fill-opacity=\"0.2\" width=\"288.7\" height=\"127.8\" x=\"40\" y=\"295\"/><image width=\"16\" height=\"16\" class=\"s-iblock-mark\" opacity=\"0.5\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"assets/icons/x-image-mark.svg\" display=\"inline\" x=\"176\" y=\"350\"/><text class=\"s-iblock-id\" font-size=\"10.5\" font-family=\"Helvetica\" font-weight=\"normal\" font-style=\"normal\" text-decoration=\"none\" text-anchor=\"start\" kerning=\"auto\" stroke=\"none\" fill=\"#0096fd\" fill-opacity=\"1\" x=\"44\" y=\"306\">image_block2</text></g>LAYOUT--></g></svg>","state":{"layout-guide":[]}}
@@ -0,0 +1 @@
1
+ {"version":"0.7.7.1","finger-print":-1511277400,"config":{"title":"Basic List Layout","option":{},"page":{"paper-type":"A4","orientation":"portrait","margin-top":"20","margin-bottom":"20","margin-left":"20","margin-right":"20"}},"svg":"<svg width=\"595.2\" height=\"841.8\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" preserveAspectRatio=\"none\" viewBox=\"0 0 595.2 841.8\"><g class=\"canvas\"><!--SHAPE{\"type\":\"s-list\",\"id\":\"list\",\"display\":\"true\",\"desc\":null,\"footer\":{\"height\":55.5,\"svg\":{\"tag\":\"g\",\"content\":\"<g xmlns=\\\"http://www.w3.org/2000/svg\\\" class=\\\"s-text\\\" stroke-width=\\\"0\\\" fill=\\\"#000000\\\" fill-opacity=\\\"1\\\" kerning=\\\"auto\\\" x-display=\\\"true\\\" x-id=\\\"\\\" stroke=\\\"none\\\" font-weight=\\\"normal\\\" font-style=\\\"normal\\\" font-family=\\\"Helvetica\\\" font-size=\\\"18\\\" text-anchor=\\\"start\\\" text-decoration=\\\"none\\\" x-width=\\\"53\\\" x-height=\\\"18\\\" x-left=\\\"271.1\\\" x-top=\\\"318.3\\\" id=\\\"goog_2086231731\\\"><rect class=\\\"s-text-box\\\" stroke=\\\"none\\\" fill=\\\"#000000\\\" fill-opacity=\\\"0.001\\\" width=\\\"53\\\" height=\\\"18\\\" x=\\\"271.1\\\" y=\\\"318.3\\\"/><text class=\\\"s-text-l0\\\" xml:space=\\\"preserve\\\" stroke=\\\"none\\\" fill=\\\"inherit\\\" fill-opacity=\\\"1\\\" text-decoration=\\\"none\\\" x=\\\"271.1\\\" y=\\\"335.3\\\">Footer</text></g>\"},\"translate\":{\"x\":0,\"y\":-217.5}},\"footer-enabled\":\"true\",\"page-footer\":{\"height\":55.5,\"svg\":{\"tag\":\"g\",\"content\":\"<g xmlns=\\\"http://www.w3.org/2000/svg\\\" class=\\\"s-text\\\" stroke-width=\\\"0\\\" fill=\\\"#000000\\\" fill-opacity=\\\"1\\\" kerning=\\\"auto\\\" x-display=\\\"true\\\" x-id=\\\"\\\" stroke=\\\"none\\\" font-weight=\\\"normal\\\" font-style=\\\"normal\\\" font-family=\\\"Helvetica\\\" font-size=\\\"18\\\" text-anchor=\\\"start\\\" text-decoration=\\\"none\\\" x-width=\\\"99\\\" x-height=\\\"18\\\" x-left=\\\"248.1\\\" x-top=\\\"262.8\\\" id=\\\"goog_2086231730\\\"><rect class=\\\"s-text-box\\\" stroke=\\\"none\\\" fill=\\\"#000000\\\" fill-opacity=\\\"0.001\\\" width=\\\"99\\\" height=\\\"18\\\" x=\\\"248.1\\\" y=\\\"262.8\\\"/><text class=\\\"s-text-l0\\\" xml:space=\\\"preserve\\\" stroke=\\\"none\\\" fill=\\\"inherit\\\" fill-opacity=\\\"1\\\" text-decoration=\\\"none\\\" x=\\\"248.1\\\" y=\\\"279.8\\\">Page Footer</text></g>\"},\"translate\":{\"x\":0,\"y\":-162}},\"page-footer-enabled\":\"true\",\"detail\":{\"height\":50,\"svg\":{\"tag\":\"g\",\"content\":\"<g xmlns=\\\"http://www.w3.org/2000/svg\\\" class=\\\"s-text\\\" stroke-width=\\\"0\\\" fill=\\\"#000000\\\" fill-opacity=\\\"1\\\" kerning=\\\"auto\\\" x-display=\\\"true\\\" x-id=\\\"\\\" font-size=\\\"18\\\" font-family=\\\"Helvetica\\\" font-weight=\\\"normal\\\" font-style=\\\"normal\\\" text-anchor=\\\"start\\\" text-decoration=\\\"none\\\" x-width=\\\"47\\\" x-height=\\\"18\\\" x-left=\\\"274.1\\\" x-top=\\\"186\\\" id=\\\"goog_2086231729\\\"><rect class=\\\"s-text-box\\\" stroke=\\\"none\\\" fill=\\\"#000000\\\" fill-opacity=\\\"0.001\\\" width=\\\"47\\\" height=\\\"18\\\" x=\\\"274.1\\\" y=\\\"186\\\"/><text class=\\\"s-text-l0\\\" xml:space=\\\"preserve\\\" stroke=\\\"none\\\" fill=\\\"inherit\\\" fill-opacity=\\\"1\\\" text-decoration=\\\"none\\\" x=\\\"274.1\\\" y=\\\"203\\\">Detail</text></g>\"},\"translate\":{\"x\":0,\"y\":-88}},\"header\":{\"height\":61,\"svg\":{\"tag\":\"g\",\"content\":\"<g xmlns=\\\"http://www.w3.org/2000/svg\\\" class=\\\"s-text\\\" stroke-width=\\\"0\\\" fill=\\\"#000000\\\" fill-opacity=\\\"1\\\" kerning=\\\"auto\\\" x-display=\\\"true\\\" x-id=\\\"\\\" font-size=\\\"18\\\" font-family=\\\"Helvetica\\\" font-weight=\\\"normal\\\" font-style=\\\"normal\\\" text-anchor=\\\"start\\\" text-decoration=\\\"none\\\" x-width=\\\"60\\\" x-height=\\\"18\\\" x-left=\\\"267.6\\\" x-top=\\\"116\\\" id=\\\"goog_2086231728\\\"><rect class=\\\"s-text-box\\\" stroke=\\\"none\\\" fill=\\\"#000000\\\" fill-opacity=\\\"0.001\\\" width=\\\"60\\\" height=\\\"18\\\" x=\\\"267.6\\\" y=\\\"116\\\"/><text class=\\\"s-text-l0\\\" xml:space=\\\"preserve\\\" stroke=\\\"none\\\" fill=\\\"inherit\\\" fill-opacity=\\\"1\\\" text-decoration=\\\"none\\\" x=\\\"267.6\\\" y=\\\"133\\\">Header</text></g>\"},\"translate\":{\"x\":0,\"y\":-75}},\"header-enabled\":\"true\",\"svg\":{\"tag\":\"g\",\"attrs\":{}},\"content-height\":261.1,\"page-break\":\"true\"}SHAPE--><!--LAYOUT<g xmlns=\"http://www.w3.org/2000/svg\" class=\"s-list\" x-id=\"list\" x-header-enabled=\"true\" x-page-footer-enabled=\"true\" x-footer-enabled=\"true\" x-changing-page=\"true\" x-display=\"true\" width=\"555.2\" height=\"322.1\" x=\"20\" y=\"21\" id=\"goog_2086231732\"><g class=\"s-list-header\" transform=\"translate(0,-75) rotate(0 0 0)\" x-top=\"21\" x-height=\"61\"><g class=\"s-text\" stroke-width=\"0\" fill=\"#000000\" fill-opacity=\"1\" kerning=\"auto\" x-display=\"true\" x-id=\"\" font-size=\"18\" font-family=\"Helvetica\" font-weight=\"normal\" font-style=\"normal\" text-anchor=\"start\" text-decoration=\"none\" x-width=\"60\" x-height=\"18\" x-left=\"267.6\" x-top=\"116\" id=\"goog_2086231728\"><rect class=\"s-text-box\" stroke=\"none\" fill=\"#000000\" fill-opacity=\"0.001\" width=\"60\" height=\"18\" x=\"267.6\" y=\"116\"/><text class=\"s-text-l0\" xml:space=\"preserve\" stroke=\"none\" fill=\"inherit\" fill-opacity=\"1\" text-decoration=\"none\" x=\"267.6\" y=\"133\">Header</text></g></g><g class=\"s-list-detail\" transform=\"translate(0,-88) rotate(0 0 0)\" x-top=\"82\" x-height=\"50\"><g class=\"s-text\" stroke-width=\"0\" fill=\"#000000\" fill-opacity=\"1\" kerning=\"auto\" x-display=\"true\" x-id=\"\" font-size=\"18\" font-family=\"Helvetica\" font-weight=\"normal\" font-style=\"normal\" text-anchor=\"start\" text-decoration=\"none\" x-width=\"47\" x-height=\"18\" x-left=\"274.1\" x-top=\"186\" id=\"goog_2086231729\"><rect class=\"s-text-box\" stroke=\"none\" fill=\"#000000\" fill-opacity=\"0.001\" width=\"47\" height=\"18\" x=\"274.1\" y=\"186\"/><text class=\"s-text-l0\" xml:space=\"preserve\" stroke=\"none\" fill=\"inherit\" fill-opacity=\"1\" text-decoration=\"none\" x=\"274.1\" y=\"203\">Detail</text></g></g><g class=\"s-list-page-footer\" transform=\"translate(0,-112) rotate(0 0 0)\" x-top=\"132\" x-height=\"55.5\"><g class=\"s-text\" stroke-width=\"0\" fill=\"#000000\" fill-opacity=\"1\" kerning=\"auto\" x-display=\"true\" x-id=\"\" stroke=\"none\" font-weight=\"normal\" font-style=\"normal\" font-family=\"Helvetica\" font-size=\"18\" text-anchor=\"start\" text-decoration=\"none\" x-width=\"99\" x-height=\"18\" x-left=\"248.1\" x-top=\"262.8\" id=\"goog_2086231730\"><rect class=\"s-text-box\" stroke=\"none\" fill=\"#000000\" fill-opacity=\"0.001\" width=\"99\" height=\"18\" x=\"248.1\" y=\"262.8\"/><text class=\"s-text-l0\" xml:space=\"preserve\" stroke=\"none\" fill=\"inherit\" fill-opacity=\"1\" text-decoration=\"none\" x=\"248.1\" y=\"279.8\">Page Footer</text></g></g><g class=\"s-list-footer\" transform=\"translate(0,-112) rotate(0 0 0)\" x-top=\"187.5\" x-height=\"55.5\"><g class=\"s-text\" stroke-width=\"0\" fill=\"#000000\" fill-opacity=\"1\" kerning=\"auto\" x-display=\"true\" x-id=\"\" stroke=\"none\" font-weight=\"normal\" font-style=\"normal\" font-family=\"Helvetica\" font-size=\"18\" text-anchor=\"start\" text-decoration=\"none\" x-width=\"53\" x-height=\"18\" x-left=\"271.1\" x-top=\"318.3\" id=\"goog_2086231731\"><rect class=\"s-text-box\" stroke=\"none\" fill=\"#000000\" fill-opacity=\"0.001\" width=\"53\" height=\"18\" x=\"271.1\" y=\"318.3\"/><text class=\"s-text-l0\" xml:space=\"preserve\" stroke=\"none\" fill=\"inherit\" fill-opacity=\"1\" text-decoration=\"none\" x=\"271.1\" y=\"335.3\">Footer</text></g></g><text class=\"s-list-id\" font-size=\"11\" font-family=\"Helvetica\" font-weight=\"normal\" font-style=\"normal\" text-anchor=\"start\" stroke=\"none\" fill=\"#7C4007\" fill-opacity=\"1\" x=\"22\" y=\"31.8\">list</text><rect stroke-dasharray=\"5\" stroke=\"#BBBBBB\" stroke-width=\"1\" fill=\"#FFFFFF\" fill-opacity=\"0\" class=\"s-list-face\" width=\"555.2\" height=\"322.1\" x=\"20\" y=\"21\"/></g>LAYOUT--></g></svg>","state":{"layout-guide":[]}}
@@ -0,0 +1 @@
1
+ {"version":"0.7.7.1","finger-print":1145350506,"config":{"title":"Basic List (No Header) Layout","option":{},"page":{"paper-type":"A4","orientation":"portrait","margin-top":"20","margin-bottom":"20","margin-left":"20","margin-right":"20"}},"svg":"<svg width=\"595.2\" height=\"841.8\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" preserveAspectRatio=\"none\" viewBox=\"0 0 595.2 841.8\"><g class=\"canvas\"><!--SHAPE{\"type\":\"s-list\",\"id\":\"default\",\"display\":\"true\",\"desc\":null,\"footer\":{\"height\":55.5,\"svg\":{\"tag\":\"g\",\"content\":\"<g xmlns=\\\"http://www.w3.org/2000/svg\\\" class=\\\"s-text\\\" stroke-width=\\\"0\\\" fill=\\\"#000000\\\" fill-opacity=\\\"1\\\" kerning=\\\"auto\\\" x-display=\\\"true\\\" x-id=\\\"\\\" stroke=\\\"none\\\" font-weight=\\\"normal\\\" font-style=\\\"normal\\\" font-family=\\\"Helvetica\\\" font-size=\\\"18\\\" text-anchor=\\\"start\\\" text-decoration=\\\"none\\\" x-width=\\\"53\\\" x-height=\\\"18\\\" x-left=\\\"271.1\\\" x-top=\\\"318.3\\\" id=\\\"goog_2086231735\\\"><rect class=\\\"s-text-box\\\" stroke=\\\"none\\\" fill=\\\"#000000\\\" fill-opacity=\\\"0.001\\\" width=\\\"53\\\" height=\\\"18\\\" x=\\\"271.1\\\" y=\\\"318.3\\\"/><text class=\\\"s-text-l0\\\" xml:space=\\\"preserve\\\" stroke=\\\"none\\\" fill=\\\"inherit\\\" fill-opacity=\\\"1\\\" text-decoration=\\\"none\\\" x=\\\"271.1\\\" y=\\\"335.3\\\">Footer</text></g>\"},\"translate\":{\"x\":0,\"y\":-278.5}},\"footer-enabled\":\"true\",\"page-footer\":{\"height\":55.5,\"svg\":{\"tag\":\"g\",\"content\":\"<g xmlns=\\\"http://www.w3.org/2000/svg\\\" class=\\\"s-text\\\" stroke-width=\\\"0\\\" fill=\\\"#000000\\\" fill-opacity=\\\"1\\\" kerning=\\\"auto\\\" x-display=\\\"true\\\" x-id=\\\"\\\" stroke=\\\"none\\\" font-weight=\\\"normal\\\" font-style=\\\"normal\\\" font-family=\\\"Helvetica\\\" font-size=\\\"18\\\" text-anchor=\\\"start\\\" text-decoration=\\\"none\\\" x-width=\\\"99\\\" x-height=\\\"18\\\" x-left=\\\"248.1\\\" x-top=\\\"262.8\\\" id=\\\"goog_2086231734\\\"><rect class=\\\"s-text-box\\\" stroke=\\\"none\\\" fill=\\\"#000000\\\" fill-opacity=\\\"0.001\\\" width=\\\"99\\\" height=\\\"18\\\" x=\\\"248.1\\\" y=\\\"262.8\\\"/><text class=\\\"s-text-l0\\\" xml:space=\\\"preserve\\\" stroke=\\\"none\\\" fill=\\\"inherit\\\" fill-opacity=\\\"1\\\" text-decoration=\\\"none\\\" x=\\\"248.1\\\" y=\\\"279.8\\\">Page Footer</text></g>\"},\"translate\":{\"x\":0,\"y\":-223}},\"page-footer-enabled\":\"true\",\"detail\":{\"height\":50,\"svg\":{\"tag\":\"g\",\"content\":\"<g xmlns=\\\"http://www.w3.org/2000/svg\\\" class=\\\"s-text\\\" stroke-width=\\\"0\\\" fill=\\\"#000000\\\" fill-opacity=\\\"1\\\" kerning=\\\"auto\\\" x-display=\\\"true\\\" x-id=\\\"\\\" font-size=\\\"18\\\" font-family=\\\"Helvetica\\\" font-weight=\\\"normal\\\" font-style=\\\"normal\\\" text-anchor=\\\"start\\\" text-decoration=\\\"none\\\" x-width=\\\"47\\\" x-height=\\\"18\\\" x-left=\\\"274.1\\\" x-top=\\\"186\\\" id=\\\"goog_2086231733\\\"><rect class=\\\"s-text-box\\\" stroke=\\\"none\\\" fill=\\\"#000000\\\" fill-opacity=\\\"0.001\\\" width=\\\"47\\\" height=\\\"18\\\" x=\\\"274.1\\\" y=\\\"186\\\"/><text class=\\\"s-text-l0\\\" xml:space=\\\"preserve\\\" stroke=\\\"none\\\" fill=\\\"inherit\\\" fill-opacity=\\\"1\\\" text-decoration=\\\"none\\\" x=\\\"274.1\\\" y=\\\"203\\\">Detail</text></g>\"},\"translate\":{\"x\":0,\"y\":-149}},\"header\":{},\"header-enabled\":\"false\",\"svg\":{\"tag\":\"g\",\"attrs\":{}},\"content-height\":322.1,\"page-break\":\"true\"}SHAPE--><!--LAYOUT<g xmlns=\"http://www.w3.org/2000/svg\" class=\"s-list\" x-id=\"default\" x-header-enabled=\"false\" x-page-footer-enabled=\"true\" x-footer-enabled=\"true\" x-changing-page=\"true\" x-display=\"true\" width=\"555.2\" height=\"322.1\" x=\"20\" y=\"21\" id=\"goog_2086231736\"><g class=\"s-list-header\" transform=\"translate(0,-75) rotate(0 0 0)\" x-top=\"21\" x-height=\"0\" display=\"none\"/><g class=\"s-list-detail\" transform=\"translate(0,-149) rotate(0 0 0)\" x-top=\"21\" x-height=\"50\"><g class=\"s-text\" stroke-width=\"0\" fill=\"#000000\" fill-opacity=\"1\" kerning=\"auto\" x-display=\"true\" x-id=\"\" font-size=\"18\" font-family=\"Helvetica\" font-weight=\"normal\" font-style=\"normal\" text-anchor=\"start\" text-decoration=\"none\" x-width=\"47\" x-height=\"18\" x-left=\"274.1\" x-top=\"186\" id=\"goog_2086231733\"><rect class=\"s-text-box\" stroke=\"none\" fill=\"#000000\" fill-opacity=\"0.001\" width=\"47\" height=\"18\" x=\"274.1\" y=\"186\"/><text class=\"s-text-l0\" xml:space=\"preserve\" stroke=\"none\" fill=\"inherit\" fill-opacity=\"1\" text-decoration=\"none\" x=\"274.1\" y=\"203\">Detail</text></g></g><g class=\"s-list-page-footer\" transform=\"translate(0,-173) rotate(0 0 0)\" x-top=\"71\" x-height=\"55.5\"><g class=\"s-text\" stroke-width=\"0\" fill=\"#000000\" fill-opacity=\"1\" kerning=\"auto\" x-display=\"true\" x-id=\"\" stroke=\"none\" font-weight=\"normal\" font-style=\"normal\" font-family=\"Helvetica\" font-size=\"18\" text-anchor=\"start\" text-decoration=\"none\" x-width=\"99\" x-height=\"18\" x-left=\"248.1\" x-top=\"262.8\" id=\"goog_2086231734\"><rect class=\"s-text-box\" stroke=\"none\" fill=\"#000000\" fill-opacity=\"0.001\" width=\"99\" height=\"18\" x=\"248.1\" y=\"262.8\"/><text class=\"s-text-l0\" xml:space=\"preserve\" stroke=\"none\" fill=\"inherit\" fill-opacity=\"1\" text-decoration=\"none\" x=\"248.1\" y=\"279.8\">Page Footer</text></g></g><g class=\"s-list-footer\" transform=\"translate(0,-173) rotate(0 0 0)\" x-top=\"126.5\" x-height=\"55.5\"><g class=\"s-text\" stroke-width=\"0\" fill=\"#000000\" fill-opacity=\"1\" kerning=\"auto\" x-display=\"true\" x-id=\"\" stroke=\"none\" font-weight=\"normal\" font-style=\"normal\" font-family=\"Helvetica\" font-size=\"18\" text-anchor=\"start\" text-decoration=\"none\" x-width=\"53\" x-height=\"18\" x-left=\"271.1\" x-top=\"318.3\" id=\"goog_2086231735\"><rect class=\"s-text-box\" stroke=\"none\" fill=\"#000000\" fill-opacity=\"0.001\" width=\"53\" height=\"18\" x=\"271.1\" y=\"318.3\"/><text class=\"s-text-l0\" xml:space=\"preserve\" stroke=\"none\" fill=\"inherit\" fill-opacity=\"1\" text-decoration=\"none\" x=\"271.1\" y=\"335.3\">Footer</text></g></g><text class=\"s-list-id\" font-size=\"11\" font-family=\"Helvetica\" font-weight=\"normal\" font-style=\"normal\" text-anchor=\"start\" stroke=\"none\" fill=\"#7C4007\" fill-opacity=\"1\" x=\"22\" y=\"31.8\">default</text><rect stroke-dasharray=\"5\" stroke=\"#BBBBBB\" stroke-width=\"1\" fill=\"#FFFFFF\" fill-opacity=\"0\" class=\"s-list-face\" width=\"555.2\" height=\"322.1\" x=\"20\" y=\"21\"/></g>LAYOUT--></g></svg>","state":{"layout-guide":[]}}
@@ -0,0 +1 @@
1
+ {"version":"0.7.7.1","finger-print":1504945686,"config":{"title":"Basic Layout","option":{},"page":{"paper-type":"A4","orientation":"portrait","margin-top":"20","margin-bottom":"20","margin-left":"20","margin-right":"20"}},"svg":"<svg width=\"595.2\" height=\"841.8\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" preserveAspectRatio=\"none\" viewBox=\"0 0 595.2 841.8\"><g class=\"canvas\"><g class=\"s-text\" stroke-width=\"0\" fill=\"#000000\" fill-opacity=\"1\" kerning=\"auto\" x-display=\"true\" x-id=\"\" font-size=\"36\" font-family=\"Times New Roman\" font-weight=\"normal\" font-style=\"normal\" text-anchor=\"middle\" text-decoration=\"none\" x-width=\"208.9\" x-height=\"100\" x-left=\"197.6\" x-top=\"369\" x-valign=\"center\" id=\"goog_2086231726\"><rect class=\"s-text-box\" stroke=\"none\" fill=\"#000000\" fill-opacity=\"0.001\" width=\"208.9\" height=\"100\" x=\"197.6\" y=\"369\"/><text class=\"s-text-l0\" xml:space=\"preserve\" stroke=\"none\" fill=\"inherit\" fill-opacity=\"1\" text-decoration=\"none\" x=\"300.6\" y=\"427\">Basic Layout1</text></g></g></svg>","state":{"layout-guide":[]}}
@@ -0,0 +1 @@
1
+ {"version":"0.7.7.1","finger-print":1756736661,"config":{"title":"Basic Layout2","option":{},"page":{"paper-type":"A4","orientation":"portrait","margin-top":"20","margin-bottom":"20","margin-left":"20","margin-right":"20"}},"svg":"<svg width=\"595.2\" height=\"841.8\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" preserveAspectRatio=\"none\" viewBox=\"0 0 595.2 841.8\"><g class=\"canvas\"><g class=\"s-text\" stroke-width=\"0\" fill=\"#000000\" fill-opacity=\"1\" kerning=\"auto\" x-display=\"true\" x-id=\"\" stroke=\"none\" font-weight=\"normal\" font-style=\"normal\" font-family=\"Times New Roman\" font-size=\"36\" text-anchor=\"middle\" x-valign=\"center\" text-decoration=\"none\" x-width=\"208.9\" x-height=\"100\" x-left=\"197.6\" x-top=\"369\" id=\"goog_2086231727\"><rect class=\"s-text-box\" stroke=\"none\" fill=\"#000000\" fill-opacity=\"0.001\" width=\"208.9\" height=\"100\" x=\"197.6\" y=\"369\"/><text class=\"s-text-l0\" xml:space=\"preserve\" stroke=\"none\" fill=\"inherit\" fill-opacity=\"1\" text-decoration=\"none\" x=\"300.6\" y=\"427\">Basic Layout2</text></g></g></svg>","state":{"layout-guide":[]}}
@@ -0,0 +1,74 @@
1
+ # coding: utf-8
2
+
3
+ gem 'minitest' # for 1.9.3
4
+ require 'minitest/autorun'
5
+ require 'minitest/spec'
6
+ require 'minitest/unit'
7
+ require 'mocha/mini_test'
8
+
9
+ require 'digest/sha1'
10
+ require 'pathname'
11
+ require 'thinreports'
12
+
13
+ module Thinreports::TestHelper
14
+ ROOT = Pathname.new(File.expand_path('..', __FILE__))
15
+
16
+ def setup
17
+ Thinreports::TestHelper.disable_stderr
18
+ end
19
+
20
+ def teardown
21
+ super
22
+ clear_temp_files
23
+ end
24
+
25
+ def new_report(file, &block)
26
+ report = Thinreports::Report.new layout: data_file(file)
27
+ block.call(report) if block_given?
28
+ report
29
+ end
30
+
31
+ def new_layout(file)
32
+ Thinreports::Layout.new(data_file(file))
33
+ end
34
+
35
+ def new_layout_format(file)
36
+ Thinreports::Layout::Format.build(data_file(file))
37
+ end
38
+
39
+ def clear_temp_files
40
+ FileUtils.rm Dir.glob(temp_path.join('*'))
41
+ end
42
+
43
+ def clean_whitespaces(s)
44
+ s.gsub(/^\s*|\n\s*/, '')
45
+ end
46
+
47
+ def data_file(filename)
48
+ ROOT.join('data', filename).to_s
49
+ end
50
+
51
+ def temp_file(extname = 'pdf')
52
+ filename = (('a'..'z').to_a + (0..9).to_a).shuffle[0, 8].join + ".#{extname}"
53
+ temp_path.join(filename).to_s
54
+ end
55
+
56
+ def temp_path
57
+ ROOT.join('tmp')
58
+ end
59
+
60
+ @@original_stderr = nil
61
+
62
+ def self.disable_stderr
63
+ unless $stdout.is_a? StringIO
64
+ @@original_stderr = $stderr
65
+ $stderr = StringIO.new
66
+ end
67
+ end
68
+
69
+ def self.enable_stderr
70
+ $stderr = @@original_stderr
71
+ end
72
+ end
73
+
74
+ Minitest.after_run { Thinreports::TestHelper.enable_stderr }
data/test/tmp/.gitkeep ADDED
File without changes
@@ -1,8 +1,8 @@
1
1
  # coding: utf-8
2
2
 
3
- require 'test/unit/helper'
3
+ require 'test_helper'
4
4
 
5
- class ThinReports::Core::Format::BaseTest < MiniTest::Unit::TestCase
5
+ class Thinreports::Core::Format::BaseTest < Minitest::Test
6
6
  TEST_FORMAT_CONFIG = {
7
7
  'c1' => 'c1',
8
8
  'c2' => {
@@ -31,40 +31,40 @@ class ThinReports::Core::Format::BaseTest < MiniTest::Unit::TestCase
31
31
  'c21' => 'c21'
32
32
  }
33
33
 
34
- class TestFormat < ThinReports::Core::Format::Base
34
+ class TestFormat < Thinreports::Core::Format::Base
35
35
  # For testing
36
36
  attr_reader :config
37
37
 
38
38
  # Basic methods
39
39
  config_reader :c1
40
- config_reader :c2_1 => %w( c2 c2_1 ),
41
- :c3_1_1 => %w( c3 c3_1 c3_1_1 )
40
+ config_reader c2_1: %w( c2 c2_1 ),
41
+ c3_1_1: %w( c3 c3_1 c3_1_1 )
42
42
  config_reader :c4, :c5
43
43
  config_reader 'c6'
44
44
 
45
45
  # Alias methods
46
- config_reader :c1_alias => %w( c1 ),
47
- :c2_1_alias => %w( c2 c2_1 )
46
+ config_reader c1_alias: %w( c1 ),
47
+ c2_1_alias: %w( c2 c2_1 )
48
48
 
49
49
  # Invalid methods
50
- config_reader :c3_invalid => %w( c3 c3_1 not_exist_key )
50
+ config_reader c3_invalid: %w( c3 c3_1 not_exist_key )
51
51
 
52
52
  # Customized methods
53
- config_reader :c2_1_customized => %w( c2 c2_1 ) do |val|
53
+ config_reader c2_1_customized: %w( c2 c2_1 ) do |val|
54
54
  "Customized #{val}"
55
55
  end
56
56
 
57
57
  # Checker methods
58
58
  config_checker 'true', :c7, :c8
59
- config_checker 'true', :c9_1 => %w( c9 c9_1 ),
60
- :c9_2 => %w( c9 c9_2 )
59
+ config_checker 'true', c9_1: %w( c9 c9_1 ),
60
+ c9_2: %w( c9 c9_2 )
61
61
 
62
62
  # Writer methods
63
63
  config_writer :c10
64
- config_writer :c10_alias => %w( c10 )
65
- config_writer :c11_1 => %w( c11 c11_1 )
64
+ config_writer c10_alias: %w( c10 )
65
+ config_writer c11_1: %w( c11 c11_1 )
66
66
  # Writer for not exist config on default
67
- config_writer :c11_2 => %w( c11 c11_2 )
67
+ config_writer c11_2: %w( c11 c11_2 )
68
68
 
69
69
  # Accessor methods
70
70
  config_accessor :c20
@@ -1,14 +1,14 @@
1
1
  # coding: utf-8
2
2
 
3
- require 'test/unit/helper'
3
+ require 'test_helper'
4
+
5
+ class Thinreports::Core::Format::TestBuilder < Minitest::Test
6
+ include Thinreports::TestHelper
4
7
 
5
- class ThinReports::Core::Format::TestBuilder < MiniTest::Unit::TestCase
6
- include ThinReports::TestHelpers
7
-
8
8
  TEST_RAW_FORMAT = <<-'EOS'
9
9
  {
10
- "node1":"\u3042\u6f22\u5b57\uff20\u3231\u2160\u30ab\u30ca\uff76\uff85",
11
- "node2":{"node2_child":"node2_child value"},
10
+ "node1": "あ漢字@㈱Ⅰカナカナ",
11
+ "node2": { "node2_child":"node2_child value" },
12
12
  "layout":
13
13
  "<svg width=\"595.2\" height=\"841.8\">
14
14
  <g class=\"canvas\">
@@ -19,22 +19,17 @@ class ThinReports::Core::Format::TestBuilder < MiniTest::Unit::TestCase
19
19
  </svg>"
20
20
  }
21
21
  EOS
22
-
23
- class TestFormat < ThinReports::Core::Format::Base
24
- extend ::ThinReports::Core::Format::Builder
25
-
22
+
23
+ class TestFormat < Thinreports::Core::Format::Base
24
+ extend ::Thinreports::Core::Format::Builder
26
25
  config_reader :layout
27
26
  config_accessor :shapes
28
-
29
- # For test
30
- public_class_method :parse_json, :build_layout, :clean,
31
- :clean_with_attributes, :shape_tag
32
27
  end
33
-
28
+
34
29
  def setup
35
30
  @raw_format = clean_whitespaces(TEST_RAW_FORMAT)
36
31
  end
37
-
32
+
38
33
  def test_parse_json
39
34
  expected_format = {
40
35
  "node1" => "あ漢字@㈱Ⅰカナカナ",
@@ -53,27 +48,26 @@ class ThinReports::Core::Format::TestBuilder < MiniTest::Unit::TestCase
53
48
  }
54
49
  assert_equal TestFormat.parse_json(@raw_format), expected_format
55
50
  end
56
-
51
+
57
52
  def test_build_layout
58
53
  format = TestFormat.new(TestFormat.parse_json(@raw_format))
59
54
  format.shapes = {}
60
55
 
61
56
  TestFormat.build_layout(format) do |type, f|
62
- flexmock(:id => f['id'])
57
+ Thinreports::Core::Shape::Format(type).build(f)
63
58
  end
64
-
59
+
65
60
  assert_equal format.layout, clean_whitespaces(<<-'EOS')
66
61
  <svg width="595.2" height="841.8">
67
62
  <g class="canvas">
68
63
  <rect x="100" y="100" width="100" height="100" fill="red" x-attr="cleaned attr"></rect>
69
- <%= r(:"t1")%>
70
64
  <!--LAYOUT<text x="60" y="103">t1</text>LAYOUT-->
71
65
  </g>
72
66
  </svg>
73
67
  EOS
74
68
  assert_includes format.shapes.keys, :t1
75
69
  end
76
-
70
+
77
71
  def test_clean
78
72
  source = clean_whitespaces(<<-'EOS')
79
73
  <svg width="595.2" height="841.8">
@@ -90,7 +84,7 @@ class ThinReports::Core::Format::TestBuilder < MiniTest::Unit::TestCase
90
84
  </svg>
91
85
  EOS
92
86
  end
93
-
87
+
94
88
  def test_clean_with_attributes
95
89
  source = clean_whitespaces(<<-'EOS')
96
90
  <svg width="595.2" height="841.8">
@@ -107,8 +101,9 @@ class ThinReports::Core::Format::TestBuilder < MiniTest::Unit::TestCase
107
101
  </svg>
108
102
  EOS
109
103
  end
110
-
104
+
111
105
  def test_shape_tag
112
- assert_equal TestFormat.shape_tag(flexmock(:id => :foo)), '<%= r(:"foo")%>'
106
+ shape_format = stub(id: :foo)
107
+ assert_equal TestFormat.shape_tag(shape_format), '<%= r(:"foo")%>'
113
108
  end
114
- end
109
+ end
@@ -1,89 +1,86 @@
1
1
  # coding: utf-8
2
2
 
3
- require 'test/unit/helper'
3
+ require 'test_helper'
4
+
5
+ class Thinreports::Core::Shape::Base::TestInternal < Minitest::Test
6
+ include Thinreports::TestHelper
7
+
8
+ def setup
9
+ @report = Thinreports::Report.new layout: data_file('layout_text1.tlf')
10
+ @report.start_new_page
11
+ end
4
12
 
5
- class ThinReports::Core::Shape::Base::TestInternal < MiniTest::Unit::TestCase
6
- include ThinReports::TestHelpers
7
-
8
13
  def create_internal(format_config = {}, &block)
9
14
  format = unless format_config.empty?
10
- format_klass = ::Class.new(ThinReports::Core::Shape::Basic::Format) {
15
+ format_klass = Class.new(Thinreports::Core::Shape::Basic::Format) {
11
16
  config_reader(*format_config.keys.map {|k| k.to_sym })
12
17
  }
13
18
  format_klass.new(format_config)
14
19
  else
15
- ThinReports::Core::Shape::Basic::Format.new({})
20
+ Thinreports::Core::Shape::Basic::Format.new({})
16
21
  end
17
-
18
- klass = ::Class.new(ThinReports::Core::Shape::Base::Internal, &block)
19
- klass.new(flexmock('parent'), format)
22
+
23
+ klass = Class.new(Thinreports::Core::Shape::Base::Internal, &block)
24
+ klass.new(@report.page, format)
20
25
  end
21
-
26
+
22
27
  def test_self_format_delegators_should_defines_method_delegated_from_format
23
28
  internal = create_internal('m1' => 'm1_value') {
24
29
  format_delegators :m1
25
30
  }
26
31
  assert_respond_to internal, :m1
27
32
  end
28
-
33
+
29
34
  def test_method_delegated_from_format_should_return_same_value_as_an_format
30
35
  internal = create_internal('m1' => 'm1 value') {
31
36
  format_delegators :m1
32
37
  }
33
38
  assert_same internal.m1, internal.format.m1
34
39
  end
35
-
36
- def test_switch_parent_should_replace_a_parent_property_to_the_specified_new_parent
37
- new_parent = flexmock('new_parent')
38
-
39
- internal = create_internal
40
- internal.switch_parent!(new_parent)
41
-
42
- assert_same internal.parent, new_parent
43
- end
44
-
40
+
45
41
  def test_copied_internal_should_have_the_new_value_specified_as_a_parent_property
46
- new_parent = flexmock('new_parent')
42
+ new_page = @report.start_new_page
47
43
  internal = create_internal {
48
44
  def style
49
- @style ||= ThinReports::Core::Shape::Style::Base.new(format)
45
+ @style ||= Thinreports::Core::Shape::Style::Base.new(format)
50
46
  end
51
47
  }
52
- assert_same internal.copy(new_parent).parent, new_parent
48
+
49
+ assert_same internal.copy(new_page).parent, new_page
53
50
  end
54
-
51
+
55
52
  def test_copied_internal_should_have_style_copied_from_original
56
53
  internal = create_internal {
57
54
  def style
58
- @style ||= ThinReports::Core::Shape::Style::Base.new(format)
55
+ @style ||= Thinreports::Core::Shape::Style::Base.new(format)
59
56
  end
60
57
  }
61
58
  internal.style.write_internal_style(:foo, 'bar')
62
- new_internal = internal.copy(flexmock('new_parent'))
63
-
59
+ new_internal = internal.copy(@report.start_new_page)
60
+
64
61
  assert_equal new_internal.style.read_internal_style(:foo), 'bar'
65
62
  end
66
-
63
+
67
64
  def test_copied_internal_should_have_states_property_copied_from_original
68
65
  internal = create_internal {
69
66
  def style
70
- @style ||= ThinReports::Core::Shape::Style::Base.new(format)
67
+ @style ||= Thinreports::Core::Shape::Style::Base.new(format)
71
68
  end
72
69
  }
73
70
  internal.states[:foo] = 'bar'
74
- new_internal = internal.copy(flexmock('new_parent'))
75
-
71
+ new_internal = internal.copy(@report.start_new_page)
72
+
76
73
  assert_equal new_internal.states[:foo], 'bar'
77
74
  end
78
-
75
+
79
76
  def test_copy_should_execute_block_with_new_internal_as_argument
80
77
  internal = create_internal {
81
78
  def style
82
- @style ||= ThinReports::Core::Shape::Style::Base.new(format)
79
+ @style ||= Thinreports::Core::Shape::Style::Base.new(format)
83
80
  end
84
81
  }
85
- internal.copy(flexmock('new_parent')) do |new_internal|
86
- assert_equal new_internal.is_a?(ThinReports::Core::Shape::Base::Internal), true
82
+ internal.copy(@report.start_new_page) do |new_internal|
83
+ assert_equal new_internal.is_a?(Thinreports::Core::Shape::Base::Internal), true
87
84
  end
88
85
  end
89
- end
86
+ end
@@ -1,9 +1,9 @@
1
1
  # coding: utf-8
2
2
 
3
- require 'test/unit/helper'
3
+ require 'test_helper'
4
4
 
5
- class ThinReports::Core::Shape::Basic::TestBlockFormat < MiniTest::Unit::TestCase
6
- include ThinReports::TestHelpers
5
+ class Thinreports::Core::Shape::Basic::TestBlockFormat < Minitest::Test
6
+ include Thinreports::TestHelper
7
7
 
8
8
  TEST_BLOCK_FORMAT = {
9
9
  "value" => "default value",
@@ -25,6 +25,6 @@ class ThinReports::Core::Shape::Basic::TestBlockFormat < MiniTest::Unit::TestCas
25
25
  end
26
26
 
27
27
  def format
28
- ThinReports::Core::Shape::Basic::BlockFormat.new(TEST_BLOCK_FORMAT)
28
+ Thinreports::Core::Shape::Basic::BlockFormat.new(TEST_BLOCK_FORMAT)
29
29
  end
30
30
  end
@@ -1,27 +1,29 @@
1
1
  # coding: utf-8
2
2
 
3
- require 'test/unit/helper'
3
+ require 'test_helper'
4
+
5
+ class Thinreports::Core::Shape::Basic::TestBlockInterface < Minitest::Test
6
+ include Thinreports::TestHelper
7
+
8
+ Basic = Thinreports::Core::Shape::Basic
4
9
 
5
- class ThinReports::Core::Shape::Basic::TestBlockInterface < MiniTest::Unit::TestCase
6
- include ThinReports::TestHelpers
7
-
8
- Basic = ThinReports::Core::Shape::Basic
9
-
10
10
  def setup
11
- parent = flexmock('parent')
11
+ report = Thinreports::Report.new layout: data_file('layout_text1')
12
+ parent = report.start_new_page
13
+
12
14
  format = Basic::BlockFormat.new({})
13
- internal = Basic::BlockInternal.new(parent, Basic::BlockFormat.new({}))
14
-
15
- @interface = Basic::BlockInterface.new(parent, format, internal)
15
+ internal = Basic::BlockInternal.new parent, format
16
+
17
+ @interface = Basic::BlockInterface.new parent, format, internal
16
18
  end
17
-
19
+
18
20
  def test_value_should_work_as_reader_with_no_arguments
19
21
  @interface.internal.write_value('new value')
20
22
  assert_equal @interface.value, 'new value'
21
23
  end
22
-
24
+
23
25
  def test_value_should_work_as_writer_with_arguments
24
26
  @interface.value('new value')
25
27
  assert_equal @interface.internal.read_value, 'new value'
26
28
  end
27
- end
29
+ end
@@ -1,55 +1,58 @@
1
1
  # coding: utf-8
2
2
 
3
- require 'test/unit/helper'
3
+ require 'test_helper'
4
+
5
+ class Thinreports::Core::Shape::Basic::TestBlockInternal < Minitest::Test
6
+ include Thinreports::TestHelper
7
+
8
+ Basic = Thinreports::Core::Shape::Basic
4
9
 
5
- class ThinReports::Core::Shape::Basic::TestBlockInternal < MiniTest::Unit::TestCase
6
- include ThinReports::TestHelpers
7
-
8
- Basic = ThinReports::Core::Shape::Basic
9
-
10
10
  def test_box_should_return_value_of_format
11
11
  internal = init_internal('box' => 'box of format')
12
12
  assert_equal internal.box, 'box of format'
13
13
  end
14
-
14
+
15
15
  def test_read_value_should_return_value_from_format
16
16
  internal = init_internal('value' => 'default value')
17
17
  assert_equal internal.read_value, 'default value'
18
18
  end
19
-
19
+
20
20
  def test_read_value_should_return_value_from_state_with_value_key
21
21
  internal = init_internal
22
22
  internal.states[:value] = 'new value'
23
23
  assert_equal internal.read_value, 'new value'
24
24
  end
25
-
25
+
26
26
  def test_real_value_should_return_the_same_value_as_a_read_value_method
27
27
  internal = init_internal
28
28
  internal.states[:value] = 'foo'
29
29
  assert_same internal.real_value, internal.read_value
30
30
  end
31
-
31
+
32
32
  def test_write_value_should_save_value_to_states_store_as_value
33
33
  internal = init_internal
34
34
  internal.write_value('new value')
35
35
  assert_equal internal.states[:value], 'new value'
36
36
  end
37
-
37
+
38
38
  def test_type_of_asker_should_return_true_when_given_the_block_value
39
39
  assert_equal init_internal.type_of?(:block), true
40
40
  end
41
-
41
+
42
42
  def test_value_should_works_the_same_as_read_value_method
43
43
  internal = init_internal
44
44
  internal.write_value('new value')
45
45
  assert_same internal.read_value, internal.value
46
46
  end
47
-
47
+
48
48
  def test_type_of_asker_should_return_false_otherwise
49
49
  assert_equal [:iblock, :tblock, :text, :list].all? {|t| !init_internal.type_of?(t)}, true
50
50
  end
51
-
51
+
52
52
  def init_internal(format = {})
53
- Basic::BlockInternal.new(flexmock('parent'), Basic::BlockFormat.new(format))
53
+ report = Thinreports::Report.new layout: data_file('layout_text1')
54
+ parent = report.start_new_page
55
+
56
+ Basic::BlockInternal.new(parent, Basic::BlockFormat.new(format))
54
57
  end
55
- end
58
+ end