libs/core: introduce luci.util.imatch()
authorJo-Philipp Wich <jow@openwrt.org>
Sat, 30 Oct 2010 17:54:25 +0000 (17:54 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sat, 30 Oct 2010 17:54:25 +0000 (17:54 +0000)
libs/core/luasrc/util.lua

index f45a1f966e52ed62a23d301468753d8721244a19..a248026f10357d54f04ab4ff0969787ba90dc2df 100644 (file)
@@ -200,7 +200,7 @@ local function _pcdata_repl(c)
           ( i >= 0x0E and i <= 0x1F ) or ( i == 0x7F )
        then
                return ""
-               
+
        elseif ( i == 0x26 ) or ( i == 0x27 ) or ( i == 0x22 ) or
               ( i == 0x3C ) or ( i == 0x3E )
        then
@@ -282,6 +282,22 @@ function cmatch(str, pat)
        return count
 end
 
+--- Return a matching iterator for the given value. The iterator will return
+-- one token per invocation, the tokens are separated by whitespace. If the
+-- input value is a table, it is transformed into a string first. A nil value
+-- will result in a valid interator which aborts with the first invocation.
+-- @param val          The value to scan (table, string or nil)
+-- @return                     Iterator which returns one token per call
+function imatch(v)
+       if v == nil then
+               v = ""
+       elseif type(v) == "table" then
+               v = table.concat(v, " ")
+       end
+
+       return v:gmatch("%S+")
+end
+
 --- Parse certain units from the given string and return the canonical integer
 -- value or 0 if the unit is unknown. Upper- or lower case is irrelevant.
 -- Recognized units are: