nataraj: (Бритый небритый)
[personal profile] nataraj
Написал первую в жизни программу на руби.
Программа необычайна полезная, умеет переводить русский текст в индусский скрипт, ну настолько на сколько это вообще возможно...

#!/usr/bin/ruby


def hindiize(s)

  downcase = 
  {
    'А' => 'а',
    'Б' => 'б',
    'В' => 'в',
    'Г' => 'г',
    'Д' => 'д',
    'Е' => 'е',
    'Ё' => 'ё',
    'Ж' => 'ж',
    'З' => 'з',
    'И' => 'и',
    'Й' => 'й',
    'К' => 'к',
    'Л' => 'л',
    'М' => 'м',
    'Н' => 'н',
    'О' => 'о',
    'П' => 'п',
    'Р' => 'р',
    'С' => 'с',
    'Т' => 'т',
    'У' => 'у',
    'Ф' => 'ф',
    'Х' => 'х',
    'Ц' => 'ц',
    'Ч' => 'ч',
    'Ш' => 'ш',
    'Щ' => 'щ',
    'Ь' => 'ь',
    'Ъ' => 'ъ',
    'Ы' => 'ы',
    'Э' => 'э',
    'Ю' => 'ю',
    'Я' => 'я',
  }
  first_vowels = 
  {
    'а' => 'आ',
    'е' => 'ए',
#    'ё' => '',
    'и' => 'इ',
    'о' => 'औ',
    'у' => 'उ',
    'ы' => 'ई', # ई -- строго говоря длинная "и", звука ы в хинди нету совсем :-(
    'э' => 'अ'
#    'ю' => '',
#    'я' => ''
  }
  middle_vowels = 
  {
    'а' => 'ा',
    'е' => 'े',
#    'ё' => '',
    'и' => 'ि',
    'о' => 'ो',
    'у' => 'ु',
    'ы' => 'ी', #  'ी'- - строго говоря длинная "и", звука ы в хинди нету совсем :-(
    'э' => ''    # звук э между согласным вообще не подлежит "огласовке"
#    'ю' => '',
#    'я' => ''
  }
  consonants = 
  {
    'б' => 'ब',
#    'бх' => 'भ',
    'в' => 'व',
    'г' => 'ग',
#    'гх' => 'घ',
    'д' => 'द',
#    'дх' => 'ध',
    'ж' => 'ज',
    'з' => 'ज़',
    'й' => 'य',
    'к' => 'क',
    'л' => 'ल',
    'м' => 'म',
    'н' => 'न',
    'п' => 'प',
#    'пх' => 'फ',
    'р' => 'र',
    'с' => 'स',
    'т' => 'त',
#    'тх' => 'थ',
    'ф' => 'फ़',
    'х' => 'ह',
    'ц' => 'ट्स',
    'ч' => 'छ',
    'ш' => 'श',
    'щ' => 'ष',
  }
  
  numbers = 
  {
   '0' => '०',
   '1' => '१',
   '2' => '२',
   '3' => '३',
   '4' => '४',
   '5' => '५',
   '6' => '६',
   '7' => '७',
   '8' => '८',
   '9' => '९',
  }
  
  s = s.gsub('ё','йо');
  s = s.gsub('ю','йу');
  s = s.gsub('я','йа');
  s = s.gsub('ь',"'");
  s = s.gsub('ъ',"'");
  
  is_first = true
  is_prev_consonant = false
  res = ""
  s.split(//u).each do |l|
    l = downcase[l] || l  # FIXME Я не знаю как сделать downcase по-русски
    if l.match(/[аеиоуыэ]/u) 
      if is_first   || ! is_prev_consonant
        l = first_vowels[l];
      else
        l = middle_vowels[l];
      end
      is_prev_consonant = false;
    elsif l.match(/[бвгджзйклмнпрстфхцчшщ]/u)
      l = consonants[l];
      if (is_prev_consonant)
        l = "्" + l
      end
      is_prev_consonant = true
    elsif l.match(/[0-9]/u)
      l = numbers[l];
      is_prev_consonant = false
      is_first = true
    else
      is_prev_consonant = false
      is_first = true
    end
    res=res+l
    is_first = false
  end
  res
end


puts hindiize("АХТУНГ-АХТУНГ руссиш патртизанен")

puts hindiize("здесь сидел ты, валет, тебе счастия нет, тебе карта всегда не в цвет")

puts hindiize("грааль понаотдавал")

puts hindiize("ооо 'ааа'")

puts hindiize("год 1997") 
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

nataraj: (Default)
Swami Dhyan Nataraj

July 2024

S M T W T F S
 123456
789 10111213
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 20th, 2026 06:04 am
Powered by Dreamwidth Studios