blob: 8356ab1bd15de8c7673d57be374d4677ad203077 [file] [log] [blame]
using System;
namespace AppsheetEpplus;
internal class UriHelper {
internal static Uri ResolvePartUri(Uri sourceUri, Uri targetUri) {
if (targetUri.OriginalString.StartsWith("/")) {
return targetUri;
}
string[] source = sourceUri.OriginalString.Split('/');
string[] target = targetUri.OriginalString.Split('/');
int t = target.Length - 1;
int s;
if (sourceUri.OriginalString.EndsWith(
"/")) //is the source a directory?
{
s = source.Length - 1;
} else {
s = source.Length - 2;
}
string file = target[t--];
while (t >= 0) {
if (target[t] == ".") {
break;
}
if (target[t] == "..") {
s--;
t--;
} else {
file = target[t--] + "/" + file;
}
}
if (s >= 0) {
for (int i = s; i >= 0; i--) {
file = source[i] + "/" + file;
}
}
return new(file, UriKind.RelativeOrAbsolute);
}
internal static Uri GetRelativeUri(Uri worksheetUri, Uri uri) {
string[] source = worksheetUri.OriginalString.Split('/');
string[] target = uri.OriginalString.Split('/');
int slen;
if (worksheetUri.OriginalString.EndsWith("/")) {
slen = source.Length;
} else {
slen = source.Length - 1;
}
int i = 0;
while (i < slen && i < target.Length && source[i] == target[i]) {
i++;
}
string dirUp = "";
for (int s = i; s < slen; s++) {
dirUp += "../";
}
string file = "";
for (int t = i; t < target.Length; t++) {
file += (file == "" ? "" : "/") + target[t];
}
return new(dirUp + file, UriKind.Relative);
}
}