| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" |
| "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| |
| <head> |
| <meta name="description" content="LuaSocket: LTN12 support"> |
| <meta name="keywords" content="Lua, LuaSocket, Filters, Source, Sink, |
| Pump, Support, Library"> |
| <title>LuaSocket: LTN12 module</title> |
| <link rel="stylesheet" href="reference.css" type="text/css"> |
| </head> |
| |
| <body> |
| |
| <!-- header +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <div class=header> |
| <hr> |
| <center> |
| <table summary="LuaSocket logo"> |
| <tr><td align=center><a href="http://www.lua.org"> |
| <img width=128 height=128 border=0 alt="LuaSocket" src="luasocket.png"> |
| </a></td></tr> |
| <tr><td align=center valign=top>Network support for the Lua language |
| </td></tr> |
| </table> |
| <p class=bar> |
| <a href="home.html">home</a> · |
| <a href="home.html#download">download</a> · |
| <a href="installation.html">installation</a> · |
| <a href="introduction.html">introduction</a> · |
| <a href="reference.html">reference</a> |
| </p> |
| </center> |
| <hr> |
| </div> |
| |
| <!-- ltn12 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <h2 id=ltn12>LTN12</h2> |
| |
| <p> The <tt>ltn12</tt> namespace implements the ideas described in |
| <a href="http://lua-users.org/wiki/FiltersSourcesAndSinks"> |
| LTN012, Filters sources and sinks</a>. This manual simply describes the |
| functions. Please refer to the LTN for a deeper explanation of the |
| functionality provided by this module. |
| </p> |
| |
| <p> |
| To obtain the <tt>ltn12</tt> namespace, run: |
| </p> |
| |
| <pre class=example> |
| -- loads the LTN21 module |
| local ltn12 = require("ltn12") |
| </pre> |
| |
| <!-- filters ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <h3 id="filter">Filters</h3> |
| |
| <!-- chain ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="filter.chain"> |
| ltn12.filter.<b>chain(</b>filter<sub>1</sub>, filter<sub>2</sub> |
| [, ... filter<sub>N</sub>]<b>)</b> |
| </p> |
| |
| <p class=description> |
| Returns a filter that passes all data it receives through each of a |
| series of given filters. |
| </p> |
| |
| <p class=parameters> |
| <tt>Filter<sub>1</sub></tt> to <tt>filter<sub>N</sub></tt> are simple |
| filters. |
| </p> |
| |
| <p class=return> |
| The function returns the chained filter. |
| </p> |
| |
| <p class=note> |
| The nesting of filters can be arbitrary. For instance, the useless filter |
| below doesn't do anything but return the data that was passed to it, |
| unaltered. |
| </p> |
| |
| <pre class=example> |
| -- load required modules |
| local ltn12 = require("ltn12") |
| local mime = require("mime") |
| |
| -- create a silly identity filter |
| id = ltn12.filter.chain( |
| mime.encode("quoted-printable"), |
| mime.encode("base64"), |
| mime.decode("base64"), |
| mime.decode("quoted-printable") |
| ) |
| </pre> |
| |
| <!-- cycle ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="filter.cycle"> |
| ltn12.filter.<b>cycle(</b>low [, ctx, extra]<b>)</b> |
| </p> |
| |
| <p class=description> |
| Returns a high-level filter that cycles though a low-level filter by |
| passing it each chunk and updating a context between calls. |
| </p> |
| |
| <p class=parameters> |
| <tt>Low</tt> is the low-level filter to be cycled, |
| <tt>ctx</tt> is the initial context and <tt>extra</tt> is any extra |
| argument the low-level filter might take. |
| </p> |
| |
| <p class=return> |
| The function returns the high-level filter. |
| </p> |
| |
| <pre class=example> |
| -- load the ltn12 module |
| local ltn12 = require("ltn12") |
| |
| -- the base64 mime filter factory |
| encodet['base64'] = function() |
| return ltn12.filter.cycle(b64, "") |
| end |
| </pre> |
| |
| <!-- pumps ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <h3 id="pump">Pumps</h3> |
| |
| <!-- all ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="pump.all"> |
| ltn12.pump.<b>all(</b>source, sink<b>)</b> |
| </p> |
| |
| <p class=description> |
| Pumps <em>all</em> data from a <tt>source</tt> to a <tt>sink</tt>. |
| </p> |
| |
| <p class=return> |
| If successful, the function returns a value that evaluates to |
| <b><tt>true</tt></b>. In case |
| of error, the function returns a <b><tt>false</tt></b> value, followed by an error message. |
| </p> |
| |
| <!-- step +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="pump.step"> |
| ltn12.pump.<b>step(</b>source, sink<b>)</b> |
| </p> |
| |
| <p class=description> |
| Pumps <em>one</em> chunk of data from a <tt>source</tt> to a <tt>sink</tt>. |
| </p> |
| |
| <p class=return> |
| If successful, the function returns a value that evaluates to |
| <b><tt>true</tt></b>. In case |
| of error, the function returns a <b><tt>false</tt></b> value, followed by an error message. |
| </p> |
| |
| <!-- sinks ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <h3 id="sink">Sinks</h3> |
| |
| <!-- chain ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="sink.chain"> |
| ltn12.sink.<b>chain(</b>filter, sink<b>)</b> |
| </p> |
| |
| <p class=description> |
| Creates and returns a new sink that passes data through a <tt>filter</tt> before sending it to a given <tt>sink</tt>. |
| </p> |
| |
| <!-- error ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="sink.error"> |
| ltn12.sink.<b>error(</b>message<b>)</b> |
| </p> |
| |
| <p class=description> |
| Creates and returns a sink that aborts transmission with the error |
| <tt>message</tt>. |
| </p> |
| |
| <!-- file +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="sink.file"> |
| ltn12.sink.<b>file(</b>handle, message<b>)</b> |
| </p> |
| |
| <p class=description> |
| Creates a sink that sends data to a file. |
| </p> |
| |
| <p class=parameters> |
| <tt>Handle</tt> is a file handle. If <tt>handle</tt> is <tt><b>nil</b></tt>, |
| <tt>message</tt> should give the reason for failure. |
| </p> |
| |
| <p class=return> |
| The function returns a sink that sends all data to the given <tt>handle</tt> |
| and closes the file when done, or a sink that aborts the transmission with |
| the error <tt>message</tt> |
| </p> |
| |
| <p class=note> |
| In the following example, notice how the prototype is designed to |
| fit nicely with the <tt>io.open</tt> function. |
| </p> |
| |
| <pre class=example> |
| -- load the ltn12 module |
| local ltn12 = require("ltn12") |
| |
| -- copy a file |
| ltn12.pump.all( |
| ltn12.source.file(io.open("original.png")), |
| ltn12.sink.file(io.open("copy.png")) |
| ) |
| </pre> |
| |
| <!-- null +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="sink.null"> |
| ltn12.sink.<b>null()</b> |
| </p> |
| |
| <p class=description> |
| Returns a sink that ignores all data it receives. |
| </p> |
| |
| <!-- simplify +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="sink.simplify"> |
| ltn12.sink.<b>simplify(</b>sink<b>)</b> |
| </p> |
| |
| <p class=description> |
| Creates and returns a simple sink given a fancy <tt>sink</tt>. |
| </p> |
| |
| <!-- table ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="sink.table"> |
| ltn12.sink.<b>table(</b>[table]<b>)</b> |
| </p> |
| |
| <p class=description> |
| Creates a sink that stores all chunks in a table. The chunks can later be |
| efficiently concatenated into a single string. |
| </p> |
| |
| <p class=parameters> |
| <tt>Table</tt> is used to hold the chunks. If |
| <tt><b>nil</b></tt>, the function creates its own table. |
| </p> |
| |
| <p class=return> |
| The function returns the sink and the table used to store the chunks. |
| </p> |
| |
| <pre class=example> |
| -- load needed modules |
| local http = require("socket.http") |
| local ltn12 = require("ltn12") |
| |
| -- a simplified http.get function |
| function http.get(u) |
| local t = {} |
| local respt = request{ |
| url = u, |
| sink = ltn12.sink.table(t) |
| } |
| return table.concat(t), respt.headers, respt.code |
| end |
| </pre> |
| |
| <!-- sinks ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <h3 id="source">Sources</h3> |
| |
| <!-- cat ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="source.cat"> |
| ltn12.source.<b>cat(</b>source<sub>1</sub> [, source<sub>2</sub>, ..., |
| source<sub>N</sub>]<b>)</b> |
| </p> |
| |
| <p class=description> |
| Creates a new source that produces the concatenation of the data produced |
| by a number of sources. |
| </p> |
| |
| <p class=parameters> |
| <tt>Source<sub>1</sub></tt> to <tt>source<sub>N</sub></tt> are the original |
| sources. |
| </p> |
| |
| <p class=return> |
| The function returns the new source. |
| </p> |
| |
| <!-- chain ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="source.chain"> |
| ltn12.source.<b>chain(</b>source, filter<b>)</b> |
| </p> |
| |
| <p class=description> |
| Creates a new <tt>source</tt> that passes data through a <tt>filter</tt> |
| before returning it. |
| </p> |
| |
| <p class=return> |
| The function returns the new source. |
| </p> |
| |
| <!-- empty ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="source.empty"> |
| ltn12.source.<b>empty()</b> |
| </p> |
| |
| <p class=description> |
| Creates and returns an empty source. |
| </p> |
| |
| <!-- error ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="source.error"> |
| ltn12.source.<b>error(</b>message<b>)</b> |
| </p> |
| |
| <p class=description> |
| Creates and returns a source that aborts transmission with the error |
| <tt>message</tt>. |
| </p> |
| |
| <!-- file +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="source.file"> |
| ltn12.source.<b>file(</b>handle, message<b>)</b> |
| </p> |
| |
| <p class=description> |
| Creates a source that produces the contents of a file. |
| </p> |
| |
| <p class=parameters> |
| <tt>Handle</tt> is a file handle. If <tt>handle</tt> is <tt><b>nil</b></tt>, |
| <tt>message</tt> should give the reason for failure. |
| </p> |
| |
| <p class=return> |
| The function returns a source that reads chunks of data from |
| given <tt>handle</tt> and returns it to the user, |
| closing the file when done, or a source that aborts the transmission with |
| the error <tt>message</tt> |
| </p> |
| |
| <p class=note> |
| In the following example, notice how the prototype is designed to |
| fit nicely with the <tt>io.open</tt> function. |
| </p> |
| |
| <pre class=example> |
| -- load the ltn12 module |
| local ltn12 = require("ltn12") |
| |
| -- copy a file |
| ltn12.pump.all( |
| ltn12.source.file(io.open("original.png")), |
| ltn12.sink.file(io.open("copy.png")) |
| ) |
| </pre> |
| |
| <!-- simplify +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="source.simplify"> |
| ltn12.source.<b>simplify(</b>source<b>)</b> |
| </p> |
| |
| <p class=description> |
| Creates and returns a simple source given a fancy <tt>source</tt>. |
| </p> |
| |
| <!-- string +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <p class=name id="source.string"> |
| ltn12.source.<b>string(</b>string<b>)</b> |
| </p> |
| |
| <p class=description> |
| Creates and returns a source that produces the contents of a |
| <tt>string</tt>, chunk by chunk. |
| </p> |
| |
| <!-- footer +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> |
| |
| <div class=footer> |
| <hr> |
| <center> |
| <p class=bar> |
| <a href="home.html">home</a> · |
| <a href="home.html#down">download</a> · |
| <a href="installation.html">installation</a> · |
| <a href="introduction.html">introduction</a> · |
| <a href="reference.html">reference</a> |
| </p> |
| <p> |
| <small> |
| Last modified by Diego Nehab on <br> |
| Thu Apr 20 00:25:41 EDT 2006 |
| </small> |
| </p> |
| </center> |
| </div> |
| |
| </body> |
| </html> |