Skip to content

Commit

Permalink
add resource also in RSC-008 // refs #475 #720
Browse files Browse the repository at this point in the history
for RSC-007 this has already been done with 71a76ee
  • Loading branch information
tofi86 committed Dec 21, 2016
1 parent 70cc37d commit 5f5ef7b
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 21 deletions.
39 changes: 20 additions & 19 deletions src/main/java/com/adobe/epubcheck/opf/XRefChecker.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public static enum Type

private static class Reference
{
public final String resource;
public final String source;
public final int lineNumber;
public final int columnNumber;
public final String refResource;
Expand All @@ -70,11 +70,11 @@ private static class Reference
public Reference(String srcResource, int srcLineNumber, int srcColumnNumber, String refResource,
String fragment, Type type)
{
this.fragment = fragment;
this.source = srcResource;
this.lineNumber = srcLineNumber;
this.columnNumber = srcColumnNumber;
this.refResource = refResource;
this.resource = srcResource;
this.fragment = fragment;
this.type = type;
}

Expand Down Expand Up @@ -238,7 +238,7 @@ public void checkReferences()
private void checkReference(Reference ref)
{
Resource res = resources.get(ref.refResource);
Resource host = resources.get(ref.resource);
Resource host = resources.get(ref.source);

// Check undeclared resources
if (res == null)
Expand All @@ -252,28 +252,29 @@ private void checkReference(Reference ref)
else
{
report.message(MessageId.RSC_007w,
EPUBLocation.create(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource),
EPUBLocation.create(ref.source, ref.lineNumber, ref.columnNumber, ref.refResource),
ref.refResource);
}
}
else if (ref.refResource.matches("^[^:/?#]+://.*") && !(version == EPUBVersion.VERSION_3
&& (ref.type == Type.AUDIO || ref.type == Type.VIDEO)))
{
report.message(MessageId.RSC_006,
EPUBLocation.create(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource));
EPUBLocation.create(ref.source, ref.lineNumber, ref.columnNumber, ref.refResource));
}
else if (!ocf.hasEntry(ref.refResource) && !ref.refResource.matches("^[^:/?#]+://.*"))
{
report.message(MessageId.RSC_007,
EPUBLocation.create(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource),
EPUBLocation.create(ref.source, ref.lineNumber, ref.columnNumber, ref.refResource),
ref.refResource);

}
else if (!undeclared.contains(ref.refResource))
{
undeclared.add(ref.refResource);
report.message(MessageId.RSC_008,
EPUBLocation.create(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource));
EPUBLocation.create(ref.source, ref.lineNumber, ref.columnNumber, ref.refResource),
ref.refResource);
}
return;
}
Expand All @@ -288,50 +289,50 @@ else if (!undeclared.contains(ref.refResource))
&& !res.hasValidItemFallback)
{
report.message(MessageId.RSC_010,
EPUBLocation.create(ref.resource, ref.lineNumber, ref.columnNumber,
EPUBLocation.create(ref.source, ref.lineNumber, ref.columnNumber,
ref.refResource + ((ref.fragment != null) ? '#' + ref.fragment : "")));
}
if (/* !res.mimeType.equals("font/opentype") && */!res.item.isInSpine())
{
report.message(MessageId.RSC_011,
EPUBLocation.create(ref.resource, ref.lineNumber, ref.columnNumber,
EPUBLocation.create(ref.source, ref.lineNumber, ref.columnNumber,
ref.refResource + ((ref.fragment != null) ? '#' + ref.fragment : "")));
}
break;
case IMAGE:
if (ref.fragment != null)
{
report.message(MessageId.RSC_009, EPUBLocation.create(ref.resource, ref.lineNumber,
report.message(MessageId.RSC_009, EPUBLocation.create(ref.source, ref.lineNumber,
ref.columnNumber, ref.refResource + "#" + ref.fragment));
return;
}
// if mimeType is null, we should have reported an error already
if (!OPFChecker.isBlessedImageType(res.item.getMimeType()) && !res.hasValidImageFallback)
{
report.message(MessageId.MED_003,
EPUBLocation.create(ref.resource, ref.lineNumber, ref.columnNumber),
EPUBLocation.create(ref.source, ref.lineNumber, ref.columnNumber),
res.item.getMimeType());
}
break;
case REGION_BASED_NAV:
if (!res.item.isFixedLayout())
{
report.message(MessageId.NAV_009,
EPUBLocation.create(ref.resource, ref.lineNumber, ref.columnNumber));
EPUBLocation.create(ref.source, ref.lineNumber, ref.columnNumber));
}
return;
case SEARCH_KEY:
// TODO update when we support EPUB CFI
if ((ref.fragment == null || !ref.fragment.startsWith("epubcfi(")) && !res.item.isInSpine())
{
report.message(MessageId.RSC_021,
EPUBLocation.create(ref.resource, ref.lineNumber, ref.columnNumber), ref.refResource);
EPUBLocation.create(ref.source, ref.lineNumber, ref.columnNumber), ref.refResource);
}
break;
case STYLESHEET:
if (ref.fragment != null)
{
report.message(MessageId.RSC_013, EPUBLocation.create(ref.resource, ref.lineNumber,
report.message(MessageId.RSC_013, EPUBLocation.create(ref.source, ref.lineNumber,
ref.columnNumber, ref.refResource + "#" + ref.fragment));
return;
}
Expand All @@ -356,7 +357,7 @@ else if (!undeclared.contains(ref.refResource))
if (ref.fragment == null)
{
report.message(MessageId.RSC_015,
EPUBLocation.create(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource));
EPUBLocation.create(ref.source, ref.lineNumber, ref.columnNumber, ref.refResource));
return;
}
break;
Expand Down Expand Up @@ -386,7 +387,7 @@ else if (ref.fragment.contains("=") && host != null && host.item.getProperties()
Anchor anchor = res.anchors.get(ref.fragment);
if (anchor == null)
{
report.message(MessageId.RSC_012, EPUBLocation.create(ref.resource, ref.lineNumber,
report.message(MessageId.RSC_012, EPUBLocation.create(ref.source, ref.lineNumber,
ref.columnNumber, ref.refResource + "#" + ref.fragment));
return;
}
Expand All @@ -396,15 +397,15 @@ else if (ref.fragment.contains("=") && host != null && host.item.getProperties()
case SVG_CLIP_PATH:
if (anchor.type != ref.type)
{
report.message(MessageId.RSC_014, EPUBLocation.create(ref.resource, ref.lineNumber,
report.message(MessageId.RSC_014, EPUBLocation.create(ref.source, ref.lineNumber,
ref.columnNumber, ref.refResource + "#" + ref.fragment));
}
break;
case SVG_SYMBOL:
case HYPERLINK:
if (anchor.type != ref.type && anchor.type != Type.GENERIC)
{
report.message(MessageId.RSC_014, EPUBLocation.create(ref.resource, ref.lineNumber,
report.message(MessageId.RSC_014, EPUBLocation.create(ref.source, ref.lineNumber,
ref.columnNumber, ref.refResource + "#" + ref.fragment));
}
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ RSC_006=Remote resource reference not allowed; resource must be placed in the OC
RSC_006_SUG=Only audio and video remote resources are permitted.
RSC_007=Referenced resource '%1$s' could not be found in the EPUB.
RSC_007w=Referenced resource '%1$s' could not be found in the EPUB.
RSC_008=Referenced resource is not declared in the OPF manifest.
RSC_008=Referenced resource '%1$s' is not declared in the OPF manifest.
RSC_009=A fragment identifier should not be used with an img src attribute.
RSC_010=Reference to non-standard resource type found.
RSC_011=Found a reference to a resource that is not a spine item.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ RSC-004 ERROR File '%1$s' could not be decrypted.
RSC-005 ERROR Error while parsing file '%1$s'.
RSC-006 ERROR Remote resource reference not allowed; resource must be placed in the OCF. Only audio and video remote resources are permitted.
RSC-007 ERROR Referenced resource '%1$s' could not be found in the EPUB.
RSC-008 ERROR Referenced resource is not declared in the OPF manifest.
RSC-008 ERROR Referenced resource '%1$s' is not declared in the OPF manifest.
RSC-009 ERROR A fragment identifier should not be used with an img src attribute.
RSC-010 ERROR Reference to non-standard resource type found.
RSC-011 WARNING Found a reference to a resource that is not a spine item.
Expand Down

0 comments on commit 5f5ef7b

Please sign in to comment.