美文网首页C/C++
LUA5.3.3如何支持中文函数?

LUA5.3.3如何支持中文函数?

作者: Noefl | 来源:发表于2016-12-18 02:56 被阅读0次

    方法一.

    /*中文支持
    llex.c
    static int llex (LexState *ls, SemInfo *seminfo)
    修改如下:
    */
          default: {
            if (lislalpha(ls->current) || ls->current == '_' || ls->current > 0x80) {  /* identifier or reserved word? */
              TString *ts;
              do {
                  if (ls->current > 0x80)
                  {
                      save_and_next(ls);
                      save_and_next(ls);
                  }
                  else
                  {
                      save_and_next(ls);
                  }
              } while (lislalnum(ls->current) || ls->current == '_' || ls->current > 0x80);
              ts = luaX_newstring(ls, luaZ_buffer(ls->buff),
                                      luaZ_bufflen(ls->buff));
              seminfo->ts = ts;
              if (isreserved(ts))  /* reserved word? */
                return ts->extra - 1 + FIRST_RESERVED;
              else {
                return TK_NAME;
              }
            }
            else {  /* single-char tokens (+ - / ...) */
              int c = ls->current;
              next(ls);
              return c;
            }
          }
    /*-----------------------------------------------------------------------------*/
    /*源代码*/    
        default: {
            if (lislalpha(ls->current)) {  /* identifier or reserved word? */
              TString *ts;
              do {
                save_and_next(ls);
              } while (lislalnum(ls->current));
              ts = luaX_newstring(ls, luaZ_buffer(ls->buff),
                                      luaZ_bufflen(ls->buff));
              seminfo->ts = ts;
              if (isreserved(ts))  /* reserved word? */
                return ts->extra - 1 + FIRST_RESERVED;
              else {
                return TK_NAME;
              }
            }
            else {  /* single-char tokens (+ - / ...) */
              int c = ls->current;
              next(ls);
              return c;
            }
          }
    

    方法二.

    /* lctype.c *
    /把8至B行和E行全部修改为0x01或者0x05可以让 Lua 认为汉字是可打印的)
    
    /*
    ** $Id: lctype.c,v 1.12 2014/11/02 19:19:04 roberto Exp $
    ** 'ctype' functions for Lua
    ** See Copyright Notice in lua.h
    */
    
    #define lctype_c
    #define LUA_CORE
    
    #include "lprefix.h"
    
    
    #include "lctype.h"
    
    #if !LUA_USE_CTYPE  /* { */
    
    #include <limits.h>
    
    LUAI_DDEF const lu_byte luai_ctype_[UCHAR_MAX + 2] = {
      0x00,  /* EOZ */
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,    /* 0. */
      0x00,  0x08,  0x08,  0x08,  0x08,  0x08,  0x00,  0x00,
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,    /* 1. */
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,
      0x0c,  0x04,  0x04,  0x04,  0x04,  0x04,  0x04,  0x04,    /* 2. */
      0x04,  0x04,  0x04,  0x04,  0x04,  0x04,  0x04,  0x04,
      0x16,  0x16,  0x16,  0x16,  0x16,  0x16,  0x16,  0x16,    /* 3. */
      0x16,  0x16,  0x04,  0x04,  0x04,  0x04,  0x04,  0x04,
      0x04,  0x15,  0x15,  0x15,  0x15,  0x15,  0x15,  0x05,    /* 4. */
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,    /* 5. */
      0x05,  0x05,  0x05,  0x04,  0x04,  0x04,  0x04,  0x05,
      0x04,  0x15,  0x15,  0x15,  0x15,  0x15,  0x15,  0x05,    /* 6. */
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,    /* 7. */
      0x05,  0x05,  0x05,  0x04,  0x04,  0x04,  0x04,  0x00,
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,    /* 8. */
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,    /* 9. */
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,    /* a. */
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,    /* b. */
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,    /* c. */
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,    /* d. */
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,    /* e. */
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,    /* f. */
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,
    };
    
    #endif          /* } */
    
    /*源代码*/
    /*
    ** $Id: lctype.c,v 1.12 2014/11/02 19:19:04 roberto Exp $
    ** 'ctype' functions for Lua
    ** See Copyright Notice in lua.h
    */
    
    #define lctype_c
    #define LUA_CORE
    
    #include "lprefix.h"
    
    
    #include "lctype.h"
    
    #if !LUA_USE_CTYPE  /* { */
    
    #include <limits.h>
    
    LUAI_DDEF const lu_byte luai_ctype_[UCHAR_MAX + 2] = {
      0x00,  /* EOZ */
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,    /* 0. */
      0x00,  0x08,  0x08,  0x08,  0x08,  0x08,  0x00,  0x00,
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,    /* 1. */
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,
      0x0c,  0x04,  0x04,  0x04,  0x04,  0x04,  0x04,  0x04,    /* 2. */
      0x04,  0x04,  0x04,  0x04,  0x04,  0x04,  0x04,  0x04,
      0x16,  0x16,  0x16,  0x16,  0x16,  0x16,  0x16,  0x16,    /* 3. */
      0x16,  0x16,  0x04,  0x04,  0x04,  0x04,  0x04,  0x04,
      0x04,  0x15,  0x15,  0x15,  0x15,  0x15,  0x15,  0x05,    /* 4. */
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,    /* 5. */
      0x05,  0x05,  0x05,  0x04,  0x04,  0x04,  0x04,  0x05,
      0x04,  0x15,  0x15,  0x15,  0x15,  0x15,  0x15,  0x05,    /* 6. */
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,
      0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,  0x05,    /* 7. */
      0x05,  0x05,  0x05,  0x04,  0x04,  0x04,  0x04,  0x00,
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,    /* 8. */
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,    /* 9. */
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,    /* a. */
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,    /* b. */
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,    /* c. */
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,    /* d. */
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,    /* e. */
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,    /* f. */
      0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,
    };
    
    #endif          /* } */
    
    

    相关文章

      网友评论

        本文标题:LUA5.3.3如何支持中文函数?

        本文链接:https://www.haomeiwen.com/subject/jppamttx.html