% \iffalse meta-comment % % Copyright (C) 2009 by PRAGMA ADE / ConTeXt Development Team % % See ConTeXt's mreadme.pdf for the license. % % This work consists of the main source file lualibs.dtx % and the derived file lualibs.lua. % % Unpacking: % tex lualibs.dtx % % Documentation: % pdflatex lualibs.dtx % % The class ltxdoc loads the configuration file ltxdoc.cfg % if available. Here you can specify further options, e.g. % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % % % %<*ignore> \begingroup \def\x{LaTeX2e}% \expandafter\endgroup \ifcase 0\ifx\install y1\fi\expandafter \ifx\csname processbatchFile\endcsname\relax\else1\fi \ifx\fmtname\x\else 1\fi\relax \else\csname fi\endcsname % %<*install> \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} \Msg{* Package: lualibs 2010/06/22 v0.95 Lua additional functions.} \Msg{************************************************************************} \keepsilent \askforoverwritefalse \let\MetaPrefix\relax \preamble This is a generated file. Copyright (C) 2009 by PRAGMA ADE / ConTeXt Development Team See ConTeXt's mreadme.pdf for the license. This work consists of the main source file lualibs.dtx and the derived file lualibs.lua. \endpreamble % The following hacks are to generate a lua file with lua comments starting by % -- instead of %% \def\MetaPrefix{-- } \def\luapostamble{% \MetaPrefix^^J% \MetaPrefix\space End of File `\outFileName'.% } \def\currentpostamble{\luapostamble}% \generate{% \usedir{tex/luatex/lualibs}% \file{lualibs.lua}{\from{lualibs.dtx}{lua}}% } \obeyspaces \Msg{************************************************************************} \Msg{*} \Msg{* To finish the installation you have to move the following} \Msg{* files into a directory searched by TeX:} \Msg{*} \Msg{* lualibs.lua} \Msg{*} \Msg{* Happy TeXing!} \Msg{*} \Msg{************************************************************************} \endbatchfile % %<*ignore> \fi % %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{lualibs.drv} [2010/06/22 v0.95 Lua additional functions.] \documentclass{ltxdoc} \EnableCrossrefs \CodelineIndex \begin{document} \DocInput{lualibs.dtx}% \end{document} % % \fi % \CheckSum{0} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % \GetFileInfo{lualibs.drv} % % \title{The \textsf{lualibs} package} % \date{2010/06/22 v0.95} % \author{Elie Roux \\ \texttt{elie.roux@telecom-bretagne.eu}} % % \maketitle % % \begin{abstract} % Additional lua functions taken from the libs of Con\TeX t. For an % introduction on this package (among others), please refer to the document % \texttt{luatex-reference.pdf}. % \end{abstract} % % \section{Overview} % % Lua is a very minimal language, and it does not have a minimal standard % library. The aim of this package is to provide an extended standard library, % to be used by various Lua\TeX\ packages. The code is specific to Lua\TeX\ % and depends on Lua\TeX\ functions and modules not available in regular lua. % % \noindent The code is derived from Con\TeX t libraries. % % \section{Usage} % % You can either load the \texttt{lualibs} module, which will load all other % modules, provided by this package: |require("lualibs")|, or explicitly % load the modules you need, e.g.: |require("lualibs-table")|. % % \noindent If your code is running under \textsf{texlua}, you will need to % initialize \textsf{kpse} library so that |require()| can find files under % TEXMF tree: |kpse.set_program_name("luatex")|. % % \pagebreak % \section{\texttt{lualibs.lua}} % % \iffalse %<*lua> % \fi % % \begin{macrocode} module('lualibs', package.seeall) local lualibs_module = { name = "lualibs", version = 0.95, date = "2010/06/22", description = "Lua additional functions.", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL & Elie Roux", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "See ConTeXt's mreadme.pdf for the license", } if luatexbase and luatexbase.provides_module then luatexbase.provides_module(lualibs_module) end % \end{macrocode} % Load the modules. % \begin{macrocode} require("lualibs-string") require("lualibs-lpeg") require("lualibs-boolean") require("lualibs-number") require("lualibs-math") require("lualibs-table") require("lualibs-aux") require("lualibs-io") require("lualibs-os") require("lualibs-file") require("lualibs-md5") require("lualibs-dir") require("lualibs-unicode") require("lualibs-utils") require("lualibs-dimen") require("lualibs-url") require("lualibs-set") require("lualibs-dimen") % \end{macrocode} % Aliases for backward compatibility. % \begin{macrocode} fpath = file fpath.split = file.split_path lfs.is_readable = file.is_readable lfs.is_writable = file.is_writable % \end{macrocode} % Functions no longer provided by Con\TeX t modules. % % \begin{macro}{string:stripspaces} % % A function to strip the spaces at the beginning and at the end of a % string. % % \begin{macrocode} function string:stripspaces() return (self:gsub("^%s*(.-)%s*$", "%1")) end % \end{macrocode} % % \end{macro} % \begin{macro}{lpeg.space and lpeg.newline} % % Two small helpers for \texttt{lpeg}, that will certainly be widely used: % spaces and newlines. % % \begin{macrocode} lpeg.space = lpeg.S(" \t\f\v") lpeg.newline = lpeg.P("\r\n") + lpeg.P("\r") +lpeg.P("\n") % \end{macrocode} % % \end{macro} % \begin{macro}{table.contains value} % % A function returning true if the value \texttt{val} is in the table % \texttt{t}. % % \begin{macrocode} function table.contains_value(t, val) if t then for k, v in pairs(t) do if v==val then return true end end end return false end % \end{macrocode} % % \end{macro} % \begin{macro}{table.contains key} % % A function returning true if the key \texttt{key} is in the table % \texttt{t} % % \begin{macrocode} function table.contains_key(t, key) if t then for k, v in pairs(t) do if k==key then return true end end end return false end % \end{macrocode} % % \end{macro} % \begin{macro}{table.value position} % % A function returning the position of a value in a table. This will be % important to be able to remove a value. % % \begin{macrocode} function table.value_position(t, val) if t then local i=1 for k, v in pairs(t) do if v==val then return i end i=i+1 end end return 0 end % \end{macrocode} % % \end{macro} % \begin{macro}{table.key position} % % A function returning the position of a key in a table. % % \begin{macrocode} function table.key_position(t, key) if t then local i=1 for k,v in pairs(t) do if k==key then return i end i = i+1 end end return -1 end % \end{macrocode} % % \end{macro} % \begin{macro}{table.remove key} % % Removing a key from a table. % % \begin{macrocode} function table.remove_key(t, k) local p = table.key_position(t,k) if p ~= -1 then table.remove(t, table.key_position(t,k)) end end % \end{macrocode} % % \end{macro} % \begin{macro}{fpath.normalize sep} % % A function to change directory separators to canonical ones (\texttt{/}). % % \begin{macrocode} function fpath.normalize_sep(str) return str:gsub("\\", "/") end % \end{macrocode} % % \end{macro} % \begin{macro}{fpath.localize sep} % % A function changing directory separators into local ones (\texttt{/} on % Unix, |\| on Windows). % % \begin{macrocode} function fpath.localize_sep(str) if os.type == 'windows' or os.type == 'msdos' then return str:gsub("/", "\\") else return str:gsub("\\", "/") end end % \end{macrocode} % % \end{macro} % \begin{macro}{table.starts at} % % No idea what it was used for, but Hans depricated it with the comment % \textit{obsolete, not nice anyway}, just restore it here until we have a % process to deprecate unused functions like this. % % \begin{macrocode} function table.starts_at(t) return ipairs(t,1)(t,0) end % \end{macrocode} % % \end{macro} % % \iffalse % % \fi % \Finale \endinput