slaw 0.10.0 → 0.10.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -3
- data/README.md +4 -0
- data/lib/slaw/version.rb +1 -1
- data/lib/slaw/za/act_text.xsl +31 -16
- data/spec/generator_spec.rb +58 -6
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e97aa37515b9c1ca126afd8a7ede5e1e614ffea
|
4
|
+
data.tar.gz: c2c85c2ac10c4da253edcde157f8a8b9ae3ad27e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34332cfccb221e26870c8e1dfc29238b1471b8d8e7babc6fb7b66cf80faddf10a00b6d2d8b0dd1c001abf26e1940e7d15fafda2e90929630d9901d81562864e4
|
7
|
+
data.tar.gz: 57c9065e4f9031295ad7082ceed7d69201510939952b072f1dfa8baeadaa32432bc69777b389a651c58aea2b80865a785cea54d29ab3e41d02faf825ec08333b
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -218,6 +218,10 @@ Akoma Ntoso `component` elements at the end of the XML document, with a name of
|
|
218
218
|
|
219
219
|
## Changelog
|
220
220
|
|
221
|
+
### 0.10.1
|
222
|
+
|
223
|
+
* Ensure backslash escaping handles listIntroductions and partial words correctly
|
224
|
+
|
221
225
|
### 0.10.0
|
222
226
|
|
223
227
|
* New command `unparse FILE` which transforms an Akoma Ntoso XML document into plain text, suitable for re-parsing
|
data/lib/slaw/version.rb
CHANGED
data/lib/slaw/za/act_text.xsl
CHANGED
@@ -6,6 +6,28 @@
|
|
6
6
|
<xsl:output method="text" indent="no" omit-xml-declaration="yes" />
|
7
7
|
<xsl:strip-space elements="*"/>
|
8
8
|
|
9
|
+
<!-- adds a backslash to the start of the value param, if necessary -->
|
10
|
+
<xsl:template name="escape">
|
11
|
+
<xsl:param name="value"/>
|
12
|
+
|
13
|
+
<xsl:variable name="prefix" select="translate(substring($value, 1, 10), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" />
|
14
|
+
<xsl:variable name="numprefix" select="translate(substring($value, 1, 3), '1234567890', 'NNNNNNNNNN')" />
|
15
|
+
|
16
|
+
<!-- p tags must escape initial content that looks like a block element marker -->
|
17
|
+
<xsl:if test="$prefix = 'BODY' or
|
18
|
+
$prefix = 'PREAMBLE' or
|
19
|
+
$prefix = 'PREFACE' or
|
20
|
+
starts-with($prefix, 'CHAPTER ') or
|
21
|
+
starts-with($prefix, 'PART ') or
|
22
|
+
starts-with($prefix, 'SCHEDULE ') or
|
23
|
+
starts-with($prefix, '{|') or
|
24
|
+
starts-with($numprefix, '(') or
|
25
|
+
starts-with($numprefix, 'N.')">
|
26
|
+
<xsl:text>\</xsl:text>
|
27
|
+
</xsl:if>
|
28
|
+
<xsl:value-of select="$value"/>
|
29
|
+
</xsl:template>
|
30
|
+
|
9
31
|
<xsl:template match="a:act">
|
10
32
|
<xsl:apply-templates select="a:coverPage" />
|
11
33
|
<xsl:apply-templates select="a:preface" />
|
@@ -81,28 +103,21 @@
|
|
81
103
|
</xsl:template>
|
82
104
|
|
83
105
|
<xsl:template match="a:p">
|
84
|
-
<xsl:
|
85
|
-
|
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="."/>
|
106
|
+
<xsl:call-template name="escape">
|
107
|
+
<xsl:with-param name="value" select="." />
|
108
|
+
</xsl:call-template>
|
100
109
|
<!-- p tags must end with a newline -->
|
101
110
|
<xsl:text>
|
102
111
|
|
103
112
|
</xsl:text>
|
104
113
|
</xsl:template>
|
105
114
|
|
115
|
+
<xsl:template match="a:listIntroduction|a:intro">
|
116
|
+
<xsl:call-template name="escape">
|
117
|
+
<xsl:with-param name="value" select="." />
|
118
|
+
</xsl:call-template>
|
119
|
+
</xsl:template>
|
120
|
+
|
106
121
|
<xsl:template match="a:blockList">
|
107
122
|
<xsl:if test="a:listIntroduction != ''">
|
108
123
|
<xsl:apply-templates select="a:listIntroduction" />
|
data/spec/generator_spec.rb
CHANGED
@@ -47,11 +47,17 @@ Some content.
|
|
47
47
|
<paragraph id="section-1.paragraph-0">
|
48
48
|
<content>
|
49
49
|
<p>Chapter 2 ignored</p>
|
50
|
+
<p>Chapters</p>
|
50
51
|
<p>Part 2 ignored</p>
|
52
|
+
<p>participation</p>
|
51
53
|
<p>Schedule 2 ignored</p>
|
52
|
-
<p>
|
53
|
-
<p>
|
54
|
-
<p>
|
54
|
+
<p>Schedules</p>
|
55
|
+
<p>BODY not escaped</p>
|
56
|
+
<p>BODY</p>
|
57
|
+
<p>PREAMBLE not escaped</p>
|
58
|
+
<p>PREAMBLE</p>
|
59
|
+
<p>PREFACE not escaped</p>
|
60
|
+
<p>PREFACE</p>
|
55
61
|
<p>2. ignored</p>
|
56
62
|
<p>2.1 ignored</p>
|
57
63
|
<p>(2) ignored</p>
|
@@ -68,15 +74,27 @@ XML
|
|
68
74
|
|
69
75
|
\Chapter 2 ignored
|
70
76
|
|
77
|
+
Chapters
|
78
|
+
|
71
79
|
\Part 2 ignored
|
72
80
|
|
81
|
+
participation
|
82
|
+
|
73
83
|
\Schedule 2 ignored
|
74
84
|
|
75
|
-
|
85
|
+
Schedules
|
86
|
+
|
87
|
+
BODY not escaped
|
88
|
+
|
89
|
+
\BODY
|
90
|
+
|
91
|
+
PREAMBLE not escaped
|
92
|
+
|
93
|
+
\PREAMBLE
|
76
94
|
|
77
|
-
|
95
|
+
PREFACE not escaped
|
78
96
|
|
79
|
-
\PREFACE
|
97
|
+
\PREFACE
|
80
98
|
|
81
99
|
\2. ignored
|
82
100
|
|
@@ -90,6 +108,40 @@ XML
|
|
90
108
|
|
91
109
|
\{| ignored
|
92
110
|
|
111
|
+
'
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'should escape listIntros when unparsing' do
|
115
|
+
doc = xml2doc(section(<<XML
|
116
|
+
<num>1.</num>
|
117
|
+
<heading>Section</heading>
|
118
|
+
<paragraph id="section-9.paragraph-0">
|
119
|
+
<content>
|
120
|
+
<blockList id="section-9.paragraph-0.list1">
|
121
|
+
<listIntroduction>(2) A special meeting:</listIntroduction>
|
122
|
+
<item id="section-9.paragraph-0.list1.a">
|
123
|
+
<num>(a)</num>
|
124
|
+
<p>the chairperson so directs; or</p>
|
125
|
+
</item>
|
126
|
+
<item id="section-9.paragraph-0.list1.b">
|
127
|
+
<num>(b)</num>
|
128
|
+
<p>a majority of the members</p>
|
129
|
+
</item>
|
130
|
+
</blockList>
|
131
|
+
</content>
|
132
|
+
</paragraph>
|
133
|
+
XML
|
134
|
+
))
|
135
|
+
|
136
|
+
text = subject.text_from_act(doc)
|
137
|
+
text.should == '1. Section
|
138
|
+
|
139
|
+
\(2) A special meeting:
|
140
|
+
|
141
|
+
(a) the chairperson so directs; or
|
142
|
+
|
143
|
+
(b) a majority of the members
|
144
|
+
|
93
145
|
'
|
94
146
|
end
|
95
147
|
end
|