Ai
369 Star 3.2K Fork 876

dotNET China/DBCHM

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
JS.cs 4.06 KB
一键复制 编辑 原始数据 按行查看 历史
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DocTools
{
public class JS
{
private static Jint.Engine jt = null;
static JS()
{
//jt = new Jint.Engine(cfg =>
//{
// //cfg.LimitRecursion();
// cfg.Strict();
//});
jt = new Jint.Engine();
jt.SetValue("log", new Action<object>(Console.WriteLine));
var text = string.Empty;
var names = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
foreach (var name in names)
{
if (Path.GetExtension(name) == ".js")
{
text = System.Reflection.Assembly.GetExecutingAssembly().GetResourceContent(name);
try
{
jt.Execute(text);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
}
/// summary>
/// https://zeroturnaround.github.io/sql-formatter/
/// 格式化SQL语句
/// </summary>
/// <param name="sql">SQL语句</param>
/// <param name="dbtype">数据库类型</param>
/// <returns>格式化后的SQL语句</returns>
public static string RunFmtSql(string sql, string dbtype)
{
var supportLang = new List<string>()
{
"sql",
"redshift",
"db2",
"mariadb",
"mysql",
"n1ql",
"plsql",
"postgresql",
"spark",
"tsql"
};
var lang = dbtype.ToLower();
if (!supportLang.Contains(lang))
{
if (lang.StartsWith("oracle"))
{
lang = "plsql";
}
else if (lang == "sqlserver")
{
lang = "tsql";
}
else
{
lang = "sql";
}
}
sql = sql.Replace("`", "");
var code = $@"var fmtSql = sqlFormatter.format(`{ sql }`, {{language: ""{ lang }"",uppercase: true }});";
var res = sql;
try
{
jt.Execute(code);
res = jt.GetValue("fmtSql").ToString();
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
return res;
}
/// <summary>
/// https://highlightjs.org/static/demo/
/// 9.9版本
/// 返回带有css样式的高亮SQL代码
/// </summary>
/// <param name="sql">格式化后的SQL代码</param>
/// <param name="dbtype">数据库类型</param>
/// <returns></returns>
public static string RunHighlightHtml(string sql, string dbtype)
{
dbtype = dbtype.ToLower();
var lang = "sql";
//if (dbtype.StartsWith("oracle"))
//{
// lang = "ruleslanguage";
//}
//else if (dbtype == "postgresql")
//{
// lang = "pgsql";
//}
sql = sql.Replace("`", "");
var code = $@"var hlhtml = hljs.highlight(""{ lang }"",`{ sql }`,true).value;";
var res = sql;
try
{
jt.Execute(code);
res = jt.GetValue("hlhtml").ToString();
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
return res;
}
public static string RunStyleSql(string sql, string dbtype)
{
var fmtSql = RunFmtSql(sql, dbtype);
var reSql = RunHighlightHtml(fmtSql, dbtype);
return reSql;
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C#
1
https://gitee.com/dotnetchina/DBCHM.git
git@gitee.com:dotnetchina/DBCHM.git
dotnetchina
DBCHM
DBCHM
master

搜索帮助