Compare commits
	
		
			No commits in common. "7e8b53a20735fddf7305ddefc02226986be4b684" and "b0f616fd329f760c1121b28c37acadf39fccbdfe" have entirely different histories.
		
	
	
		
			7e8b53a207
			...
			b0f616fd32
		
	
		
					 6 changed files with 6 additions and 1989 deletions
				
			
		
							
								
								
									
										101
									
								
								etc/utf8.lua
									
										
									
									
									
								
							
							
						
						
									
										101
									
								
								etc/utf8.lua
									
										
									
									
									
								
							|  | @ -1,101 +0,0 @@ | |||
| -- Unicode library | ||||
| 
 | ||||
| local pattern = '[%z\1-\127\194-\244][\128-\191]*' | ||||
| 
 | ||||
| -- helper function | ||||
| local function posrelat(pos, len) | ||||
|   if pos < 0 then | ||||
|     pos = len + pos + 1 | ||||
|   end | ||||
|   return pos | ||||
| end | ||||
| 
 | ||||
| local utf8 = {} | ||||
| 
 | ||||
| -- THE MEAT | ||||
| 
 | ||||
| function utf8.map(s, f, no_subs) | ||||
|   local i = 0 | ||||
| 
 | ||||
|   if no_subs then | ||||
|     for b, e in s:gmatch('()' .. pattern .. '()') do | ||||
|       i = i + 1 | ||||
|       local c = e - b | ||||
|       f(i, c, b) | ||||
|     end | ||||
|   else | ||||
|     for b, c in s:gmatch('()(' .. pattern .. ')') do | ||||
|       i = i + 1 | ||||
|       f(i, c, b) | ||||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| -- THE REST | ||||
| 
 | ||||
| function utf8.chars(s, no_subs) | ||||
|   return coroutine.wrap(function() | ||||
|     return utf8.map(s, coroutine.yield, no_subs) | ||||
|   end) | ||||
| end | ||||
| 
 | ||||
| function utf8.len(s) | ||||
|   return select(2, s:gsub('[^\128-\193]', '')) | ||||
| end | ||||
| 
 | ||||
| function utf8.replace(s, map) | ||||
|   return s:gsub(pattern, map) | ||||
| end | ||||
| 
 | ||||
| function utf8.reverse(s) | ||||
|   s = s:gsub(pattern, function(c) | ||||
|     return #c > 1 and c:reverse() | ||||
|   end) | ||||
|   return s:reverse() | ||||
| end | ||||
| 
 | ||||
| function utf8.strip(s) | ||||
|   return s:gsub(pattern, function(c) | ||||
|     return #c > 1 and '' | ||||
|   end) | ||||
| end | ||||
| 
 | ||||
| function utf8.sub(s, i, j) | ||||
|   local l = utf8.len(s) | ||||
| 
 | ||||
|   i = posrelat(i, l) | ||||
|   j = j and posrelat(j, l) or l | ||||
| 
 | ||||
|   if i < 1 then i = 1 end | ||||
|   if j > l then j = l end | ||||
|   if i > j then return '' end | ||||
| 
 | ||||
|   local diff = j - i | ||||
|   local iter = utf8.chars(s, true) | ||||
| 
 | ||||
|   for _ = 1, i - 1 do iter() end | ||||
|   local c, b = select(2, iter()) | ||||
| 
 | ||||
|   if diff == 0 | ||||
|   then return s:sub(b, b + c - 1) end | ||||
| 
 | ||||
|   i = b | ||||
|   for _ = 1, diff - 1 do iter() end | ||||
|   local c, b = select(2, iter()) | ||||
| 
 | ||||
|   return s:sub(i, b + c - 1) | ||||
| end | ||||
| 
 | ||||
| -- ADDITION | ||||
| 
 | ||||
| require 'etc.utf8data' | ||||
| 
 | ||||
| function utf8.upper(s) | ||||
|   return utf8.replace(s, utf8_lc_uc) | ||||
| end | ||||
| 
 | ||||
| function utf8.lower(s) | ||||
|   return utf8.replace(s, utf8_uc_lc) | ||||
| end | ||||
| 
 | ||||
| return utf8 | ||||
							
								
								
									
										1860
									
								
								etc/utf8data.lua
									
										
									
									
									
								
							
							
						
						
									
										1860
									
								
								etc/utf8data.lua
									
										
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -1,25 +1,9 @@ | |||
| local reg = { | ||||
|   {'эх',         'хуех'}, -- надоели эхать | ||||
|   {'мета',       'хуета'}, | ||||
|   {'meta',       'xueta'}, | ||||
|   {'цукерберг',  'цукерхуй'}, | ||||
|   {'zuckerberg', 'zuckerhui'}, | ||||
|   {'whatsapp',   'вадзад'}, | ||||
|   {'tiktok',     'деградация'}, | ||||
|   {'.*че%?*$',   'пиши ё, грамотей'}, | ||||
|   {'.*чё%?*$',   'ничё'} | ||||
| } | ||||
| 
 | ||||
| return function(C, api, msg) | ||||
|   if msg.text then | ||||
|     msg.text = utf8.lower(msg.text) | ||||
|     local t = '' | ||||
|     for _, v in pairs(reg) do | ||||
|       if msg.text:match(v[1]) | ||||
|       then t = t.. v[2] ..' ' | ||||
|       end | ||||
|     end | ||||
|     if t ~= '' | ||||
|     then api:reply(msg, t) end | ||||
|   -- надоели эхать | ||||
|   if msg.text | ||||
|   and msg.text:match '[Ээ]+[Хх]+' then | ||||
|     C.api:reply(msg, msg.text | ||||
|       :gsub('[Ээ]+[Хх]+', 'хуех') | ||||
|     ,nil) | ||||
|   end | ||||
| end | ||||
|  |  | |||
|  | @ -28,8 +28,6 @@ | |||
|       "prov": "\nData provided from central bank of Russia." | ||||
|     }, | ||||
|     "start": { | ||||
|       "desc": "getting started", | ||||
| 
 | ||||
|       "msg": "Hi! I'm Computer - an open-source bot.\nIf you looking for source code: https://gitdab.com/er2/comp-tg" | ||||
|     } | ||||
|   } | ||||
|  |  | |||
|  | @ -28,8 +28,6 @@ | |||
|       "prov": "\nДанные предоставлены центральным банком России." | ||||
|     }, | ||||
|     "start": { | ||||
|       "desc": "начало работы", | ||||
| 
 | ||||
|       "msg": "Привет! Я Computer - бот с открытым исходным кодом.\nЕсли ты ищешь исходники: https://gitdab.com/er2/comp-tg" | ||||
|     } | ||||
|   } | ||||
|  |  | |||
|  | @ -42,8 +42,6 @@ end | |||
| function Core:init() | ||||
|   self:load 'parts' | ||||
| 
 | ||||
|   utf8 = require 'etc.utf8' | ||||
| 
 | ||||
|   print 'Done!' | ||||
|   self:emit 'ready' | ||||
| end | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue