fix URLs processing in markdown

This commit is contained in:
Grahame Grieve 2022-03-31 07:12:44 +11:00
parent 4237554d2c
commit 610a7067a1
1 changed files with 30 additions and 11 deletions

View File

@ -2511,19 +2511,19 @@ public class ProfileUtilities extends TranslatingUtilities {
if (webUrl != null) { if (webUrl != null) {
// also, must touch up the markdown // also, must touch up the markdown
if (element.hasDefinition()) if (element.hasDefinition())
element.setDefinition(processRelativeUrls(element.getDefinition(), webUrl, baseSpecUrl(), context.getResourceNames(), masterSourceFileNames, true)); element.setDefinition(processRelativeUrls(element.getDefinition(), webUrl, baseSpecUrl(), context.getResourceNames(), masterSourceFileNames, null, false));
if (element.hasComment()) if (element.hasComment())
element.setComment(processRelativeUrls(element.getComment(), webUrl, baseSpecUrl(), context.getResourceNames(), masterSourceFileNames, true)); element.setComment(processRelativeUrls(element.getComment(), webUrl, baseSpecUrl(), context.getResourceNames(), masterSourceFileNames, null, false));
if (element.hasRequirements()) if (element.hasRequirements())
element.setRequirements(processRelativeUrls(element.getRequirements(), webUrl, baseSpecUrl(), context.getResourceNames(), masterSourceFileNames, true)); element.setRequirements(processRelativeUrls(element.getRequirements(), webUrl, baseSpecUrl(), context.getResourceNames(), masterSourceFileNames, null, false));
if (element.hasMeaningWhenMissing()) if (element.hasMeaningWhenMissing())
element.setMeaningWhenMissing(processRelativeUrls(element.getMeaningWhenMissing(), webUrl, baseSpecUrl(), context.getResourceNames(), masterSourceFileNames, true)); element.setMeaningWhenMissing(processRelativeUrls(element.getMeaningWhenMissing(), webUrl, baseSpecUrl(), context.getResourceNames(), masterSourceFileNames, null, false));
} }
} }
return element; return element;
} }
public static String processRelativeUrls(String markdown, String webUrl, String basePath, List<String> resourceNames, Set<String> filenames, boolean processRelatives) { public static String processRelativeUrls(String markdown, String webUrl, String basePath, List<String> resourceNames, Set<String> baseFilenames, Set<String> localFilenames, boolean processRelatives) {
if (markdown == null) { if (markdown == null) {
return ""; return "";
} }
@ -2547,7 +2547,7 @@ public class ProfileUtilities extends TranslatingUtilities {
// This code is trying to guess which relative references are actually to the // This code is trying to guess which relative references are actually to the
// base specification. // base specification.
// //
if (isLikelySourceURLReference(url, resourceNames, filenames)) { if (isLikelySourceURLReference(url, resourceNames, baseFilenames, localFilenames)) {
b.append("]("); b.append("](");
b.append(basePath); b.append(basePath);
i = i + 1; i = i + 1;
@ -2556,7 +2556,7 @@ public class ProfileUtilities extends TranslatingUtilities {
// disabled 7-Dec 2021 GDG - we don't want to fool with relative URLs at all? // disabled 7-Dec 2021 GDG - we don't want to fool with relative URLs at all?
// re-enabled 11-Feb 2022 GDG - we do want to do this. At least, $assemble in davinci-dtr, where the markdown comes from the SDC IG, and an SDC local reference must be changed to point to SDC. in this case, it's called when generating snapshots // re-enabled 11-Feb 2022 GDG - we do want to do this. At least, $assemble in davinci-dtr, where the markdown comes from the SDC IG, and an SDC local reference must be changed to point to SDC. in this case, it's called when generating snapshots
// added processRelatives parameter to deal with this (well, to try) // added processRelatives parameter to deal with this (well, to try)
if (processRelatives && webUrl != null) { if (processRelatives && webUrl != null && !issLocalFileName(url, localFilenames)) {
// System.out.println("Making "+url+" relative to '"+webUrl+"'"); // System.out.println("Making "+url+" relative to '"+webUrl+"'");
b.append(webUrl); b.append(webUrl);
} else { } else {
@ -2577,7 +2577,19 @@ public class ProfileUtilities extends TranslatingUtilities {
} }
public static boolean isLikelySourceURLReference(String url, List<String> resourceNames, Set<String> filenames) { public static boolean issLocalFileName(String url, Set<String> localFilenames) {
if (localFilenames != null) {
for (String n : localFilenames) {
if (url.startsWith(n.toLowerCase())) {
return true;
}
}
}
return false;
}
public static boolean isLikelySourceURLReference(String url, List<String> resourceNames, Set<String> baseFilenames, Set<String> localFilenames) {
if (resourceNames != null) { if (resourceNames != null) {
for (String n : resourceNames) { for (String n : resourceNames) {
if (url.startsWith(n.toLowerCase()+".html")) { if (url.startsWith(n.toLowerCase()+".html")) {
@ -2588,8 +2600,15 @@ public class ProfileUtilities extends TranslatingUtilities {
} }
} }
} }
if (filenames != null) { if (localFilenames != null) {
for (String n : filenames) { for (String n : localFilenames) {
if (url.startsWith(n.toLowerCase())) {
return false;
}
}
}
if (baseFilenames != null) {
for (String n : baseFilenames) {
if (url.startsWith(n.toLowerCase())) { if (url.startsWith(n.toLowerCase())) {
return true; return true;
} }
@ -2822,7 +2841,7 @@ public class ProfileUtilities extends TranslatingUtilities {
String webroot = profile.getUserString("webroot"); String webroot = profile.getUserString("webroot");
if (e.hasDefinition()) { if (e.hasDefinition()) {
base.setDefinition(processRelativeUrls(e.getDefinition(), webroot, baseSpecUrl(), context.getResourceNames(), masterSourceFileNames, true)); base.setDefinition(processRelativeUrls(e.getDefinition(), webroot, baseSpecUrl(), context.getResourceNames(), masterSourceFileNames, null, true));
} }
base.setShort(e.getShort()); base.setShort(e.getShort());
if (e.hasCommentElement()) if (e.hasCommentElement())