Advertisement
Snusmumriken

Love2d utf8

Nov 4th, 2016
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.99 KB | None | 0 0
  1. -- Standart lua 5.3 module 'utf8'
  2. -- Love2d contain it too.
  3. local utf8 = require'utf8'
  4.  
  5. local oldsub = string.sub
  6. function utf8.sub(self, a, b)
  7.     a = a and utf8.offset(self, a)
  8.     b = b and utf8.offset(self, b+1) - 1
  9.     return oldsub(self, a, b)
  10. end
  11.  
  12. function utf8.reverse(str)
  13.     local insert, char = table.insert, utf8.char
  14.     local t = {}
  15.     for _, c in utf8.codes(str) do
  16.         insert(t, 1, char(c))
  17.     end
  18.     return table.concat(t)
  19. end
  20.  
  21. local function toupper(a)
  22.     if a >= 97   and a <= 122  then return a - 32 end  -- latin a-z
  23.     if a >= 224  and a <= 223  then return a - 32 end  -- extended latin (dashes/strokes)
  24.     if a >= 1072 and a <= 1103 then return a - 32 end  -- cyrillic (а-я)
  25.     if a >= 1104 and a <= 1119 then return a - 80 end  -- extended cyrillic
  26.     if a%2 ~= 0 then
  27.         if a >= 256  and a <= 424  then return a-1 end -- extended latin
  28.         if a >= 433  and a <= 445  then return a-1 end -- latin and math
  29.         if a >= 452  and a <= 476  then return a-1 end -- сombined latin chars (ae, dz etc)
  30.         if a >= 478  and a <= 495  then return a-1 end -- complex latin (dots and strokes)
  31.         if a >= 504  and a <= 569  then return a-1 end -- too
  32.         if a >= 1120 and a <= 1279 then return a-1 end -- ancient cyrillic
  33.     end
  34.     return a;
  35. end
  36.  
  37. local function tolower(a)
  38.     if a >= 65   and a <= 90   then return a + 32 end  -- latin a-z
  39.     if a >= 192  and a <= 223  then return a + 32 end  -- extended latin (dashes/strokes)
  40.     if a >= 1040 and a <= 1071 then return a + 32 end  -- cyrillic (а-я)
  41.     if a >= 1024 and a <= 1039 then return a + 80 end  -- extended cyrillic
  42.     if a%2 == 0 then
  43.         if a >= 256  and a <= 424  then return a + 1 end -- extended latin
  44.         if a >= 433  and a <= 445  then return a + 1 end -- latin and math
  45.         if a >= 452  and a <= 476  then return a + 1 end -- сombined latin chars (ae, dz etc)
  46.         if a >= 478  and a <= 495  then return a + 1 end -- complex latin (dots and strokes)
  47.         if a >= 504  and a <= 569  then return a + 1 end -- too
  48.         if a >= 1120 and a <= 1279 then return a + 1 end -- ancient cyrillic
  49.     end
  50.     return a;
  51. end
  52.  
  53.  
  54. function utf8.upper(s)
  55.     -- caching measure time up to 3 times
  56.     local upper, char, insert = toupper, utf8.char, table.insert
  57.     local str = {}
  58.     for _, c in utf8.codes(s) do
  59.         insert(str, char(upper(c)))
  60.     end
  61.     return table.concat(str)
  62. end
  63.  
  64. function utf8.lower(s)
  65.     local lower, char, insert = tolower, utf8.char, table.insert
  66.     local str = {}
  67.     for _, c in utf8.codes(s) do
  68.         insert(str, char(lower(c)))
  69.     end
  70.     return table.concat(str)
  71. end
  72.  
  73. -- Merge standart string library with utf8. Call like "require'utf8'.import()"
  74. -- It slows down the processing strings but makes it universal
  75. function utf8.import()
  76.     -- upvalues for more speed
  77.     local upper, lower, sub, reverse = utf8.upper, utf8.lower, utf8.sub, utf8.reverse
  78.     function string:upper()
  79.         return upper(self)
  80.     end
  81.    
  82.     function string:lower()
  83.         return lower(self)
  84.     end
  85.    
  86.     function string:sub(a, b)
  87.         return sub(self, a, b)
  88.     end
  89.    
  90.     function string:reverse()
  91.         return reverse(self)
  92.     end
  93. end
  94.  
  95. return utf8
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement