byk 0.4.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG.md +22 -2
- data/README.md +96 -45
- data/exe/byk +51 -0
- data/ext/byk/byk.c +312 -246
- data/lib/byk/core_ext/string.rb +8 -0
- data/lib/byk/safe.rb +14 -0
- data/lib/byk/version.rb +1 -1
- data/lib/byk.rb +2 -14
- data/spec/byk_spec.rb +186 -72
- metadata +48 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5cb843eb31c5c618dc10608759b5668bd8db46eb38911381bacd693f9b4635bf
|
4
|
+
data.tar.gz: '0085a83cbf114273d5fc9b64cca6d8d4c19542a36614eb8d89c80eb0b036176f'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4fc4c750b29da3cf64b5d0cea0275f41e7f5cae4192a223e0d1f344505e8ab6c045b1b772f29d954ca4310062b9ff7ac1b07d1d6dc17a5c6d8969f03f7f94340
|
7
|
+
data.tar.gz: f8909c3816411619ca8a2239b07d0bc9aa48663ac5395f4a8d6fd6735d5c8f252ff98977dcba970b5a3c21eae9bf55f63fd40e75ad0918f4f670a5e2b24ca239
|
data/CHANGELOG.md
CHANGED
@@ -1,9 +1,29 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
### Byk 1.1.0 (2022-02-02)
|
4
|
+
|
5
|
+
* Removed string tainting, it is deprecated and planned for removal
|
6
|
+
* Upgraded development dependencies and required Ruby version
|
7
|
+
|
8
|
+
### Byk 1.0.0 (2016-04-09)
|
9
|
+
|
10
|
+
* Introduced `#to_cyrillic` and `#to_cyrillic!`
|
11
|
+
* Introduced console utility
|
12
|
+
|
13
|
+
### Byk 0.6.0 (2015-04-25)
|
14
|
+
|
15
|
+
* Introduced module methods and the optional safe require
|
16
|
+
* Documented the methods
|
17
|
+
* Upgraded spec suite
|
18
|
+
|
19
|
+
### Byk 0.5.0 (2015-04-18)
|
20
|
+
|
21
|
+
* Performance tuning and refactoring, up to 5x speedup
|
22
|
+
* Dropped the unused optional arg
|
23
|
+
|
3
24
|
### Byk 0.4.0 (2015-04-17)
|
4
25
|
|
5
|
-
* Performance tuning and refactoring
|
6
|
-
* Updated benchmark
|
26
|
+
* Performance tuning and refactoring
|
7
27
|
* Introduced changelog
|
8
28
|
|
9
29
|
### Byk 0.3.0 (2015-04-16)
|
data/README.md
CHANGED
@@ -2,100 +2,151 @@ Byk
|
|
2
2
|
===
|
3
3
|
|
4
4
|
[](https://rubygems.org/gems/byk)
|
5
|
-
[](https://github.com/topalovic/byk/actions/workflows/tests.yml)
|
6
6
|
|
7
|
-
|
8
|
-
<br />
|
9
|
-
<sub>Inspired by @dejan's
|
10
|
-
[nice little gem](https://github.com/dejan/srbovanje),
|
11
|
-
this one comes with a C-optimized twist</sub>
|
7
|
+
Руби пакет за брзо пресловљавање ћирилице у латиницу и обратно
|
12
8
|
|
13
9
|

|
14
10
|
|
11
|
+
[[English, please!](README.en.md)]
|
15
12
|
|
16
|
-
##
|
13
|
+
## Инсталација
|
17
14
|
|
18
|
-
|
15
|
+
Byk се може користити као самостални конзолни алат или као `String` додатак у Руби програмима. Не зависи ни од каквих пакета поред програмског језика Руби и стандардних алата за компајлирање <sup>1</sup>.
|
16
|
+
|
17
|
+
Можеш га инсталирати директно:
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
$ gem install byk
|
21
|
+
```
|
22
|
+
|
23
|
+
или додати у `Gemfile` своје апликације:
|
19
24
|
|
20
25
|
```ruby
|
21
26
|
gem "byk"
|
22
27
|
```
|
23
28
|
|
24
|
-
|
29
|
+
<sub><sup>1</sup> За Windows, види [DevKit](https://github.com/oneclick/rubyinstaller/wiki/Development-Kit)</sub>
|
30
|
+
|
31
|
+
|
32
|
+
## Употреба
|
33
|
+
|
34
|
+
### Као самостални алат
|
35
|
+
|
36
|
+
Ево прегледа могућности конзолног алата:
|
25
37
|
|
26
38
|
```
|
27
|
-
$
|
39
|
+
$ byk --help
|
40
|
+
usage: byk [options] [files]
|
41
|
+
|
42
|
+
options:
|
43
|
+
-c, --cyrillic convert input to Cyrillic (default)
|
44
|
+
-l, --latin convert input to Latin
|
45
|
+
-a, --ascii convert input to "ASCII Latin"
|
46
|
+
-v, --version show version
|
28
47
|
```
|
29
48
|
|
30
|
-
|
49
|
+
За превод "у лету", проследи текст команди:
|
31
50
|
|
51
|
+
```sh
|
52
|
+
$ byk -a <<< "Вук Стефановић Караџић"
|
53
|
+
Vuk Stefanovic Karadzic
|
32
54
|
```
|
33
|
-
|
55
|
+
|
56
|
+
Алтернативно, позови команду, унеси текст за превод и обележи крај уноса помоћу <kbd>Ctrl</kbd> <kbd>D</kbd>:
|
57
|
+
|
58
|
+
```sh
|
59
|
+
$ byk
|
60
|
+
a u ruke Mandušića Vuka
|
61
|
+
biće svaka puška ubojita!
|
62
|
+
^D
|
63
|
+
а у руке Мандушића Вука
|
64
|
+
биће свака пушка убојита!
|
65
|
+
```
|
66
|
+
|
67
|
+
Превод се шаље на стандардни излаз, те га можеш преусмерити по потреби. На пример, за превод текстуалне датотеке на ћирилицу и чување превода:
|
68
|
+
|
69
|
+
```sh
|
70
|
+
$ byk lat.txt > cir.txt
|
34
71
|
```
|
35
72
|
|
36
73
|
|
37
|
-
|
74
|
+
### Као `String` додатак
|
38
75
|
|
39
|
-
|
76
|
+
У случају да не користиш Bundler, увези пакет "ручно":
|
40
77
|
|
41
78
|
```ruby
|
42
79
|
require "byk"
|
43
80
|
```
|
44
81
|
|
45
|
-
|
82
|
+
што ће проширити `String` новим методама:
|
46
83
|
|
47
84
|
```ruby
|
48
|
-
"
|
49
|
-
"Шеширџија".
|
50
|
-
"
|
85
|
+
"Šeširdžija".to_cyrillic #=> "Шеширџија"
|
86
|
+
"Шеширџија".to_latin #=> "Šeširdžija"
|
87
|
+
"Шеширџија".to_ascii_latin #=> "Sesirdzija"
|
51
88
|
```
|
52
89
|
|
53
|
-
|
90
|
+
и њиховим деструктивним верзијама:
|
54
91
|
|
55
92
|
```ruby
|
56
|
-
text = "
|
57
|
-
text.
|
58
|
-
text
|
59
|
-
text.to_ascii_latin! # => "Zvazbuka"
|
60
|
-
text # => "Zvazbuka"
|
93
|
+
text = "Šeširdžija"
|
94
|
+
text.to_ascii_latin! #=> "Sesirdzija"
|
95
|
+
text #=> "Sesirdzija"
|
61
96
|
```
|
62
97
|
|
63
|
-
|
64
|
-
|
98
|
+
#### "Безбедан" увоз
|
99
|
+
|
100
|
+
У случају да не желиш да проширујеш `String`, можеш извршити "безбедан" увоз:
|
101
|
+
|
102
|
+
```ruby
|
103
|
+
# унутар Gemfile-а:
|
104
|
+
gem "byk", require: "byk/safe"
|
105
|
+
|
106
|
+
# иначе:
|
107
|
+
require "byk/safe"
|
108
|
+
```
|
109
|
+
|
110
|
+
па се ослонити на методе модула:
|
65
111
|
|
66
112
|
```ruby
|
67
|
-
"
|
68
|
-
"ĐORĐE Đorđević".to_ascii_latin # => "DJORDJE Djordjevic"
|
113
|
+
Byk.to_latin("Жвазбука") #=> "Žvazbuka"
|
69
114
|
```
|
70
115
|
|
71
116
|
|
72
|
-
##
|
117
|
+
## Напомене
|
73
118
|
|
74
|
-
|
75
|
-
my hardware. YMMV of course.
|
119
|
+
Ретки случајеви диграфа које треба сачувати код превођења у ћирилицу нису узети у разматрање: _Танјуг_, _надживети_ и слично.
|
76
120
|
|
121
|
+
С друге стране, методе за латинизацију исправно преводе [велике диграфе](http://sr.wikipedia.org/wiki/Гајица#.D0.94.D0.B8.D0.B3.D1.80.D0.B0.D1.84.D0.B8):
|
77
122
|
|
78
|
-
|
123
|
+
```ruby
|
124
|
+
"ЉИЉА Љ. Љиљановић".to_latin #=> "LJILJA Lj. Ljiljanović"
|
125
|
+
"ĐORĐE Đ. Đorđević".to_ascii_latin #=> "DJORDJE Dj. Djordjevic"
|
126
|
+
```
|
79
127
|
|
80
|
-
This kind of speed-up might be worthwhile for massive localization
|
81
|
-
projects, e.g. sites supporting dual script content. Remember,
|
82
|
-
`Benchmark` is your friend.
|
83
128
|
|
84
|
-
|
85
|
-
|
86
|
-
|
129
|
+
## Колико брзо је "брзо" пресловљавање?
|
130
|
+
|
131
|
+
Byk је [10-30x бржи](benchmark) од [наивне Руби имплементације](https://github.com/dejan/srbovanje), у зависности од састава улаза и смера превођења.
|
132
|
+
|
133
|
+
|
134
|
+
## Тестирање
|
135
|
+
|
136
|
+
Клонирај пројекат и покрени тестове:
|
137
|
+
|
138
|
+
```
|
139
|
+
$ bundle && bundle exec rake
|
140
|
+
```
|
87
141
|
|
88
142
|
|
89
|
-
##
|
143
|
+
## Компатибилност
|
90
144
|
|
91
|
-
Byk
|
92
|
-
1.8.7 or older due to substantial C API changes between 1.8 and
|
93
|
-
1.9. It doesn't build under Rubinius currently, but I intend to
|
94
|
-
support it in future releases.
|
145
|
+
Byk је подржан само на стандардном Рубију (MRI).
|
95
146
|
|
96
147
|
|
97
|
-
##
|
148
|
+
## Лиценца
|
98
149
|
|
99
|
-
|
150
|
+
Овај пакет је објављен под [МИТ лиценцом](LICENSE).
|
100
151
|
|
101
152
|
Уздравље!
|
data/exe/byk
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "byk/safe"
|
4
|
+
require "optparse"
|
5
|
+
|
6
|
+
trap "SIGINT" do
|
7
|
+
exit 130
|
8
|
+
end
|
9
|
+
|
10
|
+
method_name = :to_cyrillic
|
11
|
+
|
12
|
+
opts = OptionParser.new do |opt|
|
13
|
+
opt.banner = "usage: byk [options] [files]"
|
14
|
+
opt.summary_width = 20
|
15
|
+
|
16
|
+
opt.separator ""
|
17
|
+
opt.separator "options:"
|
18
|
+
|
19
|
+
opt.on("-c", "--cyrillic", "convert input to Cyrillic (default)") do
|
20
|
+
method_name = :to_cyrillic
|
21
|
+
end
|
22
|
+
|
23
|
+
opt.on("-l", "--latin", "convert input to Latin") do
|
24
|
+
method_name = :to_latin
|
25
|
+
end
|
26
|
+
|
27
|
+
opt.on("-a", "--ascii", 'convert input to "ASCII Latin"') do
|
28
|
+
method_name = :to_ascii_latin
|
29
|
+
end
|
30
|
+
|
31
|
+
opt.on_tail("-v", "--version", "show version") do
|
32
|
+
puts Byk::VERSION
|
33
|
+
exit
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
begin
|
38
|
+
opts.parse!
|
39
|
+
rescue OptionParser::InvalidOption => e
|
40
|
+
puts e
|
41
|
+
puts
|
42
|
+
puts opts
|
43
|
+
exit 1
|
44
|
+
end
|
45
|
+
|
46
|
+
begin
|
47
|
+
puts Byk.send(method_name, ARGF.read)
|
48
|
+
rescue => e
|
49
|
+
puts e
|
50
|
+
exit 1
|
51
|
+
end
|