summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/lua/lstrlibextjit.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/lua/lstrlibextjit.c')
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/lstrlibextjit.c395
1 files changed, 0 insertions, 395 deletions
diff --git a/Build/source/texk/web2c/luatexdir/lua/lstrlibextjit.c b/Build/source/texk/web2c/luatexdir/lua/lstrlibextjit.c
deleted file mode 100644
index 511bd821df9..00000000000
--- a/Build/source/texk/web2c/luatexdir/lua/lstrlibextjit.c
+++ /dev/null
@@ -1,395 +0,0 @@
-/* lstrlibext.c for luajitex
-
- Copyright 2013 Luigi Scarso
-
- Code from lstrlibext.c for LuaTeX
- Original version copyright 2012 Taco Hoekwater <taco@luatex.org>
-
- This file is part of LuajitTeX.
-
- LuajitTeX is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 2 of the License, or (at your
- option) any later version.
-
- LuajitTeX is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
- License for more details.
-
- You should have received a copy of the GNU General Public License along
- with LuaTeX; if not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "ptexlib.h"
-#include <stdio.h>
-
-#define LUA_CORE
-
-#include "lua.h"
-#include "lauxlib.h"
-#include "lualib.h"
-
-
-
-
-/*#include "lua51/lj_obj.h"*/
-/*#include "lua51/lj_gc.h"*/
-/*#include "lua51/lj_err.h"*/
-/*#include "lua51/lj_str.h"*/
-/*#include "lua51/lj_tab.h"*/
-/*#include "lua51/lj_meta.h"*/
-/*#include "lua51/lj_state.h"*/
-/*#include "lua51/lj_ff.h" */
-/*#include "lua51/lj_bcdump.h"*/
-/*#include "lua51/lj_char.h"*/
-/*#include "lua51/lj_lib.h"*/
-
-
-
-static int bytepairs_aux (lua_State *L) {
- size_t ls;
- unsigned char i;
- const char *s = lua_tolstring(L, lua_upvalueindex(1), &ls);
- int ind = lua_tointeger(L, lua_upvalueindex(2));
- if (ind<(int)ls) {
- if (ind+1<(int)ls) {
- lua_pushinteger(L, (ind+2)); /* iterator */
- } else {
- lua_pushinteger(L, (ind+1)); /* iterator */
- }
- lua_replace(L, lua_upvalueindex(2));
- i = (unsigned char)*(s+ind);
- lua_pushinteger(L, i); /* byte one */
- if (ind+1<(int)ls) {
- i = (unsigned char)*(s+ind+1);
- lua_pushinteger(L, i); /* byte two */
- } else {
- lua_pushnil(L); /* odd string length */
- }
- return 2;
- }
- return 0; /* string ended */
-}
-
-
-static int str_bytepairs (lua_State *L) {
- luaL_checkstring(L, 1);
- lua_settop(L, 1);
- lua_pushinteger(L, 0);
- lua_pushcclosure(L, bytepairs_aux, 2);
- return 1;
-}
-
-
-static int bytes_aux (lua_State *L) {
- size_t ls;
- unsigned char i;
- const char *s = lua_tolstring(L, lua_upvalueindex(1), &ls);
- int ind = lua_tointeger(L, lua_upvalueindex(2));
- if (ind<(int)ls) {
- lua_pushinteger(L, (ind+1)); /* iterator */
- lua_replace(L, lua_upvalueindex(2));
- i = (unsigned char)*(s+ind);
- lua_pushinteger(L, i); /* byte */
- return 1;
- }
- return 0; /* string ended */
-}
-
-
-static int str_bytes (lua_State *L) {
- luaL_checkstring(L, 1);
- lua_settop(L, 1);
- lua_pushinteger(L, 0);
- lua_pushcclosure(L, bytes_aux, 2);
- return 1;
-}
-
-
-static int utf_failed(lua_State *L, int new_ind) {
- static char fffd [3] = {0xEF,0xBF,0xBD};
- lua_pushinteger(L, new_ind); /* iterator */
- lua_replace(L, lua_upvalueindex(2));
- lua_pushlstring(L, fffd, 3);
- return 1;
-}
-
-
-static int utfcharacters_aux (lua_State *L) {
- static const unsigned char mask[4] = {0x80,0xE0,0xF0,0xF8};
- static const unsigned char mequ[4] = {0x00,0xC0,0xE0,0xF0};
- size_t ls;
- unsigned char c;
- int j;
- const char *s = lua_tolstring(L, lua_upvalueindex(1), &ls);
- int ind = lua_tointeger(L, lua_upvalueindex(2));
- if (ind>=(int)ls) return 0; /* end of string */
- c = (unsigned) s[ind];
- for (j=0;j<4;j++) {
- if ((c&mask[j])==mequ[j]) {
- int k;
- if (ind+1+j>(int)ls) return utf_failed(L,ls); /* will not fit */
- for (k=1; k<=j; k++) {
- c = (unsigned) s[ind+k];
- if ((c&0xC0)!=0x80) return utf_failed(L,ind+k); /* bad follow */
- }
- lua_pushinteger(L, ind+1+j); /* iterator */
- lua_replace(L, lua_upvalueindex(2));
- lua_pushlstring(L, s+ind, 1+j);
- return 1;
- }
- }
- return utf_failed(L,ind+1); /* we found a follow byte! */
-}
-
-
-static int str_utfcharacters (lua_State *L) {
- luaL_checkstring(L, 1);
- lua_settop(L, 1);
- lua_pushinteger(L, 0);
- lua_pushcclosure(L, utfcharacters_aux, 2);
- return 1;
-}
-
-
-
-static int utfvalues_aux (lua_State *L) {
- size_t ls;
- unsigned char i = 0;
- unsigned char j = 0;
- unsigned char k = 0;
- unsigned char l = 0;
- unsigned int v = 0xFFFD;
- int numbytes = 1;
- const char *s = lua_tolstring(L, lua_upvalueindex(1), &ls);
- int ind = lua_tointeger(L, lua_upvalueindex(2));
-
- if (ind<(int)ls) {
- i = *(s+ind);
- if (i<0x80) {
- v = i;
- } else if (i>=0xF0) {
- if ((ind+3)<(int)ls && ((unsigned)*(s+ind+1))>=0x80
- && ((unsigned)*(s+ind+2))>=0x80 && ((unsigned)*(s+ind+3))>=0x80) {
- numbytes = 4;
- j = ((unsigned)*(s+ind+1))-128;
- k = ((unsigned)*(s+ind+2))-128;
- l = ((unsigned)*(s+ind+3))-128;
- v = (((((i-0xF0)*64) + j)*64) + k)*64 + l;
- }
- } else if (i>=0xE0) {
- if ((ind+2)<(int)ls && ((unsigned)*(s+ind+1))>=0x80 && ((unsigned)*(s+ind+2))>=0x80) {
- numbytes = 3;
- j = ((unsigned)*(s+ind+1))-128;
- k = ((unsigned)*(s+ind+2))-128;
- v = (((i-0xE0)*64) + j)*64 + k;
- }
-
- } else if (i>=0xC0) {
- if ((ind+1)<(int)ls && ((unsigned)*(s+ind+1))>=0x80) {
- numbytes = 2;
- j = ((unsigned)*(s+ind+1))-128;
- v = ((i-0xC0)*64) + j;
- }
- }
- lua_pushinteger(L, (ind+numbytes)); /* iterator */
- lua_replace(L, lua_upvalueindex(2));
- lua_pushinteger(L, v);
- return 1;
- }
- return 0; /* string ended */
-}
-
-
-static int str_utfvalues (lua_State *L) {
- luaL_checkstring(L, 1);
- lua_settop(L, 1);
- lua_pushinteger(L, 0);
- lua_pushcclosure(L, utfvalues_aux, 2);
- return 1;
-}
-
-
-static int characterpairs_aux (lua_State *L) {
- size_t ls;
- char b[2];
- const char *s = lua_tolstring(L, lua_upvalueindex(1), &ls);
- int ind = lua_tointeger(L, lua_upvalueindex(2));
- if (ind<(int)ls) {
- if (ind+1<(int)ls) {
- lua_pushinteger(L, (ind+2)); /* iterator */
- } else {
- lua_pushinteger(L, (ind+1)); /* iterator */
- }
- lua_replace(L, lua_upvalueindex(2));
- b[0] = *(s+ind); b[1] = 0;
- lua_pushlstring(L, b, 1);
- if (ind+1<(int)ls) {
- b[0] = *(s+ind+1);
- lua_pushlstring(L, b, 1);
- } else {
- lua_pushlstring(L, b+1, 0);
- }
- return 2;
- }
- return 0; /* string ended */
-}
-
-
-static int str_characterpairs (lua_State *L) {
- luaL_checkstring(L, 1);
- lua_settop(L, 1);
- lua_pushinteger(L, 0);
- lua_pushcclosure(L, characterpairs_aux, 2);
- return 1;
-}
-
-
-static int characters_aux (lua_State *L) {
- size_t ls;
- char b[2];
- const char *s = lua_tolstring(L, lua_upvalueindex(1), &ls);
- int ind = lua_tointeger(L, lua_upvalueindex(2));
- if (ind<(int)ls) {
- lua_pushinteger(L, (ind+1)); /* iterator */
- lua_replace(L, lua_upvalueindex(2));
- b[0] = *(s+ind); b[1] = 0;
- lua_pushlstring(L, b, 1);
- return 1;
- }
- return 0; /* string ended */
-}
-
-
-static int str_characters (lua_State *L) {
- luaL_checkstring(L, 1);
- lua_settop(L, 1);
- lua_pushinteger(L, 0);
- lua_pushcclosure(L, characters_aux, 2);
- return 1;
-}
-
-static int str_split (lua_State *L) {
- size_t l;
- size_t i;
- int n;
- char *q, *p, *orig;
- int mult = 0;
- const char *s = luaL_checklstring(L, 1, &l);
- const char *joiner = luaL_optstring(L, 2, " +");
- lua_newtable(L);
- if (l == 0) {
- lua_pushvalue(L,1);
- lua_rawseti(L,-2,1);
- return 1;
- }
- orig = p = malloc(l+1);
- if (p==NULL) {
- fprintf(stderr, "fatal: memory exhausted (malloc of %u bytes).\n",(int)(l+1));
- exit(EXIT_FAILURE);
- }
- strcpy(p,s);
- n = 1;
- q = p;
-
- if (*joiner == 0) {
- for (i=0;i<l;i++) {
- lua_pushlstring(L,q,1); q++;
- lua_rawseti(L,-2,n); n++;
- }
- free(orig);
- return 1;
- }
- if (*(joiner+1) == '+') {
- mult = 1;
- while(*p==*joiner) {
- p++;
- l--;
- }
- q = p;
- }
- for (i=0;i<l;i++) {
- if (*(p+i)==*joiner) {
- *(p+i) = 0;
- lua_pushlstring(L,q,((p+i)-q));
- lua_rawseti(L,-2,n); n++;
- if (mult) {
- while(*(p+i+1)==*joiner) {
- i++;
- }
- }
- q = p+i+1;
- }
- }
- if (mult && q==(p+l)) {
- free(orig);
- return 1;
- }
- if(q<=(p+l)) {
- lua_pushlstring(L,q,strlen(q));
- lua_rawseti(L,-2,n);
- }
- free(orig);
- return 1;
-}
-
-
-static const luaL_Reg strlibext[] = {
- {"utfvalues", str_utfvalues},
- {"utfcharacters", str_utfcharacters},
- {"characters", str_characters},
- {"characterpairs", str_characterpairs},
- {"bytes", str_bytes},
- {"bytepairs", str_bytepairs},
- {"explode", str_split},
- /* {"dump", str_dump} already in luajit */
- {NULL, NULL}
-};
-
-
-
-
-/* ------------------------------------------------------------------------ */
-
-/* lj_libdef.h is generated by buildvm, it's not available on source */
-/* #include "lua51/lj_libdef.h" */
-
-/* LUALIB_API int luaopen_string(lua_State *L) */
-/* { */
-/* GCtab *mt; */
-/* global_State *g; */
-/* LJ_LIB_REG(L, LUA_STRLIBNAME, string); */
-/* luaL_register(L, LUA_STRLIBNAME, strlib); */
-/* //LJ_LIB_REG(L, LUA_STRLIBNAME, strlib); */
-/* #if defined(LUA_COMPAT_GFIND) && !LJ_52 */
-/* lua_getfield(L, -1, "gmatch"); */
-/* lua_setfield(L, -2, "gfind"); */
-/* #endif */
-/* mt = lj_tab_new(L, 0, 1); */
-/* /\* NOBARRIER: basemt is a GC root. *\/ */
-/* g = G(L); */
-/* setgcref(basemt_it(g, LJ_TSTR), obj2gco(mt)); */
-/* settabV(L, lj_tab_setstr(L, mt, mmname_str(g, MM_index)), tabV(L->top-1)); */
-/* mt->nomm = (uint8_t)(~(1u<<MM_index)); */
-/* return 1; */
-/* } */
-
-/* void open_strlibext(lua_State *L) */
-/* { */
-/* int v; */
-/* v = luaopen_string(L); */
-/* } */
-
-
-void open_strlibext(lua_State * L)
-{
- const luaL_Reg *lib;
- lua_getglobal(L, "string");
- for (lib=strlibext;lib->name;lib++) {
- lua_pushcfunction(L, lib->func);
- lua_setfield(L, -2, lib->name);
- }
- lua_pop(L,1);
-}
-