priehlazx 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +4 -0
- data/.gitignore +4 -0
- data/.rspec +2 -0
- data/CHANGES.md +11 -0
- data/Gemfile +4 -0
- data/HELP +7 -0
- data/LICENSE +20 -0
- data/README.md +20 -0
- data/Rakefile +3 -0
- data/TODO +10 -0
- data/bin/priehlahq +93 -0
- data/bin//320/277/321/200/321/243/321/205/320/273/320/260/320/263/321/212 +93 -0
- data/lib/priehlazx.rb +510 -0
- data/lib//320/277/321/200/321/243/321/205/320/273/320/260/320/266/321/214/version.rb +3 -0
- data/lib//320/277/321/200/321/243/321/205/320/273/320/260/320/266/321/214.rb +510 -0
- data/priehlazx.gemspec +29 -0
- data/share/HIP./321/201/320/272/321/201 +316 -0
- data/share/TR-CYR-S./321/201/320/272/321/201 +106 -0
- data/share/UCS8./321/201/320/272/321/201 +342 -0
- data/share/UTF8./321/201/320/272/321/201 +360 -0
- data/spec/spec_helper.rb +18 -0
- data/spec//320/277/321/200/321/243/321/205/320/273/320/260/320/266/321/214_spec.rb +29 -0
- metadata +107 -0
data/lib/priehlazx.rb
ADDED
@@ -0,0 +1,510 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require 'yaml'
|
5
|
+
require 'rdoba'
|
6
|
+
require 'прѣхлажь/version'
|
7
|
+
|
8
|
+
class Priehlazx
|
9
|
+
attr_reader :истокъ, :цѣль
|
10
|
+
|
11
|
+
# TODO
|
12
|
+
# def puts(*args)
|
13
|
+
# File.open('slavconv.log','a') do |f| f.puts *args end
|
14
|
+
# end
|
15
|
+
|
16
|
+
@@Знаци = [
|
17
|
+
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
|
18
|
+
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
|
19
|
+
'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
|
20
|
+
't', 'u', 'v', 'w', 'x', 'y', 'z', 'Ꙇожъ', 'Ѕело', 'Ѕело зеркаль',
|
21
|
+
'Ѕело мягъ', 'Ѕело ꙁ', 'Азъ', 'Азъ инъ', 'Буки', 'Вѣдѣ', 'Гервь',
|
22
|
+
'Глаголь', 'Глаголь твердъ', 'Гье', 'Дже', 'Дже', 'Добро', 'Добро мягъ',
|
23
|
+
'Добро удлинь', 'Ере', 'Ери', 'Ери еръ', 'Ери еръ', 'Ери еръ съузь',
|
24
|
+
'Ери съузь', 'Ериі', 'Ериі еръ', 'Ериі еръ', 'Ериі еръ съузь',
|
25
|
+
'Ериі съузь', 'Еръ', 'Еръ высъ', 'Еры', 'Еры еръ', 'Еры еръ съузь',
|
26
|
+
'Еры съузь', 'Ерь', 'Есть', 'Есть чажесь', 'Есть шыръ', 'Живете', 'Земля',
|
27
|
+
'Земля ꙁ', 'Иже', 'Иже чажесь', 'Иже ётъ', 'І',
|
28
|
+
'Икъ', 'Како', 'Копа', 'Кье', 'Лье', 'Люди',
|
29
|
+
'Люди мягъ', 'Мыслете', 'Мыслете мягъ', 'Нашъ', 'Нашъ мягъ', 'Нье',
|
30
|
+
'Омега', 'Оникъ', 'Онъ', 'Онъ двоенъ', 'Онъ двоенъ одинокъ',
|
31
|
+
'Онъ съкрестъ', 'Онъ узъ', 'Онъ шыръ', 'Онъ шыръ двуокъ',
|
32
|
+
'Онъ шыръ одинокъ', 'Покои', 'Рьцы', 'Слово', 'Слово подстрочь', 'Твердо',
|
33
|
+
'Твердо высъ', 'Твердо тревысъ', 'Тше', 'Укикъ', 'Укъ', 'Фертъ', 'Хѣръ',
|
34
|
+
'Цы', 'Цы въгнутъ', 'Червь', 'Червь чашевидь', 'Ша', 'Шта', 'Шта въгнутъ',
|
35
|
+
'Ща', 'Ынъ', 'Это', 'Юсъ', 'Юсъ вель', 'Юсъ вель двуногъ', 'Юсъ зеркаль',
|
36
|
+
'Юсъ кратъ', 'Юсъ малъ', 'Юсъ малъ подчёрчь',
|
37
|
+
'Юсъ малъ подъчерчь', 'Юсъ малъ прогнутъ', 'Юсъ средь', 'Я', 'Ѣдь',
|
38
|
+
'Ѣдь высъ', 'Ѣдь предчерчь', 'острецо', 'чажесь', 'двоострецо', 'двочажесь',
|
39
|
+
'кратьцо', 'крапка', 'двокрапка',
|
40
|
+
'азъ', 'азъ выносъ', 'азъ инъ', 'большѣ', 'буки',
|
41
|
+
'буки выносъ', 'вѣдѣ выносъ', 'вершина глася', 'възметна буква',
|
42
|
+
'възметъ', 'возъгласъ', 'возъгласъ вель', 'восемь', 'вранъ',
|
43
|
+
'въводъ', 'вѣдѣ', 'гервь', 'глава Маркова', 'глаголь',
|
44
|
+
'глаголь твердъ', 'глаголь выносъ', 'гье', 'два', 'двоеточіе',
|
45
|
+
'девѧть', 'гервь выносъ', 'дже', 'добро', 'добро выносъ',
|
46
|
+
'добро мягъ', 'добро удлинь', 'дѣлитель', 'ере', 'ери', 'ери еръ съузь',
|
47
|
+
'ери съузь', 'ериі', 'ериі еръ съузь', 'ериі съузь', 'еръ', 'еръ высъ',
|
48
|
+
'еры', 'еры вынось', 'еры еръ', 'еры еръ съузь', 'еры съузь', 'ерь',
|
49
|
+
'ерь вынось', 'есть', 'есть выносъ', 'есть шыръ', 'живете',
|
50
|
+
'живете выносъ', 'запѧта', 'звательцо', 'звёздочка', 'земля',
|
51
|
+
'земля выносъ', 'земля ꙁ', 'знакъ вопрось', 'знакъ воскличь', 'иже',
|
52
|
+
'і', 'икъ', 'ичокъ', 'иже инъ вынось', 'икъ инъ вынось',
|
53
|
+
'кавыка', 'кавыка выносъ', 'кавыкы обратны', 'кавыкы прямы',
|
54
|
+
'кавычь одина', 'како', 'како выносъ', 'колода',
|
55
|
+
'колода', 'копа', 'крест освящающъ', 'крест освящающъ дужь',
|
56
|
+
'крестикъ сносочь', 'крестъ и҃-конечь', 'крестъ и҃-конечь очерчь',
|
57
|
+
'крестъ равносторонъ изразьцъ', 'крестъ равносторонъ изразьцъ въ кругѣ',
|
58
|
+
'крестъ равносторонъ изразьцъ въ нижемъ полукругѣ',
|
59
|
+
'крестъ равносторонъ изразьцъ очерчь въ кругѣ',
|
60
|
+
'крестъ равносторонъ изразьцъ очерчь въ нижемъ полукругѣ',
|
61
|
+
'крестъ равносторонь очерчь изразьцъ', 'кривька', 'ктому', 'кье',
|
62
|
+
'легіонъ', 'леодръ', 'лье', 'люди',
|
63
|
+
'люди выносъ', 'люди мягъ', 'меньшѣ', 'мыслете', 'мыслете выносъ',
|
64
|
+
'мыслете мягъ', 'мѣта', 'нашъ', 'нашъ выносъ', 'нашъ мягъ',
|
65
|
+
'нье', 'обратный дѣлитель', 'один', 'омега', 'оникъ', 'онъ',
|
66
|
+
'онъ выносъ', 'онъ двоенъ', 'онъ двоенъ одинокъ', 'онъ многоокъ',
|
67
|
+
'онъ съкрестъ', 'онъ узъ', 'онъ шыръ', 'онъ шыръ одинокъ',
|
68
|
+
'онъ шыръ одинъкъ', 'запинка глася', 'отого', 'паеръ', 'паеръ выносъ',
|
69
|
+
'палочка', 'переносъ', 'песъ', 'петелка', 'подчеркъ', 'покои',
|
70
|
+
'покои выносъ', 'покрытіе', 'препинаніе а',
|
71
|
+
'препинаніе б', 'препинаніе в', 'препинаніе г', 'препинаніе д',
|
72
|
+
'препинаніе е', 'препинаніе ж', 'пробѣлъ', 'пущь', 'пѧть', 'равно',
|
73
|
+
'распѣвъ въ слогѣ', 'рьцы', 'рьцы выносъ', 'рѣшётка',
|
74
|
+
'семь', 'сирѣчь', 'скобка закрывающа', 'скобка изразьна закрывающа',
|
75
|
+
'скобка изразьна открывающа', 'скобка открывающа',
|
76
|
+
'скобка прямочерта закрывающа', 'скобка прямочерта открывающа', 'слово',
|
77
|
+
'слово выносъ', 'слово подстрочь', 'слово твердо выносъ',
|
78
|
+
'сотка', 'твердо', 'твердо выносъ', 'твердо высъ', 'твердо тревысъ',
|
79
|
+
'точька запята', 'точька', 'три',
|
80
|
+
'троеточіе одесну несоверше окружено',
|
81
|
+
'троеточіе одесну несоверше окружено очерче',
|
82
|
+
'троеточіе ошую несоверше окружено',
|
83
|
+
'троеточіе ошую несоверше окружено очерче', 'тше', 'тысяча', 'тьма',
|
84
|
+
'тьматемъ', 'укикъ', 'укъ', 'укъ выносъ', 'умилительцо',
|
85
|
+
'умноженіе', 'фертъ', 'фертъ вынось', 'ѳита выносъ', 'хѣръ',
|
86
|
+
'хѣръ выносъ', 'цы', 'цы въгнутъ', 'цы выносъ', 'цѧтокъ', 'червь',
|
87
|
+
'червь выносъ', 'червь чашевидь', 'черта', 'четыре', 'ша',
|
88
|
+
'ша выносъ', 'шта', 'шта въгнутъ', 'шесть',
|
89
|
+
'шта выносъ', 'ща', 'ынъ', 'это', 'юсъ', 'юсъ вель',
|
90
|
+
'юсъ вель выносъ', 'юсъ вель двуногъ', 'юсъ выносъ', 'юсъ зеркаль',
|
91
|
+
'юсъ кратъ', 'юсъ малъ', 'юсъ малъ выносъ', 'юсъ малъ подчёрчь',
|
92
|
+
'юсъ малъ подъчерчь', 'юсъ малъ прогнутъ', 'юсъ средь',
|
93
|
+
'я', 'ѣдь', 'ѣдь выносъ', 'ѣдь высъ',
|
94
|
+
'ѣдь предчерчь', 'яма глася', 'ꙇожъ', 'ѕвездочка', 'ѕвездочка сносоча',
|
95
|
+
'ѕело', 'ѕело зеркаль', 'ѕело мягъ', 'ѕело ꙁ', 'Омега веля', 'Омега шыръ',
|
96
|
+
'Отъ', 'омега веля', 'омега шыръ', 'отъ', 'Ксы', 'ксы', 'Псы', 'псы',
|
97
|
+
'Ѳита', 'ѳита', 'Іжица', 'іжица', 'Ꙇазъ', 'Ꙇоть',
|
98
|
+
'Ꙇазъ пречерчь', 'Ꙇі', 'Ꙇюсъ вель', 'Ꙇюсъ малъ',
|
99
|
+
'Ꙇюсъ малъ подчёрчь', 'Ꙇѣдь', 'Ꙇесть',
|
100
|
+
'ꙇазъ', 'ꙇазъ выносъ', 'ꙇазъ пречерчь', 'ꙇоть',
|
101
|
+
'ꙇі', 'ꙇюсъ вель', 'ꙇюсъ вель выносъ', 'ꙇюсъ малъ',
|
102
|
+
'ꙇюсъ малъ подчёрчь', 'ꙇѣдь', 'ꙇесть',
|
103
|
+
'двоскоба шуя', 'двоскоба десна', 'двокавычь нижя', 'двокавычь десна',
|
104
|
+
'двокавычь шуя', 'кавычь шуя', 'кавычь десна', 'кавычь нижя',
|
105
|
+
'подъглавокъ', 'преносъ мягъ', 'кавычь двоина', 'преносъ', 'вдохъ', 'стои',
|
106
|
+
'закавыка', 'уголъ', 'придыхъ', 'движеніе гласа восходяще',
|
107
|
+
'движеніе гласа нисходяще', 'запинка пѣнія',
|
108
|
+
'преносъ долъгъ',
|
109
|
+
]
|
110
|
+
|
111
|
+
Useful = [
|
112
|
+
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
|
113
|
+
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
|
114
|
+
'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
|
115
|
+
't', 'u', 'v', 'w', 'x', 'y', 'z', 'Ꙇожъ', 'Ѕело', 'Ѕело зеркаль',
|
116
|
+
'Ѕело мягъ', 'Ѕело ꙁ', 'Азъ', 'Азъ инъ', 'Буки', 'Вѣдѣ', 'Гервь',
|
117
|
+
'Глаголь', 'Глаголь твердъ', 'Гье', 'Дже', 'Дже', 'Добро', 'Добро мягъ',
|
118
|
+
'Добро удлинь', 'Ере', 'Ери', 'Ери еръ', 'Ери еръ', 'Ери еръ съузь',
|
119
|
+
'Ери съузь', 'Ериі', 'Ериі еръ', 'Ериі еръ', 'Ериі еръ съузь',
|
120
|
+
'Ериі съузь', 'Еръ', 'Еръ высъ', 'Еры', 'Еры еръ', 'Еры еръ съузь',
|
121
|
+
'Еры съузь', 'Ерь', 'Есть', 'Есть чажесь', 'Есть шыръ', 'Живете', 'Земля',
|
122
|
+
'Земля ꙁ', 'Иже', 'Иже чажесь', 'Иже ётъ', 'І',
|
123
|
+
'Икъ', 'Како', 'Копа', 'Кье', 'Лье', 'Люди',
|
124
|
+
'Люди мягъ', 'Мыслете', 'Мыслете мягъ', 'Нашъ', 'Нашъ мягъ', 'Нье',
|
125
|
+
'Омега', 'Оникъ', 'Онъ', 'Онъ двоенъ', 'Онъ двоенъ одинокъ',
|
126
|
+
'Онъ съкрестъ', 'Онъ узъ', 'Онъ шыръ', 'Онъ шыръ двуокъ',
|
127
|
+
'Онъ шыръ одинокъ', 'Покои', 'Рьцы', 'Слово', 'Слово подстрочь', 'Твердо',
|
128
|
+
'Твердо высъ', 'Твердо тревысъ', 'Тше', 'Укикъ', 'Укъ', 'Фертъ', 'Хѣръ',
|
129
|
+
'Цы', 'Цы въгнутъ', 'Червь', 'Червь чашевидь', 'Ша', 'Шта', 'Шта въгнутъ',
|
130
|
+
'Ща', 'Ынъ', 'Это', 'Юсъ', 'Юсъ вель', 'Юсъ вель двуногъ', 'Юсъ зеркаль',
|
131
|
+
'Юсъ кратъ', 'Юсъ малъ', 'Юсъ малъ подчёрчь',
|
132
|
+
'Юсъ малъ подъчерчь', 'Юсъ малъ прогнутъ', 'Юсъ средь', 'Я', 'Ѣдь',
|
133
|
+
'Ѣдь высъ', 'Ѣдь предчерчь',
|
134
|
+
'азъ', 'азъ инъ', 'буки',
|
135
|
+
'вѣдѣ', 'гервь', 'глава Маркова', 'глаголь',
|
136
|
+
'глаголь твердъ', 'гье',
|
137
|
+
'дже', 'добро',
|
138
|
+
'добро мягъ', 'добро удлинь', 'ере', 'ери', 'ери еръ съузь',
|
139
|
+
'ери съузь', 'ериі', 'ериі еръ съузь', 'ериі съузь', 'еръ', 'еръ высъ',
|
140
|
+
'еры', 'еры еръ', 'еры еръ съузь', 'еры съузь', 'ерь',
|
141
|
+
'есть', 'есть шыръ', 'живете',
|
142
|
+
'земля',
|
143
|
+
'земля ꙁ', 'иже',
|
144
|
+
'і', 'икъ',
|
145
|
+
'како',
|
146
|
+
'копа',
|
147
|
+
'кье',
|
148
|
+
'лье', 'люди',
|
149
|
+
'люди мягъ', 'мыслете',
|
150
|
+
'мыслете мягъ', 'нашъ', 'нашъ мягъ',
|
151
|
+
'нье', 'омега', 'оникъ', 'онъ',
|
152
|
+
'онъ двоенъ', 'онъ двоенъ одинокъ', 'онъ многоокъ',
|
153
|
+
'онъ съкрестъ', 'онъ узъ', 'онъ шыръ', 'онъ шыръ одинокъ',
|
154
|
+
'онъ шыръ одинъкъ',
|
155
|
+
'покои',
|
156
|
+
'рьцы',
|
157
|
+
'слово',
|
158
|
+
'слово подстрочь',
|
159
|
+
'твердо', 'твердо высъ', 'твердо тревысъ',
|
160
|
+
'тше',
|
161
|
+
'укикъ', 'укъ',
|
162
|
+
'фертъ', 'хѣръ',
|
163
|
+
'цы', 'цы въгнутъ', 'червь',
|
164
|
+
'червь чашевидь', 'ша',
|
165
|
+
'шта', 'шта въгнутъ',
|
166
|
+
'ща', 'ынъ', 'это', 'юсъ', 'юсъ вель',
|
167
|
+
'юсъ вель двуногъ', 'юсъ зеркаль',
|
168
|
+
'юсъ кратъ', 'юсъ малъ', 'юсъ малъ подчёрчь',
|
169
|
+
'юсъ малъ подъчерчь', 'юсъ малъ прогнутъ', 'юсъ средь',
|
170
|
+
'я', 'ѣдь', 'ѣдь высъ',
|
171
|
+
'ѣдь предчерчь', 'ꙇожъ',
|
172
|
+
'ѕело', 'ѕело зеркаль', 'ѕело мягъ', 'ѕело ꙁ', 'Омега веля', 'Омега шыръ',
|
173
|
+
'Отъ', 'омега веля', 'омега шыръ', 'отъ', 'Ксы', 'ксы', 'Псы', 'псы',
|
174
|
+
'Ѳита', 'ѳита', 'Іжица', 'іжица', 'Ꙇазъ', 'Ꙇоть',
|
175
|
+
'Ꙇазъ пречерчь', 'Ꙇі', 'Ꙇюсъ вель', 'Ꙇюсъ малъ',
|
176
|
+
'Ꙇюсъ малъ подчёрчь', 'Ꙇѣдь', 'Ꙇесть',
|
177
|
+
'ꙇазъ', 'ꙇазъ пречерчь', 'ꙇоть',
|
178
|
+
'ꙇі', 'ꙇюсъ вель', 'ꙇюсъ малъ',
|
179
|
+
'ꙇюсъ малъ подчёрчь', 'ꙇѣдь', 'ꙇесть',
|
180
|
+
]
|
181
|
+
|
182
|
+
private
|
183
|
+
|
184
|
+
def яти_знаци(знч, имя, цѣль_i)
|
185
|
+
имяна_н = имя.split(',').map do |ѯ| ѯ.strip end
|
186
|
+
имя_н = [] # п - письмене (текст, строка)
|
187
|
+
нов_зн = имяна_н.each_comby(:backward) do |съчета|
|
188
|
+
next if съчета.size <= 1
|
189
|
+
dbp24 "[яти_знаци]> съчета: #{съчета.inspect}"
|
190
|
+
нов_зн = ''
|
191
|
+
ли_зн_п = съчета.each do |а|
|
192
|
+
знаци_нн = @кс[:сѣтка][а.join(',')]
|
193
|
+
dbp22 "[яти_знаци]> знаци_нн: #{знаци_нн.inspect}"
|
194
|
+
if знаци_нн
|
195
|
+
цѣль_зн_п = знаци_нн.each do |знаци_н|
|
196
|
+
break знаци_н[цѣль_i] if знаци_н[цѣль_i]
|
197
|
+
end
|
198
|
+
if цѣль_зн_п.class == String
|
199
|
+
dbp22 "[яти_знаци]> цѣль_зн_п: #{цѣль_зн_п.inspect}"
|
200
|
+
нов_зн << цѣль_зн_п
|
201
|
+
else
|
202
|
+
break nil
|
203
|
+
end
|
204
|
+
else
|
205
|
+
break nil
|
206
|
+
end
|
207
|
+
end
|
208
|
+
return нов_зн if ли_зн_п
|
209
|
+
end
|
210
|
+
nil
|
211
|
+
end
|
212
|
+
|
213
|
+
def initialize
|
214
|
+
кс_i = 0
|
215
|
+
сѣтка = {}
|
216
|
+
ширь = []
|
217
|
+
ширь_б = []
|
218
|
+
буквы = []
|
219
|
+
знаци = {}
|
220
|
+
@кс = { :ширь => ширь, :ширь_б => ширь_б,
|
221
|
+
:сѣтка => сѣтка, :имяна => [],
|
222
|
+
:буквы => буквы, :знаци => знаци,
|
223
|
+
:правило => {}, :правило_б => {},
|
224
|
+
}
|
225
|
+
|
226
|
+
home = begin
|
227
|
+
ps = Gem::GemPathSearcher.new
|
228
|
+
dir = ps.lib_dirs_for(ps.find('priekhlazh')).split('/')
|
229
|
+
dir.pop
|
230
|
+
dir.join('/')
|
231
|
+
rescue NameError
|
232
|
+
'.'
|
233
|
+
end
|
234
|
+
|
235
|
+
($: | [ '.', '/usr/share/priehlazx', '../share', home + '/share' ] ).each do |dir|
|
236
|
+
begin; Dir.new(dir).entries.delete_if { |x| x !~ /\.(cp|скс)$/ }
|
237
|
+
rescue; []
|
238
|
+
end.each do |file_cp|
|
239
|
+
begin
|
240
|
+
кс = YAML.load(IO.read(File.join(dir,file_cp)))
|
241
|
+
rescue
|
242
|
+
$stderr.puts "Вънми: нѣсть мощно разъбрати письмена YAML въ '#{file_cp}'. се ошибка: #{$!}"
|
243
|
+
next
|
244
|
+
end
|
245
|
+
кс_имя = кс['имя'].to_sym
|
246
|
+
dbp14 "------------"
|
247
|
+
dbp14 "#{кс_имя}"
|
248
|
+
|
249
|
+
@кс[:имяна] << кс_имя
|
250
|
+
|
251
|
+
ширь_б_н = []
|
252
|
+
ширь_н = []
|
253
|
+
кс['знаци'].each do |кс_знц, кс_знч|
|
254
|
+
def завѣръ_знаци(кс_знц, кс_имя)
|
255
|
+
if кс_знц =~ /,/
|
256
|
+
кс_знц.split(',').each do |имя|
|
257
|
+
unless @@Знаци.include? имя.strip
|
258
|
+
$stderr.puts "Вънми: имя знаця '#{имя}' въ страницѣ '#{кс_имя}' нѣсть въ спискѣ имянъ"
|
259
|
+
return false
|
260
|
+
end
|
261
|
+
end
|
262
|
+
else
|
263
|
+
unless @@Знаци.include? кс_знц.strip
|
264
|
+
$stderr.puts "Вънми: имя знаця '#{кс_знц}' въ страницѣ '#{кс_имя}' нѣсть въ спискѣ имянъ"
|
265
|
+
return false
|
266
|
+
end
|
267
|
+
end
|
268
|
+
true
|
269
|
+
end
|
270
|
+
|
271
|
+
unless кс_знч and not кс_знч.to_s.empty?
|
272
|
+
$stderr.puts "Вънми: знаць '#{кс_знц}' въ страницѣ '#{кс_имя}' имѣетъ пусто значеніе"
|
273
|
+
end
|
274
|
+
|
275
|
+
next unless завѣръ_знаци(кс_знц, кс_имя) and кс_знч and not кс_знч.to_s.empty?
|
276
|
+
|
277
|
+
сѣтка[кс_знц] = [[]] unless сѣтка[кс_знц]
|
278
|
+
|
279
|
+
зн_нн_нов = []
|
280
|
+
сѣтка_имя = сѣтка[кс_знц]
|
281
|
+
кс_знч.to_s.split(',').each do |знч|
|
282
|
+
знч = знч.strip.gsub(/ѯ[\da-fA-F]+;?/u) do |a|
|
283
|
+
aa = a.unpack('U*')
|
284
|
+
aa.shift
|
285
|
+
aa.pop if aa.last == 0x3b
|
286
|
+
[ aa.pack('U*').to_i(16) ].pack('U*')
|
287
|
+
end
|
288
|
+
dbp14 "#{кс_знц} = #{знч}"
|
289
|
+
зн_нн = сѣтка_имя.dup
|
290
|
+
зн_нн.each do |зн_н| зн_н[кс_i] = знч end
|
291
|
+
зн_нн_нов |= зн_нн.map {|x| x.dup }
|
292
|
+
dbp18 "#{кс_знц} => #{зн_нн_нов.inspect}"
|
293
|
+
|
294
|
+
#добавление в ширину
|
295
|
+
ширь_н << знч
|
296
|
+
ширь_б_н << знч if кс_знц.split(',').each do |имя| break nil unless Useful.include?(имя) end
|
297
|
+
end
|
298
|
+
сѣтка_имя.replace зн_нн_нов
|
299
|
+
end if кс['знаци']
|
300
|
+
|
301
|
+
#ширь
|
302
|
+
def разбери_ширь(ширь, кс_i, ширь_н)
|
303
|
+
нач = кон = nil
|
304
|
+
ширь[кс_i] = []
|
305
|
+
ширь_н.compact.map {|x| x.unpack('U*') }.flatten.sort.uniq.each do |знч|
|
306
|
+
if not нач
|
307
|
+
нач = кон = знч
|
308
|
+
elsif кон + 1 == знч
|
309
|
+
кон += 1
|
310
|
+
else
|
311
|
+
ширь[кс_i] << ([ нач ].pack('U*')..[ кон ].pack('U*'))
|
312
|
+
нач = кон = знч
|
313
|
+
end
|
314
|
+
end
|
315
|
+
ширь[кс_i] << ([ нач ].pack('U*')..[ кон ].pack('U*')) if нач
|
316
|
+
end
|
317
|
+
|
318
|
+
#ширь букова
|
319
|
+
разбери_ширь(ширь, кс_i, ширь_н)
|
320
|
+
разбери_ширь(ширь_б, кс_i, ширь_б_н)
|
321
|
+
|
322
|
+
def створи_правило(шири)
|
323
|
+
одинкы = ''
|
324
|
+
шири.each do |ширь|
|
325
|
+
def re_c(c)
|
326
|
+
m = c.match(/(?:([+\[\]\\().*?{}^$\/|]))/u)
|
327
|
+
m ? '\\' + m[1] : c
|
328
|
+
end
|
329
|
+
(b,e) = [ re_c(ширь.begin), re_c(ширь.end) ]
|
330
|
+
одинкы << (ширь.begin == ширь.end ? b : "#{b}-#{e}")
|
331
|
+
end
|
332
|
+
одинкы
|
333
|
+
end
|
334
|
+
|
335
|
+
@кс[:правило][кс_имя] = створи_правило(ширь[кс_i])
|
336
|
+
@кс[:правило_б][кс_имя] = створи_правило(ширь_б[кс_i])
|
337
|
+
|
338
|
+
буквы[кс_i] = {}
|
339
|
+
|
340
|
+
кс_i += 1
|
341
|
+
end; end
|
342
|
+
|
343
|
+
# разъкрытіе неѥдинныхъ знацей
|
344
|
+
@кс[:имяна].each_index do |кс_i|
|
345
|
+
dbp22 "Кодачица #{@кс[:имяна][кс_i]}"
|
346
|
+
сѣтка.each do |имя, знач_нн|
|
347
|
+
знач_нн.each do |знач_н|
|
348
|
+
next if знач_н[кс_i]
|
349
|
+
dbp22 "Неполна дружь #{знач_н.inspect}"
|
350
|
+
ново_знч = яти_знаци(знач_н, имя, кс_i)
|
351
|
+
if ново_знч
|
352
|
+
знач_н[кс_i] = ново_знч
|
353
|
+
dbp24 "Сотвореніе нова значенія #{ново_знч.inspect} для дружи #{знач_н.inspect}"
|
354
|
+
end
|
355
|
+
end
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
#сортировка слов по первой букве.
|
360
|
+
сѣтка.each do |имя, знач_нн|
|
361
|
+
знач_нн.each do |знач_н|
|
362
|
+
@кс[:имяна].each_index do |кс_i|
|
363
|
+
знач = знач_н[кс_i]
|
364
|
+
next unless знач
|
365
|
+
dbp24 "Значеніе #{знач.inspect} << #{знач_н.inspect}"
|
366
|
+
бук = знач.get(0)
|
367
|
+
буквы[кс_i][бук] = {} unless буквы[кс_i][бук]
|
368
|
+
буквы[кс_i][бук][знач] = [] unless буквы[кс_i][бук][знач]
|
369
|
+
буквы[кс_i][бук][знач] << знач_н
|
370
|
+
end
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
#полученіе словаря обратныхъ значеній имянъ знацей
|
375
|
+
сѣтка.each do |знц, знч_нн|
|
376
|
+
знч_нн.each do |знч_н|
|
377
|
+
знаци[знч_н] = знц
|
378
|
+
end
|
379
|
+
end
|
380
|
+
end
|
381
|
+
|
382
|
+
public
|
383
|
+
|
384
|
+
def цѣль=(cp)
|
385
|
+
cp = cp.to_sym
|
386
|
+
if @кс[:имяна].include?(cp)
|
387
|
+
@цѣль = cp
|
388
|
+
else
|
389
|
+
raise "Се ошибка: невѣсть къ цѣлева кодачица #{cp}, кодачицы доступныя суть: #{@кс[:имяна].join(', ')}"
|
390
|
+
end
|
391
|
+
end
|
392
|
+
|
393
|
+
def истокъ=(cp)
|
394
|
+
cp = cp.to_sym
|
395
|
+
if @кс[:имяна].include?(cp)
|
396
|
+
@истокъ = cp
|
397
|
+
else
|
398
|
+
raise "Се ошибка: невѣсть къ исходна кодачица #{cp}, кодачицы доступныя суть: #{@кс[:имяна].join(', ')}"
|
399
|
+
end
|
400
|
+
end
|
401
|
+
|
402
|
+
def кака_кода(писмя)
|
403
|
+
писмя = писмя.to_s
|
404
|
+
вѣса_сл = {}
|
405
|
+
@кс[:имяна].each_index do |кс_i|
|
406
|
+
шири = @кс[:ширь][кс_i]
|
407
|
+
|
408
|
+
matched = 0
|
409
|
+
unmatched = 0
|
410
|
+
писмя.each_char do |бк|
|
411
|
+
шири.each do |ширь|
|
412
|
+
matched += 1 if ширь === бк
|
413
|
+
end
|
414
|
+
end
|
415
|
+
|
416
|
+
вѣса_сл[@кс[:имяна][кс_i]] = matched
|
417
|
+
end
|
418
|
+
вѣса = вѣса_сл.keys.sort do |ѯ,ѱ|
|
419
|
+
пл = вѣса_сл[ѱ] <=> вѣса_сл[ѯ]
|
420
|
+
пл != 0 ? пл : @цѣль == ѯ ? 1 : @цѣль == ѱ ? -1 :
|
421
|
+
ѯ.to_s <=> ѱ.to_s
|
422
|
+
end
|
423
|
+
вѣса && (not вѣса.empty?) && вѣса[0]
|
424
|
+
end
|
425
|
+
|
426
|
+
def пръ_сл(кс)
|
427
|
+
return nil if кс.to_s.empty?
|
428
|
+
кс = кс.to_sym
|
429
|
+
return nil unless @кс[:имяна].include? кс
|
430
|
+
|
431
|
+
"[#{@кс[:правило_б][кс]}]"
|
432
|
+
end
|
433
|
+
|
434
|
+
def пръ(кс)
|
435
|
+
return nil if кс.to_s.empty?
|
436
|
+
кс = кс.to_sym
|
437
|
+
return nil unless @кс[:имяна].include? кс
|
438
|
+
|
439
|
+
"[#{@кс[:правило][кс]}]"
|
440
|
+
end
|
441
|
+
|
442
|
+
def [](str)
|
443
|
+
ими(str)
|
444
|
+
end
|
445
|
+
|
446
|
+
def ими(писмя, цѣль = @цѣль, истокъ = @истокъ)
|
447
|
+
self.цѣль = цѣль
|
448
|
+
цѣль_ѯ = @кс[:имяна].index(@цѣль)
|
449
|
+
return nil unless цѣль_ѯ # TODO raise
|
450
|
+
|
451
|
+
писмя = писмя.to_s
|
452
|
+
истокъ = (истокъ || кака_кода(писмя)).to_sym
|
453
|
+
исх_ѯ = @кс[:имяна].index(истокъ)
|
454
|
+
return nil unless исх_ѯ # TODO raise
|
455
|
+
|
456
|
+
return nil unless @кс[:сѣтка] # TODO raise
|
457
|
+
плодъ = ''
|
458
|
+
ѯ = 0
|
459
|
+
|
460
|
+
dbp22 "Знак: #{писмя.inspect}"
|
461
|
+
while писмя and not писмя.empty?
|
462
|
+
ѱ = 1
|
463
|
+
знк = писмя.get(0)
|
464
|
+
dbp22 "Знак: #{знк.inspect}"
|
465
|
+
реха = @кс[:буквы][исх_ѯ][знк]
|
466
|
+
|
467
|
+
if реха
|
468
|
+
dbp28 "Реха: #{реха.inspect}"
|
469
|
+
реха_а = []
|
470
|
+
реха.keys.sort do |а,б| б.size <=> а.size end.each do |знач|
|
471
|
+
знач_н = реха[знач]
|
472
|
+
реха_а << реха[знач].sort do |а,б| а[цѣль_ѯ].size <=> б[цѣль_ѯ].size end
|
473
|
+
end
|
474
|
+
|
475
|
+
dbp28 "Нова реха: #{реха_а.inspect}"
|
476
|
+
пл = реха_а.flatten(1).each do |а|
|
477
|
+
dbp24 "Запись: #{а.inspect}"
|
478
|
+
if а[исх_ѯ] and писмя =~ /^#{а[исх_ѯ].to_res}(.*)/u
|
479
|
+
dbp24 "Попало: #{писмя.inspect} =~ #{а.inspect}"
|
480
|
+
if а[цѣль_ѯ]
|
481
|
+
писмя = $1
|
482
|
+
ѱ = а[исх_ѯ].size
|
483
|
+
break а[цѣль_ѯ]
|
484
|
+
end
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
488
|
+
if (пл.class == Array) or (пл.class == String and пл =~ /\0/)
|
489
|
+
$stderr.puts "Вънми: Се знаць '#{знк}'(#{sprintf "ѯ%x", знк.ord})" +
|
490
|
+
" кодачицы #{истокъ} отъторжеся, бо нѣсть мощно прѣхложити и въ кодачицу #{цѣль}"
|
491
|
+
писмя =~ /^.(.*)/u; писмя = $1
|
492
|
+
elsif пл.class == String
|
493
|
+
плодъ << пл
|
494
|
+
else
|
495
|
+
$stderr.puts "Невѣдома ошибка: sѣло страньнъ класъ #{пл.class} вещи списка"
|
496
|
+
писмя =~ /^.(.*)/u; писмя = $1
|
497
|
+
end
|
498
|
+
else
|
499
|
+
$stderr.puts "Вънми: Се знаць '#{знк}'(#{sprintf "ѯ%x", знк.ord}) кодачицы #{истокъ} отъторжеся, зане не обретенъ въ онои"
|
500
|
+
писмя =~ /^.(.*)/u; писмя = $1
|
501
|
+
end
|
502
|
+
|
503
|
+
ѯ += ѱ
|
504
|
+
end
|
505
|
+
|
506
|
+
плодъ
|
507
|
+
end
|
508
|
+
alias :go :ими
|
509
|
+
end
|
510
|
+
|