diff options
Diffstat (limited to 'Master')
-rw-r--r-- | Master/texmf-dist/doc/luatex/base/fdata.lua | 4554 | ||||
-rw-r--r-- | Master/texmf-dist/doc/luatex/base/fdata_epdf.lua | 2276 | ||||
-rw-r--r-- | Master/texmf-dist/doc/luatex/base/fdata_img.lua | 156 | ||||
-rw-r--r-- | Master/texmf-dist/doc/luatex/base/functionref.pdf | bin | 0 -> 108015 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/luatex/base/functionref.tex | 1088 | ||||
-rw-r--r-- | Master/texmf-dist/doc/luatex/base/luatex.man | 266 | ||||
-rw-r--r-- | Master/texmf-dist/doc/luatex/base/luatexref-env.tex | 25 | ||||
-rw-r--r-- | Master/texmf-dist/doc/luatex/base/luatexref-t.pdf | bin | 707177 -> 778873 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/luatex/base/luatexref-t.tex | 2114 |
9 files changed, 9897 insertions, 582 deletions
diff --git a/Master/texmf-dist/doc/luatex/base/fdata.lua b/Master/texmf-dist/doc/luatex/base/fdata.lua new file mode 100644 index 00000000000..7da05df3a2e --- /dev/null +++ b/Master/texmf-dist/doc/luatex/base/fdata.lua @@ -0,0 +1,4554 @@ +-- $Id: fdata.lua 4106 2011-04-10 12:51:54Z hhenkel $ + +local fdata = { + ["callback"]={ + ["functions"]={ + ["buildpage_filter"]={ + ["arguments"]={ + { + ["name"]="info", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Process objects as they are added to the main vertical list. The string argument gives some context.", + ["type"]="callback", + }, + ["close"]={ + ["arguments"]={ + { + ["name"]="env", + ["optional"]=false, + ["type"]="table", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Close a file opened with the \\afunction{open_read_file} callback. The argument is the return value from the \\afunction{open_read_file}", + ["type"]="callback", + }, + ["define_font"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="size", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="font", + ["optional"]=false, + ["type"]="metrics", + }, + }, + ["shortdesc"]="Define a font from within lua code. The arguments are the user-supplied information, with negative numbers indicating \\type{scaled}, positive numbers \\type{at}", + ["type"]="callback", + }, + ["find"]={ + ["arguments"]={ + { + ["name"]="callback_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="f", + ["optional"]=false, + ["type"]="function", + }, + }, + ["shortdesc"]="Returns the function currently associated with a callback, or \\type{nil}", + ["type"]="function", + }, + ["find_data_file"]={ + ["arguments"]={ + { + ["name"]="asked_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="actual_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find an input data file for PDF attachment.", + ["type"]="callback", + }, + ["find_enc_file"]={ + ["arguments"]={ + { + ["name"]="asked_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="actual_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find a font encoding file.", + ["type"]="callback", + }, + ["find_font_file"]={ + ["arguments"]={ + { + ["name"]="asked_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="actual_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find a font metrics file.", + ["type"]="callback", + }, + ["find_format_file"]={ + ["arguments"]={ + { + ["name"]="asked_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="actual_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find the format file.", + ["type"]="callback", + }, + ["find_image_file"]={ + ["arguments"]={ + { + ["name"]="asked_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="actual_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find an image file for inclusion.", + ["type"]="callback", + }, + ["find_map_file"]={ + ["arguments"]={ + { + ["name"]="asked_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="actual_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find a font map file.", + ["type"]="callback", + }, + ["find_opentype_file"]={ + ["arguments"]={ + { + ["name"]="asked_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="actual_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find an OpenType font file.", + ["type"]="callback", + }, + ["find_output_file"]={ + ["arguments"]={ + { + ["name"]="asked_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="actual_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find the output (PDF or DVI) file.", + ["type"]="callback", + }, + ["find_pk_file"]={ + ["arguments"]={ + { + ["name"]="asked_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="actual_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find a PK font bitmap file.", + ["type"]="callback", + }, + ["find_read_file"]={ + ["arguments"]={ + { + ["name"]="id_number", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="asked_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="actual_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find a file for \\tex{input} (0) or \\tex{openin} (higher integers).", + ["type"]="callback", + }, + ["find_subfont_file"]={ + ["arguments"]={ + { + ["name"]="asked_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="actual_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find a subfont definition file.", + ["type"]="callback", + }, + ["find_truetype_file"]={ + ["arguments"]={ + { + ["name"]="asked_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="actual_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find an TrueType font file.", + ["type"]="callback", + }, + ["find_type1_file"]={ + ["arguments"]={ + { + ["name"]="asked_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="actual_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find an Type1 (PostScript) font file.", + ["type"]="callback", + }, + ["find_vf_file"]={ + ["arguments"]={ + { + ["name"]="asked_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="actual_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find a VF file.", + ["type"]="callback", + }, + ["find_write_file"]={ + ["arguments"]={ + { + ["name"]="id_number", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="asked_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="actual_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find a file for writing to the log file (0) or with \\tex{write} (higher integers).", + ["type"]="callback", + }, + ["finish_pdffile"]={ + ["arguments"]={}, + ["returnvalues"]={}, + ["shortdesc"]="Run actions just before the PDF closing takes place.", + ["type"]="callback", + }, + ["hpack_filter"]={ + ["arguments"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="groupcode", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="size", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="packtype", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="direction", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="newhead", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Alter a node list before horizontal packing takes place. The first string gives some context,\ + the number is the desired size, the second string is either \\aliteral{exact} or \\aliteral{additional} (modifies the first string),\ + the third string is the desired direction", + ["type"]="callback", + }, + ["hyphenate"]={ + ["arguments"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="tail", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Apply hyphenation to a node list.", + ["type"]="callback", + }, + ["kerning"]={ + ["arguments"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="tail", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Apply kerning to a node list.", + ["type"]="callback", + }, + ["ligaturing"]={ + ["arguments"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="tail", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Apply ligaturing to a node list.", + ["type"]="callback", + }, + ["linebreak_filter"]={ + ["arguments"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="is_display", + ["optional"]=false, + ["type"]="boolean", + }, + }, + ["returnvalues"]={ + { + ["name"]="newhead", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Override the linebreaking algorithm. The boolean is \\type{true} if this is a pre-display break.", + ["type"]="callback", + }, + ["list"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="info", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Produce a list of all known callback names.", + ["type"]="function", + }, + ["mlist_to_hlist"]={ + ["arguments"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="displaytype", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="need_penalties", + ["optional"]=false, + ["type"]="boolean", + }, + }, + ["returnvalues"]={ + { + ["name"]="newhead", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Convert a math node list into a horizontal node list.", + ["type"]="callback", + }, + ["open_read_file"]={ + ["arguments"]={ + { + ["name"]="file_name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="env", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Open a file for reading. The returned table should define key functions for \\aliteral{reader} and \\aliteral{close}.", + ["type"]="callback", + }, + ["post_linebreak_filter"]={ + ["arguments"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="groupcode", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="newhead", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Alter a node list afer linebreaking has taken place. The string argument gives some context.", + ["type"]="callback", + }, + ["pre_dump"]={ + ["arguments"]={}, + ["returnvalues"]={}, + ["shortdesc"]="Run actions just before format dumping takes place.", + ["type"]="callback", + }, + ["pre_linebreak_filter"]={ + ["arguments"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="groupcode", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="newhead", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Alter a node list before linebreaking takes place. The string argument gives some context.", + ["type"]="callback", + }, + ["pre_output_filter"]={ + ["arguments"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="groupcode", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="size", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="packtype", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="maxdepth", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="direction", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="newhead", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Alter a node list before boxing to \\tex{outputbox} takes place. See \\afunction{vpack_filter} for the arguments.", + ["type"]="callback", + }, + ["process_input_buffer"]={ + ["arguments"]={ + { + ["name"]="buffer", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="adjusted_buffer", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Modify the encoding of the input buffer.", + ["type"]="callback", + }, + ["process_output_buffer"]={ + ["arguments"]={ + { + ["name"]="buffer", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="adjusted_buffer", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Modify the encoding of the output buffer.", + ["type"]="callback", + }, + ["read_data_file"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="success", + ["optional"]=false, + ["type"]="boolean", + }, + { + ["name"]="data", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="data_size", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Read a data file.", + ["type"]="callback", + }, + ["read_enc_file"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="success", + ["optional"]=false, + ["type"]="boolean", + }, + { + ["name"]="data", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="data_size", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Read a font encoding file.", + ["type"]="callback", + }, + ["read_font_file"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="success", + ["optional"]=false, + ["type"]="boolean", + }, + { + ["name"]="data", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="data_size", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Read a TFM metrics file. Return \\type{true}, the data, and the data length for success, \\type{false} otherwise", + ["type"]="callback", + }, + ["read_map_file"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="success", + ["optional"]=false, + ["type"]="boolean", + }, + { + ["name"]="data", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="data_size", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Read a font map file.", + ["type"]="callback", + }, + ["read_opentype_file"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="success", + ["optional"]=false, + ["type"]="boolean", + }, + { + ["name"]="data", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="data_size", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Read an OpenType font.", + ["type"]="callback", + }, + ["read_pk_file"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="success", + ["optional"]=false, + ["type"]="boolean", + }, + { + ["name"]="data", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="data_size", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Read a font bitmap PK file.", + ["type"]="callback", + }, + ["read_sfd_file"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="success", + ["optional"]=false, + ["type"]="boolean", + }, + { + ["name"]="data", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="data_size", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Read a subfont definition file.", + ["type"]="callback", + }, + ["read_truetype_file"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="success", + ["optional"]=false, + ["type"]="boolean", + }, + { + ["name"]="data", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="data_size", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Read a TrueType font.", + ["type"]="callback", + }, + ["read_type1_file"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="success", + ["optional"]=false, + ["type"]="boolean", + }, + { + ["name"]="data", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="data_size", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Read a Type1 font.", + ["type"]="callback", + }, + ["read_vf_file"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="success", + ["optional"]=false, + ["type"]="boolean", + }, + { + ["name"]="data", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="data_size", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Read a VF metrics file.", + ["type"]="callback", + }, + ["reader"]={ + ["arguments"]={ + { + ["name"]="env", + ["optional"]=false, + ["type"]="table", + }, + }, + ["returnvalues"]={ + { + ["name"]="line", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Read a line from a file opened with the \\afunction{open_read_file} callback. The argument is the return value from \\afunction{open_read_file}", + ["type"]="callback", + }, + ["register"]={ + ["arguments"]={ + { + ["name"]="callback_name", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="callback_func", + ["optional"]=false, + ["type"]="function", + }, + }, + ["returnvalues"]={ + { + ["name"]="id", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="error", + ["optional"]=true, + ["type"]="string", + }, + }, + ["shortdesc"]="Register a callback. Passing \\type{nil} removes an existing callback. Returns \\type{nil}, \\type{error} on failure.", + ["type"]="function", + }, + ["show_error_hook"]={ + ["arguments"]={}, + ["returnvalues"]={}, + ["shortdesc"]="Run action at error reporting time.", + ["type"]="callback", + }, + ["start_page_number"]={ + ["arguments"]={}, + ["returnvalues"]={}, + ["shortdesc"]="Run actions at the start of typeset page number message reporting.", + ["type"]="callback", + }, + ["start_run"]={ + ["arguments"]={}, + ["returnvalues"]={}, + ["shortdesc"]="Run actions at the start of the typesetting run.", + ["type"]="callback", + }, + ["stop_page_number"]={ + ["arguments"]={}, + ["returnvalues"]={}, + ["shortdesc"]="Run actions at the end of typeset page number message reporting.", + ["type"]="callback", + }, + ["stop_run"]={ + ["arguments"]={}, + ["returnvalues"]={}, + ["shortdesc"]="Run actions just before the end of the typesetting run.", + ["type"]="callback", + }, + ["token_filter"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="token", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Override the tokenization process. Return value is a \\type{token} or an array of tokens", + ["type"]="callback", + }, + ["vpack_filter"]={ + ["arguments"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="groupcode", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="size", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="packtype", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="maxdepth", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="direction", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="newhead", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Alter a node list before vertical packing takes place. The second number is the desired max depth. See \\afunction{hpack_filter} for the arguments.", + ["type"]="callback", + }, + }, + ["methods"]={ + }, + }, + ["epdf"] = require "fdata_epdf", + ["font"]={ + ["functions"]={ + ["current"]={ + ["arguments"]={ + { + ["name"]="i", + ["optional"]=true, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="i", + ["optional"]=true, + ["type"]="number", + }, + }, + ["shortdesc"]="Get or set the currently active font", + ["type"]="function", + }, + ["define"]={ + ["arguments"]={ + { + ["name"]="f", + ["optional"]=false, + ["type"]="metrics", + }, + }, + ["returnvalues"]={ + { + ["name"]="i", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Process a font metrics table and stores it in the internal font table, returning its internal id.", + ["type"]="function", + }, + ["each"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="i", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="v", + ["optional"]=false, + ["type"]="metrics", + }, + }, + ["shortdesc"]="Iterate over all the defined fonts.", + ["type"]="function", + }, + ["frozen"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="f", + ["optional"]=false, + ["type"]="boolean", + }, + }, + ["shortdesc"]="True if the font is frozen and can no longer be altered.", + ["type"]="function", + }, + ["getfont"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="f", + ["optional"]=false, + ["type"]="metrics", + }, + }, + ["shortdesc"]="Fetch an internal font id as a lua table.", + ["type"]="function", + }, + ["id"]={ + ["arguments"]={ + { + ["name"]="csname", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="i", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Return the font id of the font accessed by the csname given.", + ["type"]="function", + }, + ["max"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="i", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Return the highest used font id at this moment.", + ["type"]="function", + }, + ["nextid"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="i", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Return the next free font id number.", + ["type"]="function", + }, + ["read_tfm"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="s", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="fnt", + ["optional"]=false, + ["type"]="metrics", + }, + }, + ["shortdesc"]="Parse a font metrics file, at the size indicated by the number.", + ["type"]="function", + }, + ["read_vf"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="s", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="vf_fnt", + ["optional"]=false, + ["type"]="metrics", + }, + }, + ["shortdesc"]="Parse a virtual font metrics file, at the size indicated by the number.", + ["type"]="function", + }, + ["setfont"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="f", + ["optional"]=false, + ["type"]="metrics", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set an internal font id from a lua table.", + ["type"]="function", + }, + }, + ["methods"]={ + }, + }, + ["fontloader"]={ + ["functions"]={ + ["apply_afmfile"]={ + ["arguments"]={ + { + ["name"]="f", + ["optional"]=false, + ["type"]="luafont", + }, + { + ["name"]="filename", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Apply an AFM file to a fontloader table.", + ["type"]="function", + }, + ["apply_featurefile"]={ + ["arguments"]={ + { + ["name"]="f", + ["optional"]=false, + ["type"]="luafont", + }, + { + ["name"]="filename", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Apply a feature file to a fontloader table.", + ["type"]="function", + }, + ["info"]={ + ["arguments"]={ + { + ["name"]="filename", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="info", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Get various information fields from an font file.", + ["type"]="function", + }, + ["open"]={ + ["arguments"]={ + { + ["name"]="filename", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="fontname", + ["optional"]=true, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="f", + ["optional"]=false, + ["type"]="luafont", + }, + { + ["name"]="w", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Parse a font file and return a table representing its contents. The optional argument\ + is the name of the desired font in case of font collection files. The optional return\ + value contains any parser error strings.", + ["type"]="function", + }, + }, + ["methods"]={ + }, + }, + ["img"] = require "fdata_img", + ["kpse"]={ + ["functions"]={ + ["expand_braces"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="r", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Expand the braces in a variable.", + ["type"]="function", + }, + ["expand_path"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="r", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Expand a path.", + ["type"]="function", + }, + ["expand_var"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="r", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Expand a variable.", + ["type"]="function", + }, + ["find_file"]={ + ["arguments"]={ + { + ["name"]="filename", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="ftype", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="mustexist", + ["optional"]=true, + ["type"]="boolean", + }, + { + ["name"]="dpi", + ["optional"]=true, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="f", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find a file. The optional string is the file type as supported by the\ + standalone \\type{kpsewhich} program (default is \\aliteral{{tex}}, no autodiscovery takes place).\ + The optional boolean indicates wether the file must exist.\ + The optional number is the dpi value for PK files.\ + ", + ["type"]="function", + }, + ["init_prog"]={ + ["arguments"]={ + { + ["name"]="prefix", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="base_dpi", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="mfmode", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="fallback", + ["optional"]=true, + ["type"]="string", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Initialize a PK generation program. The optional string is the metafont mode fallback name", + ["type"]="function", + }, + ["lookup"]={ + ["arguments"]={ + { + ["name"]="filename", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="options", + ["optional"]=false, + ["type"]="table", + }, + }, + ["returnvalues"]={ + { + ["name"]="f", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Find a file (extended interface).", + ["type"]="function", + }, + ["new"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="progname", + ["optional"]=true, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="kpathsea", + ["optional"]=false, + ["type"]="kpathsea", + }, + }, + ["shortdesc"]="Create a new kpathsea library instance. The optional string allows explicit \\type{progname} setting.", + ["type"]="function", + }, + ["readable_file"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="f", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Returns true if a file exists and is readable.", + ["type"]="function", + }, + ["set_program_name"]={ + ["arguments"]={ + { + ["name"]="name", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="progname", + ["optional"]=true, + ["type"]="string", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Initialize the kpathsea library by setting the program name. The optional string allows explicit \\type{progname} setting.", + ["type"]="function", + }, + ["show_path"]={ + ["arguments"]={ + { + ["name"]="ftype", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="r", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="List the search path for a specific file type.", + ["type"]="function", + }, + ["var_value"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="r", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Return the value of a variable.", + ["type"]="function", + }, + ["version"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="r", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Return the kpathsea version.", + ["type"]="function", + }, + }, + ["methods"]={ + }, +}, + ["lang"]={ + ["functions"]={ + ["clean"]={ + ["arguments"]={ + { + ["name"]="o", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Creates a hyphenation key from the supplied hyphenation exception.", + ["type"]="function", + }, + ["clear_hyphenation"]={ + ["arguments"]={ + { + ["name"]="l", + ["optional"]=false, + ["type"]="language", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Clear the set of hyphenation exceptions.", + ["type"]="function", + }, + ["clear_patterns"]={ + ["arguments"]={ + { + ["name"]="l", + ["optional"]=false, + ["type"]="language", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Clear the set of hyphenation patterns.", + ["type"]="function", + }, + ["hyphenate"]={ + ["arguments"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="tail", + ["optional"]=true, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="success", + ["optional"]=false, + ["type"]="boolean", + }, + }, + ["shortdesc"]="Hyphenate a node list.", + ["type"]="function", + }, + ["hyphenation"]={ + ["arguments"]={ + { + ["name"]="l", + ["optional"]=false, + ["type"]="language", + }, + { + ["name"]="n", + ["optional"]=true, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=true, + ["type"]="string", + }, + }, + ["shortdesc"]="Get or set hyphenation exceptions.", + ["type"]="function", + }, + ["id"]={ + ["arguments"]={ + { + ["name"]="l", + ["optional"]=false, + ["type"]="language", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Returns the current internal \\tex{language} id number.", + ["type"]="function", + }, + ["new"]={ + ["arguments"]={ + { + ["name"]="id", + ["optional"]=true, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="l", + ["optional"]=false, + ["type"]="language", + }, + }, + ["shortdesc"]="Create a new language object, with an optional fixed id number.", + ["type"]="function", + }, + ["patterns"]={ + ["arguments"]={ + { + ["name"]="l", + ["optional"]=false, + ["type"]="language", + }, + { + ["name"]="n", + ["optional"]=true, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=true, + ["type"]="string", + }, + }, + ["shortdesc"]="Get or set hyphenation patterns.", + ["type"]="function", + }, + ["postexhyphenchar"]={ + ["arguments"]={ + { + ["name"]="l", + ["optional"]=false, + ["type"]="language", + }, + { + ["name"]="n", + ["optional"]=true, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=true, + ["type"]="number", + }, + }, + ["shortdesc"]="Set the post-hyphenchar for explicit hyphenation.", + ["type"]="function", + }, + ["posthyphenchar"]={ + ["arguments"]={ + { + ["name"]="l", + ["optional"]=false, + ["type"]="language", + }, + { + ["name"]="n", + ["optional"]=true, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=true, + ["type"]="number", + }, + }, + ["shortdesc"]="Set the post-hyphenchar for implicit hyphenation.", + ["type"]="function", + }, + ["preexhyphenchar"]={ + ["arguments"]={ + { + ["name"]="l", + ["optional"]=false, + ["type"]="language", + }, + { + ["name"]="n", + ["optional"]=true, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=true, + ["type"]="number", + }, + }, + ["shortdesc"]="Set the pre-hyphenchar for explicit hyphenation.", + ["type"]="function", + }, + ["prehyphenchar"]={ + ["arguments"]={ + { + ["name"]="l", + ["optional"]=false, + ["type"]="language", + }, + { + ["name"]="n", + ["optional"]=true, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=true, + ["type"]="number", + }, + }, + ["shortdesc"]="Set the pre-hyphenchar for implicit hyphenation.", + ["type"]="function", + }, + }, + ["methods"]={ + }, +}, + ["lfs"]={ + ["functions"]={ + ["isdir"]={ + ["arguments"]={ + { + ["name"]="filename", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="boolean", + }, + }, + ["shortdesc"]="Return true if the string is a directory.", + ["type"]="function", + }, + ["isfile"]={ + ["arguments"]={ + { + ["name"]="filename", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="boolean", + }, + }, + ["shortdesc"]="Return true if the string is a file.", + ["type"]="function", + }, + ["readlink"]={ + ["arguments"]={ + { + ["name"]="filename", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="f", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Return the contents of a symlink (Unix only).", + ["type"]="function", + }, + ["shortname"]={ + ["arguments"]={ + { + ["name"]="filename", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="fat", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Return the FAT name of a file (Windows only).", + ["type"]="function", + }, + }, + ["methods"]={ + }, + }, + ["lua"]={ + ["functions"]={ + ["getbytecode"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="f", + ["optional"]=false, + ["type"]="function", + }, + }, + ["shortdesc"]="Return a previously stored function from a bytecode register.", + ["type"]="function", + }, + ["setbytecode"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="f", + ["optional"]=false, + ["type"]="function", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Save a function in a bytecode register.", + ["type"]="function", + }, + }, + ["methods"]={ + }, +}, + ["mp"]={ + ["functions"]={ + ["char_depth"]={ + ["arguments"]={ + { + ["name"]="fontname", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="char", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="w", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Report a character's depth.", + ["type"]="method", + }, + ["char_height"]={ + ["arguments"]={ + { + ["name"]="fontname", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="char", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="w", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Report a character's height.", + ["type"]="method", + }, + ["char_width"]={ + ["arguments"]={ + { + ["name"]="fontname", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="char", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="w", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Report a character's width.", + ["type"]="method", + }, + ["execute"]={ + ["arguments"]={ + { + ["name"]="chunk", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="rettable", + ["optional"]=false, + ["type"]="mpdata", + }, + }, + ["shortdesc"]="Execute metapost code in the instance.", + ["type"]="method", + }, + ["finish"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="rettable", + ["optional"]=false, + ["type"]="mpdata", + }, + }, + ["shortdesc"]="Finish a metapost instance.", + ["type"]="method", + }, + ["statistics"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="stats", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Returns some statistics for this metapost instance.", + ["type"]="method", + }, + }, + ["methods"]={ + }, + }, + ["mplib"]={ + ["functions"]={ + ["new"]={ + ["arguments"]={ + { + ["name"]="options", + ["optional"]=false, + ["type"]="table", + }, + }, + ["returnvalues"]={ + { + ["name"]="mp", + ["optional"]=false, + ["type"]="mpinstance", + }, + }, + ["shortdesc"]="Create a new metapost instance.", + ["type"]="function", + }, + ["version"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="v", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Returns the mplib version.", + ["type"]="function", + }, + }, + ["methods"]={ + }, + }, + ["node"]={ + ["functions"]={ + ["copy"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="m", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Copy a node.", + ["type"]="function", + }, + ["copy_list"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="m", + ["optional"]=true, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="m", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Copy a node list.", + ["type"]="function", + }, + ["count"]={ + ["arguments"]={ + { + ["name"]="id", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="m", + ["optional"]=true, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="i", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Return the count of nodes with a specific id in a node list. Processing stops just before the optional node.", + ["type"]="function", + }, + ["dimensions"]={ + ["arguments"]={ + { + ["name"]="glue_set", + ["optional"]=true, + ["type"]="number", + }, + { + ["name"]="glue_sign", + ["optional"]=true, + ["type"]="number", + }, + { + ["name"]="glue_order", + ["optional"]=true, + ["type"]="number", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="t", + ["optional"]=true, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="w", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="h", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="d", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Return the natural dimensions of a (horizontal) node list. The 3 optional numbers represent \ + glue_set, glue_sign, and glue_order. The calculation stops just before the optional node (default end of list)", + ["type"]="function", + }, + ["fields"]={ + ["arguments"]={ + { + ["name"]="id", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="subid", + ["optional"]=true, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Report the fields a node type understands. The optional argument is needed for whatsits.", + ["type"]="function", + }, + ["first_glyph"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="m", + ["optional"]=true, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Return the first character node in a list. Processing stops just before the optional node.", + ["type"]="function", + }, + ["flush_list"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Release a list of nodes.", + ["type"]="function", + }, + ["free"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Release a node.", + ["type"]="function", + }, + ["has_attribute"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="id", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="val", + ["optional"]=true, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="v", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Return an attribute value for a node, if it has one. The optional number tests for a specific value", + ["type"]="function", + }, + ["has_field"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="field", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="boolean", + }, + }, + ["shortdesc"]="Return true if the node understands the named field.", + ["type"]="function", + }, + ["hpack"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="w", + ["optional"]=true, + ["type"]="number", + }, + { + ["name"]="info", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="dir", + ["optional"]=true, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="h", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="b", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Pack a node list into a horizontal list. The number is the desired size, the first string is either \\aliteral{exact} or \\aliteral{additional} (modifies the first string),\ + the second string is the desired direction", + ["type"]="function", + }, + ["id"]={ + ["arguments"]={ + { + ["name"]="type", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="id", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Convert a node type string into a node id number.", + ["type"]="function", + }, + ["insert_after"]={ + ["arguments"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="current", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="new", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="new", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Insert the third node just after the second node in the list that starts at the first node.", + ["type"]="function", + }, + ["insert_before"]={ + ["arguments"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="current", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="new", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="new", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Insert the third node just before the second node in the list that starts at the first node.", + ["type"]="function", + }, + ["is_node"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="any", + }, + }, + ["returnvalues"]={ + { + ["name"]="yes", + ["optional"]=false, + ["type"]="boolean", + }, + }, + ["shortdesc"]="Return true if the object is a <node>.", + ["type"]="function", + }, + ["kerning"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="m", + ["optional"]=true, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="h", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="t", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="success", + ["optional"]=false, + ["type"]="boolean", + }, + }, + ["shortdesc"]="Apply the internal kerning routine to a node list. Processing stops just before the optional node.", + ["type"]="function", + }, + ["last_node"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Pops and returns the last node on the current output list.", + ["type"]="function", + }, + ["length"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="m", + ["optional"]=true, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="i", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Return the length of a node list. Processing stops just before the optional node.", + ["type"]="function", + }, + ["ligaturing"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="m", + ["optional"]=true, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="h", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="t", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="success", + ["optional"]=false, + ["type"]="boolean", + }, + }, + ["shortdesc"]="Apply the internal ligaturing routine to a node list. Processing stops just before the optional node.", + ["type"]="function", + }, + ["mlist_to_hlist"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="displaytype", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="penalties", + ["optional"]=false, + ["type"]="boolean", + }, + }, + ["returnvalues"]={ + { + ["name"]="h", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Recursively convert a math list into a horizontal list. The string differentiates display and inline, the boolean\ + whether penalties are inserted", + ["type"]="function", + }, + ["new"]={ + ["arguments"]={ + { + ["name"]="id", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="subid", + ["optional"]=true, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Create a new node with id and (optional) subtype.", + ["type"]="function", + }, + ["protect_glyphs"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Mark all processed glyphs in a node list as being characters.", + ["type"]="function", + }, + ["protrusion_skippable"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="yes", + ["optional"]=false, + ["type"]="boolean", + }, + }, + ["shortdesc"]="Return true if the node could be skipped for protrusion purposes.", + ["type"]="function", + }, + ["remove"]={ + ["arguments"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="current", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="head", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="current", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Extract and remove a second node from the list that starts in the first node.", + ["type"]="function", + }, + ["set_attribute"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="id", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="val", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set an attribute value for a node.", + ["type"]="function", + }, + ["slide"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="m", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Move to the last node of a list while fixing next and prev pointers.", + ["type"]="function", + }, + ["next"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="m", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Returns the next node.", + ["type"]="function", + }, + ["prev"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="m", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Returns the previous node.", + ["type"]="function", + }, + ["subtype"]={ + ["arguments"]={ + { + ["name"]="type", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="subtype", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Convert a whatsit type string into a node subtype number.", + ["type"]="function", + }, + ["tail"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="m", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Return the last node in a list.", + ["type"]="function", + }, + ["traverse"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Iterate over a node list.", + ["type"]="function", + }, + ["traverse_id"]={ + ["arguments"]={ + { + ["name"]="id", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Iterate over nodes with id matching the number in a node list.", + ["type"]="function", + }, + ["type"]={ + ["arguments"]={ + { + ["name"]="id", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="type", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="convert a node id number into a node type string.", + ["type"]="function", + }, + ["types"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Return the list of node types.", + ["type"]="function", + }, + ["unprotect_glyphs"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Mark all characters in a node list as being processed glyphs.", + ["type"]="function", + }, + ["unset_attribute"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="i", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="val", + ["optional"]=true, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="v", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Unset an attribute value for a node. The optional number tests for a specific value", + ["type"]="function", + }, + ["vpack"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="w", + ["optional"]=true, + ["type"]="number", + }, + { + ["name"]="info", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="dir", + ["optional"]=true, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="h", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="b", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Pack a node list into a vertical list. Arguments as for node.hpack", + ["type"]="function", + }, + ["whatsits"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Return the list of whatsit types.", + ["type"]="function", + }, + ["write"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Appends a node to the current output list.", + ["type"]="function", + }, + }, + ["methods"]={ + }, + }, + ["os"]={ + ["functions"]={ + ["exec"]={ + ["arguments"]={ + { + ["name"]="command", + ["optional"]=false, + ["type"]="table", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]=" Run an external command and exit. The table is an array of arguments, with an optional \\type{argv[0]} in index 0.", + ["type"]="function", + }, + ["gettimeofday"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="time", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Get the time as a floating point number (Unix only).", + ["type"]="function", + }, + ["setenv"]={ + ["arguments"]={ + { + ["name"]="key", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="value", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set an environment variable.", + ["type"]="function", + }, + ["spawn"]={ + ["arguments"]={ + { + ["name"]="command", + ["optional"]=false, + ["type"]="table", + }, + }, + ["returnvalues"]={ + { + ["name"]="succ", + ["optional"]=false, + ["type"]="boolean", + }, + }, + ["shortdesc"]="Run an external command and return its exit code. The table is an array of arguments, with an optional \\type{argv[0]} in index 0.", + ["type"]="function", + }, + ["times"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="times", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Return process times.", + ["type"]="function", + }, + ["tmpdir"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="d", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Create a temporary directory inside the current directory.", + ["type"]="function", + }, + ["selfdir"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="d", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Return the directory path of argv[0].", + ["type"]="function", + }, + ["uname"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="data", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Return various information strings about the computer.", + ["type"]="function", + }, + }, + ["methods"]={ + }, + }, + ["pdf"]={ + ["functions"]={ + ["immediateobj"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=true, + ["type"]="number", + }, + { + ["name"]="type", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="objtext", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="extradata", + ["optional"]=true, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Write an object to the PDF file immediately. The optional number is an object id,\ + the first optional string is \\aliteral{{file}}, \\aliteral{{stream}}, or \\aliteral{{filestream}}.\ + the second optional string contains stream attributes for the latter two cases.\ + ", + ["type"]="function", + }, + ["obj"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=true, + ["type"]="number", + }, + { + ["name"]="type", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="objtext", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="extradata", + ["optional"]=true, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Write an object to the PDF file. See \\aliteral{pdf.immediateobj} for arguments.", + ["type"]="function", + }, + ["refobj"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + } + }, + ["returnvalues"]={}, + ["shortdesc"]="Reference an object, so that it will be written out.", + ["type"]="function", + }, + ["print"]={ + ["arguments"]={ + { + ["name"]="type", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Write directly to the PDF file (use in \\tex{latelua}). The optional string is\ + one of \\aliteral{{direct}} or \\aliteral{{page}}", + ["type"]="function", + }, + ["registerannot"]={ + ["arguments"]={ + { + ["name"]="objnum", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Register an annotation in the PDF backend.", + ["type"]="function", + }, + ["pageref"]={ + ["arguments"]={ + { + ["name"]="objnum", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="page", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Return the pageref object number.", + ["type"]="function", + }, + + ["mapfile"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Register a font map file.", + ["type"]="function", + }, + + ["mapline"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Register a font map line.", + ["type"]="function", + }, + + ["reserveobj"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Reserve an object number in the PDF backend.", + ["type"]="function", + }, + }, + ["methods"]={ + }, + }, + ["status"]={ + ["functions"]={ + ["list"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="info", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Returns a table with various status items.", + ["type"]="function", + }, + }, + ["methods"]={ + }, + }, + ["string"]={ + ["functions"]={ + ["bytepairs"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="m", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Iterator that returns two values representing two single 8-byte tokens.", + ["type"]="function", + }, + ["bytes"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Iterator that returns a value representing a single 8-byte token.", + ["type"]="function", + }, + ["characterpairs"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="t", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Iterator that returns two strings representing two single \\UTF-8 tokens.", + ["type"]="function", + }, + ["characters"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Iterator that returns a string representing a single 8-byte token.", + ["type"]="function", + }, + ["explode"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="sep", + ["optional"]=true, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="i", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Break a string into pieces. The optional argument is a character possibly followed by a plus sign (default \\aliteral{{ +}})", + ["type"]="function", + }, + ["utfcharacters"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Iterator that returns a string representing a single \\UTF-8 token.", + ["type"]="function", + }, + ["utfvalues"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Iterator that returns a value representing a single \\UTF-8 token.", + ["type"]="function", + }, + }, + ["methods"]={ + }, + }, + ["tex"]={ + ["functions"]={ + ["badness"]={ + ["arguments"]={ + { + ["name"]="f", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="s", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="b", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Compute a badness value.", + ["type"]="function", + }, + ["definefont"]={ + ["arguments"]={ + { + ["name"]="global", + ["optional"]=true, + ["type"]="boolean", + }, + { + ["name"]="csname", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="fontid", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Define a font csname. The optional boolean indicates for global definition, the string is the csname, the number is a font id.", + ["type"]="function", + }, + ["enableprimitives"]={ + ["arguments"]={ + { + ["name"]="prefix", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="names", + ["optional"]=false, + ["type"]="table", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Enable the all primitives in the array using the string as prefix.", + ["type"]="function", + }, + ["error"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="helptext", + ["optional"]=true, + ["type"]="table", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Create an error that is presented to the user. The optional table is an array of help message strings.", + ["type"]="function", + }, + ["extraprimitives"]={ + ["arguments"]={ + { + ["name"]="s1", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="s2", + ["optional"]=true, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Return all primitives in a (set of) extension identifiers. Valid identifiers are: \ + \\aliteral{tex}, \\aliteral{core}, \\aliteral{etex}, \\aliteral{pdftex}, \\aliteral{omega}, \\aliteral{aleph}, and \\aliteral{luatex}.", + ["type"]="function", + }, + ["get"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="v", + ["optional"]=false, + ["type"]="value", + }, + }, + ["shortdesc"]="Get a named internal register. Also accepts a predefined csname string.", + ["type"]="function", + }, + ["getattribute"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Get an attribute register. Also accepts a predefined csname string.", + ["type"]="function", + }, + ["getbox"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Get a box register. Also accepts a predefined csname string.", + ["type"]="function", + }, + ["getcount"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Get a count register. Also accepts a predefined csname string.", + ["type"]="function", + }, + ["getdimen"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Get a dimen register. Also accepts a predefined csname string.", + ["type"]="function", + }, + ["getmath"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="t", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Get an internal math parameter. The first string is like the csname but without the \\type{Umath} prefix, the second string is a style name minus the \\type{style} suffix.", + ["type"]="function", + }, + ["getskip"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="node", + }, + }, + ["shortdesc"]="Get a skip register. Also accepts a predefined csname string.", + ["type"]="function", + }, + ["gettoks"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Get a toks register. Also accepts a predefined csname string.", + ["type"]="function", + }, + + + ["getlccode"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Get a lowercase code.", + ["type"]="function", + }, + + ["setlccode"]={ + ["arguments"]={ + { + ["name"]="global", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="lc", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="uc", + ["optional"]=true, + ["type"]="number", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set a lowercase code.", + ["type"]="function", + }, + + ["getuccode"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Get an uppercase code.", + ["type"]="function", + }, + ["setuccode"]={ + ["arguments"]={ + { + ["name"]="global", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="uc", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="lc", + ["optional"]=true, + ["type"]="number", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set an uppercase code.", + ["type"]="function", + }, + ["getsfcode"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Get a space factor.", + ["type"]="function", + }, + ["setsfcode"]={ + ["arguments"]={ + { + ["name"]="global", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="sf", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set a space factor.", + ["type"]="function", + }, + + ["getcatcode"]={ + ["arguments"]={ + { + ["name"]="cattable", + ["optional"]=true, + ["type"]="number", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="c", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Get a category code.", + ["type"]="function", + }, + + ["setcatcode"]={ + ["arguments"]={ + { + ["name"]="global", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="cattable", + ["optional"]=true, + ["type"]="number", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="c", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set a category code.", + ["type"]="function", + }, + + ["getmathcode"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Get a math code.", + ["type"]="function", + }, + + ["setmathcode"]={ + ["arguments"]={ + { + ["name"]="global", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="mval", + ["optional"]=false, + ["type"]="table", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set a math code.", + ["type"]="function", + }, + + ["getdelcode"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Get a delimiter code.", + ["type"]="function", + }, + + ["setdelcode"]={ + ["arguments"]={ + { + ["name"]="global", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="mval", + ["optional"]=false, + ["type"]="table", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set a delimiter code.", + ["type"]="function", + }, + + + + ["linebreak"]={ + ["arguments"]={ + { + ["name"]="listhead", + ["optional"]=false, + ["type"]="node", + }, + { + ["name"]="parameters", + ["optional"]=false, + ["type"]="table", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Run the line breaker on a node list. The table lists settings.", + ["type"]="function", + }, + ["primitives"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="table", + }, + }, + ["shortdesc"]="Returns a table of all currently active primitives, with their meaning.", + ["type"]="function", + }, + ["print"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=true, + ["type"]="number", + }, + { + ["name"]="s1", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="s2", + ["optional"]=true, + ["type"]="string", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]=" Print a sequence of strings (not just two) as lines. The optional argument is a catcode table id.", + ["type"]="function", + }, + ["round"]={ + ["arguments"]={ + { + ["name"]="o", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Round a number.", + ["type"]="function", + }, + ["scale"]={ + ["arguments"]={ + { + ["name"]="o", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="delta", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Multiplies the first number (or all fields in a table) with the second argument (if the first argument is a table, so is the return value).", + ["type"]="function", + }, + ["set"]={ + ["arguments"]={ + { + ["name"]="global", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="v", + ["optional"]=false, + ["type"]="value", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set a named internal register. Also accepts a predefined csname string.", + ["type"]="function", + }, + ["setattribute"]={ + ["arguments"]={ + { + ["name"]="global", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="s", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set an attribute register. Also accepts a predefined csname string.", + ["type"]="function", + }, + ["setbox"]={ + ["arguments"]={ + { + ["name"]="global", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="s", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set a box register. Also accepts a predefined csname string.", + ["type"]="function", + }, + ["setcount"]={ + ["arguments"]={ + { + ["name"]="global", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="s", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set a count register. Also accepts a predefined csname string.", + ["type"]="function", + }, + ["setdimen"]={ + ["arguments"]={ + { + ["name"]="global", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="s", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set a dimen register. Also accepts a predefined csname string.", + ["type"]="function", + }, + ["setmath"]={ + ["arguments"]={ + { + ["name"]="global", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="t", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set an internal math parameter. The first string is like the csname but without the \\type{Umath} prefix, the second string is a style name minus the \\type{style} suffix.", + ["type"]="function", + }, + ["setskip"]={ + ["arguments"]={ + { + ["name"]="global", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="s", + ["optional"]=false, + ["type"]="node", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set a skip register. Also accepts a predefined csname string.", + ["type"]="function", + }, + ["settoks"]={ + ["arguments"]={ + { + ["name"]="global", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Set a toks register. Also accepts a predefined csname string.", + ["type"]="function", + }, + ["shipout"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Ships the box to the output file and clears the box.", + ["type"]="function", + }, + ["sp"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="n", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Convert a dimension string to scaled points.", + ["type"]="function", + }, + ["sprint"]={ + ["arguments"]={ + { + ["name"]="n", + ["optional"]=true, + ["type"]="number", + }, + { + ["name"]="s1", + ["optional"]=false, + ["type"]="string", + }, + { + ["name"]="s2", + ["optional"]=true, + ["type"]="string", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]=" Print a sequence of strings (not just two) as partial lines. The optional argument is a catcode table id.", + ["type"]="function", + }, + ["tprint"]={ + ["arguments"]={ + { + ["name"]="a1", + ["optional"]=false, + ["type"]="table", + }, + { + ["name"]="a2", + ["optional"]=true, + ["type"]="table", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Combine any number of \\type{tex.sprint}'s into a single function call.", + ["type"]="function", + }, + ["write"]={ + ["arguments"]={ + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]=" Print a sequence of strings (not just two) as detokenized data.", + ["type"]="function", + }, + }, + ["methods"]={ + }, + }, + ["texio"]={ + ["functions"]={ + ["write"]={ + ["arguments"]={ + { + ["name"]="target", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Write a string to the log and/or terminal. The optional argument is\ + \\aliteral{{term}}, \\aliteral{{term and log}}, or \\aliteral{{log}}.", + ["type"]="function", + }, + ["write_nl"]={ + ["arguments"]={ + { + ["name"]="target", + ["optional"]=true, + ["type"]="string", + }, + { + ["name"]="s", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={}, + ["shortdesc"]="Write a string to the log and/or terminal, starting on a new line. \ + The optional argument is \ + \\aliteral{{term}}, \\aliteral{{term and log}}, or \\aliteral{{log}}.", + ["type"]="function", + }, + }, + ["methods"]={ + }, + }, + ["token"]={ + ["functions"]={ + ["command_id"]={ + ["arguments"]={ + { + ["name"]="commandname", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="i", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Return the internal number representing a command code.", + ["type"]="function", + }, + ["command_name"]={ + ["arguments"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="token", + }, + }, + ["returnvalues"]={ + { + ["name"]="commandname", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Return the internal string representing a command code.", + ["type"]="function", + }, + ["create"]={ + ["arguments"]={ + { + ["name"]="char", + ["optional"]=false, + ["type"]="number", + }, + { + ["name"]="catcode", + ["optional"]=true, + ["type"]="number", + }, + }, + ["returnvalues"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="token", + }, + }, + ["shortdesc"]="Create a token from scratch, the optional argument is a category code. Also accepts strings, in which case a token matching that csname is created.", + ["type"]="function", + }, + ["csname_id"]={ + ["arguments"]={ + { + ["name"]="csname", + ["optional"]=false, + ["type"]="string", + }, + }, + ["returnvalues"]={ + { + ["name"]="i", + ["optional"]=false, + ["type"]="number", + }, + }, + ["shortdesc"]="Returns the value for a csname string.", + ["type"]="function", + }, + ["csname_name"]={ + ["arguments"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="token", + }, + }, + ["returnvalues"]={ + { + ["name"]="csname", + ["optional"]=false, + ["type"]="string", + }, + }, + ["shortdesc"]="Return the csname associated with a token.", + ["type"]="function", + }, + ["expand"]={ + ["arguments"]={}, + ["returnvalues"]={}, + ["shortdesc"]="Expand a token the tokenb waiting in the input stream.", + ["type"]="function", + }, + ["get_next"]={ + ["arguments"]={}, + ["returnvalues"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="token", + }, + }, + ["shortdesc"]="Fetch the next token from the input stream.", + ["type"]="function", + }, + ["is_activechar"]={ + ["arguments"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="token", + }, + }, + ["returnvalues"]={ + { + ["name"]="b", + ["optional"]=false, + ["type"]="boolean", + }, + }, + ["shortdesc"]="True if the token represents and active character.", + ["type"]="function", + }, + ["is_expandable"]={ + ["arguments"]={ + { + ["name"]="t", + ["optional"]=false, + ["type"]="token", + }, + }, + ["returnvalues"]={ + { + ["name"]="b", + ["optional"]=false, + ["type"]="boolean", + }, + }, + ["shortdesc"]="True if the token is expandable.", + ["type"]="function", + }, + }, + ["methods"]={ + }, + }, +} + +return fdata; diff --git a/Master/texmf-dist/doc/luatex/base/fdata_epdf.lua b/Master/texmf-dist/doc/luatex/base/fdata_epdf.lua new file mode 100644 index 00000000000..7e13519d2da --- /dev/null +++ b/Master/texmf-dist/doc/luatex/base/fdata_epdf.lua @@ -0,0 +1,2276 @@ +-- $Id: fdata_epdf.lua 4135 2011-04-11 21:07:37Z hhenkel $ + +local fdata_epdf = { + functions = { + open = { + type = "function", + shortdesc = "Construct a PDFDoc object by opening a PDF document.", + arguments = { + {type = "string", name = "filename", optional = false, }, + }, + returnvalues = { + {type = "PDFDoc", name = "var", optional = false, }, + }, + }, + Annot = { + type = "function", + shortdesc = "Construct an Annot object.", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + {type = "Dict", name = "dict", optional = false, }, + {type = "Catalog", name = "catalog", optional = false, }, + {type = "Ref", name = "ref", optional = false, }, + }, + returnvalues = { + {type = "Annot", name = "var", optional = false, }, + }, + }, + Annots = { + type = "function", + shortdesc = "Construct an Annots object.", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + {type = "Catalog", name = "catalog", optional = false, }, + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "Annots", name = "var", optional = false, }, + }, + }, + Array = { + type = "function", + shortdesc = "Construct an Array object.", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "Array", name = "var", optional = false, }, + }, + }, + Dict = { + type = "function", + shortdesc = "Construct a Dict object.", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "Dict", name = "var", optional = false, }, + }, + }, + Object = { + type = "function", + shortdesc = "Construct an Object object.", + arguments = { + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + PDFRectangle = { + type = "function", + shortdesc = "Construct a PDFRectangle object.", + arguments = { + }, + returnvalues = { + {type = "PDFRectangle", name = "var", optional = false, }, + }, + }, + }, + methods = { +------------------------------------------------------------------------ + Annot = { + isOK = { + type = "function", + shortdesc = "Check if Annot object is ok.", + arguments = { + {type = "Annot", name = "annot", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + getAppearance = { + type = "function", + shortdesc = "Get Appearance object.", + arguments = { + {type = "Annot", name = "annot", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + getBorder = { + type = "function", + shortdesc = "Get AnnotBorder object.", + arguments = { + {type = "Annot", name = "annot", optional = false, }, + }, + returnvalues = { + {type = "AnnotBorder", name = "var", optional = false, }, + }, + }, + match = { + type = "function", + shortdesc = "Check if object number and generation matches Ref.", + arguments = { + {type = "Annot", name = "annot", optional = false, }, + {type = "Ref", name = "ref", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + }, +------------------------------------------------------------------------ + AnnotBorderStyle = { + getWidth = { + type = "function", + shortdesc = "Get border width.", + arguments = { + {type = "AnnotBorderStyle", name = "annotborderstyle", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + }, +------------------------------------------------------------------------ + Annots = { + getNumAnnots = { + type = "function", + shortdesc = "Get number of Annots objects.", + arguments = { + {type = "Annots", name = "annots", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getAnnot = { + type = "function", + shortdesc = "Get Annot object.", + arguments = { + {type = "Annots", name = "annots", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "Annot", name = "var", optional = false, }, + }, + }, + }, +------------------------------------------------------------------------ + Array = { + incRef = { + type = "function", + shortdesc = "Increment reference count to Array.", + arguments = { + {type = "Array", name = "array", optional = false, }, + }, + returnvalues = { + }, + }, + decRef = { + type = "function", + shortdesc = "Decrement reference count to Array.", + arguments = { + {type = "Array", name = "array", optional = false, }, + }, + returnvalues = { + }, + }, + getLength = { + type = "function", + shortdesc = "Get Array length.", + arguments = { + {type = "Array", name = "array", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + add = { + type = "function", + shortdesc = "Add Object to Array.", + arguments = { + {type = "Array", name = "array", optional = false, }, + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + }, + }, + get = { + type = "function", + shortdesc = "Get Object from Array.", + arguments = { + {type = "Array", name = "array", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + getNF = { + type = "function", + shortdesc = "Get Object from Array, not resolving indirection.", + arguments = { + {type = "Array", name = "array", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + getString = { + type = "function", + shortdesc = "Get String from Array.", + arguments = { + {type = "Array", name = "array", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + }, +------------------------------------------------------------------------ + Catalog = { + isOK = { + type = "function", + shortdesc = "Check if Catalog object is ok.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + getNumPages = { + type = "function", + shortdesc = "Get total number of pages.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getPage = { + type = "function", + shortdesc = "Get Page.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "Page", name = "var", optional = false, }, + }, + }, + getPageRef = { + type = "function", + shortdesc = "Get the reference to a Page object.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "Ref", name = "var", optional = false, }, + }, + }, + getBaseURI = { + type = "function", + shortdesc = "Get base URI, if any.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + readMetadata = { + type = "function", + shortdesc = "Get the contents of the Metadata stream.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + getStructTreeRoot = { + type = "function", + shortdesc = "Get the structure tree root object.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + findPage = { + type = "function", + shortdesc = "Get a Page number by object number and generation.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + {type = "integer", name = "object number", optional = false, }, + {type = "integer", name = "object generation", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + findDest = { + type = "function", + shortdesc = "Find a named destination.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + {type = "string", name = "string", optional = false, }, + }, + returnvalues = { + {type = "LinkDest", name = "var", optional = false, }, + }, + }, + getDests = { + type = "function", + shortdesc = "Get destinations object.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + numEmbeddedFiles = { + type = "function", + shortdesc = "Get number of embedded files.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + embeddedFile = { + type = "function", + shortdesc = "Get embedded file.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "EmbFile", name = "var", optional = false, }, + }, + }, + numJS = { + type = "function", + shortdesc = "Get number of javascript scripts.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getJS = { + type = "function", + shortdesc = "Get javascript script.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + getOutline = { + type = "function", + shortdesc = "Get Outline object.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + getAcroForm = { + type = "function", + shortdesc = "Get AcroForm object.", + arguments = { + {type = "Catalog", name = "catalog", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + }, +------------------------------------------------------------------------ + EmbFile = { + name = { + type = "function", + shortdesc = "Get name of embedded file.", + arguments = { + {type = "EmbFile", name = "embfile", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + description = { + type = "function", + shortdesc = "Get description of embedded file.", + arguments = { + {type = "EmbFile", name = "embfile", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + size = { + type = "function", + shortdesc = "Get size of embedded file.", + arguments = { + {type = "EmbFile", name = "embfile", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + modDate = { + type = "function", + shortdesc = "Get modification date of embedded file.", + arguments = { + {type = "EmbFile", name = "embfile", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + createDate = { + type = "function", + shortdesc = "Get creation date of embedded file.", + arguments = { + {type = "EmbFile", name = "embfile", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + checksum = { + type = "function", + shortdesc = "Get checksum of embedded file.", + arguments = { + {type = "EmbFile", name = "embfile", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + mimeType = { + type = "function", + shortdesc = "Get mime type of embedded file.", + arguments = { + {type = "EmbFile", name = "embfile", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + streamObject = { + type = "function", + shortdesc = "Get stream object of embedded file.", + arguments = { + {type = "EmbFile", name = "embfile", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + isOk = { + type = "function", + shortdesc = "Check if embedded file is ok.", + arguments = { + {type = "EmbFile", name = "embfile", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + }, +------------------------------------------------------------------------ + Dict = { + incRef = { + type = "function", + shortdesc = "Increment reference count to Dict.", + arguments = { + {type = "Dict", name = "dict", optional = false, }, + }, + returnvalues = { + }, + }, + decRef = { + type = "function", + shortdesc = "Decrement reference count to Dict.", + arguments = { + {type = "Dict", name = "dict", optional = false, }, + }, + returnvalues = { + }, + }, + getLength = { + type = "function", + shortdesc = "Get Dict length.", + arguments = { + {type = "Dict", name = "dict", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + add = { + type = "function", + shortdesc = "Add Object to Dict.", + arguments = { + {type = "Dict", name = "dict", optional = false, }, + {type = "string", name = "string", optional = false, }, + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + }, + }, + set = { + type = "function", + shortdesc = "Set Object in Dict.", + arguments = { + {type = "Dict", name = "dict", optional = false, }, + {type = "string", name = "string", optional = false, }, + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + }, + }, + remove = { + type = "function", + shortdesc = "Remove entry from Dict.", + arguments = { + {type = "Dict", name = "dict", optional = false, }, + {type = "string", name = "string", optional = false, }, + }, + returnvalues = { + }, + }, + is = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Dict", name = "dict", optional = false, }, + {type = "string", name = "string", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + lookup = { + type = "function", + shortdesc = "Look up Dict entry.", + arguments = { + {type = "Dict", name = "dict", optional = false, }, + {type = "string", name = "string", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + lookupNF = { + type = "function", + shortdesc = "Look up Dict entry, not resolving indirection.", + arguments = { + {type = "Dict", name = "dict", optional = false, }, + {type = "string", name = "string", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + lookupInt = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Dict", name = "dict", optional = false, }, + {type = "string", name = "string", optional = false, }, + {type = "string", name = "string", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getKey = { + type = "function", + shortdesc = "Get key from Dict by number.", + arguments = { + {type = "Dict", name = "dict", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + getVal = { + type = "function", + shortdesc = "Get value from Dict by number.", + arguments = { + {type = "Dict", name = "dict", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + getValNF = { + type = "function", + shortdesc = "Get value from Dict by number, not resolving indirection.", + arguments = { + {type = "Dict", name = "dict", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + }, +------------------------------------------------------------------------ + LinkDest = { + isOK = { + type = "function", + shortdesc = "Check if LinkDest object is ok.", + arguments = { + {type = "LinkDest", name = "linkdest", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + getKind = { + type = "function", + shortdesc = "Get number of LinkDest kind.", + arguments = { + {type = "LinkDest", name = "linkdest", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getKindName = { + type = "function", + shortdesc = "Get name of LinkDest kind.", + arguments = { + {type = "LinkDest", name = "linkdest", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + isPageRef = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "LinkDest", name = "linkdest", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + getPageNum = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "LinkDest", name = "linkdest", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getPageRef = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "LinkDest", name = "linkdest", optional = false, }, + }, + returnvalues = { + {type = "Ref", name = "var", optional = false, }, + }, + }, + getLeft = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "LinkDest", name = "linkdest", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getBottom = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "LinkDest", name = "linkdest", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getRight = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "LinkDest", name = "linkdest", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getTop = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "LinkDest", name = "linkdest", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getZoom = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "LinkDest", name = "linkdest", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getChangeLeft = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "LinkDest", name = "linkdest", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + getChangeTop = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "LinkDest", name = "linkdest", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + getChangeZoom = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "LinkDest", name = "linkdest", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + }, +------------------------------------------------------------------------ + Object = { + initBool = { + type = "function", + shortdesc = "Initialize a Bool-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "boolean", name = "boolean", optional = false, }, + }, + returnvalues = { + }, + }, + initInt = { + type = "function", + shortdesc = "Initialize an Int-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + }, + }, + initReal = { + type = "function", + shortdesc = "Initialize a Real-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "number", name = "number", optional = false, }, + }, + returnvalues = { + }, + }, + initString = { + type = "function", + shortdesc = "Initialize a String-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "string", name = "string", optional = false, }, + }, + returnvalues = { + }, + }, + initName = { + type = "function", + shortdesc = "Initialize a Name-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "string", name = "string", optional = false, }, + }, + returnvalues = { + }, + }, + initNull = { + type = "function", + shortdesc = "Initialize a Null-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + }, + }, + initArray = { + type = "function", + shortdesc = "Initialize an Array-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + }, + }, + initDict = { + type = "function", + shortdesc = "Initialize a Dict-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + }, + }, + initStream = { + type = "function", + shortdesc = "Initialize a Stream-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "Stream", name = "stream", optional = false, }, + }, + returnvalues = { + }, + }, + initRef = { + type = "function", + shortdesc = "Initialize a Ref-type object by object number and generation.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "integer", name = "object number", optional = false, }, + {type = "integer", name = "object generation", optional = false, }, + }, + returnvalues = { + }, + }, + initCmd = { + type = "function", + shortdesc = "Initialize a Cmd-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "string", name = "string", optional = false, }, + }, + returnvalues = { + }, + }, + initError = { + type = "function", + shortdesc = "Initialize an Error-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + }, + }, + initEOF = { + type = "function", + shortdesc = "Initialize an EOF-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + }, + }, + fetch = { + type = "function", + shortdesc = "If object is of type Ref, fetch and return the referenced object. Otherwise, return a copy of the object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + getType = { + type = "function", + shortdesc = "Get object type as a number (enum ObjType).", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getTypeName = { + type = "function", + shortdesc = "Get object type name.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + isBool = { + type = "function", + shortdesc = "Check if object is of type Bool.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + isInt = { + type = "function", + shortdesc = "Check if object is of type Int.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + isReal = { + type = "function", + shortdesc = "Check if object is of type Real.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + isNum = { + type = "function", + shortdesc = "Check if object is of type Num.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + isString = { + type = "function", + shortdesc = "Check if object is of type String.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + isName = { + type = "function", + shortdesc = "Check if object is of type Name.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + isNull = { + type = "function", + shortdesc = "Check if object is of type Null.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + isArray = { + type = "function", + shortdesc = "Check if object is of type Array.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + isDict = { + type = "function", + shortdesc = "Check if object is of type Dict.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + isStream = { + type = "function", + shortdesc = "Check if object is of type Stream.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + isRef = { + type = "function", + shortdesc = "Check if object is of type Ref.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + isCmd = { + type = "function", + shortdesc = "Check if object is of type Cmd.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + isError = { + type = "function", + shortdesc = "Check if object is of type Error.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + isEOF = { + type = "function", + shortdesc = "Check if object is of type EOF.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + isNone = { + type = "function", + shortdesc = "Check if object is of type None.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + getBool = { + type = "function", + shortdesc = "Get boolean from Bool-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + getInt = { + type = "function", + shortdesc = "Get integer from Int-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getReal = { + type = "function", + shortdesc = "Get number from Real-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getNum = { + type = "function", + shortdesc = "Get number from Num-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getString = { + type = "function", + shortdesc = "Get string from String-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + getName = { + type = "function", + shortdesc = "Get name from Name-type object as a string.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + getArray = { + type = "function", + shortdesc = "Get Array from Array-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "Array", name = "var", optional = false, }, + }, + }, + getDict = { + type = "function", + shortdesc = "Get Dict from Dict-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "Dict", name = "var", optional = false, }, + }, + }, + getStream = { + type = "function", + shortdesc = "Get Stream from Stream-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "Stream", name = "var", optional = false, }, + }, + }, + getRef = { + type = "function", + shortdesc = "Get Ref from Ref-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "Ref", name = "var", optional = false, }, + }, + }, + getRefNum = { + type = "function", + shortdesc = "Get object number from Ref-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getRefGen = { + type = "function", + shortdesc = "Get object generation from Ref-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getCmd = { + shortdesc = "Get command from Cmd-type object as a string.", + shortdesc = "TODO", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + arrayGetLength = { + type = "function", + shortdesc = "Get array length from Array-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + arrayAdd = { + type = "function", + shortdesc = "Add Object to Array-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + }, + }, + arrayGet = { + type = "function", + shortdesc = "Get Object from Array-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + arrayGetNF = { + type = "function", + shortdesc = "Get Object from Array-type object, not resolving indirection.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + dictGetLength = { + type = "function", + shortdesc = "Get dictionary length from Dict-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + dictAdd = { + type = "function", + shortdesc = "Add Object to Dict-type object.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "string", name = "string", optional = false, }, + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + }, + }, + dictSet = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "string", name = "string", optional = false, }, + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + }, + }, + dictLookup = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "string", name = "string", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + dictLookupNF = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "string", name = "string", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + dictGetKey = { + type = "function", + shortdesc = "Get Dict key of Dict-type object by number.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + dictGetVal = { + type = "function", + shortdesc = "Get Dict value of Dict-type object by number.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + dictGetValNF = { + type = "function", + shortdesc = "Get Dict value of Dict-type object by number, not resolving indirection.", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + streamIs = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + streamReset = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + }, + }, + streamGetChar = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + streamLookChar = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + streamGetPos = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + streamSetPos = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Object", name = "object", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + }, + }, + streamGetDict = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Object", name = "object", optional = false, }, + }, + returnvalues = { + {type = "Dict", name = "var", optional = false, }, + }, + }, + }, +------------------------------------------------------------------------ + Page = { + isOK = { + type = "function", + shortdesc = "Check if Page object is ok.", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + getNum = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getMediaBox = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "PDFRectangle", name = "var", optional = false, }, + }, + }, + getCropBox = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "PDFRectangle", name = "var", optional = false, }, + }, + }, + isCropped = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + getMediaWidth = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getMediaHeight = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getCropWidth = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getCropHeight = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getBleedBox = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "PDFRectangle", name = "var", optional = false, }, + }, + }, + getTrimBox = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "PDFRectangle", name = "var", optional = false, }, + }, + }, + getArtBox = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "PDFRectangle", name = "var", optional = false, }, + }, + }, + getRotate = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getLastModified = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + getBoxColorInfo = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "Dict", name = "var", optional = false, }, + }, + }, + getGroup = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "Dict", name = "var", optional = false, }, + }, + }, + getMetadata = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "Stream", name = "var", optional = false, }, + }, + }, + getPieceInfo = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "Dict", name = "var", optional = false, }, + }, + }, + getSeparationInfo = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "Dict", name = "var", optional = false, }, + }, + }, + getResourceDict = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "Dict", name = "var", optional = false, }, + }, + }, + getAnnots = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + getLinks = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + {type = "Catalog", name = "catalog", optional = false, }, + }, + returnvalues = { + {type = "Links", name = "var", optional = false, }, + }, + }, + getContents = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Page", name = "page", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + }, +------------------------------------------------------------------------ + PDFDoc = { + isOK = { + type = "function", + shortdesc = "Check if PDFDoc object is ok.", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + getErrorCode = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getErrorCodeName = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + getFileName = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + getXRef = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "XRef", name = "var", optional = false, }, + }, + }, + getCatalog = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "Catalog", name = "var", optional = false, }, + }, + }, + getPageMediaWidth = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getPageMediaHeight = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getPageCropWidth = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getPageCropHeight = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "number", name = "var", optional = false, }, + }, + }, + getNumPages = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + readMetadata = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + getStructTreeRoot = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + findPage = { + type = "function", + shortdesc = "Get a Page number by object number and generation.", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + {type = "integer", name = "object number", optional = false, }, + {type = "integer", name = "object generation", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getLinks = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "Links", name = "var", optional = false, }, + }, + }, + findDest = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + {type = "string", name = "string", optional = false, }, + }, + returnvalues = { + {type = "LinkDest", name = "var", optional = false, }, + }, + }, + isEncrypted = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + okToPrint = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + okToChange = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + okToCopy = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + okToAddNotes = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + isLinearized = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + getDocInfo = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + getDocInfoNF = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + getPDFMajorVersion = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getPDFMinorVersion = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFDoc", name = "pdfdoc", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + }, +------------------------------------------------------------------------ + PDFRectangle = { + isValid = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "PDFRectangle", name = "pdfrectangle", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + }, +------------------------------------------------------------------------ + Stream = { + getKind = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Stream", name = "stream", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getKindName = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Stream", name = "stream", optional = false, }, + }, + returnvalues = { + {type = "string", name = "var", optional = false, }, + }, + }, + reset = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Stream", name = "stream", optional = false, }, + }, + returnvalues = { + }, + }, + close = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Stream", name = "stream", optional = false, }, + }, + returnvalues = { + }, + }, + getChar = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Stream", name = "stream", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + lookChar = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Stream", name = "stream", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getRawChar = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Stream", name = "stream", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getUnfilteredChar = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Stream", name = "stream", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + unfilteredReset = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Stream", name = "stream", optional = false, }, + }, + returnvalues = { + }, + }, + getPos = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Stream", name = "stream", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + isBinary = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Stream", name = "stream", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + getUndecodedStream = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Stream", name = "stream", optional = false, }, + }, + returnvalues = { + {type = "Stream", name = "var", optional = false, }, + }, + }, + getDict = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "Stream", name = "stream", optional = false, }, + }, + returnvalues = { + {type = "Dict", name = "var", optional = false, }, + }, + }, + }, +------------------------------------------------------------------------ + XRef = { + isOK = { + type = "function", + shortdesc = "Check if XRef object is ok.", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + getErrorCode = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + isEncrypted = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + okToPrint = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + okToPrintHighRes = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + okToChange = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + okToCopy = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + okToAddNotes = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + okToFillForm = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + okToAccessibility = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + okToAssemble = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "boolean", name = "var", optional = false, }, + }, + }, + getCatalog = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + fetch = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + {type = "integer", name = "integer", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + getDocInfo = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + getDocInfoNF = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + getNumObjects = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getRootNum = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getRootGen = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getSize = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "integer", name = "var", optional = false, }, + }, + }, + getTrailerDict = { + type = "function", + shortdesc = "TODO", + arguments = { + {type = "XRef", name = "xref", optional = false, }, + }, + returnvalues = { + {type = "Object", name = "var", optional = false, }, + }, + }, + }, +------------------------------------------------------------------------ + } +} + +return fdata_epdf diff --git a/Master/texmf-dist/doc/luatex/base/fdata_img.lua b/Master/texmf-dist/doc/luatex/base/fdata_img.lua new file mode 100644 index 00000000000..03b8259ea96 --- /dev/null +++ b/Master/texmf-dist/doc/luatex/base/fdata_img.lua @@ -0,0 +1,156 @@ +-- $Id: fdata_img.lua 4106 2011-04-10 12:51:54Z hhenkel $ + +local fdata_img = { + ["functions"] = { + ["boxes"] = { + ["arguments"] = {}, + ["returnvalues"] = { + { + ["name"] = "boxes", + ["optional"] = false, + ["type"] = "table", + }, + }, + ["shortdesc"] = "Returns a list of supported image bounding box names.", + ["type"] = "function", + }, + ["copy"] = { + ["arguments"] = { + { + ["name"] = "var", + ["optional"] = false, + ["type"] = "image", + }, + }, + ["returnvalues"] = { + { + ["name"] = "var", + ["optional"] = false, + ["type"] = "image", + }, + }, + ["shortdesc"] = "Copy an image.", + ["type"] = "function", + }, + ["immediatewrite"] = { + ["arguments"] = { + { + ["name"] = "var", + ["optional"] = false, + ["type"] = "image", + }, + }, + ["returnvalues"] = { + { + ["name"] = "var", + ["optional"] = false, + ["type"] = "image", + }, + }, + ["shortdesc"] = "Write the image to the PDF file immediately.", + ["type"] = "function", + }, + ["keys"] = { + ["arguments"] = {}, + ["returnvalues"] = { + { + ["name"] = "keys", + ["optional"] = false, + ["type"] = "table", + }, + }, + ["shortdesc"] = "Returns a table with possible image table keys, including retrieved information.", + ["type"] = "function", + }, + ["new"] = { + ["arguments"] = { + { + ["name"] = "var", + ["optional"] = true, + ["type"] = "table", + }, + }, + ["returnvalues"] = { + { + ["name"] = "var", + ["optional"] = false, + ["type"] = "image", + }, + }, + ["shortdesc"] = "This function creates an \\quote {image} object. Allowed fields\ + in the table: \\aliteral{filename} (required), \\aliteral{width},\ + \\aliteral{depth}, \\aliteral{height}, \\aliteral{attr}, \\aliteral{page}, \\aliteral{pagebox}, \\aliteral{colorspace}).", + ["type"] = "function", + }, + ["node"] = { + ["arguments"] = { + { + ["name"] = "var", + ["optional"] = false, + ["type"] = "image", + }, + }, + ["returnvalues"] = { + { + ["name"] = "n", + ["optional"] = false, + ["type"] = "node", + }, + }, + ["shortdesc"] = "Returns the node associated with an image.", + ["type"] = "function", + }, + ["scan"] = { + ["arguments"] = { + { + ["name"] = "var", + ["optional"] = false, + ["type"] = "image", + }, + }, + ["returnvalues"] = { + { + ["name"] = "var", + ["optional"] = false, + ["type"] = "image", + }, + }, + ["shortdesc"] = "Processes an image file and stores the retrieved information in the image object.", + ["type"] = "function", + }, + ["types"] = { + ["arguments"] = {}, + ["returnvalues"] = { + { + ["name"] = "types", + ["optional"] = false, + ["type"] = "table", + }, + }, + ["shortdesc"] = "Returns a list of supported image types.", + ["type"] = "function", + }, + ["write"] = { + ["arguments"] = { + { + ["name"] = "var", + ["optional"] = false, + ["type"] = "image", + }, + }, + ["returnvalues"] = { + { + ["name"] = "var", + ["optional"] = false, + ["type"] = "image", + }, + }, + ["shortdesc"] = "Write the image to the PDF file.", + ["type"] = "function", + }, + }, + ["methods"] = { + }, +} + +return fdata_img diff --git a/Master/texmf-dist/doc/luatex/base/functionref.pdf b/Master/texmf-dist/doc/luatex/base/functionref.pdf Binary files differnew file mode 100644 index 00000000000..a67306f1033 --- /dev/null +++ b/Master/texmf-dist/doc/luatex/base/functionref.pdf diff --git a/Master/texmf-dist/doc/luatex/base/functionref.tex b/Master/texmf-dist/doc/luatex/base/functionref.tex new file mode 100644 index 00000000000..a2f3dd08444 --- /dev/null +++ b/Master/texmf-dist/doc/luatex/base/functionref.tex @@ -0,0 +1,1088 @@ +% $Id$ + +\nonknuthmode +\catcode`\|=12 + +\setuplayout[backspace=1cm,edge=0pt,topspace=1cm, + margin=0pt,location=middle,height=fit,footer=0pt,width=middle, + header=24pt] + +\setuptabulate[before=] +\setuppagenumbering[location=,alternative=doublesided] +\setupheadertexts[Luatex 0.66 short reference][pagenumber] +\setupheader[style=\ssbf] + +\setupalign[flushleft] + +\setuphead[section][number=no,style=\ssbfb,after=,before=\blank] +\setuphead[subsection][number=no,after=,style=\ssbf] + +\switchtobodyfont[times,9pt] +\usemodule[abr-01] +\def\DPI{DPI} + +\setuptype[style=\ss] +\setuptyping[style=\ss] + +\def\afunction#1{{\ss\bf #1}} +\def\aliteral#1{{\ss "#1"}} + +\def\showitemnoret#1#2#3#4#5#6% + {\hangafter=1\hangindent=12pt + \noindent {\ss \afunction{#1#6#2}#3}% + \hskip 12pt plus .5\hsize\penalty0 \hskip 0pt plus -.5\hsize + #5\par} + +\def\showitemret#1#2#3#4#5#6% + {\hangafter=1\hangindent=12pt + \noindent {\ss #4 = \afunction{#1#6#2}#3}% + \hskip 12pt plus .5\hsize\penalty0\hskip 0pt plus -.5\hsize + #5\par} + +\def\luafunction#1#2#3#4#5% + {\doifemptyelse{#4} + {\showitemnoret{#1}{#2}{#3}{#4}{#5}{.}} + {\showitemret{#1}{#2}{#3}{#4}{#5}{.}}\par} + +\def\luamethod#1#2#3#4#5% + {\doifemptyelse{#4} + {\showitemnoret{#1}{#2}{#3}{#4}{#5}{:}} + {\showitemret{#1}{#2}{#3}{#4}{#5}{:}}\par} + +\def\luacallback#1#2#3#4#5% + {\doifemptyelse{#4} + {\showitemnoret{}{#2}{#3}{#4}{#5}{}} + {\showitemret{}{#2}{#3}{#4}{#5}{}}\par} + +\startluacode +local fdata = dofile('fdata.lua') +function showfunction (t,o,f) + local val + local method + if o == nil then + val = fdata[t]["functions"][f] + method = false + else + val = fdata[t]["methods"][o][f] + method = true + end + local r = {} + local a = {} + if #val.returnvalues > 0 then + for i,v in ipairs (val.returnvalues) do + if v.optional then + r[#r+1] = '[' .. v.type .. ']' + else + r[#r+1] = v.type + end + end + end + if #val.arguments > 0 then + for i,v in ipairs (val.arguments) do + if (method == false) or (i > 1) then + if v.optional then + a[#a+1] = '[' .. v.type .. ']' + else + a[#a+1] = v.type + end + end + end + end + if method == false then + tex.sprint(string.format('\\lua%s{%s}{%s}{(%s)}{%s}{%s}', val.type, t, f, + table.concat(a,', '),table.concat(r,', '), val.shortdesc)) + else + tex.sprint(string.format('\\lua%s{%s}{%s}{(%s)}{%s}{%s}', "method", o, f, + table.concat(a,', '),table.concat(r,', '), val.shortdesc)) + end +end + +\stopluacode + +\def\presentfunction#1#2{\directlua{showfunction("#1",nil,"#2")}} +\def\presentmethod#1#2#3{\directlua{showfunction("#1","#2","#3")}} + +\starttext + + +\startcolumns + +\section{Getting started} + +\type{luatex} is a typesetter; \type{texlua} and \type{luatex --luaonly} are lua interpreters. +In lua interpreter mode, the lua tables \type{tex}, \type{token}, \type{node}, and \type{pdf} +are unavailable. + +\blank + +\tex{directlua}\type{} expands immediately, \tex{latelua}\type{} +is processed during \tex{shipout}. + +\blank + +\starttabulate[|l|p|] +\NC \tex{luatexversion}: \NC {\bf\the\luatexversion} \NC\NR +\NC \tex{luatexrevision}: \NC {\bf\luatexrevision} \NC\NR +\NC \tex{luatexdatestamp}: \NC {\bf\luatexdatestamp} \NC\NR +\stoptabulate + +\subsection{Attributes} + +There are 65536 attribute registers, each of which obeys grouping +and can have any integer value other than the most negative number +(which indicates the value is unset). + +\subsection{Catcode tables} + +There are 65536 category code tables, each of which can hold the full range +of Unicode. Category table manipulation: + +\starttabulate[|l|p|] +\NC \tex{initcatcodetable} $N$ \NC initialize an \quote{initex} table in $N$ \NC\NR +\NC \tex{savecatcodetable} $N$\NC save the current category codes to table $N$ globally\NC\NR +\NC \tex{catcodetable} $N$ \NC switch to predefined table $N$\NC\NR +\stoptabulate + +\subsection{Filenames} + +\tex{input}, \tex{openin}, and \tex{font} accept braced file names to allow embedded spaces. + +\subsection{Images and forms} + +\type{\pdfrefximage} and \type{\pdfrefxform} accept optional dimension parameters +in the same format as \type{\pdfximage}. + +\section{Preloaded lua modules} + +\starttabulate[|l|l|] +\NC\type{slnunicode}\NC\hyphenatedurl{http://luaforge.net/projects/sln}\NC\NR +\NC\type{luazip} \NC\hyphenatedurl{http://www.keplerproject.org/luazip/}\NC\NR +\NC\type{luafilesystem} \NC\hyphenatedurl{http://www.keplerproject.org/luafilesystem/}\NC\NR +\NC\type{lpeg} \NC\hyphenatedurl{http://www.inf.puc-rio.br/~roberto/lpeg.html}\NC\NR +\NC\type{lzlib} \NC\hyphenatedurl{http://luaforge.net/projects/lzlib/}\NC\NR +\NC\type{md5} \NC\hyphenatedurl{http://www.inf.puc-rio.br/~roberto/md5/md5-5/md5.html}\NC\NR +\NC\type{luasocket} \NC \kern -12pt\hyphenatedurl{http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/}\NC\NR +\stoptabulate + +\section{String extensions} + +\presentfunction{string}{explode} +\presentfunction{string}{utfvalues} +\presentfunction{string}{utfcharacters} +\presentfunction{string}{characters} +\presentfunction{string}{characterpairs} +\presentfunction{string}{bytes} +\presentfunction{string}{bytepairs} + +\section{Operating system extensions} + +\presentfunction{os}{exec} +\presentfunction{os}{spawn} +\presentfunction{os}{setenv} +\presentfunction{os}{gettimeofday} +\presentfunction{os}{times} +\presentfunction{os}{tmpdir} +\presentfunction{os}{uname} +\presentfunction{os}{selfdir} + +\section{Lua file system extensions} + +\presentfunction{lfs}{isdir} +\presentfunction{lfs}{isfile} +\presentfunction{lfs}{shortname} +\presentfunction{lfs}{readlink} + +\section{Callback table} +\presentfunction{callback}{register} +\presentfunction{callback}{list} +\presentfunction{callback}{find} + +\subsection{File discovery callbacks} + +\presentfunction{callback}{find_read_file} +\presentfunction{callback}{find_write_file} +\presentfunction{callback}{find_font_file} +\presentfunction{callback}{find_output_file} +\presentfunction{callback}{find_format_file} +\presentfunction{callback}{find_vf_file} +\presentfunction{callback}{find_map_file} +\presentfunction{callback}{find_enc_file} +\presentfunction{callback}{find_subfont_file} +\presentfunction{callback}{find_pk_file} +\presentfunction{callback}{find_data_file} +\presentfunction{callback}{find_opentype_file} +\presentfunction{callback}{find_truetype_file} +\presentfunction{callback}{find_type1_file} +\presentfunction{callback}{find_image_file} + +\subsection{File reading callbacks} + +\presentfunction{callback}{open_read_file} +\presentfunction{callback}{reader} +\presentfunction{callback}{close} + +\blank + +\presentfunction{callback}{read_font_file} +\presentfunction{callback}{read_vf_file} +\presentfunction{callback}{read_map_file} +\presentfunction{callback}{read_enc_file} +\presentfunction{callback}{read_sfd_file} +\presentfunction{callback}{read_pk_file} +\presentfunction{callback}{read_data_file} +\presentfunction{callback}{read_truetype_file} +\presentfunction{callback}{read_type1_file} +\presentfunction{callback}{read_opentype_file} + +\subsection{Tokenisation changes callbacks} + +\presentfunction{callback}{process_input_buffer} +\presentfunction{callback}{process_output_buffer} +\presentfunction{callback}{token_filter} + +\subsection{Node list callbacks} + +\presentfunction{callback}{buildpage_filter} + +\afunction{buildpage_filter} context information: +\starttabulate[|lf\ss|p|] +\NC \ssbf value \NC \bf explanation \NC\NR +\NC alignment \NC a (partial) alignment is being added \NC\NR +\NC after_output \NC an output routine has just finished \NC\NR +\NC box \NC a typeset box is being added \NC\NR +\NC new_graf \NC the beginning of a new paragraph \NC\NR +\NC vmode_par \NC \tex{par} was found in vertical mode \NC\NR +\NC hmode_par \NC \tex{par} was found in horizontal mode \NC\NR +\NC insert \NC an insert is added \NC\NR +\NC penalty \NC a penalty (in vertical mode) \NC\NR +\NC before_display \NC immediately before a display starts \NC\NR +\NC after_display \NC a display is finished \NC\NR +\NC end \NC \LUATEX\ is terminating (it's all over)\NC\NR +\stoptabulate + +\presentfunction{callback}{pre_linebreak_filter} + +\afunction{pre_linebreak_filter} context information: +\starttabulate[|lf\ss|p|] +\NC \ssbf value \NC \bf explanation \NC\NR +\NC <empty> \NC main vertical list \NC\NR +\NC hbox \NC \tex{hbox} in horizontal mode \NC\NR +\NC adjusted_hbox\NC \tex{hbox} in vertical mode \NC\NR +\NC vbox \NC \tex{vbox} \NC\NR +\NC vtop \NC \tex{vtop} \NC\NR +\NC align \NC \tex{halign} or \tex{valign} \NC\NR +\NC disc \NC discretionaries \NC\NR +\NC insert \NC packaging an insert \NC\NR +\NC vcenter \NC \tex{vcenter} \NC\NR +\NC local_box \NC \tex{localleftbox} or \tex{localrightbox} \NC\NR +\NC split_off \NC top of a \tex{vsplit} \NC\NR +\NC split_keep \NC remainder of a \tex{vsplit} \NC\NR +\NC align_set \NC alignment cell \NC\NR +\NC fin_row \NC alignment row \NC\NR +\stoptabulate + +\presentfunction{callback}{linebreak_filter} +\presentfunction{callback}{post_linebreak_filter} +\presentfunction{callback}{hpack_filter} +\presentfunction{callback}{vpack_filter} +\presentfunction{callback}{pre_output_filter} +\presentfunction{callback}{hyphenate} +\presentfunction{callback}{ligaturing} +\presentfunction{callback}{kerning} +\presentfunction{callback}{mlist_to_hlist} + +\subsection{Font definition callback} +\presentfunction{callback}{define_font} + +\subsection{Event callbacks} + +\presentfunction{callback}{pre_dump} +\presentfunction{callback}{stop_run} +\presentfunction{callback}{start_run} +\presentfunction{callback}{start_page_number} +\presentfunction{callback}{stop_page_number} +\presentfunction{callback}{show_error_hook} +\presentfunction{callback}{finish_pdffile} + +%*********************************************************************** + +\section{Epdf table} + +--- All constructors: + +\presentfunction{epdf}{open} +\presentfunction{epdf}{Annot} +\presentfunction{epdf}{Annots} +\presentfunction{epdf}{Array} +\presentfunction{epdf}{Dict} +\presentfunction{epdf}{Object} +\presentfunction{epdf}{PDFRectangle} + +--- Annot methods: + +\presentmethod{epdf}{Annot}{isOK} +\presentmethod{epdf}{Annot}{getAppearance} +\presentmethod{epdf}{Annot}{getBorder} +\presentmethod{epdf}{Annot}{match} + +--- AnnotBorderStyle methods: + +\presentmethod{epdf}{AnnotBorderStyle}{getWidth} + +--- Annots methods: + +\presentmethod{epdf}{Annots}{getNumAnnots} +\presentmethod{epdf}{Annots}{getAnnot} + +--- Array methods: + +\presentmethod{epdf}{Array}{incRef} +\presentmethod{epdf}{Array}{decRef} +\presentmethod{epdf}{Array}{getLength} +\presentmethod{epdf}{Array}{add} +\presentmethod{epdf}{Array}{get} +\presentmethod{epdf}{Array}{getNF} +\presentmethod{epdf}{Array}{getString} + +--- Catalog methods: + +\presentmethod{epdf}{Catalog}{isOK} +\presentmethod{epdf}{Catalog}{getNumPages} +\presentmethod{epdf}{Catalog}{getPage} +\presentmethod{epdf}{Catalog}{getPageRef} +\presentmethod{epdf}{Catalog}{getBaseURI} +\presentmethod{epdf}{Catalog}{readMetadata} +\presentmethod{epdf}{Catalog}{getStructTreeRoot} +\presentmethod{epdf}{Catalog}{findPage} +\presentmethod{epdf}{Catalog}{findDest} +\presentmethod{epdf}{Catalog}{getDests} +\presentmethod{epdf}{Catalog}{numEmbeddedFiles} +\presentmethod{epdf}{Catalog}{embeddedFile} +\presentmethod{epdf}{Catalog}{numJS} +\presentmethod{epdf}{Catalog}{getJS} +\presentmethod{epdf}{Catalog}{getOutline} +\presentmethod{epdf}{Catalog}{getAcroForm} + +--- EmbFile methods: + +\presentmethod{epdf}{EmbFile}{name} +\presentmethod{epdf}{EmbFile}{description} +\presentmethod{epdf}{EmbFile}{size} +\presentmethod{epdf}{EmbFile}{modDate} +\presentmethod{epdf}{EmbFile}{createDate} +\presentmethod{epdf}{EmbFile}{checksum} +\presentmethod{epdf}{EmbFile}{mimeType} +\presentmethod{epdf}{EmbFile}{streamObject} +\presentmethod{epdf}{EmbFile}{isOk} + +--- Dict methods: + +\presentmethod{epdf}{Dict}{incRef} +\presentmethod{epdf}{Dict}{decRef} +\presentmethod{epdf}{Dict}{getLength} +\presentmethod{epdf}{Dict}{add} +\presentmethod{epdf}{Dict}{set} +\presentmethod{epdf}{Dict}{remove} +\presentmethod{epdf}{Dict}{is} +\presentmethod{epdf}{Dict}{lookup} +\presentmethod{epdf}{Dict}{lookupNF} +\presentmethod{epdf}{Dict}{lookupInt} +\presentmethod{epdf}{Dict}{getKey} +\presentmethod{epdf}{Dict}{getVal} +\presentmethod{epdf}{Dict}{getValNF} + +--- LinkDest methods: + +\presentmethod{epdf}{LinkDest}{isOK} +\presentmethod{epdf}{LinkDest}{getKind} +\presentmethod{epdf}{LinkDest}{getKindName} +\presentmethod{epdf}{LinkDest}{isPageRef} +\presentmethod{epdf}{LinkDest}{getPageNum} +\presentmethod{epdf}{LinkDest}{getPageRef} +\presentmethod{epdf}{LinkDest}{getLeft} +\presentmethod{epdf}{LinkDest}{getBottom} +\presentmethod{epdf}{LinkDest}{getRight} +\presentmethod{epdf}{LinkDest}{getTop} +\presentmethod{epdf}{LinkDest}{getZoom} +\presentmethod{epdf}{LinkDest}{getChangeLeft} +\presentmethod{epdf}{LinkDest}{getChangeTop} +\presentmethod{epdf}{LinkDest}{getChangeZoom} + +--- Object methods: + +\presentmethod{epdf}{Object}{initBool} +\presentmethod{epdf}{Object}{initInt} +\presentmethod{epdf}{Object}{initReal} +\presentmethod{epdf}{Object}{initString} +\presentmethod{epdf}{Object}{initName} +\presentmethod{epdf}{Object}{initNull} +\presentmethod{epdf}{Object}{initArray} +\presentmethod{epdf}{Object}{initDict} +\presentmethod{epdf}{Object}{initStream} +\presentmethod{epdf}{Object}{initRef} +\presentmethod{epdf}{Object}{initCmd} +\presentmethod{epdf}{Object}{initError} +\presentmethod{epdf}{Object}{initEOF} +\presentmethod{epdf}{Object}{fetch} +\presentmethod{epdf}{Object}{getType} +\presentmethod{epdf}{Object}{getTypeName} +\presentmethod{epdf}{Object}{isBool} +\presentmethod{epdf}{Object}{isInt} +\presentmethod{epdf}{Object}{isReal} +\presentmethod{epdf}{Object}{isNum} +\presentmethod{epdf}{Object}{isString} +\presentmethod{epdf}{Object}{isName} +\presentmethod{epdf}{Object}{isNull} +\presentmethod{epdf}{Object}{isArray} +\presentmethod{epdf}{Object}{isDict} +\presentmethod{epdf}{Object}{isStream} +\presentmethod{epdf}{Object}{isRef} +\presentmethod{epdf}{Object}{isCmd} +\presentmethod{epdf}{Object}{isError} +\presentmethod{epdf}{Object}{isEOF} +\presentmethod{epdf}{Object}{isNone} +\presentmethod{epdf}{Object}{getBool} +\presentmethod{epdf}{Object}{getInt} +\presentmethod{epdf}{Object}{getReal} +\presentmethod{epdf}{Object}{getNum} +\presentmethod{epdf}{Object}{getString} +\presentmethod{epdf}{Object}{getName} +\presentmethod{epdf}{Object}{getArray} +\presentmethod{epdf}{Object}{getDict} +\presentmethod{epdf}{Object}{getStream} +\presentmethod{epdf}{Object}{getRef} +\presentmethod{epdf}{Object}{getRefNum} +\presentmethod{epdf}{Object}{getRefGen} +\presentmethod{epdf}{Object}{getCmd} +\presentmethod{epdf}{Object}{arrayGetLength} +\presentmethod{epdf}{Object}{arrayAdd} +\presentmethod{epdf}{Object}{arrayGet} +\presentmethod{epdf}{Object}{arrayGetNF} +\presentmethod{epdf}{Object}{dictGetLength} +\presentmethod{epdf}{Object}{dictAdd} +\presentmethod{epdf}{Object}{dictSet} +\presentmethod{epdf}{Object}{dictLookup} +\presentmethod{epdf}{Object}{dictLookupNF} +\presentmethod{epdf}{Object}{dictGetKey} +\presentmethod{epdf}{Object}{dictGetVal} +\presentmethod{epdf}{Object}{dictGetValNF} +\presentmethod{epdf}{Object}{streamIs} +\presentmethod{epdf}{Object}{streamReset} +\presentmethod{epdf}{Object}{streamGetChar} +\presentmethod{epdf}{Object}{streamLookChar} +\presentmethod{epdf}{Object}{streamGetPos} +\presentmethod{epdf}{Object}{streamSetPos} +\presentmethod{epdf}{Object}{streamGetDict} + +--- Page methods: + +\presentmethod{epdf}{Page}{isOK} +\presentmethod{epdf}{Page}{getNum} +\presentmethod{epdf}{Page}{getMediaBox} +\presentmethod{epdf}{Page}{getCropBox} +\presentmethod{epdf}{Page}{isCropped} +\presentmethod{epdf}{Page}{getMediaWidth} +\presentmethod{epdf}{Page}{getMediaHeight} +\presentmethod{epdf}{Page}{getCropWidth} +\presentmethod{epdf}{Page}{getCropHeight} +\presentmethod{epdf}{Page}{getBleedBox} +\presentmethod{epdf}{Page}{getTrimBox} +\presentmethod{epdf}{Page}{getArtBox} +\presentmethod{epdf}{Page}{getRotate} +\presentmethod{epdf}{Page}{getLastModified} +\presentmethod{epdf}{Page}{getBoxColorInfo} +\presentmethod{epdf}{Page}{getGroup} +\presentmethod{epdf}{Page}{getMetadata} +\presentmethod{epdf}{Page}{getPieceInfo} +\presentmethod{epdf}{Page}{getSeparationInfo} +\presentmethod{epdf}{Page}{getResourceDict} +\presentmethod{epdf}{Page}{getAnnots} +\presentmethod{epdf}{Page}{getLinks} +\presentmethod{epdf}{Page}{getContents} + +--- PDFDoc methods: + +\presentmethod{epdf}{PDFDoc}{isOK} +\presentmethod{epdf}{PDFDoc}{getErrorCode} +\presentmethod{epdf}{PDFDoc}{getErrorCodeName} +\presentmethod{epdf}{PDFDoc}{getFileName} +\presentmethod{epdf}{PDFDoc}{getXRef} +\presentmethod{epdf}{PDFDoc}{getCatalog} +\presentmethod{epdf}{PDFDoc}{getPageMediaWidth} +\presentmethod{epdf}{PDFDoc}{getPageMediaHeight} +\presentmethod{epdf}{PDFDoc}{getPageCropWidth} +\presentmethod{epdf}{PDFDoc}{getPageCropHeight} +\presentmethod{epdf}{PDFDoc}{getNumPages} +\presentmethod{epdf}{PDFDoc}{readMetadata} +\presentmethod{epdf}{PDFDoc}{getStructTreeRoot} +\presentmethod{epdf}{PDFDoc}{findPage} +\presentmethod{epdf}{PDFDoc}{getLinks} +\presentmethod{epdf}{PDFDoc}{findDest} +\presentmethod{epdf}{PDFDoc}{isEncrypted} +\presentmethod{epdf}{PDFDoc}{okToPrint} +\presentmethod{epdf}{PDFDoc}{okToChange} +\presentmethod{epdf}{PDFDoc}{okToCopy} +\presentmethod{epdf}{PDFDoc}{okToAddNotes} +\presentmethod{epdf}{PDFDoc}{isLinearized} +\presentmethod{epdf}{PDFDoc}{getDocInfo} +\presentmethod{epdf}{PDFDoc}{getDocInfoNF} +\presentmethod{epdf}{PDFDoc}{getPDFMajorVersion} +\presentmethod{epdf}{PDFDoc}{getPDFMinorVersion} + +--- PDFRectangle methods: + +\presentmethod{epdf}{PDFRectangle}{isValid} + +--- Stream methods: + +\presentmethod{epdf}{Stream}{getKind} +\presentmethod{epdf}{Stream}{getKindName} +\presentmethod{epdf}{Stream}{reset} +\presentmethod{epdf}{Stream}{close} +\presentmethod{epdf}{Stream}{getChar} +\presentmethod{epdf}{Stream}{lookChar} +\presentmethod{epdf}{Stream}{getRawChar} +\presentmethod{epdf}{Stream}{getUnfilteredChar} +\presentmethod{epdf}{Stream}{unfilteredReset} +\presentmethod{epdf}{Stream}{getPos} +\presentmethod{epdf}{Stream}{isBinary} +\presentmethod{epdf}{Stream}{getUndecodedStream} +\presentmethod{epdf}{Stream}{getDict} + +--- XRef methods: + +\presentmethod{epdf}{XRef}{isOK} +\presentmethod{epdf}{XRef}{getErrorCode} +\presentmethod{epdf}{XRef}{isEncrypted} +\presentmethod{epdf}{XRef}{okToPrint} +\presentmethod{epdf}{XRef}{okToPrintHighRes} +\presentmethod{epdf}{XRef}{okToChange} +\presentmethod{epdf}{XRef}{okToCopy} +\presentmethod{epdf}{XRef}{okToAddNotes} +\presentmethod{epdf}{XRef}{okToFillForm} +\presentmethod{epdf}{XRef}{okToAccessibility} +\presentmethod{epdf}{XRef}{okToAssemble} +\presentmethod{epdf}{XRef}{getCatalog} +\presentmethod{epdf}{XRef}{fetch} +\presentmethod{epdf}{XRef}{getDocInfo} +\presentmethod{epdf}{XRef}{getDocInfoNF} +\presentmethod{epdf}{XRef}{getNumObjects} +\presentmethod{epdf}{XRef}{getRootNum} +\presentmethod{epdf}{XRef}{getRootGen} +\presentmethod{epdf}{XRef}{getSize} +\presentmethod{epdf}{XRef}{getTrailerDict} + +%*********************************************************************** + +\section{Font table} + +\presentfunction{font}{read_tfm} +\presentfunction{font}{read_vf} +\presentfunction{font}{getfont} +\presentfunction{font}{setfont} +\presentfunction{font}{frozen} +\presentfunction{font}{define} +\presentfunction{font}{nextid} +\presentfunction{font}{id} +\presentfunction{font}{current} +\presentfunction{font}{max} +\presentfunction{font}{each} + +\section{Font loader table} + +\presentfunction{fontloader}{info} + +\afunction{fontloader.info} returned information: +\starttabulate[|lf\ss|lf\ss|p|] +\NC \ssbf key \NC \bf type \NC \bf explanation \NC\NR +\NC fontname \NC string \NC the \POSTSCRIPT\ name of the font\NC\NR +\NC fullname \NC string \NC the formal name of the font\NC\NR +\NC familyname \NC string \NC the family name this font belongs to\NC\NR +\NC weight \NC string \NC a string indicating the color value of the font\NC\NR +\NC version \NC string \NC the internal font version\NC\NR +\NC italicangle \NC float \NC the slant angle\NC\NR +\stoptabulate + +\presentfunction{fontloader}{open} + +Listing all of the substructure returned from +\afunction{fontloader.open} would take too much room, see the big +reference manual. + +\presentfunction{fontloader}{apply_featurefile} +\presentfunction{fontloader}{apply_afmfile} + + +\section{Image table} + +Full list of \type{<image>} object fields: +\starttabulate[|lf\ss|lf\ss|p|] +\NC \bf field name\NC \bf type \NC description \NC \NR +\NC depth \NC number \NC the image depth for \LUATEX\ (in scaled points)\NC \NR +\NC height \NC number \NC the image height for \LUATEX\ (in scaled points)\NC \NR +\NC width \NC number \NC the image width for \LUATEX\ (in scaled points)\NC \NR +\NC transform \NC number \NC the image transform, integer number 0..7\NC \NR +\NC attr \NC string \NC the image attributes for \LUATEX \NC \NR +\NC filename \NC string \NC the image file name \NC \NR +\NC stream \NC string \NC the raw stream data for an \type{/Xobject} \type{/Form} object\NC \NR +\NC page \NC ?? \NC the identifier for the requested image + page (type is number or string, + default is the number 1)\NC \NR +\NC pagebox \NC string \NC the requested bounding box, + one of \type {none}, \type {media}, \type {crop}, \type {bleed}, \type {trim}, \type {art} \NC \NR +\NC bbox \NC table \NC table with 4 boundingbox dimensions \type{llx}, \type{lly}, + \type{urx}, and \type{ury} overruling the \type{pagebox} entry\NC \NR +\NC filepath \NC string \NC the full (expanded) file name of the image \NC \NR +\NC colordepth \NC number \NC the number of bits used by the color space \NC \NR +\NC colorspace \NC number \NC the color space object number \NC \NR +\NC imagetype \NC string \NC one of \type {pdf}, \type {png}, \type {jpg}, \type {jbig2}, or \type{nil} \NC \NR +\NC objnum \NC number \NC the \PDF\ image object number \NC \NR +\NC index \NC number \NC the \PDF\ image name suffix \NC \NR +\NC pages \NC number \NC the total number of available pages \NC \NR +\NC xsize \NC number \NC the natural image width \NC \NR +\NC ysize \NC number \NC the natural image height \NC \NR +\NC xres \NC number \NC the horizontal natural image resolution (in \DPI) \NC \NR +\NC yres \NC number \NC the vertical natural image resolution (in \DPI) \NC \NR +\stoptabulate + +\presentfunction{img}{new} +\presentfunction{img}{keys} +\presentfunction{img}{scan} +\presentfunction{img}{copy} +\presentfunction{img}{write} +\presentfunction{img}{immediatewrite} +\presentfunction{img}{node} +\presentfunction{img}{types} +\presentfunction{img}{boxes} + +\section{Kpathsea table} + +\presentfunction{kpse}{set_program_name} +\presentfunction{kpse}{new} +\presentfunction{kpse}{find_file} +\presentfunction{kpse}{lookup} + +The \afunction{kpse.lookup} options match commandline arguments from +\type{kpsewhich}: + +\starttabulate[|lf\ss|lf\ss|p|] +\NC \ssbf key \NC \ssbf type \NC \ssbf description \NC \NR +\NC debug \NC number \NC set debugging flags for this lookup\NC \NR +\NC format \NC string \NC use specific file type (see list above)\NC \NR +\NC dpi \NC number \NC use this resolution for this lookup; default 600\NC \NR +\NC path \NC string \NC search in the given path\NC \NR +\NC all \NC boolean \NC output all matches, not just the first\NC \NR +\NC must-exist\NC boolean \NC search the disk as well as ls-R if necessary\NC \NR +\NC mktexpk \NC boolean \NC disable/enable mktexpk generation for this lookup\NC \NR +\NC mktextex \NC boolean \NC disable/enable mktextex generation for this lookup\NC \NR +\NC mktexmf \NC boolean \NC disable/enable mktexmf generation for this lookup\NC \NR +\NC mktextfm \NC boolean \NC disable/enable mktextfm generation for this lookup\NC \NR +\NC subdir \NC string + or table \NC only output matches whose directory part + ends with the given string(s) \NC \NR +\stoptabulate + +\presentfunction{kpse}{init_prog} +\presentfunction{kpse}{readable_file} +\presentfunction{kpse}{expand_path} +\presentfunction{kpse}{expand_var} +\presentfunction{kpse}{expand_braces} +\presentfunction{kpse}{show_path} +\presentfunction{kpse}{var_value} +\presentfunction{kpse}{version} + +\section{Language table} +\presentfunction{lang}{new} +\presentfunction{lang}{id} +\presentfunction{lang}{hyphenation} +\presentfunction{lang}{clear_hyphenation} +\presentfunction{lang}{clean} +\presentfunction{lang}{patterns} +\presentfunction{lang}{clear_patterns} +\presentfunction{lang}{prehyphenchar} +\presentfunction{lang}{posthyphenchar} +\presentfunction{lang}{preexhyphenchar} +\presentfunction{lang}{postexhyphenchar} +\presentfunction{lang}{hyphenate} + +\section{Lua table} + +There are 65536 bytecode registers, that are saved in the format file. +Assignments are always global. + +\presentfunction{lua}{getbytecode} +\presentfunction{lua}{setbytecode} + +They also be accessed via the virtual array \type{lua.bytecode[]}. + +The virtual array \type{lua.name[]} can be used to give names to lua +chunks. To use \type{lua.name[1]}, set \type{lua.name[1] = 'testname'} and \type{\directlua1{rubbish}}. + +\section{Metapost table} + +\presentfunction{mplib}{version} + +\presentfunction{mplib}{new} +\presentfunction{mp}{execute} +\presentfunction{mp}{finish} + +The return value of \type{mp:execute} and \type{mp:finish} is a table +with a few possible keys (only \type {status} is always guaranteed to be present). + +\starttabulate[|lf\ss|lf\ss|p|] +\NC log \NC string \NC output to the \quote {log} stream \NC \NR +\NC term \NC string \NC output to the \quote {term} stream \NC \NR +\NC error \NC string \NC output to the \quote {error} stream (only used for \quote {out of memory})\NC \NR +\NC status \NC number \NC the return value: 0=good, 1=warning, 2=errors, 3=fatal error \NC \NR +\NC fig \NC table \NC an array of generated figures (if any)\NC \NR +\stoptabulate + +Handling of \type{fig} objects would take too much room here, please +see the big reference manual. + +\presentfunction{mp}{statistics} +\presentfunction{mp}{char_width} +\presentfunction{mp}{char_height} +\presentfunction{mp}{char_depth} + +\section{Node table} + +\presentfunction{node}{types} +\presentfunction{node}{whatsits} +\presentfunction{node}{is_node} +\presentfunction{node}{id} +\presentfunction{node}{subtype} +\presentfunction{node}{type} +\presentfunction{node}{fields} +\presentfunction{node}{has_field} +\presentfunction{node}{new} +\presentfunction{node}{free} +\presentfunction{node}{flush_list} +\presentfunction{node}{copy} +\presentfunction{node}{copy_list} +\presentfunction{node}{hpack} +\presentfunction{node}{vpack} +\presentfunction{node}{dimensions} +\presentfunction{node}{mlist_to_hlist} +\presentfunction{node}{slide} +\presentfunction{node}{tail} +\presentfunction{node}{length} +\presentfunction{node}{count} +\presentfunction{node}{traverse} +\presentfunction{node}{traverse_id} +\presentfunction{node}{remove} +\presentfunction{node}{insert_before} +\presentfunction{node}{insert_after} +\presentfunction{node}{first_glyph} +\presentfunction{node}{ligaturing} +\presentfunction{node}{kerning} +\presentfunction{node}{unprotect_glyphs} +\presentfunction{node}{protect_glyphs} +\presentfunction{node}{last_node} +\presentfunction{node}{write} +\presentfunction{node}{protrusion_skippable} +\presentfunction{node}{next} +\presentfunction{node}{prev} + +\presentfunction{node}{has_attribute} +\presentfunction{node}{set_attribute} +\presentfunction{node}{unset_attribute} + +\section{Pdf table} +\presentfunction{pdf}{immediateobj} +\presentfunction{pdf}{mapfile} +\presentfunction{pdf}{mapline} +\presentfunction{pdf}{obj} +\presentfunction{pdf}{refobj} +\presentfunction{pdf}{pageref} +\presentfunction{pdf}{print} +\presentfunction{pdf}{reserveobj} +\presentfunction{pdf}{registerannot} + +\section{Status table} +\presentfunction{status}{list} + +The current list is: +\starttabulate[|lf\ss|p|] +\NC \ssbf key \NC \bf explanation \NC\NR +\NC pdf_gone\NC written \PDF\ bytes \NC \NR +\NC pdf_ptr\NC not yet written \PDF\ bytes \NC \NR +\NC dvi_gone\NC written \DVI\ bytes \NC \NR +\NC dvi_ptr\NC not yet written \DVI\ bytes \NC \NR +\NC total_pages\NC number of written pages \NC \NR +\NC output_file_name\NC name of the \PDF\ or \DVI\ file \NC \NR +\NC log_name\NC name of the log file \NC \NR +\NC banner\NC terminal display banner \NC \NR +\NC var_used\NC variable (one|-|word) memory in use \NC \NR +\NC dyn_used\NC token (multi|-|word) memory in use \NC \NR +\NC str_ptr\NC number of strings \NC \NR +\NC init_str_ptr\NC number of \INITEX\ strings \NC \NR +\NC max_strings\NC maximum allowed strings \NC \NR +\NC pool_ptr\NC string pool index \NC \NR +\NC init_pool_ptr\NC \INITEX\ string pool index \NC \NR +\NC pool_size\NC current size allocated for string characters \NC \NR +\NC node_mem_usage\NC a string giving insight into currently used nodes\NC\NR +\NC var_mem_max\NC number of allocated words for nodes\NC \NR +\NC fix_mem_max\NC number of allocated words for tokens\NC \NR +\NC fix_mem_end\NC maximum number of used tokens\NC \NR +\NC cs_count\NC number of control sequences \NC \NR +\NC hash_size\NC size of hash \NC \NR +\NC hash_extra\NC extra allowed hash \NC \NR +\NC font_ptr\NC number of active fonts \NC \NR +\NC max_in_stack\NC max used input stack entries \NC \NR +\NC max_nest_stack\NC max used nesting stack entries \NC \NR +\NC max_param_stack\NC max used parameter stack entries \NC \NR +\NC max_buf_stack\NC max used buffer position \NC \NR +\NC max_save_stack\NC max used save stack entries \NC \NR +\NC stack_size\NC input stack size \NC \NR +\NC nest_size\NC nesting stack size \NC \NR +\NC param_size\NC parameter stack size \NC \NR +\NC buf_size\NC current allocated size of the line buffer \NC \NR +\NC save_size\NC save stack size \NC \NR +\NC obj_ptr\NC max \PDF\ object pointer \NC \NR +\NC obj_tab_size\NC \PDF\ object table size \NC \NR +\NC pdf_os_cntr\NC max \PDF\ object stream pointer \NC \NR +\NC pdf_os_objidx\NC \PDF\ object stream index \NC \NR +\NC pdf_dest_names_ptr\NC max \PDF\ destination pointer \NC \NR +\NC dest_names_size\NC \PDF\ destination table size \NC \NR +\NC pdf_mem_ptr\NC max \PDF\ memory used \NC \NR +\NC pdf_mem_size\NC \PDF\ memory size \NC \NR +\NC largest_used_mark\NC max referenced marks class \NC \NR +\NC filename\NC name of the current input file \NC \NR +\NC inputid\NC numeric id of the current input \NC \NR +\NC linenumber\NC location in the current input file\NC \NR +\NC lasterrorstring\NC last error string\NC \NR +\NC luabytecodes\NC number of active \LUA\ bytecode registers\NC \NR +\NC luabytecode_bytes\NC number of bytes in \LUA\ bytecode registers\NC \NR +\NC luastate_bytes\NC number of bytes in use by \LUA\ interpreters\NC \NR +\NC output_active\NC \type{true} if the \tex{output} routine is active\NC \NR +\NC callbacks\NC total number of executed callbacks so far\NC \NR +\NC indirect_callbacks\NC number of those that were themselves + a result of other callbacks (e.g. file readers)\NC \NR +\NC luatex_svn\NC the luatex repository id (added in 0.51)\NC\NR +\NC luatex_version\NC the luatex version number (added in 0.38)\NC\NR +\NC luatex_revision\NC the luatex revision string (added in 0.38)\NC\NR +\NC ini_version\NC \type{true} if this is an \INITEX\ run (added in 0.38)\NC\NR +\stoptabulate + +\section{Typesetting table} + +\presentfunction{tex}{set} +\presentfunction{tex}{get} + +Many of \LUATEX's internal parameters can be queried and set this way, +but not nearly all. The big reference manual has an extensive list. + +\blank +\presentfunction{tex}{setattribute} +\presentfunction{tex}{getattribute} +\presentfunction{tex}{setbox} +\presentfunction{tex}{getbox} +\presentfunction{tex}{setcount} +\presentfunction{tex}{getcount} +\presentfunction{tex}{setdimen} +\presentfunction{tex}{getdimen} +\presentfunction{tex}{setskip} +\presentfunction{tex}{getskip} +\presentfunction{tex}{settoks} +\presentfunction{tex}{gettoks} +\presentfunction{tex}{setcatcode} +\presentfunction{tex}{getcatcode} +\presentfunction{tex}{setlccode} +\presentfunction{tex}{getlccode} +\presentfunction{tex}{setsfcode} +\presentfunction{tex}{getsfcode} +\presentfunction{tex}{setuccode} +\presentfunction{tex}{getuccode} +\presentfunction{tex}{setmathcode} +\presentfunction{tex}{getmathcode} +\presentfunction{tex}{setdelcode} +\presentfunction{tex}{getdelcode} + +In all the \afunction{tex.set...} functions above, the optional string is +the literal \aliteral{global}. The items can also be accessed directly via virtual arrays: +\type{tex.attributes[]}, \type{tex.box[]}, \type{tex.count[]}, \type{tex.dimen[]}, +\type{tex.skip[]}, \type{tex.toks[]}; \type{tex.catcode[]}, \type{tex.lccode[]}, +\type{tex.sfcode[]}, \type{tex.uccode[]}, \type{tex.mathcode[]}, \type{tex.delcode[]}. + +\blank + +\presentfunction{tex}{setmath} +\presentfunction{tex}{getmath} + +\presentfunction{tex}{print} +\presentfunction{tex}{sprint} +\presentfunction{tex}{tprint} +\presentfunction{tex}{write} +\presentfunction{tex}{round} +\presentfunction{tex}{scale} +\presentfunction{tex}{sp} +\presentfunction{tex}{definefont} +\presentfunction{tex}{error} +\presentfunction{tex}{enableprimitives} +\presentfunction{tex}{extraprimitives} +\presentfunction{tex}{primitives} +\presentfunction{tex}{badness} +\presentfunction{tex}{linebreak} + +The \afunction{tex.linebreak} parameters: + +\starttabulate[|lf\ss|lf\ss|p|] +\NC \bf name \NC \bf type \NC \bf description \NC \NR +\NC pardir \NC string \NC \NC \NR +\NC pretolerance \NC number \NC \NC \NR +\NC tracingparagraphs \NC number \NC \NC \NR +\NC tolerance \NC number \NC \NC \NR +\NC looseness \NC number \NC \NC \NR +\NC hyphenpenalty \NC number \NC \NC \NR +\NC exhyphenpenalty \NC number \NC \NC \NR +\NC pdfadjustspacing \NC number \NC \NC \NR +\NC adjdemerits \NC number \NC \NC \NR +\NC pdfprotrudechars \NC number \NC \NC \NR +\NC linepenalty \NC number \NC \NC \NR +\NC lastlinefit \NC number \NC \NC \NR +\NC doublehyphendemerits \NC number \NC \NC \NR +\NC finalhyphendemerits \NC number \NC \NC \NR +\NC hangafter \NC number \NC \NC \NR +\NC interlinepenalty \NC number or table \NC if a table, then it is an array like \type{\interlinepenalties}\NC \NR +\NC clubpenalty \NC number or table \NC if a table, then it is an array like \type{\clubpenalties}\NC \NR +\NC widowpenalty \NC number or table \NC if a table, then it is an array like \type{\widowpenalties}\NC \NR +\NC brokenpenalty \NC number \NC \NC \NR +\NC emergencystretch \NC number \NC in scaled points \NC \NR +\NC hangindent \NC number \NC in scaled points \NC \NR +\NC hsize \NC number \NC in scaled points \NC \NR +\NC leftskip \NC glue_spec node \NC \NC \NR +\NC rightskip \NC glue_spec node \NC \NC \NR +\NC pdfeachlineheight \NC number \NC in scaled points \NC \NR +\NC pdfeachlinedepth \NC number \NC in scaled points \NC \NR +\NC pdffirstlineheight \NC number \NC in scaled points \NC \NR +\NC pdflastlinedepth \NC number \NC in scaled points \NC \NR +\NC pdfignoreddimen \NC number \NC in scaled points \NC \NR +\NC parshape \NC table \NC \NC \NR +\stoptabulate + + +The \afunction{tex.linebreak} returned table data: + +\starttabulate[|lf\ss|p|] +\NC prevdepth \NC depth of the last line in the broken paragraph \NC \NR +\NC prevgraf \NC number of lines in the broken paragraph \NC \NR +\NC looseness \NC the actual looseness value in the broken paragraph \NC \NR +\NC demerits \NC the total demerits of the chosen solution \NC \NR +\stoptabulate + +\presentfunction{tex}{shipout} + +\blank +The virtual table \type{tex.lists} contains the set of internal +registers that keep track of building page lists. + +\starttabulate[|lf\ss|p|] +\NC \bf field \NC \bf description \NC \NR +\NC page_ins_head \NC circular list of pending insertions \NC \NR +\NC contrib_head \NC the recent contributions \NC \NR +\NC page_head \NC the page-so-far \NC \NR +\NC hold_head \NC used for held-over items for next page\NC \NR +\NC adjust_head \NC head of the current \tex{adjust} list \NC \NR +\NC pre_adjust_head \NC head of the current \tex{adjust pre} list\NC \NR +\stoptabulate + +\blank +The virtual table \type{tex.nest} contains the currently active +semantic nesting state. It has two main parts: an zero-based array of +userdata for the semantic nest itself, and the numerical value +\type{tex.nest.ptr}. Known fields: + +\starttabulate[|lf\ss|lf\ss|l|p|] +\NC \ssbf key \NC \bf type \NC \bf modes \NC \bf explanation \NC\NR +\NC mode \NC number \NC all \NC The current mode. + 0 = no mode, + 1 = vertical, + 127 = horizontal, + 253 = display math. + $-1$ = internal vertical, + $-127$ = restricted horizontal, + $-253$ = inline math.\NC\NR +\NC modeline \NC number \NC all \NC source input line where this mode was entered in, + negative inside the output routine.\NC\NR +\NC head \NC node \NC all \NC the head of the current list\NC\NR +\NC tail \NC node \NC all \NC the tail of the current list\NC\NR +\NC prevgraf \NC number \NC vmode \NC number of lines in the previous paragraph\NC\NR +\NC prevdepth \NC number \NC vmode \NC depth of the previous paragraph\NC\NR +\NC spacefactor \NC number \NC hmode \NC the current space factor\NC\NR +\NC dirs \NC node \NC hmode \NC internal use only\NC\NR +\NC noad \NC node \NC mmode \NC internal use only\NC\NR +\NC delimptr \NC node \NC mmode \NC internal use only\NC\NR +\NC mathdir \NC boolean \NC mmode \NC true when during math processing the \type{\mathdir} is not + the same as the surrounding \type{\textdir}\NC\NR +\NC mathstyle \NC number \NC mmode \NC the current \type{\mathstyle} \NC\NR +\stoptabulate + + +\section{Texconfig table} + +This is a table that is created empty. A startup \LUA\ script could +fill this table with a number of settings that are read out by +the executable after loading and executing the startup file. + +\starttabulate[|lf\ss|lf\ss|l|p|] +\NC \ssbf key \NC \bf type \NC \bf default \NC \bf explanation \NC\NR +\NC kpse_init \NC boolean \NC true \NC \type{false} totally disables \KPATHSEA\ initialisation\NC \NR +\NC shell_escape \NC string\NC \NC cf.\ web2c docs \NC\NR +\NC shell_escape_commands \NC string\NC \NC cf.\ web2c docs \NC\NR +\NC string_vacancies \NC number\NC 75000\NC cf.\ web2c docs \NC \NR +\NC pool_free \NC number\NC 5000\NC cf.\ web2c docs \NC \NR +\NC max_strings \NC number\NC 15000\NC cf.\ web2c docs \NC \NR +\NC strings_free \NC number\NC 100\NC cf.\ web2c docs \NC \NR +\NC nest_size \NC number\NC 50\NC cf.\ web2c docs \NC \NR +\NC max_in_open \NC number\NC 15\NC cf.\ web2c docs \NC \NR +\NC param_size \NC number\NC 60\NC cf.\ web2c docs \NC \NR +\NC save_size \NC number\NC 4000\NC cf.\ web2c docs \NC \NR +\NC stack_size \NC number\NC 300\NC cf.\ web2c docs \NC \NR +\NC dvi_buf_size \NC number\NC 16384\NC cf.\ web2c docs \NC \NR +\NC error_line \NC number\NC 79\NC cf.\ web2c docs \NC \NR +\NC half_error_line \NC number\NC 50\NC cf.\ web2c docs \NC \NR +\NC max_print_line \NC number\NC 79\NC cf.\ web2c docs \NC \NR +\NC hash_extra \NC number\NC 0\NC cf.\ web2c docs \NC \NR +\NC pk_dpi \NC number\NC 72\NC cf.\ web2c docs \NC \NR +\NC trace_file_names \NC boolean \NC true \NC \type{false} disables \TEX's normal file feedback\NC \NR +\NC file_line_error \NC boolean \NC false \NC \type{file:line} style error messages\NC \NR +\NC halt_on_error \NC boolean \NC false \NC abort run on the first encountered error\NC \NR +\NC formatname \NC string \NC \NC if no format name was given + on the commandline, this will be used\NC \NR +\NC jobname \NC string \NC \NC as \type{formatname}.\NC \NR +\stoptabulate + + +\section{IO table} +\presentfunction{texio}{write} +\presentfunction{texio}{write_nl} + +\section{Token table} + +A token is represented in \LUA\ as a small table. For the moment, this +table consists of three numeric entries: + +\starttabulate[|l|l|p|] +\NC \bf index\NC \bf meaning \NC \bf description \NC \NR +\NC 1 \NC command code \NC this is a value between~$0$ and~$130$\NC \NR +\NC 2 \NC command modifier \NC this is a value between~$0$ and~$2^{21}$ \NC \NR +\NC 3 \NC control sequence id \NC for commands that are not the result of control + sequences, like letters and characters, it is zero, + otherwise, it is a number pointing into the \quote + {equivalence table} \NC \NR +\stoptabulate + +\presentfunction{token}{get_next} +\presentfunction{token}{is_expandable} +\presentfunction{token}{expand} +\presentfunction{token}{is_activechar} +\presentfunction{token}{create} +\presentfunction{token}{command_name} +\presentfunction{token}{command_id} +\presentfunction{token}{csname_name} +\presentfunction{token}{csname_id} + + +\stopcolumns +\stoptext diff --git a/Master/texmf-dist/doc/luatex/base/luatex.man b/Master/texmf-dist/doc/luatex/base/luatex.man new file mode 100644 index 00000000000..553cbc518c1 --- /dev/null +++ b/Master/texmf-dist/doc/luatex/base/luatex.man @@ -0,0 +1,266 @@ +.TH LUATEX 1 "2009.04.22" "luatex 0.40" "Web2C @VERSION@" +.\"===================================================================== +.if n .ds MF Metafont +.if t .ds MF M\s-2ETAFONT\s0 +.if t .ds TX \fRT\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X\fP +.if n .ds TX TeX +.if n .ds WB Web +.if t .ds WB W\s-2EB\s0 +.\"===================================================================== +.SH NAME +luatex, texlua, texluac \- An extended version of pdfTeX using Lua as +an embedded scripting language +.\"===================================================================== +.SH SYNOPSIS +.B luatex +[\-\-lua=\fIFILE\fR] [\fIOPTION\fR]... [\fITEXNAME\fR[.tex]] [\fICOMMANDS\fR] + +.B luatex +[\-\-lua=\fIFILE\fR] [\fIOPTION\fR]... \fI\eFIRST\-LINE\fR + +.B luatex +[\-\-lua=\fIFILE\fR] [\fIOPTION\fR]... \fB&\fIFMT ARGS\fR +.\"===================================================================== +.SH DESCRIPTION +Run the lua\*(TX typesetter on \fITEXNAME\fR, usually creating +TEXNAME.pdf. Any +remaining \fICOMMANDS\fR are processed as lua\*(TX input, after TEXNAME +is read. + +Alternatively, if the first non\-option argument begins with a backslash, +interpret all non\-option arguments as a line of lua\*(TX input. + +Alternatively, if the first non\-option argument begins with a \fB&\fR, +the +next word is taken as the \fIFMT\fR to read, overriding all else. Any +remaining arguments are processed as above. + +If no arguments or options are specified, prompt for input. + +If called as \fBtexlua\fR it acts as lua interpreter. +If called as \fBtexluac\fR it acts as lua bytecode compiler. + +Lua\*(TX is an extended version of pdf\*(TX with Unicode and OpenType +font support, embeded \fBLua\fR scripting language, the \fBe-\*(TX\fR +and \fBOmega\fR extensions, as well as integrated MetaPost engine, that +can create \fIPDF\fR files as well as \fIDVI\fR files. +For more information about luatex, see http://www.luatex.org, you can +read Lua\*(TX manual using texdoc utility (\fBtexdoc luatex\fR). + +All Lua\*(TX text input and output is considered to be Unicode text. + +In \fIDVI\fR mode, lua\*(TX can be used as a complete replacement for +the \*(TX engine. + +In \fIPDF\fR mode, lua\*(TX can natively handle the \fIPDF\fR, \fIJPG\fR, +\fIJBIG2\fR, and \fIPNG\fR graphics formats. lua\*(TX cannot include +PostScript or Encapsulated PostScript (EPS) graphics files; first convert +them to PDF using \fBepstopdf\fR (1). + +.\"===================================================================== +.SH "OPTIONS" +When the Lua\*(TX executable starts, it looks for the \fB\-\-lua\fR +commandline option. +If there is no \fB\-\-lua\fR option, the commandline is interpreted in a +similar fashion as in traditional pdf\*(TX and Aleph. But if the option +is present, Lua\*(TX will enter an alternative mode of commandline parsing +in comparison to the standard web2c programs. The presence of \fB--lua\fR +makes most of other options unreliable, because the lua initialization +file can disable kpathsea and/or hook functions into various callbacks. +.ig +Here is the list of possibly affected switches/functionality, and why: +.. +.TP +.BI "\-\-lua=" FILE +.rb +The lua initialization file. +.PP +The following two options alter the executable behaviour: +.TP +.B \-\-luaonly +.rb +Start Lua\*(TX as a Lua interpreter. In this mode, it will set Lua's +\fIarg[0]\fR to the found script name, pushing preceding options in +negative values and the rest of the commandline in the positive values, +just like the Lua interpreter. Lua\*(TX will exit immediately after +executing the specified Lua script. +.TP +.BI \-\-luaconly +.rb +Start Lua\*(TX as a Lua byte compiler. In this mode, Lua\*(TX is exactly +like \fBluac\fR from the standalone Lua distribution, except that it +does not have the \fB\-l\fR switch, and that it accepts (but ignores) +the \fB\-\-luaconly\fR switch. +.PP +Then the regular web2c options: +.TP +.B \-\-debug\-format +.br +Debug format loading. +.TP +.B \-\-draftmode +.rb +Sets \epdfdraftmode so lua\*(TX doesn't write a PDF and doesn't read +any included images, thus speeding up execution. +.TP +.B \-\-enable\-write18 +.br +Synonym for \fB\-\-shell\-escape\fR. +.TP +.B \-\-disable\-write18 +.br +Synonym for \fB\-\-no\-shell\-escape\fR. +.TP +.B \-\-shell\-escape +.br +Enable the +.BI \ewrite18{ command } +construct, and Lua functions \fBos.execute()\fR, \fBos.exec()\fR, +\fBos.spawn()\fR, and \fBio.popen()\fR. The \fIcommand\fR can be any +shell command. This construct is normally disallowed for security +reasons. +.TP +.B \-\-no\-shell-escape +.br +Disable the +.BI \ewrite18{ command } +construct and the other Lua functions, even if it is enabled in the +\fItexmf.cnf\fR file. +.TP +.B \-\-shell-restricted +.rb +Enable restricted version of \fB\ewrite18\fR, \fBos.execute()\fR, +\fBos.exec()\fR, \fBos.spawn()\fR, and \fBio.popen()\fR, only commands +listed in \fItexmf.cnf\fR file are allowed. +.TP +.B \-\-file\-line\-error +.rb +Print error messages in the form \fIfile:line:error\fR which is similar +to the way many compilers format them. +.TP +.B \-\-no\-file\-line\-error +.rb +Disable printing error messages in the \fIfile:line:error\fR style. +.TP +.BI "\-\-fmt=" FORMAT +.rb +Use \fIFORMAT\fR as the name of the format to be used, instead of the +name by which lua\*(TX was called or a \fI%&\fR line. +.TP +.B \-\-help +.rb +Print help message and exit. +.TP +.B \-\-ini +.rb +Start in \fIINI\fR mode, which is used to dump formats. The \fIINI\fR +mode can be used for typesetting, but no format is preloaded, and basic +initializations like setting catcodes may be required. +.TP +.BI "\-\-interaction=" MODE +.rb +Sets the interaction mode. The \fIMODE\fR can be either +.IR batchmode , +.IR nonstopmode , +.IR scrollmode , +and +.IR errorstopmode . +The meaning of these modes is the same as that of the corresponding +\ecommands. +.TP +.BI "\-\-jobname=" NAME +.rb +Use \fINAME\fR for the job name, instead of deriving it from the name +of the input file. +.TP +.BI "\-\-kpathsea-debug=" BITMASK +.rb +Sets path searching debugging flags according to the \fIBITMASK\fR. +See the \fIKpathsea\fR manual for details. +.TP +.BI "\-\-mktex=" FMT +.rb +Enable mktex\fIFMT\fR generation, where \fIFMT\fR must be either \fItex\fR +or \fItfm\fR. +.TP +.B \-\-nosocket +.rb +Disable the luasocket (network) library. +.TP +.TP +.BI "\-\-output\-comment=" STRING +.rb +In \fIDVI\fR mode, use \fISTRING\fR for the \fIDVI\fR file comment +instead of the date. This option is ignored in\fIPDF\fR mode. +.TP +.BI "\-\-output\-directory=" DIRECTORY +.rb +Write output files in \fIDIRECTORY\fR instead of the current directory. +Look up input files in \fIDIRECTORY\fR first, then along the normal +search path. +.TP +.BI "\-\-output\-format=" FORMAT +.rb +Set the output format mode, where \fIFORMAT\fR must be either \fIpdf\fR +or \fIdvi\fR. +This also influences the set of graphics formats understood by lua\*(TX. +.TP +.BI "\-\-progname=" NAME +.rb +Pretend to be program \fINAME\fR (only for kpathsea). +.TP +.B \-\-recorder +.rb +Enable the filename recorder. +This leaves a trace of the files opened for input and output +in a file with extension \fI.fls\fR. +.TP +.B \-\-safer +.rb +Disable some Lua commands that can easily be abused by a malicious +document. +.TP +.BI "\-\-synctex=" NUMBER +.rb +Enable/disable Sync\*(TX extension. +.TP +.B \-\-version +.rb +Print version information and exit. +.TP +.B \-\-credits +.rb +Print credits and version details. +.TP +The following options are ignored: +.TP +.BR "\-\-8bit" ,\ "\-\-etex" ,\ "\-\-parse\-first\-line" ,\ +"\-\-no\-parse\-first\-line" +.rb +These are always on. +.TP +.BI "\-\-default\-translate\-file=" TCXNAME , \ "\-\-translate\-file=" +TCXNAME +.rb +These are always off. + +.\"===================================================================== +.SH "SEE ALSO" +.BR pdftex (1), +.BR etex (1), +.BR aleph (1), +.BR omega (1), +.BR lua (1). +.\"===================================================================== +.SH "AUTHORS" +The primary authors of Lua\*(TX are Hartmut Henkel, Taco Hoekwater, +and Hans Hagen, with help from Martin Schr\[:o]der, Karel Skoupy, and +Han The Thanh. +.PP +\*(TX was designed by Donald E. Knuth, who implemented it using his +\*(WB system for Pascal programs. +It was ported to Unix at Stanford by Howard Trickey, and at Cornell by +Pavel Curtis. +The version now offered with the Unix \*(TX distribution is that generated +by the \*(WB to C system (\fBweb2c\fR), originally written by Tomas +Rokicki and Tim Morgan. diff --git a/Master/texmf-dist/doc/luatex/base/luatexref-env.tex b/Master/texmf-dist/doc/luatex/base/luatexref-env.tex index 7917b9b1976..fe5256f9b9b 100644 --- a/Master/texmf-dist/doc/luatex/base/luatexref-env.tex +++ b/Master/texmf-dist/doc/luatex/base/luatexref-env.tex @@ -58,6 +58,17 @@ }% } +\def\showid#1{\ctxlua + { do + local t = string.split('#1',',') + tex.sprint('\\type{'.. node.id(t[1]) .. '}') + if t[2] then + tex.sprint(', \\type{'.. node.subtype(t[2]) .. '}') + end + end + }% +} + \def\todo#1% {\dontleavehmode{\bf\red <TODO: #1>}} @@ -152,10 +163,20 @@ StopPage ; \stopuseMPgraphic +\def\luaextraangle{\directlua{ + if \lastpage == 0 then + luaextraangle = 0; + else + luaextraangle = \realfolio*360/\lastpage; + end + tex.print(luaextraangle) +}} + \startuseMPgraphic{luanumber} \includeMPgraphic{lualogo} -% luaextraangle := \realfolio*360/\lastpage ; - luaextraangle := 10 * ( (\realfolio-2)*36/(\lastpage-2) ) ; + % luaextraangle := \realfolio*360/\lastpage ; + % luaextraangle := 10 * ( (\realfolio-2)/(\lastpage-2)*36 ) ; + luaextraangle := \luaextraangle; picture p ; p := lualogo ; setbounds p to boundingbox fullcircle ; draw p ysized 1cm ; diff --git a/Master/texmf-dist/doc/luatex/base/luatexref-t.pdf b/Master/texmf-dist/doc/luatex/base/luatexref-t.pdf Binary files differindex e79939832de..97d9ae36f7d 100644 --- a/Master/texmf-dist/doc/luatex/base/luatexref-t.pdf +++ b/Master/texmf-dist/doc/luatex/base/luatexref-t.pdf diff --git a/Master/texmf-dist/doc/luatex/base/luatexref-t.tex b/Master/texmf-dist/doc/luatex/base/luatexref-t.tex index f15aa8de09b..38bcdf34463 100644 --- a/Master/texmf-dist/doc/luatex/base/luatexref-t.tex +++ b/Master/texmf-dist/doc/luatex/base/luatexref-t.tex @@ -1,4 +1,5 @@ % engine=luatex language=uk +% $Id$ % TODO: fix layout of function legend descriptions % check numbers @@ -22,7 +23,7 @@ \setvariables [document] - [beta=0.60.2] + [beta=0.66.0] \starttext @@ -39,7 +40,7 @@ \startframedtext[framecolor=red,foregroundcolor=red,width=\hsize,style=\tfa] This book will eventually become the reference manual of \LUATEX. -At the moment, it simply reports the behaviour of the executable +At the moment, it simply reports the behavior of the executable matching the snapshot or beta release date in the title page. \blank @@ -53,8 +54,7 @@ functionality staying the same. Nothing is considered stable just yet. This manual therefore simply reflects the current state of the executable. {\bs Absolutely nothing\/} on the following pages is set in stone. When -the need arises, anything can (and will) be changed without prior -notice. +the need arises, anything can (and will) be changed. \blank @@ -71,8 +71,8 @@ TODO list is still large.} distinguishable parts: \startitemize[packed] -\item \PDFTEX\ version 1.40.9, converted to C. -\item \ALEPH\ RC4 converted to C. +\item \PDFTEX\ version 1.40.9, converted to C (with patches from later releases). +\item The direction model and some other bits from \ALEPH\ RC4 converted to C. \item \LUA\ 5.1.4 ($+$ coco 1.1.5 $+$ portable bytecode) \item dedicated \LUA\ libraries \item various \TEX\ extensions @@ -83,9 +83,9 @@ distinguishable parts: Neither \ALEPH's I/O translation processes, nor tcx files, nor \ENCTEX\ can be used, these encoding|-|related functions are -superseded by a \LUA|-|based solution (reader callbacks). Also, -some experimental \PDFTEX\ features are removed. These can be -implemented in \LUA\ instead. +superseded by a \LUA|-|based solution (reader callbacks). Also, some +experimental \PDFTEX\ features are removed. These can be implemented +in \LUA\ instead. \chapter{Basic \TEX\ enhancements} @@ -111,7 +111,7 @@ format generation file: \directlua { tex.enableprimitives('',tex.extraprimitives()) } \stoptyping -But be aware, that the curly braces may not have the proper \type{\catcode} +But be aware that the curly braces may not have the proper \type{\catcode} assigned to them at this early time (giving a 'Missing number' error), so it may be needed to put these assignments @@ -121,8 +121,8 @@ so it may be needed to put these assignments \stoptyping before the above line. -More fine-grained primitives control is possible, you can look the details in -\in{section}[luaprimitives]. For simplicity's sake, this manual assumes +More fine-grained primitives control is possible, you can look up the details in +\in{section}[luaprimitives]. For simplicity's sake, this manual assumes that you have executed the \type{\directlua} command as given above. The startup behavior documented above is considered stable in the sense @@ -145,7 +145,7 @@ There are three new primitives to test the version of \LUATEX: document is {\bf\luatexdatestamp}. \NC\NR \stoptabulate -The official \LUATEX\ version is defined follows: +The official \LUATEX\ version is defined as follows: \startitemize \item The major version is the integer result of \tex{luatexversion} divided by 100. @@ -172,7 +172,7 @@ input characters can use the full range of \UNICODE\ ($2^{20}+2^{16}-1 = \hbox{0x10FFFF}$). Later chapters will talk of characters and glyphs. Although these -are not the interchangeable, they are closely related. During +are not interchangeable, they are closely related. During typesetting, a character is always converted to a suitable graphic representation of that character in a specific font. However, while processing a list of to|-|be|-|typeset nodes, its contents @@ -190,7 +190,7 @@ generated an error when processed by older \TEX|-|based engines. The affected commands with an altered initial (left of the equals sign) or secondary (right of the equals sign) value are: \tex{char}, \tex{lccode},\tex{uccode}, \tex{catcode}, \tex{sfcode}, \tex{efcode}, -\tex{lpcode}, \tex{rpcode}, \tex{chardef} +\tex{lpcode}, \tex{rpcode}, \tex{chardef}. As far as the core engine is concerned, all input and output to text files is \UTF-8 encoded. Input files can be pre|-|processed @@ -199,7 +199,7 @@ later chapter. Output in byte|-|sized chunks can be achieved by using characters just outside of the valid \UNICODE\ range, starting at the value -$1{,}114{,}112$ (0x110000). When the times comes to print a character +$1{,}114{,}112$ (0x110000). When the time comes to print a character $c>=1{,}114{,}112$, \LUATEX\ will actually print the single byte corresponding to $c$ minus 1{,}114{,}112. @@ -213,7 +213,7 @@ during callback processing (this will be explained in \in{section}[iocallback]). \section{Extended tables} -All traditional \TEX\ and \ETEX\ registers can be 16~bit numbers as in +All traditional \TEX\ and \ETEX\ registers can be 16-bit numbers as in \ALEPH. The affected commands are: \startcolumns[n=4] @@ -245,7 +245,7 @@ All traditional \TEX\ and \ETEX\ registers can be 16~bit numbers as in The glyph properties (like \type {\efcode}) introduced in \PDFTEX\ that deal with font expansion (hz) and character protruding are -also 16~bit. Because font memory management has been rewritten, +also 16-bit. Because font memory management has been rewritten, these character properties are no longer shared among fonts instances that originate from the same metric file. @@ -261,7 +261,7 @@ and can be used after \tex{the} etc.\ just like the normal \tex{count} registers. \startsyntax -\attribute <16-bit number> <optional equals> <31-bit number>!crlf +\attribute <16-bit number> <optional equals> <32-bit number>!crlf \attributedef <csname> <optional equals> <16-bit number> \stopsyntax @@ -272,7 +272,7 @@ indicate that they are unset, that value is the lowest legal value: It follows that the value \type{-"7FFFFFFF} cannot be used as a legal attribute value, but you {\it can\/} assign \type{-"7FFFFFFF} to \quote{unset} an attribute. All attributes start out in this -\quote{unset} state in \INITEX (prior to 0.37, there could not be +\quote{unset} state in \INITEX\ (prior to 0.37, there could not be valid negative attribute values, and the \quote{unset} value was $-1$). Attributes can be used as extra counter values, but their usefulness @@ -298,7 +298,7 @@ effect in, say, the first or third line of the paragraph. Similar situations happen in \LUATEX\ regularly. A few of the more obvious problematic cases are dealt with: the attributes for nodes -that are created during hyphenation and ligaturing borrow their +that are created during hyphenation, kerning and ligaturing borrow their attributes from their surrounding glyphs, and it is possible to influence box attributes directly. @@ -307,19 +307,13 @@ contained in the box are unchanged when such a box is placed, unboxed, or copied. In this respect attributes act the same as characters that have been converted to references to glyphs in fonts. For instance, when you use attributes to implement color -support, each node carries information about its color. In that +support, each node carries information about its eventual color. In that case, unless you implement mechanisms that deal with it, applying a color to already boxed material will have no effect. Keep in -mind that this incompatibility is mostly due to the fact that +mind that this incompatibility is mostly due to the fact that separate specials and literals are a more unnatural approach to colors than attributes. -Many other inserted nodes, like the nodes resulting from math mode -and alignments, are processed \quote {out of order}, and will have the -attributes that are in effect at the precise moment of creation (which -is often later than expected). This area needs studying, and is in -fact one of the reasons for a beta at this moment. - It is possible to fine-tune the list of attributes that are applied to a \type{hbox}, \type{vbox} or \type{vtop} by the use of the keyword \type{attr}. An example: @@ -327,12 +321,12 @@ keyword \type{attr}. An example: \starttyping \attribute2=5 \setbox0=\hbox {Hello} -\setbox2=\hbox attr1=12 attr2=-1{Hello} +\setbox2=\hbox attr1=12 attr2=-"7FFFFFFF{Hello} \stoptyping This will set the attribute list of box~2 to $1=12$, and the -attributes of box~0 will be $2=5$. As you can see, assigning a -negative value causes an attribute to be ignored. +attributes of box~0 will be $2=5$. As you can see, assigning +the maximum negative value causes an attribute to be ignored. The \type{attr} keyword(s) should come before a \type{to} or \type{spread}, if that is also specified. @@ -364,7 +358,7 @@ from interfering with those used by the macro package. The conversion to and from a token list means that you normally can not use \LUA\ line comments (starting with \type{--}) within the -argument. As there typically will be only one \quote{line} the first +argument. As there typically will be only one \quote{line} the first line comment will run on until the end of the input. You will either need to use \TEX-style line comments (starting with \%), or change the \TEX\ category codes locally. Another possibility is to say: @@ -431,7 +425,7 @@ more. \subsection{\tex{latelua}} \tex{latelua} stores \LUA\ code in a whatsit that will be processed -inside the output routine. Its intended use is a cross between +at the time of shipping out. Its intended use is a cross between \tex{pdfliteral} and \tex{write}. Within the \LUA\ code you can print \PDF\ statements directly to the \PDF\ file via \type{pdf.print}, @@ -479,7 +473,7 @@ is easier to keep the code in a separate file and load it using \LUA's \subsection{\tex{clearmarks}} -This primitive clears a marks class completely, resetting all three +This primitive clears a mark class completely, resetting all three connected mark texts to empty. \startsyntax @@ -535,9 +529,9 @@ differences are: \starttabulate[|l|l|l|l|] \NC \bf primitive \NC \bf explanation \NC\NR -\NC \tex{alignmark} \NC Duplicates the functionality of \char`\#~ +\NC \tex{alignmark} \NC Duplicates the functionality of \char`\#~% inside alignment preambles\NC\NR -\NC \tex{aligntab} \NC Duplicates the functionality of \char`\&~ +\NC \tex{aligntab} \NC Duplicates the functionality of \char`\&~% inside alignments (and preambles)\NC\NR \stoptabulate @@ -562,7 +556,7 @@ format file. \catcodetable <16-bit number> \stopsyntax -The \tex{catcodetable} switches to a different catcode table. +The primitive \tex{catcodetable} switches to a different catcode table. Such a table has to be previously created using one of the two primitives below, or it has to be zero. Table zero is initialized by \INITEX. @@ -573,19 +567,19 @@ primitives below, or it has to be zero. Table zero is initialized by \initcatcodetable <16-bit number> \stopsyntax -The \tex{initcatcodetable} creates a new table with catcodes +The primitive \tex{initcatcodetable} creates a new table with catcodes identical to those defined by \INITEX: \starttabulate[|l|l|l|l|l|] -\NC~0\NC \type{_} \NC \NC \tt escape \NC\NR -\NC~5\NC \tt\letterhat\letterhat M \NC return \NC \tt car\_ret \NC (this name may change) \NC\NR +\NC~0\NC \tt\letterbackslash \NC \NC \tt escape \NC\NR +\NC~5\NC \tt\letterhat\letterhat M \NC return \NC \tt car{\_}ret \NC (this name may change) \NC\NR \NC~9\NC \tt\letterhat\letterhat @ \NC null \NC \tt ignore \NC\NR \NC10\NC \tt <space> \NC space \NC \tt spacer \NC\NR \NC11\NC {\tt a} -- {\tt z} \NC \NC \tt letter \NC\NR \NC11\NC {\tt A} -- {\tt Z} \NC \NC \tt letter \NC\NR \NC12\NC everything else \NC \NC \tt other \NC\NR \NC14\NC \tt\letterpercent \NC \NC \tt comment \NC\NR -\NC15\NC \tt\letterhat\letterhat ? \NC delete \NC \tt invalid\_char \NC\NR +\NC15\NC \tt\letterhat\letterhat ? \NC delete \NC \tt invalid{\_}char \NC\NR \stoptabulate The new catcode table is allocated globally: it will not go away after @@ -656,7 +650,7 @@ that is normally prohibited. The addition of this command coincides with a change in the \LUATEX\ engine: ever since the snapshot of 20060915, \type{\outer} -was simply ignored. That behaviour has now reverted back to be +was simply ignored. That behavior has now reverted back to be \TEX82-compatible by default. @@ -667,7 +661,7 @@ was simply ignored. That behaviour has now reverted back to be \stopsyntax This new integer parameter allows you to alter the number of the box -that will be used to store the page to be shipped out in. Its default +that will be used to store the page sent to the output routine. Its default value is 255, and the acceptable range is from 0 to 65535. @@ -721,7 +715,7 @@ There is a new experimental primitive: \type{\gleaders} (a \LUATEX\ extension, added in 0.43). This type of leaders is anchored to the origin of the box to be shipped out. So they are like normal \type{\leaders} in that they align nicely, except that the alignment -is based on the {\it largest\/} enclosing box instead of the +is based on the {\it largest\/} enclosing box instead of the {\it smallest\/}. \chapter {\LUA\ general} @@ -768,13 +762,13 @@ and that it accepts (but ignores) the \type{--luaconly} switch. When the \LUATEX\ executable starts, it looks for the \type{--lua} commandline option. If there is no \type{--lua} option, the commandline is interpreted in a similar fashion as in traditional -\PDFTEX\ and \ALEPH. +\PDFTEX\ and \ALEPH. The following command-line switches are understood. \starttabulate[|lT|p|] \NC --fmt=FORMAT \NC load the format file FORMAT \NC\NR -\NC --lua=s \NC load and execute a \LUA\ initialization script\NC\NR +\NC --lua=FILE \NC load and execute a \LUA\ initialization script\NC\NR \NC --safer \NC disable easily exploitable \LUA\ commands \NC\NR \NC --nosocket \NC disable the \LUA\ socket library \NC\NR \NC --help \NC display help and exit \NC\NR @@ -797,7 +791,7 @@ The following command-line switches are understood. \NC --[no-]shell-escape \NC disable/enable \type{\write18{SHELL COMMAND}} \NC \NR \NC --enable-write18 \NC enable \type{\write18{SHELL COMMAND}} \NC \NR \NC --disable-write18 \NC disable \type{\write18{SHELL COMMAND}} \NC \NR -\NC --shell-restricted \NC restrict \type{\write18} to a list of commands +\NC --shell-restricted \NC restrict \type{\write18} to a list of commands given in texmf.cnf \NC \NR \NC --debug-format \NC enable format debugging \NC \NR \NC --[no-]file-line-error \NC disable/enable file:line:error style messages \NC \NR @@ -812,20 +806,50 @@ The following command-line switches are understood. \NC --synctex=NUMBER \NC enable synctex \NC \NR \stoptabulate -But if the option is present, \LUATEX\ will enter an alternative mode +A note on the creation of the various temporary files and the \type{\jobname}. +The value to use for \type{\jobname} is decided as follows: + +\startitemize +\item If \type{--jobname} is given on the command line, its argument + will be the value for \tex{jobname}, without any changes. The + argument will not be used for actual input so it need not exist. + The \type{--jobname} switch only controls the \tex{jobname} setting. +\item Otherwise, \tex{jobname} will be the name of the first file that + is read from the file system, with any path components and the last + extension (the part following the last \type{.}) stripped off. +\item An exception to the previous point: if the command + line goes into interactive mode (by starting with a command) and + there are no files input via \type{\everyjob} either, then the + \tex{jobname} is set to \type{texput} as a last resort. +\stopitemize + +The file names for output files that are generated automatically are +created by attaching the proper extension (\type{.log}, \type{.pdf}, +etc.) to the found \tex{jobname}. These files are created in the +directory pointed to by \type{--output-directory}, or in the current +directory, if that switch is not present. + +\blank + +Without the \type{--lua} option, command line processing works like it does in +any other web2c-based typesetting engine, except that \LUATEX\ has a few extra +switches. + + +If the \type{--lua} option is present, \LUATEX\ will enter an alternative mode of commandline processing in comparison to the standard web2c programs. In this mode, a small series of actions is taken in order. First, -it will parse the commandline as usual, but it will only interpret -a small subset of the options immediately: \type{--safer}, \type{--nosocket}, +it will parse the commandline as usual, but it will only interpret +a small subset of the options immediately: \type{--safer}, \type{--nosocket}, \type{--[no-]shell-escape}, \type{--enable-write18}, \type{--disable-write18}, \type{--shell-restricted}, \type{--help}, \type{--version}, and \type{--credits}. Now it searches for the requested \LUA\ initialization script. If it -can not be found using the actual name given on the commandline, a +cannot be found using the actual name given on the commandline, a second attempt is made by prepending the value of the environment -variable \type{LUATEXDIR}, if that variable is defined. +variable \type{LUATEXDIR}, if that variable is defined in the environment. Then it checks the various safety switches. You can use those to disable some \LUA\ commands that can easily be abused by a malicious document. At @@ -878,38 +902,38 @@ four global names, as they will be overwritten completely. We recommend you use the startup file only for your own \TEX|-|independent initializations (if you need any), to parse the commandline, set values in the \luatex{texconfig} table, and register -the callbacks you need. +the callbacks you need. -\LUATEX\ allows some of the commandline opiotns to be overridden +\LUATEX\ allows some of the commandline options to be overridden by reading values from the \luatex{texconfig} table at the end of script execution (see the description of the \luatex{texconfig} table later on in this document for more details on which ones exactly). Unless the \luatex{texconfig} table tells \LUATEX\ not to initialize \KPATHSEA\ at all (set \luatex{texconfig.kpse_init} to \type{false} for that), -\LUATEX\ acts on three more commandline options after the +\LUATEX\ acts on some more commandline options after the initialization script is finished: - in order to initialize the built|-|in \KPATHSEA\ library properly, \LUATEX\ needs to know the correct program name to use, and for that it needs to check \type{--progname}, or \type{--ini} and \type{--fmt}, if \type{--progname} is missing. + \section{\LUA\ changes} -The C coroutine (\COCO) patches from luajit are applied to the \LUA\ -core, the used version is 1.1.5. See \hyphenatedurl{http://luajit.org/coco.html} +The C coroutine (\COCO) patches from LuaJIT are applied to the \LUA\ +core, the used version is 1.1.5. See \hyphenatedurl{http://coco.luajit.org/} for details. This functionality currently (0.45) does not work on non-intel OpenBSD platforms nor on powerpc Linux-es. Additional note: -\type{coroutines.wrap()} under Windows does not inherit the state +\type{coroutines.wrap()} under Windows does not inherit the state of the random generator, it always has an implicit \type{math.randomseed(1)} that is added by the Windows kernel. Starting from version 0.45, \LUATEX\ is able to use the kpathsea library to find \type{require()}d modules. For this purpose, \type{package.loaders[2]} is replaced by a different loader function, -that decides at runtime whether to use kpathsea or the build-in core -lua function. It uses \KPATHSEA\ when that is already initialized at +that decides at runtime whether to use kpathsea or the built-in core +lua function. It uses \KPATHSEA\ when that is already initialized at that point in time, otherwise it reverts to using the normal \type{package.path} loader. @@ -921,7 +945,7 @@ Initialization of \KPATHSEA\ can happen either implicitly (when Starting from version 0.46.0 (as an {\bf experimental} feature!) \LUATEX\ is also able to use dynamically loadable \LUA\ libraries, unless -\type{--safer} was given as an option on the command line. +\type{--safer} was given as an option on the command line. For this purpose, \type{package.loaders[3]} is replaced by a different loader function, that decides at runtime whether to use kpathsea or @@ -934,7 +958,7 @@ This functionality required an extension to kpathsea: \startnarrower There is a new kpathsea file format: \type{kpse_clua_format} that searches for files with extension \type{.dll} and \type{.so}. The -\type{texmf.cnf} setting for this variable \type{is CLUAINPUTS}, and +\type{texmf.cnf} setting for this variable is \type{CLUAINPUTS}, and by default it has this value: \starttyping @@ -943,11 +967,11 @@ CLUAINPUTS=.:$SELFAUTOLOC/lib/{$progname,$engine,}/lua// This path is imperfect (it requires a TDS subtree below the binaries directory), but the architecture has to be in the path somewhere, and -the currently simplest way to do that is to search below the binary -directory only. +the currently simplest way to do that is to search below the binaries +directory only. One level up (a \type{lib} directory parallel to \type{bin}) would -have been nicer, but that is not doable because texlive uses a +have been nicer, but that is not doable because \TEXLIVE\ uses a \type{bin/<arch>} structure. \stopnarrower @@ -985,7 +1009,7 @@ argument. The file name is not tested for existence. Finally, for non-WIN32 platforms only, there is the new function \type{lfs.readlink()} (added in 0.51) that takes an existing symbolic link as argument and returns its content. It returns an error on -WIN32. +WIN32. The \lua{string} library has an extra function: \luatex{string.explode(s[,m])}. This function returns an array containing @@ -995,7 +1019,7 @@ is either empty (this splits the string into characters), a single character (this splits on each occurrence of that character, possibly introducing empty strings), or a single character followed by the plus sign \type{+} (this special version does not create empty -sub-strings). The default value for \type{m} is \type{ +} (multiple +sub-strings). The default value for \type{m} is \quote{\type{ +}} (multiple spaces). Note: \type{m} is not hidden by surrounding braces (as it would be if @@ -1011,7 +1035,7 @@ piecemeal: \UTF-8 token in it) \item \luatex{string.characters(s)} (a string containing one byte) \item \luatex{string.characterpairs(s)} (two strings each containing one byte) will -produce an empty second string in the string length was odd. +produce an empty second string if the string length was odd. \item \luatex{string.bytes(s)} (a single byte value) \item \luatex{string.bytepairs(s)} (two byte values) Will produce nil instead of a number as its second return value if the string length was odd. @@ -1029,19 +1053,19 @@ exceptions are \luatex{unicode.utf8.find}, that always returns byte positions in a string, and \luatex{unicode.utf8.match} and \luatex{unicode.utf8.gmatch}. While the latter two functions in general {\it are} \UNICODE|-|aware, they fall-back to non|-|\UNICODE|-|aware -behaviour when using the empty capture \lua{()} (other captures work as +behavior when using the empty capture \lua{()} (other captures work as expected). For the interpretation of character classes in \luatex{unicode.utf8} functions refer to the library sources at \hyphenatedurl{http://luaforge.net/projects/sln}. The \lua{slnunicode} library will be replaced by an internal \UNICODE\ library in a future -\LUATEX\ version. +\LUATEX\ version. \blank The \lua{os} library has a few extra functions and variables: \startitemize \item \luatex{os.selfdir} is a variable that holds the directory path -of \type{argv[0]}. For example: {\tt \directlua{tex.sprint(os.selfdir)}} +of the actual executable. For example: {\tt \directlua{tex.sprint(os.selfdir)}} (present since 0.27.0). \item \luatex{os.exec(commandline)} is a variation on \lua{os.execute}. @@ -1055,7 +1079,7 @@ of \type{argv[0]}. For example: {\tt \directlua{tex.sprint(os.selfdir)}} The set of consecutive values starting at integer 1 in the table are the arguments that are passed on to the command (the value at index 1 - becomes \type{argv[0]}). The command is searched for in the execution path, + becomes \type{arg[0]}). The command is searched for in the execution path, so there is normally no need to pass on a fully qualified pathname. If the argument is a string, then it is automatically converted into @@ -1072,7 +1096,7 @@ of \type{argv[0]}. For example: {\tt \directlua{tex.sprint(os.selfdir)}} command will replace the current process. However, it will return the two values \type{nil} and \type {'error'} if there was a problem while attempting to execute the command. - On windows, the current process is actually kept in memory until after the + On Windows, the current process is actually kept in memory until after the execution of the command has finished. This prevents crashes in situations where \TEXLUA\ scripts are run inside integrated \TEX\ environments. @@ -1101,9 +1125,10 @@ not available on the \SUNOS\ platforms, so do not use this function for portable documents. \item \luatex{os.times()} -Returns the current process times cf.\ the \UNIX\ C library \quote {times} -call in seconds. This function is not available on the \MSWINDOWS\ and \SUNOS\ -platforms, so do not use this function for portable documents. +Returns the current process times according to \ the \UNIX\ C library function +\quote {times}. This function is not available on the \MSWINDOWS\ +and \SUNOS\ platforms, so do not use this function for portable +documents. \item \luatex{os.tmpdir()} This will create a directory in the \quote {current directory} with the name \type{luatex.XXXXXX} where the \type {X}-es are @@ -1160,13 +1185,13 @@ in with \LUATEX, because they offer useful functionality: This library has been slightly extended so that the \type{unicode.utf8.*} functions also accept the first 256 values of plane~18. This is the range \LUATEX\ -uses for raw binary output, as explained above, +uses for raw binary output, as explained above. \item \lua{luazip}, from the kepler project, \hyphenatedurl{http://www.keplerproject.org/luazip/}. (version 1.2.1, but patched for compilation with \LUA\ 5.1) \item \lua{luafilesystem}, also from the kepler project, \hyphenatedurl{http://www.keplerproject.org/luafilesystem/}. - (version 1.4.1) -\item \lua{lpeg}, by Roberto Ierusalimschy, \hyphenatedurl{http://www.inf.puc-rio.br/~roberto/lpeg.html}. (version 0.9.0) + (version 1.5.0) +\item \lua{lpeg}, by Roberto Ierusalimschy, \hyphenatedurl{http://www.inf.puc-rio.br/~roberto/lpeg/lpeg.html}. (version 0.9.0) Note: \lua{lpeg} is not \UNICODE|-|aware, but interprets strings on a byte|-|per|-|byte basis. This mainly means that \luatex{lpeg.S} cannot be @@ -1180,11 +1205,11 @@ an error message if used with characters above code point 127: I.\,e.\ 'R' (range must have two characters)}, since to \lua{lpeg}, \type{ä} is two 'characters' (bytes), so \type{aä} totals three. -\item \lua{lzlib}, by Tiago Dionizio, \hyphenatedurl{http://mega.ist.utl.pt/~tngd/lua/}. (version 0.2) +\item \lua{lzlib}, by Tiago Dionizio, \hyphenatedurl{http://luaforge.net/projects/lzlib/}. (version 0.2) \item \lua{md5}, by Roberto Ierusalimschy \hyphenatedurl{http://www.inf.puc-rio.br/~roberto/md5/md5-5/md5.html}. \item \lua{luasocket}, by Diego Nehab -\hyphenatedurl{http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/} +\hyphenatedurl{http://w3.impa.br/~diego/software/luasocket/} (version 2.0.2). Note: the \type{.lua} support modules from \type{luasocket} are also @@ -1198,7 +1223,7 @@ The interfacing between \TEX\ and \LUA\ is facilitated by a set of library modules. The \LUA\ libraries in this chapter are all defined and initialized by the \LUATEX\ executable. Together, they allow \LUA\ scripts to query and change a number of \TEX's internal variables, run -various internal functions \TEX, and set up \LUATEX's hooks to execute +various internal \TEX\ functions, and set up \LUATEX's hooks to execute \LUA\ code. The following sections are in alphabetical order. @@ -1207,10 +1232,26 @@ The following sections are in alphabetical order. This library has functions that register, find and list callbacks. +A quick note on what callbacks are (thanks, Paul!): + +Callbacks are entry points to \LUATEX's internal operations, which can be +interspersed with additional \LUA\ code, and even replaced altogether. +In the first case, \TEX\ is simply augmented with new operations +(for instance, a manipulation of the nodes resulting from the paragraph +builder); in the second case, its hard-coded behavior (for instance, the +paragraph builder itself) is ignored and processing relies on user code only. + +More precisely, the code to be inserted at a given callback is a function +(an anonymous function or the name of a function variable); % Is this line useful? +it will receive the arguments associated with the callback, if any, and must +frequently return some other arguments for \TEX\ to resume its operations. + +The first task is registering a callback: + \startfunctioncall -id, error = callback.register(<string> callback_name,function callback_func) -id, error = callback.register(<string> callback_name,nil) -id, error = callback.register(<string> callback_name,false) +id, error = callback.register (<string> callback_name, <function> func) +id, error = callback.register (<string> callback_name, nil) +id, error = callback.register (<string> callback_name, false) \stopfunctioncall where the \syntax{callback_name} is a predefined callback name, see @@ -1235,7 +1276,7 @@ is present since version 0.38. Currently, callbacks are not dumped into the format file. \startfunctioncall -table info = callback.list() +<table> info = callback.list() \stopfunctioncall The keys in the table are the known callback names, the value is a @@ -1243,7 +1284,7 @@ boolean where \type{true} means that the callback is currently set (active). \startfunctioncall -function f = callback.find(callback_name) +<function> f = callback.find (callback_name) \stopfunctioncall If the callback is not set, \luatex{callback.find} returns \type{nil}. @@ -1258,7 +1299,7 @@ sense that there will not be backward-incompatible changes any more. Your callback function should have the following conventions: \startfunctioncall -<string> actual_name = function (number id_number, <string> asked_name) +<string> actual_name = function (<number> id_number, <string> asked_name) \stopfunctioncall Arguments: @@ -1333,10 +1374,6 @@ for writing is always opened in the current directory). Like \luatex{find_font_file}, but for virtual fonts. This applies to both \ALEPH's \OVF\ files and traditional Knuthian \VF\ files. -\subsubsection{\luatex{find_ocp_file}} - -Like \luatex{find_font_file}, but for ocp files. - \subsubsection{\luatex{find_map_file}} Like \luatex{find_font_file}, but for map files. @@ -1352,7 +1389,7 @@ Like \luatex{find_font_file}, but for subfont definition files. \subsubsection{\luatex{find_pk_file}} Like \luatex{find_font_file}, but for pk bitmap files. The argument -\type{name} is a bit special in this case. Its form is +\type{asked_name} is a bit special in this case. Its form is \starttyping <base res>dpi/<fontname>.<actual res>pk @@ -1460,7 +1497,6 @@ the optional \luatex{close} function next. \startfunctioncall function(<table> env) - return end \stopfunctioncall @@ -1485,7 +1521,7 @@ either one of the file discovery callbacks or the internal version of \sym{success} -Return false when a fatal error occurred (e.\,g.\ when the file cannot be +Return \type{false} when a fatal error occurred (e.\,g.\ when the file cannot be found, after all). \sym{data} @@ -1506,7 +1542,6 @@ The list of functions is as follows: \starttabulate[|l|p|] \NC \luatex{read_font_file} \NC ofm or tfm files \NC\NR \NC \luatex{read_vf_file} \NC virtual fonts \NC\NR -\NC \luatex{read_ocp_file} \NC ocp files \NC\NR \NC \luatex{read_map_file} \NC map files \NC\NR \NC \luatex{read_enc_file} \NC encoding files \NC\NR \NC \luatex{read_sfd_file} \NC subfont definition files \NC\NR @@ -1571,7 +1606,7 @@ end The calling convention for this callback is a bit more complicated than for most other callbacks. The function should either return a \LUA\ table representing a valid to|-|be|-|processed token or tokenlist, or -something else like nil or an empty table. +something else like \type{nil} or an empty table. If your \LUA\ function does not return a table representing a valid token, it will be immediately called again, until it eventually does @@ -1614,6 +1649,8 @@ values are: \NC alignment \NC a (partial) alignment is being added \NC\NR \NC after_output \NC an output routine has just finished \NC\NR \NC box \NC a typeset box is being added \NC\NR +%\NC pre_box \NC interline material is being added \NC\NR +%\NC adjust \NC \tex{vadjust} material is being added \NC\NR \NC new_graf \NC the beginning of a new paragraph \NC\NR \NC vmode_par \NC \tex{par} was found in vertical mode \NC\NR \NC hmode_par \NC \tex{par} was found in horizontal mode \NC\NR @@ -1630,9 +1667,8 @@ This callback does not replace any internal code. \subsubsection{\luatex{pre_linebreak_filter}} This callback is called just before \LUATEX\ starts converting a list -of nodes into a stack of \tex{hbox}es. The removal of a possible final skip -and the subsequent insertion of \tex{parfillskip} has not happened -yet at that moment. +of nodes into a stack of \tex{hbox}es, after the addition of +\type{\parfillskip}. \startfunctioncall function(<node> head, <string> groupcode) @@ -1665,6 +1701,16 @@ will be explained in the next two paragraphs. \NC fin_row \NC alignment row \NC\NR \stoptabulate +As for all the callbacks that deal with nodes, the return value can be one of three things: + +\startitemize +\item boolean \type{true} signals succesful processing +\item \type{<node>} signals that the \quote{head} node should be replaced by the returned node +\item boolean \type{false} signals that the \quote{head} node list should be ignored and +flushed from memory +\stopitemize + + This callback does not replace any internal code. @@ -1680,13 +1726,13 @@ end The returned node is the head of the list that will be added to the main vertical list, the boolean argument is true if this paragraph is -interrupted by a following math display. +interrupted by a following math display. If you return something that is not a \type{<node>}, \LUATEX\ will apply the internal linebreak algorithm on the list that starts at -\type{<head>}. Otherwise, the \type{<node>} you return is supposed +\type{<head>}. Otherwise, the \type{<node>} you return is supposed to be the head of a list of nodes that are all allowed in vertical -mode, and the last of those has to represent a hbox. Failure to do +mode, and at least one of those has to represent a hbox. Failure to do so will result in a fatal error. Setting this callback to \type{false} is possible, but dangerous, @@ -1713,7 +1759,7 @@ horizontal mode material. Math items and line boxes are ignored at the moment. \startfunctioncall -function(<node> head, <string> groupcode, <number> size, +function(<node> head, <string> groupcode, <number> size, <string> packtype [, <string> direction]) return true | false | <node> newhead end @@ -1725,7 +1771,7 @@ argument. If \type{exactly}, then the \type{size} is a \tex{hbox to ...}. In both cases, the number is in scaled points. The \type{direction} is either one of the three-letter direction specifier -strings, or nil (added in 0.45). +strings, or \type{nil} (added in 0.45). This callback does not replace any internal code. @@ -1754,7 +1800,7 @@ This callback is called when \TEX\ is ready to start boxing the box 255 for \tex{output}. \startfunctioncall -function(<node> head, <string> groupcode, <number> size, <string> packtype, +function(<node> head, <string> groupcode, <number> size, <string> packtype, <number> maxdepth [, <string> direction]) return true | false | <node> newhead end @@ -1794,7 +1840,7 @@ will be recalculated. The \type{next} of \type{head} is guaranteed to be non-nil. -The \type{next} of \type{tail} is guaranteed be nil, and therefore the +The \type{next} of \type{tail} is guaranteed to be nil, and therefore the second callback argument can often be ignored. It is provided for orthogonality, and because it can sometimes be handy when special processing has to take place. @@ -1805,7 +1851,8 @@ ligature creation pass. \subsubsection{\luatex{kerning}} \startfunctioncall -function(<node> head, <node> tail) end +function(<node> head, <node> tail) +end \stopfunctioncall No return values. This callback has to apply kerning between the nodes @@ -1820,7 +1867,7 @@ kern insertion pass. This callback replaces \LUATEX's math list to node list conversion algorithm. \startfunctioncall -function(<node> head, <string> displaytype, <boolean> need_penalties) +function(<node> head, <string> display_type, <boolean> need_penalties) return <node> newhead end \stopfunctioncall @@ -1835,20 +1882,32 @@ certainly result in an endless loop. \subsection{Information reporting callbacks} +\subsubsection{\luatex{pre_dump} (0.61)} + +\startfunctioncall +function() +end +\stopfunctioncall + +This function is called just before dumping to a format file starts. +It does not replace any code and there are neither arguments nor return values. + \subsubsection{\luatex{start_run}} \startfunctioncall function() +end \stopfunctioncall This callback replaces the code that prints \LUATEX's banner. Note that for -successful use, this callback has to be set in the lua initialization file, +successful use, this callback has to be set in the lua initialization script, otherwise it will be seen only after the run has already started. \subsubsection{\luatex{stop_run}} \startfunctioncall function() +end \stopfunctioncall This callback replaces the code that prints \LUATEX's statistics and \quote{output written @@ -1858,6 +1917,7 @@ to} messages. \startfunctioncall function() +end \stopfunctioncall Replaces the code that prints the \type{[} and the page number at the @@ -1869,6 +1929,7 @@ printing of box information that normally takes place when \startfunctioncall function() +end \stopfunctioncall Replaces the code that prints the \type{]} at the end of \tex{shipout}. @@ -1877,7 +1938,6 @@ Replaces the code that prints the \type{]} at the end of \tex{shipout}. \startfunctioncall function() - return end \stopfunctioncall @@ -1888,6 +1948,7 @@ the values in the \luatex{status} table useful. This callback does not replace any internal code. +\iffalse % this has been retracted for the moment \startitemize \sym{message} @@ -1911,13 +1972,31 @@ The final goal is the total replacement of \TEX's error handling routines, but that needs lots of adjustments in the web source because \TEX\ deals with errors in a somewhat haphazard fashion. This is why the exact definition of \type{indicator} is not given here. +\fi + +\subsection{PDF-related callbacks} + +\subsubsection{\luatex{finish_pdffile}} + +\startfunctioncall +function() +end +\stopfunctioncall + +This callback is called when all document pages are already written to the \PDF\ +file and \LUATEX\ is about to finalize the output document structure. Its intended +use is final update of \PDF\ dictionaries such as \type{/Catalog} or +\type{/Info}. The callback does not replace any code. There are neither +arguments nor return values. \subsection{Font-related callbacks} \subsubsection{\luatex{define_font}} \startfunctioncall -function(<string> name, <number> size, <number> id) return <table> font end +function(<string> name, <number> size, <number> id) + return <table> font +end \stopfunctioncall The string \type{name} is the filename part of the font @@ -1931,6 +2010,8 @@ The number \type{size} is a bit special: setting relative to the designsize of the font. \stopitemize +The \type{id} is the internal number assigned to the font. + The internal structure of the \type{font} table that is to be returned is explained in \in{chapter}[fonts]. That table is saved internally, so you can put extra fields in the table for your @@ -1939,6 +2020,392 @@ later \LUA\ code to use. Setting this callback to \type{false} is pointless as it will prevent font loading completely but will nevertheless generate errors. +\section{The \luatex{epdf} library} + +The \type{epdf} library provides Lua bindings to many \PDF\ access functions +that are defined by the poppler pdf viewer library (written in C$+{}+$ +by Kristian H\o gsberg, based on xpdf by Derek Noonburg). +Within \LUATEX\ (and \PDFTEX), +xpdf functionality is being used since long time to embed \PDF\ files. +The \type{epdf} library shall allow to scrutinize an external \PDF\ file. +It gives access to its document structure, +e.\,g., catalog, cross-reference table, individual pages, objects, +annotations, info, and metadata. + +The \type{epdf} library is still in alpha state: +\PDF\ access is currently read|-|only +(it's not yet possible to alter a \PDF\ file or to assemble it from scratch), +and many function bindings are still missing. + +For a start, +a \PDF\ file is opened by \type{epdf.open()} with file name, e.\,g.: + +\starttyping +doc = epdf.open("foo.pdf") +\stoptyping + +This normally returns a \type{PDFDoc} userdata variable; +but if the file could not be opened successfully, +instead of a fatal error just the value \type{nil} is returned. + +All Lua functions in the \type{epdf} library are named after the +poppler functions listed in the poppler header files for the various classes, +e.\,g., files \type{PDFDoc.h}, \type{Dict.h}, and \type{Array.h}. +These files can be found in the poppler subdirectory within the \LUATEX\ sources. +Which functions are already implemented in the \type{epdf} library +can be found in the \LUATEX\ source file \type{lepdflib.cc}. +For using the \type{epdf} library, +knowledge of the \PDF\ file architecture is indispensable. + +There are many different userdata types defined +by the \type{epdf} library, currently these are +\type{Annot}, +\type{AnnotBorder}, +\type{AnnotBorderStyle}, +\type{Annots}, +\type{Array}, +\type{Catalog}, +\type{EmbFile}, +\type{Dict}, +\type{GString}, +\type{LinkDest}, +\type{Object}, +\type{ObjectStream}, +\type{Page}, +\type{PDFDoc}, +\type{PDFRectangle}, +\type{Ref}, +\type{Stream}, +\type{XRef}, and +\type{XRefEntry}. + +All these userdata names and the Lua access functions closely resemble +the classes naming from the poppler header files, +including the choice of mixed upper and lower case letters. +The Lua function calls use object-oriented syntax, e.\,g., +the following calls return the \type{Page} object for page~1: + +\starttyping +pageref = doc:getCatalog():getPageRef(1) +pageobj = doc:getXRef():fetch(pageref.num, pageref.gen) +\stoptyping + +But writing such chained calls is risky, +as an intermediate function may return \type{nil} on error; +therefore between function calls there should be Lua type checks +(e.\,g., against \type{nil}) done. +If a non-object item is requested +(e.\,g., a \type{Dict} item by calling \type{page:getPieceInfo()}, +cf.~\type{Page.h}) but not available, +the Lua functions return \type{nil} (without error). +If a function should return an \type{Object}, but it's not existing, +a \type{Null} object is returned instead +(also without error; this is in|-|line with poppler behavior). + +All library objects have a \type{__gc} metamethod for garbage collection. +The \type{__tostring} metamethod gives the type name for each object. + +All object constructors: + +\startfunctioncall +<PDFDoc> = epdf.open(<string> PDF filename) +<Annot> = epdf.Annot(<XRef>, <Dict>, <Catalog>, <Ref>) +<Annots> = epdf.Annots(<XRef>, <Catalog>, <Object>) +<Array> = epdf.Array(<XRef>) +<Dict> = epdf.Dict(<XRef>) +<Object> = epdf.Object() +<PDFRectangle> = epdf.PDFRectangle() +\stopfunctioncall + +\type{Annot} methods: + +\startfunctioncall +<boolean> = <Annot>:isOK() +<Object> = <Annot>:getAppearance() +<AnnotBorder> = <Annot>:getBorder() +<boolean> = <Annot>:match(<Ref>) +\stopfunctioncall + +\type{AnnotBorderStyle} methods: + +\startfunctioncall +<number> = <AnnotBorderStyle>:getWidth() +\stopfunctioncall + +\type{Annots} methods: + +\startfunctioncall +<integer> = <Annots>:getNumAnnots() +<Annot> = <Annots>:getAnnot(<integer>) +\stopfunctioncall + +\type{Array} methods: + +\startfunctioncall + <Array>:incRef() + <Array>:decRef() +<integer> = <Array>:getLength() + <Array>:add(<Object>) +<Object> = <Array>:get(<integer>) +<Object> = <Array>:getNF(<integer>) +<string> = <Array>:getString(<integer>) +\stopfunctioncall + +\type{Catalog} methods: + +\startfunctioncall +<boolean> = <Catalog>:isOK() +<integer> = <Catalog>:getNumPages() +<Page> = <Catalog>:getPage(<integer>) +<Ref> = <Catalog>:getPageRef(<integer>) +<string> = <Catalog>:getBaseURI() +<string> = <Catalog>:readMetadata() +<Object> = <Catalog>:getStructTreeRoot() +<integer> = <Catalog>:findPage(<integer> object number, <integer> object generation) +<LinkDest> = <Catalog>:findDest(<string> name) +<Object> = <Catalog>:getDests() +<integer> = <Catalog>:numEmbeddedFiles() +<EmbFile> = <Catalog>:embeddedFile(<integer>) +<integer> = <Catalog>:numJS() +<string> = <Catalog>:getJS(<integer>) +<Object> = <Catalog>:getOutline() +<Object> = <Catalog>:getAcroForm() +\stopfunctioncall + +\type{EmbFile} methods: + +\startfunctioncall +<string> = <EmbFile>:name() +<string> = <EmbFile>:description() +<integer> = <EmbFile>:size() +<string> = <EmbFile>:modDate() +<string> = <EmbFile>:createDate() +<string> = <EmbFile>:checksum() +<string> = <EmbFile>:mimeType() +<Object> = <EmbFile>:streamObject() +<boolean> = <EmbFile>:isOk() +\stopfunctioncall + +\type{Dict} methods: + +\startfunctioncall + <Dict>:incRef() + <Dict>:decRef() +<integer> = <Dict>:getLength() + <Dict>:add(<string>, <Object>) + <Dict>:set(<string>, <Object>) + <Dict>:remove(<string>) +<boolean> = <Dict>:is(<string>) +<Object> = <Dict>:lookup(<string>) +<Object> = <Dict>:lookupNF(<string>) +<integer> = <Dict>:lookupInt(<string>, <string>) +<string> = <Dict>:getKey(<integer>) +<Object> = <Dict>:getVal(<integer>) +<Object> = <Dict>:getValNF(<integer>) +\stopfunctioncall + +\type{LinkDest} methods: + +\startfunctioncall +<boolean> = <LinkDest>:isOK() +<integer> = <LinkDest>:getKind() +<string> = <LinkDest>:getKindName() +<boolean> = <LinkDest>:isPageRef() +<integer> = <LinkDest>:getPageNum() +<Ref> = <LinkDest>:getPageRef() +<number> = <LinkDest>:getLeft() +<number> = <LinkDest>:getBottom() +<number> = <LinkDest>:getRight() +<number> = <LinkDest>:getTop() +<number> = <LinkDest>:getZoom() +<boolean> = <LinkDest>:getChangeLeft() +<boolean> = <LinkDest>:getChangeTop() +<boolean> = <LinkDest>:getChangeZoom() +\stopfunctioncall + +\type{Object} methods: + +\startfunctioncall + <Object>:initBool(<boolean>) + <Object>:initInt(<integer>) + <Object>:initReal(<number>) + <Object>:initString(<string>) + <Object>:initName(<string>) + <Object>:initNull() + <Object>:initArray(<XRef>) + <Object>:initDict(<XRef>) + <Object>:initStream(<Stream>) + <Object>:initRef(<integer> object number, <integer> object generation) + <Object>:initCmd(<string>) + <Object>:initError() + <Object>:initEOF() +<Object> = <Object>:fetch(<XRef>) +<integer> = <Object>:getType() +<string> = <Object>:getTypeName() +<boolean> = <Object>:isBool() +<boolean> = <Object>:isInt() +<boolean> = <Object>:isReal() +<boolean> = <Object>:isNum() +<boolean> = <Object>:isString() +<boolean> = <Object>:isName() +<boolean> = <Object>:isNull() +<boolean> = <Object>:isArray() +<boolean> = <Object>:isDict() +<boolean> = <Object>:isStream() +<boolean> = <Object>:isRef() +<boolean> = <Object>:isCmd() +<boolean> = <Object>:isError() +<boolean> = <Object>:isEOF() +<boolean> = <Object>:isNone() +<boolean> = <Object>:getBool() +<integer> = <Object>:getInt() +<number> = <Object>:getReal() +<number> = <Object>:getNum() +<string> = <Object>:getString() +<string> = <Object>:getName() +<Array> = <Object>:getArray() +<Dict> = <Object>:getDict() +<Stream> = <Object>:getStream() +<Ref> = <Object>:getRef() +<integer> = <Object>:getRefNum() +<integer> = <Object>:getRefGen() +<string> = <Object>:getCmd() +<integer> = <Object>:arrayGetLength() + = <Object>:arrayAdd(<Object>) +<Object> = <Object>:arrayGet(<integer>) +<Object> = <Object>:arrayGetNF(<integer>) +<integer> = <Object>:dictGetLength(<integer>) + = <Object>:dictAdd(<string>, <Object>) + = <Object>:dictSet(<string>, <Object>) +<Object> = <Object>:dictLookup(<string>) +<Object> = <Object>:dictLookupNF(<string>) +<string> = <Object>:dictgetKey(<integer>) +<Object> = <Object>:dictgetVal(<integer>) +<Object> = <Object>:dictgetValNF(<integer>) +<boolean> = <Object>:streamIs() + = <Object>:streamReset() +<integer> = <Object>:streamGetChar() +<integer> = <Object>:streamLookChar() +<integer> = <Object>:streamGetPos() + = <Object>:streamSetPos(<integer>) +<Dict> = <Object>:streamGetDict() +\stopfunctioncall + +\type{Page} methods: + +\startfunctioncall +<boolean> = <Page>:isOk() +<integer> = <Page>:getNum() +<PDFRectangle> = <Page>:getMediaBox() +<PDFRectangle> = <Page>:getCropBox() +<boolean> = <Page>:isCropped() +<number> = <Page>:getMediaWidth() +<number> = <Page>:getMediaHeight() +<number> = <Page>:getCropWidth() +<number> = <Page>:getCropHeight() +<PDFRectangle> = <Page>:getBleedBox() +<PDFRectangle> = <Page>:getTrimBox() +<PDFRectangle> = <Page>:getArtBox() +<integer> = <Page>:getRotate() +<string> = <Page>:getLastModified() +<Dict> = <Page>:getBoxColorInfo() +<Dict> = <Page>:getGroup() +<Stream> = <Page>:getMetadata() +<Dict> = <Page>:getPieceInfo() +<Dict> = <Page>:getSeparationInfo() +<Dict> = <Page>:getResourceDict() +<Object> = <Page>:getAnnots() +<Links> = <Page>:getLinks(<Catalog>) +<Object> = <Page>:getContents() +\stopfunctioncall + +\type{PDFDoc} methods: + +\startfunctioncall +<boolean> = <PDFDoc>:isOk() +<integer> = <PDFDoc>:getErrorCode() +<string> = <PDFDoc>:getErrorCodeName() +<string> = <PDFDoc>:getFileName() +<XRef> = <PDFDoc>:getXRef() +<Catalog> = <PDFDoc>:getCatalog() +<number> = <PDFDoc>:getPageMediaWidth() +<number> = <PDFDoc>:getPageMediaHeight() +<number> = <PDFDoc>:getPageCropWidth() +<number> = <PDFDoc>:getPageCropHeight() +<integer> = <PDFDoc>:getNumPages() +<string> = <PDFDoc>:readMetadata() +<Object> = <PDFDoc>:getStructTreeRoot() +<integer> = <PDFDoc>:findPage(<integer> object number, <integer> object generation) +<Links> = <PDFDoc>:getLinks(<integer>) +<LinkDest> = <PDFDoc>:findDest(<string>) +<boolean> = <PDFDoc>:isEncrypted() +<boolean> = <PDFDoc>:okToPrint() +<boolean> = <PDFDoc>:okToChange() +<boolean> = <PDFDoc>:okToCopy() +<boolean> = <PDFDoc>:okToAddNotes() +<boolean> = <PDFDoc>:isLinearized() +<Object> = <PDFDoc>:getDocInfo() +<Object> = <PDFDoc>:getDocInfoNF() +<integer> = <PDFDoc>:getPDFMajorVersion() +<integer> = <PDFDoc>:getPDFMinorVersion() +\stopfunctioncall + +\type{PDFRectangle} methods: + +\startfunctioncall +<boolean> = <PDFRectangle>:isValid() +\stopfunctioncall + +%\type{Ref} methods: +% +%\startfunctioncall +%\stopfunctioncall + +\type{Stream} methods: + +\startfunctioncall +<integer> = <Stream>:getKind() +<string> = <Stream>:getKindName() + = <Stream>:reset() + = <Stream>:close() +<integer> = <Stream>:getChar() +<integer> = <Stream>:lookChar() +<integer> = <Stream>:getRawChar() +<integer> = <Stream>:getUnfilteredChar() + = <Stream>:unfilteredReset() +<integer> = <Stream>:getPos() +<boolean> = <Stream>:isBinary() +<Stream> = <Stream>:getUndecodedStream() +<Dict> = <Stream>:getDict() +\stopfunctioncall + +\type{XRef} methods: + +\startfunctioncall +<boolean> = <XRef>:isOk() +<integer> = <XRef>:getErrorCode() +<boolean> = <XRef>:isEncrypted() +<boolean> = <XRef>:okToPrint() +<boolean> = <XRef>:okToPrintHighRes() +<boolean> = <XRef>:okToChange() +<boolean> = <XRef>:okToCopy() +<boolean> = <XRef>:okToAddNotes() +<boolean> = <XRef>:okToFillForm() +<boolean> = <XRef>:okToAccessibility() +<boolean> = <XRef>:okToAssemble() +<Object> = <XRef>:getCatalog() +<Object> = <XRef>:fetch(<integer> object number, <integer> object generation) +<Object> = <XRef>:getDocInfo() +<Object> = <XRef>:getDocInfoNF() +<integer> = <XRef>:getNumObjects() +<integer> = <XRef>:getRootNum() +<integer> = <XRef>:getRootGen() +<integer> = <XRef>:getSize() +<Object> = <XRef>:getTrailerDict() +\stopfunctioncall + +%*********************************************************************** + \section{The \luatex{font} library} The font library provides the interface into the internals of the font @@ -1976,8 +2443,8 @@ sense that there will not be backward-incompatible changes any more. <table> vf_fnt = font.read_vf(<string> name, <number> s) \stopfunctioncall -The meaning of the number \type{s}, and the format of the returned -table is similar to the one returned by the \luatex{read_tfm()} function. +The meaning of the number \type{s} and the format of the returned +table are similar to the ones in the \luatex{read_tfm()} function. \subsection{The fonts array} @@ -1999,6 +2466,12 @@ The two metatable functions implementing the virtual array are: font.setfont(<number> n, <table> f) \stopfunctioncall +Note that at the moment, each access to the \type{font.fonts} or call +to \type{font.getfont} creates a lua table for the whole font. This +process can be quite slow. In a later version of \LUATEX, this +interface will change (it will start using userdata objects instead of +actual tables). + Also note the following: assignments can only be made to fonts that have already been defined in \TEX, but have not been accessed {\it at all\/} since that definition. This limits the usability of the write @@ -2013,8 +2486,8 @@ You can test for the status of a font by calling this function: <boolean> f = font.frozen(<number> n) \stopfunctioncall -The return value is one of true (unassignable), false (can be changed) -or nil (not a valid font at all). +The return value is one of \type{true} (unassignable), \type{false} (can be changed) +or \type{nil} (not a valid font at all). \subsection{Defining a font directly} @@ -2032,7 +2505,7 @@ raised. The table is a font structure, as explained in \subsection{Projected next font id} \startfunctioncall -<number> i = font.nextid(); +<number> i = font.nextid() \stopfunctioncall This returns the font id number that would be returned by a @@ -2043,17 +2516,17 @@ themselves. \subsection{Font id (0.47)} \startfunctioncall -<number> i = font.id(<string> csname); +<number> i = font.id(<string> csname) \stopfunctioncall This returns the font id associated with \type{csname} string, or $-1$ -if \type{csname} is not defined, new in 0.47. +if \type{csname} is not defined; new in 0.47. \subsection{Currently active font} \startfunctioncall -<number> i = font.current(); -font.current(<number> i); +<number> i = font.current() +font.current(<number> i) \stopfunctioncall This gets or sets the currently used font number. @@ -2061,7 +2534,7 @@ This gets or sets the currently used font number. \subsection{Maximum font id} \startfunctioncall -<number> i = font.max(); +<number> i = font.max() \stopfunctioncall This is the largest used index in \type{font.fonts}. @@ -2082,14 +2555,10 @@ there can be holes in the sequence. \section{The \luatex{fontloader} library (0.36)} -{\bf This library used to be called \quote{fontforge}. The library -is still available under that name for now, but that alias will be -removed starting with beta \type{0.41.0}} - \subsection{Getting quick information on a font} \startfunctioncall -local info = fontloader.info('filename') +<table> info = fontloader.info(<string> filename) \stopfunctioncall This function returns either \type{nil}, or a \type{table}, or an @@ -2116,8 +2585,7 @@ directory contents. If you want to use an \OPENTYPE\ font, you have to get the metric information from somewhere. Using the \type{fontloader} library, the -basic way to get that information is thus: - +simplest way to get that information is thus: \starttyping function load_font (filename) @@ -2136,10 +2604,11 @@ myfont = load_font('/opt/tex/texmf/fonts/data/arial.ttf') The main function call is \startfunctioncall -f, w = fontloader.open('filename') +<userdata> f, <table> w = fontloader.open(<string> filename) +<userdata> f, <table> w = fontloader.open(<string> filename, <string> fontname) \stopfunctioncall -The first return value is a table representation of the font. The +The first return value is a userdata representation of the font. The second return value is a table containing any warnings and errors reported by fontloader while opening the font. In normal typesetting, you would probably ignore the second argument, but it can be useful @@ -2150,15 +2619,23 @@ collections, you have to use a second string argument to specify which font you want from the collection. Use the \type{fontname} strings that are returned by \type{fontloader.info} for that. +To turn the font into a table, \type{fontloader.to_table} is used on +the font returned by \type{fontloader.open}. + \startfunctioncall -f, w = fontloader.open('filename','fontname') +<table> f = fontloader.to_table(<userdata> font) \stopfunctioncall +This table cannot be used directly by \LUATEX\ and should be turned +into another one as described in~\in{chapter}[fonts]. Do not forget to store the \type{fontname} value in the \type{psname} field of the metrics table to be returned to \LUATEX, otherwise the font inclusion backend will not be able to find the correct font in the collection. +See \in{section}[fontloadertables] for details on the userdata object +returned by \type{fontloader.open()} and the layout of the +\type{metrics} table returned by \type{fontloader.to_table()}. The font file is parsed and partially interpreted by the font loading routines from \FONTFORGE. The file format can be \OPENTYPE, @@ -2185,32 +2662,43 @@ actual font file ourselves: \stopitemize +A loaded font is discarded with: + +\startfunctioncall +fontloader.close(<userdata> font) +\stopfunctioncall + \subsection{Applying a \quote{feature file}} You can apply a \quote{feature file} to a loaded font: \startfunctioncall -fontloader.apply_featurefile(f,'filename') +<table> errors = fontloader.apply_featurefile(<userdata> font, <string> filename) \stopfunctioncall A \quote{feature file} is a textual representation of the features in an -\OPENTYPE\ font. See -\hyphenatedurl {http://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html} -and -\hyphenatedurl {http://fontforge.sourceforge.net/featurefile.html} +\OPENTYPE\ font. See\crlf +\hyphenatedurl {http://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html}\crlf +and\crlf +\hyphenatedurl {http://fontforge.sourceforge.net/featurefile.html}\crlf for a more detailed description of feature files. +If the function fails, the return value is a table containing any +errors reported by fontloader while applying the feature file. On +success, \type{nil} is returned. (the return value is new in 0.65) + + \subsection{Applying an \quote{\AFM\ file}} You can apply an \quote{\AFM\ file} to a loaded font: \startfunctioncall -fontloader.apply_afmfile(f,'filename') +<table> errors = fontloader.apply_afmfile(<userdata> font, <string> filename) \stopfunctioncall An \AFM\ file is a textual representation of (some of) the meta information -in a \TYPEONE\ font. See \hyphenatedurl{http://www.adobe.com/devnet/font/pdfs/5004.AFM_Spec.pdf} +in a \TYPEONE\ font. See \hyphenatedurl{ftp://ftp.math.utah.edu/u/ma/hohn/linux/postscript/5004.AFM_Spec.pdf} for more information about afm files. Note: If you \type{fontloader.open()} a \TYPEONE\ file named \type{font.pfb}, @@ -2218,8 +2706,83 @@ the library will automatically search for and apply \type{font.afm} if it exists in the same directory as the file \type{font.pfb}. In that case, there is no need for an explicit call to \type{apply_afmfile()}. +If the function fails, the return value is a table containing any +errors reported by fontloader while applying the AFM file. On +success, \type{nil} is returned. (the return value is new in 0.65) + +\subsection[fontloadertables]{Fontloader font tables} + +As mentioned earlier, the return value of \type{fontloader.open()} is +a userdata object. In \LUATEX\ versions before 0.63, the only way to +have access to the actual metrics was to call +\type{fontloader.to_table()} on this object, returning the table +structure that is explained in the following subsections. + +However, it turns out that the result from +\type{fontloader.to_table()} sometimes needs very large amounts of memory +(depending on the font's complexity and size) so starting with \LUATEX\ 0.63, +it is possible to access the userdata object directly. + +In the \LUATEX\ 0.63.0, the following is implemented: + +\startitemize +\item all top-level keys that would be returned by \type{to_table()} + can also be accessed directly. +\item the top-level key \quote{glyphs} returns a {\it virtual\/} array that + allows indices from \type{0} to ($\type{f.glyphmax}-1$). +\item the items in that virtual array (the actual glyphs) are themselves also + userdata objects, and each has accessors for all of the keys + explained in the section \quote{Glyph items} below. +\item the top-level key \quote{subfonts} returns an {\it actual} array of + userdata objects, one for each of the subfonts (or nil, if there are no subfonts). +\stopitemize + + +A short example may be helpful. This code generates a printout of all +the glyph names in the font \type{PunkNova.kern.otf}: + +\starttyping +local f = fontloader.open('PunkNova.kern.otf') +print (f.fontname) +local i = 0 +while (i < f.glyphmax) do + local g = f.glyphs[i] + if g then + print(g.name) + end + i = i + 1 +end +fontloader.close(f) +\stoptyping + +In this case, the \LUATEX\ memory requirement stays below 100MB on the +test computer, while the internal stucture generated by +\type{to_table()} needs more than 2GB of memory (the font itself is +6.9MB in disk size). + +In \LUATEX\ 0.63 only the top-level font, the subfont table entries, +and the glyphs are virtual objects, everything else still produces +normal lua values and tables. In future versions, more return values +may be replaced by userdata objects (as much as needed to keep the +memory requirements in check). + +If you want to know the valid fields in a font or glyph +structure, call the \type{fields} function on an object of a +particular type (either glyph or font for now, more will be +implemented later): + +\startfunctioncall +<table> fields = fontloader.fields(<userdata> font) +<table> fields = fontloader.fields(<userdata> font_glyph) +\stopfunctioncall + +For instance: + +\startfunctioncall +local fields = fontloader.fields(f) +local fields = fontloader.fields(f.glyphs[0]) +\stopfunctioncall -\subsection{Fontloader font tables} \subsubsection{Table types} @@ -2318,7 +2881,8 @@ information (quite a few of these are only present if nonzero). \NC width \NC number \NC only for horizontal fonts\NC\NR \NC vwidth \NC number \NC only for vertical fonts\NC\NR \NC lsidebearing \NC number \NC only if nonzero and not equal to boundingbox[1]\NC\NR -\NC class \NC string \NC one of "automatic", "none", "base", "ligature", "mark", "component" \NC\NR +\NC class \NC string \NC one of "none", "base", "ligature", "mark", "component" + (if not present, the glyph class is \quote{automatic})\NC\NR \NC kerns \NC array \NC only for horizontal fonts, if set\NC\NR \NC vkerns \NC array \NC only for vertical fonts, if set\NC\NR \NC dependents \NC array \NC linear array of glyph name strings, only if nonempty\NC\NR @@ -2393,7 +2957,7 @@ The \type{ligatures} is a linear array of small hashes: \starttabulate[|lT|l|p|] \NC \ssbf key \NC \bf type \NC \bf explanation \NC\NR -\NC lig \NC table \NC uses the same substructure as a single \type{possub} item\NC\NR +\NC lig \NC table \NC uses the same substructure as a single item in the \type{lookups} table explained above\NC\NR \NC char \NC string \NC \NC\NR \NC components \NC array \NC linear array of named components\NC\NR \NC ccnt \NC number \NC \NC\NR @@ -2412,7 +2976,7 @@ anchor type, which is one of \NC cexit \NC table \NC cursive exit point\NC\NR \stoptabulate -The content of these is an short array of defined anchors, with the +The content of these is a short array of defined anchors, with the entry keys being the anchor names. For all except \type{baselig}, the value is a single table with this definition: @@ -2669,7 +3233,7 @@ actually set: \stoptabulate -The features subtable of gpos has: +The features subtable items of gpos have: \starttabulate[|lT|l|p|] \NC \ssbf key \NC \bf type \NC \bf explanation \NC\NR @@ -2703,13 +3267,10 @@ The kernclass with subtables table has: \starttabulate[|lT|l|p|] \NC \ssbf key \NC \bf type \NC \bf explanation \NC\NR -%\NC first_cnt \NC number \NC \NC\NR -%\NC second_cnt \NC number \NC \NC\NR \NC firsts \NC array of strings \NC \NC\NR \NC seconds \NC array of strings \NC \NC\NR -\NC lookup \NC string \NC associated lookup \NC \NR +\NC lookup \NC string or array \NC associated lookup(s) \NC \NR \NC offsets \NC array of numbers \NC \NC\NR -%\NC kcid \NC number \NC ? \NC\NR \stoptabulate \subsubsubsection{gsub table} @@ -3092,11 +3653,11 @@ commands like \tex{pdfximagebbox}. Image objects can also be used within virtual fonts via the \type{image} command listed in~\in{section}[virtualfonts]. -\subsubsubject{\luatex{img.new}} +\subsection{\luatex{img.new}} \startfunctioncall <image> var = img.new() -<image> var = img.new(image_spec) +<image> var = img.new(<table> image_spec) \stopfunctioncall This function creates a userdata object of type \quote {image}. The @@ -3107,20 +3668,20 @@ other keys can also be useful, these are explained below. You can either say \starttyping -a=img.new() +a = img.new() \stoptyping followed by \starttyping -a.filename="foo.png" +a.filename = "foo.png" \stoptyping or you can put the file name (and some or all of the other keys) into a table directly, like so: \starttyping -a=img.new{filename='foo.pdf',page=1} +a = img.new({filename='foo.pdf', page=1}) \stoptyping The generated \type{<image>} userdata object allows access to a set of @@ -3141,10 +3702,11 @@ just creates the \type{<image>} userdata object and initializes some memory structures. The \type{<image>} object and its internal structures are automatically garbage collected. -Once the image is scanned, all the values in the -\type{<image>} become frozen, and you cannot change them any more. +Once the image is scanned, all the values in the \type{<image>} +except \type{width}, \type{height} and \type{depth}, become frozen, +and you cannot change them any more. -\subsubsubject{\luatex{img.keys}} +\subsection{\luatex{img.keys}} \startfunctioncall <table> keys = img.keys() @@ -3156,31 +3718,43 @@ keys, both user-supplied and automatic ones. % hahe: i need to add r/w ro column... \starttabulate[|l|l|p|] \NC \bf field name\NC \bf type \NC description \NC \NR -\NC depth \NC number \NC the image depth for \LUATEX\ (in scaled points)\NC \NR -\NC height \NC number \NC the image height for \LUATEX\ (in scaled points)\NC \NR -\NC width \NC number \NC the image width for \LUATEX\ (in scaled points)\NC \NR -\NC transform \NC number \NC the image transform, integer number 0..7\NC \NR \NC attr \NC string \NC the image attributes for \LUATEX \NC \NR -\NC filename \NC string \NC the image file name \NC \NR -\NC stream \NC string \NC the raw stream data for an \type{/Xobject} \type{/Form} object\NC \NR -\NC page \NC ?? \NC the identifier for the requested image - page (type is number or string, - default is the number 1)\NC \NR -\NC pagebox \NC string \NC the requested bounding box, - one of \type {none}, \type {media}, \type {crop}, \type {bleed}, \type {trim}, \type {art} \NC \NR -\NC bbox \NC table \NC table with 4 boundingbox dimensions \type{llx}, \type{lly}, - \type{urx}, and \type{ury} overruling the \type{pagebox} entry\NC \NR -\NC filepath \NC string \NC the full (expanded) file name of the image \NC \NR -\NC colordepth \NC number \NC the number of bits used by the color space \NC \NR +\NC bbox \NC table \NC table with 4 boundingbox dimensions + \type{llx}, \type{lly}, \type{urx}, + and \type{ury} overruling the \type{pagebox} + entry\NC \NR +\NC colordepth \NC number \NC the number of bits used by the color space\NC \NR \NC colorspace \NC number \NC the color space object number \NC \NR -\NC imagetype \NC string \NC one of \type {pdf}, \type {png}, \type {jpg}, \type {jbig2}, or \type{nil} \NC \NR -\NC objnum \NC number \NC the \PDF\ image object number \NC \NR +\NC depth \NC number \NC the image depth for \LUATEX\ + (in scaled points)\NC \NR +\NC filename \NC string \NC the image file name \NC \NR +\NC filepath \NC string \NC the full (expanded) file name of the image\NC \NR +\NC height \NC number \NC the image height for \LUATEX\ + (in scaled points)\NC \NR +\NC imagetype \NC string \NC one of \type{pdf}, \type{png}, \type{jpg}, \type{jp2}, + \type{jbig2}, or \type{nil} \NC \NR \NC index \NC number \NC the \PDF\ image name suffix \NC \NR +\NC objnum \NC number \NC the \PDF\ image object number \NC \NR +\NC page \NC ?? \NC the identifier for the requested image page + (type is number or string, + default is the number 1)\NC \NR +\NC pagebox \NC string \NC the requested bounding box, one of + \type {none}, \type {media}, \type {crop}, + \type {bleed}, \type {trim}, \type {art} \NC \NR \NC pages \NC number \NC the total number of available pages \NC \NR +\NC rotation \NC number \NC the image rotation from included \PDF\ file, + in multiples of 90~deg. \NC \NR +\NC stream \NC string \NC the raw stream data for an \type{/Xobject} + \type{/Form} object\NC \NR +\NC transform \NC number \NC the image transform, integer number 0..7\NC \NR +\NC width \NC number \NC the image width for \LUATEX\ + (in scaled points)\NC \NR +\NC xres \NC number \NC the horizontal natural image resolution + (in \DPI) \NC \NR \NC xsize \NC number \NC the natural image width \NC \NR +\NC yres \NC number \NC the vertical natural image resolution + (in \DPI) \NC \NR \NC ysize \NC number \NC the natural image height \NC \NR -\NC xres \NC number \NC the horizontal natural image resolution (in \DPI) \NC \NR -\NC yres \NC number \NC the vertical natural image resolution (in \DPI) \NC \NR \stoptabulate A running (undefined) dimension in \type{width}, \type{height}, or \type{depth} is @@ -3226,11 +3800,11 @@ If a \PDF\ file to be embedded already contains a \type{/Rotate} specification, the rotation result is the combination of the \type{/Rotate} rotation followed by the \type{transform} operation. -\subsubsubject{\luatex{img.scan}} +\subsection{\luatex{img.scan}} \startfunctioncall <image> var = img.scan(<image> var) -<image> var = img.scan(image_spec) +<image> var = img.scan(<table> image_spec) \stopfunctioncall When you say \type{img.scan(a)} for a new image, the file is scanned, @@ -3245,7 +3819,7 @@ set up (if they have been changed by the user in the meantime). For ease of use, you can do right-away a \starttyping -<image> a = img.scan { filename = "foo.png" } +<image> a = img.scan ({ filename = "foo.png" }) \stoptyping without a prior \type{img.new}. @@ -3256,11 +3830,11 @@ throw away \type{a} again by saying \type{a=nil}. In that case no image object will be reserved in the PDF, and the used memory will be cleaned up automatically. -\subsubsubject{\luatex{img.copy}} +\subsection{\luatex{img.copy}} \startfunctioncall <image> var = img.copy(<image> var) -<image> var = img.copy(image_spec) +<image> var = img.copy(<table> image_spec) \stopfunctioncall If you say \type{a = b}, then both variables point to the same @@ -3275,11 +3849,11 @@ from their initial values that were just copies from \type{a}. % can, and what cannot be changed would be helpful. % -- will think about it... -\subsubsubject{\luatex{img.write}} +\subsection{\luatex{img.write}} \startfunctioncall <image> var = img.write(<image> var) -<image> var = img.write(image_spec) +<image> var = img.write(<table> image_spec) \stopfunctioncall By \type{img.write(a)} a \PDF\ object number is allocated, @@ -3292,17 +3866,17 @@ after the shipping of the current page is finished. Again you can do a terse call like \starttyping -img.write { filename = "foo.png" } +img.write ({ filename = "foo.png" }) \stoptyping The \type{<image>} variable is returned in case you want it for later processing. -\subsubsubject{\luatex{img.immediatewrite}} +\subsection{\luatex{img.immediatewrite}} \startfunctioncall <image> var = img.immediatewrite(<image> var) -<image> var = img.immediatewrite(image_spec) +<image> var = img.immediatewrite(<table> image_spec) \stopfunctioncall By \type{img.immediatewrite(a)} a \PDF\ object number is @@ -3318,16 +3892,16 @@ you will have a dangling image object in the \PDF\ file. Also here you can do a terse call like \starttyping -a = img.immediatewrite { filename = "foo.png" } +a = img.immediatewrite ({ filename = "foo.png" }) \stoptyping The \type{<image>} variable is returned and you will most likely need it. -\subsubsubject{\luatex{img.node}} +\subsection{\luatex{img.node}} \startfunctioncall <node> n = img.node(<image> var) -<node> n = img.node(image_spec) +<node> n = img.node(<table> image_spec) \stopfunctioncall This function allocates a \PDF\ object number and returns a @@ -3336,7 +3910,7 @@ image parameters \type{width}, \type{height}, \type{depth}, and \type{objnum}. Also here you can do a terse call like: \starttyping -n = img.node { filename = "foo.png" } +n = img.node ({ filename = "foo.png" }) \stoptyping This example outputs an image: @@ -3345,16 +3919,17 @@ This example outputs an image: node.write(img.node{filename="foo.png"}) \stoptyping -\subsubsubject{\luatex{img.types}} +\subsection{\luatex{img.types}} \startfunctioncall <table> types = img.types() \stopfunctioncall This function returns a list with the supported image file type names, -currently these are \type {pdf}, \type {png}, \type {jpg}, and \type {jbig2}. +currently these are \type{pdf}, \type{png}, \type{jpg}, \type{jp2} (JPEG~2000), +and \type{jbig2}. -\subsubsubject{\luatex{img.boxes}} +\subsection{\luatex{img.boxes}} \startfunctioncall <table> boxes = img.boxes() @@ -3364,6 +3939,7 @@ This function returns a list with the supported \PDF\ page box names, currently these are \type {media}, \type {crop}, \type {bleed}, \type {trim}, and \type {art} (all in lowercase letters). +%*********************************************************************** \section{The \luatex{kpse} library} @@ -3518,8 +4094,8 @@ This is used for the size argument of the formats \type{pk}, \type{gf}, and \typ \subsection{\luatex{lookup}} -A more powerful (but slower) generic method for finding files is also -available (since 0.51). +A more powerful (but slower) generic method for finding files is also +available (since 0.51). It returns a string for each found file. \startfunctioncall <string> f, ... = kpse.lookup(<string> filename, <table> options) @@ -3534,12 +4110,13 @@ The options match commandline arguments from \type{kpsewhich}: \NC dpi \NC number \NC use this resolution for this lookup; default 600\NC \NR \NC path \NC string \NC search in the given path\NC \NR \NC all \NC boolean \NC output all matches, not just the first\NC \NR -\NC must-exist\NC boolean \NC search the disk as well as ls-R if necessary\NC \NR +\NC mustexist \NC boolean \NC (0.65 and higher) search the disk as well as ls-R if necessary\NC \NR +\NC must-exist\NC boolean \NC (0.64 and lower) search the disk as well as ls-R if necessary\NC \NR \NC mktexpk \NC boolean \NC disable/enable mktexpk generation for this lookup\NC \NR \NC mktextex \NC boolean \NC disable/enable mktextex generation for this lookup\NC \NR \NC mktexmf \NC boolean \NC disable/enable mktexmf generation for this lookup\NC \NR \NC mktextfm \NC boolean \NC disable/enable mktextfm generation for this lookup\NC \NR -\NC subdir \NC string +\NC subdir \NC string or table \NC only output matches whose directory part ends with the given string(s) \NC \NR \stoptabulate @@ -3556,7 +4133,7 @@ kpse.init_prog(<string> prefix, <number> base_dpi, <string> mfmode, <string> fal \subsection{\luatex{readable_file}} -Test if an (absolute) file name is a readable file +Test if an (absolute) file name is a readable file. \startfunctioncall <string> f = kpse.readable_file(<string> name) @@ -3649,8 +4226,7 @@ lang.hyphenation(<language> l, <string> n) \stopfunctioncall Either returns the current hyphenation exceptions for this language, -or adds new ones. The syntax of the string is explained in the next -chapter,~\in{section}[patternsexceptions]. +or adds new ones. The syntax of the string is explained in~\in{section}[patternsexceptions]. \startfunctioncall lang.clear_hyphenation(<language> l) @@ -3663,7 +4239,7 @@ Clears the exception dictionary for this language. \stopfunctioncall Creates a hyphenation key from the supplied hyphenation value. The -syntax of the argument string is explained~\in{section}[patternsexceptions]. +syntax of the argument string is explained in~\in{section}[patternsexceptions]. This function is useful if you want to do something else based on the words in a dictionary file, like spell-checking. @@ -3743,17 +4319,17 @@ This library contains one read|-|only item: \stoptyping This returns the \LUA\ version identifier string. The value is -currently \directlua {tex.print('lua.version')}. +currently \directlua {tex.print(lua.version)}. \subsection{\LUA\ bytecode registers} \LUA\ registers can be used to communicate \LUA\ functions across \LUA\ chunks. The accepted values for assignments are functions and -nil. Likewise, the retrieved value is either a function or \type{nil}. +\type{nil}. Likewise, the retrieved value is either a function or \type{nil}. \starttyping -lua.bytecode[n] = function () .. end -lua.bytecode[n]() +lua.bytecode[<number> n] = <function> f +lua.bytecode[<number> n]() \stoptyping The contents of the \luatex{lua.bytecode} array is stored inside the format @@ -3767,7 +4343,7 @@ implementation and thus subject to change. The associated function calls are \startfunctioncall -function f = lua.getbytecode(<number> n) +<function> f = lua.getbytecode(<number> n) lua.setbytecode(<number> n, <function> f) \stopfunctioncall @@ -3788,7 +4364,7 @@ lua.bytecode[n]() Note that the path of the file is stored in the \LUA\ bytecode to be used in stack backtraces and therefore dumped into the format file if -above code is used in \INITEX. If it contains private information, i.e. +the above code is used in \INITEX. If it contains private information, i.e. the user name, this information is then contained in the format file as well. This should be kept in mind when preloading files into a bytecode register in \INITEX. @@ -3800,7 +4376,7 @@ the \type{\directlua} and \type{\latelua} primitives. \startfunctioncall lua.name[<number> n] = <string> s -<string> s = lua.name[<number n>] +<string> s = lua.name[<number> n] \stopfunctioncall If you want to unset a lua name, you can assign \type{nil} to it. @@ -3826,15 +4402,9 @@ different fields, as follows: \NC \ssbf name \NC \bf type \NC \bf description \NC \bf default \NC\NR \NC error_line \NC number \NC error line width \NC 79 \NC\NR \NC print_line \NC number \NC line length in ps output \NC 100\NC\NR -\NC main_memory \NC number \NC total memory size \NC 5000\NC\NR -\NC hash_size \NC number \NC hash size \NC 16384 \NC\NR -\NC param_size \NC number \NC max. active macro parameters\NC 150\NC\NR -\NC max_in_open \NC number \NC max. input file nestings \NC 10\NC\NR \NC random_seed \NC number \NC the initial random seed \NC variable\NC\NR \NC interaction \NC string \NC the interaction mode, one of \type {batch}, \type {nonstop}, \type {scroll}, \type {errorstop} \NC \type {errorstop}\NC\NR -\NC ini_version \NC boolean \NC the --ini switch \NC true \NC\NR -\NC mem_name \NC string \NC \type {--mem} \NC \type {plain} \NC\NR \NC job_name \NC string \NC \type {--jobname} \NC \type {mpout} \NC\NR \NC find_file \NC function \NC a function to find files \NC only local files\NC\NR \stoptabulate @@ -3850,12 +4420,17 @@ with: \starttabulate[|lT|l|p|] \NC \bf name \NC \bf the requested file \NC \NR \NC mode \NC the file mode: \type {r} or \type {w} \NC \NR -\NC type \NC the kind of file, one of: \type {mp}, \type {mem}, \type {tfm}, \type {map}, \type {pfb}, \type {enc} \NC \NR +\NC type \NC the kind of file, one of: \type {mp}, \type {tfm}, \type {map}, \type {pfb}, \type {enc} \NC \NR \stoptabulate Return either the full pathname of the found file, or \type{nil} if the file cannot be found. +Note that the new version of \MPLIB\ no longer uses binary mem files, +so the way to preload a set of macros is simply to start off with +an \type{input} command in the first \type{mp:execute()} call. + + \subsection{\luatex{mp:statistics}} You can request statistics with: @@ -3865,8 +4440,8 @@ You can request statistics with: \stopfunctioncall This function returns the vital statistics for an \MPLIB\ instance. There are four -fields, giving the maximum number of used items in each of the four -statically allocated object classes: +fields, giving the maximum number of used items in each of four +allocated object classes: \starttabulate[|lT|l|p|] \NC main_memory \NC number \NC memory size \NC\NR @@ -3875,12 +4450,16 @@ statically allocated object classes: \NC max_in_open \NC number \NC input file nesting levels\NC\NR \stoptabulate +Note that in the new version of \MPLIB, this is informational only. The +objects are all allocated dynamically, so there is no chance of running +out of space unless the available system memory is exhausted. + \subsection{\luatex{mp:execute}} You can ask the \METAPOST\ interpreter to run a chunk of code by calling \startfunctioncall -local rettable = mp:execute('metapost language chunk') +<table> rettable = mp:execute('metapost language chunk') \stopfunctioncall for various bits of \METAPOST\ language input. Be sure to check the @@ -3898,7 +4477,7 @@ In contrast with the normal standalone \type{mpost} command, there is \subsection{\luatex{mp:finish}} \startfunctioncall -local rettable = mp:finish() +<table> rettable = mp:finish() \stopfunctioncall If for some reason you want to stop using an \MPLIB\ instance while @@ -3929,12 +4508,12 @@ object methods you can call: \starttabulate[|l|l|p|] \NC boundingbox \NC function \NC returns the bounding box, as an array of 4 values\NC \NR -\NC postscript \NC function \NC return a string that is the ps output of the \type{fig}. - this function accepts two optional integer arguments for +\NC postscript \NC function \NC returns a string that is the ps output of the \type{fig}. + this function accepts two optional integer arguments for specifying the values of \type{prologues} (first argument) and \type{procset} (second argument)\NC \NR -\NC svg \NC function \NC return a string that is the svg output of the \type{fig}. - this function accepts an optional integer arguments for +\NC svg \NC function \NC returns a string that is the svg output of the \type{fig}. + This function accepts an optional integer argument for specifying the value of \type{prologues}\NC \NR \NC objects \NC function \NC returns the actual array of graphic objects in this \type{fig} \NC \NR \NC copy_objects \NC function \NC returns a deep copy of the array of graphic objects in this \type{fig} \NC \NR @@ -3952,19 +4531,19 @@ object methods you can call: When the boundingbox represents a \quote {negated rectangle}, i.e.\ when the first set of coordinates is larger than the second set, the picture is empty. -Graphical objects come in various types that each have a different list of +Graphical objects come in various types that each has a different list of accessible values. The types are: \type{fill}, \type{outline}, \type{text}, \type{start_clip}, \type{stop_clip}, \type{start_bounds}, \type{stop_bounds}, \type{special}. There is helper function (\type{mplib.fields(obj)}) to get the list of accessible values for a particular object, but you can just as easily -use the tables given below). +use the tables given below. All graphical objects have a field \type{type} that gives the object -type as a string value, that not explicit mentioned in the tables. In -the following, \type{number}s are \POSTSCRIPT\ points represented as +type as a string value; it is not explicit mentioned in the following tables. +In the following, \type{number}s are \POSTSCRIPT\ points represented as a floating point number, unless stated otherwise. Field values that -are of \type{table} are explained in the next section. +are of type \type{table} are explained in the next section. \subsubsection{fill} @@ -3987,10 +4566,10 @@ a table containing a bunch of vital characteristics of the used pen \starttabulate[|l|l|p|] \NC width \NC number \NC width of the pen\NC \NR -\NC rx \NC number \NC $x$ scale \NC \NR -\NC sx \NC number \NC $xy$ multiplier \NC \NR -\NC sy \NC number \NC $yx$ multiplier \NC \NR -\NC ry \NC number \NC $y$ scale \NC \NR +\NC sx \NC number \NC $x$ scale \NC \NR +\NC rx \NC number \NC $xy$ multiplier \NC \NR +\NC ry \NC number \NC $yx$ multiplier \NC \NR +\NC sy \NC number \NC $y$ scale \NC \NR \NC tx \NC number \NC $x$ offset \NC \NR \NC ty \NC number \NC $y$ offset \NC \NR \stoptabulate @@ -4114,22 +4693,22 @@ These functions find the size of a glyph in a defined font. The the \type{char} is a glyph id in the range 0 to 255; the returned \type{w} is in AFM units. -\subsubsection{\luatex{mp.char_width}} +\subsubsection{\luatex{mp:char_width}} \startfunctioncall -<number> w = mp.char_width(<string> fontname, <number> char) +<number> w = mp:char_width(<string> fontname, <number> char) \stopfunctioncall -\subsubsection{\luatex{mp.char_height}} +\subsubsection{\luatex{mp:char_height}} \startfunctioncall -<number> w = mp.char_height(<string> fontname, <number> char) +<number> w = mp:char_height(<string> fontname, <number> char) \stopfunctioncall -\subsubsection{\luatex{mp.char_depth}} +\subsubsection{\luatex{mp:char_depth}} \startfunctioncall -<number> w = mp.char_depth(<string> fontname, <number> char) +<number> w = mp:char_depth(<string> fontname, <number> char) \stopfunctioncall \section{The \luatex{node} library} @@ -4150,7 +4729,7 @@ Each node has at least the three fields \type{next}, \type{id}, and \item The \type{next} field returns the userdata object for the next node in a linked list of nodes, or -nil, if there is no next node. +\type{nil}, if there is no next node. \item The \type{id} indicates \TEX's \quote{node type}. The field \type{id} has a numeric value for efficiency reasons, but some of the library @@ -4190,10 +4769,19 @@ which can be handy for tracing. \subsection{Node handling functions} +\subsubsection{\luatex{node.is_node}} + +\startfunctioncall +<boolean> t = node.is_node(<any> item) +\stopfunctioncall + +This function returns true if the argument is a userdata object of +type \type{<node>}. + \subsubsection{\luatex{node.types}} \startfunctioncall -table t = node.types() +<table> t = node.types() \stopfunctioncall This function returns an array that maps node id numbers to node type @@ -4203,11 +4791,11 @@ types. \subsubsection{\luatex{node.whatsits}} \startfunctioncall -table t = node.whatsits() +<table> t = node.whatsits() \stopfunctioncall \TEX's \quote{whatsits} all have the same \type{id}. The various subtypes -are defined by their \type{subtype}. The function is much like +are defined by their \type{subtype} fields. The function is much like \luatex{node.types}, except that it provides an array of \type{subtype} mappings. @@ -4232,17 +4820,19 @@ representation (\type{subtype}). \subsubsection{\luatex{node.type}} \startfunctioncall -<string> type = node.type(<number> id) +<string> type = node.type(<any> n) \stopfunctioncall -This converts a internal numeric representation to an external string -representation. +In the argument is a number, then this function converts an internal +numeric representation to an external string representation. +Otherwise, it will return the string \type{node} if the object +represents a node (this is new in 0.65), and \type{nil} otherwise. \subsubsection{\luatex{node.fields}} \startfunctioncall -table t = node.fields(<number> id) -table t = node.fields(<number> id, <number> subtype) +<table> t = node.fields(<number> id) +<table> t = node.fields(<number> id, <number> subtype) \stopfunctioncall This function returns an array of valid field names for a particular @@ -4270,7 +4860,7 @@ actually a node, and it has the field. \stopfunctioncall Creates a new node. All of the new node's fields are initialized to -either zero or nil except for \type{id} and \type{subtype} (if +either zero or \type{nil} except for \type{id} and \type{subtype} (if supplied). If you want to create a new whatsit, then the second argument is required, otherwise it need not be present. As with all node functions, this function creates a node on the \TEX\ level. @@ -4321,6 +4911,46 @@ copied. Creates a deep copy of the node list that starts at \type{n}. If \type{m} is also given, the copy stops just before node \type{m}. +Note that you cannot copy attribute lists this way, specialized functions for +dealing with attribute lists will be provided later but are not there yet. +However, there is normally no need to copy attribute lists as when you do +assignments to the \type{attr} field or make changes to specific attributes, the +needed copying and freeing takes place automatically. + +\subsubsection{\luatex{node.next} (0.65)} + +\startfunctioncall +<node> m = node.next(<node> n) +\stopfunctioncall + +Returns the node following this node, or \type{nil} if there is no +such node. + +\subsubsection{\luatex{node.prev} (0.65)} + +\startfunctioncall +<node> m = node.prev(<node> n) +\stopfunctioncall + +Returns the node preceding this node, or \type{nil} if there is no +such node. + + +\subsubsection{\luatex{node.current_attr} (0.66)} + +\startfunctioncall +<node> m = node.current_attr() +\stopfunctioncall + +Returns the currently active list of attributes, if there is one. + +Note: this function is somewhat experimental, and it returns the {\it + actual} attribute list, not a copy thereof. +Therefore, changing any of the attributes in the list will change +these values for all nodes that have the current attribute list +assigned to them. + + \subsubsection{\luatex{node.hpack}} \startfunctioncall @@ -4359,7 +4989,7 @@ to \type{nil} beforehand. And in a similar way, calling This function creates a new vlist by packaging the list that begins at node \type{n} into a vertical box. With only a single argument, this box -is created using the natural width of its components. In the three +is created using the natural height of its components. In the three argument form, \type{info} must be either \type{additional} or \type{exactly}, and \type{w} is the additional (\tex{vbox spread}) or exact (\tex{vbox to}) height to be used. @@ -4368,41 +4998,43 @@ Direction support added in \LUATEX\ 0.45. The second return value is the badness of the generated box, this extension was added in 0.51. -See the description of \type{node.hpack()} for a few memory allocation +See the description of \type{node.hpack()} for a few memory allocation caveats. \subsubsection{\luatex{node.dimensions} (0.43)} \startfunctioncall <number> w, <number> h, <number> d = node.dimensions(<node> n) +<number> w, <number> h, <number> d = node.dimensions(<node> n, <string> dir) <number> w, <number> h, <number> d = node.dimensions(<node> n, <node> t) +<number> w, <number> h, <number> d = node.dimensions(<node> n, <node> t, <string> dir) \stopfunctioncall This function calculates the natural in-line dimensions of the node list starting at node \type{n} and terminating just before node \type{t} -(or nil, if there is no second argument). The return values are scaled -points. An alternative format that starts with glue parameters as the +(or the end of the list, if there is no second argument). The return values are scaled +points. An alternative format that starts with glue parameters as the first three arguments is also possible: \startfunctioncall -<number> w, <number> h, <number> d = - node.dimensions(<number> glue_set, <number> glue_sign, +<number> w, <number> h, <number> d = + node.dimensions(<number> glue_set, <number> glue_sign, <number> glue_order, <node> n) -<number> w, <number> h, <number> d = - node.dimensions(<number> glue_set, <number> glue_sign, +<number> w, <number> h, <number> d = + node.dimensions(<number> glue_set, <number> glue_sign, <number> glue_order, <node> n, <string> dir) -<number> w, <number> h, <number> d = - node.dimensions(<number> glue_set, <number> glue_sign, +<number> w, <number> h, <number> d = + node.dimensions(<number> glue_set, <number> glue_sign, <number> glue_order, <node> n, <node> t) -<number> w, <number> h, <number> d = - node.dimensions(<number> glue_set, <number> glue_sign, +<number> w, <number> h, <number> d = + node.dimensions(<number> glue_set, <number> glue_sign, <number> glue_order, <node> n, <node> t, <string> dir) \stopfunctioncall This calling method takes glue settings into account and is especially useful for finding the actual width of a sublist of nodes that are -already boxed, for example in code like this, which prints the -width of the space inbetween the \type{a} and \type{b} as it would +already boxed, for example in code like this, which prints the +width of the space inbetween the \type{a} and \type{b} as it would be if \type{\box0} was used as-is: \starttyping @@ -4411,8 +5043,8 @@ be if \type{\box0} was used as-is: \directlua{print (node.dimensions(tex.box[0].glue_set, tex.box[0].glue_sign, tex.box[0].glue_order, - tex.box[0].list.next, - node.tail(tex.box[0].list))) } + tex.box[0].head.next, + node.tail(tex.box[0].head))) } \stoptyping Direction support added in \LUATEX\ 0.45. @@ -4421,12 +5053,12 @@ Direction support added in \LUATEX\ 0.45. \startfunctioncall <node> h = node.mlist_to_hlist(<node> n, - <string> displaytype, <boolean> penalties) + <string> display_type, <boolean> penalties) \stopfunctioncall This runs the internal mlist to hlist conversion, converting the math list in \type{n} into the horizontal list \type{h}. The interface is exactly the same as -for the callback \type{mlist_to_hlist}.) +for the callback \type{mlist_to_hlist}. \subsubsection{\luatex{node.slide}} @@ -4444,7 +5076,7 @@ between nodes. <node> m = node.tail(<node> n) \stopfunctioncall -Returns the last node of the node list that starts at \type{n}. +Returns the last node of the node list that starts at \type{n}. \subsubsection{\luatex{node.length}} @@ -4466,7 +5098,7 @@ at the end of the list. The node \type{m} is not counted. \stopfunctioncall Returns the number of nodes contained in the node list that starts at -\type{n} that have an matching \type{id} field. +\type{n} that have a matching \type{id} field. If \type{m} is also supplied, counting stops at \type{m} instead of at the end of the list. The node \type{m} is not counted. @@ -4498,11 +5130,11 @@ starts at \type{n} that have a matching \type{id} field. This function removes the node \type{current} from the list following \type{head}. It is your responsibility to make sure it is really part of that list. The return values are the new \type{head} and -\type{current} nodes. The returned \type{current} is the -node in the calling argument, and is only passed back as a convenience -(its \type{next} field will be cleared). The returned \type{head} is -more important, because if the function is called with \type{current} -equal to \type{head}, it will be changed. +\type{current} nodes. The returned \type{current} is the node +following the \type{current} in the calling argument, and is only +passed back as a convenience (or \type{nil}, if there is no such node). The +returned \type{head} is more important, because if the function is +called with \type{current} equal to \type{head}, it will be changed. \subsubsection{\luatex{node.insert_before}} @@ -4513,7 +5145,7 @@ equal to \type{head}, it will be changed. This function inserts the node \type{new} before \type{current} into the list following \type{head}. It is your responsibility to make sure that \type{current} is really part of that list. The return values are -the (potentially mutated) \type{head} and the \type{new}, set up to +the (potentially mutated) \type{head} and the node \type{new}, set up to be part of the list (with correct \type{next} field). If \type{head} is initially \type{nil}, it will become \type{new}. @@ -4526,19 +5158,24 @@ is initially \type{nil}, it will become \type{new}. This function inserts the node \type{new} after \type{current} into the list following \type{head}. It is your responsibility to make sure that \type{current} is really part of that list. The return values are -the \type{head} and the \type{new}, set up to be part of the list +the \type{head} and the node \type{new}, set up to be part of the list (with correct \type{next} field). If \type{head} is initially \type{nil}, it will become \type{new}. -\subsubsection{\luatex{node.first_character}} +\subsubsection{\luatex{node.first_glyph} (0.65)} \startfunctioncall -<node> n = node.first_character(<node> n) -<node> n = node.first_character(<node> n, <node> m) +<node> n = node.first_glyph(<node> n) +<node> n = node.first_glyph(<node> n, <node> m) \stopfunctioncall -Returns the first node that is a glyph node with a subtype indicating -it is a character, or \type{nil}. +Returns the first node in the list starting at \type{n} that is a +glyph node with a subtype indicating it is a glyph, or \type{nil}. +If \type{m} is given, processing stops at (but including) that node, +otherwise processing stops at the end of the list. + +Note: this function used to be called \type{first_character}. It has +been renamed in \LUATEX\ 0.65, and the old name is deprecated now. \subsubsection{\luatex{node.ligaturing}} @@ -4606,16 +5243,11 @@ any more since version 0.38). There is no error checking yet! \subsubsection{\luatex{node.protrusion_skippable} (0.60.1)} \startfunctioncall -boolean <yes> = node.protrusion_skippable(<node> n) +<boolean> skippable = node.protrusion_skippable(<node> n) \stopfunctioncall -Returns \type{true} if this node can be skipped for glyph protrusion -line boundary discovery. - -\subsubsection{\luatex{node.protrusion_skipable} (0.53)} - -Older version of \type{node.protrusion_skippable}, with typing error. -This alias will go away soon, please use the version with two p's. +Returns \type{true} if, for the purpose of line boundary discovery +when character protrusion is active, this node can be skipped. \subsection{Attribute handling} @@ -4633,7 +5265,7 @@ dedicated functions associated with them. Tests if a node has the attribute with number \type{id} set. If \type{val} is also supplied, also tests if the value matches \type{val}. -It returns the value, or, if no match is found, nil. +It returns the value, or, if no match is found, \type{nil}. \subsubsection{\luatex{node.set_attribute}} @@ -4647,8 +5279,8 @@ Sets the attribute with number \type{id} to the value \subsubsection{\luatex{node.unset_attribute}} \startfunctioncall -<number> v = node.unset_attribute(<node> n, <number> id, <number> val) <number> v = node.unset_attribute(<node> n, <number> id) +<number> v = node.unset_attribute(<node> n, <number> id, <number> val) \stopfunctioncall Unsets the attribute with number \type{id}. If \type{val} is also supplied, @@ -4656,7 +5288,7 @@ it will only perform this operation if the value matches \type{val}. Missing attributes or attribute|-|value pairs are ignored. If the attribute was actually deleted, returns its old -value. Otherwise, returns nil. +value. Otherwise, returns \type{nil}. \section{The \luatex{pdf} library} @@ -4664,18 +5296,23 @@ This contains variables and functions that are related to the \PDF\ backend. %*********************************************************************** -\subsubsubject{\luatex{pdf.mapfile()}, \luatex{pdf.mapline()} (new in 0.53.0)} +\subsection{\luatex{pdf.mapfile}, \luatex{pdf.mapline} (new in 0.53.0)} + +\startfunctioncall +pdf.mapfile(<string> map file) +pdf.mapfile(<string> map line) +\stopfunctioncall These two functions can be used to replace primitives \type{\pdfmapfile} and \type{\pdfmapline} from \PDFTEX. They expect a string as only parameter and have no return value. -The functions replace also the former variables +The also functions replace the former variables \luatex{pdf.pdfmapfile} and \luatex{pdf.pdfmapline}. %*********************************************************************** -\subsubsubject{\luatex{pdf.catalog}, \luatex{pdf.info}, +\subsection{\luatex{pdf.catalog}, \luatex{pdf.info}, \luatex{pdf.names}, \luatex{pdf.trailer} (new in 0.53.0)} These variables offer a read-write interface to the corresponding @@ -4690,7 +5327,7 @@ Note: this interface will almost certainly change in the future. %*********************************************************************** -\subsubsubject{\luatex{pdf.pageattributes}, \luatex{pdf.pageresources}, +\subsection{\luatex{pdf.pageattributes}, \luatex{pdf.pageresources}, \luatex{pdf.pagesattributes} (new in 0.53.0)} These variables offer a read-write interface to related @@ -4702,7 +5339,7 @@ the \PDFTEX\ token registers. %*********************************************************************** -\subsubsubject{\luatex{pdf.h}, \luatex{pdf.v}} +\subsection{\luatex{pdf.h}, \luatex{pdf.v}} These are the \type{h} and \type{v} values that define the current location on the output page, @@ -4710,15 +5347,15 @@ measured from its lower left corner. The values can be queried % and set using scaled points as units. -\starttyping -pdf.h -pdf.v -\stoptyping +%\starttyping +%pdf.h +%pdf.v +%\stoptyping Note: this interface will almost certainly change in the future. % not implemented yet: -% \subsubsubject{\luatex{pdf.seth()}, \luatex{pdf.setv()}} +% \subsection{\luatex{pdf.seth()}, \luatex{pdf.setv()}} % % The function calls for position setting, % associated with \type{pdf.h} and \type{pdf.v} are @@ -4730,7 +5367,7 @@ Note: this interface will almost certainly change in the future. % <number> n = pdf.v % \stopfunctioncall -\subsubsubject{\luatex{pdf.print()}} +\subsection{\luatex{pdf.print}} A print function to write stuff to the \PDF\ document that can be used from within a \tex{latelua} argument. @@ -4745,48 +5382,51 @@ pdf.print(<string> type, <string> s) The optional parameter can be used to mimic the behavior of \tex{pdfliteral}: the \type{type} is \type{direct} or \type{page}. -\subsubsubject{\luatex{pdf.immediateobj()}} +\subsection{\luatex{pdf.immediateobj}} This function creates a \PDF\ object -and immediately write it to the \PDF\ file. +and immediately writes it to the \PDF\ file. It is modelled after \PDFTEX's \tex{immediate}\tex{pdfobj} primitives. All function variants return the object number of the newly generated object. \startfunctioncall -n = pdf.immediateobj(<string> objtext) -n = pdf.immediateobj("file", <string> filename) -n = pdf.immediateobj("stream", <string> streamtext {, <string> attrtext}) -n = pdf.immediateobj("streamfile", <string> filename, {, <string> attrtext}) +<number> n = pdf.immediateobj(<string> objtext) +<number> n = pdf.immediateobj("file", <string> filename) +<number> n = pdf.immediateobj("stream", <string> streamtext, <string> attrtext) +<number> n = pdf.immediateobj("streamfile", <string> filename, <string> attrtext) \stopfunctioncall -The 1st version puts the \type{objtext} raw into an object. +The first version puts the \type{objtext} raw into an object. Only the object wrapper is automatically generated, but any internal structure (like \type{<< >>} dictionary markers) needs to provided by the user. -The 2nd version with keyword \type{"file"} as 1st argument +The second version with keyword \type{"file"} as 1st argument puts the contents of the file with name \type{filename} raw into the object. -The 3rd version with keyword \type{"stream"} creates a stream object +The third version with keyword \type{"stream"} creates a stream object and puts the \type{streamtext} raw into the stream. The stream length is automatically calculated. The optional \type{attrtext} goes into the dictionary of that object. -The 4th version with keyword \type{"streamfile"} does the same as the 3rd one, +The fourth version with keyword \type{"streamfile"} does the same as the 3rd one, it just reads the stream data raw from a file. -An optional first argument can be given to make the function use a +An optional first argument can be given to make the function use a previously reserved \PDF\ object. \startfunctioncall -n = pdf.immediateobj(<integer n>, <string> objtext) -n = pdf.immediateobj(<integer n>, "file", <string> filename) -n = pdf.immediateobj(<integer n>, "stream", <string> streamtext {, <string> attrtext}) -n = pdf.immediateobj(<integer n>, "streamfile", <string> filename, {, <string> attrtext}) +<number> n = pdf.immediateobj(<integer> n, <string> objtext) +<number> n = pdf.immediateobj(<integer> n, "file", <string> filename) +<number> n = pdf.immediateobj(<integer> n, "stream", <string> streamtext, <string> attrtext) +<number> n = pdf.immediateobj(<integer> n, "streamfile", <string> filename, <string> attrtext) \stopfunctioncall -\subsubsubject{\luatex{pdf.obj()}} +%*********************************************************************** + +\subsection{\luatex{pdf.obj}} This function creates a \PDF\ object, -which is written to the \PDF\ file only when referenced. +which is written to the \PDF\ file only when referenced, +e.\,g., by \luatex{pdf.refobj()}. All function variants return the object number of the newly generated object, and there are two separate calling modes. @@ -4794,36 +5434,36 @@ object, and there are two separate calling modes. The first mode is modelled after \PDFTEX's \tex{pdfobj} primitive. \startfunctioncall -n = pdf.obj(<string> objtext) -n = pdf.obj("file", <string> filename) -n = pdf.obj("stream", <string> streamtext {, <string> attrtext}) -n = pdf.obj("streamfile", <string> filename, {, <string> attrtext}) +<number> n = pdf.obj(<string> objtext) +<number> n = pdf.obj("file", <string> filename) +<number> n = pdf.obj("stream", <string> streamtext, <string> attrtext) +<number> n = pdf.obj("streamfile", <string> filename, <string> attrtext) \stopfunctioncall -An optional first argument can be given to make the function use a +An optional first argument can be given to make the function use a previously reserved \PDF\ object. \startfunctioncall -n = pdf.obj(<integer> n, <string> objtext) -n = pdf.obj(<integer> n, "file", <string> filename) -n = pdf.obj(<integer> n, "stream", <string> streamtext {, <string> attrtext}) -n = pdf.obj(<integer> n, "streamfile", <string> filename, {, <string> attrtext}) +<number> n = pdf.obj(<integer> n, <string> objtext) +<number> n = pdf.obj(<integer> n, "file", <string> filename) +<number> n = pdf.obj(<integer> n, "stream", <string> streamtext, <string> attrtext) +<number> n = pdf.obj(<integer> n, "streamfile", <string> filename, <string> attrtext) \stopfunctioncall The second mode accepts a single argument table with key--value pairs. \startfunctioncall -n = pdf.obj{ type = <string>, - immmediate = <boolean>, - objnum = <number>, - attr = <string>, - compresslevel = <number>, - objcompression = <boolean>, - file = <string>, - string = <string>} +<number> n = pdf.obj{ type = <string>, + immmediate = <boolean>, + objnum = <number>, + attr = <string>, + compresslevel = <number>, + objcompression = <boolean>, + file = <string>, + string = <string>} \stopfunctioncall -The \type{string} field can have the values \type{raw} and +The \type{type} field can have the values \type{raw} and \type{stream}, this field is required, the others are optional (within constraints). @@ -4832,16 +5472,40 @@ actually is: the constraints from the separate parameter version still apply, so for example you can't have both \type{string} and \type{file} at the same time. -\subsubsubject{\luatex{pdf.reserveobj()}} +%*********************************************************************** + +\subsection{\luatex{pdf.refobj}} + +This function, +the \LUA\ version of the \tex{pdfrefobj} primitive, +references an object by its object number, +so that the object will be written out. + +\startfunctioncall +pdf.refobj(<integer> n) +\stopfunctioncall + +This function works in both the \tex{directlua} and \tex{latelua} environment. +Inside \tex{directlua} a new whatsit node +\quote{pdf_refobj} is created, which will be marked for flushing during +page output and the object is then written directly after the page, +when also the resources objects are written out. +Inside \tex{latelua} the object will be marked for flushing. + +This function has no return values. + +%*********************************************************************** + +\subsection{\luatex{pdf.reserveobj}} This function creates an empty \PDF\ object and returns its number. \startfunctioncall -n = pdf.reserveobj() -n = pdf.reserveobj("annot") +<number> n = pdf.reserveobj() +<number> n = pdf.reserveobj("annot") \stopfunctioncall -\subsubsubject{\luatex{pdf.registerannot()} (new in 0.47.0)} +\subsection{\luatex{pdf.registerannot} (new in 0.47.0)} This function adds an object number to the \type{/Annots} array for the current page without doing anything else. This function can only be @@ -5172,7 +5836,7 @@ tex.textdir \subsubsection{Glue parameters} -All glue parameters are to be used read|-|only and return a userdata object that +The glue parameters accept and return a userdata object that represents a \type{glue_spec} node. \startcolumns[n=3] @@ -5378,24 +6042,87 @@ tex.setskip ('global',<string> s, <node> s) In the function-based interface, it is possible to define values globally by using the string \type{'global'} as the first function argument. -\subsection{Box registers} +\subsection{Character code registers (0.63)} -The current dimensions of \tex{box} registers can be read and -altered using three other virtual sub|-|tables : +\TEX's character code tables (\tex{lccode}, \tex{uccode}, +\tex{sfcode}, \tex{catcode}, \tex{mathcode}, \tex{delcode}) can be +accessed and written to using six virtual subtables of the \type{tex} +table +\startcolumns[n=3] \starttyping -tex.wd -tex.ht -tex.dp +tex.lccode +tex.uccode +tex.sfcode +tex.catcode +tex.mathcode +tex.delcode \stoptyping +\stopcolumns -{\bf note: these three virtual tables are deprecated and will -be removed in luatex 0.70. You should switch to using \type{tex.box[].width} -etc. instead, see below.} +The function call interfaces are roughly as above, but there are a few twists. +\type{sfcode}s are the simple ones: -\blank +\startfunctioncall +tex.setsfcode (<number> n, <number> s) +tex.setsfcode ('global', <number> n, <number> s) +<number> s = tex.getsfcode (<number> n) +\stopfunctioncall + +The function call interface for \type{lccode} and \type{uccode} additionally allows you to set the associated sibling at the same time: + +\startfunctioncall +tex.setlccode (['global'], <number> n, <number> lc) +tex.setlccode (['global'], <number> n, <number> lc, <number> uc) +<number> lc = tex.getlccode (<number> n) +tex.setuccode (['global'], <number> n, <number> uc) +tex.setuccode (['global'], <number> n, <number> uc, <number> lc) +<number> uc = tex.getuccode (<number> n) +\stopfunctioncall + +The function call interface for \type{catcode} also allows you to +specify a category table to use on assignment or on query (default in +both cases is the current one): + +\startfunctioncall +tex.setcatcode (['global'], <number> n, <number> c) +tex.setcatcode (['global'], <number> cattable, <number> n, <number> c) +<number> lc = tex.getcatcode (<number> n) +<number> lc = tex.getcatcode (<number> cattable, <number> n) +\stopfunctioncall -It is also possible to set and query actual boxes, using the node + +The interfaces for \type{delcode} and \type{mathcode} use small array tables to +set and retrieve values: + +\startfunctioncall +tex.setmathcode (['global'], <number> n, <table> mval ) +<table> mval = tex.getmathcode (<number> n) +tex.setdelcode (['global'], <number> n, <table> dval ) +<table> dval = tex.getdelcode (<number> n) +\stopfunctioncall + +Where the table for \type{mathcode} is an array of 3 numbers, like this: + +\starttyping +{<number> mathclass, <number> family, <number> character} +\stoptyping + +And the table for \type{delcode} is an array with 4 numbers, like this: + +\starttyping +{<number> small_fam, <number> small_char, <number> large_fam, <number> large_char} +\stoptyping + +Normally, the third and fourth values in a delimiter code assignment +will be zero according to \tex{Udelcode} usage, but the returned table can have +values there (if the delimiter code was set using \type{\delcode}, for +example). Unset \type{delcode}'s can be recognized because +\type{dval[1]} is $-1$. + +\subsection{Box registers} + +It is possible to set and query actual boxes, using the node interface as defined in the \luatex{node} library: \starttyping @@ -5430,6 +6157,37 @@ assigning to a temporary variable: tex.box[0] = node.copy_list(tex.box[2]) \stoptyping +%{\bf note: In previous versions of \LUATEX\ there were also three +%virtual tables called \type{tex.wd}, \type{tex.ht}, and \type{tex.dp} +%along with an associated function call interface. These were +%removed in version 0.63. You should switch to using \type{tex.box[].width} +%etc. instead.} +% +%If for some reason you want the functionality of these tables back, +%you can add \LUA\ code to do that for you, like this: +% +%\starttyping +%local box = tex.box +% +%local wd = { +% __index = function(t,k) local bk = box[k] return bk and bk.width or 0 end, +% __newindex = function(t,k,v) local bk = box[k] if bk then bk.width = v end end, +%} +%local ht = { +% __index = function(t,k) local bk = box[k] return bk and bk.height or 0 end, +% __newindex = function(t,k,v) local bk = box[k] if bk then bk.height = v end end, +%} +%local dp = { +% __index = function(t,k) local bk = box[k] return bk and bk.depth or 0 end, +% __newindex = function(t,k,v) local bk = box[k] if bk then bk.depth = v end end, +%} +% +%tex.wd = { } setmetatable(tex.wd,wd) +%tex.ht = { } setmetatable(tex.ht,ht) +%tex.dp = { } setmetatable(tex.dp,dp) +%\stoptyping + + \subsection{Math parameters} It is possible to set and query the internal math parameters @@ -5441,7 +6199,7 @@ tex.setmath('global', <string> n, <string> t, <number> n) <number> n = tex.getmath(<string> n, <string> t) \stopfunctioncall -As before an optional first parameter of \type{'global'} indicates a +As before an optional first parameter \type{'global'} indicates a global assignment. The first string is the parameter name minus the leading \quote{Umath}, @@ -5504,24 +6262,24 @@ registers that keep track of building page lists. \NC \bf field \NC \bf description \NC \NR \NC page_ins_head \NC circular list of pending insertions \NC \NR \NC contrib_head \NC the recent contributions \NC \NR -\NC page_head \NC the page-so-far \NC \NR +\NC page_head \NC the current page content\NC \NR %\NC temp_head \NC \NC \NR \NC hold_head \NC used for held-over items for next page\NC \NR -\NC adjust_head \NC head of the current \tex{adjust} list \NC \NR -\NC pre_adjust_head \NC head of the current \tex{adjust pre} list\NC \NR +\NC adjust_head \NC head of the current \tex{vadjust} list \NC \NR +\NC pre_adjust_head \NC head of the current \tex{vadjust pre} list\NC \NR % \NC align_head \NC \NC \NR \stoptabulate \subsection{Semantic nest levels (0.51)} The virtual table \luatex{tex.nest} contains the currently active -semantic nesting state. It has two main parts: an zero-based array of +semantic nesting state. It has two main parts: a zero-based array of userdata for the semantic nest itself, and the numerical value \type{tex.nest.ptr}, which gives the highest available index. Neither the array items in \type{tex.nest[]} nor \type{tex.nest.ptr} can be assigned to (as this would confuse the typesetting engine beyond -repair), but you can assing to the individual values inside the array -items, e.g. \type{tex.nest[tex.nest.ptr].prevdepth}. +repair), but you can assign to the individual values inside the array +items, e.g. \type{tex.nest[tex.nest.ptr].prevdepth}. \type{tex.nest[tex.nest.ptr]} is the current nest state, \type{tex.nest[0]} the outermost (main vertical list) level. @@ -5531,13 +6289,13 @@ The known fields are: \starttabulate[|lT|l|l|p|] \NC \ssbf key \NC \bf type \NC \bf modes \NC \bf explanation \NC\NR \NC mode \NC number \NC all \NC The current mode. This is a number representing the - main mode at this level:\crlf + main mode at this level:\crlf 0 == no mode (this happens during \type{\write})\crlf - 1 == vertical,\crlf - 127 = horizontal,\crlf + 1 == vertical,\crlf + 127 = horizontal,\crlf 253 = display math.\crlf - $-1$ == internal vertical,\crlf - $-127$ = restricted horizontal,\crlf + $-1$ == internal vertical,\crlf + $-127$ = restricted horizontal,\crlf $-253$ = inline math.\NC\NR \NC modeline \NC number \NC all \NC source input line where this mode was entered in, negative inside the output routine.\NC\NR @@ -5548,11 +6306,11 @@ The known fields are: when it is to be ignored)\NC\NR \NC spacefactor \NC number \NC hmode \NC the current space factor\NC\NR \NC dirs \NC node \NC hmode \NC used for temporary storage by the line break algorithm\NC\NR -\NC noad \NC node \NC mmode \NC used for temporary storage of a pending fraction numerator, +\NC noad \NC node \NC mmode \NC used for temporary storage of a pending fraction numerator, for \type{\over} etc.\NC\NR -\NC delimptr \NC node \NC mmode \NC used for temporary storage of the previous math delimiter, +\NC delimptr \NC node \NC mmode \NC used for temporary storage of the previous math delimiter, for \type{\middle}.\NC\NR -\NC mathdir \NC boolean \NC mmode \NC true when during math processing the \type{\mathdir} is not +\NC mathdir \NC boolean \NC mmode \NC true when during math processing the \type{\mathdir} is not the same as the surrounding \type{\textdir}\NC\NR \NC mathstyle \NC number \NC mmode \NC the current \type{\mathstyle} \NC\NR \stoptabulate @@ -5588,11 +6346,10 @@ If there is a table argument instead of a list of strings, this has to be a consecutive array of strings to print (the first non-string value will stop the printing process). This syntax was added in 0.36. - The optional parameter can be used to print the strings using the -catcode regime defined by \tex{catcodetable}~\type{n}. If \type{n} is +catcode regime defined by \tex{catcodetable}~\type{n}. If \type{n} is $-1$, the currently active catcode regime is used. If \type{n} is -$-2$, the resulting catcodes are in the result of \type{\the}: all +$-2$, the resulting catcodes are the result of \type{\the\toks}: all category codes are 12 (other) except for the space character, that has category code 10 (space). Otherwise, if \type{n} is not a valid catcode table, then it is ignored, and the currently @@ -5635,6 +6392,8 @@ If there is a table argument instead of a list of strings, this has to be a consecutive array of strings to print (the first non-string value will stop the printing process). This syntax was added in 0.36. +The optional argument sets the catcode regime, as with \type{tex.print()}. + \subsubsection{\luatex{tex.tprint}} \startfunctioncall @@ -5653,7 +6412,7 @@ tex.write(<table> t) \stopfunctioncall Each string argument is treated by \TEX\ as a special kind of input -line that makes is suitable for use as a quick way to dump +line that makes it suitable for use as a quick way to dump information: \startitemize @@ -5704,13 +6463,13 @@ added at a later date. <number> n = tex.sp(<string> s) \stopfunctioncall -Converts the number \type{o} or a string \type{s} that represents +Converts the number \type{o} or a string \type{s} that represents an explicit dimension into an integer number of scaled points. For parsing the string, the same scanning and conversion rules are used -that \LUATEX\ would use if it was scanning a dimension specifier in -its \TEX-like input language (this includes generating errors for bad -values), expect for the following: +that \LUATEX\ would use if it was scanning a dimension specifier in +its \TEX-like input language (this includes generating errors for bad +values), expect for the following: \startitemize[n] \item only explicit values are allowed, control sequences are not handled @@ -5729,6 +6488,20 @@ Associates \type{csname} with the internal font number \type{fontid}. The definition is global if (and only if) \type{global} is specified and true (the setting of \type{globaldefs} is not taken into account). + +\subsubsection{\luatex{tex.error} (0.61)} + +\startfunctioncall +tex.error(<string> s) +tex.error(<string> s, <table> help) +\stopfunctioncall + +This creates an error somewhat like the combination of \tex{errhelp} +and \tex{errmessage} would. During this error, deletions are disabled. + +The array part of the \type{help} table has to contain strings, +one for each line of error help. + \subsection[luaprimitives]{Functions for dealing with primitives } \subsubsection{\luatex{tex.enableprimitives}} @@ -5741,8 +6514,8 @@ This function accepts a prefix string and an array of primitive names. For each combination of \quote{prefix} and \quote{name}, the \type{tex.enableprimitives} first verifies that \quote{name} is -and actual primitive (it must be returned by one of the -\type{tex.extraprimitives()} calls explained above, or part of +an actual primitive (it must be returned by one of the +\type{tex.extraprimitives()} calls explained below, or part of \TEX82, or \type{\directlua}). If it is not, \type{tex.enableprimitives} does nothing and skips to the next pair. @@ -5786,7 +6559,7 @@ So, if you want to have all the new functionality available using their default names, as it is now, you will have to add \starttyping - \expandafter\ifx\csname directlua\endcsname \relax \else + \ifx\directlua\undefined \else \directlua {tex.enableprimitives('',tex.extraprimitives ())} \fi \stoptyping @@ -5797,7 +6570,7 @@ different prefixes for different subsets, as you see fit. Calling some form of \type{tex.enableprimitives()} is highly important though, because if you do not, you will end up with a \TEX82-lookalike that can run lua code but not do much else. The defined csnames are -(of course) saved in the format and will be available runtime. +(of course) saved in the format and will be available at runtime. \subsubsection{\luatex{tex.extraprimitives}} @@ -5812,7 +6585,12 @@ possible values and their (current) return values are: \startluacode function out_prim (a) - for _,n in pairs(tex.extraprimitives(a)) do + local v = tex.extraprimitives(a) + table.sort(v) + for _,n in pairs(v) do + if n == ' ' then + n = '\\normalcontrolspace' + end tex.print(n .. '\\hskip 4pt plus 5em') end end @@ -5858,8 +6636,8 @@ is always zero. \stopfunctioncall This helper function is useful -during linebreak calculations. \type{f} and \type{s} are scaled values; the function -returns the badness for when total \type{f} is supposed to be made from amounts +during linebreak calculations. \type{f} and \type{s} are scaled values; the function +returns the badness for when total \type{f} is supposed to be made from amounts that sum to \type{s}. The returned number is a reasonable approximation of $100(t/s)^3$; \subsubsection{\luatex{tex.linebreak} (0.53)} @@ -5917,7 +6695,7 @@ It is your own job to make sure that \type{listhead} is a proper paragraph list: this function does not add any nodes to it. To be exact, if you want to replace the core line breaking, you may have to do the following (when you are not actually working in the -\type{pre_line_break} or \type{line_break} callback, or when the +\type{pre_linebreak_filter} or \type{linebreak_filter} callbacks, or when the original list starting at listhead was generated in horizontal mode): \startitemize @@ -5930,7 +6708,7 @@ original list starting at listhead was generated in horizontal mode): \stopitemize The result is a node list, it still needs to be vpacked if you -want to assign it to a box. +want to assign it to a \tex{vbox}. The returned \type{info} table contains four values that are all numbers: @@ -5990,9 +6768,6 @@ the executable after loading and executing the startup file. \NC error_line \NC number\NC 79\NC cf.\ web2c docs \NC \NR \NC half_error_line \NC number\NC 50\NC cf.\ web2c docs \NC \NR \NC max_print_line \NC number\NC 79\NC cf.\ web2c docs \NC \NR -\NC ocp_list_size \NC number\NC 1000\NC cf.\ web2c docs \NC \NR -\NC ocp_buf_size \NC number\NC 1000\NC cf.\ web2c docs \NC \NR -\NC ocp_stack_size \NC number\NC 1000\NC cf.\ web2c docs \NC \NR \NC hash_extra \NC number\NC 0\NC cf.\ web2c docs \NC \NR \NC pk_dpi \NC number\NC 72\NC cf.\ web2c docs \NC \NR \NC trace_file_names \NC boolean \NC true \NC \type{false} disables \TEX's normal file open|-|close @@ -6082,7 +6857,7 @@ without expansion. \subsection{\luatex{token.is_expandable}} \startfunctioncall -<boolean> b = token.is_expandable(token t) +<boolean> b = token.is_expandable(<token> t) \stopfunctioncall This tests if the token \type{t} could be expanded. @@ -6090,7 +6865,7 @@ This tests if the token \type{t} could be expanded. \subsection{\luatex{token.expand}} \startfunctioncall -token.expand() +token.expand(<token> t) \stopfunctioncall If a token is expandable, this will expand one level of it, so that @@ -6100,7 +6875,7 @@ by \luatex{token.get_next()}. \subsection{\luatex{token.is_activechar}} \startfunctioncall -<boolean> b = token.is_activechar(token t) +<boolean> b = token.is_activechar(<token> t) \stopfunctioncall This is a special test that is sometimes handy. Discovering whether @@ -6141,7 +6916,7 @@ new control sequences using \luatex{token.create}! This returns the name associated with the \quote{command} value of the token in \LUATEX. There is not always a direct connection between these names and primitives. For instance, all \tex{ifxxx} tests are grouped under -\type {if_fest}, and the \quote{command modifier} defines which test is to be run. +\type {if_test}, and the \quote{command modifier} defines which test is to be run. \subsection{\luatex{token.command_id}} @@ -6297,7 +7072,7 @@ New primitives that are compatible with \XETEX: \NC \tex{Umathcode} \NC 0--10FFFF = 0+0+0--7+FF+10FFFF$^1$ \NC\NR \NC \tex{Udelcode} \NC 0--10FFFF = 0+0--FF+10FFFF$^2$ \NC\NR \NC \tex{Umathchar} \NC 0+0+0--7+FF+10FFFF \NC\NR -\NC \tex{Umathaccent} \NC 0+0+0--7+FF+10FFFF$^2$ \NC\NR +\NC \tex{Umathaccent} \NC 0+0+0--7+FF+10FFFF$^{2,4}$ \NC\NR \NC \tex{Udelimiter} \NC 0+0+0--7+FF+10FFFF$^2$ \NC\NR \NC \tex{Uradical} \NC 0+0--FF+10FFFF$^2$ \NC\NR \NC \tex{Umathcharnum} \NC -80000000--7FFFFFFF$^3$ \NC\NR @@ -6325,14 +7100,19 @@ two- and three-value commands, so unless you know exactly what you are doing and absolutely require the speedup resulting from the faster input scanning, it is better to use the verbose commands instead. +Note 4: As of \LUATEX\ 0.65, \tex{Umathaccent} accepts optional +keywords to control various details regarding math accents. See +\in{section}[mathacc] below for details. + + New primitives that exist in \LUATEX\ only (all of these will be explained in following sections): \starttabulate[|l|l|l|l|] \NC \bf primitive \NC \bf value range (in hex) \NC\NR -\NC \tex{Umathbotaccent} \NC 0+0+0--7+FF+10FFFF \NC\NR -\NC \tex{Umathaccents} \NC 0+0+0+0+0+0--7+FF+10FFFF+7+FF+10FFFF \NC\NR +%\NC \tex{Umathbotaccent} \NC 0+0+0--7+FF+10FFFF \NC\NR +%\NC \tex{Umathaccents} \NC 0+0+0+0+0+0--7+FF+10FFFF+7+FF+10FFFF \NC\NR \NC \tex{Uroot} \NC 0+0--FF+10FFFF$^2$ \NC\NR \NC \tex{Uoverdelimiter} \NC 0+0--FF+10FFFF$^2$ \NC\NR \NC \tex{Uunderdelimiter} \NC 0+0--FF+10FFFF$^2$ \NC\NR @@ -6462,7 +7242,7 @@ font dimension parameter. For math fonts, this should be set to zero. \NC \bf variable \NC \bf style \NC \bf default value opentype \NC \bf default value tfm \NC\NR \NC \tex{Umathaxis} \NC -- \NC AxisHeight \NC axis_height \NC\NR \NC \tex{Umathoperatorsize} \NC D, D' \NC DisplayOperatorMinHeight \NC $^6$ \NC\NR -\NC \tex{Umathfractiondelsize} \NC D, D' \NC FractionDelimiterDisplaySize$^9$ \NC delim1 \NC\NR +\NC \tex{Umathfractiondelsize} \NC D, D' \NC FractionDelimiterDisplayStyleSize$^9$ \NC delim1 \NC\NR \NC " \NC T, T', S, S', SS, SS' \NC FractionDelimiterSize$^9$ \NC delim2 \NC\NR \NC \tex{Umathfractiondenomdown}\NC D, D' \NC FractionDenominatorDisplayStyleShiftDown \NC denom1 \NC\NR \NC " \NC T, T', S, S', SS, SS' \NC FractionDenominatorShiftDown \NC denom2 \NC\NR @@ -6555,7 +7335,7 @@ expressed in a percentage instead of as a number of scaled points. Note 8: \type{SubscriptShiftDownWithSuperscript} does not actually exist in the \quote{standard} Opentype Math font Cambria, but it is useful enough to be added. New in version 0.38. -Note 9: \type{FractionDelimiterDisplaySize} and \type{FractionDelimiterSize} do not actually exist in the \quote{standard} +Note 9: \type{FractionDelimiterDisplayStyleSize} and \type{FractionDelimiterSize} do not actually exist in the \quote{standard} Opentype Math font Cambria, but were useful enough to be added. New in version 0.47. @@ -6569,6 +7349,22 @@ the whole list: \startcolumns[n=2] \starttyping +\Umathordordspacing +\Umathordopspacing +\Umathordbinspacing +\Umathordrelspacing +\Umathordopenspacing +\Umathordclosespacing +\Umathordpunctspacing +\Umathordinnerspacing +\Umathopordspacing +\Umathopopspacing +\Umathopbinspacing +\Umathoprelspacing +\Umathopopenspacing +\Umathopclosespacing +\Umathoppunctspacing +\Umathopinnerspacing \Umathbinordspacing \Umathbinopspacing \Umathbinbinspacing @@ -6641,11 +7437,31 @@ actually be used as those combinations of atoms cannot actually happen, but it seemed better not to break orthogonality. They are initialized to zero. -\section{Math accent handling} +\section[mathacc]{Math accent handling} + +\LUATEX\ supports both top accents and bottom accents in math mode, +and math accents stretch automatically (if this is supported by the +font the accent comes from, of course). Bottom and combined accents as +well as fixed-width math accents are controlled by optional keywords +following \tex{Umathaccent}. -\LUATEX\ supports both top accents and bottom accents in math mode. For bottom accents, -there is the new primitive \tex{Umathbotaccent}. If you want to set both top and bottom -accents on a single item, there is \tex{Umathaccents}. +The keyword \type{bottom} after \tex{Umathaccent} signals that a bottom +accent is needed, and the keyword \type{both} signals that both a top +and a bottom accent are needed (in this case two accents need to be +specified, of course). + +Then the set of three integers defining the accent is read. This set +of integers can be prefixed by the \type{fixed} keyword to indicate +that a non-stretching variant is requested (in case of both accents, +this step is repeated). + +A simple example: +\starttyping +\Umathaccent both fixed 0 0 "20D7 fixed 0 0 "20D7 {example} +\stoptyping + +The primitives \tex{Umathbotaccent} and \tex{Umathaccents} are deprecated since +version 0.65, and will be removed eventually. If a math top accent has to be placed and the accentee is a character and has a non-zero \type{top_accent} value, then this value will be used to place the accent instead of @@ -6667,9 +7483,6 @@ kern is ignored. The vertical placement of a bottom accent is straight below the accentee, no correction takes place. -\LUATEX\ has horizontal extensibles, and when present, these will be used by the accent -commands. - \section{Math root extension} The new primitive \type{\Uroot} allows the construction of a radical @@ -6949,11 +7762,15 @@ Incidentally, this is a global parameter instead of a language-specific one because it may be useful to change the value depending on the document structure instead of the text language. +Note: as of \LUATEX\ 0.63.0, the insertion of discretionaries after +a sequence of explicit hyphens happens at the same time as the other +hyphenation processing, {\it not\/} inside the main control loop. + The only use \LUATEX\ has for \tex{hyphenchar} is at the check whether a word should be considered for hyphenation at all. If the \tex{hyphenchar} of the font attached to the first character node in a word is negative, then hyphenation of that word is abandoned -immediately. {\bf This behaviour is added for backward +immediately. {\bf This behavior is added for backward compatibility only, and the use of \type{\hyphenchar=-1} as a means of preventing hyphenation should not be used in new \LUATEX\ documents.} @@ -6988,11 +7805,11 @@ The hyphenation algorithm in \LUATEX\ is quite different from the one in \TEX82, although it uses essentially the same user input. After expansion, the argument for \tex{patterns} has to be proper -UTF-8, no \tex{char} or \tex{chardef-ed} commands are allowed. (The -current implementation is even more strict, and will reject all -non|-|\UNICODE\ characters, but that will be changed in the future. For -now, the generated errors are a valuable tool in discovering -font-encoding specific pattern files) +UTF-8 with individual patterns separated by spaces, no \tex{char} or +\tex{chardef-ed} commands are allowed. (The current implementation is +even more strict, and will reject all non|-|\UNICODE\ characters, but +that will be changed in the future. For now, the generated errors are +a valuable tool in discovering font-encoding specific pattern files) Likewise, the expanded argument for \tex{hyphenation} also has to be proper UTF-8, but here a tiny little bit of extra syntax is provided: @@ -7002,13 +7819,11 @@ proper UTF-8, but here a tiny little bit of extra syntax is provided: indicates a desired complex discretionary, with arguments as in \tex{discretionary}'s command in normal document input. \item \type{-} indicates a desired simple discretionary, cf. \tex{-} and - \tex{discretionary{-}{}{}} in normal document input. + \type{\discretionary{-}{}{}} in normal document input. \item Internal command names are ignored. This rule is provided especially for \tex{discretionary}, but it also helps to deal with \tex{relax} commands that may sneak in. -\item \type{=} indicates a hyphen in the document input (but that - is only useful in documents where \tex{exhyphenchar} is not equal to - the hyphen). +\item \type{=} indicates a (non-discretionary) hyphen in the document input. \stopitemize The expanded argument is first converted back to a space-separated @@ -7037,6 +7852,16 @@ library. This loading method is quite a bit faster than going through the \TEX\ language primitives, but some (most?) of that speed gain would be lost if it had to interpret command sequences while doing so. +Starting with \LUATEX\ 0.63.0, it is possible to specify extra hyphenation +points in compound words by using \type{{-}{}{-}} for the explicit hyphen +character (replace \type{-} by the actual explicit hyphen character if needed). +For example, this matches the word \quote{multi-word-boundaries} and allows +an extra break inbetweem \quote{boun} and \quote{daries}: + +\starttyping +\hyphenation{multi{-}{}{-}word{-}{}{-}boun-daries} +\stoptyping + The motivation behind the \ETEX\ extension \tex{savinghyphcodes} was that hyphenation heavily depended on font encodings. This is no longer true in \LUATEX, and the corresponding primitive is ignored pending @@ -7108,7 +7933,7 @@ Words can be up to 256 characters long (up from 64 in \TEX82). Longer words generate an error right now, but eventually either the limitation will be removed or perhaps it will become possible to silently ignore the excess characters (this is what happens in \TEX82, -but there the behaviour cannot be controlled). +but there the behavior cannot be controlled). If you are using the \LUA\ function \type{lang.hyphenate}, you should be aware that this function expects to receive a list of \quote{character} @@ -7150,49 +7975,108 @@ are handled by our rewritten ligaturing engine. We are working hard to make sure all of the possible inputs will become supported soon. For example, take the word \type{office}, hyphenated \type{of-fice}, -using a \quote{normal} font with all the \type{f}-\type{i} ligatures: +using a \quote{normal} font with all the \type{f}-\type{f} and +\type{f}-\type{i} type ligatures: + \starttabulate[|l|l|] -\NC Initial: \NC \type{{o}{f}{f}{i}{c}{e}} \NC\NR +\NC Initial: \NC \type{{o}{f}{f}{i}{c}{e}}\NC\NR \NC After hyphenation: \NC \type{{o}{f}{{-},{},{}}{f}{i}{c}{e}}\NC\NR -\NC First ligature stage: \NC \type{{o}{{f}{-},{f},{ff}}{i}{c}{e}}\NC\NR -\NC Final result: \NC \type{{o}{{f}{-},{fi},{ffi}}{c}{e}} \NC\NR +\NC First ligature stage: \NC \type{{o}{{f-},{f},{<ff>}}{i}{c}{e}}\NC\NR +\NC Final result: \NC \type{{o}{{f-},{<fi>},{<ffi>}}{c}{e}} \NC\NR \stoptabulate -That's bad enough, but if there was a hyphenation point between the -\type{f} and the \type{i}: \type{of-f-ice}, the final result should be: +That's bad enough, but let us assume that there is also a hyphenation +point between the \type{f} and the \type{i}, to create +\type{of-f-ice}. Then the final result should be: \starttyping -{o}{{f}{-}, - {{f}{-}, +{o}{{f-}, + {{f-}, {i}, - {fi}}, - {{ff}{-}, + {<fi>}}, + {{<ff>-}, {i}, - {ffi}}}{c}{e} + {<ffi>}}}{c}{e} \stoptyping with discretionaries in the post-break text as well as in the replacement text of the top-level discretionary that resulted from the -first hyphenation point. And this is only a simple case. +first hyphenation point. + +Here is that nested solution again, in a different representation: + +\starttabulate[|l|l|l|l|] +\NC \NC pre \NC post \NC replace \NC \NR +\NC topdisc \NC \type{f-}$^1$ \NC sub1 \NC sub2 \NC \NR +\NC sub1 \NC \type{f-}$^2$ \NC \type{i}$^3$ \NC \type{<fi>}$^4$ \NC \NR +\NC sub2 \NC \type{<ff>-}$^5$\NC \type{i}$^6$ \NC \type{<ffi>}$^7$\NC \NR +\stoptabulate + +When line breaking is choosing its breakpoints, the following fields will eventually +be selected: -As of 0.39.0, the solution in \LUATEX\ is not as smart as all this. It -essentially creates the following set of items for \type{of-f-ice}: +\starttabulate[|l|l|l|] +\NC \type{of-f-ice} \NC \type{f-}$^1$ \NC \NR +\NC \NC \type{f-}$^2$ \NC \NR +\NC \NC \type{i}$^3$ \NC \NR +\NC \type{of-fice} \NC \type{f-}$^1$ \NC \NR +\NC \NC \type{<fi>}$^4$ \NC \NR +\NC \type{off-ice} \NC \type{<ff>-}$^5$ \NC \NR +\NC \NC \type{i}$^6$ \NC \NR +\NC \type{office} \NC \type{<ffi>}$^7$ \NC \NR +\stoptabulate + +The current solution in \LUATEX\ is not able to handle nested +discretionaries, but it is in fact smart enough to handle this +fictional \type{of-f-ice} example. It does so by combining two +sequential discretionary nodes as if they were a single object +(where the second discretionary node is treated as an extension +of the first node). + +One can observe that the \type{of-f-ice} and \type{off-ice} cases both end +with the same actual post replacement list (\type{i}), and that this +would be the case even if that \type{i} was the first item of a +potential following ligature like \type{ic}. This allows \LUATEX\ +to do away with one of the fields, and thus make the whole stuff fit +into just two discretionary nodes. + +The mapping of the seven list fields to the six fields in this +discretionary node pair is as follows: + +\starttabulate[|l|p|] +\NC \bf field \NC \bf description \NC \NR +\NC \type{disc1.pre} \NC \type{f-}$^1$ \NC \NR +\NC \type{disc1.post} \NC \type{<fi>}$^4$ \NC \NR +\NC \type{disc1.replace} \NC \type{<ffi>}$^7$ \NC \NR +\NC \type{disc2.pre} \NC \type{f-}$^2$ \NC \NR +\NC \type{disc2.post} \NC \type{i}$^{3{,}6}$\NC \NR +\NC \type{disc2.replace} \NC \type{<ff>-}$^5$\NC \NR +\stoptabulate + +What is actually generated after ligaturing has been applied is +therefore: \starttyping -{o}{{f}{-}, - {fi}, - {ffi}}, - {{f}{-}, +{o}{{f-}, + {<fi>}, + {<ffi>}} + {{f-}, {i}, - {fi}}{c}{e} + {<ff>-}}{c}{e} \stoptyping -This is not perfect (because the \type{off-ice} hyphenation will never -be chosen), but luckily three-item ligatures with multiple embedded -hyphenation points are extremely rare indeed: even this example was -artificially created. A full, perfect solution is possible, but is -low on the agenda now that at least \type{office} can be hyphenated -properly again. +The two discretionaries have different subtypes from a discretionary +appearing on its own: the first has subtype 4, and the second has +subtype 5. The need for these special subtypes stems from the fact +that not all of the fields appear in their \quote{normal} location. +The second discretionary especially looks odd, with things like the +\type{<ff>-} appearing in \type{disc2.replace}. The fact that some of +the fields have different meanings (and different processing code +internally) is what makes it necessary to have different subtypes: +this enables \LUATEX\ to distinguish this sequence of two joined +discretionary nodes from the case of two standalone discretionaries +appearing in a row. + \section{Breaking paragraphs into lines} @@ -7277,8 +8161,8 @@ incoming font source, also used as fontname identifier in the \PDF\ output, new reference, don't cache any lua data for this font. \type{renew}: don't store the table reference, but save a reference to the table that is created at the - first access to one of its fields in font.fonts. - (new in 0.40.0, before that caching was always \type{yes}). + first access to one of its fields in font.fonts. + (new in 0.40.0, before that caching was always \type{yes}). Note: the saved reference is thread-local, so be careful when you are using coroutines: an error will be thrown if the table has been cached in one thread, but you reference it from another thread ($\approx$ coroutine)\NC\NR \NC nomath \NC no \NC no \NC yes \NC boolean\NC this key allows a minor speedup for text fonts. if it is @@ -7387,22 +8271,6 @@ character \quote{f} (decimal 102) in the font cmr10 at 10 points: } \stoptyping -Of course a more compact is also possible, but keep in mind that reserved -words cannot be used compact and in \LUATEX\ we often have a \type {type} key. - -\starttyping -[102] = { - ... - ligatures = { - [102] = { - char = 11, - ['type'] = 0 - }, - ... - } -} -\stoptyping - The following top|-|level keys can be present inside a character hash: \starttabulate[|lT|c|c|c|l|p|] @@ -7431,7 +8299,7 @@ The following top|-|level keys can be present inside a character hash: \stoptabulate The values of \type{top_accent}, \type{bot_accent} and \type{mathkern} are used only for math -accent and superscript placement, see the \at[math]{math chapter} in this manual for details. +accent and superscript placement, see the \at{math chapter}[math] in this manual for details. The values of \type{left_protruding} and \type{right_protruding} are used only when \tex{pdfprotrudechars} is non-zero. @@ -7557,7 +8425,7 @@ explicitly. For \PK\ bitmap fonts, wide font encoding is not supported at all. If no special care is needed, \LUATEX\ currently falls back to the -mapfile|-|based solution used by \PDFTEX\ and \DVIPS. This behaviour +mapfile|-|based solution used by \PDFTEX\ and \DVIPS. This behavior will be removed in the future, when the existing code becomes integrated in the new subsystem. @@ -7819,16 +8687,16 @@ accessible fields: \NC stretch_order \NC number \NC \NC\NR \NC shrink \NC number \NC \NC\NR \NC shrink_order \NC number \NC \NC\NR -\NC writable \NC boolean \NC If this is true, you can't assign to this \type{glue_spec} +\NC writable \NC boolean \NC If this is true, you can't assign to this \type{glue_spec} because it is one of the preallocated special cases. New in 0.52\NC\NR \stoptabulate These objects are reference counted, so there is actually an extra field named \type {ref_count} as well. This item type will likely disappear in the future, and the glue fields themselves will -become part of the nodes referencing glue items. +become part of the nodes referencing glue items. -\subsubsection{attribute\_list and attribute items} +\subsubsection{attribute{\_}list and attribute items} The newly introduced attribute registers are non|-|trivial, because the value that is attached to a node is essentially a sparse array of @@ -7862,7 +8730,8 @@ Valid fields in \type{attribute} items: \subsubsection{action item} -Valid fields: \showfields{action} +Valid fields: \showfields{action}\crlf +Id: \showid{action} These are a special kind of item that only appears inside pdf start link objects. @@ -7906,12 +8775,14 @@ fields to be a backwards pointer in the argument node list. \subsubsection{hlist nodes} -Valid fields: \showfields{hlist} +Valid fields: \showfields{hlist}\crlf +Id: \showid{hlist} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR \NC subtype \NC number \NC 0 = unknown origin, 1 = created by -linebreaking, 2 = explict box command. (0.46.0)\NC\NR +linebreaking, 2 = explicit box command. (0.46.0), +3 = paragraph indentation box, 4 = alignment column or row, 5 = alignment cell (0.62.0)\NC\NR \NC attr \NC \syntax{<node>} \NC The head of the associated attribute list \NC\NR \NC width \NC number \NC \NC\NR \NC height \NC number \NC \NC\NR @@ -7922,23 +8793,28 @@ linebreaking, 2 = explict box command. (0.46.0)\NC\NR the glue order\NC\NR \NC glue_set \NC number \NC the calculated glue ratio\NC\NR \NC glue_sign \NC number \NC \NC\NR -\NC list \NC \syntax{<node>} \NC the body of this list\NC\NR +\NC head \NC \syntax{<node>} \NC the first node of the body of this list\NC\NR \NC dir \NC string \NC the direction of this box. see~\in{}[dirnodes]\NC\NR \stoptabulate -A warning: never assign a node list to the list field +A warning: never assign a node list to the \type{head} field unless you are sure its internal link structure is correct, otherwise -an error may be result. +an error may result. +Note: the new field name \type{head} was introduced in 0.65 to replace +the old name \type{list}. Use of the name \type{list} is now +deprecated, but it will stay available until at least version 0.80. \subsubsection{vlist nodes} Valid fields: As for hlist, except that \quote{shift} is a displacement -perpendicular to the line progression direction. +perpendicular to the line progression direction, and \quote{subtype} only +has subtypes 0, 4, and 5. \subsubsection{rule nodes} -Valid fields: \showfields{rule} +Valid fields: \showfields{rule}\crlf +Id: \showid{rule} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -7953,7 +8829,8 @@ Valid fields: \showfields{rule} \subsubsection{ins nodes} -Valid fields: \showfields{ins} +Valid fields: \showfields{ins}\crlf +Id: \showid{ins} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -7962,18 +8839,23 @@ Valid fields: \showfields{ins} \NC cost \NC number \NC the penalty associated with this insert\NC\NR \NC height \NC number \NC \NC\NR \NC depth \NC number \NC \NC\NR -\NC list \NC \syntax{<node>} \NC the body of this insert\NC\NR +\NC head \NC \syntax{<node>} \NC the first node of the body of this insert\NC\NR \NC spec \NC \syntax{<node>} \NC a pointer to the \tex{splittopskip} glue spec\NC\NR \stoptabulate -A warning: never assign a node list to the list field +A warning: never assign a node list to the \type{head} field unless you are sure its internal link structure is correct, otherwise an error may be result. +Note: the new field name \type{head} was introduced in 0.65 to replace +the old name \type{list}. Use of the name \type{list} is now +deprecated, but it will stay available until at least version 0.80. + \subsubsection{mark nodes} -Valid fields: \showfields{mark} +Valid fields: \showfields{mark}\crlf +Id: \showid{mark} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -7985,24 +8867,29 @@ Valid fields: \showfields{mark} \subsubsection{adjust nodes} -Valid fields: \showfields{adjust} +Valid fields: \showfields{adjust}\crlf +Id: \showid{adjust} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR \NC subtype \NC number \NC 0 = normal, 1 = \quote{pre}\NC\NR \NC attr \NC \syntax{<node>} \NC \NC\NR -\NC list \NC \syntax{<node>} \NC adjusted material\NC\NR +\NC head \NC \syntax{<node>} \NC adjusted material\NC\NR \stoptabulate - -A warning: never assign a node list to the list field +A warning: never assign a node list to the \type{head} field unless you are sure its internal link structure is correct, otherwise an error may be result. +Note: the new field name \type{head} was introduced in 0.65 to replace +the old name \type{list}. Use of the name \type{list} is now +deprecated, but it will stay available until at least version 0.80. + \subsubsection{disc nodes} -Valid fields: \showfields{disc} +Valid fields: \showfields{disc}\crlf +Id: \showid{disc} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8011,8 +8898,8 @@ Valid fields: \showfields{disc} 1 = the \tex{-} command, 2 = added automatically following a \type{-}, 3 = added by the hyphenation algorithm (simple), - 4 = added by the hyphenation algorithm (hard, first item), - 5 = added by the hyphenation algorithm (hard, second item)\NC\NR + 4 = added by the hyphenation algorithm (hard, first item), + 5 = added by the hyphenation algorithm (hard, second item)\NC\NR \NC attr \NC \syntax{<node>} \NC \NC\NR \NC pre \NC \syntax{<node>} \NC pointer to the pre|-|break text\NC\NR \NC post \NC \syntax{<node>} \NC pointer to the post|-|break text\NC\NR @@ -8027,7 +8914,8 @@ an error may be result. \subsubsection{math nodes} -Valid fields: \showfields{math} +Valid fields: \showfields{math}\crlf +Id: \showid{math} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8038,7 +8926,8 @@ Valid fields: \showfields{math} \subsubsection{glue nodes} -Valid fields: \showfields{glue} +Valid fields: \showfields{glue}\crlf +Id: \showid{glue} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8046,40 +8935,41 @@ Valid fields: \showfields{glue} 1--18 = internal glue parameters, 100-103 = \quote{leader} subtypes \NC\NR \NC attr \NC \syntax{<node>} \NC \NC\NR -\NC spec \NC \syntax{<node>} \NC pointer to a glue\_spec item \NC\NR +\NC spec \NC \syntax{<node>} \NC pointer to a glue{\_}spec item \NC\NR \NC leader \NC \syntax{<node>} \NC pointer to a box or rule for leaders\NC\NR \stoptabulate The exact meanings of the subtypes are as follows: \starttabulate[|rT|l|] -\NC 1 \NC \tex{lineskip} \NC \NR -\NC 2 \NC \tex{baselineskip} \NC \NR -\NC 3 \NC \tex{parskip} \NC \NR -\NC 4 \NC \tex{abovedisplayskip} \NC \NR -\NC 5 \NC \tex{belowdisplayskip} \NC \NR -\NC 6 \NC \tex{abovedisplayshortskip} \NC \NR -\NC 7 \NC \tex{belowdisplayshortskip} \NC \NR -\NC 8 \NC \tex{leftskip} \NC \NR -\NC 9 \NC \tex{rightskip} \NC \NR -\NC 10 \NC \tex{topskip} \NC \NR -\NC 11 \NC \tex{splittopskip} \NC \NR -\NC 12 \NC \tex{tabskip} \NC \NR -\NC 13 \NC \tex{spaceskip} \NC \NR -\NC 14 \NC \tex{xspaceskip} \NC \NR -\NC 15 \NC \tex{parfillskip} \NC \NR -\NC 16 \NC \tex{thinmuskip} \NC \NR -\NC 17 \NC \tex{medmuskip} \NC \NR -\NC 18 \NC \tex{thickmuskip} \NC \NR -\NC 100 \NC \tex{leaders} \NC \NR -\NC 101 \NC \tex{cleaders} \NC \NR -\NC 102 \NC \tex{xleaders} \NC \NR -\NC 103 \NC \tex{aleaders} \NC \NR +\NC 1 \NC \tex{lineskip} \NC \NR +\NC 2 \NC \tex{baselineskip} \NC \NR +\NC 3 \NC \tex{parskip} \NC \NR +\NC 4 \NC \tex{abovedisplayskip} \NC \NR +\NC 5 \NC \tex{belowdisplayskip} \NC \NR +\NC 6 \NC \tex{abovedisplayshortskip} \NC \NR +\NC 7 \NC \tex{belowdisplayshortskip} \NC \NR +\NC 8 \NC \tex{leftskip} \NC \NR +\NC 9 \NC \tex{rightskip} \NC \NR +\NC 10 \NC \tex{topskip} \NC \NR +\NC 11 \NC \tex{splittopskip} \NC \NR +\NC 12 \NC \tex{tabskip} \NC \NR +\NC 13 \NC \tex{spaceskip} \NC \NR +\NC 14 \NC \tex{xspaceskip} \NC \NR +\NC 15 \NC \tex{parfillskip} \NC \NR +\NC 16 \NC \tex{thinmuskip} \NC \NR +\NC 17 \NC \tex{medmuskip} \NC \NR +\NC 18 \NC \tex{thickmuskip} \NC \NR +\NC 100 \NC \tex{leaders} \NC \NR +\NC 101 \NC \tex{cleaders} \NC \NR +\NC 102 \NC \tex{xleaders} \NC \NR +\NC 103 \NC \tex{gleaders} \NC \NR \stoptabulate \subsubsection{kern nodes} -Valid fields: \showfields{kern} +Valid fields: \showfields{kern}\crlf +Id: \showid{kern} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8093,7 +8983,8 @@ Valid fields: \showfields{kern} \subsubsection{penalty nodes} -Valid fields: \showfields{penalty} +Valid fields: \showfields{penalty}\crlf +Id: \showid{penalty} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8104,7 +8995,8 @@ Valid fields: \showfields{penalty} \subsubsection[glyphnodes]{glyph nodes} -Valid fields: \showfields{glyph} +Valid fields: \showfields{glyph}\crlf +Id: \showid{glyph} \starttabulate[|lT|l|p|] \NC \ssbf field\NC \ssbf type \NC \ssbf explanation \NC\NR @@ -8145,9 +9037,10 @@ See \in{section}[charsandglyphs] for a detailed description of the -\subsubsection{margin\_kern nodes} +\subsubsection{margin{\_}kern nodes} -Valid fields: \showfields{margin_kern} +Valid fields: \showfields{margin_kern}\crlf +Id: \showid{margin_kern} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8173,9 +9066,10 @@ descriptions these are indicated by the word \type{<kernel>}). The \type{next} and \type{prev} fields for these subnodes are unused. -\subsubsubsection{math\_char and math\_text\_char subnodes} +\subsubsubsection{math{\_}char and math{\_}text{\_}char subnodes} -Valid fields: \showfields{math_char} +Valid fields: \showfields{math_char}\crlf +Id: \showid{math_char} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8190,25 +9084,30 @@ the character and family for a single glyph object. The normally encounter, it arises temporarily during math list conversion (its sole function is to suppress a following italic correction). -\subsubsubsection{sub\_box and sub\_mlist subnodes} +\subsubsubsection{sub{\_}box and sub{\_}mlist subnodes} -Valid fields: \showfields{sub_box} +Valid fields: \showfields{sub_box}\crlf +Id: \showid{sub_box} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR \NC attr \NC \syntax{<node>}\NC \NC\NR -\NC list \NC \syntax{<node>}\NC \NC \NR +\NC head \NC \syntax{<node>}\NC \NC \NR \stoptabulate These two subnode types are used for subsidiary list items. For -\type{sub_box}, the \type{list} points to a \quote{normal} vbox or -hbox. For \type{sub_mlist}, the \type{list} points to a math list +\type{sub_box}, the \type{head} points to a \quote{normal} vbox or +hbox. For \type{sub_mlist}, the \type{head} points to a math list that is yet to be converted. -A warning: never assign a node list to the components field +A warning: never assign a node list to the \type{head} field unless you are sure its internal link structure is correct, otherwise an error may be result. +Note: the new field name \type{head} was introduced in 0.65 to replace +the old name \type{list}. Use of the name \type{list} is now +deprecated, but it will stay available until at least version 0.80. + \subsubsection{Math delimiter subnode} There is a fifth subnode type that is used exclusively for delimiter @@ -8216,7 +9115,8 @@ fields. As before, the \type{next} and \type{prev} fields are unused. \subsubsubsection{delim subnodes} -Valid fields: \showfields{delim} +Valid fields: \showfields{delim}\crlf +Id: \showid{delim} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8241,7 +9141,8 @@ separate subtypes for differentiation. \subsubsubsection{simple nodes} -Valid fields: \showfields{noad} +Valid fields: \showfields{noad}\crlf +Id: \showid{noad} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8274,10 +9175,14 @@ Operators are a bit special because they occupy three subtypes. \subsubsubsection{accent nodes} -Valid fields: \showfields{accent} +Valid fields: \showfields{accent}\crlf +Id: \showid{accent} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR +\NC subtype \NC number \NC the first bit is used for a fixed top accent flag (if the \type{accent} field is present), + the second bit for a fixed bottom accent flag (if the \type{bot_accent} field is present). + Example: the actual value \type{3} means: do not stretch either accent\NC\NR \NC attr \NC \syntax{<node>}\NC \NC\NR \NC nucleus \NC \syntax{<kernel>}\NC \NC \NR \NC sub \NC \syntax{<kernel>}\NC \NC\NR @@ -8288,7 +9193,8 @@ Valid fields: \showfields{accent} \subsubsubsection{style nodes} -Valid fields: \showfields{style} +Valid fields: \showfields{style}\crlf +Id: \showid{style} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8302,7 +9208,8 @@ Each of these can have a trailing \type{'} to signify \subsubsubsection{choice nodes} -Valid fields: \showfields{choice} +Valid fields: \showfields{choice}\crlf +Id: \showid{choice} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8319,7 +9226,8 @@ correct, otherwise an error may be result. \subsubsubsection{radical nodes} -Valid fields: \showfields{radical} +Valid fields: \showfields{radical}\crlf +Id: \showid{radical} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8338,7 +9246,8 @@ an error may be result. \subsubsubsection{fraction nodes} -Valid fields: \showfields{fraction} +Valid fields: \showfields{fraction}\crlf +Id: \showid{fraction} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8356,7 +9265,8 @@ an error may be result. \subsubsubsection{fence nodes} -Valid fields: \showfields{fence} +Valid fields: \showfields{fence}\crlf +Id: \showid{fence} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8371,15 +9281,16 @@ Valid fields: \showfields{fence} Whatsit nodes come in many subtypes that you can ask for by running \luatex{node.whatsits()}: -\ctxlua {for n,name in table.sortedpairs(node.whatsits()) do - if (n<100) then +\ctxlua {for n,name in table.sortedpairs(node.whatsits()) do + if (n<100) then if (n>0) then tex.sprint (', ') end - tex.sprint('\\type{' .. name .. '} (' .. n .. ')') end + tex.sprint('\\type{' .. name .. '} (' .. n .. ')') end end } \subsubsection{open nodes} -Valid fields: \showfields{whatsit,open} +Valid fields: \showfields{whatsit,open}\crlf +Id: \showid{whatsit,open} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8392,7 +9303,8 @@ Valid fields: \showfields{whatsit,open} \subsubsection{write nodes} -Valid fields: \showfields{whatsit,write} +Valid fields: \showfields{whatsit,write}\crlf +Id: \showid{whatsit,write} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8403,7 +9315,8 @@ Valid fields: \showfields{whatsit,write} \subsubsection{close nodes} -Valid fields: \showfields{whatsit,close} +Valid fields: \showfields{whatsit,close}\crlf +Id: \showid{whatsit,close} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8413,7 +9326,8 @@ Valid fields: \showfields{whatsit,close} \subsubsection{special nodes} -Valid fields: \showfields{whatsit,special} +Valid fields: \showfields{whatsit,special}\crlf +Id: \showid{whatsit,special} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8431,13 +9345,14 @@ This whatsit subtype will be removed in the next release. \subsubsection{local_par nodes} -Valid fields: \showfields{whatsit,local_par} +Valid fields: \showfields{whatsit,local_par}\crlf +Id: \showid{whatsit,local_par} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR \NC attr \NC \syntax{<node>} \NC \NC\NR -\NC pen_inter \NC number \NC interline penalty\NC\NR -\NC pen_broken\NC number \NC broken penalty\NC\NR +\NC pen_inter \NC number \NC local interline penalty (from \tex{localinterlinepenalty})\NC\NR +\NC pen_broken\NC number \NC local broken penalty (from \tex{localbrokenpenalty})\NC\NR \NC dir \NC string \NC the direction of this par. see~\in{}[dirnodes]\NC\NR \NC box_left \NC \syntax{<node>} \NC the \tex{localleftbox}\NC\NR \NC box_left_width\NC number\NC width of the \tex{localleftbox}\NC\NR @@ -8454,7 +9369,8 @@ an error may be result. \subsubsection[dirnodes]{dir nodes} -Valid fields: \showfields{whatsit,dir} +Valid fields: \showfields{whatsit,dir}\crlf +Id: \showid{whatsit,dir} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8486,7 +9402,8 @@ stack. \subsubsection{pdf_literal nodes} -Valid fields: \showfields{whatsit,pdf_literal} +Valid fields: \showfields{whatsit,pdf_literal}\crlf +Id: \showid{whatsit,pdf_literal} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8495,9 +9412,19 @@ Valid fields: \showfields{whatsit,pdf_literal} \NC data \NC string \NC the \tex{pdfliteral} information\NC\NR \stoptabulate +Mode values: + +\starttabulate[|lT|p|] +\NC \ssbf value \NC \ssbf corresponding \tex{pdftex} keyword \NC \NR +\NC 0 \NC setorigin \NC \NR +\NC 0 \NC page \NC \NR +\NC 0 \NC direct \NC \NR +\stoptabulate + \subsubsection{pdf_refobj nodes} -Valid fields: \showfields{whatsit,pdf_refobj} +Valid fields: \showfields{whatsit,pdf_refobj}\crlf +Id: \showid{whatsit,pdf_refobj} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8507,7 +9434,8 @@ Valid fields: \showfields{whatsit,pdf_refobj} \subsubsection{pdf_refxform nodes} -Valid fields: \showfields{whatsit,pdf_refxform}. +Valid fields: \showfields{whatsit,pdf_refxform}\crlf +Id: \showid{whatsit,pdf_refxform}. \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8522,7 +9450,8 @@ Be aware that \type{pdf_refxform} nodes have dimensions that are used by \LUATEX \subsubsection{pdf_refximage nodes} -Valid fields: \showfields{whatsit,pdf_refximage} +Valid fields: \showfields{whatsit,pdf_refximage}\crlf +Id: \showid{whatsit,pdf_refximage} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8537,7 +9466,8 @@ Be aware that \type{pdf_refximage} nodes have dimensions that are used by \LUATE \subsubsection{pdf_annot nodes} -Valid fields: \showfields{whatsit,pdf_annot} +Valid fields: \showfields{whatsit,pdf_annot}\crlf +Id: \showid{whatsit,pdf_annot} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8552,7 +9482,8 @@ Valid fields: \showfields{whatsit,pdf_annot} \subsubsection{pdf_start_link nodes} -Valid fields: \showfields{whatsit,pdf_start_link} +Valid fields: \showfields{whatsit,pdf_start_link}\crlf +Id: \showid{whatsit,pdf_start_link} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8567,7 +9498,8 @@ Valid fields: \showfields{whatsit,pdf_start_link} \subsubsection{pdf_end_link nodes} -Valid fields: \showfields{whatsit,pdf_end_link} +Valid fields: \showfields{whatsit,pdf_end_link}\crlf +Id: \showid{whatsit,pdf_end_link} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8576,7 +9508,8 @@ Valid fields: \showfields{whatsit,pdf_end_link} \subsubsection{pdf_dest nodes} -Valid fields: \showfields{whatsit,pdf_dest} +Valid fields: \showfields{whatsit,pdf_dest}\crlf +Id: \showid{whatsit,pdf_dest} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8593,7 +9526,8 @@ Valid fields: \showfields{whatsit,pdf_dest} \subsubsection{pdf_thread nodes} -Valid fields: \showfields{whatsit,pdf_thread} +Valid fields: \showfields{whatsit,pdf_thread}\crlf +Id: \showid{whatsit,pdf_thread} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8608,7 +9542,8 @@ Valid fields: \showfields{whatsit,pdf_thread} \subsubsection{pdf_start_thread nodes} -Valid fields: \showfields{whatsit,pdf_start_thread} +Valid fields: \showfields{whatsit,pdf_start_thread}\crlf +Id: \showid{whatsit,pdf_start_thread} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8623,7 +9558,8 @@ Valid fields: \showfields{whatsit,pdf_start_thread} \subsubsection{pdf_end_thread nodes} -Valid fields: \showfields{whatsit,pdf_end_thread} +Valid fields: \showfields{whatsit,pdf_end_thread}\crlf +Id: \showid{whatsit,pdf_end_thread} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8632,7 +9568,8 @@ Valid fields: \showfields{whatsit,pdf_end_thread} \subsubsection{pdf_save_pos nodes} -Valid fields: \showfields{whatsit,pdf_save_pos} +Valid fields: \showfields{whatsit,pdf_save_pos}\crlf +Id: \showid{whatsit,pdf_save_pos} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8641,18 +9578,25 @@ Valid fields: \showfields{whatsit,pdf_save_pos} \subsubsection{late_lua nodes} -Valid fields: \showfields{whatsit,late_lua} +Valid fields: \showfields{whatsit,late_lua}\crlf +Id: \showid{whatsit,late_lua} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR \NC attr \NC \syntax{<node>} \NC \NC\NR \NC data \NC string \NC data to execute\NC\NR +\NC string \NC string \NC data to execute (0.63)\NC\NR \NC name \NC string \NC the name to use for lua error reporting\NC\NR \stoptabulate +The difference between \type{data} and \type{string} is that on +assignment, the \type{data} field is converted to a token list, cf. use as +\tex{latelua}. The \type{string} version is treated as a literal string. + \subsubsection{pdf_colorstack nodes} -Valid fields: \showfields{whatsit,pdf_colorstack} +Valid fields: \showfields{whatsit,pdf_colorstack}\crlf +Id: \showid{whatsit,pdf_colorstack} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8664,7 +9608,8 @@ Valid fields: \showfields{whatsit,pdf_colorstack} \subsubsection{pdf_setmatrix nodes} -Valid fields: \showfields{whatsit,pdf_setmatrix} +Valid fields: \showfields{whatsit,pdf_setmatrix}\crlf +Id: \showid{whatsit,pdf_setmatrix} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8674,7 +9619,8 @@ Valid fields: \showfields{whatsit,pdf_setmatrix} \subsubsection{pdf_save nodes} -Valid fields: \showfields{whatsit,pdf_save} +Valid fields: \showfields{whatsit,pdf_save}\crlf +Id: \showid{whatsit,pdf_save} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8683,7 +9629,8 @@ Valid fields: \showfields{whatsit,pdf_save} \subsubsection{pdf_restore nodes} -Valid fields: \showfields{whatsit,pdf_restore} +Valid fields: \showfields{whatsit,pdf_restore}\crlf +Id: \showid{whatsit,pdf_restore} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8697,7 +9644,8 @@ code. In effect, they are an extension to the extension mechanism. The \LUATEX\ engine will simply step over such whatsits without ever looking at the contents. -Valid fields: \showfields{whatsit,user_defined} +Valid fields: \showfields{whatsit,user_defined}\crlf +Id: \showid{whatsit,user_defined} \starttabulate[|lT|l|p|] \NC \ssbf field \NC \bf type \NC \bf explanation \NC\NR @@ -8825,13 +9773,13 @@ as well as the five supporting primitives \tex{knbscode}, \tex{stbscode}, \stoptyping \stopcolumns -\item The four primitives that were already marked obsolete in \PDFTEX~1.40 +\item The four primitives that were already marked obsolete in \PDFTEX~1.40 have been removed since \LUATEX~0.42: \startcolumns[n=2] \starttyping -\pdfoptionalwaysusepdfpagebox -\pdfoptionpdfinclusionerrorlevel +\pdfoptionalwaysusepdfpagebox +\pdfoptionpdfinclusionerrorlevel \pdfforcepagebox \pdfmovechars \stoptyping @@ -8857,7 +9805,7 @@ have been removed since \LUATEX~0.42: \item LFS (\PDF\ Files larger than 2GiB) support is not working yet. -\item \LUATEX~0.45.0 introduces two extra token lists, \tex{pdfxformresources} +\item \LUATEX~0.45.0 introduces two extra token lists, \tex{pdfxformresources} and \tex{pdfxformattr}, as an alternative to \tex{pdfxform} keywords. \item As of \LUATEX~0.50.0 is no longer possible for fonts from embedded pdf files @@ -8872,8 +9820,25 @@ and \tex{pdfxformattr}, as an alternative to \tex{pdfxform} keywords. \startitemize -\item \LUATEX's OTP (\tex{ocp} and \tex{ocplist}) processing is -deprecated, broken, and will be removed alltogether in the 0.70 beta. +\item Starting with \LUATEX\ 0.63.0, OCP processing is no longer + supported at all. As a consequence, the following primitives have + been removed: + +\startcolumns[n=2] +\starttyping +\ocp +\externalocp +\ocplist +\pushocplist +\popocplist +\clearocplists +\addbeforeocplist +\addafterocplist +\removebeforeocplist +\removeafterocplist +\ocptracelevel +\stoptyping +\stopcolumns \item \LUATEX\ only understands 4~of the 16~direction specifiers of \ALEPH: \type{TLT} (latin), \type{TRT} (arabic), @@ -8904,10 +9869,6 @@ specifiers generate an error (\LUATEX\ 0.45). \stoptyping \stopcolumns -\item A small series of bounds checking fixes to \tex{ocp} and - \tex{ocplist} has been added to prevent the system from crashing - due to array indexes running out of bounds. - \item The \tex{hoffset} bug when \tex{pagedir TRT} is fixed, removing the need for an explicit fix to \tex{hoffset} @@ -8917,10 +9878,6 @@ removing the need for an explicit fix to \tex{hoffset} \item A fair amount of other minor bugs are fixed as well, most of these related to \tex{tracingcommands} output. -\item The number of possible fonts, ocps and ocplists is -smaller than their maximum \ALEPH\ value (around 5000 fonts and -30000 ocps / ocplists). - \item The internal function \type{scan_dir()} has been renamed to \type{scan_direction()} to prevent a naming clash, and it now allows an optional space after the direction is completely parsed. @@ -8931,9 +9888,6 @@ insert characters that do not fit in the BMP. \item Glues {\it immediately after} direction change commands are not legal breakpoints. -\item The \tex{ocp} and \tex{ocplist} statistics at the end of a run -are only printed if OCP's are actually used. - \stopitemize \section{Changes from standard \WEBC} @@ -8964,7 +9918,7 @@ in non|-|\LUA\ mode: \type{openout} do not happen (however, it is easy for a \LUA\ script to do this itself by overloading \lua{io.open}). -\item The `E' option does not do anything useful. +\item The \quote{E} option does not do anything useful. \stopitemize @@ -9027,8 +9981,8 @@ the \TEX\ \quote{equivalence table} and because each had 1.1 million entries with a few memory words each, this makes a major difference in memory usage. -The \tex{catcode}, \tex{sfcode}, \tex{lccode} and \tex{uccode} assignments -do not yet show up when using the etex tracing routines \tex{tracingassigns} +The \tex{catcode}, \tex{sfcode}, \tex{lccode} and \tex{uccode} assignments +do not yet show up when using the etex tracing routines \tex{tracingassigns} and \tex{tracingrestores} (code simply not written yet). A side|-|effect of the current implementation is that \tex{global} is @@ -9051,7 +10005,7 @@ the length is one when it has to decide whether or not to add a trailing space. Active characters are internally implemented as a special type -of multi-letter control sequences that uses a prefix that is +of multi-letter control sequences that uses a prefix that is otherwise impossible to obtain. \section{Compressed format} @@ -9077,4 +10031,4 @@ There used to be a lists of bugs and planned features below here, but that did n work out too well. There are lists of open bugs and feature requests in the tracker at \hyphenatedurl{http://tracker.luatex.org}. -\stoptext +\stoptext
\ No newline at end of file |