MundoBezier

Acentos en Essentials

Mar 16th, 2022 (edited)
1,262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 3.48 KB | None | 0 0
  1. #############################################
  2. #            Acentos desde teclado          #
  3. #       Compatible : Essentials 16.2        #
  4. #                Autor : Bezier             #
  5. #############################################
  6. #     Jódete, Maruno, que tengo acentos     #
  7. #############################################
  8.  
  9. class Window_TextEntry_Keyboard < Window_TextEntry
  10.  
  11.   # Acentos básicos [ ´ , ` , ¨ , ^ ]
  12.   @@Acentos = [180, 96, 168, 94]
  13.   @@AcentosConversion=[
  14.     ['A','E','I','O','U','a','e','i','o','u'],
  15.     ['Á','É','Í','Ó','Ú','á','é','í','ó','ú'],
  16.     ['À','È','Ì','Ò','Ù','à','è','ì','ò','ù'],
  17.     ['Ä','Ë','Ï','Ö','Ü','ä','ë','ï','ö','ü'],
  18.     ['Â','Ê','Î','Ô','Û','â','ê','î','ô','û']
  19.   ]
  20.  
  21.   def update
  22.     @frame+=1
  23.     @frame%=20
  24.     self.refresh if ((@frame%10)==0)
  25.     return if !self.active
  26.     # Moving cursor
  27.     if Input.repeat?(Input::LEFT)
  28.       if @helper.cursor > 0
  29.         @helper.cursor-=1
  30.         @frame=0
  31.         self.refresh
  32.       end
  33.       return
  34.     end
  35.     if Input.repeat?(Input::RIGHT)
  36.       if @helper.cursor < self.text.scan(/./m).length
  37.         @helper.cursor+=1
  38.         @frame=0
  39.         self.refresh
  40.       end
  41.       return
  42.     end
  43.     # Backspace
  44.     if Input.repeatex?(8) || Input.repeatex?(0x2E)
  45.       self.delete if @helper.cursor > 0
  46.       return
  47.     end
  48.     if !@toUnicode
  49.       @toUnicode=Win32API.new("user32.dll","ToUnicode","iippii","i") rescue nil
  50.       @mapVirtualKey=Win32API.new("user32.dll","MapVirtualKey","ii","i") rescue nil
  51.       @getKeyboardState=Win32API.new("user32.dll","GetKeyboardState","p","i") rescue nil
  52.     end
  53.  
  54.     @alt_gr = false
  55.  
  56.     if @getKeyboardState
  57.       @acento = 0 if !@acento
  58.       kbs="\0"*256
  59.       @getKeyboardState.call(kbs)
  60.       kbcount=0
  61.       for i in 3...256
  62.         if Input.triggerex?(i)
  63.  
  64.           if i==17 # Alt Gr Key
  65.             @alt_gr=true
  66.           end
  67.  
  68.           vsc=@mapVirtualKey.call(i,0)
  69.           buf="\0"*8
  70.           ret=@toUnicode.call(i,vsc,kbs,buf,4,0)
  71.           if ret>0
  72.             b=buf.unpack("v*")
  73.            
  74.             if @@Acentos.include?(b[0])
  75.               @acento = @@Acentos.index(b[0]) + 1
  76.               return
  77.             elsif @@AcentosConversion[0].include?(buf[0].chr) && @acento > 0
  78.               idx = @@AcentosConversion[0].index(buf[0].chr)
  79.               insert(@@AcentosConversion[@acento][idx])
  80.               @acento = 0
  81.               return
  82.             else
  83.               @acento=0
  84.             end
  85.  
  86.             for j in 0...ret
  87.               if buf[j]<=0x7F
  88.                 insert(buf[j].chr)
  89.               elsif buf[j]<=0x7FF
  90.                 insert((0xC0|((buf[j]>>6)&0x1F)).chr+(0x80|(buf[j]&0x3F)).chr)
  91.               else
  92.                 str=(0xE0|((buf[j]>>12)&0x0F)).chr
  93.                 str+=(0x80|((buf[j]>>6)&0x3F)).chr
  94.                 str+=(0x80|(buf[j]&0x3F)).chr
  95.                 insert(str)
  96.               end
  97.               kbcount+=1
  98.             end
  99.           end
  100.         end
  101.       end
  102.       return if kbcount>0
  103.     end
  104.     # Letter keys
  105.     for i in 65..90
  106.       if Input.repeatex?(i)
  107.         shift=(Input.press?(Input::SHIFT)) ? 0x41 : 0x61
  108.         insert((shift+(i-65)).chr)
  109.         return
  110.       end
  111.     end
  112.     # Number keys
  113.     shifted="=!\"·$%&/()"
  114.     unshifted="0123456789"
  115.     for i in 48..57
  116.       if Input.repeatex?(i)
  117.         insert((Input.press?(Input::SHIFT)) ? shifted[i-48].chr : unshifted[i-48].chr)
  118.         return
  119.       end
  120.     end
  121.   end
  122. end
Add Comment
Please, Sign In to add comment