slaw 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 08d012c5c08856227cf9c203f5c932d076115522
4
- data.tar.gz: 742fa6d2ff279945b3ed3cdff468c62a9567cd17
3
+ metadata.gz: 93a820ba2ec4e18e12c5a9935a954ad314dfc614
4
+ data.tar.gz: 6bed26afa25207e66575795a1f94b8504e040009
5
5
  SHA512:
6
- metadata.gz: 7f831cd0db6d4d05a80634645b248cfb8555122e85f59af07cc848cdb32330d3f97eab5d59b883802209eb4d9ebe3079a7d29ad80df20a73b2ec340cd1568d2d
7
- data.tar.gz: 21285db937fb61a1d81ef7a8a8359219e2b10c066e36e9d01ec6091d107bdd3f2d8ccb5e5fb06f1cb394ff4b8cf52b78c20cedcaab36ef19b8b271623ef946c0
6
+ metadata.gz: 7ff709e7d9931573ae661cad219350917bb352120aa7507d18589df6c47f2bd5e1e2066cc924393e1a98f2a40884363603b8e0e73ef82a125cb942af238e4860
7
+ data.tar.gz: 0d8f14587a3d706cdf32450dafc0a28e0a28b6bf9f6ca968a64f0c044f0072a21d36e62061457011a5b68ca42b14be6863bf1b05a7a1e6b48b01c1684acc3749
data/README.md CHANGED
@@ -157,6 +157,8 @@ in a document to indicate different levels of nesting.
157
157
 
158
158
  During post-processing it works out how to nest these appropriately.
159
159
 
160
+ Special words, such as ``part`` and ``chapter`` are ignored if the line starts with a backslash ``\``.
161
+
160
162
  For more information see the South African by-law grammar at
161
163
  [lib/slaw/za/bylaw.treetop](lib/slaw/za/bylaw.treetop) and the list nesting
162
164
  at [lib/slaw/parse/blocklists.rb](lib/slaw/parse/blocklists.rb).
@@ -216,6 +218,11 @@ Akoma Ntoso `component` elements at the end of the XML document, with a name of
216
218
 
217
219
  ## Changelog
218
220
 
221
+ ### 0.10.0
222
+
223
+ * New command `unparse FILE` which transforms an Akoma Ntoso XML document into plain text, suitable for re-parsing
224
+ * Support escaping special words with a backslash
225
+
219
226
  ### 0.9.0
220
227
 
221
228
  * This release makes reasonably significant changes to generated XML, particularly
data/bin/slaw CHANGED
@@ -102,6 +102,14 @@ class SlawCLI < Thor
102
102
  puts builder.to_xml(doc)
103
103
  end
104
104
 
105
+ desc "unparse FILE", "Unparse FILE from Akoma Ntoso XML back into text suitable for re-parsing"
106
+ def unparse(name)
107
+ generator = Slaw::ActGenerator.new
108
+
109
+ doc = File.open(name, 'r') { |f| doc = generator.builder.parse_xml(f.read) }
110
+ puts generator.text_from_act(doc)
111
+ end
112
+
105
113
  map %w(--version) => :__print_version
106
114
  desc "--version", "Print slaw version info"
107
115
  def __print_version
@@ -62,5 +62,13 @@ module Slaw
62
62
 
63
63
  before > after * 1.25
64
64
  end
65
+
66
+ # Transform an Akoma Ntoso XML document back into a plain-text version
67
+ # suitable for re-parsing back into XML with no loss of structure.
68
+ def text_from_act(doc)
69
+ here = File.dirname(__FILE__)
70
+ xslt = Nokogiri::XSLT(File.read(File.join([here, 'za/act_text.xsl'])))
71
+ xslt.transform(doc).child.to_xml
72
+ end
65
73
  end
66
74
  end
data/lib/slaw/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Slaw
2
- VERSION = "0.9.0"
2
+ VERSION = "0.10.0"
3
3
  end
@@ -31,7 +31,7 @@ module Slaw
31
31
  end
32
32
 
33
33
  rule body
34
- children:(chapter / part / section / subsection / block_paragraphs )+ <Body>
34
+ children:(chapter / part / section / subsection / block_paragraphs)+ <Body>
35
35
  end
36
36
 
37
37
  rule chapter
@@ -173,14 +173,17 @@ module Slaw
173
173
 
174
174
  ##########
175
175
  # statements - single lines of content
176
+ #
177
+ # If a statement starts with a backslash, it's considered to have escaped the subsequent word,
178
+ # and is ignored. This allows escaping of section headings, etc.
176
179
 
177
180
  rule naked_statement
178
- space? !(chapter_heading / part_heading / section_title / schedule_title / subsection_prefix) clauses eol
181
+ space? !(chapter_heading / part_heading / section_title / schedule_title / subsection_prefix) '\\'? clauses eol
179
182
  <NakedStatement>
180
183
  end
181
184
 
182
185
  rule pre_body_statement
183
- space? !(chapter_heading / part_heading / section_title / schedule_title) clauses eol
186
+ space? !(chapter_heading / part_heading / section_title / schedule_title) '\\'? clauses eol
184
187
  <NakedStatement>
185
188
  end
186
189
 
@@ -0,0 +1,225 @@
1
+ <?xml version="1.0"?>
2
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
3
+ xmlns:a="http://www.akomantoso.org/2.0"
4
+ exclude-result-prefixes="a">
5
+
6
+ <xsl:output method="text" indent="no" omit-xml-declaration="yes" />
7
+ <xsl:strip-space elements="*"/>
8
+
9
+ <xsl:template match="a:act">
10
+ <xsl:apply-templates select="a:coverPage" />
11
+ <xsl:apply-templates select="a:preface" />
12
+ <xsl:apply-templates select="a:preamble" />
13
+ <xsl:apply-templates select="a:body" />
14
+ <xsl:apply-templates select="a:conclusions" />
15
+ </xsl:template>
16
+
17
+ <xsl:template match="a:preface">
18
+ <xsl:text>PREFACE</xsl:text>
19
+ <xsl:text>
20
+
21
+ </xsl:text>
22
+ <xsl:apply-templates />
23
+ </xsl:template>
24
+
25
+ <xsl:template match="a:preamble">
26
+ <xsl:text>PREAMBLE</xsl:text>
27
+ <xsl:text>
28
+
29
+ </xsl:text>
30
+ <xsl:apply-templates />
31
+ </xsl:template>
32
+
33
+ <xsl:template match="a:part">
34
+ <xsl:text>Part </xsl:text>
35
+ <xsl:value-of select="./a:num" />
36
+ <xsl:text> - </xsl:text>
37
+ <xsl:value-of select="./a:heading" />
38
+ <xsl:text>
39
+
40
+ </xsl:text>
41
+ <xsl:apply-templates select="./*[not(self::a:num) and not(self::a:heading)]" />
42
+ </xsl:template>
43
+
44
+ <xsl:template match="a:chapter">
45
+ <xsl:text>Chapter </xsl:text>
46
+ <xsl:value-of select="./a:num" />
47
+ <xsl:text> - </xsl:text>
48
+ <xsl:value-of select="./a:heading" />
49
+ <xsl:text>
50
+
51
+ </xsl:text>
52
+ <xsl:apply-templates select="./*[not(self::a:num) and not(self::a:heading)]" />
53
+ </xsl:template>
54
+
55
+ <xsl:template match="a:section">
56
+ <xsl:value-of select="a:num" />
57
+ <xsl:text> </xsl:text>
58
+ <xsl:if test="a:heading != ''">
59
+ <xsl:value-of select="a:heading" />
60
+ </xsl:if>
61
+ <xsl:text>
62
+
63
+ </xsl:text>
64
+ <xsl:apply-templates select="./*[not(self::a:num) and not(self::a:heading)]" />
65
+ </xsl:template>
66
+
67
+ <xsl:template match="a:subsection">
68
+ <xsl:if test="a:num != ''">
69
+ <xsl:value-of select="a:num" />
70
+ <xsl:text> </xsl:text>
71
+ </xsl:if>
72
+ <xsl:apply-templates select="./*[not(self::a:num) and not(self::a:heading)]" />
73
+ </xsl:template>
74
+
75
+ <!-- these are block elements and have a newline at the end -->
76
+ <xsl:template match="a:heading">
77
+ <xsl:apply-templates />
78
+ <xsl:text>
79
+
80
+ </xsl:text>
81
+ </xsl:template>
82
+
83
+ <xsl:template match="a:p">
84
+ <xsl:variable name="prefix" select="translate(substring(., 1, 10), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" />
85
+ <xsl:variable name="numprefix" select="translate(substring(., 1, 3), '1234567890', 'NNNNNNNNNN')" />
86
+
87
+ <!-- p tags must escape initial content that looks like a block element marker -->
88
+ <xsl:if test="starts-with($prefix, 'BODY') or
89
+ starts-with($prefix, 'CHAPTER') or
90
+ starts-with($prefix, 'PART') or
91
+ starts-with($prefix, 'PREAMBLE') or
92
+ starts-with($prefix, 'PREFACE') or
93
+ starts-with($prefix, 'SCHEDULE') or
94
+ starts-with($prefix, '{|') or
95
+ starts-with($numprefix, '(') or
96
+ starts-with($numprefix, 'N.')">
97
+ <xsl:text>\</xsl:text>
98
+ </xsl:if>
99
+ <xsl:value-of select="."/>
100
+ <!-- p tags must end with a newline -->
101
+ <xsl:text>
102
+
103
+ </xsl:text>
104
+ </xsl:template>
105
+
106
+ <xsl:template match="a:blockList">
107
+ <xsl:if test="a:listIntroduction != ''">
108
+ <xsl:apply-templates select="a:listIntroduction" />
109
+ <xsl:text>
110
+
111
+ </xsl:text>
112
+ </xsl:if>
113
+ <xsl:apply-templates select="./*[not(self::a:listIntroduction)]" />
114
+ </xsl:template>
115
+
116
+ <xsl:template match="a:item">
117
+ <xsl:value-of select="./a:num" />
118
+ <xsl:text> </xsl:text>
119
+ <xsl:apply-templates select="./*[not(self::a:num)]" />
120
+ </xsl:template>
121
+
122
+ <xsl:template match="a:list">
123
+ <xsl:if test="a:intro != ''">
124
+ <xsl:value-of select="a:intro" />
125
+ <xsl:text>
126
+
127
+ </xsl:text>
128
+ </xsl:if>
129
+ <xsl:apply-templates select="./*[not(self::a:intro)]" />
130
+ </xsl:template>
131
+
132
+ <!-- components/schedules -->
133
+ <xsl:template match="a:doc">
134
+ <xsl:text>Schedule - </xsl:text>
135
+ <xsl:value-of select="a:meta/a:identification/a:FRBRWork/a:FRBRalias/@value" />
136
+
137
+ <xsl:if test="a:mainBody/a:article/a:heading">
138
+ <xsl:text>
139
+ </xsl:text>
140
+ <xsl:value-of select="a:mainBody/a:article/a:heading" />
141
+ </xsl:if>
142
+
143
+ <xsl:text>
144
+
145
+ </xsl:text>
146
+ <xsl:apply-templates select="a:mainBody" />
147
+ </xsl:template>
148
+
149
+ <xsl:template match="a:mainBody/a:article/a:heading">
150
+ <!-- no-op, this is handled by the schedules template above -->
151
+ </xsl:template>
152
+
153
+ <!-- tables -->
154
+ <xsl:template match="a:table">
155
+ <xsl:text>{| </xsl:text>
156
+
157
+ <!-- attributes -->
158
+ <xsl:for-each select="@*[local-name()!='id']">
159
+ <xsl:value-of select="local-name(.)" />
160
+ <xsl:text>="</xsl:text>
161
+ <xsl:value-of select="." />
162
+ <xsl:text>" </xsl:text>
163
+ </xsl:for-each>
164
+ <xsl:text>
165
+ |-</xsl:text>
166
+
167
+ <xsl:apply-templates />
168
+ <xsl:text>
169
+ |}
170
+
171
+ </xsl:text>
172
+ </xsl:template>
173
+
174
+ <xsl:template match="a:tr">
175
+ <xsl:apply-templates />
176
+ <xsl:text>
177
+ |-</xsl:text>
178
+ </xsl:template>
179
+
180
+ <xsl:template match="a:th|a:td">
181
+ <xsl:choose>
182
+ <xsl:when test="local-name(.) = 'th'">
183
+ <xsl:text>
184
+ ! </xsl:text>
185
+ </xsl:when>
186
+ <xsl:when test="local-name(.) = 'td'">
187
+ <xsl:text>
188
+ | </xsl:text>
189
+ </xsl:when>
190
+ </xsl:choose>
191
+
192
+ <!-- attributes -->
193
+ <xsl:if test="@*">
194
+ <xsl:for-each select="@*">
195
+ <xsl:value-of select="local-name(.)" />
196
+ <xsl:text>="</xsl:text>
197
+ <xsl:value-of select="." />
198
+ <xsl:text>" </xsl:text>
199
+ </xsl:for-each>
200
+ <xsl:text>| </xsl:text>
201
+ </xsl:if>
202
+
203
+ <xsl:apply-templates />
204
+ </xsl:template>
205
+
206
+ <!-- don't end p tags with newlines in tables -->
207
+ <xsl:template match="a:table//a:p">
208
+ <xsl:apply-templates />
209
+ </xsl:template>
210
+
211
+ <!-- END tables -->
212
+
213
+ <xsl:template match="a:remark">
214
+ <xsl:text>[</xsl:text>
215
+ <xsl:apply-templates />
216
+ <xsl:text>]</xsl:text>
217
+ </xsl:template>
218
+
219
+
220
+ <!-- for most nodes, just dump their text content -->
221
+ <xsl:template match="*">
222
+ <xsl:text/><xsl:apply-templates /><xsl:text/>
223
+ </xsl:template>
224
+
225
+ </xsl:stylesheet>
data/slaw.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.5"
22
- spec.add_development_dependency "rake"
22
+ spec.add_development_dependency "rake", "~> 10.3.1"
23
23
  spec.add_development_dependency "rspec", "~> 2.14.1"
24
24
 
25
25
  spec.add_runtime_dependency "nokogiri", "~> 1.6.0"
@@ -38,4 +38,59 @@ Some content.
38
38
  end
39
39
  end
40
40
  end
41
+
42
+ describe 'unparse' do
43
+ it 'should escape keywards when unparsing' do
44
+ doc = xml2doc(section(<<XML
45
+ <num>1.</num>
46
+ <heading>Section</heading>
47
+ <paragraph id="section-1.paragraph-0">
48
+ <content>
49
+ <p>Chapter 2 ignored</p>
50
+ <p>Part 2 ignored</p>
51
+ <p>Schedule 2 ignored</p>
52
+ <p>BODY ignored</p>
53
+ <p>PREAMBLE ignored</p>
54
+ <p>PREFACE ignored</p>
55
+ <p>2. ignored</p>
56
+ <p>2.1 ignored</p>
57
+ <p>(2) ignored</p>
58
+ <p>(a) ignored</p>
59
+ <p>(2a) ignored</p>
60
+ <p>{| ignored</p>
61
+ </content>
62
+ </paragraph>
63
+ XML
64
+ ))
65
+
66
+ text = subject.text_from_act(doc)
67
+ text.should == '1. Section
68
+
69
+ \Chapter 2 ignored
70
+
71
+ \Part 2 ignored
72
+
73
+ \Schedule 2 ignored
74
+
75
+ \BODY ignored
76
+
77
+ \PREAMBLE ignored
78
+
79
+ \PREFACE ignored
80
+
81
+ \2. ignored
82
+
83
+ \2.1 ignored
84
+
85
+ \(2) ignored
86
+
87
+ \(a) ignored
88
+
89
+ \(2a) ignored
90
+
91
+ \{| ignored
92
+
93
+ '
94
+ end
95
+ end
41
96
  end
data/spec/za/act_spec.rb CHANGED
@@ -91,6 +91,31 @@ EOS
91
91
  </content>
92
92
  </paragraph>
93
93
  </section>
94
+ </body>'
95
+ end
96
+
97
+ it 'should handle escaped content' do
98
+ node = parse :body, <<EOS
99
+ \\1. ignored
100
+
101
+ 1. Section
102
+ \\Chapter 2 ignored
103
+ EOS
104
+ to_xml(node).should == '<body>
105
+ <paragraph id="paragraph-0">
106
+ <content>
107
+ <p>1. ignored</p>
108
+ </content>
109
+ </paragraph>
110
+ <section id="section-1">
111
+ <num>1.</num>
112
+ <heading>Section</heading>
113
+ <paragraph id="section-1.paragraph-0">
114
+ <content>
115
+ <p>Chapter 2 ignored</p>
116
+ </content>
117
+ </paragraph>
118
+ </section>
94
119
  </body>'
95
120
  end
96
121
  end
@@ -255,6 +280,29 @@ EOS
255
280
  </table>
256
281
  </content>
257
282
  </paragraph>
283
+ </chapter>'
284
+ end
285
+
286
+ it 'should ignore escaped chapter headers' do
287
+ node = parse :chapter, <<EOS
288
+ Chapter 1 The Chapter
289
+
290
+ Stuff
291
+
292
+ \\Chapter 2 - Ignored
293
+
294
+ More stuff
295
+ EOS
296
+ to_xml(node).should == '<chapter id="chapter-1">
297
+ <num>1</num>
298
+ <heading>The Chapter</heading>
299
+ <paragraph id="chapter-1.paragraph-0">
300
+ <content>
301
+ <p>Stuff</p>
302
+ <p>Chapter 2 - Ignored</p>
303
+ <p>More stuff</p>
304
+ </content>
305
+ </paragraph>
258
306
  </chapter>'
259
307
  end
260
308
  end
@@ -439,6 +487,24 @@ EOS
439
487
  <num>3</num>
440
488
  <heading>The Other Heading</heading>
441
489
  </part>
490
+ </body>'
491
+ end
492
+
493
+ it 'should handle escaped parts' do
494
+ node = parse :body, <<EOS
495
+ Part 2 The Part Heading
496
+ \\Part 3 ignored
497
+ EOS
498
+ to_xml(node).should == '<body>
499
+ <part id="part-2">
500
+ <num>2</num>
501
+ <heading>The Part Heading</heading>
502
+ <paragraph id="part-2.paragraph-0">
503
+ <content>
504
+ <p>Part 3 ignored</p>
505
+ </content>
506
+ </paragraph>
507
+ </part>
442
508
  </body>'
443
509
  end
444
510
  end
@@ -629,6 +695,30 @@ EOS
629
695
  </item>
630
696
  </blockList>
631
697
  </content>
698
+ </subsection>'
699
+ end
700
+
701
+ it 'should ignore escaped items' do
702
+ node = parse(:subsection, <<EOS
703
+ (1) a subsection
704
+ \\(1) ignored
705
+ \\9.9.2 item2
706
+ \\some text
707
+ \\(d) item 4
708
+ \\(b) (i) single
709
+ EOS
710
+ )
711
+
712
+ to_xml(node, '', 1).should == '<subsection id="1">
713
+ <num>(1)</num>
714
+ <content>
715
+ <p>a subsection</p>
716
+ <p>(1) ignored</p>
717
+ <p>9.9.2 item2</p>
718
+ <p>some text</p>
719
+ <p>(d) item 4</p>
720
+ <p>(b) (i) single</p>
721
+ </content>
632
722
  </subsection>'
633
723
  end
634
724
  end
@@ -867,6 +957,18 @@ EOS
867
957
  </preface>'
868
958
  end
869
959
 
960
+ it 'should ignore escaped preface' do
961
+ node = parse :act, <<EOS
962
+ \\PREFACE
963
+ 1. Section
964
+ (1) hello
965
+ EOS
966
+
967
+ to_xml(node.preface).should == '<preface>
968
+ <p>PREFACE</p>
969
+ </preface>'
970
+ end
971
+
870
972
  it 'should support remarks in the preface' do
871
973
  node = parse :act, <<EOS
872
974
  PREFACE
@@ -993,10 +1095,29 @@ EOS
993
1095
 
994
1096
  node.elements.first.text_value.should == ""
995
1097
  end
1098
+
1099
+ it 'should ignore escaped preamble' do
1100
+ node = parse :act, <<EOS
1101
+ PREFACE
1102
+
1103
+ this is the preface
1104
+
1105
+ PREAMBLE
1106
+
1107
+ \\PREAMBLE
1108
+
1109
+ 1. Section
1110
+ (1) hello
1111
+ EOS
1112
+
1113
+ to_xml(node.preamble).should == '<preamble>
1114
+ <p>PREAMBLE</p>
1115
+ </preamble>'
1116
+ end
996
1117
  end
997
1118
 
998
1119
  #-------------------------------------------------------------------------------
999
- # Section
1120
+ # Sections
1000
1121
 
1001
1122
  context 'section' do
1002
1123
  it 'should handle section numbers after title' do
@@ -1160,6 +1281,29 @@ EOS
1160
1281
  </blockList>
1161
1282
  </content>
1162
1283
  </paragraph>
1284
+ </section>'
1285
+ end
1286
+
1287
+ it 'should ignore escaped section headings' do
1288
+ node = parse :section, <<EOS
1289
+ 1. Section
1290
+
1291
+ \\1. ignored
1292
+ \\2. another line
1293
+ stuff
1294
+ \\3. a third
1295
+ EOS
1296
+ to_xml(node, "").should == '<section id="section-1">
1297
+ <num>1.</num>
1298
+ <heading>Section</heading>
1299
+ <paragraph id="section-1.paragraph-0">
1300
+ <content>
1301
+ <p>1. ignored</p>
1302
+ <p>2. another line</p>
1303
+ <p>stuff</p>
1304
+ <p>3. a third</p>
1305
+ </content>
1306
+ </paragraph>
1163
1307
  </section>'
1164
1308
  end
1165
1309
  end
@@ -1653,6 +1797,61 @@ Schedule 3. Matters which shall continue to be regulated by Swazi Law and Custom
1653
1797
  Schedule 4. Specially entrenched provisions and entrenched provisions.
1654
1798
  EOS
1655
1799
  end
1800
+
1801
+ it 'should handle escaped schedules' do
1802
+ node = parse :schedules, <<EOS
1803
+ Schedule
1804
+
1805
+ Subject to approval in terms of this By-Law.
1806
+
1807
+ \\Schedule another
1808
+
1809
+ More stuff
1810
+ EOS
1811
+ s = to_xml(node)
1812
+ today = Time.now.strftime('%Y-%m-%d')
1813
+ s.should == '<component id="component-schedule">
1814
+ <doc name="schedule">
1815
+ <meta>
1816
+ <identification source="#slaw">
1817
+ <FRBRWork>
1818
+ <FRBRthis value="/za/act/1980/01/schedule"/>
1819
+ <FRBRuri value="/za/act/1980/01"/>
1820
+ <FRBRalias value="Schedule"/>
1821
+ <FRBRdate date="1980-01-01" name="Generation"/>
1822
+ <FRBRauthor href="#council"/>
1823
+ <FRBRcountry value="za"/>
1824
+ </FRBRWork>
1825
+ <FRBRExpression>
1826
+ <FRBRthis value="/za/act/1980/01/eng@/schedule"/>
1827
+ <FRBRuri value="/za/act/1980/01/eng@"/>
1828
+ <FRBRdate date="1980-01-01" name="Generation"/>
1829
+ <FRBRauthor href="#council"/>
1830
+ <FRBRlanguage language="eng"/>
1831
+ </FRBRExpression>
1832
+ <FRBRManifestation>
1833
+ <FRBRthis value="/za/act/1980/01/eng@/schedule"/>
1834
+ <FRBRuri value="/za/act/1980/01/eng@"/>
1835
+ <FRBRdate date="' + today + '" name="Generation"/>
1836
+ <FRBRauthor href="#slaw"/>
1837
+ </FRBRManifestation>
1838
+ </identification>
1839
+ </meta>
1840
+ <mainBody>
1841
+ <article id="schedule">
1842
+ <paragraph id="schedule.paragraph-0">
1843
+ <content>
1844
+ <p>Subject to approval in terms of this By-Law.</p>
1845
+ <p>Schedule another</p>
1846
+ <p>More stuff</p>
1847
+ </content>
1848
+ </paragraph>
1849
+ </article>
1850
+ </mainBody>
1851
+ </doc>
1852
+ </component>'
1853
+ end
1854
+
1656
1855
  end
1657
1856
 
1658
1857
  #-------------------------------------------------------------------------------
@@ -1768,6 +1967,24 @@ EOS
1768
1967
  </doc>
1769
1968
  </component>'
1770
1969
  end
1970
+
1971
+ it 'should ignore an escaped table' do
1972
+ node = parse :block_paragraphs, <<EOS
1973
+ \\{|
1974
+ | r1c1
1975
+ | r1c2
1976
+ |}
1977
+ EOS
1978
+
1979
+ to_xml(node).should == '<paragraph id="paragraph-0">
1980
+ <content>
1981
+ <p>{|</p>
1982
+ <p>| r1c1</p>
1983
+ <p>| r1c2</p>
1984
+ <p>|}</p>
1985
+ </content>
1986
+ </paragraph>'
1987
+ end
1771
1988
  end
1772
1989
 
1773
1990
  #-------------------------------------------------------------------------------
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slaw
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Greg Kempe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-05 00:00:00.000000000 Z
11
+ date: 2016-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 10.3.1
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 10.3.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -191,6 +191,7 @@ files:
191
191
  - lib/slaw/xml_support.rb
192
192
  - lib/slaw/za/act.treetop
193
193
  - lib/slaw/za/act_nodes.rb
194
+ - lib/slaw/za/act_text.xsl
194
195
  - slaw.gemspec
195
196
  - spec/act_spec.rb
196
197
  - spec/bylaw_spec.rb