表格重构
This commit is contained in:
105
Assets/Scripts/Configs~/Editor/CodeWriter.cs
Normal file
105
Assets/Scripts/Configs~/Editor/CodeWriter.cs
Normal file
@@ -0,0 +1,105 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public interface ICodeWriterConfig
|
||||
{
|
||||
string BlockStart { get; set; }
|
||||
string BlockEnd { get; set; }
|
||||
bool BlockFromNewLine { get; set; }
|
||||
bool UsingTabs { get; set; }
|
||||
string EndOfLine { get; set; }
|
||||
}
|
||||
|
||||
public class DefCSharpCodeWriterConfig : ICodeWriterConfig
|
||||
{
|
||||
public string BlockStart { get; set; } = "{";
|
||||
public string BlockEnd { get; set; } = "}";
|
||||
public bool BlockFromNewLine { get; set; }
|
||||
public bool UsingTabs { get; set; } = true;
|
||||
public string EndOfLine { get; set; }
|
||||
}
|
||||
|
||||
public class CodeWriter
|
||||
{
|
||||
private ICodeWriterConfig _config;
|
||||
|
||||
private StringBuilder _stringBuilder = new StringBuilder();
|
||||
|
||||
private int _nowTabCount;
|
||||
|
||||
public CodeWriter()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
public CodeWriter(ICodeWriterConfig config)
|
||||
{
|
||||
Init(config);
|
||||
}
|
||||
|
||||
public void Write(string content)
|
||||
{
|
||||
_stringBuilder.Append(content);
|
||||
}
|
||||
|
||||
public void Writeln()
|
||||
{
|
||||
_stringBuilder.Append(Environment.NewLine);
|
||||
}
|
||||
|
||||
public void Writeln(string str)
|
||||
{
|
||||
_stringBuilder.Append(GetLinePrefix());
|
||||
_stringBuilder.Append(str);
|
||||
_stringBuilder.Append(Environment.NewLine);
|
||||
}
|
||||
|
||||
public void StartBlock()
|
||||
{
|
||||
Writeln(_config.BlockStart);
|
||||
_nowTabCount++;
|
||||
}
|
||||
|
||||
public void EndBlock()
|
||||
{
|
||||
_nowTabCount--;
|
||||
Writeln(_config.BlockEnd);
|
||||
}
|
||||
|
||||
public void Save(string path)
|
||||
{
|
||||
var dirPath = Path.GetDirectoryName(path);
|
||||
if (dirPath != null && !Directory.Exists(dirPath))
|
||||
{
|
||||
Directory.CreateDirectory(dirPath);
|
||||
}
|
||||
|
||||
var content = _stringBuilder.ToString();
|
||||
File.WriteAllText(path, content);
|
||||
}
|
||||
|
||||
#region 内部方法
|
||||
|
||||
private void Init(ICodeWriterConfig config = null)
|
||||
{
|
||||
_config = config ?? new DefCSharpCodeWriterConfig();
|
||||
}
|
||||
|
||||
private string GetLinePrefix()
|
||||
{
|
||||
string ret = string.Empty;
|
||||
if (!_config.UsingTabs) return ret;
|
||||
for (var i = 0; i < _nowTabCount; i++)
|
||||
{
|
||||
ret += "\t";
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user