summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmil Renner Berthing <esmil@mailme.dk>2013-01-29 21:58:53 +0100
committerEmil Renner Berthing <esmil@mailme.dk>2013-01-29 23:17:32 +0100
commitd12ebbbd9ee55305e0017e1ed3ef13523a9a8334 (patch)
treef2420ec2fb924f45680c2d15a397269c4fe8cb87
parent06ce139fd4d2cb18090442ce4c7c3992bf26f9a8 (diff)
downloadlem-d12ebbbd9ee55305e0017e1ed3ef13523a9a8334.tar.gz
lem-d12ebbbd9ee55305e0017e1ed3ef13523a9a8334.tar.xz
lem-d12ebbbd9ee55305e0017e1ed3ef13523a9a8334.zip
io: implement io.lines() and lines() methods
-rw-r--r--lem/io.lua25
-rwxr-xr-xtest/lines.lua44
2 files changed, 66 insertions, 3 deletions
diff --git a/lem/io.lua b/lem/io.lua
index 26f4274..f123d1e 100644
--- a/lem/io.lua
+++ b/lem/io.lua
@@ -45,6 +45,19 @@ do
function io.read(...)
return stdin:read(...)
end
+
+ local open, error = io.open, error
+ function io.lines(filename, fmt)
+ if not filename then return stdin:lines(fmt) end
+ if not fmt then fmt = '*l' end
+ local file, err = open(filename)
+ if not file then error(err, 2) end
+ return function(s)
+ local line = s:read(fmt)
+ if not line then s:close() end
+ return line
+ end, file
+ end
end
do
@@ -69,13 +82,19 @@ do
end
end
+function io.File:lines(fmt)
+ if not fmt then fmt = '*l' end
+ return function(s)
+ return s:read(fmt)
+ end, self
+end
+io.Stream.lines = io.File.lines
+
if not io.Stream.cork then
function io.Stream:cork()
return nil, 'Operation not supported'
end
- function io.Stream:uncork()
- return nil, 'Operation not supported'
- end
+ io.Stream.uncork = io.Stream.cork
end
do
diff --git a/test/lines.lua b/test/lines.lua
new file mode 100755
index 0000000..2558184
--- /dev/null
+++ b/test/lines.lua
@@ -0,0 +1,44 @@
+#!bin/lem
+--
+-- This file is part of LEM, a Lua Event Machine.
+-- Copyright 2013 Emil Renner Berthing
+--
+-- LEM 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 3 of
+-- the License, or (at your option) any later version.
+--
+-- LEM 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 LEM. If not, see <http://www.gnu.org/licenses/>.
+--
+
+package.path = '?.lua'
+package.cpath = '?.so'
+
+local utils = require 'lem.utils'
+local io = require 'lem.io'
+
+local format, write = string.format, io.write
+
+local n = 0
+---[[
+local file = assert(io.open('PKGBUILD'))
+
+for line in file:lines() do
+ n = n+1
+ write(format("%4d: %s\n", n, line))
+end
+--[=[
+--]]
+for line in io.lines('PKGBUILD') do
+ n = n+1
+ write(format("%4d: %s\n", n, line))
+end
+--]=]
+
+-- vim: syntax=lua ts=3 sw=3 et: