Mô đun:Path
Giao diện
| Mô đun này được xếp loại beta. Nó được đánh giá là sẵn sàng để sử dụng rộng rãi, nhưng vì nó vẫn còn khá là mới, nên vẫn cần phải được sử dụng một cách thận trọng để đảm bảo rằng kết quả đạt được như mong đợi. |
This module offers utilities to convert paths into different formats.
Functions
Ghi chú: In all functions the |1= argument can indifferently be a relative (i.e. beginning with ./ or ../ or /) or an absolute path.
abs
The abs function parses the |1= argument and returns it as an absolute path.
Examples
{{#invoke:path|abs|./example}}- ↳ Mô đun:Path/example
{{#invoke:path|abs|.}}- ↳ Mô đun:Path
{{#invoke:path|abs|Wikipedia:Lua}}- ↳ Wikipedia:Lua
{{#invoke:path|abs}}- ↳ Mô đun:Path
rel
The rel function parses the |1= argument and returns it as a relative path.
Examples
{{#invoke:path|rel|Mô đun:Path/example}}- ↳ ./example
{{#invoke:path|rel|Mô đun:Path}}- ↳ .
{{#invoke:path|rel|Wikipedia:Lua}}- ↳ Wikipedia:Lua
{{#invoke:path|rel}}- ↳ .
[[Mô đun:Path/example|{{#invoke:path|rel|Mô đun:Path/example}}]]- ↳ ./example
- See also {{Relative link}}
- ↳ ./example
sub
The sub function parses the |1= argument and returns it as a partial path with only the subpages shown.
Examples
{{#invoke:path|sub|Mô đun:Path/example}}- ↳ example
{{#invoke:path|sub|Mô đun:Path}}- ↳
{{#invoke:path|sub|Wikipedia:Lua}}- ↳ Wikipedia:Lua
{{#invoke:path|sub}}- ↳
[[Mô đun:Path/example|{{#invoke:path|sub|Mô đun:Path/example}}]]- ↳ example
- See also {{Relative link implicit}}
- ↳ example
See also
- {{Relative link}}
- {{Relative link implicit}}
- Thể loại:Mô đun hỗ trợ Wikipedia
function split_path (path) local parts = {} local len = 0 for token in path:gmatch("[^/]+") do len = len + 1 parts[len] = token end return parts, lenendfunction get_abs_path (current, page) local tbl_i, len_i = split_path(page) local tbl_o local len_o if tbl_i[1] == '.' or tbl_i[1] == '..' then tbl_o, len_o = split_path(current) else tbl_i[1] = tbl_i[1]:gsub('^([^:]?)([^:]*)(:?)(.?)', function (s1, s2, s3, s4) if s3 == '' then return s1:upper() .. s2 end return s1:upper() .. s2 .. s3 .. s4:upper() end, 1 ) tbl_o = {} len_o = 0 end for key, val in ipairs(tbl_i) do if val == '..' then if len_o < 1 then error('Mô đun:Path: sai đường dẫn', 0) end tbl_o[len_o] = nil len_o = len_o - 1 elseif val ~= '.' then len_o = len_o + 1 tbl_o[len_o] = val end end if len_o < 1 then tbl_o[1] = '' len_o = 1 end return tbl_o, len_oendfunction get_rel_path (current, page, add_prefixes) local tbl_i, len_i = get_abs_path(current, page) local tbl_c, len_c = split_path(current) local tbl_o = {} local len_o = 0 local minlen local new_at = 0 if len_c < len_i then minlen = len_c else minlen = len_i end for idx = 1, minlen do if tbl_c[idx] ~= tbl_i[idx] then new_at = idx break end end if new_at == 1 then return table.concat(tbl_i, '/') end if add_prefixes then if new_at == 0 then tbl_o[1] = '.' new_at = minlen + 1 end for idx = new_at, len_c do len_o = len_o + 1 tbl_o[len_o] = '..' end if len_o < 1 then len_o = 1 end elseif new_at == 0 then new_at = minlen + 1 end for idx = new_at, len_i do len_o = len_o + 1 tbl_o[len_o] = tbl_i[idx] end return table.concat(tbl_o, '/')endlocal iface = {}iface.abs = function (frame) local page = frame.args[1] if page ~= nil then page = page:match'^%s*(.*%S)' end if page == nil then return mw.title.getCurrentTitle().prefixedText end local retval, _ = table.concat(get_abs_path( mw.title.getCurrentTitle().prefixedText, page:gsub('^%s*/%s*', './', 1) ), '/') return retvalendiface.rel = function (frame) local page = frame.args[1] if page ~= nil then page = page:match'^%s*(.*%S)' end if page == nil then return '.' end return get_rel_path(mw.title.getCurrentTitle().prefixedText, page:gsub('^%s*/%s*', './', 1), true)endiface.sub = function (frame) local page = frame.args[1] if page ~= nil then page = page:match'^%s*(.*%S)' end if page == nil then return '' end return get_rel_path(mw.title.getCurrentTitle().prefixedText, page:gsub('^%s*/%s*', './', 1), false)endreturn ifaceThể loại:
- Mô đun trong giai đoạn beta
- Wikipedia utility modules