Advertisement
Pirnogion

SyntaxHighlight

Mar 18th, 2015
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.14 KB | None | 0 0
  1. os.loadAPI("System/API/config")
  2.  
  3. local window = term.current()
  4.  
  5. local Colors = {
  6.         ["commands"] = tonumber(config.read("System/MineCode/syntax_colors.cfg","commands")),
  7.         ["api"] = tonumber(config.read("System/MineCode/syntax_colors.cfg","api")),
  8.         ["string"] = tonumber(config.read("System/MineCode/syntax_colors.cfg","string")),
  9.         ["comments"] = tonumber(config.read("System/MineCode/syntax_colors.cfg","comments")),
  10.         ["compares"] = tonumber(config.read("System/MineCode/syntax_colors.cfg","compares")),
  11.         ["loops"] = tonumber(config.read("System/MineCode/syntax_colors.cfg","basics")),
  12.         ["boolean"] = tonumber(config.read("System/MineCode/syntax_colors.cfg","boolean")),
  13.         ["number"] = tonumber(config.read("System/MineCode/syntax_colors.cfg","number")),
  14. }
  15.        
  16. local KeyWords = {
  17.         [1] = {["key"]="for",["color"]=Colors["loops"]},
  18.         [2] = {["key"]="while",["color"]=Colors["loops"]},
  19.         [3] = {["key"]="true",["color"]=Colors["boolean"]},
  20.         [4] = {["key"]="false",["color"]=Colors["boolean"]},
  21.         [5] = {["key"]="if",["color"]=Colors["loops"]},
  22.         [6] = {["key"]="then",["color"]=Colors["loops"]},
  23.         [7] = {["key"]="else",["color"]=Colors["loops"]},
  24.         [8] = {["key"]="elseif",["color"]=Colors["loops"]},
  25.         [9] = {["key"]="do",["color"]=Colors["loops"]},
  26.         [10] = {["key"]="break",["color"]=colors.red},
  27.         [11] = {["key"]="function",["color"]=Colors["loops"]},
  28.         [12] = {["key"]="and",["color"]=Colors["loops"]},
  29.         [13] = {["key"]="not",["color"]=Colors["loops"]},
  30.         [14] = {["key"]="or",["color"]=Colors["loops"]},
  31.         [15] = {["key"]="in",["color"]=Colors["loops"]},
  32.         [16] = {["key"]="until",["color"]=Colors["loops"]},
  33.         [17] = {["key"]="return",["color"]=Colors["loops"]},
  34.         [18] = {["key"]="repeat",["color"]=Colors["loops"]},
  35.         [19] = {["key"]="nil",["color"]=Colors["boolean"]},
  36.         [20] = {["key"]="local",["color"]=Colors["loops"]},
  37. }
  38.  
  39. local Compares = {
  40.         [1] = "=",
  41.         [2] = "==",
  42.         [3] = "~=",
  43.         [4] = ">",
  44.         [5] = "<",
  45.         [6] = ">=",
  46.         [7] = "<=",
  47.         [8] = "+",
  48.         [9] = "-",
  49.         [10] = "*",
  50.         [11] = "/",
  51.         [12] = "%^",
  52.         [13] = "%.%.",
  53.         [14] = "%#",
  54. }
  55.  
  56. local function findAndReplace(stroka,pattern,color,y,symbolStart,obrezatSleva,obrezatSprava,vichestIzStartaPoiska)
  57.         local findPos = 1
  58.         while true do
  59.                 local startPos,endPos = string.find(stroka,pattern,findPos)
  60.                 if startPos ~= nil and endPos ~= nil then
  61.                         window.setTextColor(color)
  62.                         window.setCursorPos(symbolStart+startPos-1+obrezatSleva,y)
  63.                         window.write(string.sub(stroka,startPos+obrezatSleva,endPos-obrezatSprava))
  64.                 else
  65.                         break
  66.                 end
  67.                 findPos = endPos + 1 - vichestIzStartaPoiska
  68.         end
  69. end
  70.  
  71. function syntaxString(wnd,y,symbolStart,stroka)
  72.         window = wnd
  73.  
  74.         --Красим в цвета всю хуйню из массива. Пока что надо доработать
  75.         for i=1,#KeyWords do
  76.                 findAndReplace(stroka," "..KeyWords[i]["key"].." ",KeyWords[i]["color"],y,symbolStart,0,0,0)
  77.                 findAndReplace(stroka," "..KeyWords[i]["key"].."$",KeyWords[i]["color"],y,symbolStart,0,0,0)
  78.                 findAndReplace(stroka,"^"..KeyWords[i]["key"].." ",KeyWords[i]["color"],y,symbolStart,0,0,0)
  79.         end
  80.  
  81.         --Красим функции
  82.         findAndReplace(stroka,"[%a%d%_%-]*%(",Colors["commands"],y,symbolStart,0,1,0)
  83.         findAndReplace(stroka,"%.(.*)%(",Colors["commands"],y,symbolStart,1,1,0)
  84.  
  85.         --Красим вызов АПИ
  86.         findAndReplace(stroka,"os%.loadAPI%(",Colors["api"],y,symbolStart,0,1,0)      
  87.  
  88.         --Красим END, если он заканчивает строку
  89.         findAndReplace(stroka,"end$",Colors["loops"],y,symbolStart,0,0,0)      
  90.  
  91.         --Красим красным всякие сравнивалки типа =, ==, >= и т.п.
  92.         for i=1,#Compares do
  93.                 findAndReplace(stroka," "..Compares[i].." ",Colors["compares"],y,symbolStart,0,0,0)
  94.                 findAndReplace(stroka,"(.)"..Compares[i].."(.)",Colors["compares"],y,symbolStart,1,1,0)
  95.                 findAndReplace(stroka,"(.)"..Compares[i],Colors["compares"],y,symbolStart,1,0,0)
  96.                 findAndReplace(stroka,Compares[i].."(.)",Colors["compares"],y,symbolStart,0,1,0)
  97.         end
  98.  
  99.         --КРАСИМ ЦИВФРЫ
  100.         findAndReplace(stroka,"[^%a%d](%d*)[^%a%d]",Colors["number"],y,symbolStart,1,1,1)
  101.         findAndReplace(stroka,"[^%a%d](%d*)$",Colors["number"],y,symbolStart,1,0,0)
  102.  
  103.         --Красим красным текст в кавычках
  104.         findAndReplace(stroka,"\".-[^\"\"]\"",Colors["string"],y,symbolStart,0,0,0)
  105.  
  106.         --Красим зеленым комментарии
  107.         findAndReplace(stroka,"%-%-.*",Colors["comments"],y,symbolStart,0,0,0)
  108.  
  109.         window.setTextColor(colors.black)
  110. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement