resolved bug - fixed function getRelativePath in lib/path.awk
This commit is contained in:
parent
cc03fe67cf
commit
2d5523fc24
66
lib/path.awk
66
lib/path.awk
|
@ -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
|
||||
|
|
|
@ -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"))
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
Loading…
Reference in New Issue