From d12ebbbd9ee55305e0017e1ed3ef13523a9a8334 Mon Sep 17 00:00:00 2001 From: Emil Renner Berthing Date: Tue, 29 Jan 2013 21:58:53 +0100 Subject: io: implement io.lines() and lines() methods --- lem/io.lua | 25 ++++++++++++++++++++++--- test/lines.lua | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 3 deletions(-) create mode 100755 test/lines.lua 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 . +-- + +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: -- cgit v1.2.1