Skip to content

Commit 05a6a20

Browse files
mattgarrishrdeltour
authored andcommitted
feat: check playback properties do not have 'refines' attribute
1 parent 8f87b91 commit 05a6a20

File tree

4 files changed

+102
-32
lines changed

4 files changed

+102
-32
lines changed

src/main/resources/com/adobe/epubcheck/schema/30/package-30.sch

Lines changed: 46 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -99,36 +99,6 @@
9999
</rule>
100100
</pattern>
101101

102-
<pattern id="opf.media.overlay">
103-
<rule context="opf:item[@media-overlay]">
104-
<let name="ref" value="./normalize-space(@media-overlay)"/>
105-
<let name="item" value="//opf:manifest/opf:item[normalize-space(@id) = $ref]"/>
106-
<let name="item-media-type" value="normalize-space($item/@media-type)"/>
107-
<assert test="$item-media-type = 'application/smil+xml'">media overlay items must be of
108-
the "application/smil+xml" type (given type was "<value-of select="$item-media-type"
109-
/>")</assert>
110-
</rule>
111-
</pattern>
112-
113-
<pattern id="opf.media.overlay.metadata.global">
114-
<rule context="opf:manifest[opf:item[@media-overlay]]">
115-
<assert test="//opf:meta[normalize-space(@property)='media:duration' and not (@refines)]">global
116-
media:duration meta element not set</assert>
117-
</rule>
118-
</pattern>
119-
120-
<pattern id="opf.media.overlay.metadata.item">
121-
<rule context="opf:manifest/opf:item[@media-overlay]">
122-
<let name="mo-idref" value="normalize-space(@media-overlay)"/>
123-
<let name="mo-item" value="//opf:item[normalize-space(@id) = $mo-idref]"/>
124-
<let name="mo-item-id" value="$mo-item/normalize-space(@id)"/>
125-
<let name="mo-item-uri" value="concat('#', $mo-item-id)"/>
126-
<assert test="//opf:meta[normalize-space(@property)='media:duration' and normalize-space(@refines) = $mo-item-uri ]">item
127-
media:duration meta element not set (expecting: meta property='media:duration'
128-
refines='<value-of select="$mo-item-uri"/>')</assert>
129-
</rule>
130-
</pattern>
131-
132102
<pattern id="opf.bindings.handler">
133103
<rule context="opf:bindings/opf:mediaType">
134104
<let name="ref" value="./normalize-space(@handler)"/>
@@ -302,6 +272,52 @@
302272

303273
<include href="./mod/id-unique.sch"/>
304274

275+
<!-- Media overlay checks -->
276+
277+
<pattern id="opf.media.overlay">
278+
<rule context="opf:item[@media-overlay]">
279+
<let name="ref" value="./normalize-space(@media-overlay)"/>
280+
<let name="item" value="//opf:manifest/opf:item[normalize-space(@id) = $ref]"/>
281+
<let name="item-media-type" value="normalize-space($item/@media-type)"/>
282+
<assert test="$item-media-type = 'application/smil+xml'">media overlay items must be of
283+
the "application/smil+xml" type (given type was "<value-of select="$item-media-type"
284+
/>")</assert>
285+
</rule>
286+
</pattern>
287+
288+
<pattern id="opf.media.overlay.metadata.global">
289+
<rule context="opf:manifest[opf:item[@media-overlay]]">
290+
<assert test="//opf:meta[normalize-space(@property)='media:duration' and not (@refines)]">global
291+
media:duration meta element not set</assert>
292+
</rule>
293+
</pattern>
294+
295+
<pattern id="opf.media.overlay.metadata.item">
296+
<rule context="opf:manifest/opf:item[@media-overlay]">
297+
<let name="mo-idref" value="normalize-space(@media-overlay)"/>
298+
<let name="mo-item" value="//opf:item[normalize-space(@id) = $mo-idref]"/>
299+
<let name="mo-item-id" value="$mo-item/normalize-space(@id)"/>
300+
<let name="mo-item-uri" value="concat('#', $mo-item-id)"/>
301+
<assert test="//opf:meta[normalize-space(@property)='media:duration' and normalize-space(@refines) = $mo-item-uri ]">item
302+
media:duration meta element not set (expecting: meta property='media:duration'
303+
refines='<value-of select="$mo-item-uri"/>')</assert>
304+
</rule>
305+
</pattern>
306+
307+
<pattern id="opf.media.overlay.metadata.active-class">
308+
<rule context="opf:meta[normalize-space(@property)='media:active-class']">
309+
<report test="@refines"> @refines must not be used with the media:active-class property</report>
310+
</rule>
311+
</pattern>
312+
313+
<pattern id="opf.media.overlay.metadata.playback-active-class">
314+
<rule context="opf:meta[normalize-space(@property)='media:playback-active-class']">
315+
<report test="@refines"> @refines must not be used with the media:playback-active-class property</report>
316+
</rule>
317+
</pattern>
318+
319+
320+
305321
<!-- EPUB 3.2 New Checks -->
306322

307323
<pattern id="opf.spine.duplicate.refs">
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid"
3+
xmlns:dc="http://purl.org/dc/elements/1.1/">
4+
<metadata>
5+
<dc:title>Title</dc:title>
6+
<dc:language>en</dc:language>
7+
<dc:identifier id="uid">NOID</dc:identifier>
8+
<meta property="dcterms:modified">2019-01-01T12:00:00Z</meta>
9+
<meta property="media:active-class" refines="#mo001">-epub-media-overlay-active</meta>
10+
<!-- Media Overlays Duration Properties -->
11+
<meta property="media:duration">10min</meta>
12+
<meta refines="#mo001" property="media:duration">10min</meta>
13+
</metadata>
14+
<manifest>
15+
<item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml"/>
16+
<item id="mo001" href="mediaoverlay_001.smil" media-type="application/smil+xml"/>
17+
</manifest>
18+
<spine>
19+
<itemref idref="t001"/>
20+
</spine>
21+
</package>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid"
3+
xmlns:dc="http://purl.org/dc/elements/1.1/">
4+
<metadata>
5+
<dc:title>Title</dc:title>
6+
<dc:language>en</dc:language>
7+
<dc:identifier id="uid">NOID</dc:identifier>
8+
<meta property="dcterms:modified">2019-01-01T12:00:00Z</meta>
9+
<meta property="media:playback-active-class" refines="#mo001">-epub-media-overlay-playing</meta>
10+
<!-- Media Overlays Duration Properties -->
11+
<meta property="media:duration">10min</meta>
12+
<meta refines="#mo001" property="media:duration">10min</meta>
13+
</metadata>
14+
<manifest>
15+
<item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml"/>
16+
<item id="mo001" href="mediaoverlay_001.smil" media-type="application/smil+xml"/>
17+
</manifest>
18+
<spine>
19+
<itemref idref="t001"/>
20+
</spine>
21+
</package>

src/test/resources/epub3/mediaoverlays-package-document.feature

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,19 @@ Feature: EPUB 3 ▸ Media Overlays ▸ Package Document Checks
4343
Scenario: the 'media:duration' property can be expressed as a full clock value
4444
When checking file 'mediaoverlays-duration-fullclock-valid.opf'
4545
Then no errors or warnings are reported
46-
46+
4747
Scenario: the 'media:duration' property can be expressed as a timecount value
4848
When checking file 'mediaoverlays-duration-timecount-valid.opf'
49-
Then no errors or warnings are reported
49+
Then no errors or warnings are reported
50+
51+
Scenario: Report a 'media:active-class' property with a refines attribute
52+
When checking file 'mediaoverlays-active-class-refines-error.opf'
53+
Then error RSC-005 is reported
54+
And the message contains "must not be used with the media:active-class property"
55+
And no other errors or warnings are reported
56+
57+
Scenario: Report a 'media:playback-active-class' property with a refines attribute
58+
When checking file 'mediaoverlays-playback-active-class-refines-error.opf'
59+
Then error RSC-005 is reported
60+
And the message contains "must not be used with the media:playback-active-class property"
61+
And no other errors or warnings are reported

0 commit comments

Comments
 (0)