resolved bug - fixed function getRelativePath in lib/path.awk

This commit is contained in:
Abdullah Islam 2023-11-15 15:50:28 +06:00
parent cc03fe67cf
commit 2d5523fc24
4 changed files with 59 additions and 40 deletions

View File

@ -2,14 +2,12 @@ function getDirname(path, pathComponents, dirname) {
dirname = ""
pathComponents[1] = ""
sub(/\/+$/, "", path)
path = resolvePath(path)
split(path, pathComponents, "/")
if (length(pathComponents) < 2) return "."
pathComponents[length(pathComponents)] = ""
for (i = 1; i < length(pathComponents); i++)
for (i = 1; i <= length(pathComponents) - 1; i++)
dirname = dirname pathComponents[i] "/"
return dirname
@ -22,36 +20,42 @@ function resolvePath(path, resolvedPath, pathComponents) {
sub(/\/+$/, "", path)
split(path, pathComponents, "/")
for (i in pathComponents)
if (pathComponents[i] == "." || pathComponents[i+1] == ".." || pathComponents[i] == "")
for (i = 1; i <= length(pathComponents); i++)
if (pathComponents[i] == "." || pathComponents[i] == "")
continue
else
else if (pathComponents[i+1] == "..") {
i++
continue
} else
resolvedPath = resolvedPath pathComponents[i] "/"
return resolvedPath
}
function getRelativePath(base, path, resolvedPath, baseComponents, pathComponents, commonPrefix) {
path = resolvePath(path)
base = resolvePath(base)
pathComponents[1] = ""
baseComponents[1] = ""
isCommonPrefixUnfinished = 1
sub(/\/+$/, "", base)
sub(/\/+$/, "", path)
split(path, pathComponents, "/")
split(base, baseComponents, "/")
for (i in pathComponents)
if (baseComponents[i] == pathComponents[i] && isCommonPrefixUnfinished)
resolvedPath = resolvedPath "../"
else {
isCommonPrefixUnfinished = 0
resolvedPath = resolvedPath pathComponents[i] "/"
}
sub(/\/+$/, "", resolvedPath)
return resolvedPath
}
function getRelativePath(base, path, resolvedPath, baseComponents, pathComponents, commonPrefix) {
pathComponents[1] = ""
baseComponents[1] = ""
commonPrefixEndPosition = 1
resolvedPath = ""
base = resolvePath(base)
path = resolvePath(path)
split(path, pathComponents, "/")
split(base, baseComponents, "/")
while (pathComponents[commonPrefixEndPosition] == baseComponents[commonPrefixEndPosition])
commonPrefixEndPosition++
for (i = commonPrefixEndPosition; i <= length(baseComponents); i++)
if (baseComponents[i] == "") break
else resolvedPath = resolvedPath "../"
for (i = commonPrefixEndPosition; i <= length(pathComponents); i++)
resolvedPath = resolvedPath pathComponents[i] "/"
sub(/\/+$/, "", resolvedPath)
return resolvedPath

View File

@ -16,9 +16,18 @@ END {
print "=> resolvePath('./path/to/irrelevant_directory/../file.txt')"
assert("path/to/file.txt", resolvePath("./path/to/irrelevant_directory/../file.txt"))
print "=> resolvePath('path/to/file.txt/')"
assert("path/to/file.txt", resolvePath("path/to/file.txt/"))
print "=> resolvePath('path/to/file.txt')"
assert("path/to/file.txt", resolvePath("path/to/file.txt"))
print "=> getRelativePath('parent/directory/', 'parent/path/to/file.txt')"
assert("../path/to/file.txt", getRelativePath("parent/directory", "parent/path/to/file.txt"))
print "=> getRelativePath('parent/directory/', 'parent/directory/path/to/file.txt')"
assert("path/to/file.txt", getRelativePath("parent/directory", "parent/directory/path/to/file.txt"))
print "=> getRelativePath('', 'path/to/file.txt')"
assert("path/to/file.txt", getRelativePath("", "path/to/file.txt"))
}

View File

@ -3,8 +3,14 @@
=> getDirname('a_single_directory')
. == .
=> resolvePath('./path/to/irrelevant_directory/../file.txt')
path/to/file.txt != path/to/../
path/to/file.txt == path/to/file.txt
=> resolvePath('path/to/file.txt/')
path/to/file.txt == path/to/file.txt
=> resolvePath('path/to/file.txt')
path/to/file.txt == path/to/file.txt
=> getRelativePath('parent/directory/', 'parent/path/to/file.txt')
../path/to/file.txt != to/path/parent
../path/to/file.txt == ../path/to/file.txt
=> getRelativePath('parent/directory/', 'parent/directory/path/to/file.txt')
path/to/file.txt != path/directory/parent/to
path/to/file.txt == path/to/file.txt
=> getRelativePath('', 'path/to/file.txt')
path/to/file.txt == path/to/file.txt

View File

@ -6,16 +6,16 @@
<meta name='referrer' content='no-referrer' />
<meta name='viewpoint' content='width=device-width,initial-scale=1.0' />
<link rel='stylesheet' href='testing/input/style.css'/>
<link rel='stylesheet' href='style.css'/>
</head>
<body>
<header>
<nav id='navbar'>
<a href='testing/input/index.html'>home</a> |
<a href='testing/input/useful/index.html'>useful</a> |
<a href='testing/input/notes/index.html'>notes</a> |
<a href='testing/input/sitemap.html'>sitemap</a> |
<a href='testing/input/feed.atom'>feed</a> |
<a href='index.html'>home</a> |
<a href='useful/index.html'>useful</a> |
<a href='notes/index.html'>notes</a> |
<a href='sitemap.html'>sitemap</a> |
<a href='feed.atom'>feed</a> |
<a href='http://git.vern.cc/techn0path/'>git</a>
</nav><hr>