From cdcf953259aee5e7e1a06855ddbedbaabf585bc9 Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 14 Jan 2016 09:19:14 +0800 Subject: rename script directory to core --- xmake/core/base/string.lua | 115 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 xmake/core/base/string.lua (limited to 'xmake/core/base/string.lua') diff --git a/xmake/core/base/string.lua b/xmake/core/base/string.lua new file mode 100644 index 000000000..b4be08cfa --- /dev/null +++ b/xmake/core/base/string.lua @@ -0,0 +1,115 @@ +--!The Automatic Cross-platform Build Tool +-- +-- XMake is free software; you can redistribute it and/or modify +-- it under the terms of the GNU Lesser General Public License as published by +-- the Free Software Foundation; either version 2.1 of the License, or +-- (at your option) any later version. +-- +-- XMake is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU Lesser General Public License for more details. +-- +-- You should have received a copy of the GNU Lesser General Public License +-- along with XMake; +-- If not, see http://www.gnu.org/licenses/ +-- +-- Copyright (C) 2009 - 2015, ruki All rights reserved. +-- +-- @author ruki +-- @file string.lua +-- + +-- define module: string +local string = string or {} + +-- find the last substring with the given pattern +function string.find_last(self, pattern, plain) + + -- find the last substring + local curr = 0 + repeat + local next = self:find(pattern, curr + 1, plain) + if next then + curr = next + end + until (not next) + + -- found? + if curr > 0 then + return curr + end +end + +-- split string with the given pattern +function string.split(self, pattern) + + -- split it + local list = {} + self:gsub("[^" .. pattern .."]+", function(v) table.insert(list, v) end ) + return list +end + +-- trim the spaces +function string.trim(self) + return (self:gsub("^%s*(.-)%s*$", "%1")) +end + +-- trim the left spaces +function string.ltrim(self) + return (self:gsub("^%s*", "")) +end + +-- trim the right spaces +function string.rtrim(self) + local n = #self + while n > 0 and s:find("^%s", n) do n = n - 1 end + return self:sub(1, n) +end + +-- append a substring with a given separator +function string.append(self, substr, separator) + + -- check + assert(self) + + -- not substr? return self + if not substr then + return self + end + + -- append it + local s = self + if #s == 0 then + s = substr + else + s = string.format("%s%s%s", s, separator or "", substr) + end + + -- ok + return s +end + +-- encode: ' ', '=', '\"', '<' +function string.encode(self) + + -- null? + if self == nil then return end + + -- done + return (self:gsub("[%s=\"<]", function (w) return string.format("%%%x", w:byte()) end)) +end + +-- decode: ' ', '=', '\"' +function string.decode(self) + + -- null? + if self == nil then return end + + -- done + return (self:gsub("%%(%x%x)", function (w) return string.char(tonumber(w, 16)) end)) +end + + +-- return module: string +return string -- cgit v1.3.1