suwuji 发表于 2021-11-29 22:04:14

Mush端颜色处理

本帖最后由 suwuji 于 2021-11-29 10:45 PM 编辑

使用范例:
脚本调用
cprint("$HIG$你$HIY$好") --本地输出

sprint("$HIG$你$HIY$好") --模拟服务端信息

--当前行内色彩替换

recolor("aqua","yellow")   --触发器当前行色彩修改,调试好后勾选屏蔽显示

--[[
    cprint.lua
]]

function cprint_ansi_color_init()
    local ESC = '\27'
    return {
      -- 前景色
      BLK = ESC.."[30m", -- 黑色
      RED = ESC.."[31m", -- 红色
      GRN = ESC.."[32m", -- 绿色
      YEL = ESC.."[33m", -- 黄色
      BLU = ESC.."[34m", -- 蓝色
      MAG = ESC.."[35m", -- 紫色
      CYN = ESC.."[36m", -- 青色
      WHT = ESC.."[37m", -- 白色
      -- 加强前景色
      GRA = ESC.."[1;30m", -- 灰色
      HIR = ESC.."[1;31m", -- 亮红
      HIG = ESC.."[1;32m", -- 亮绿
      HIY = ESC.."[1;33m", -- 亮黄
      HIB = ESC.."[1;34m", -- 亮蓝
      HIM = ESC.."[1;35m", -- 亮紫
      HIC = ESC.."[1;36m", -- 亮青
      HIW = ESC.."[1;37m", -- 亮白
      -- 背景色
      BBLK = ESC.."[40m", --黑色
      BRED = ESC.."[41m", --红色
      BGRN = ESC.."[42m", --绿色
      BYEL = ESC.."[43m", -- 黄色
      BBLU = ESC.."[44m", --蓝色
      BMAG = ESC.."[45m", --紫色
      BCYN = ESC.."[46m", --青色
      BWHT = ESC.."[47m", -- 白色
      -- 加强背景色,一般不用会引起前景变色
      HBRED = ESC.."[41;1m", -- 亮红
      HBGRN = ESC.."[42;1m", -- 亮绿
      HBYEL = ESC.."[43;1m", -- 亮黄
      HBBLU = ESC.."[44;1m", -- 亮蓝
      HBMAG = ESC.."[45;1m", -- 亮紫
      HBCYN = ESC.."[46;1m", -- 亮青
      HBWHT = ESC.."[47;1m", -- 亮白
      --字形控
      B = ESC.."[1m", --加重
      I = ESC.."[3m", --斜体
      U = ESC.."[4m", --下划线
      REV = ESC.."[7m", --反色
      HIREV = ESC.."[1;7m", --高亮反色
      BLINK = ESC.."[5m", --闪烁,mushclient里BLINK和I显示一致
      CROSS = ESC.."[9m", --删除线
      -- 返回普通
      NOR = ESC.."[2;37;0m",
    }
end

if ansi_color==nil then ansi_color = cprint_ansi_color_init() end

function ansi(str)
    if str==nil or str=="%$" or str=="nil" then return "" end
    local s,e = string.find(str,"%$([^%$]+)%$")
    if s~=nil and e~=nil then
      local mc = string.sub(str,s+1,e-1)
      if ansi_color==nil then
            print("$"..mc..'$没有此颜色定义!可用的有:\n')
            for k,v in pairs(ansi_color) do
                print("$"..k.."$")
            end
            print('\n')
            return ansi(string.sub(str,1,s-1))..ansi(string.sub(str,e+1))
      else
            return ansi(string.sub(str,1,s-1))..ansi_color..ansi(string.sub(str,e+1))
      end
    else
      return str
    end
end

----获取当前行的styles--
function styles()
    return GetStyleInfo(GetLinesInBufferCount())
end

----获取当前行info--
function infos()
    return GetLineInfo(GetLinesInBufferCount())
end

----当前行色彩数--
function styles_count()
    return table.getn(styles())
end

function rgbname(color)
    return RGBColourToName(color)
end

--
function debugcolor()
    local sall = styles()
    for k,v in ipairs(sall) do
      ColourTell(RGBColourToName(v.textcolour),RGBColourToName(v.backcolour),v.text)
    end
    ColourNote(0,0,"")
    for k,v in ipairs(sall) do
      print(RGBColourToName(v.textcolour)..","..RGBColourToName(v.backcolour).."=>"..v.text)
    end
end

--色彩文字替换显示函数(自定义显示效果)
function recolor(textcolour,new_textcolour,backcolour,new_backcolour,text,new_text)

    if textcolour==nil and backcolour==nil and text==nil then
      debugcolor()
      return
    end
   
    local sall = styles()
    for k,v in ipairs(sall) do
   
      local forecolor = ""
      local backcolor = ""
      local tt = ""
      if textcolour and textcolour==RGBColourToName(v.textcolour) then
            forecolor = new_textcolour
      else
            forecolor = RGBColourToName(v.textcolour)
      end
      
      if backcolour and backcolour==RGBColourToName(v.backcolour) then
            backcolor = new_backcolour
      else
            backcolor = RGBColourToName(v.backcolour)
      end
      if text and text==v.text then
            --替换
            if new_text~=nil then
                tt = new_text
            else
                tt = v.text
            end
      else
            --不替换
            tt = v.text
      end
      
      ColourTell(forecolor,backcolor,tt)
    end
    ColourNote(0,0,"")
end

----本地彩色文字输出(提示用)--
function cprint(str)
    AnsiNote(ansi(str)..ansi_color.NOR)
end

----模拟服务端文字输出(可触发)--
function sprint(str)
    Simulate(ansi(str)..ansi_color.NOR)
end







xxhy 发表于 2021-11-29 22:49:54

功能不错,支持一下~
页: [1]
查看完整版本: Mush端颜色处理