| // Copyright 2018 The CUE Authors |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| // Copyright 2018 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| //go:generate qgo -exclude=Split,Join extract path |
| |
| package path |
| |
| import "path" |
| |
| // Match reports whether name matches the shell pattern. |
| // The pattern syntax is: |
| // |
| // pattern: |
| // { term } |
| // term: |
| // '*' matches any sequence of non-/ characters |
| // '?' matches any single non-/ character |
| // '[' [ '^' ] { character-range } ']' |
| // character class (must be non-empty) |
| // c matches character c (c != '*', '?', '\\', '[') |
| // '\\' c matches character c |
| // |
| // character-range: |
| // c matches character c (c != '\\', '-', ']') |
| // '\\' c matches character c |
| // lo '-' hi matches character c for lo <= c <= hi |
| // |
| // Match requires pattern to match all of name, not just a substring. |
| // The only possible returned error is ErrBadPattern, when pattern |
| // is malformed. |
| // |
| func Match(pattern, name string) (matched bool, err error) { |
| return path.Match(pattern, name) |
| } |
| |
| // Clean returns the shortest path name equivalent to path |
| // by purely lexical processing. It applies the following rules |
| // iteratively until no further processing can be done: |
| // |
| // 1. Replace multiple slashes with a single slash. |
| // 2. Eliminate each . path name element (the current directory). |
| // 3. Eliminate each inner .. path name element (the parent directory) |
| // along with the non-.. element that precedes it. |
| // 4. Eliminate .. elements that begin a rooted path: |
| // that is, replace "/.." by "/" at the beginning of a path. |
| // |
| // The returned path ends in a slash only if it is the root "/". |
| // |
| // If the result of this process is an empty string, Clean |
| // returns the string ".". |
| // |
| // See also Rob Pike, ``Lexical File Names in Plan 9 or |
| // Getting Dot-Dot Right,'' |
| // https://9p.io/sys/doc/lexnames.html |
| func Clean(path string) string { return pathClean(path) } |
| |
| var pathClean = path.Clean |
| |
| // Ext returns the file name extension used by path. |
| // The extension is the suffix beginning at the final dot |
| // in the final slash-separated element of path; |
| // it is empty if there is no dot. |
| func Ext(path string) string { return pathExt(path) } |
| |
| var pathExt = path.Ext |
| |
| // Base returns the last element of path. |
| // Trailing slashes are removed before extracting the last element. |
| // If the path is empty, Base returns ".". |
| // If the path consists entirely of slashes, Base returns "/". |
| func Base(path string) string { return pathBase(path) } |
| |
| var pathBase = path.Base |
| |
| // IsAbs reports whether the path is absolute. |
| func IsAbs(path string) bool { return pathIsAbs(path) } |
| |
| var pathIsAbs = path.IsAbs |
| |
| // Dir returns all but the last element of path, typically the path's directory. |
| // After dropping the final element using Split, the path is Cleaned and trailing |
| // slashes are removed. |
| // If the path is empty, Dir returns ".". |
| // If the path consists entirely of slashes followed by non-slash bytes, Dir |
| // returns a single slash. In any other case, the returned path does not end in a |
| // slash. |
| func Dir(path string) string { return pathDir(path) } |
| |
| var pathDir = path.Dir |