C# - lua格式化

C# - lua格式化

上一篇我们将C#数据结构转换成Lua table,我们发现它只是一行字符串,不方便阅读,我们这篇将其格式化

#if UNITY_EDITORusing UnityEngine;using System.Collections;using System.Collections.Generic;using UnityEditor;using System.IO;using UnityEditor.ProjectWindowCallback;using System.Text.RegularExpressions;using System;using System.Text;using TileEditor;public class JsonToLua {    public static void OpenOrCreateLua(Dictionary<string, object>dict, string path)    {        FileStream file = new FileStream (path, FileMode.OpenOrCreate, FileAccess.Write);        string gameDataStr = "local config = ";        string luaStr = HELua.Encode (dict);        luaStr = SwitchToLuaFormat (luaStr);        gameDataStr += luaStr;        gameDataStr += "return config";        // clear text        file.Seek(0, SeekOrigin.Begin);        file.SetLength(0);        char[] data = gameDataStr.ToCharArray();        Encoder myEncoder = Encoding.UTF8.GetEncoder ();        byte[] myByte = new byte[data.Length];        myEncoder.GetBytes (data, 0, data.Length, myByte, 0, true);        file.Write (myByte, 0, myByte.Length);        file.Close ();    }    /// lua格式化    private static string SwitchToLuaFormat(string gameData)    {        int tabCount = 0;        string luaStr = "";        for (int i = 0; i < gameData.Length; i++) {            if (gameData [i] == '{') {                if (IsNeedLineFeedByLeftBracket (gameData, i)) {                    tabCount++;                    luaStr += gameData [i] + "" + GetTabStringByTabCount (tabCount);                    if (i < gameData.Length-1 && gameData[i + 1] == ' ') {                        i++;                    }                } else {                    luaStr += gameData [i];                }            } else if (gameData[i] == '}') {                if (IsNeedLineFeedByRightBracket (gameData, i - 1)) {                    tabCount--;                    luaStr += "" + GetTabStringByTabCount (tabCount) + gameData [i];                    if (i < gameData.Length-1 && gameData[i + 1] == ' ') {                        i++;                    }                } else {                    luaStr += gameData [i];                }                if (i < gameData.Length - 1 && gameData[i + 1] == ',') {                    luaStr += gameData [i + 1] + "" + GetTabStringByTabCount (tabCount);                    i++;                    if (i < gameData.Length - 1 && gameData [i + 1] == ' ') {                        i++;                    }                }            } else if(gameData[i] == ','){                if (IsNeedLineFeedByComma (gameData, i)) {                    luaStr += gameData [i] + "" + GetTabStringByTabCount (tabCount);                    if (i < gameData.Length - 1 && gameData [i + 1] == ' ') {                        i++;                    }                } else {                    luaStr += gameData [i];                }            } else {                luaStr += gameData [i];            }        }        return luaStr;    }    /// 遇到左括号是否要换行    private static bool IsNeedLineFeedByLeftBracket(string gameData, int index)    {        if (index == gameData.Length) {            return false;        }        for (int i = index + 1; i < gameData.Length; i++) {            if (gameData[i] == '}') {                return false;            } else if ((gameData[i] == '=') || (gameData[i] == '{')) {                return true;            }        }        return false;    }    /// 遇到右括号是否要换行    private static bool IsNeedLineFeedByRightBracket(string gameData, int index)    {        if (index == 0) {            return false;        }        for (int i = index; i >= 0; i--) {            if (gameData [i] == '=' || gameData[i] == '}') {                return true;            } else if (gameData [i] == '{') {                return false;            }        }        return false;    }    /// 遇到逗号是否需要换行    private static bool IsNeedLineFeedByComma(string gameData, int index)    {        if (index == 0) {            return false;        }        for (int i = index - 1; i >= 0; i--) {            if (gameData[i] == '=') {                return true;            } else if (gameData[i] == '{') {                return false;            }        }        return false;    }    private static string GetTabStringByTabCount(int tabCount)    {        string tabStr = "";        if (tabCount >= 0) {            for (int i = 0; i < tabCount; i++) {                tabStr += "";            }        } else {            Debug.LogError ("tab count are lower then zero!");        }        return tabStr;    }}    #endif

现在就是正常的lua缩进后的文件,方便我们阅读。

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部