相信各种大神喜欢利用中文来处理策划,为了方便各种策划童鞋来进行游戏策划,鉴于大家都是中国人,英语的程度和对游戏解释的程度都不如自己的母语,所以本人从各处学习找到了在Lua最新版本中文的支持。
- static int llex (LexState *ls, SemInfo *seminfo) {
- luaZ_resetbuffer(ls->buff);
- for (;;) {
- switch (ls->current) {
- case "
": case "
": { /* line breaks */
- inclinenumber(ls);
- break;
- }
- case " ": case "f": case " ": case "v": { /* spaces */
- next(ls);
- break;
- }
- case "-": { /* "-" or "--" (comment) */
- next(ls);
- if (ls->current != "-") return "-";
- /* else is a comment */
- next(ls);
- if (ls->current == "[") { /* long comment? */
- int sep = skip_sep(ls);
- luaZ_resetbuffer(ls->buff); /* `skip_sep" may dirty the buffer */
- if (sep >= 0) {
- read_long_string(ls, NULL, sep); /* skip long comment */
- luaZ_resetbuffer(ls->buff); /* previous call may dirty the buff. */
- break;
- }
- }
- /* else short comment */
- while (!currIsNewline(ls) && ls->current != EOZ)
- next(ls); /* skip until end of line (or end of file) */
- break;
- }
- case "[": { /* long string or simply "[" */
- int sep = skip_sep(ls);
- if (sep >= 0) {
- read_long_string(ls, seminfo, sep);
- return TK_STRING;
- }
- else if (sep == -1) return "[";
- else lexerror(ls, "invalid long string delimiter", TK_STRING);
- }
- case "=": {
- next(ls);
- if (ls->current != "=") return "=";
- else { next(ls); return TK_EQ; }
- }
- case "<": {
- next(ls);
- if (ls->current != "=") return "<";
- else { next(ls); return TK_LE; }
- }
- case ">": {
- next(ls);
- if (ls->current != "=") return ">";
- else { next(ls); return TK_GE; }
- }
- case "~": {
- next(ls);
- if (ls->current != "=") return "~";
- else { next(ls); return TK_NE; }
- }
- case ":": {
- next(ls);
- if (ls->current != ":") return ":";
- else { next(ls); return TK_DBCOLON; }
- }
- case """: case """: { /* short literal strings */
- read_string(ls, ls->current, seminfo);
- return TK_STRING;
- }
- case ".": { /* ".", "..", "...", or number */
- save_and_next(ls);
- if (check_next(ls, ".")) {
- if (check_next(ls, "."))
- return TK_DOTS; /* "..." */
- else return TK_CONCAT; /* ".." */
- }
- else if (!lisdigit(ls->current)) return ".";
- /* else go through */
- }
- case "0": case "1": case "2": case "3": case "4":
- case "5": case "6": case "7": case "8": case "9": {
- read_numeral(ls, seminfo);
- return TK_NUMBER;
- }
- case EOZ: {
- return TK_EOS;
- }
- default: {
- if (lislalpha(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 > 0x80);
-
-
- ts = luaX_newstring(ls, luaZ_buffer(ls->buff),
- luaZ_bufflen(ls->buff));
- seminfo->ts = ts;
- if (isreserved(ts)) /* reserved word? */
- return ts->tsv.extra - 1 + FIRST_RESERVED;
- else {
- return TK_NAME;
- }
- }
- else { /* single-char tokens (+ - / ...) */
- int c = ls->current;
- next(ls);
- return c;
- }
- }
- }
- }
- }
希望大家喜欢! 附上一张截图