InTesting

text to codeblocks (discord)

Oct 28th, 2021 (edited)
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.76 KB | None | 0 0
  1. function lib.discord:getCodeBlockFromText(str)
  2.     -- for getting ```... ```, returns an array which contains a dictionary of the content and file type
  3.    
  4.     -- possible ```lang? test``` case
  5.     str = tostring(str)
  6.     local result = {}
  7.  
  8.     local i = 1
  9.  
  10.     local function getStr(a, b)
  11.         a = a or i
  12.         b = b or a
  13.  
  14.         return str:sub(a, b)
  15.     end
  16.  
  17.     local function isAtTargetString(subStr)
  18.         local currentStr = getStr(i, i + #subStr - 1)
  19.         if currentStr == subStr then
  20.             i = i + #subStr
  21.             return true
  22.         end
  23.     end
  24.  
  25.     local function captureStringUntil(subStr)
  26.         local startI = i
  27.        
  28.         while getStr(i, i + #subStr - 1) ~= subStr and getStr() ~= '' do
  29.             i = i + 1
  30.         end
  31.        
  32.         local endI = i - 1
  33.  
  34.         local str = getStr(startI, endI)
  35.  
  36.         i = i + #subStr - 1
  37.  
  38.         return str
  39.     end
  40.  
  41.     while true do
  42.         local char = getStr()
  43.         if char == ''then
  44.             break
  45.         elseif isAtTargetString('```')then
  46.             -- in code block
  47.             local blockContent = captureStringUntil('```')
  48.  
  49.             local j = 1
  50.  
  51.             local startJ = 1
  52.             local endJ = 1
  53.  
  54.             local foundLang = false
  55.  
  56.             -- another loop for the blockContent
  57.             while true do
  58.                 local char = blockContent:sub(j, j)
  59.  
  60.                 -- only stop if whitespace is met
  61.                 if char:find'%A' or char == '' then
  62.                     if char == '\n'then
  63.                         -- we found our programming lang   
  64.                         endJ = j - 1
  65.  
  66.                         foundLang = true
  67.                     else
  68.                         -- we didnt
  69.                         endJ = 0
  70.                     end
  71.  
  72.                     -- end of code block
  73.                     break                      
  74.                 end
  75.  
  76.                 j = j + 1
  77.             end
  78.  
  79.             -- separate lang and code
  80.             local lang = blockContent:sub(startJ, endJ)
  81.             local code = foundLang and blockContent:sub(endJ + 2) or blockContent
  82.  
  83.             -- insert result
  84.             table.insert(result, {
  85.                 sourceCode = code;
  86.                 programmingLang= lang;
  87.             })
  88.         end
  89.  
  90.         i = i + 1
  91.     end
  92.  
  93.     return result
  94. end
  95.  
Add Comment
Please, Sign In to add comment