rbpdf 1.18.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 (120) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG +35 -0
  3. data/Gemfile +4 -0
  4. data/README.md +68 -0
  5. data/Rakefile +2 -0
  6. data/lib/core/rmagick.rb +85 -0
  7. data/lib/fonts/README.z +2 -0
  8. data/lib/fonts/arialunicid0_cw.rb +1738 -0
  9. data/lib/fonts/cid0cs.rb +21 -0
  10. data/lib/fonts/cid0ct.rb +21 -0
  11. data/lib/fonts/cid0jp.rb +21 -0
  12. data/lib/fonts/cid0kr.rb +21 -0
  13. data/lib/fonts/courier.rb +37 -0
  14. data/lib/fonts/dejavu-fonts-ttf-2.33/AUTHORS +53 -0
  15. data/lib/fonts/dejavu-fonts-ttf-2.33/BUGS +3 -0
  16. data/lib/fonts/dejavu-fonts-ttf-2.33/LICENSE +99 -0
  17. data/lib/fonts/dejavu-fonts-ttf-2.33/NEWS +1315 -0
  18. data/lib/fonts/dejavu-fonts-ttf-2.33/README +59 -0
  19. data/lib/fonts/dejavusans.ctg.z +0 -0
  20. data/lib/fonts/dejavusans.rb +338 -0
  21. data/lib/fonts/dejavusans.z +0 -0
  22. data/lib/fonts/dejavusansb.ctg.z +0 -0
  23. data/lib/fonts/dejavusansb.rb +330 -0
  24. data/lib/fonts/dejavusansb.z +0 -0
  25. data/lib/fonts/dejavusansbi.ctg.z +0 -0
  26. data/lib/fonts/dejavusansbi.rb +297 -0
  27. data/lib/fonts/dejavusansbi.z +0 -0
  28. data/lib/fonts/dejavusansi.ctg.z +0 -0
  29. data/lib/fonts/dejavusansi.rb +305 -0
  30. data/lib/fonts/dejavusansi.z +0 -0
  31. data/lib/fonts/freefont-20080912/AUTHORS +191 -0
  32. data/lib/fonts/freefont-20080912/COPYING +341 -0
  33. data/lib/fonts/freefont-20080912/CREDITS +506 -0
  34. data/lib/fonts/freefont-20080912/ChangeLog +3320 -0
  35. data/lib/fonts/freefont-20080912/INSTALL +81 -0
  36. data/lib/fonts/freefont-20080912/README +108 -0
  37. data/lib/fonts/freemono.ctg.z +0 -0
  38. data/lib/fonts/freemono.rb +203 -0
  39. data/lib/fonts/freemono.z +0 -0
  40. data/lib/fonts/freemonob.ctg.z +0 -0
  41. data/lib/fonts/freemonob.rb +120 -0
  42. data/lib/fonts/freemonob.z +0 -0
  43. data/lib/fonts/freemonobi.ctg.z +0 -0
  44. data/lib/fonts/freemonobi.rb +84 -0
  45. data/lib/fonts/freemonobi.z +0 -0
  46. data/lib/fonts/freemonoi.ctg.z +0 -0
  47. data/lib/fonts/freemonoi.rb +136 -0
  48. data/lib/fonts/freemonoi.z +0 -0
  49. data/lib/fonts/freesans.ctg.z +0 -0
  50. data/lib/fonts/freesans.rb +196 -0
  51. data/lib/fonts/freesans.z +0 -0
  52. data/lib/fonts/freesansb.ctg.z +0 -0
  53. data/lib/fonts/freesansb.rb +136 -0
  54. data/lib/fonts/freesansb.z +0 -0
  55. data/lib/fonts/freesansbi.ctg.z +0 -0
  56. data/lib/fonts/freesansbi.rb +108 -0
  57. data/lib/fonts/freesansbi.z +0 -0
  58. data/lib/fonts/freesansi.ctg.z +0 -0
  59. data/lib/fonts/freesansi.rb +136 -0
  60. data/lib/fonts/freesansi.z +0 -0
  61. data/lib/fonts/freeserif.ctg.z +0 -0
  62. data/lib/fonts/freeserif.rb +285 -0
  63. data/lib/fonts/freeserif.z +0 -0
  64. data/lib/fonts/freeserifb.ctg.z +0 -0
  65. data/lib/fonts/freeserifb.rb +164 -0
  66. data/lib/fonts/freeserifb.z +0 -0
  67. data/lib/fonts/freeserifbi.ctg.z +0 -0
  68. data/lib/fonts/freeserifbi.rb +130 -0
  69. data/lib/fonts/freeserifbi.z +0 -0
  70. data/lib/fonts/freeserifi.ctg.z +0 -0
  71. data/lib/fonts/freeserifi.rb +151 -0
  72. data/lib/fonts/freeserifi.z +0 -0
  73. data/lib/fonts/helvetica.rb +34 -0
  74. data/lib/fonts/helveticab.rb +34 -0
  75. data/lib/fonts/helveticabi.rb +34 -0
  76. data/lib/fonts/helveticai.rb +34 -0
  77. data/lib/fonts/hysmyeongjostdmedium.rb +31 -0
  78. data/lib/fonts/kozgopromedium.rb +47 -0
  79. data/lib/fonts/kozminproregular.rb +46 -0
  80. data/lib/fonts/msungstdlight.rb +23 -0
  81. data/lib/fonts/sjis.rb +834 -0
  82. data/lib/fonts/stsongstdlight.rb +23 -0
  83. data/lib/fonts/symbol.rb +33 -0
  84. data/lib/fonts/times.rb +34 -0
  85. data/lib/fonts/timesb.rb +34 -0
  86. data/lib/fonts/timesbi.rb +34 -0
  87. data/lib/fonts/timesi.rb +34 -0
  88. data/lib/fonts/uni2cid_ac15.rb +23613 -0
  89. data/lib/fonts/uni2cid_ag15.rb +30222 -0
  90. data/lib/fonts/uni2cid_aj16.rb +15705 -0
  91. data/lib/fonts/uni2cid_ak12.rb +17530 -0
  92. data/lib/fonts/zapfdingbats.rb +33 -0
  93. data/lib/htmlcolors.rb +207 -0
  94. data/lib/rbpdf.rb +14472 -0
  95. data/lib/rbpdf/version.rb +3 -0
  96. data/lib/unicode_data.rb +18315 -0
  97. data/logo_example.png +0 -0
  98. data/rbpdf.gemspec +35 -0
  99. data/test/rbpdf_bidi_test.rb +65 -0
  100. data/test/rbpdf_bookmark_test.rb +57 -0
  101. data/test/rbpdf_cell_test.rb +232 -0
  102. data/test/rbpdf_content_test.rb +117 -0
  103. data/test/rbpdf_css_test.rb +318 -0
  104. data/test/rbpdf_dom_test.rb +113 -0
  105. data/test/rbpdf_font_func_test.rb +27 -0
  106. data/test/rbpdf_font_style_test.rb +34 -0
  107. data/test/rbpdf_font_test.rb +181 -0
  108. data/test/rbpdf_format_test.rb +27 -0
  109. data/test/rbpdf_func_test.rb +126 -0
  110. data/test/rbpdf_html_test.rb +164 -0
  111. data/test/rbpdf_htmlcell_test.rb +64 -0
  112. data/test/rbpdf_image_test.rb +108 -0
  113. data/test/rbpdf_test.rb +245 -0
  114. data/test/rbpdf_transaction_test.rb +199 -0
  115. data/test/rbpdf_viewerpreferences_test.rb +37 -0
  116. data/test/rbpdf_write_test.rb +173 -0
  117. data/test/test_helper.rb +1 -0
  118. data/test_unicode.rbpdf +115 -0
  119. data/utf8test.txt +120 -0
  120. metadata +216 -0
@@ -0,0 +1,318 @@
1
+ require 'test_helper'
2
+
3
+ class RbpdfCssTest < ActiveSupport::TestCase
4
+ class MYPDF < RBPDF
5
+ def extractCSSproperties(cssdata)
6
+ super
7
+ end
8
+ def isValidCSSSelectorForTag(dom, key, selector)
9
+ super
10
+ end
11
+ def getTagStyleFromCSS(dom, key, css)
12
+ super
13
+ end
14
+ def getHtmlDomArray(html)
15
+ super
16
+ end
17
+ end
18
+
19
+ test "CSS Basic" do
20
+ pdf = MYPDF.new
21
+
22
+ # empty
23
+ css = pdf.extractCSSproperties('')
24
+ assert_equal css, {}
25
+ # empty blocks
26
+ css = pdf.extractCSSproperties('h1 {}')
27
+ assert_equal css, {}
28
+ # comment
29
+ css = pdf.extractCSSproperties('/* comment */')
30
+ assert_equal css, {}
31
+
32
+ css = pdf.extractCSSproperties('h1 { color: navy; font-family: times; }')
33
+ assert_equal css, {"0001 h1"=>"color:navy;font-family:times;"}
34
+
35
+ css = pdf.extractCSSproperties('h1 { color: navy; font-family: times; } p.first { color: #003300; font-family: helvetica; font-size: 12pt; }')
36
+ assert_equal css, {"0001 h1"=>"color:navy;font-family:times;", "0021 p.first"=>"color:#003300;font-family:helvetica;font-size:12pt;"}
37
+
38
+ css = pdf.extractCSSproperties('h1,h2,h3{background-color:#e0e0e0}')
39
+ assert_equal css, {"0001 h1"=>"background-color:#e0e0e0", "0001 h2"=>"background-color:#e0e0e0", "0001 h3"=>"background-color:#e0e0e0"}
40
+
41
+ css = pdf.extractCSSproperties('p.second { color: rgb(00,63,127); font-family: times; font-size: 12pt; text-align: justify; }')
42
+ assert_equal css, {"0011 p.second"=>"color:rgb(00,63,127);font-family:times;font-size:12pt;text-align:justify;"}
43
+
44
+ css = pdf.extractCSSproperties('p#second { color: rgb(00,63,127); font-family: times; font-size: 12pt; text-align: justify; }')
45
+ assert_equal css, {"0101 p#second"=>"color:rgb(00,63,127);font-family:times;font-size:12pt;text-align:justify;"}
46
+
47
+ css = pdf.extractCSSproperties('p.first { color: rgb(00,63,127); } p.second { font-family: times; }')
48
+ assert_equal css, {"0021 p.first"=>"color:rgb(00,63,127);", "0011 p.second"=>"font-family:times;"}
49
+
50
+ css = pdf.extractCSSproperties('p#first { color: rgb(00,63,127); } p#second { color: rgb(00,63,127); }')
51
+ assert_equal css, {"0111 p#first"=>"color:rgb(00,63,127);", "0101 p#second"=>"color:rgb(00,63,127);"}
52
+
53
+ # media
54
+ css = pdf.extractCSSproperties('@media print { body { font: 10pt serif } }')
55
+ assert_equal css, {"0001 body"=>"font:10pt serif"}
56
+ css = pdf.extractCSSproperties('@media screen { body { font: 12pt sans-serif } }')
57
+ assert_equal css, {}
58
+ css = pdf.extractCSSproperties('@media all { body { line-height: 1.2 } }')
59
+ assert_equal css, {"0001 body"=>"line-height:1.2"}
60
+
61
+ css = pdf.extractCSSproperties('@media print {
62
+ #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
63
+ #main { background: #fff; }
64
+ #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
65
+ #wiki_add_attachment { display:none; }
66
+ .hide-when-print { display: none; }
67
+ .autoscroll {overflow-x: visible;}
68
+ table.list {margin-top:0.5em;}
69
+ table.list th, table.list td {border: 1px solid #aaa;}
70
+ } @media all { body { line-height: 1.2 } }')
71
+ assert_equal css, {"0100 #top-menu"=>"display:none;",
72
+ "0100 #header"=>"display:none;",
73
+ "0100 #main-menu"=>"display:none;",
74
+ "0100 #sidebar"=>"display:none;",
75
+ "0100 #footer"=>"display:none;",
76
+ "0010 .contextual"=>"display:none;",
77
+ "0010 .other-formats"=>"display:none;",
78
+ "0100 #main"=>"background:#fff;",
79
+ "0100 #content"=>"width:99%;margin:0;padding:0;border:0;background:#fff;overflow:visible !important;",
80
+ "0100 #wiki_add_attachment"=>"display:none;",
81
+ "0010 .hide-when-print"=>"display:none;",
82
+ "0010 .autoscroll"=>"overflow-x:visible;",
83
+ "0011 table.list"=>"margin-top:0.5em;",
84
+ "0012 table.list th"=>"border:1px solid #aaa;",
85
+ "0012 table.list td"=>"border:1px solid #aaa;",
86
+ "0001 body"=>"line-height:1.2"}
87
+ end
88
+
89
+ test "CSS Selector Valid test" do
90
+ pdf = MYPDF.new
91
+
92
+ # Simple CSS
93
+ dom = pdf.getHtmlDomArray('<p>abc</p>')
94
+ assert_equal dom.length, 4
95
+ valid = pdf.isValidCSSSelectorForTag(dom, 1, ' p') # dom, key, css selector
96
+ assert_equal valid, true
97
+
98
+ dom = pdf.getHtmlDomArray('<h1>abc</h1>')
99
+ assert_equal dom.length, 4
100
+ valid = pdf.isValidCSSSelectorForTag(dom, 1, ' h1') # dom, key, css selector
101
+ assert_equal valid, true
102
+
103
+ dom = pdf.getHtmlDomArray('<p class="first">abc</p>')
104
+ assert_equal dom.length, 4
105
+ valid = pdf.isValidCSSSelectorForTag(dom, 1, ' p.first') # dom, key, css selector
106
+ assert_equal valid, true
107
+
108
+ dom = pdf.getHtmlDomArray('<p class="first">abc<span>def</span></p>')
109
+ assert_equal dom.length, 7
110
+ valid = pdf.isValidCSSSelectorForTag(dom, 3, ' p.first span') # dom, key, css selector
111
+ assert_equal valid, true
112
+
113
+ dom = pdf.getHtmlDomArray('<p id="second">abc</p>')
114
+ assert_equal dom.length, 4
115
+ valid = pdf.isValidCSSSelectorForTag(dom, 1, ' p#second') # dom, key, css selector
116
+ assert_equal valid, true
117
+
118
+ dom = pdf.getHtmlDomArray('<p id="second">abc<span>def</span></p>')
119
+ assert_equal dom.length, 7
120
+ valid = pdf.isValidCSSSelectorForTag(dom, 3, ' p#second > span') # dom, key, css selector
121
+ assert_equal valid, true
122
+ end
123
+
124
+ test "CSS Tag Sytle test 1" do
125
+ pdf = MYPDF.new
126
+
127
+ # Simple CSS
128
+ dom = pdf.getHtmlDomArray('<h1>abc</h1>')
129
+ assert_equal dom.length, 4
130
+
131
+ tag = pdf.getTagStyleFromCSS(dom, 1, {'0001 h1'=>'color:navy;font-family:times;'}) # dom, key, css selector
132
+ assert_equal tag, ';color:navy;font-family:times;'
133
+
134
+ tag = pdf.getTagStyleFromCSS(dom, 1, {'0001h1'=>'color:navy;font-family:times;'}) # dom, key, css selector
135
+ assert_equal tag, ''
136
+
137
+ tag = pdf.getTagStyleFromCSS(dom, 1, {'0001 h2'=>'color:navy;font-family:times;'}) # dom, key, css selector
138
+ assert_equal tag, ''
139
+ end
140
+
141
+ test "CSS Tag Sytle test 2" do
142
+ pdf = MYPDF.new
143
+
144
+ dom = pdf.getHtmlDomArray('<p class="first">abc</p>')
145
+ assert_equal dom.length, 4
146
+
147
+ tag = pdf.getTagStyleFromCSS(dom, 1, {'0021 p.first'=>'color:rgb(00,63,127);'})
148
+ assert_equal tag, ';color:rgb(00,63,127);'
149
+
150
+ dom = pdf.getHtmlDomArray('<p id="second">abc</p>')
151
+ assert_equal dom.length, 4
152
+
153
+ tag = pdf.getTagStyleFromCSS(dom, 1, {'0101 p#second'=>'color:rgb(00,63,127);font-family:times;font-size:12pt;text-align:justify;'})
154
+ assert_equal tag, ';color:rgb(00,63,127);font-family:times;font-size:12pt;text-align:justify;'
155
+ end
156
+
157
+ test "CSS Dom test" do
158
+ pdf = MYPDF.new
159
+
160
+ html = '<style> table, td { border: 2px #ff0000 solid; } </style>
161
+ <h2>HTML TABLE:</h2>
162
+ <table> <tr> <th>abc</th> </tr>
163
+ <tr> <td>def</td> </tr> </table>'
164
+ dom = pdf.getHtmlDomArray(html)
165
+ ## remove style tag block (by getHtmlDomArray()) ##
166
+ ## added marker tag (by getHtmlDomArray()) ##
167
+ # '<h2>HTML TABLE:</h2>
168
+ # <table><tr><th>abc<marker style="font-size:0"/></th></tr>
169
+ # <tr><td>def<marker style="font-size:0"/></td></tr></table>'
170
+ assert_equal dom.length, 18
171
+
172
+ assert_equal dom[0]['parent'], 0 # Root
173
+ assert_equal dom[0]['tag'], false
174
+ assert_equal dom[0]['attribute'], {}
175
+
176
+ # <h2>
177
+ assert_equal dom[1]['elkey'], 0
178
+ assert_equal dom[1]['parent'], 0 # parent -> parent tag key
179
+ assert_equal dom[1]['tag'], true
180
+ assert_equal dom[1]['opening'], true
181
+ assert_equal dom[1]['value'], 'h2'
182
+
183
+ # <table>
184
+ assert_equal dom[4]['value'], 'table'
185
+ assert_equal dom[4]['attribute'], {'border'=>'2px #ff0000 solid', 'style'=>';border:2px #ff0000 solid;'}
186
+ assert_equal dom[4]['style']['border'], '2px #ff0000 solid'
187
+ assert_equal dom[4]['attribute']['border'], '2px #ff0000 solid'
188
+ end
189
+
190
+ test "CSS Dom line-height test normal" do
191
+ pdf = MYPDF.new
192
+
193
+ html = '<style> h2 { line-height: normal; } </style>
194
+ <h2>HTML TEST</h2>'
195
+ dom = pdf.getHtmlDomArray(html)
196
+ ## remove style tag block (by getHtmlDomArray()) ##
197
+ # '<h2>HTML TEST</h2>'
198
+ assert_equal dom.length, 4
199
+
200
+ # <h2>
201
+ assert_equal dom[1]['elkey'], 0
202
+ assert_equal dom[1]['parent'], 0 # parent -> parent tag key
203
+ assert_equal dom[1]['tag'], true
204
+ assert_equal dom[1]['opening'], true
205
+ assert_equal dom[1]['value'], 'h2'
206
+ assert_equal dom[1]['line-height'], 1.25
207
+ end
208
+
209
+ test "CSS Dom line-height test numeric" do
210
+ pdf = MYPDF.new
211
+
212
+ html = '<style> h2 { line-height: 1.4; } </style>
213
+ <h2>HTML TEST</h2>'
214
+ dom = pdf.getHtmlDomArray(html)
215
+ ## remove style tag block (by getHtmlDomArray()) ##
216
+ # '<h2>HTML TEST</h2>'
217
+ assert_equal dom.length, 4
218
+
219
+ # <h2>
220
+ assert_equal dom[1]['elkey'], 0
221
+ assert_equal dom[1]['parent'], 0 # parent -> parent tag key
222
+ assert_equal dom[1]['tag'], true
223
+ assert_equal dom[1]['opening'], true
224
+ assert_equal dom[1]['value'], 'h2'
225
+ assert_equal dom[1]['line-height'], 1.4
226
+ end
227
+
228
+ test "CSS Dom line-height test percentage" do
229
+ pdf = MYPDF.new
230
+
231
+ html = '<style> h2 { line-height: 10%; } </style>
232
+ <h2>HTML TEST</h2>'
233
+ dom = pdf.getHtmlDomArray(html)
234
+ ## remove style tag block (by getHtmlDomArray()) ##
235
+ # '<h2>HTML TEST</h2>'
236
+ assert_equal dom.length, 4
237
+
238
+ # <h2>
239
+ assert_equal dom[1]['parent'], 0 # parent -> parent tag key
240
+ assert_equal dom[1]['elkey'], 0
241
+ assert_equal dom[1]['tag'], true
242
+ assert_equal dom[1]['opening'], true
243
+ assert_equal dom[1]['value'], 'h2'
244
+ assert_equal dom[1]['line-height'], 0.1
245
+ end
246
+
247
+ test "CSS Dom class test" do
248
+ pdf = MYPDF.new
249
+
250
+ html = '<style>p.first { color: #003300; font-family: helvetica; font-size: 12pt; }
251
+ p.first span { color: #006600; font-style: italic; }</style>
252
+ <p class="first">Example <span>Fusce</span></p>'
253
+ dom = pdf.getHtmlDomArray(html)
254
+ ## remove style tag block (by getHtmlDomArray()) ##
255
+ # '<p class="first">Example <span>Fusce</span></p>'
256
+ assert_equal dom.length, 7
257
+
258
+ # <p class="first">
259
+ assert_equal dom[1]['elkey'], 0
260
+ assert_equal dom[1]['parent'], 0 # parent -> parent tag key
261
+ assert_equal dom[1]['tag'], true
262
+ assert_equal dom[1]['opening'], true
263
+ assert_equal dom[1]['value'], 'p'
264
+ assert_equal dom[1]['attribute']['class'], 'first'
265
+ assert_equal dom[1]['style']['color'], '#003300'
266
+ assert_equal dom[1]['style']['font-family'], 'helvetica'
267
+ assert_equal dom[1]['style']['font-size'], '12pt'
268
+
269
+ # Example
270
+ assert_equal dom[2]['elkey'], 1
271
+ assert_equal dom[2]['parent'], 1
272
+ assert_equal dom[2]['tag'], false
273
+ assert_equal dom[2]['value'], 'Example '
274
+
275
+ # <span>
276
+ assert_equal dom[3]['elkey'], 2
277
+ assert_equal dom[3]['parent'], 1
278
+ assert_equal dom[3]['tag'], true
279
+ assert_equal dom[3]['opening'], true
280
+ assert_equal dom[3]['value'], 'span'
281
+ assert_equal dom[3]['style']['color'], '#006600'
282
+ assert_equal dom[3]['style']['font-style'], 'italic'
283
+
284
+ end
285
+
286
+ test "CSS Dom id test" do
287
+ pdf = MYPDF.new
288
+
289
+ html = '<style> p#second > span { background-color: #FFFFAA; }</style>
290
+ <p id="second">Example <span>Fusce</span></p>'
291
+ dom = pdf.getHtmlDomArray(html)
292
+ ## remove style tag block (by getHtmlDomArray()) ##
293
+ # '<p id="second">Example <span>Fusce</span></p>'
294
+ assert_equal dom.length, 7
295
+
296
+ # <p id="second">
297
+ assert_equal dom[1]['elkey'], 0
298
+ assert_equal dom[1]['parent'], 0 # parent -> parent tag key
299
+ assert_equal dom[1]['tag'], true
300
+ assert_equal dom[1]['opening'], true
301
+ assert_equal dom[1]['value'], 'p'
302
+ assert_equal dom[1]['attribute']['id'], 'second'
303
+
304
+ # Example
305
+ assert_equal dom[2]['elkey'], 1
306
+ assert_equal dom[2]['parent'], 1
307
+ assert_equal dom[2]['tag'], false
308
+ assert_equal dom[2]['value'], 'Example '
309
+
310
+ # <span>
311
+ assert_equal dom[3]['elkey'], 2
312
+ assert_equal dom[3]['parent'], 1
313
+ assert_equal dom[3]['tag'], true
314
+ assert_equal dom[3]['opening'], true
315
+ assert_equal dom[3]['value'], 'span'
316
+ assert_equal dom[3]['style']['background-color'], '#FFFFAA'
317
+ end
318
+ end
@@ -0,0 +1,113 @@
1
+ require 'test_helper'
2
+
3
+ class RbpdfTest < ActiveSupport::TestCase
4
+ class MYPDF < RBPDF
5
+ def getHtmlDomArray(html)
6
+ super
7
+ end
8
+ end
9
+
10
+ test "Dom Basic" do
11
+ pdf = MYPDF.new
12
+
13
+ # Simple Text
14
+ dom = pdf.getHtmlDomArray('abc')
15
+ assert_equal 0, dom[0]['parent'] # Root
16
+ assert_equal false, dom[0]['tag']
17
+ assert_equal({'tag'=>false, 'value'=>'abc', 'elkey'=>0, 'parent'=>0, 'block'=>false}, dom[1])
18
+
19
+ # Simple Tag
20
+ dom = pdf.getHtmlDomArray('<b>abc</b>')
21
+ assert_equal dom.length, 4
22
+
23
+ assert_equal 0, dom[0]['parent'] # Root
24
+ assert_equal false, dom[0]['tag']
25
+ assert_equal({}, dom[0]['attribute'])
26
+
27
+ assert_equal dom[1]['parent'], 0 # parent -> parent tag key
28
+ assert_equal dom[1]['elkey'], 0
29
+ assert_equal dom[1]['tag'], true
30
+ assert_equal dom[1]['opening'], true
31
+ assert_equal dom[1]['value'], 'b'
32
+ assert_equal dom[1]['attribute'], {}
33
+
34
+ assert_equal({'tag' => false, 'value'=>'abc', 'elkey'=>1, 'parent'=>1, 'block'=>false}, dom[2]) # parent -> open tag key
35
+
36
+ assert_equal dom[3]['parent'], 1 # parent -> open tag key
37
+ assert_equal dom[3]['elkey'], 2
38
+ assert_equal dom[3]['tag'], true
39
+ assert_equal dom[3]['opening'], false
40
+ assert_equal dom[3]['value'], 'b'
41
+
42
+ # Error Tag (doble colse tag)
43
+ dom = pdf.getHtmlDomArray('</ul></div>')
44
+ assert_equal dom.length, 3
45
+
46
+ assert_equal 0, dom[0]['parent'] # Root
47
+ assert_equal false, dom[0]['tag']
48
+ assert_equal({}, dom[0]['attribute'])
49
+
50
+ assert_equal dom[1]['parent'], 0 # parent -> Root key
51
+ assert_equal dom[1]['elkey'], 0
52
+ assert_equal dom[1]['tag'], true
53
+ assert_equal dom[1]['opening'], false
54
+ assert_equal dom[1]['value'], 'ul'
55
+
56
+ assert_equal dom[2]['parent'], 0 # parent -> Root key
57
+ assert_equal dom[2]['elkey'], 1
58
+ assert_equal dom[2]['tag'], true
59
+ assert_equal dom[2]['opening'], false
60
+ assert_equal dom[2]['value'], 'div'
61
+
62
+ # Attribute
63
+ dom = pdf.getHtmlDomArray('<p style="text-align:justify">abc</p>')
64
+ assert_equal dom.length, 4
65
+
66
+ assert_equal 0, dom[0]['parent'] # Root
67
+ assert_equal false, dom[0]['tag']
68
+ assert_equal({}, dom[0]['attribute'])
69
+
70
+ assert_equal dom[1]['parent'], 0 # parent -> parent tag key
71
+ assert_equal dom[1]['elkey'], 0
72
+ assert_equal dom[1]['tag'], true
73
+ assert_equal dom[1]['opening'], true
74
+ assert_equal dom[1]['value'], 'p'
75
+ assert_equal dom[1]['attribute'], {'style'=>'text-align: justify;'}
76
+ assert_equal dom[1]['attribute']['style'], 'text-align: justify;'
77
+ assert_equal dom[1]['align'], 'J'
78
+
79
+ # Table border
80
+ dom = pdf.getHtmlDomArray('<table border="1"><tr><td>abc</td></tr></table>')
81
+ ## added marker tag (by getHtmlDomArray()) ##
82
+ # '<table border="1"><tr><td>abc<marker style="font-size:0"/></td></tr></table>'
83
+ assert_equal dom.length, 9
84
+
85
+ assert_equal dom[1]['parent'], 0 # parent -> parent tag key
86
+ assert_equal dom[1]['elkey'], 0
87
+ assert_equal dom[1]['tag'], true
88
+ assert_equal dom[1]['opening'], true
89
+ assert_equal dom[1]['value'], 'table'
90
+ assert_equal dom[1]['attribute']['border'], '1'
91
+
92
+ ## marker tag (by getHtmlDomArray())
93
+ assert_equal dom[5]['parent'], 3 # parent -> parent tag key
94
+ assert_equal dom[5]['elkey'], 4
95
+ assert_equal dom[5]['tag'], true
96
+ assert_equal dom[5]['opening'], true
97
+ assert_equal dom[5]['value'], 'marker'
98
+ assert_equal dom[5]['attribute']['style'], 'font-size:0'
99
+
100
+ # Table td Width
101
+ dom = pdf.getHtmlDomArray('<table><tr><td width="10">abc</td></tr></table>')
102
+ ## added marker tag (by getHtmlDomArray()) ##
103
+ # '<table><tr><td width="10">abc<marker style="font-size:0"/></td></tr></table>'
104
+ assert_equal dom.length, 9
105
+
106
+ assert_equal dom[3]['parent'], 2 # parent -> parent tag key
107
+ assert_equal dom[3]['elkey'], 2
108
+ assert_equal dom[3]['tag'], true
109
+ assert_equal dom[3]['opening'], true
110
+ assert_equal dom[3]['value'], 'td'
111
+ assert_equal dom[3]['width'], '10'
112
+ end
113
+ end
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ class RbpdfFontFuncTest < ActiveSupport::TestCase
4
+ test "Font get_font_descent function test 1" do
5
+ pdf = RBPDF.new
6
+ fontdescent = pdf.get_font_descent('times', '', 18)
7
+ assert_in_delta 0.95, fontdescent, 0.01
8
+ end
9
+
10
+ test "Font get_font_descent function test 2" do
11
+ pdf = RBPDF.new
12
+ fontdescent = pdf.get_font_descent('freesans', '', 18)
13
+ assert_in_delta 1.91, fontdescent, 0.01
14
+ end
15
+
16
+ test "Font get_font_ascent function test 1" do
17
+ pdf = RBPDF.new
18
+ fontascent = pdf.get_font_ascent('times', '', 18)
19
+ assert_in_delta 5.39, fontascent, 0.01
20
+ end
21
+
22
+ test "Font get_font_ascent function test 2" do
23
+ pdf = RBPDF.new
24
+ fontascent = pdf.get_font_ascent('freesans', '', 18)
25
+ assert_in_delta 6.35, fontascent, 0.01
26
+ end
27
+ end