From fdabe6646a74776fc217185bc9d1bee53ff58a62 Mon Sep 17 00:00:00 2001 From: Romain Deltour Date: Thu, 17 Nov 2022 00:13:55 +0100 Subject: [PATCH] feat: check that overlays audio file URLs have no fragments This is reported as `MED-014` (repurposed). Fixes #1251 --- .../com/adobe/epubcheck/overlay/OverlayHandler.java | 10 +++++++++- .../epubcheck/messages/MessageBundle.properties | 2 +- .../files/audio-src-fragment-error.smil | 13 +++++++++++++ .../epub3/09-media-overlays/media-overlays.feature | 6 ++++++ 4 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 src/test/resources/epub3/09-media-overlays/files/audio-src-fragment-error.smil diff --git a/src/main/java/com/adobe/epubcheck/overlay/OverlayHandler.java b/src/main/java/com/adobe/epubcheck/overlay/OverlayHandler.java index 59cf5e24a..afba45b3d 100644 --- a/src/main/java/com/adobe/epubcheck/overlay/OverlayHandler.java +++ b/src/main/java/com/adobe/epubcheck/overlay/OverlayHandler.java @@ -11,7 +11,6 @@ import com.adobe.epubcheck.messages.MessageId; import com.adobe.epubcheck.opf.OPFChecker30; import com.adobe.epubcheck.opf.ValidationContext; -import com.adobe.epubcheck.opf.XRefChecker; import com.adobe.epubcheck.opf.XRefChecker.Type; import com.adobe.epubcheck.util.EpubConstants; import com.adobe.epubcheck.vocab.AggregateVocab; @@ -163,8 +162,17 @@ private void processAudioSrc() { URL url = checkURL(currentElement().getAttribute("src")); + + // check that the URL has no fragment + if (url.fragment() != null) + { + report.message(MessageId.MED_014, location(), url.fragment()); + url = URLUtils.docURL(url); + } + if (url != null && context.xrefChecker.isPresent()) { + // check that the audio type is a core media type resource String mimeType = context.xrefChecker.get().getMimeType(url); if (mimeType != null && !OPFChecker30.isBlessedAudioType(mimeType)) diff --git a/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties b/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties index a5ae619f9..7a4250ef1 100644 --- a/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties +++ b/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties @@ -142,7 +142,7 @@ MED_010=EPUB Content Documents referenced from a Media Overlay must specify the MED_011=EPUB Content Document referenced from multiple Media Overlay Documents. MED_012=The "media-overlay" attribute does not match the ID of the Media Overlay that refers to this document. MED_013=Media Overlay Document referenced from the "media-overlay" attribute does not contain a reference to this Content Document. -MED_014=A non-empty fragment identifier is required. +MED_014=Media overlay audio file URLs must not have a fragment, but found '#%1$s'. MED_015=Media overlay text references must be in reading order. Text target "%1$s" is before the previous link target in %2$s order. MED_016=Media Overlays total duration should be the sum of the durations of all Media Overlays documents. MED_017=URL fragment should indicate an element ID, but found '#%1$s'. diff --git a/src/test/resources/epub3/09-media-overlays/files/audio-src-fragment-error.smil b/src/test/resources/epub3/09-media-overlays/files/audio-src-fragment-error.smil new file mode 100644 index 000000000..155a088cc --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/audio-src-fragment-error.smil @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/media-overlays.feature b/src/test/resources/epub3/09-media-overlays/media-overlays.feature index 5a84c3934..0e9eb7a48 100644 --- a/src/test/resources/epub3/09-media-overlays/media-overlays.feature +++ b/src/test/resources/epub3/09-media-overlays/media-overlays.feature @@ -92,6 +92,12 @@ Feature: EPUB 3 — Media Overlays #### 9.2.2.8 The `audio` element + @spec @xref:sec-smil-audio-elem + Scenario: Report an audio file URL with a fragment + When checking document 'audio-src-fragment-error.smil' + Then error MED-014 is reported + And no other errors or warnings are reported + @spec @xref:sec-smil-audio-elem Scenario: Allow clock values with the full clock syntax (`hh:mm:ss.milli`) When checking document 'clock-value-full-syntax-valid.smil'