summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/lua/lfontlib.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/lua/lfontlib.c')
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/lfontlib.c72
1 files changed, 61 insertions, 11 deletions
diff --git a/Build/source/texk/web2c/luatexdir/lua/lfontlib.c b/Build/source/texk/web2c/luatexdir/lua/lfontlib.c
index 7e35d2360b7..0304be8bd11 100644
--- a/Build/source/texk/web2c/luatexdir/lua/lfontlib.c
+++ b/Build/source/texk/web2c/luatexdir/lua/lfontlib.c
@@ -155,15 +155,15 @@ static int frozenfont(lua_State * L)
static int setfont(lua_State * L)
{
- int i = luaL_checkinteger(L, -2);
+ int t = lua_gettop(L);
+ int i = luaL_checkinteger(L,1);
if (i) {
- luaL_checktype(L, -1, LUA_TTABLE);
+ luaL_checktype(L, t, LUA_TTABLE);
if (is_valid_font(i)) {
- if (!(font_touched(i) || font_used(i))) {
+ if (! (font_touched(i) || font_used(i))) {
font_from_lua(L, i);
} else {
- luaL_error(L,
- "that font has been accessed already, changing it is forbidden");
+ luaL_error(L, "that font has been accessed already, changing it is forbidden");
}
} else {
luaL_error(L, "that integer id is not a valid font");
@@ -172,10 +172,56 @@ static int setfont(lua_State * L)
return 0;
}
+static int addcharacters(lua_State * L)
+{
+ int t = lua_gettop(L);
+ int i = luaL_checkinteger(L,1);
+ if (i) {
+ luaL_checktype(L, t, LUA_TTABLE);
+ if (is_valid_font(i)) {
+ characters_from_lua(L, i);
+ } else {
+ luaL_error(L, "that integer id is not a valid font");
+ }
+ }
+ return 0;
+}
+
+static int setexpansion(lua_State * L)
+{
+ int f = luaL_checkinteger(L,1);
+ if (f) {
+ if (is_valid_font(f)) {
+ int fstretch = luaL_checkinteger(L,2);
+ int fshrink = luaL_checkinteger(L,3);
+ int fstep = luaL_checkinteger(L,4);
+ set_expand_params(f, fstretch, fshrink, fstep);
+ } else {
+ luaL_error(L, "that integer id is not a valid font");
+ }
+ }
+ return 0;
+}
+
+/* font.define(id,table) */
+/* font.define(table) */
static int deffont(lua_State * L)
{
- int i = get_fontid();
+ int i = 0;
+ int t = lua_gettop(L);
+ if (t == 2) {
+ i = lua_tointeger(L,1);
+ if ((i <= 0) || ! is_valid_font(i)) {
+ lua_pop(L, 1); /* pop the broken table */
+ luaL_error(L, "font creation failed, invalid id passed");
+ }
+ } else if (t == 1) {
+ i = get_fontid();
+ } else {
+ luaL_error(L, "font creation failed, no table passed");
+ return 0;
+ }
luaL_checktype(L, -1, LUA_TTABLE);
if (font_from_lua(L, i)) {
lua_pushinteger(L, i);
@@ -183,21 +229,25 @@ static int deffont(lua_State * L)
} else {
lua_pop(L, 1); /* pop the broken table */
delete_font(i);
- luaL_error(L, "font creation failed");
+ luaL_error(L, "font creation failed, error in table");
}
return 0; /* not reached */
}
/* this returns the expected (!) next fontid. */
+/* first arg true will keep the id */
+
static int nextfontid(lua_State * L)
{
+ int b = ((lua_gettop(L) == 1) && lua_toboolean(L,1));
int i = get_fontid();
lua_pushinteger(L, i);
- delete_font(i);
+ if (b == 0) {
+ delete_font(i);
+ }
return 1;
}
-
static int getfont(lua_State * L)
{
int i = luaL_checkinteger(L, -1);
@@ -207,7 +257,6 @@ static int getfont(lua_State * L)
return 1;
}
-
static int getfontid(lua_State * L)
{
if (lua_type(L, 1) == LUA_TSTRING) {
@@ -228,7 +277,6 @@ static int getfontid(lua_State * L)
return 1;
}
-
static const struct luaL_Reg fontlib[] = {
{"read_tfm", font_read_tfm},
{"read_vf", font_read_vf},
@@ -237,6 +285,8 @@ static const struct luaL_Reg fontlib[] = {
{"each", tex_each_font},
{"getfont", getfont},
{"setfont", setfont},
+ {"addcharacters", addcharacters},
+ {"setexpansion", setexpansion},
{"define", deffont},
{"nextid", nextfontid},
{"id", getfontid},