shithub: lua9

ref: 83e76c9cc25485002c380194331f8e946ac9db36
dir: /doc/README.md/

View raw version
# lua9 Documentation

lua9 is a custom [lua](http://lua.org) interpreter including bindings to various plan9 libraries.
This document is not meant to replace the plan9 documentation, please refer to the man pages in [section 2](http://man.9front.org/2/) for the documentation of individual functions.

## Notes

The API is mostly a one-for-one translation of the C API with some slight changes to make the API feel more "lua-ish".
The most significant differences are:
* The API is split across several modules (draw, event, etc.).
* Naming respects lua conventions instead of their original C name.
* Functions that take pointers as out parameters (e.g. event) instead return the value and may return multiple values (e.g. icossin).
* In lua, indices start at one not zero. The API respects the lua convention for function returning indices (e.g. emenuhit)
* Value types (e.g. Point, Rectangle) are mapped as lua tables, reference types (e.g. Image, Font) as userdata.

## API Reference

### Module `draw`

#### `draw.init(title)`
This is the C `initdraw` function.  
The important difference is that it does not handle the additional parameters allowed by `initdraw`.
When called, `init` will check for the existence of an `eresized` function as with the C API.  
Upon success, three global variables are defined: `display`, `screen` and `font`.

#### `draw.draw(dst, r, src, mask, p)`
#### `draw.replxy(min, max, x)`
#### `draw.repl(r, p)`
#### `draw.replclipr(i, r, clipr)`
#### `draw.line(dst, p0, p1, end0, end1, thick, src, sp)`
#### `draw.poly(dst, pts, end0, end1, radius, src, sp)`
#### `draw.fillpoly(dst, pts, wind, src, sp)`
#### `draw.bezier(dst, p0, p1, p2, p3, end0, end1, radius, src, sp)`
#### `draw.fillbezier(dst, p0, p1, p2, p3, w, src, sp)`
#### `draw.bezspline(dst, pts, end0, end1, radius, src, sp)`
#### `draw.fillbezspline(dst, pts, w, src, sp)`
#### `draw.ellipse(dst, c, a, b, thick, src, sp)`
#### `draw.fillellipse(dst, c, a, b, src, sp)`
#### `draw.arc(dst, c, a, b, thick, src, sp, alpha, phi)`
#### `draw.fillarc(dst, c, a, b, src, sp, alpha, phi)`
#### `draw.icossin(deg)`
Returns two values: `cosp` and `sinp`
#### `draw.icossin2(x, y)`
Returns two values: `cosp` and `sinp`
#### `draw.border(dst, r, i, color, sp)`
#### `draw.string(dst, p, src, sp, f, s)`
#### `draw.stringn(dst, p, src, sp, f, s, len)`
#### `draw.stringbg(dst, p, src, sp, f, s, bg, bgp)`
#### `draw.stringnbg(dst, p, src, sp, f, s, len, bg, bgp)`
#### `draw.allocimage(d, r, chan, repl, col)`
#### `draw.allocimagemix(d, one, three)`

#### Constants
The following constants are exported:
* `END_SQUARE`, `END_DISC`, `END_ARROW`, `END_MASK`

### Module `event`

#### `event.init(keys)`
Initialize event handling. This is the `einit` C function.
#### `event.event()`
Returns:
* The event key
* The event structure
#### `event.kbd()`
#### `event.canmouse()`
#### `event.cankbd()`
#### `event.timer(key, n)`
#### `event.enter(ask, s, m)`
The `s` parameter is used as an initial value in the text field.
#### `event.menuhit(but, m, menu)`
The `menu` is expected to be a table of strings. The generation of menu items is not supported currently.  
Returns:
- Selected index (starting at 1) or `nil`

#### Constants
The following constants are exported:
* `MOUSE`, `KEYBOARD`

### Module `g`
Geometry related functions.

#### `g.pt(x, y)`
#### `g.rect(x0, y0, x1, y1)`
#### `g.addpt(p, q)`
#### `g.subpt(p, q)`
#### `g.mulpt(p, a)`
#### `g.divpt(p, a)`
#### `g.rectaddpt(r, p)`
#### `g.rectsubpt(r, p)`
#### `g.insetrect(r, n)`
#### `g.canonrect(r)`


### Module `key`

#### `key.eq(k, str)`
Checks whether k is equal to str. This is a convenience function to help with lua not having a character type.

#### Constants
The following constants are exported:
* `HOME`, `UP`, `DOWN`, `PGUP`, `PRINT`, `LEFT`, `RIGHT`, `PGDOWN`, `INS`, `END`, `SOH`, `STX`, `ETX`, `EOF`, `ENQ`, `ACK`, `BS`, `NACK`, `ETB`, `DEL`, `ESC`.

### Module `color`

#### Constants
The following constants are exported:
* `OPAQUE`, `TRANSPARENT`, `BLACK`, `WHITE`, `RED`, `GREEN`, `BLUE`, `CYAN`, `MAGENTA`, `YELLOW`, `PALE_YELLOW`, `DARK_YELLOW`, `PALE_GREEN`, `DARK_GREEN`, `MED_GREEN`, `DARK_BLUE`, `PALE_BLUE_GREEN`, `PALE_BLUE`, `BLUE_GREEN`, `GREY_GREEN`, `PALE_GREY_GREEN`, `YELLOW_GREEN`, `MED_BLUE`, `GREY_BLUE`, `PALE_GREY_BLUE`, `PURPLE_BLUE`, `NOT_A_COLOR`, `NO_FILL`