Skip to content

Commit be8ce8c

Browse files
author
Sanders Kleinfeld
committed
Merge pull request #139 from oreillymedia/labels
Improvements/fixes in formal object labeling
2 parents 6e3deac + 1f5d9da commit be8ce8c

File tree

2 files changed

+587
-52
lines changed

2 files changed

+587
-52
lines changed

htmlbook-xsl/common.xsl

Lines changed: 54 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,10 @@
9898
</xsl:template>
9999

100100
<xsl:template match="h:table" mode="label.markup">
101+
<xsl:param name="label.formal.with.ancestor" select="$label.formal.with.ancestor"/>
101102
<xsl:choose>
102103
<xsl:when test="$label.formal.with.ancestor != 0">
103-
<xsl:apply-templates select="ancestor::h:section[contains(@data-type, 'acknowledgments') or
104+
<xsl:apply-templates select="(ancestor::h:section[contains(@data-type, 'acknowledgments') or
104105
contains(@data-type, 'afterword') or
105106
contains(@data-type, 'appendix') or
106107
contains(@data-type, 'bibliography') or
@@ -116,28 +117,30 @@
116117
contains(@data-type, 'introduction') or
117118
contains(@data-type, 'preface') or
118119
contains(@data-type, 'titlepage') or
119-
contains(@data-type, 'toc')][last()]" mode="label.markup"/>
120+
contains(@data-type, 'toc')]|
121+
ancestor::h:div[@data-type = 'part'])[last()]" mode="label.markup"/>
120122
<xsl:apply-templates select="." mode="intralabel.punctuation"/>
121-
<xsl:number count="h:table" from="h:section[contains(@data-type, 'acknowledgments') or
122-
contains(@data-type, 'afterword') or
123-
contains(@data-type, 'appendix') or
124-
contains(@data-type, 'bibliography') or
125-
contains(@data-type, 'chapter') or
126-
contains(@data-type, 'colophon') or
127-
contains(@data-type, 'conclusion') or
128-
contains(@data-type, 'copyright-page') or
129-
contains(@data-type, 'dedication') or
130-
contains(@data-type, 'foreword') or
131-
contains(@data-type, 'glossary') or
132-
contains(@data-type, 'halftitlepage') or
133-
contains(@data-type, 'index') or
134-
contains(@data-type, 'introduction') or
135-
contains(@data-type, 'preface') or
136-
contains(@data-type, 'titlepage') or
137-
contains(@data-type, 'toc')]" level="any" format="1"/>
123+
<xsl:number count="h:table[h:caption[. != '']]" from="h:section[contains(@data-type, 'acknowledgments') or
124+
contains(@data-type, 'afterword') or
125+
contains(@data-type, 'appendix') or
126+
contains(@data-type, 'bibliography') or
127+
contains(@data-type, 'chapter') or
128+
contains(@data-type, 'colophon') or
129+
contains(@data-type, 'conclusion') or
130+
contains(@data-type, 'copyright-page') or
131+
contains(@data-type, 'dedication') or
132+
contains(@data-type, 'foreword') or
133+
contains(@data-type, 'glossary') or
134+
contains(@data-type, 'halftitlepage') or
135+
contains(@data-type, 'index') or
136+
contains(@data-type, 'introduction') or
137+
contains(@data-type, 'preface') or
138+
contains(@data-type, 'titlepage') or
139+
contains(@data-type, 'toc')]|
140+
h:div[contains(@data-type, 'part')]" level="any" format="1"/>
138141
</xsl:when>
139142
<xsl:otherwise>
140-
<xsl:number count="h:table" level="any" format="1"/>
143+
<xsl:number count="h:table[h:caption[. != '']]" level="any" format="1"/>
141144
</xsl:otherwise>
142145
</xsl:choose>
143146
</xsl:template>
@@ -165,7 +168,7 @@
165168
contains(@data-type, 'toc')]|
166169
ancestor::h:div[@data-type = 'part'])[last()]" mode="label.markup"/>
167170
<xsl:apply-templates select="." mode="intralabel.punctuation"/>
168-
<xsl:number count="h:figure[not(contains(@data-type, 'cover'))]" from="h:section[contains(@data-type, 'acknowledgments') or
171+
<xsl:number count="h:figure[not(contains(@data-type, 'cover'))][h:figcaption[. != '']]" from="h:section[contains(@data-type, 'acknowledgments') or
169172
contains(@data-type, 'afterword') or
170173
contains(@data-type, 'appendix') or
171174
contains(@data-type, 'bibliography') or
@@ -181,18 +184,20 @@
181184
contains(@data-type, 'introduction') or
182185
contains(@data-type, 'preface') or
183186
contains(@data-type, 'titlepage') or
184-
contains(@data-type, 'toc')]" level="any" format="1"/>
187+
contains(@data-type, 'toc')]|
188+
h:div[contains(@data-type, 'part')]" level="any" format="1"/>
185189
</xsl:when>
186190
<xsl:otherwise>
187-
<xsl:number count="h:figure[not(contains(@data-type, 'cover'))]" level="any" format="1"/>
191+
<xsl:number count="h:figure[not(contains(@data-type, 'cover'))][h:figcaption[. != '']]" level="any" format="1"/>
188192
</xsl:otherwise>
189193
</xsl:choose>
190194
</xsl:template>
191195

192196
<xsl:template match="h:div[contains(@data-type, 'example')]" mode="label.markup">
197+
<xsl:param name="label.formal.with.ancestor" select="$label.formal.with.ancestor"/>
193198
<xsl:choose>
194199
<xsl:when test="$label.formal.with.ancestor != 0">
195-
<xsl:apply-templates select="ancestor::h:section[contains(@data-type, 'acknowledgments') or
200+
<xsl:apply-templates select="(ancestor::h:section[contains(@data-type, 'acknowledgments') or
196201
contains(@data-type, 'afterword') or
197202
contains(@data-type, 'appendix') or
198203
contains(@data-type, 'bibliography') or
@@ -208,32 +213,39 @@
208213
contains(@data-type, 'introduction') or
209214
contains(@data-type, 'preface') or
210215
contains(@data-type, 'titlepage') or
211-
contains(@data-type, 'toc')][last()]" mode="label.markup"/>
216+
contains(@data-type, 'toc')]|
217+
ancestor::h:div[@data-type = 'part'])[last()]" mode="label.markup"/>
212218
<xsl:apply-templates select="." mode="intralabel.punctuation"/>
213-
<xsl:number count="h:div[contains(@data-type, 'example')]" from="h:section[contains(@data-type, 'acknowledgments') or
214-
contains(@data-type, 'afterword') or
215-
contains(@data-type, 'appendix') or
216-
contains(@data-type, 'bibliography') or
217-
contains(@data-type, 'chapter') or
218-
contains(@data-type, 'colophon') or
219-
contains(@data-type, 'conclusion') or
220-
contains(@data-type, 'copyright-page') or
221-
contains(@data-type, 'dedication') or
222-
contains(@data-type, 'foreword') or
223-
contains(@data-type, 'glossary') or
224-
contains(@data-type, 'halftitlepage') or
225-
contains(@data-type, 'index') or
226-
contains(@data-type, 'introduction') or
227-
contains(@data-type, 'preface') or
228-
contains(@data-type, 'titlepage') or
229-
contains(@data-type, 'toc')]" level="any" format="1"/>
219+
<xsl:number count="h:div[@data-type='example']" from="h:section[contains(@data-type, 'acknowledgments') or
220+
contains(@data-type, 'afterword') or
221+
contains(@data-type, 'appendix') or
222+
contains(@data-type, 'bibliography') or
223+
contains(@data-type, 'chapter') or
224+
contains(@data-type, 'colophon') or
225+
contains(@data-type, 'conclusion') or
226+
contains(@data-type, 'copyright-page') or
227+
contains(@data-type, 'dedication') or
228+
contains(@data-type, 'foreword') or
229+
contains(@data-type, 'glossary') or
230+
contains(@data-type, 'halftitlepage') or
231+
contains(@data-type, 'index') or
232+
contains(@data-type, 'introduction') or
233+
contains(@data-type, 'preface') or
234+
contains(@data-type, 'titlepage') or
235+
contains(@data-type, 'toc')]|
236+
h:div[contains(@data-type, 'part')]" level="any" format="1"/>
230237
</xsl:when>
231238
<xsl:otherwise>
232239
<xsl:number count="h:div[contains(@data-type, 'example')]" level="any" format="1"/>
233240
</xsl:otherwise>
234241
</xsl:choose>
235242
</xsl:template>
236243

244+
<!-- No label markup for figures or tables with empty captions -->
245+
<xsl:template match="h:figure[h:figcaption[normalize-space(.) = '']]|
246+
h:table[h:caption[normalize-space(.) = '']]"
247+
mode="label.markup"/>
248+
237249
<xsl:template match="*" mode="label.markup"/>
238250

239251
<!-- Intralabel punctuation templates.

0 commit comments

Comments
 (0)