Krobys

[Library] Chars Width Checker Lib

Mar 24th, 2023 (edited)
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.78 KB | Gaming | 0 0
  1. --BY KROBYS
  2. local methods = {}
  3. local chars = { { charWidth = 0, char = '§'},
  4.   { charWidth = 5, char = 'A' }, { charWidth = 5, char = 'B' },
  5.   { charWidth = 5, char = 'C' }, { charWidth = 5, char = 'D' },
  6.   { charWidth = 5, char = 'E' }, { charWidth = 5, char = 'F' },
  7.   { charWidth = 5, char = 'G' }, { charWidth = 5, char = 'H' },
  8.   { charWidth = 3, char = 'I' }, { charWidth = 5, char = 'J' },
  9.   { charWidth = 5, char = 'K' }, { charWidth = 5, char = 'L' },
  10.   { charWidth = 5, char = 'M' },
  11.   { charWidth = 5, char = 'N' }, { charWidth = 5, char = 'O' },
  12.   { charWidth = 5, char = 'P' }, { charWidth = 5, char = 'Q' },
  13.   { charWidth = 5, char = 'R' }, { charWidth = 5, char = 'S' },
  14.   { charWidth = 5, char = 'T' }, { charWidth = 5, char = 'U' },
  15.   { charWidth = 5, char = 'V' }, { charWidth = 5, char = 'W' },
  16.   { charWidth = 5, char = 'X' }, { charWidth = 5, char = 'Y' },
  17.   { charWidth = 5, char = 'Z' }, { charWidth = 5, char = 'a' },
  18.   { charWidth = 5, char = 'b' }, { charWidth = 5, char = 'c' },
  19.   { charWidth = 5, char = 'd' }, { charWidth = 5, char = 'e' },
  20.   { charWidth = 4, char = 'f' }, { charWidth = 5, char = 'g' },
  21.   { charWidth = 5, char = 'h' }, { charWidth = 1, char = 'i' },
  22.   { charWidth = 5, char = 'j' }, { charWidth = 4, char = 'k' },
  23.   { charWidth = 2, char = 'l' }, { charWidth = 5, char = 'm' },
  24.   { charWidth = 5, char = 'n' }, { charWidth = 5, char = 'o' },
  25.   { charWidth = 5, char = 'p' }, { charWidth = 5, char = 'q' },
  26.   { charWidth = 5, char = 'r' }, { charWidth = 5, char = 's' },
  27.   { charWidth = 3, char = 't' }, { charWidth = 5, char = 'u' },
  28.   { charWidth = 5, char = 'v' }, { charWidth = 5, char = 'w' },
  29.   { charWidth = 5, char = 'x' }, { charWidth = 5, char = 'y' },
  30.   { charWidth = 5, char = 'z' }, { charWidth = 5, char = 'А' },
  31.   { charWidth = 5, char = 'Б' }, { charWidth = 5, char = 'В' },
  32.   { charWidth = 5, char = 'Г' }, { charWidth = 5, char = 'Д' },
  33.   { charWidth = 5, char = 'Е' }, { charWidth = 4, char = 'Ё' },
  34.   { charWidth = 5, char = 'Ж' }, { charWidth = 5, char = 'З' },
  35.   { charWidth = 5, char = 'И' }, { charWidth = 5, char = 'Й' },
  36.   { charWidth = 5, char = 'К' }, { charWidth = 5, char = 'Л' },
  37.   { charWidth = 5, char = 'М' }, { charWidth = 5, char = 'Н' },
  38.   { charWidth = 5, char = 'О' }, { charWidth = 5, char = 'П' },
  39.   { charWidth = 5, char = 'Р' }, { charWidth = 5, char = 'С' },
  40.   { charWidth = 5, char = 'Т' }, { charWidth = 5, char = 'У' },
  41.   { charWidth = 5, char = 'Ф' }, { charWidth = 5, char = 'Х' },
  42.   { charWidth = 6, char = 'Ц' }, { charWidth = 5, char = 'Ч' },
  43.   { charWidth = 5, char = 'Ш' }, { charWidth = 6, char = 'Щ' },
  44.   { charWidth = 5, char = 'Ъ' }, { charWidth = 6, char = 'Ы' },
  45.   { charWidth = 4, char = 'Ь' }, { charWidth = 5, char = 'Э' },
  46.   { charWidth = 6, char = 'Ю' }, { charWidth = 5, char = 'Я' },
  47.   { charWidth = 5, char = 'а' }, { charWidth = 6, char = 'Ю' },
  48.   { charWidth = 4, char = 'Ь' }, { charWidth = 5, char = 'б' },
  49.   { charWidth = 5, char = 'в' }, { charWidth = 5, char = 'г' },
  50.   { charWidth = 5, char = 'ё' }, { charWidth = 5, char = 'ж' },
  51.   { charWidth = 5, char = 'з' }, { charWidth = 5, char = 'и' },
  52.   { charWidth = 5, char = 'й' }, { charWidth = 5, char = 'к' },
  53.   { charWidth = 5, char = 'л' }, { charWidth = 5, char = 'м' },
  54.   { charWidth = 5, char = 'н' }, { charWidth = 5, char = 'о' },
  55.   { charWidth = 5, char = 'п' }, { charWidth = 5, char = 'р' },
  56.   { charWidth = 5, char = 'с' }, { charWidth = 5, char = 'т' },
  57.   { charWidth = 5, char = 'у' }, { charWidth = 5, char = 'ф' },
  58.   { charWidth = 5, char = 'х' }, { charWidth = 5, char = 'ц' },
  59.   { charWidth = 5, char = 'ч' }, { charWidth = 5, char = 'ш' },
  60.   { charWidth = 6, char = 'щ' }, { charWidth = 6, char = 'ъ' },
  61.   { charWidth = 6, char = 'ы' }, { charWidth = 5, char = 'ь' },
  62.   { charWidth = 5, char = 'э' }, { charWidth = 6, char = 'ю' },
  63.   { charWidth = 5, char = 'я' }, { charWidth = 1, char = '!' },
  64.   { charWidth = 6, char = "@" }, { charWidth = 5, char = "#" },
  65.   { charWidth = 5, char = "$" }, { charWidth = 5, char = "%" },
  66.   { charWidth = 5, char = "^" }, { charWidth = 5, char = "&" },
  67.   { charWidth = 4, char = "*" }, { charWidth = 4, char = "(" },
  68.   { charWidth = 4, char = ")" }, { charWidth = 5, char = "-" },
  69.   { charWidth = 5, char = "_" }, { charWidth = 5, char = "=" },
  70.   { charWidth = 5, char = "+" }, { charWidth = 3, char = "[" },
  71.   { charWidth = 3, char = "]" }, { charWidth = 4, char = "{" },
  72.   { charWidth = 4, char = "}" }, { charWidth = 1, char = ";" },
  73.   { charWidth = 1, char = ":" }, { charWidth = 3, char = " " },
  74.   { charWidth = 4, char = "\\"}, { charWidth = 1, char = "," },
  75.   { charWidth = 1, char = "." }, { charWidth = 5, char = "/" },
  76.   { charWidth = 5, char = "<" }, { charWidth = 5, char = ">" },
  77.   { charWidth = 5, char = "?" }, { charWidth = 1, char = "/" }
  78. }
  79.  
  80. local defaultCharWidth = 5
  81.  
  82. local unicode = require("unicode")
  83.  
  84. function methods.checkWidth(string)
  85.   local stringPixelsWidth = 0.0  -- use a floating-point number
  86.   local ignoreNext = false
  87.   for i = 1, unicode.len(string) do
  88.     local wasCharFound = false
  89.     local char = unicode.sub(string, i, i)
  90.     if ignoreNext then
  91.       ignoreNext = false
  92.     elseif char == '§' then
  93.       ignoreNext = true
  94.       --ignore this and next after this
  95.     else
  96.       for key, value in ipairs(chars) do
  97.         if value.char == char then
  98.           stringPixelsWidth = stringPixelsWidth + value.charWidth + 0.5  -- add half pixel distance
  99.           wasCharFound = true
  100.           break
  101.         end
  102.       end
  103.       if not wasCharFound then
  104.         stringPixelsWidth = stringPixelsWidth + defaultCharWidth + 0.5  -- add half pixel distance
  105.       end
  106.       ignoreNext = false
  107.     end
  108.   end
  109.   return math.floor(stringPixelsWidth)  -- round down to integer
  110. end
  111.  
  112. return methods
Advertisement
Add Comment
Please, Sign In to add comment