#!/usr/bin/env ruby # encoding: UTF-8 require 'yaml' require 'rdoba' require 'прѣхлажь/version' class Priehlazx attr_reader :истокъ, :цѣль # TODO # def puts(*args) # File.open('slavconv.log','a') do |f| f.puts *args end # end @@Знаци = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'Ꙇожъ', 'Ѕело', 'Ѕело зеркаль', 'Ѕело мягъ', 'Ѕело ꙁ', 'Азъ', 'Азъ инъ', 'Буки', 'Вѣдѣ', 'Гервь', 'Глаголь', 'Глаголь твердъ', 'Гье', 'Дже', 'Дже', 'Добро', 'Добро мягъ', 'Добро удлинь', 'Ере', 'Ери', 'Ери еръ', 'Ери еръ', 'Ери еръ съузь', 'Ери съузь', 'Ериі', 'Ериі еръ', 'Ериі еръ', 'Ериі еръ съузь', 'Ериі съузь', 'Еръ', 'Еръ высъ', 'Еры', 'Еры еръ', 'Еры еръ съузь', 'Еры съузь', 'Ерь', 'Есть', 'Есть чажесь', 'Есть шыръ', 'Живете', 'Земля', 'Земля ꙁ', 'Иже', 'Иже чажесь', 'Иже ётъ', 'І', 'Икъ', 'Како', 'Копа', 'Кье', 'Лье', 'Люди', 'Люди мягъ', 'Мыслете', 'Мыслете мягъ', 'Нашъ', 'Нашъ мягъ', 'Нье', 'Омега', 'Оникъ', 'Онъ', 'Онъ двоенъ', 'Онъ двоенъ одинокъ', 'Онъ съкрестъ', 'Онъ узъ', 'Онъ шыръ', 'Онъ шыръ двуокъ', 'Онъ шыръ одинокъ', 'Покои', 'Рьцы', 'Слово', 'Слово подстрочь', 'Твердо', 'Твердо высъ', 'Твердо тревысъ', 'Тше', 'Укикъ', 'Укъ', 'Фертъ', 'Хѣръ', 'Цы', 'Цы въгнутъ', 'Червь', 'Червь чашевидь', 'Ша', 'Шта', 'Шта въгнутъ', 'Ща', 'Ынъ', 'Это', 'Юсъ', 'Юсъ вель', 'Юсъ вель двуногъ', 'Юсъ зеркаль', 'Юсъ кратъ', 'Юсъ малъ', 'Юсъ малъ подчёрчь', 'Юсъ малъ подъчерчь', 'Юсъ малъ прогнутъ', 'Юсъ средь', 'Я', 'Ѣдь', 'Ѣдь высъ', 'Ѣдь предчерчь', 'острецо', 'чажесь', 'двоострецо', 'двочажесь', 'кратьцо', 'крапка', 'двокрапка', 'азъ', 'азъ выносъ', 'азъ инъ', 'большѣ', 'буки', 'буки выносъ', 'вѣдѣ выносъ', 'вершина глася', 'възметна буква', 'възметъ', 'возъгласъ', 'возъгласъ вель', 'восемь', 'вранъ', 'въводъ', 'вѣдѣ', 'гервь', 'глава Маркова', 'глаголь', 'глаголь твердъ', 'глаголь выносъ', 'гье', 'два', 'двоеточіе', 'девѧть', 'гервь выносъ', 'дже', 'добро', 'добро выносъ', 'добро мягъ', 'добро удлинь', 'дѣлитель', 'ере', 'ери', 'ери еръ съузь', 'ери съузь', 'ериі', 'ериі еръ съузь', 'ериі съузь', 'еръ', 'еръ высъ', 'еры', 'еры вынось', 'еры еръ', 'еры еръ съузь', 'еры съузь', 'ерь', 'ерь вынось', 'есть', 'есть выносъ', 'есть шыръ', 'живете', 'живете выносъ', 'запѧта', 'звательцо', 'звёздочка', 'земля', 'земля выносъ', 'земля ꙁ', 'знакъ вопрось', 'знакъ воскличь', 'иже', 'і', 'икъ', 'ичокъ', 'иже инъ вынось', 'икъ инъ вынось', 'кавыка', 'кавыка выносъ', 'кавыкы обратны', 'кавыкы прямы', 'кавычь одина', 'како', 'како выносъ', 'колода', 'колода', 'копа', 'крест освящающъ', 'крест освящающъ дужь', 'крестикъ сносочь', 'крестъ и҃-конечь', 'крестъ и҃-конечь очерчь', 'крестъ равносторонъ изразьцъ', 'крестъ равносторонъ изразьцъ въ кругѣ', 'крестъ равносторонъ изразьцъ въ нижемъ полукругѣ', 'крестъ равносторонъ изразьцъ очерчь въ кругѣ', 'крестъ равносторонъ изразьцъ очерчь въ нижемъ полукругѣ', 'крестъ равносторонь очерчь изразьцъ', 'кривька', 'ктому', 'кье', 'легіонъ', 'леодръ', 'лье', 'люди', 'люди выносъ', 'люди мягъ', 'меньшѣ', 'мыслете', 'мыслете выносъ', 'мыслете мягъ', 'мѣта', 'нашъ', 'нашъ выносъ', 'нашъ мягъ', 'нье', 'обратный дѣлитель', 'один', 'омега', 'оникъ', 'онъ', 'онъ выносъ', 'онъ двоенъ', 'онъ двоенъ одинокъ', 'онъ многоокъ', 'онъ съкрестъ', 'онъ узъ', 'онъ шыръ', 'онъ шыръ одинокъ', 'онъ шыръ одинъкъ', 'запинка глася', 'отого', 'паеръ', 'паеръ выносъ', 'палочка', 'переносъ', 'песъ', 'петелка', 'подчеркъ', 'покои', 'покои выносъ', 'покрытіе', 'препинаніе а', 'препинаніе б', 'препинаніе в', 'препинаніе г', 'препинаніе д', 'препинаніе е', 'препинаніе ж', 'пробѣлъ', 'пущь', 'пѧть', 'равно', 'распѣвъ въ слогѣ', 'рьцы', 'рьцы выносъ', 'рѣшётка', 'семь', 'сирѣчь', 'скобка закрывающа', 'скобка изразьна закрывающа', 'скобка изразьна открывающа', 'скобка открывающа', 'скобка прямочерта закрывающа', 'скобка прямочерта открывающа', 'слово', 'слово выносъ', 'слово подстрочь', 'слово твердо выносъ', 'сотка', 'твердо', 'твердо выносъ', 'твердо высъ', 'твердо тревысъ', 'точька запята', 'точька', 'три', 'троеточіе одесну несоверше окружено', 'троеточіе одесну несоверше окружено очерче', 'троеточіе ошую несоверше окружено', 'троеточіе ошую несоверше окружено очерче', 'тше', 'тысяча', 'тьма', 'тьматемъ', 'укикъ', 'укъ', 'укъ выносъ', 'умилительцо', 'умноженіе', 'фертъ', 'фертъ вынось', 'ѳита выносъ', 'хѣръ', 'хѣръ выносъ', 'цы', 'цы въгнутъ', 'цы выносъ', 'цѧтокъ', 'червь', 'червь выносъ', 'червь чашевидь', 'черта', 'четыре', 'ша', 'ша выносъ', 'шта', 'шта въгнутъ', 'шесть', 'шта выносъ', 'ща', 'ынъ', 'это', 'юсъ', 'юсъ вель', 'юсъ вель выносъ', 'юсъ вель двуногъ', 'юсъ выносъ', 'юсъ зеркаль', 'юсъ кратъ', 'юсъ малъ', 'юсъ малъ выносъ', 'юсъ малъ подчёрчь', 'юсъ малъ подъчерчь', 'юсъ малъ прогнутъ', 'юсъ средь', 'я', 'ѣдь', 'ѣдь выносъ', 'ѣдь высъ', 'ѣдь предчерчь', 'яма глася', 'ꙇожъ', 'ѕвездочка', 'ѕвездочка сносоча', 'ѕело', 'ѕело зеркаль', 'ѕело мягъ', 'ѕело ꙁ', 'Омега веля', 'Омега шыръ', 'Отъ', 'омега веля', 'омега шыръ', 'отъ', 'Ксы', 'ксы', 'Псы', 'псы', 'Ѳита', 'ѳита', 'Іжица', 'іжица', 'Ꙇазъ', 'Ꙇоть', 'Ꙇазъ пречерчь', 'Ꙇі', 'Ꙇюсъ вель', 'Ꙇюсъ малъ', 'Ꙇюсъ малъ подчёрчь', 'Ꙇѣдь', 'Ꙇесть', 'ꙇазъ', 'ꙇазъ выносъ', 'ꙇазъ пречерчь', 'ꙇоть', 'ꙇі', 'ꙇюсъ вель', 'ꙇюсъ вель выносъ', 'ꙇюсъ малъ', 'ꙇюсъ малъ подчёрчь', 'ꙇѣдь', 'ꙇесть', 'двоскоба шуя', 'двоскоба десна', 'двокавычь нижя', 'двокавычь десна', 'двокавычь шуя', 'кавычь шуя', 'кавычь десна', 'кавычь нижя', 'подъглавокъ', 'преносъ мягъ', 'кавычь двоина', 'преносъ', 'вдохъ', 'стои', 'закавыка', 'уголъ', 'придыхъ', 'движеніе гласа восходяще', 'движеніе гласа нисходяще', 'запинка пѣнія', 'преносъ долъгъ', ] Useful = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'Ꙇожъ', 'Ѕело', 'Ѕело зеркаль', 'Ѕело мягъ', 'Ѕело ꙁ', 'Азъ', 'Азъ инъ', 'Буки', 'Вѣдѣ', 'Гервь', 'Глаголь', 'Глаголь твердъ', 'Гье', 'Дже', 'Дже', 'Добро', 'Добро мягъ', 'Добро удлинь', 'Ере', 'Ери', 'Ери еръ', 'Ери еръ', 'Ери еръ съузь', 'Ери съузь', 'Ериі', 'Ериі еръ', 'Ериі еръ', 'Ериі еръ съузь', 'Ериі съузь', 'Еръ', 'Еръ высъ', 'Еры', 'Еры еръ', 'Еры еръ съузь', 'Еры съузь', 'Ерь', 'Есть', 'Есть чажесь', 'Есть шыръ', 'Живете', 'Земля', 'Земля ꙁ', 'Иже', 'Иже чажесь', 'Иже ётъ', 'І', 'Икъ', 'Како', 'Копа', 'Кье', 'Лье', 'Люди', 'Люди мягъ', 'Мыслете', 'Мыслете мягъ', 'Нашъ', 'Нашъ мягъ', 'Нье', 'Омега', 'Оникъ', 'Онъ', 'Онъ двоенъ', 'Онъ двоенъ одинокъ', 'Онъ съкрестъ', 'Онъ узъ', 'Онъ шыръ', 'Онъ шыръ двуокъ', 'Онъ шыръ одинокъ', 'Покои', 'Рьцы', 'Слово', 'Слово подстрочь', 'Твердо', 'Твердо высъ', 'Твердо тревысъ', 'Тше', 'Укикъ', 'Укъ', 'Фертъ', 'Хѣръ', 'Цы', 'Цы въгнутъ', 'Червь', 'Червь чашевидь', 'Ша', 'Шта', 'Шта въгнутъ', 'Ща', 'Ынъ', 'Это', 'Юсъ', 'Юсъ вель', 'Юсъ вель двуногъ', 'Юсъ зеркаль', 'Юсъ кратъ', 'Юсъ малъ', 'Юсъ малъ подчёрчь', 'Юсъ малъ подъчерчь', 'Юсъ малъ прогнутъ', 'Юсъ средь', 'Я', 'Ѣдь', 'Ѣдь высъ', 'Ѣдь предчерчь', 'азъ', 'азъ инъ', 'буки', 'вѣдѣ', 'гервь', 'глава Маркова', 'глаголь', 'глаголь твердъ', 'гье', 'дже', 'добро', 'добро мягъ', 'добро удлинь', 'ере', 'ери', 'ери еръ съузь', 'ери съузь', 'ериі', 'ериі еръ съузь', 'ериі съузь', 'еръ', 'еръ высъ', 'еры', 'еры еръ', 'еры еръ съузь', 'еры съузь', 'ерь', 'есть', 'есть шыръ', 'живете', 'земля', 'земля ꙁ', 'иже', 'і', 'икъ', 'како', 'копа', 'кье', 'лье', 'люди', 'люди мягъ', 'мыслете', 'мыслете мягъ', 'нашъ', 'нашъ мягъ', 'нье', 'омега', 'оникъ', 'онъ', 'онъ двоенъ', 'онъ двоенъ одинокъ', 'онъ многоокъ', 'онъ съкрестъ', 'онъ узъ', 'онъ шыръ', 'онъ шыръ одинокъ', 'онъ шыръ одинъкъ', 'покои', 'рьцы', 'слово', 'слово подстрочь', 'твердо', 'твердо высъ', 'твердо тревысъ', 'тше', 'укикъ', 'укъ', 'фертъ', 'хѣръ', 'цы', 'цы въгнутъ', 'червь', 'червь чашевидь', 'ша', 'шта', 'шта въгнутъ', 'ща', 'ынъ', 'это', 'юсъ', 'юсъ вель', 'юсъ вель двуногъ', 'юсъ зеркаль', 'юсъ кратъ', 'юсъ малъ', 'юсъ малъ подчёрчь', 'юсъ малъ подъчерчь', 'юсъ малъ прогнутъ', 'юсъ средь', 'я', 'ѣдь', 'ѣдь высъ', 'ѣдь предчерчь', 'ꙇожъ', 'ѕело', 'ѕело зеркаль', 'ѕело мягъ', 'ѕело ꙁ', 'Омега веля', 'Омега шыръ', 'Отъ', 'омега веля', 'омега шыръ', 'отъ', 'Ксы', 'ксы', 'Псы', 'псы', 'Ѳита', 'ѳита', 'Іжица', 'іжица', 'Ꙇазъ', 'Ꙇоть', 'Ꙇазъ пречерчь', 'Ꙇі', 'Ꙇюсъ вель', 'Ꙇюсъ малъ', 'Ꙇюсъ малъ подчёрчь', 'Ꙇѣдь', 'Ꙇесть', 'ꙇазъ', 'ꙇазъ пречерчь', 'ꙇоть', 'ꙇі', 'ꙇюсъ вель', 'ꙇюсъ малъ', 'ꙇюсъ малъ подчёрчь', 'ꙇѣдь', 'ꙇесть', ] private def яти_знаци(знч, имя, цѣль_i) имяна_н = имя.split(',').map do |ѯ| ѯ.strip end имя_н = [] # п - письмене (текст, строка) нов_зн = имяна_н.each_comby(:backward) do |съчета| next if съчета.size <= 1 dbp24 "[яти_знаци]> съчета: #{съчета.inspect}" нов_зн = '' ли_зн_п = съчета.each do |а| знаци_нн = @кс[:сѣтка][а.join(',')] dbp22 "[яти_знаци]> знаци_нн: #{знаци_нн.inspect}" if знаци_нн цѣль_зн_п = знаци_нн.each do |знаци_н| break знаци_н[цѣль_i] if знаци_н[цѣль_i] end if цѣль_зн_п.class == String dbp22 "[яти_знаци]> цѣль_зн_п: #{цѣль_зн_п.inspect}" нов_зн << цѣль_зн_п else break nil end else break nil end end return нов_зн if ли_зн_п end nil end def initialize кс_i = 0 сѣтка = {} ширь = [] ширь_б = [] буквы = [] знаци = {} @кс = { :ширь => ширь, :ширь_б => ширь_б, :сѣтка => сѣтка, :имяна => [], :буквы => буквы, :знаци => знаци, :правило => {}, :правило_б => {}, } home = begin ps = Gem::GemPathSearcher.new dir = ps.lib_dirs_for(ps.find('priehlazx')).split('/') dir.pop dir.join('/') rescue NameError '.' end ($: | [ '.', '/usr/share/priehlazx', '../share', home + '/share' ] ).each do |dir| begin; Dir.new(dir).entries.delete_if { |x| x !~ /\.(cp|скс)$/ } rescue; [] end.each do |file_cp| begin кс = YAML.load(IO.read(File.join(dir,file_cp))) rescue $stderr.puts "Вънми: нѣсть мощно разъбрати письмена YAML въ '#{file_cp}'. се ошибка: #{$!}" next end кс_имя = кс['имя'].to_sym dbp14 "------------" dbp14 "#{кс_имя}" @кс[:имяна] << кс_имя ширь_б_н = [] ширь_н = [] кс['знаци'].each do |кс_знц, кс_знч| def завѣръ_знаци(кс_знц, кс_имя) if кс_знц =~ /,/ кс_знц.split(',').each do |имя| unless @@Знаци.include? имя.strip $stderr.puts "Вънми: имя знаця '#{имя}' въ страницѣ '#{кс_имя}' нѣсть въ спискѣ имянъ" return false end end else unless @@Знаци.include? кс_знц.strip $stderr.puts "Вънми: имя знаця '#{кс_знц}' въ страницѣ '#{кс_имя}' нѣсть въ спискѣ имянъ" return false end end true end unless кс_знч and not кс_знч.to_s.empty? $stderr.puts "Вънми: знаць '#{кс_знц}' въ страницѣ '#{кс_имя}' имѣетъ пусто значеніе" end next unless завѣръ_знаци(кс_знц, кс_имя) and кс_знч and not кс_знч.to_s.empty? сѣтка[кс_знц] = [[]] unless сѣтка[кс_знц] зн_нн_нов = [] сѣтка_имя = сѣтка[кс_знц] кс_знч.to_s.split(',').each do |знч| знч = знч.strip.gsub(/ѯ[\da-fA-F]+;?/u) do |a| aa = a.unpack('U*') aa.shift aa.pop if aa.last == 0x3b [ aa.pack('U*').to_i(16) ].pack('U*') end dbp14 "#{кс_знц} = #{знч}" зн_нн = сѣтка_имя.dup зн_нн.each do |зн_н| зн_н[кс_i] = знч end зн_нн_нов |= зн_нн.map {|x| x.dup } dbp18 "#{кс_знц} => #{зн_нн_нов.inspect}" #добавление в ширину ширь_н << знч ширь_б_н << знч if кс_знц.split(',').each do |имя| break nil unless Useful.include?(имя) end end сѣтка_имя.replace зн_нн_нов end if кс['знаци'] #ширь def разбери_ширь(ширь, кс_i, ширь_н) нач = кон = nil ширь[кс_i] = [] ширь_н.compact.map {|x| x.unpack('U*') }.flatten.sort.uniq.each do |знч| if not нач нач = кон = знч elsif кон + 1 == знч кон += 1 else ширь[кс_i] << ([ нач ].pack('U*')..[ кон ].pack('U*')) нач = кон = знч end end ширь[кс_i] << ([ нач ].pack('U*')..[ кон ].pack('U*')) if нач end #ширь букова разбери_ширь(ширь, кс_i, ширь_н) разбери_ширь(ширь_б, кс_i, ширь_б_н) def створи_правило(шири) одинкы = '' шири.each do |ширь| def re_c(c) m = c.match(/(?:([+\[\]\\().*?{}^$\/|]))/u) m ? '\\' + m[1] : c end (b,e) = [ re_c(ширь.begin), re_c(ширь.end) ] одинкы << (ширь.begin == ширь.end ? b : "#{b}-#{e}") end одинкы end @кс[:правило][кс_имя] = створи_правило(ширь[кс_i]) @кс[:правило_б][кс_имя] = створи_правило(ширь_б[кс_i]) буквы[кс_i] = {} кс_i += 1 end; end # разъкрытіе неѥдинныхъ знацей @кс[:имяна].each_index do |кс_i| dbp22 "Кодачица #{@кс[:имяна][кс_i]}" сѣтка.each do |имя, знач_нн| знач_нн.each do |знач_н| next if знач_н[кс_i] dbp22 "Неполна дружь #{знач_н.inspect}" ново_знч = яти_знаци(знач_н, имя, кс_i) if ново_знч знач_н[кс_i] = ново_знч dbp24 "Сотвореніе нова значенія #{ново_знч.inspect} для дружи #{знач_н.inspect}" end end end end #сортировка слов по первой букве. сѣтка.each do |имя, знач_нн| знач_нн.each do |знач_н| @кс[:имяна].each_index do |кс_i| знач = знач_н[кс_i] next unless знач dbp24 "Значеніе #{знач.inspect} << #{знач_н.inspect}" бук = знач.get(0) буквы[кс_i][бук] = {} unless буквы[кс_i][бук] буквы[кс_i][бук][знач] = [] unless буквы[кс_i][бук][знач] буквы[кс_i][бук][знач] << знач_н end end end #полученіе словаря обратныхъ значеній имянъ знацей сѣтка.each do |знц, знч_нн| знч_нн.each do |знч_н| знаци[знч_н] = знц end end end public def цѣль=(cp) cp = cp.to_sym if @кс[:имяна].include?(cp) @цѣль = cp else raise "Се ошибка: невѣсть къ цѣлева кодачица #{cp}, кодачицы доступныя суть: #{@кс[:имяна].join(', ')}" end end def истокъ=(cp) cp = cp.to_sym if @кс[:имяна].include?(cp) @истокъ = cp else raise "Се ошибка: невѣсть къ исходна кодачица #{cp}, кодачицы доступныя суть: #{@кс[:имяна].join(', ')}" end end def кака_кода(писмя) писмя = писмя.to_s вѣса_сл = {} @кс[:имяна].each_index do |кс_i| шири = @кс[:ширь][кс_i] matched = 0 unmatched = 0 писмя.each_char do |бк| шири.each do |ширь| matched += 1 if ширь === бк end end вѣса_сл[@кс[:имяна][кс_i]] = matched end вѣса = вѣса_сл.keys.sort do |ѯ,ѱ| пл = вѣса_сл[ѱ] <=> вѣса_сл[ѯ] пл != 0 ? пл : @цѣль == ѯ ? 1 : @цѣль == ѱ ? -1 : ѯ.to_s <=> ѱ.to_s end вѣса && (not вѣса.empty?) && вѣса[0] end def пръ_сл(кс) return nil if кс.to_s.empty? кс = кс.to_sym return nil unless @кс[:имяна].include? кс "[#{@кс[:правило_б][кс]}]" end def пръ(кс) return nil if кс.to_s.empty? кс = кс.to_sym return nil unless @кс[:имяна].include? кс "[#{@кс[:правило][кс]}]" end def [](str) ими(str) end def ими(писмя, цѣль = @цѣль, истокъ = @истокъ) self.цѣль = цѣль цѣль_ѯ = @кс[:имяна].index(@цѣль) return nil unless цѣль_ѯ # TODO raise писмя = писмя.to_s истокъ = (истокъ || кака_кода(писмя)).to_sym исх_ѯ = @кс[:имяна].index(истокъ) return nil unless исх_ѯ # TODO raise return nil unless @кс[:сѣтка] # TODO raise плодъ = '' ѯ = 0 dbp22 "Знак: #{писмя.inspect}" while писмя and not писмя.empty? ѱ = 1 знк = писмя.get(0) dbp22 "Знак: #{знк.inspect}" реха = @кс[:буквы][исх_ѯ][знк] if реха dbp28 "Реха: #{реха.inspect}" реха_а = [] реха.keys.sort do |а,б| б.size <=> а.size end.each do |знач| знач_н = реха[знач] реха_а << реха[знач].sort do |а,б| а[цѣль_ѯ].size <=> б[цѣль_ѯ].size end end dbp28 "Нова реха: #{реха_а.inspect}" пл = реха_а.flatten(1).each do |а| dbp24 "Запись: #{а.inspect}" if а[исх_ѯ] and писмя =~ /^#{а[исх_ѯ].to_res}(.*)/u dbp24 "Попало: #{писмя.inspect} =~ #{а.inspect}" if а[цѣль_ѯ] писмя = $1 ѱ = а[исх_ѯ].size break а[цѣль_ѯ] end end end if (пл.class == Array) or (пл.class == String and пл =~ /\0/) $stderr.puts "Вънми: Се знаць '#{знк}'(#{sprintf "ѯ%x", знк.ord})" + " кодачицы #{истокъ} отъторжеся, бо нѣсть мощно прѣхложити и въ кодачицу #{цѣль}" писмя =~ /^.(.*)/u; писмя = $1 elsif пл.class == String плодъ << пл else $stderr.puts "Невѣдома ошибка: sѣло страньнъ класъ #{пл.class} вещи списка" писмя =~ /^.(.*)/u; писмя = $1 end else $stderr.puts "Вънми: Се знаць '#{знк}'(#{sprintf "ѯ%x", знк.ord}) кодачицы #{истокъ} отъторжеся, зане не обретенъ въ онои" писмя =~ /^.(.*)/u; писмя = $1 end ѯ += ѱ end плодъ end alias :go :ими end