sablon 0.1.1 → 0.2.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +36 -5
- data/lib/sablon.rb +0 -3
- data/lib/sablon/configuration/html_tag.rb +1 -1
- data/lib/sablon/content.rb +56 -0
- data/lib/sablon/context.rb +2 -0
- data/lib/sablon/document_object_model/content_types.rb +35 -0
- data/lib/sablon/document_object_model/file_handler.rb +26 -0
- data/lib/sablon/document_object_model/model.rb +94 -0
- data/lib/sablon/document_object_model/numbering.rb +94 -0
- data/lib/sablon/document_object_model/relationships.rb +111 -0
- data/lib/sablon/environment.rb +13 -16
- data/lib/sablon/html/ast.rb +14 -13
- data/lib/sablon/html/ast_builder.rb +18 -5
- data/lib/sablon/html/node_properties.rb +3 -3
- data/lib/sablon/operations.rb +59 -0
- data/lib/sablon/processor/document.rb +48 -11
- data/lib/sablon/processor/section_properties.rb +11 -4
- data/lib/sablon/template.rb +88 -47
- data/lib/sablon/version.rb +1 -1
- data/misc/image-example.png +0 -0
- data/test/configuration_test.rb +22 -22
- data/test/content_test.rb +50 -0
- data/test/context_test.rb +37 -1
- data/test/environment_test.rb +4 -1
- data/test/executable_test.rb +0 -2
- data/test/fixtures/cv_sample.docx +0 -0
- data/test/fixtures/html_sample.docx +0 -0
- data/test/fixtures/images/c3po.jpg +0 -0
- data/test/fixtures/images/clone.jpg +0 -0
- data/test/fixtures/images/darth_vader.jpg +0 -0
- data/test/fixtures/images/r2d2.jpg +0 -0
- data/test/fixtures/images_sample.docx +0 -0
- data/test/fixtures/images_template.docx +0 -0
- data/test/fixtures/loops_sample.docx +0 -0
- data/test/fixtures/loops_template.docx +0 -0
- data/test/fixtures/recipe_sample.docx +0 -0
- data/test/fixtures/xml/image.xml +91 -0
- data/test/fixtures/xml/loop_with_unique_ids.xml +152 -0
- data/test/fixtures/xml/mock_document/word/document.xml +12 -0
- data/test/html/ast_test.rb +10 -5
- data/test/html/converter_style_test.rb +9 -9
- data/test/html/converter_test.rb +66 -81
- data/test/html/node_properties_test.rb +2 -2
- data/test/html_test.rb +2 -6
- data/test/processor/document_test.rb +80 -3
- data/test/processor/section_properties_test.rb +68 -0
- data/test/sablon_test.rb +77 -5
- data/test/test_helper.rb +109 -9
- metadata +33 -9
- data/lib/sablon/numbering.rb +0 -23
- data/lib/sablon/processor/numbering.rb +0 -47
- data/lib/sablon/relationship.rb +0 -47
- data/lib/sablon/test/assertions.rb +0 -22
- data/test/section_properties_test.rb +0 -41
@@ -0,0 +1,152 @@
|
|
1
|
+
<w:p>
|
2
|
+
<w:pPr>
|
3
|
+
<w:rPr>
|
4
|
+
<w:noProof/>
|
5
|
+
</w:rPr>
|
6
|
+
</w:pPr>
|
7
|
+
</w:p>
|
8
|
+
<w:p>
|
9
|
+
<w:pPr>
|
10
|
+
<w:rPr>
|
11
|
+
<w:noProof/>
|
12
|
+
</w:rPr>
|
13
|
+
</w:pPr>
|
14
|
+
</w:p>
|
15
|
+
<w:p>
|
16
|
+
<w:r>
|
17
|
+
<w:fldChar w:fldCharType="begin"/>
|
18
|
+
</w:r>
|
19
|
+
<w:r>
|
20
|
+
<w:instrText xml:space="preserve"> MERGEFIELD </w:instrText>
|
21
|
+
</w:r>
|
22
|
+
<w:r>
|
23
|
+
<w:instrText>cars</w:instrText>
|
24
|
+
</w:r>
|
25
|
+
<w:r>
|
26
|
+
<w:instrText xml:space="preserve">:each(item) \* MERGEFORMAT </w:instrText>
|
27
|
+
</w:r>
|
28
|
+
<w:r>
|
29
|
+
<w:fldChar w:fldCharType="separate"/>
|
30
|
+
</w:r>
|
31
|
+
<w:r>
|
32
|
+
<w:rPr>
|
33
|
+
<w:noProof/>
|
34
|
+
</w:rPr>
|
35
|
+
<w:t>«cars:each(item)»</w:t>
|
36
|
+
</w:r>
|
37
|
+
<w:r>
|
38
|
+
<w:rPr>
|
39
|
+
<w:noProof/>
|
40
|
+
</w:rPr>
|
41
|
+
<w:fldChar w:fldCharType="end"/>
|
42
|
+
</w:r>
|
43
|
+
</w:p>
|
44
|
+
<w:p>
|
45
|
+
<w:pPr>
|
46
|
+
<w:pStyle w:val="ListParagraph"/>
|
47
|
+
<w:numPr>
|
48
|
+
<w:ilvl w:val="0"/>
|
49
|
+
<w:numId w:val="1"/>
|
50
|
+
</w:numPr>
|
51
|
+
</w:pPr>
|
52
|
+
<w:r>
|
53
|
+
<w:fldChar w:fldCharType="begin"/>
|
54
|
+
</w:r>
|
55
|
+
<w:r>
|
56
|
+
<w:instrText xml:space="preserve"> MERGEFIELD =item.name \* MERGEFORMAT </w:instrText>
|
57
|
+
</w:r>
|
58
|
+
<w:r>
|
59
|
+
<w:fldChar w:fldCharType="separate"/>
|
60
|
+
</w:r>
|
61
|
+
<w:r>
|
62
|
+
<w:rPr>
|
63
|
+
<w:noProof/>
|
64
|
+
</w:rPr>
|
65
|
+
<w:t>«=item.name»</w:t>
|
66
|
+
</w:r>
|
67
|
+
<w:r>
|
68
|
+
<w:fldChar w:fldCharType="end"/>
|
69
|
+
</w:r>
|
70
|
+
<w:r>
|
71
|
+
<w:t xml:space="preserve">
|
72
|
+
</w:t>
|
73
|
+
</w:r>
|
74
|
+
<w:r>
|
75
|
+
<w:rPr>
|
76
|
+
<w:noProof/>
|
77
|
+
</w:rPr>
|
78
|
+
<w:drawing>
|
79
|
+
<wp:inline distT="0" distB="0" distL="0" distR="0">
|
80
|
+
<wp:extent cx="1254868" cy="889278"/>
|
81
|
+
<wp:effectExtent l="0" t="0" r="2540" b="0"/>
|
82
|
+
<wp:docPr id="2" name="Picture 3"/>
|
83
|
+
<wp:cNvGraphicFramePr>
|
84
|
+
<a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" noChangeAspect="1"/>
|
85
|
+
</wp:cNvGraphicFramePr>
|
86
|
+
<a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
|
87
|
+
<a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
|
88
|
+
<pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
|
89
|
+
<pic:nvPicPr>
|
90
|
+
<pic:cNvPr id="3" name="MTF 500.pdf"/>
|
91
|
+
<pic:cNvPicPr/>
|
92
|
+
</pic:nvPicPr>
|
93
|
+
<pic:blipFill>
|
94
|
+
<a:blip r:embed="rId5" cstate="print">
|
95
|
+
<a:extLst>
|
96
|
+
<a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}">
|
97
|
+
<a14:useLocalDpi xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" val="0"/>
|
98
|
+
</a:ext>
|
99
|
+
</a:extLst>
|
100
|
+
</a:blip>
|
101
|
+
<a:stretch>
|
102
|
+
<a:fillRect/>
|
103
|
+
</a:stretch>
|
104
|
+
</pic:blipFill>
|
105
|
+
<pic:spPr>
|
106
|
+
<a:xfrm>
|
107
|
+
<a:off x="0" y="0"/>
|
108
|
+
<a:ext cx="1286502" cy="911696"/>
|
109
|
+
</a:xfrm>
|
110
|
+
<a:prstGeom prst="rect">
|
111
|
+
<a:avLst/>
|
112
|
+
</a:prstGeom>
|
113
|
+
</pic:spPr>
|
114
|
+
</pic:pic>
|
115
|
+
</a:graphicData>
|
116
|
+
</a:graphic>
|
117
|
+
</wp:inline>
|
118
|
+
</w:drawing>
|
119
|
+
</w:r>
|
120
|
+
<w:r>
|
121
|
+
<w:br/>
|
122
|
+
</w:r>
|
123
|
+
</w:p>
|
124
|
+
<w:p>
|
125
|
+
<w:r>
|
126
|
+
<w:fldChar w:fldCharType="begin"/>
|
127
|
+
</w:r>
|
128
|
+
<w:r>
|
129
|
+
<w:instrText xml:space="preserve"> MERGEFIELD </w:instrText>
|
130
|
+
</w:r>
|
131
|
+
<w:r>
|
132
|
+
<w:instrText>cars</w:instrText>
|
133
|
+
</w:r>
|
134
|
+
<w:r>
|
135
|
+
<w:instrText xml:space="preserve">:endEach \* MERGEFORMAT </w:instrText>
|
136
|
+
</w:r>
|
137
|
+
<w:r>
|
138
|
+
<w:fldChar w:fldCharType="separate"/>
|
139
|
+
</w:r>
|
140
|
+
<w:r>
|
141
|
+
<w:rPr>
|
142
|
+
<w:noProof/>
|
143
|
+
</w:rPr>
|
144
|
+
<w:t>«cars:endEach»</w:t>
|
145
|
+
</w:r>
|
146
|
+
<w:r>
|
147
|
+
<w:rPr>
|
148
|
+
<w:noProof/>
|
149
|
+
</w:rPr>
|
150
|
+
<w:fldChar w:fldCharType="end"/>
|
151
|
+
</w:r>
|
152
|
+
</w:p>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mo="http://schemas.microsoft.com/office/mac/office/2008/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="urn:schemas-microsoft-com:mac:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 w15 wp14">
|
3
|
+
<w:body>
|
4
|
+
<w:p></w:p>
|
5
|
+
<w:sectPr>
|
6
|
+
<w:pgSz w:w="12240" w:h="15840"/>
|
7
|
+
<w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="720" w:footer="720" w:gutter="0"/>
|
8
|
+
<w:cols w:space="720"/>
|
9
|
+
<w:docGrid w:linePitch="360"/>
|
10
|
+
</w:sectPr>
|
11
|
+
</w:body>
|
12
|
+
</w:document>
|
data/test/html/ast_test.rb
CHANGED
@@ -1,12 +1,17 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
require "test_helper"
|
3
|
-
require 'securerandom'
|
4
3
|
|
5
4
|
class HTMLConverterASTTest < Sablon::TestCase
|
6
5
|
def setup
|
7
6
|
super
|
7
|
+
@template = MockTemplate.new
|
8
|
+
@env = Sablon::Environment.new(@template)
|
8
9
|
@converter = Sablon::HTMLConverter.new
|
9
|
-
@converter.instance_variable_set(:@env,
|
10
|
+
@converter.instance_variable_set(:@env, @env)
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
@template.document.reset
|
10
15
|
end
|
11
16
|
|
12
17
|
def test_div
|
@@ -95,18 +100,18 @@ class HTMLConverterASTTest < Sablon::TestCase
|
|
95
100
|
|
96
101
|
def test_num_id
|
97
102
|
ast = @converter.processed_ast('<ol><li>Some</li><li>Lorem</li></ol><ul><li>ipsum</li></ul><ol><li>dolor</li><li>sit</li></ol>')
|
98
|
-
assert_equal %w[
|
103
|
+
assert_equal %w[1 1 2 3 3], get_numpr_prop_from_ast(ast, :numId)
|
99
104
|
end
|
100
105
|
|
101
106
|
def test_nested_lists_have_the_same_numid
|
102
107
|
ast = @converter.processed_ast('<ul><li>Lorem<ul><li>ipsum<ul><li>dolor</li></ul></li></ul></li></ul>')
|
103
|
-
assert_equal %w[
|
108
|
+
assert_equal %w[1 1 1], get_numpr_prop_from_ast(ast, :numId)
|
104
109
|
end
|
105
110
|
|
106
111
|
def test_keep_nested_list_order
|
107
112
|
input = '<ul><li>1<ul><li>1.1<ul><li>1.1.1</li></ul></li><li>1.2</li></ul></li><li>2<ul><li>1.3<ul><li>1.3.1</li></ul></li></ul></li></ul>'
|
108
113
|
ast = @converter.processed_ast(input)
|
109
|
-
assert_equal %w[
|
114
|
+
assert_equal %w[1], get_numpr_prop_from_ast(ast, :numId).uniq
|
110
115
|
assert_equal %w[0 1 2 1 0 1 2], get_numpr_prop_from_ast(ast, :ilvl)
|
111
116
|
end
|
112
117
|
|
@@ -4,10 +4,15 @@ require "test_helper"
|
|
4
4
|
class HTMLConverterStyleTest < Sablon::TestCase
|
5
5
|
def setup
|
6
6
|
super
|
7
|
-
@
|
7
|
+
@template = MockTemplate.new
|
8
|
+
@env = Sablon::Environment.new(@template)
|
8
9
|
@converter = Sablon::HTMLConverter.new
|
9
10
|
end
|
10
11
|
|
12
|
+
def teardown
|
13
|
+
@template.document.reset
|
14
|
+
end
|
15
|
+
|
11
16
|
# testing direct CSS style -> WordML conversion for paragraphs
|
12
17
|
|
13
18
|
def test_paragraph_with_background_color
|
@@ -75,14 +80,9 @@ class HTMLConverterStyleTest < Sablon::TestCase
|
|
75
80
|
|
76
81
|
# test that styles defined on the <a> tag are passed down to runs
|
77
82
|
def test_hyperlink_with_font_style
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
input = '<p><a href="http://www.google.com" style="font-style: italic">Google</a></p>'
|
82
|
-
expected_output = hyperlink_with_rpr('<w:i />', secure_random_instance.uuid)
|
83
|
-
uid_generator.reset
|
84
|
-
assert_equal normalize_wordml(expected_output), process(input)
|
85
|
-
end
|
83
|
+
input = '<p><a href="http://www.google.com" style="font-style: italic">Google</a></p>'
|
84
|
+
expected_output = hyperlink_with_rpr('<w:i />', @template.document.current_rid + 1)
|
85
|
+
assert_equal normalize_wordml(expected_output), process(input)
|
86
86
|
end
|
87
87
|
|
88
88
|
def test_run_with_background_color
|
data/test/html/converter_test.rb
CHANGED
@@ -4,11 +4,15 @@ require "test_helper"
|
|
4
4
|
class HTMLConverterTest < Sablon::TestCase
|
5
5
|
def setup
|
6
6
|
super
|
7
|
-
@
|
8
|
-
@
|
7
|
+
@template = MockTemplate.new
|
8
|
+
@env = Sablon::Environment.new(@template)
|
9
9
|
@converter = Sablon::HTMLConverter.new
|
10
10
|
end
|
11
11
|
|
12
|
+
def teardown
|
13
|
+
@template.document.reset
|
14
|
+
end
|
15
|
+
|
12
16
|
def test_convert_text_inside_div
|
13
17
|
input = '<div>Lorem ipsum dolor sit amet</div>'
|
14
18
|
expected_output = <<-DOCX.strip
|
@@ -32,50 +36,41 @@ class HTMLConverterTest < Sablon::TestCase
|
|
32
36
|
end
|
33
37
|
|
34
38
|
def test_convert_hyperlink_inside_div
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
<w:
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
</w:p>
|
52
|
-
DOCX
|
53
|
-
uid_generator.reset
|
54
|
-
assert_equal normalize_wordml(expected_output), process(input)
|
55
|
-
end
|
39
|
+
input = '<div>Lorem ipsum dolor sit amet; search it at <a href="http://www.google.com">google</a></div>'
|
40
|
+
expected_output = <<-DOCX.strip
|
41
|
+
<w:p>
|
42
|
+
<w:pPr><w:pStyle w:val="Normal" /></w:pPr>
|
43
|
+
<w:r><w:t xml:space="preserve">Lorem ipsum dolor sit amet; search it at </w:t></w:r>
|
44
|
+
<w:hyperlink r:id=\"rId#{@template.document.current_rid + 1}\">
|
45
|
+
<w:r>
|
46
|
+
<w:rPr>
|
47
|
+
<w:rStyle w:val=\"Hyperlink\" />
|
48
|
+
</w:rPr>
|
49
|
+
<w:t xml:space=\"preserve\">google</w:t>
|
50
|
+
</w:r>
|
51
|
+
</w:hyperlink>
|
52
|
+
</w:p>
|
53
|
+
DOCX
|
54
|
+
assert_equal normalize_wordml(expected_output), process(input)
|
56
55
|
end
|
57
56
|
|
58
57
|
def test_convert_hyperlink_inside_p
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
DOCX
|
76
|
-
uid_generator.reset
|
77
|
-
assert_equal normalize_wordml(expected_output), process(input)
|
78
|
-
end
|
58
|
+
input = '<p>Lorem ipsum dolor sit amet; search it at <a href="http://www.google.com">google</a></p>'
|
59
|
+
expected_output = <<-DOCX.strip
|
60
|
+
<w:p>
|
61
|
+
<w:pPr><w:pStyle w:val="Paragraph" /></w:pPr>
|
62
|
+
<w:r><w:t xml:space="preserve">Lorem ipsum dolor sit amet; search it at </w:t></w:r>
|
63
|
+
<w:hyperlink r:id=\"rId#{@template.document.current_rid + 1}\">
|
64
|
+
<w:r>
|
65
|
+
<w:rPr>
|
66
|
+
<w:rStyle w:val=\"Hyperlink\" />
|
67
|
+
</w:rPr>
|
68
|
+
<w:t xml:space=\"preserve\">google</w:t>
|
69
|
+
</w:r>
|
70
|
+
</w:hyperlink>
|
71
|
+
</w:p>
|
72
|
+
DOCX
|
73
|
+
assert_equal normalize_wordml(expected_output), process(input)
|
79
74
|
end
|
80
75
|
|
81
76
|
def test_convert_text_inside_multiple_divs
|
@@ -247,7 +242,7 @@ class HTMLConverterTest < Sablon::TestCase
|
|
247
242
|
<w:pStyle w:val="ListBullet" />
|
248
243
|
<w:numPr>
|
249
244
|
<w:ilvl w:val="0" />
|
250
|
-
<w:numId w:val="
|
245
|
+
<w:numId w:val="1" />
|
251
246
|
</w:numPr>
|
252
247
|
</w:pPr>
|
253
248
|
<w:r><w:t xml:space="preserve">Lorem</w:t></w:r>
|
@@ -258,7 +253,7 @@ class HTMLConverterTest < Sablon::TestCase
|
|
258
253
|
<w:pStyle w:val="ListBullet" />
|
259
254
|
<w:numPr>
|
260
255
|
<w:ilvl w:val="0" />
|
261
|
-
<w:numId w:val="
|
256
|
+
<w:numId w:val="1" />
|
262
257
|
</w:numPr>
|
263
258
|
</w:pPr>
|
264
259
|
<w:r><w:t xml:space="preserve">ipsum</w:t></w:r>
|
@@ -269,14 +264,13 @@ class HTMLConverterTest < Sablon::TestCase
|
|
269
264
|
<w:pStyle w:val="ListBullet" />
|
270
265
|
<w:numPr>
|
271
266
|
<w:ilvl w:val="0" />
|
272
|
-
<w:numId w:val="
|
267
|
+
<w:numId w:val="1" />
|
273
268
|
</w:numPr>
|
274
269
|
</w:pPr>
|
275
270
|
<w:r><w:t xml:space="preserve">dolor</w:t></w:r>
|
276
271
|
</w:p>
|
277
272
|
DOCX
|
278
273
|
assert_equal normalize_wordml(expected_output), process(input)
|
279
|
-
assert_equal [Sablon::Numbering::Definition.new(1001, 'ListBullet')], @numbering.definitions
|
280
274
|
end
|
281
275
|
|
282
276
|
def test_ordered_lists
|
@@ -287,7 +281,7 @@ class HTMLConverterTest < Sablon::TestCase
|
|
287
281
|
<w:pStyle w:val="ListNumber" />
|
288
282
|
<w:numPr>
|
289
283
|
<w:ilvl w:val="0" />
|
290
|
-
<w:numId w:val="
|
284
|
+
<w:numId w:val="1" />
|
291
285
|
</w:numPr>
|
292
286
|
</w:pPr>
|
293
287
|
<w:r><w:t xml:space="preserve">Lorem</w:t></w:r>
|
@@ -298,7 +292,7 @@ class HTMLConverterTest < Sablon::TestCase
|
|
298
292
|
<w:pStyle w:val="ListNumber" />
|
299
293
|
<w:numPr>
|
300
294
|
<w:ilvl w:val="0" />
|
301
|
-
<w:numId w:val="
|
295
|
+
<w:numId w:val="1" />
|
302
296
|
</w:numPr>
|
303
297
|
</w:pPr>
|
304
298
|
<w:r><w:t xml:space="preserve">ipsum</w:t></w:r>
|
@@ -309,14 +303,13 @@ class HTMLConverterTest < Sablon::TestCase
|
|
309
303
|
<w:pStyle w:val="ListNumber" />
|
310
304
|
<w:numPr>
|
311
305
|
<w:ilvl w:val="0" />
|
312
|
-
<w:numId w:val="
|
306
|
+
<w:numId w:val="1" />
|
313
307
|
</w:numPr>
|
314
308
|
</w:pPr>
|
315
309
|
<w:r><w:t xml:space="preserve">dolor</w:t></w:r>
|
316
310
|
</w:p>
|
317
311
|
DOCX
|
318
312
|
assert_equal normalize_wordml(expected_output), process(input)
|
319
|
-
assert_equal [Sablon::Numbering::Definition.new(1001, 'ListNumber')], @numbering.definitions
|
320
313
|
end
|
321
314
|
|
322
315
|
def test_mixed_lists
|
@@ -327,7 +320,7 @@ class HTMLConverterTest < Sablon::TestCase
|
|
327
320
|
<w:pStyle w:val="ListNumber" />
|
328
321
|
<w:numPr>
|
329
322
|
<w:ilvl w:val="0" />
|
330
|
-
<w:numId w:val="
|
323
|
+
<w:numId w:val="1" />
|
331
324
|
</w:numPr>
|
332
325
|
</w:pPr>
|
333
326
|
<w:r><w:t xml:space=\"preserve\">Lorem</w:t></w:r>
|
@@ -338,7 +331,7 @@ class HTMLConverterTest < Sablon::TestCase
|
|
338
331
|
<w:pStyle w:val="ListBullet" />
|
339
332
|
<w:numPr>
|
340
333
|
<w:ilvl w:val="0" />
|
341
|
-
<w:numId w:val="
|
334
|
+
<w:numId w:val="2" />
|
342
335
|
</w:numPr>
|
343
336
|
</w:pPr>
|
344
337
|
<w:r><w:t xml:space="preserve">ipsum</w:t></w:r>
|
@@ -349,16 +342,13 @@ class HTMLConverterTest < Sablon::TestCase
|
|
349
342
|
<w:pStyle w:val="ListNumber" />
|
350
343
|
<w:numPr>
|
351
344
|
<w:ilvl w:val="0" />
|
352
|
-
<w:numId w:val="
|
345
|
+
<w:numId w:val="3" />
|
353
346
|
</w:numPr>
|
354
347
|
</w:pPr>
|
355
348
|
<w:r><w:t xml:space="preserve">dolor</w:t></w:r>
|
356
349
|
</w:p>
|
357
350
|
DOCX
|
358
351
|
assert_equal normalize_wordml(expected_output), process(input)
|
359
|
-
assert_equal [Sablon::Numbering::Definition.new(1001, 'ListNumber'),
|
360
|
-
Sablon::Numbering::Definition.new(1002, 'ListBullet'),
|
361
|
-
Sablon::Numbering::Definition.new(1003, 'ListNumber')], @numbering.definitions
|
362
352
|
end
|
363
353
|
|
364
354
|
def test_nested_unordered_lists
|
@@ -369,7 +359,7 @@ class HTMLConverterTest < Sablon::TestCase
|
|
369
359
|
<w:pStyle w:val="ListBullet" />
|
370
360
|
<w:numPr>
|
371
361
|
<w:ilvl w:val="0" />
|
372
|
-
<w:numId w:val="
|
362
|
+
<w:numId w:val="1" />
|
373
363
|
</w:numPr>
|
374
364
|
</w:pPr>
|
375
365
|
<w:r><w:t xml:space="preserve">Lorem</w:t></w:r>
|
@@ -380,7 +370,7 @@ class HTMLConverterTest < Sablon::TestCase
|
|
380
370
|
<w:pStyle w:val="ListBullet" />
|
381
371
|
<w:numPr>
|
382
372
|
<w:ilvl w:val="1" />
|
383
|
-
<w:numId w:val="
|
373
|
+
<w:numId w:val="1" />
|
384
374
|
</w:numPr>
|
385
375
|
</w:pPr>
|
386
376
|
<w:r><w:t xml:space="preserve">ipsum</w:t></w:r>
|
@@ -391,38 +381,33 @@ class HTMLConverterTest < Sablon::TestCase
|
|
391
381
|
<w:pStyle w:val="ListBullet" />
|
392
382
|
<w:numPr>
|
393
383
|
<w:ilvl w:val="2" />
|
394
|
-
<w:numId w:val="
|
384
|
+
<w:numId w:val="1" />
|
395
385
|
</w:numPr>
|
396
386
|
</w:pPr>
|
397
387
|
<w:r><w:t xml:space="preserve">dolor</w:t></w:r>
|
398
388
|
</w:p>
|
399
389
|
DOCX
|
400
390
|
assert_equal normalize_wordml(expected_output), process(input)
|
401
|
-
assert_equal [Sablon::Numbering::Definition.new(1001, 'ListBullet')], @numbering.definitions
|
402
391
|
end
|
403
392
|
|
404
393
|
def test_anchor_tag
|
405
|
-
uid_generator = UIDTestGenerator.new
|
406
394
|
input = '<p><a href="www.github.com">GitHub</a></p>'
|
407
|
-
|
408
|
-
|
409
|
-
<w:
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
<w:
|
414
|
-
|
415
|
-
<w:
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
uid_generator.reset
|
424
|
-
assert_equal normalize_wordml(expected_output), process(input)
|
425
|
-
end
|
395
|
+
expected_output = <<-DOCX.strip
|
396
|
+
<w:p>
|
397
|
+
<w:pPr>
|
398
|
+
<w:pStyle w:val="Paragraph" />
|
399
|
+
</w:pPr>
|
400
|
+
<w:hyperlink r:id="rId#{@template.document.current_rid + 1}">
|
401
|
+
<w:r>
|
402
|
+
<w:rPr>
|
403
|
+
<w:rStyle w:val="Hyperlink" />
|
404
|
+
</w:rPr>
|
405
|
+
<w:t xml:space="preserve">GitHub</w:t>
|
406
|
+
</w:r>
|
407
|
+
</w:hyperlink>
|
408
|
+
</w:p>
|
409
|
+
DOCX
|
410
|
+
assert_equal normalize_wordml(expected_output), process(input)
|
426
411
|
end
|
427
412
|
|
428
413
|
def test_table_tag
|