italian-ruby 0.7.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/italian-ruby.gemspec +0 -2
- data/lib/italian/ruby/core_ext/kernel.rb +2 -0
- data/lib/italian/ruby/traduttore.rb +145 -14
- data/lib/italian/ruby/utils/debug.rb +2 -2
- data/lib/italian/ruby/version.rb +1 -1
- metadata +2 -17
- data/lib/italian/ruby/ruby_parser_patches.rb +0 -67
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aedc827ee49cc7cf621b798f94d8ef76b5b612a3a0574f517c6dcdc0e63b2b3b
|
4
|
+
data.tar.gz: f6fdb3bb560d18d7eaeb138686e79af3871d4bcd36915addb82cd93e60755f43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c4ccd909945352f8f572d0fbbb3cf3f2c91846445f68d18c1b015400a1d862ed9aeaf1f51124af7be12bafddb4f98b7fee356d2756f205330d9f88d9f69bc5d
|
7
|
+
data.tar.gz: 04d1adf2f23352a9dfd7f6a8154b5ec09d59eb9cc05840c1eb39582b62024fe963d70d7ebb9713acb9a4e868291eeb67de91d06fe09eabd13c6599d863a45d73
|
data/italian-ruby.gemspec
CHANGED
@@ -28,8 +28,6 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
29
29
|
spec.require_paths = ["lib"]
|
30
30
|
|
31
|
-
spec.add_dependency 'ruby2ruby', '~> 2.4'
|
32
|
-
|
33
31
|
spec.add_development_dependency 'bundler', '~> 2.1'
|
34
32
|
spec.add_development_dependency 'rake', '~> 13.0'
|
35
33
|
spec.add_development_dependency 'rspec', '~> 3.9'
|
@@ -27,6 +27,8 @@ module Kernel
|
|
27
27
|
caller_location_dir = File.dirname caller_locations.first.absolute_path
|
28
28
|
if caller_location_dir.start_with?(Italian::Ruby.translations_dir_path)
|
29
29
|
caller_location_dir = caller_location_dir[Italian::Ruby.translations_dir_path.length..-1]
|
30
|
+
elsif caller_location_dir.include?(".italian-ruby/")
|
31
|
+
caller_location_dir.gsub! ".italian-ruby/", ""
|
30
32
|
end
|
31
33
|
caller_location_file = File.expand_path "#{caller_location_dir}/#{name}"
|
32
34
|
file_to_require = Dir["#{caller_location_file}.{ir,rb}"].compact.first
|
@@ -1,30 +1,161 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require
|
3
|
-
|
4
|
-
require_relative "ruby_parser_patches"
|
2
|
+
require "rainbow"
|
3
|
+
require_relative "utils/debug"
|
5
4
|
|
6
5
|
module Italian
|
7
6
|
module Ruby
|
8
7
|
class Traduttore
|
9
8
|
|
9
|
+
STAMPA_DETTAGLI_TRADUZIONE = false
|
10
|
+
|
11
|
+
class Errore < StandardError
|
12
|
+
attr_accessor :messaggio, :file, :linea, :riga, :posizione
|
13
|
+
|
14
|
+
def initialize(messaggio: nil, file: nil, linea: nil, riga: 0, posizione: 0)
|
15
|
+
@messaggio = messaggio
|
16
|
+
@file = file
|
17
|
+
@linea = linea
|
18
|
+
@riga = riga
|
19
|
+
@posizione = posizione
|
20
|
+
end
|
21
|
+
|
22
|
+
class NonSupportato < Errore; end
|
23
|
+
class IndividuazioneStringa < Errore; end
|
24
|
+
end
|
25
|
+
|
10
26
|
class << self
|
11
27
|
|
12
28
|
def traduci(file)
|
13
29
|
begin
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
"
|
22
|
-
|
23
|
-
|
24
|
-
|
30
|
+
codice_tradotto = File.readlines(file).map.with_index do |linea, riga|
|
31
|
+
traduci_linea file, linea, riga
|
32
|
+
end
|
33
|
+
codice_tradotto.join
|
34
|
+
rescue Italian::Ruby::Traduttore::Errore => errore
|
35
|
+
puts "-----------------------------------------------------------------------------".alzavola
|
36
|
+
puts "Si è verificato un errore durante la traduzione del file `#{errore.file}`."
|
37
|
+
print "L'errore è: "
|
38
|
+
puts "#{errore.classe}.".rosso
|
39
|
+
puts errore.messaggio
|
40
|
+
puts
|
41
|
+
print "Riga: "
|
42
|
+
puts "#{errore.riga}".ciano
|
43
|
+
puts errore.linea
|
44
|
+
puts "^".rjust(errore.posizione + 1, " ").verde_lime
|
45
|
+
puts
|
46
|
+
puts "-----------------------------------------------------------------------------".alzavola
|
47
|
+
exit 1
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def traduci_linea(file, linea, riga)
|
52
|
+
puts "Traduco linea [#{riga}]: #{linea.inspect}".magenta if STAMPA_DETTAGLI_TRADUZIONE
|
53
|
+
posizione_commento = linea.index(%{#}) || linea.length
|
54
|
+
posizione_stringa_singola = linea.index(%{'}) || linea.length
|
55
|
+
posizione_stringa_doppia = linea.index(%{"}) || linea.length
|
56
|
+
contesto = [
|
57
|
+
file, linea, riga,
|
58
|
+
posizione_commento,
|
59
|
+
posizione_stringa_singola,
|
60
|
+
posizione_stringa_doppia ]
|
61
|
+
|
62
|
+
controlla_stringa_singola *contesto
|
63
|
+
controlla_stringa_doppia *contesto
|
64
|
+
|
65
|
+
if posizione_commento < posizione_stringa_doppia
|
66
|
+
pezzi_da_tradurre = [
|
67
|
+
linea[0..posizione_commento],
|
68
|
+
linea[posizione_commento + 1..]
|
69
|
+
]
|
70
|
+
elsif posizione_stringa_doppia < posizione_commento
|
71
|
+
pezzi_da_tradurre = linea.scan( /([^"]*)("[^"]*")([^"]*)/ ).flatten
|
72
|
+
else
|
73
|
+
pezzi_da_tradurre = [ linea ]
|
74
|
+
end
|
75
|
+
|
76
|
+
debug pezzi_da_tradurre if STAMPA_DETTAGLI_TRADUZIONE
|
77
|
+
linea_tradotta = pezzi_da_tradurre.map { |pezzo| traduci_pezzo pezzo }.join
|
78
|
+
|
79
|
+
if STAMPA_DETTAGLI_TRADUZIONE
|
80
|
+
puts "Linea tradotta [#{riga}]: #{linea_tradotta.inspect}".verde_lime
|
81
|
+
puts
|
25
82
|
end
|
83
|
+
linea_tradotta
|
26
84
|
end
|
27
85
|
|
86
|
+
private
|
87
|
+
|
88
|
+
def errore!(classe, messaggio, file, linea, riga, posizione)
|
89
|
+
raise classe.new(messaggio: messaggio, file: file, linea: linea, riga: riga, posizione: posizione)
|
90
|
+
end
|
91
|
+
|
92
|
+
def controlla_stringa_singola(file, linea, riga, posizione_commento, posizione_stringa_singola, posizione_stringa_doppia)
|
93
|
+
if posizione_stringa_singola < posizione_commento and posizione_stringa_singola < posizione_stringa_doppia
|
94
|
+
errore! Errore::NonSupportato, "Le stringhe con singolo apice non sono supportate.", file, linea, riga, posizione_stringa_singola
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def controlla_stringa_doppia(file, linea, riga, posizione_commento, posizione_stringa_singola, posizione_stringa_doppia)
|
99
|
+
return if posizione_commento <= posizione_stringa_doppia
|
100
|
+
|
101
|
+
prossima_posizione_stringa_doppia = linea[posizione_stringa_doppia + 1..].index %{"}
|
102
|
+
if prossima_posizione_stringa_doppia.nil?
|
103
|
+
errore! Errore::IndividuazioneStringa, "Non è stato possibile trovare la terminazione della stringa.", file, linea, riga, posizione_stringa_doppia
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def traduci_pezzo(pezzo)
|
108
|
+
return pezzo if pezzo.nil? or pezzo.length == 0
|
109
|
+
return pezzo if pezzo.start_with? %{#}
|
110
|
+
return pezzo if pezzo.start_with? %{"}
|
111
|
+
|
112
|
+
pezzo.gsub! /(\b)e(\b)/, "\\1and\\2"
|
113
|
+
pezzo.gsub! /(\b)inizia(\b)/, "\\1begin\\2"
|
114
|
+
pezzo.gsub! /(\b)blocco_dato\?(\b)/, "\\1block_given?\\2"
|
115
|
+
pezzo.gsub! /(\b)esci(\b)/, "\\1break\\2"
|
116
|
+
pezzo.gsub! /(\b)considera(\b)/, "\\1case\\2"
|
117
|
+
pezzo.gsub! /(\b)classe([\s]+[A-Z][\w]*)/, "\\1class\\2"
|
118
|
+
pezzo.gsub! /(\b)classe([\s]+)(<<)([\s]+)/, "\\1class\\2\\3\\4"
|
119
|
+
pezzo.gsub! /(\b)definisci([\s]+[^\s]+)/, "\\1def\\2"
|
120
|
+
pezzo.gsub! /(\b)definito\?([\s]+[^\s]+)/, "\\1defined?\\2"
|
121
|
+
pezzo.gsub! /(\b)definita\?([\s]+[^\s]+)/, "\\1defined?\\2"
|
122
|
+
pezzo.gsub! /(\b)esegui(\b)/, "\\1do\\2"
|
123
|
+
pezzo.gsub! /(\b)altrimenti(\b)/, "\\1else\\2"
|
124
|
+
pezzo.gsub! /(\b)altrimenti_se(\b)/, "\\1elsif\\2"
|
125
|
+
pezzo.gsub! /(\b)fine(\b)/, "\\1end\\2"
|
126
|
+
pezzo.gsub! /(\b)assicura(\b)/, "\\1ensure\\2"
|
127
|
+
pezzo.gsub! /(\b)estendi([\s]+[A-Z][\w]*)/, "\\1extend\\2"
|
128
|
+
pezzo.gsub! /(\b)no(\b)/, "\\1false\\2"
|
129
|
+
pezzo.gsub! /(\b)falso(\b)/, "\\1false\\2"
|
130
|
+
pezzo.gsub! /(\b)per(\b)/, "\\1for\\2"
|
131
|
+
pezzo.gsub! /(\b)se(\b)/, "\\1if\\2"
|
132
|
+
pezzo.gsub! /(\b)includi([\s]+[A-Z][\w]*)/, "\\1include\\2"
|
133
|
+
pezzo.gsub! /(\b)modulo([\s]+[A-Z][\w]*)/, "\\1module\\2"
|
134
|
+
pezzo.gsub! /(\b)prossimo(\b)/, "\\1next\\2"
|
135
|
+
pezzo.gsub! /(\b)prossima(\b)/, "\\1next\\2"
|
136
|
+
pezzo.gsub! /(\b)nullo(\b)/, "\\1nil\\2"
|
137
|
+
pezzo.gsub! /(\b)nulla(\b)/, "\\1nil\\2"
|
138
|
+
pezzo.gsub! /(\b)non(\b)/, "\\1not\\2"
|
139
|
+
pezzo.gsub! /(\b)o(\b)/, "\\1or\\2"
|
140
|
+
pezzo.gsub! /(\b)preponi([\s]+[A-Z][\w]*)/, "\\1prepend\\2"
|
141
|
+
pezzo.gsub! /(\b)riesegui(\b)/, "\\1redo\\2"
|
142
|
+
pezzo.gsub! /(\b)recupera(\b)/, "\\1rescue\\2"
|
143
|
+
pezzo.gsub! /(\b)riprova(\b)/, "\\1retry\\2"
|
144
|
+
pezzo.gsub! /(\b)ritorna(\b)/, "\\1return\\2"
|
145
|
+
pezzo.gsub! /(\b)istanza/, "\\1self"
|
146
|
+
pezzo.gsub! /(\b)se_stesso/, "\\1self"
|
147
|
+
pezzo.gsub! /(\b)se_stessa/, "\\1self"
|
148
|
+
pezzo.gsub! /(\b)allora(\b)/, "\\1then\\2"
|
149
|
+
pezzo.gsub! /(\b)si(\b)/, "\\1true\\2"
|
150
|
+
pezzo.gsub! /(\b)vero(\b)/, "\\1true\\2"
|
151
|
+
pezzo.gsub! /(\b)a_meno_che(\b)/, "\\1unless\\2"
|
152
|
+
pezzo.gsub! /(\b)finché(\b)/, "\\1until\\2"
|
153
|
+
pezzo.gsub! /(\b)quando(\b)/, "\\1when\\2"
|
154
|
+
pezzo.gsub! /(\b)mentre(\b)/, "\\1while\\2"
|
155
|
+
pezzo.gsub! /(\b)rilascia(\b)/, "\\1yield\\2"
|
156
|
+
pezzo
|
157
|
+
end
|
158
|
+
|
28
159
|
end
|
29
160
|
|
30
161
|
end
|
data/lib/italian/ruby/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: italian-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Francesco Ballardin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: ruby2ruby
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '2.4'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '2.4'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: bundler
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -113,7 +99,6 @@ files:
|
|
113
99
|
- lib/italian/ruby/core_ext/string.rb
|
114
100
|
- lib/italian/ruby/core_ext/symbol.rb
|
115
101
|
- lib/italian/ruby/core_ext/time.rb
|
116
|
-
- lib/italian/ruby/ruby_parser_patches.rb
|
117
102
|
- lib/italian/ruby/traduttore.rb
|
118
103
|
- lib/italian/ruby/utils/debug.rb
|
119
104
|
- lib/italian/ruby/version.rb
|
@@ -1,67 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RubyParserStuff
|
4
|
-
class Keyword
|
5
|
-
expr_woot = EXPR_FNAME|EXPR_FITEM
|
6
|
-
|
7
|
-
italian_wordlist = [
|
8
|
-
["alias", [:kALIAS, :kALIAS ], expr_woot ],
|
9
|
-
["e", [:kAND, :kAND ], EXPR_BEG ],
|
10
|
-
["inizia", [:kBEGIN, :kBEGIN ], EXPR_BEG ],
|
11
|
-
["esci", [:kBREAK, :kBREAK ], EXPR_MID ],
|
12
|
-
["considera", [:kCASE, :kCASE ], EXPR_BEG ],
|
13
|
-
["classe", [:kCLASS, :kCLASS ], EXPR_CLASS ],
|
14
|
-
["def", [:kDEF, :kDEF ], EXPR_FNAME ],
|
15
|
-
["definisci", [:kDEF, :kDEF ], EXPR_FNAME ],
|
16
|
-
["definito?", [:kDEFINED, :kDEFINED ], EXPR_ARG ],
|
17
|
-
["definita?", [:kDEFINED, :kDEFINED ], EXPR_ARG ],
|
18
|
-
["esegui", [:kDO, :kDO ], EXPR_BEG ],
|
19
|
-
["fai", [:kDO, :kDO ], EXPR_BEG ],
|
20
|
-
["altrimenti", [:kELSE, :kELSE ], EXPR_BEG ],
|
21
|
-
["altrimenti_se", [:kELSIF, :kELSIF ], EXPR_BEG ],
|
22
|
-
["fine", [:kEND, :kEND ], EXPR_END ],
|
23
|
-
["assicura", [:kENSURE, :kENSURE ], EXPR_BEG ],
|
24
|
-
["no", [:kFALSE, :kFALSE ], EXPR_END ],
|
25
|
-
["falso", [:kFALSE, :kFALSE ], EXPR_END ],
|
26
|
-
["per", [:kFOR, :kFOR ], EXPR_BEG ],
|
27
|
-
["se", [:kIF, :kIF_MOD ], EXPR_BEG ],
|
28
|
-
["in", [:kIN, :kIN ], EXPR_BEG ],
|
29
|
-
["modulo", [:kMODULE, :kMODULE ], EXPR_BEG ],
|
30
|
-
["prossimo", [:kNEXT, :kNEXT ], EXPR_MID ],
|
31
|
-
["prossima", [:kNEXT, :kNEXT ], EXPR_MID ],
|
32
|
-
["nullo", [:kNIL, :kNIL ], EXPR_END ],
|
33
|
-
["nulla", [:kNIL, :kNIL ], EXPR_END ],
|
34
|
-
["non", [:kNOT, :kNOT ], EXPR_ARG ],
|
35
|
-
["o", [:kOR, :kOR ], EXPR_BEG ],
|
36
|
-
["rifai", [:kREDO, :kREDO ], EXPR_END ],
|
37
|
-
["riesegui", [:kREDO, :kREDO ], EXPR_END ],
|
38
|
-
["recupera", [:kRESCUE, :kRESCUE_MOD ], EXPR_MID ],
|
39
|
-
["riprova", [:kRETRY, :kRETRY ], EXPR_END ],
|
40
|
-
["ritorna", [:kRETURN, :kRETURN ], EXPR_MID ],
|
41
|
-
["istanza", [:kSELF, :kSELF ], EXPR_END ],
|
42
|
-
["se_stesso", [:kSELF, :kSELF ], EXPR_END ],
|
43
|
-
["se_stessa", [:kSELF, :kSELF ], EXPR_END ],
|
44
|
-
["super", [:kSUPER, :kSUPER ], EXPR_ARG ],
|
45
|
-
["allora", [:kTHEN, :kTHEN ], EXPR_BEG ],
|
46
|
-
["si", [:kTRUE, :kTRUE ], EXPR_END ],
|
47
|
-
["vero", [:kTRUE, :kTRUE ], EXPR_END ],
|
48
|
-
["undef", [:kUNDEF, :kUNDEF ], expr_woot ],
|
49
|
-
["a_meno_che", [:kUNLESS, :kUNLESS_MOD ], EXPR_BEG ],
|
50
|
-
["finché", [:kUNTIL, :kUNTIL_MOD ], EXPR_BEG ],
|
51
|
-
["quando", [:kWHEN, :kWHEN ], EXPR_BEG ],
|
52
|
-
["mentre", [:kWHILE, :kWHILE_MOD ], EXPR_BEG ],
|
53
|
-
["rilascia", [:kYIELD, :kYIELD ], EXPR_ARG ],
|
54
|
-
["INIZIA", [:klBEGIN, :klBEGIN ], EXPR_END ],
|
55
|
-
["FINE", [:klEND, :klEND ], EXPR_END ],
|
56
|
-
["__FILE__", [:k__FILE__, :k__FILE__ ], EXPR_END ],
|
57
|
-
["__LINE__", [:k__LINE__, :k__LINE__ ], EXPR_END ],
|
58
|
-
["__ENCODING__", [:k__ENCODING__, :k__ENCODING__], EXPR_END],
|
59
|
-
].map { |args| KWtable.new(*args) }
|
60
|
-
|
61
|
-
ITALIAN_WORDLIST = Hash[*italian_wordlist.map { |o| [o.name, o] }.flatten]
|
62
|
-
|
63
|
-
def self.keyword str
|
64
|
-
ITALIAN_WORDLIST[str]
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|