nl_tokens: Resolves . and .. elements in a path with directory names
pl_tokens: function normalizeStringPosix ( path , allowAboveRoot ) { var res = '' ; var lastSlash = - 1 ; var dots = 0 ; var code ; for ( var i = 0 ; i <= path . length ; ++ i ) { if ( i < path . length ) code = path . charCodeAt ( i ) ; else if ( code === 47 /*/*/ ) break ; else code = 47 /*/*/ ; if ( code === 47 /*/*/ ) { if ( lastSlash === i - 1 || dots === 1 ) { // NOOP } else if ( lastSlash !== i - 1 && dots === 2 ) { if ( res . length < 2 || res . charCodeAt ( res . length - 1 ) !== 46 /*.*/ || res . charCodeAt ( res . length - 2 ) !== 46 /*.*/ ) { if ( res . length > 2 ) { var start = res . length - 1 ; var j = start ; for ( ; j >= 0 ; -- j ) { if ( res . charCodeAt ( j ) === 47 /*/*/ ) break ; } if ( j !== start ) { if ( j === - 1 ) res = '' ; else res = res . slice ( 0 , j ) ; lastSlash = i ; dots = 0 ; continue ; } } else if ( res . length === 2 || <mask> . length === 1 ) { res = '' ; lastSlash = i ; dots = 0 ; continue ; } } if ( allowAboveRoot ) { if ( res . length > 0 ) res += '/..' ; else res = '..' ; } } else { if ( res . length > 0 ) res += '/' + path . slice ( lastSlash + 1 , i ) ; else res = path . slice ( lastSlash + 1 , i ) ; } lastSlash = i ; dots = 0 ; } else if ( code === 46 /*.*/ && dots !== - 1 ) { ++ dots ; } else { dots = - 1 ; } } return res ; }